我从未在我的旧linux机器上输入此错误(两者都是英特尔32位),所以我不知所措。
我正在尝试汇编和链接汇编代码(这非常简单并且应该可以工作)但是ld
正在给出错误
rs.o: In function `_start':
(.text+0x11): undefined reference to `eax'
有问题的行是pushl %eax
行。我只需要将0的单个字节推送到堆栈,所以我决定使用xor'd eax
寄存器。但pushb
在使用代码as
与pushb %al
汇总时,如果我尝试使用{{1},则会向我提供“无效后缀或操作数”错误} pushl %eax
汇编很好,但是链接器对我大喊大叫。
这是代码。
as
感谢任何帮助。
答案 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
如果可能,我建议使用推蜡。