小编Sem*_*tan的帖子

使用 NASM 进行 Windows x64 汇编编程中未解析的外部符号 printf

我最近一直在尝试学习汇编,并偶然发现了这篇文章。作者使用NASM和微软链接器搭建汇编环境。我按照相同的步骤安装了 NASM。然后我开始编译 hello world 应用程序。编译成功,但是在链接阶段出现错误。错误如下:

hello_world.obj : error LNK2001: unresolved external symbol printf
hello_world_basic.exe : fatal error LNK1120: 1 unresolved external
Run Code Online (Sandbox Code Playgroud)

这是微软链接器(link.exe)的输出。我按照帖子中的描述从开发人员命令提示符运行链接命令,并且因为 hello world 是一个 64 位应用程序,所以我正确设置了 LIB 环境变量(即使帖子中没有提到)。

hello_world.asm

bits 64
default rel

segment .data
   msg db "Hello world!", 0xd, 0xa, 0

segment .text
global main
extern ExitProcess
extern printf




main:
   push    rbp
   mov     rbp, rsp
   sub     rsp, 32

   lea     rcx, [msg]
   call    printf

   xor     rax, rax
   call    ExitProcess

Run Code Online (Sandbox Code Playgroud)

在 windows 命令提示符下编译程序。

nasm -f win64 -o hello_world.obj …

windows assembly x86-64 nasm linker-errors

4
推荐指数
2
解决办法
1213
查看次数

标签 统计

assembly ×1

linker-errors ×1

nasm ×1

windows ×1

x86-64 ×1