Windows x86程序集入口点错误

时间:2016-11-19 10:01:16

标签: windows assembly x86 portable-executable entry-point

我在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一段时间,如果我有更多的经验可能会回到这个问题。

0 个答案:

没有答案