将CPU寄存器保存到GCC中的变量

时间:2014-07-06 05:04:48

标签: c gcc assembly x86 inline-assembly

我想获取EAX / EBX / ESP / EIP等中的值并将它们保存在C变量中。例如:

int cEax;
asm("mov cEax,%eax"); ...

1 个答案:

答案 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_addresslabel as values扩展名获取它。

void* getEIP()
{
    return __builtin_return_address(0);
}

void *currentInstruction = getEIP();
currentAddr: void *nextInstruction = &&currentAddr;

如果您想要内联汇编,可以使用this page

中的方式