我正在尝试在 C(GCC 4.6.3、x86(64 位 CPU)、Ubuntu 12.04 64 位)中进行一些汇编调用,以将寄存器值清零并设置堆栈指针,并最终调用跳转指令。
这就是我得到的:
asm("xor %eax, %eax");
asm("xor %ebx, %ebx");
asm("xor %ecx, %ecx");
asm("xor %edx, %edx");
asm("xor %cs, %cs");
asm("xor %ds, %ds");
asm("xor %es, %es");
asm("xor %fs, %fs");
asm("xor %gs, %gs");
asm("xor %ss, %ss");
asm("xor %esi, %esi");
asm("xor %edi, %edi");
asm("xor %ebp, %ebp");
asm("xor %esp, %esp");
asm("xor %cr0, %cr0");
asm("xor %cr1, %cr1");
asm("xor %cr2, %cr2");
asm("xor %cr3, %cr3");
asm("xor %cr4, %cr4");
asm("xor %cr8, %cr8");
Error: operand type mismatch for 'xor'
当我尝试编译时,它表示除了前四个之外的所有寄存器。基本上,我需要将所有寄存器内容归零(不知道该怎么做)。显然有一个rdx
关键重要性的登记册?但是我在网上看了一圈,找不到清单。
接下来,我需要将堆栈指针设置为特定的内存位置。我怎样才能做到这一点?
最后,我需要调用一条jump
指令并转到特定的内存位置。我怎样才能做到这一点?
感谢您的任何帮助!