我一直在關注this tutorial以便在Linux上進行彙編。Linux上的NASM Hello World:對'main'的未定義引用
section .text
global _start ;must be declared for linker (ld)
_start:
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptior
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x080 ;call kernel
section .data
msg db 'Hello, world!', 0xa ;the string
len equ $ - msg ;length of the string
我在編譯它時遇到了問題。我環顧四周,發現(在SO),我應該編譯如下:
nasm -f elf64 hello.asm
gcc -o hello hello.o
,但我一直從GCC收到此錯誤:
hello.o: In function `_start':
hello.asm:(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o:(.text+0x0): first defined here
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
(注:我運行Debian Linux在64位英特爾i7上)
你需要用'GCC -m32 -nostdlib -o你好hello.o輪候冊,-melf_i386'否則鏈接將失敗或產生一個非工作的可執行文件。 – 2014-11-21 01:02:35
我不知道我明白。爲什麼我想要鏈接器從'elf64-x86-64'目標文件生成'elf32-i386'可執行文件? – xbug 2014-11-21 01:17:41