我使用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
根据这篇文章,在Windows下不支持main
函数,需要用WinMain
来替代。
因此,如果你的入口点是_start
或main
,应将其更改为_WinMain@16
,并将过程末尾的ret
更改为ret 16
:
以下是我的工作示例:
section .text
global _WinMain@16
_WinMain@16:
mov eax, 0
ret 16