2

有人能告诉我这段代码有什么问题吗?我只是从 kernel32.dll 调用睡眠函数有什么问题吗?我正在使用 Visual Studio 2008。任何帮助将不胜感激。非常感谢。

__asm
{
    mov eax, 77e2ef66h
    push 9999
    call eax
}
4

1 回答 1

6

你从哪里得到那个神奇的数字,77e2ef66h?通常,如果您从内联汇编程序调用 Win32 API 函数,您会执行以下操作:

__asm 
{ 
    push 9999 
    call Sleep
} 

Win32 中的函数没有固定地址(无论您的“DLL 导出查看器”可能显示什么)。函数在加载时(由 Windows PE 加载程序)按名称序号链接,并且不位于固定地址。事实上,函数的实际地址可以在不同版本的 Windows、同一版本的 Windows 中的子版本之间、从机器到机器、甚至可能从您的程序的一次运行到下一次运行之间发生变化。

(免责声明:我已经很久没有这样做了,所以上面代码示例的细节无疑是错误的,但我知道你绝对不需要使用幻数。)

于 2010-05-26T22:15:45.753 回答