windows - GetProcAddress 不返回 LoadLibraryA 的真实地址

标签 windows winapi assembly dll loadlibrary

DWORD dwLoadLibrary = (DWORD)GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA");

当我转到 OllyDbg 中的返回地址时,我可以看到该地址指向跳转到 LoadLibraryA 的真实地址的代码。我想获得 LoadLibraryA 的真实地址,它不会改变,因为 kernel32.dll 在每个进程中的相同位置加载,而且我想知道为什么 GetProcAddress 不返回真实地址。

enter image description here

最佳答案

您正在获取 kernel32.LoadLibraryA 的“真实”地址,因为 GetProcAddress() 返回真实地址。只是 kernel32.LoadLibrayA 的实现从 kernel32.dll 移动到了 kernelbase.dll,结果 kernel32 .LoadLibraryA 仅包含一条指令:

jmp dword ptr[kernelbase.LoadLibraryA]

如果您查看 kernel32.dll 中的更多函数,其中许多函数也具有相同的模式:

kernel32.somefunc:
    jmp [kernelbase.somefunc]

关于windows - GetProcAddress 不返回 LoadLibraryA 的真实地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44164344/

相关文章:

c++ - 在 Windows 中编译 Apache Thrift 服务

windows - 在 Windows 上升级到 Mercurial 更高版本 : Cannot clone a repo: get abort message because cannot find web. cacerts

python - 在 Python 应用程序 (Windows) 中创建小型转储

gcc - FASM:从 GCC 调用切线

windows - 在 wininet.h 中,SECURITY_SET_MASK 的用途是什么?

c - 如何使用 OpenGL 绘制冰淇淋

winapi - Windows 10 : GetSysColor() does not get dark ui color theme

linux - g++: 错误:无法识别的命令行选项 ‘--32’ ;你是说 ‘-m32’ 吗?

assembly - 在gdb中找不到.bss节中定义的变量名

windows - 使用 CMD 从 Windows 凭据管理器检索密码