我想获取EAX / EBX / ESP / EIP等中的值并将它们保存在C变量中。例如:
int cEax;
asm("mov cEax,%eax"); ...
答案 0 :(得分:3)
您可以使用此
register int eax asm("eax");
register int eax asm("ebx");
register int eax asm("esp");
//...
int cEax = eax;
int cEbx = ebx;
int cEsp = esp;
//...
您也可以像处理任何其他变量一样使用表达式中的寄存器,或者直接使用该寄存器的值而不分配给另一个变量。
在没有内联汇编的情况下获取eip会更棘手,但在gcc中,您可以使用__builtin_return_address
或label as values
扩展名获取它。
void* getEIP()
{
return __builtin_return_address(0);
}
void *currentInstruction = getEIP();
currentAddr: void *nextInstruction = &¤tAddr;
如果您想要内联汇编,可以使用this page
中的方式