我在x86程序集中编写了一个用于学习目的的测试程序,使用 NASM 作为汇编程序, MinGW32 (ld)作为linkerW。 我正在使用Windows 10。
section .text
global my_start
my_start:
nop
nop
nop
nop
jmp my_start
我使用以下命令进行汇编:
nasm -f win32 -l main.lst main.asm
以下命令用于链接:
ld -nostdlib -nostartfiles -s -o main.exe -e my_start main.obj
现在,如果我运行该程序,我会收到一个sgmentation错误。 要找出我使用 GDB 进行调试的原因,并发现Windows正在执行我的可执行文件,在 DOS标题正在铺设的文件开头。 所以Windows试图执行幻数“MZ”(4d 5a)并跟随字节作为汇编程序指令。
所以,现在我很困惑,为什么会发生这种情况,因为我指定了一个入口点( -e my_start ),然后是有效的x86汇编程序指令。
为什么我的可执行文件开始在DOS标题处执行而不是在我的代码段中指定的入口点? 我怎么解决这个问题?
修改
我现在尝试使用GoLink并使用此链接器一切正常:
GoLink.exe main.obj / entry my_start
我还比较了可选标题的入口点,两者都相等。 但是比较两个文件有很多不同之处,所以我不知道到底出了什么问题,所以我会坚持使用GoLink一段时间,如果我有更多的经验可能会回到这个问题。