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

时间:2010-05-26 22:10:47

标签: c visual-studio-2008 inline-assembly kernel32

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

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

1 个答案:

答案 0 :(得分:6)

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

__asm 
{ 
    push 9999 
    call Sleep
} 

Win32中的函数没有固定的地址(无论“DLL Export Viewer”可能显示什么)。函数在加载时由 name ordinal 链接(由Windows PE加载程序),并且不在固定地址。实际上,函数的实际地址可以在Windows版本,同一版本的Windows中的子版本,机器之间,甚至可能从一个程序运行到下一个程序之间发生变化。

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