Sma*_*vić 4 windows x86 assembly mingw nasm
我对以下代码有问题。
extern printf
global _main
main:
push msg
call printf
ret
msg db "Hello world",0
Run Code Online (Sandbox Code Playgroud)
我使用 NASM 组装它,nasm -fwin32 test.asm然后使用 链接它ld test.obj。它告诉我“ test.obj:test.asm:(text+0x6): undefined reference to 'printf'”
如何将我的文件链接到标准 C 库?我有最新的 MinGW 的 ld。
汇编代码:
nasm -fwin32 test.asm
Run Code Online (Sandbox Code Playgroud)
Microsoft 将使用 cdecl 调用约定为函数添加下划线前缀。
为了与 C 调用约定相匹配,printf应该是_printf.
这同样适用_main于代替main。
并链接到:
ld test.obj -lmsvcrt -entry=_main -subsystem=console -o test.exe
这里-entry命令行选项用于调用ld来指定程序的入口点。
然后使用-l选项将msvcrt库传递给ld链接器,否则您将收到错误消息(undefined reference to `printf'),这意味着链接器在 NASM 生成的指定目标文件中没有找到符号 printf 。
这是完整的源代码:
global _main
extern _printf
section .text
_main:
push msg
call _printf
add esp, 4 ;adjust the stack
ret
msg db "Hello world",0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4242 次 |
| 最近记录: |