此函数旨在获取堆栈的起始地址:
unsigned long find_start(void){
__asm__("movq %rsp, %eax");
}
编译时,收到错误:
Error: suffix or operands invalid for `movq'
答案 0 :(得分:4)
movq
是一个需要64位操作数的指令。 rsp
是64位寄存器,而eax
是32位寄存器。
也许尝试rax
?
答案 1 :(得分:1)
%eax
是32位GP寄存器。但是你试图用它进行64位移动。它应该是%rax
。
答案 2 :(得分:1)
如上所述,您需要使用64位寄存器%rax。
关于每次堆栈指针不同的事实,我怀疑你是否看到了 address space layout randomization 的结果,并实时地看到了...