从 winmm.dll 调用任何函数都会导致异常错误 (0xc0000005)。
format PE64 GUI 5.0
entry start
include 'win64a.inc'
section '.code' code readable executable
start:
invoke mixerGetNumDevs
invoke ExitProcess
section '.idata' import data readable
library kernel, 'kernel32.dll', wmm, 'winmm.dll'
import kernel, ExitProcess, 'ExitProcess'
import wmm, mixerGetNumDevs, 'mixerGetNumDevs'
如果以 32 位模式编译,则一切正常。 怎么了?
我回答我自己的问题: 启动程序时需要对齐堆栈:sub rsp, 08h,这个没做。
开始: 子 rsp,08h 调用mixerGetNumDevs 调用 ExitProcess