这个声明在x86-64上有什么问题?

时间:2011-04-17 03:52:02

标签: c linux assembly x86-64

此函数旨在获取堆栈的起始地址:

unsigned long find_start(void){
        __asm__("movq %rsp, %eax");
}

编译时,收到错误:

Error: suffix or operands invalid for `movq'

3 个答案:

答案 0 :(得分:4)

movq是一个需要64位操作数的指令。 rsp是64位寄存器,而eax是32位寄存器。

也许尝试rax

答案 1 :(得分:1)

%eax是32位GP寄存器。但是你试图用它进行64位移动。它应该是%rax

答案 2 :(得分:1)

如上所述,您需要使用64位寄存器%rax。

关于每次堆栈指针不同的事实,我怀疑你是否看到了 address space layout randomization 的结果,并实时地看到了...