ld:对'eax'的未定义引用

时间:2012-10-06 19:46:05

标签: linux assembly x86 ld

我从未在我的旧linux机器上输入此错误(两者都是英特尔32位),所以我不知所措。

我正在尝试汇编和链接汇编代码(这非常简单并且应该可以工作)但是ld正在给出错误

rs.o: In function `_start':
(.text+0x11): undefined reference to `eax'

有问题的行是pushl %eax行。我只需要将0的单个字节推送到堆栈,所以我决定使用xor'd eax寄存器。但pushb在使用代码aspushb %al汇总时,如果我尝试使用{{1},则会向我提供“无效后缀或操作数”错误} pushl %eax汇编很好,但是链接器对我大喊大叫。

这是代码。

as

感谢任何帮助。

4 个答案:

答案 0 :(得分:5)

您的程序集中有错误:$eax应该是%eax

movl $eax, %ebx  #move socket fd to check echo $?

答案 1 :(得分:3)

我可以想象它是

movl $eax, %ebx  #move socket fd to check echo $?

线。

相反,它应该是

movl %eax, %ebx  #move socket fd to check echo $?

...

答案 2 :(得分:3)

movl $eax, %ebx

有问题。它会尝试将名为eax的符号的地址加载到ebx,,这不是您想要的。将错字改为

movl %eax, %ebx

告诉它做你真正想要的事。

答案 3 :(得分:1)

除了语法错误之外,问题是你无法在堆栈上推送字节。 看看

http://coding.derkeiler.com/Archive/Assembler/comp.lang.asm.x86/2006-03/msg00253.html

http://www.rz.uni-karlsruhe.de/rz/docs/VTune/reference/vc266.htm

如果可能,我建议使用推蜡。