【问题标题】:How do you call Win32 API functions from inline assembler?如何从内联汇编器调用 Win32 API 函数?
【发布时间】:2010-05-26 22:10:47
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    __asm 
    { 
        push 9999 
        call Sleep
    } 
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多