0

I have never encounted this error on my old linux machine(both are intel 32bit) so I am at a loss.

I am trying to assemble and link assembly code (which is very simplistic and should work) but ld is giving the error

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

the line in question is the pushl %eax line. I only need to push a single byte of 0 to the stack so I decided to use the xor'd eax register. but pushb gives me an "invalid suffix or operands for push" error while assembling with as using the code pushb %al and if I try to use pushl %eax as assembles fine but the linker yells at me.

here is the code.

.section .data

.section .text

.global _start

_start:

xorl %eax, %eax

#sys_socketcall(int call, __user *args)
#sys_socket(int domain, int type, int protocol)

pushl %eax          #protocol: 0
pushl $1            #type: SOCK_STREAM
pushl $2            #domain: AF_INET
movL $1, %ebx       #sys_socket
movl $102, %eax    #sys_socketcall
int $0x80

movl $eax, %ebx  #move socket fd to check echo $?
movl $1, %eax    #exit
int $0x80

any help is appreciated.

4

4 に答える 4

5

アセンブリにエラーがあります:$eaxにある必要があり%eaxます

movl $eax, %ebx  #move socket fd to check echo $?
于 2012-10-06T19:50:59.410 に答える
3
movl $eax, %ebx

が問題です。ebxという名前のシンボルeaxのアドレスを読み込もうとしますが、これは望んでいるものではありません。そのタイプミスを

movl %eax, %ebx

あなたが本当にやりたいことをするように伝えます。

于 2012-10-06T19:52:45.443 に答える
3

私はそれが

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

ライン。

代わりに、

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

...

于 2012-10-06T19:50:30.190 に答える
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

可能であれば、pushw %ax を使用することをお勧めします。

于 2012-10-06T19:59:25.093 に答える