我正在使用nasm来编译以下程序集.但是,代码在Windows下的控制台中崩溃.
C:\> nasm -f win32 test.asm -o test.o
C:\> ld test.o -o test.exe
section .data
msg db 'Hello world!', 0AH
len equ $-msg
section .text
global _WinMain@16
_WinMain@16:
mov edx, len
mov ecx, msg
mov ebx, 1
mov eax, 4
int 80h
mov ebx, 0
mov eax, 1
int 80h
Run Code Online (Sandbox Code Playgroud)
根据这篇文章.该main功能在Windows下不可用,必须替换为WinMain.
因此,如果您的入口点是_start或main,则应将其更改为_WinMain@16并将ret过程结束时更改为ret 16:
我的工作范例:
section .text
global _WinMain@16
_WinMain@16:
mov eax, 0 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Netwide Assembler学习汇编语言.
在教程中,我看到每个函数名称的末尾都有一个,例如:@n
CALL _GetStdHandle@4
CALL _WriteFile@20
CALL _ExitProcess@4
Run Code Online (Sandbox Code Playgroud)
这是什么意思?@n
(它似乎是函数名称的一部分,因为error LNK2001: unresolved external symbol如果我修改或删除该部分,我会收到错误,但显然它不是它生成的C或C++函数名称的一部分.它来自哪里? )