【发布时间】:2020-05-05 20:45:13
【问题描述】:
我想使用 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: нарушение прав доступа при исполнении по адресу 0x000000
如果翻译:
program.exe 中地址 0x0000000000001108 处的异常:0xC0000005:执行地址 0x0000000000001108 时发生访问冲突。
【问题讨论】:
-
也许
invoke做的不对。也许它出于某种原因假设为 32 位。也许它假设堆栈对齐。尝试在main中添加push rbp的第一件事。无论如何,在开始使用宏之前,您应该学会手动编写代码,甚至要确定每个宏的实际作用。
标签: windows assembly windows-10 64-bit fasm