【问题标题】:Getting The Memory Address Of A DLL Function获取 DLL 函数的内存地址
【发布时间】:2014-02-18 11:32:24
【问题描述】:

我想知道是否有可能,使用 C 和 WindowsAPI,是否有一个函数可以让我获得 dll 中函数的 32 位(我认为)内存地址。例如。如何在 kernel32.dll 中获取 Beep() 的 32 位 $xxxxxxxx 地址。其次,如果我在汇编中使用内存地址而不是函数名,是否可以避免链接。例如

mov eax, $xxxxxxxx

而不是

mov eax, Beep

【问题讨论】:

    标签: c windows winapi memory dll


    【解决方案1】:

    是的。在 MSDN 上查找“GetProcAddress”。

    【讨论】:

    • IMO,这是避免静态链接的最正确方法。这是“旧”应用程序无需链接到较新的操作系统 API 库即可访问新操作系统功能的标准方式。
    【解决方案2】:

    这个程序会打印kernel32中Beep的地址:

    #include <windows.h>
    #include <stdio.h>
    
    int main(void)
    {
        HMODULE hMod = GetModuleHandle("kernel32.dll");
        void* fn = GetProcAddress(hMod, "Beep");
        printf("%p", fn);
    }
    

    为了简单起见,我省略了错误检查。在真正的程序中你不会这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多