【发布时间】:2014-11-16 15:17:15
【问题描述】:
我正在尝试在 linux 服务器上编译一个 asm 程序。我是编写 asm 程序的新手,但我按照学校的教程做了他们所说的一切,但没有成功。
这是我的 hello.asm 文件。
SECTION .data
msg: db "Hello World",10
len: equ $-msg
SECTION .text
global main
main:
mov edx,len
mov ecx,msg
mov ebx,1
mov eax,4
int 0x80
mov ebx,0
mov eax,1
int 0x80
我使用命令行nasm -f elf hello.asm 编译这个文件,它完全可以正常工作并生成一个目标文件。问题是,当我尝试ld hello.o 时,它说它无法读取文件中的符号并且文件格式错误。
谁能帮助我并告诉我如何编译一个 .asm 文件以便它可以运行?
【问题讨论】:
-
如果链接到
gcc -o hello hello.o会怎样? -
它给了我同样的错误,并告诉我 ld 的返回状态为 1。
-
尝试:
ld -e main -m elf_i386 hello.o或gcc -m32 hello.o。uname -smr; dpkg --print-architecture; dpkg --print-foreign-architectures(一行命令)说什么? -
您是否有机会尝试将 elf32 目标文件与 64 位链接器链接?在这种情况下,您可以通过将
-m <emulation>传递给ld(其中<emulation>是您在运行ld -V时获得的名称之一)来设置适当的链接器仿真。