Fasm x64 消息框
Fasm x64 MsgBox
我想使用 Fasm 通过简单 MsgBox
编译 x64 应用程序。我已经编写了代码,它编译成功,但是当我 运行 它没有显示任何内容,程序就结束了。怎么了?
format PE64 GUI 4.0
entry main
include 'win64a.inc'
main:
invoke MessageBox,NULL,'Hello, World!','Fasm message box:',MB_OK
invoke ExitProcess,0
library kernel32,'kernel32.dll',\
user32,'user32.dll'
include 'api/kernel32.inc'
include 'api/user32.inc'
如果尝试在 VS2017 中调试,我会得到一个异常:
Вызвано исключение по адресу 0x0000000000001108 в program.exe: 0xC0000005: нарушение прав доступа при исполнении по адресу 0x0000000000001108.
如果翻译:
Exception at address 0x0000000000001108 in program.exe: 0xC0000005: access violation when executing address 0x0000000000001108.
我将其标记为社区 wiki,以便其他人可以填写其工作原理的描述。值得注意的是:
.idata
进口部分
.text
可执行部分
sub rsp, 8
(或类似 push rbp
的等效项)用于根据 Windows x86-64 调用约定进行堆栈对齐。
代码:
include 'win64a.inc'
format PE64 GUI 4.0
entry main
section '.text' code readable executable
main:
sub rsp, 8
invoke MessageBox,NULL,'Hello, World!','Fasm message box:',MB_OK
invoke ExitProcess,0
;section '.data' data readable writeable
; Data here
section '.idata' import data readable
library kernel32,'kernel32.dll',\
user32,'user32.dll'
include 'api/kernel32.inc'
include 'api/user32.inc'
我想使用 Fasm 通过简单 MsgBox
编译 x64 应用程序。我已经编写了代码,它编译成功,但是当我 运行 它没有显示任何内容,程序就结束了。怎么了?
format PE64 GUI 4.0
entry main
include 'win64a.inc'
main:
invoke MessageBox,NULL,'Hello, World!','Fasm message box:',MB_OK
invoke ExitProcess,0
library kernel32,'kernel32.dll',\
user32,'user32.dll'
include 'api/kernel32.inc'
include 'api/user32.inc'
如果尝试在 VS2017 中调试,我会得到一个异常:
Вызвано исключение по адресу 0x0000000000001108 в program.exe: 0xC0000005: нарушение прав доступа при исполнении по адресу 0x0000000000001108.
如果翻译:
Exception at address 0x0000000000001108 in program.exe: 0xC0000005: access violation when executing address 0x0000000000001108.
我将其标记为社区 wiki,以便其他人可以填写其工作原理的描述。值得注意的是:
.idata
进口部分.text
可执行部分sub rsp, 8
(或类似push rbp
的等效项)用于根据 Windows x86-64 调用约定进行堆栈对齐。
代码:
include 'win64a.inc'
format PE64 GUI 4.0
entry main
section '.text' code readable executable
main:
sub rsp, 8
invoke MessageBox,NULL,'Hello, World!','Fasm message box:',MB_OK
invoke ExitProcess,0
;section '.data' data readable writeable
; Data here
section '.idata' import data readable
library kernel32,'kernel32.dll',\
user32,'user32.dll'
include 'api/kernel32.inc'
include 'api/user32.inc'