如何从内联汇编程序调用Win32 API函数?

Joe*_*bra 2 c inline-assembly visual-studio-2008 kernel32

有人请告诉我这个代码有什么问题我只是从kernel32.dll调用Sleep函数有什么问题?我正在使用Visual Studio 2008.任何帮助都将不胜感激.非常感谢你.

__asm
{
    mov eax, 77e2ef66h
    push 9999
    call eax
}
Run Code Online (Sandbox Code Playgroud)

Gre*_*ill 6

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

__asm 
{ 
    push 9999 
    call Sleep
} 
Run Code Online (Sandbox Code Playgroud)

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

(免责声明:自从我这么做以来已经很长时间了,所以上面代码示例的细节无疑是错误的,但我知道你绝对不需要使用魔术数字.)