如何在 Win10 中将 NASM 中的 obj 文件与 link.exe 链接

Seb*_*123 2 windows assembly nasm

我在 NASM 中有以下代码:

;sleep.asm
[SECTION .text]

global _start


_start:
    xor eax,eax
    mov ebx, 0x00016630 ;address of Sleep
    mov ax, 5000        ;pause for 5000ms
    push eax
    call ebx        ;Sleep(ms);
Run Code Online (Sandbox Code Playgroud)

其中0x00016630是Sleep函数的地址(取自kernel32.dll的dumpbin)。

我想制作可执行文件以在 Win 10 中运行。我所做的是:

nasm -f win32 sleep.asm
Run Code Online (Sandbox Code Playgroud)

并得到sleep.obj结果。

所以现在我必须链接它。我选择 link.exe 不幸的是使用以下命令

link sleep.obj /entry:_start /subsystem:windows /nodefaultlib
Microsoft (R) Incremental Linker Version 14.00.24215.1
Copyright (C) Microsoft Corporation.  All rights reserved.

LINK : error LNK2001: unresolved external symbol __start
sleep.exe : fatal error LNK1120: 1 unresolved externals
Run Code Online (Sandbox Code Playgroud)

有人可以帮助如何解决这个问题吗?

Dav*_*zer 6

链接器将自动在您在命令行上传递的任何内容前面添加一个下划线/entry。试试这个:

link sleep.obj /entry:start /subsystem:windows /nodefaultlib
Run Code Online (Sandbox Code Playgroud)