相关疑难解决方法(0)

在windows程序集中使用nasm的Hello world

我正在使用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.

因此,如果您的入口点是_startmain,则应将其更改为_WinMain@16并将ret过程结束时更改为ret 16:

我的工作范例:

section .text       
 global _WinMain@16       

_WinMain@16:       
 mov eax, 0 …
Run Code Online (Sandbox Code Playgroud)

windows assembly mingw nasm

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

每个函数名后的@n("at符号")是什么?

我正在尝试使用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++函数名称的一部分.它来自哪里? )

assembly nasm

2
推荐指数
1
解决办法
487
查看次数

标签 统计

assembly ×2

nasm ×2

mingw ×1

windows ×1