c - GetProcAddress 奇怪的返回地址

标签 c windows loadlibrary getprocaddress pointer-address

有人解释下为什么下一段代码会在 ntdll.dll 中返回一个指针吗?

GetProcAddress(LoadLibraryA("kernel32.dll"), "EncodePointer");
GetProcAddress(LoadLibraryA("kernel32.dll"), "DecodePointer");

PS:如果调用kernel32的导出表指向的函数会抛出断点。

最佳答案

这是一个简单的导出转发案例,如 Matt Pietrek 在 MSDN 杂志的一篇优秀文章中所述,An In-Depth Look into the Win32 Portable Executable File Format, Part 2 .

您可以使用 Dependency Walker 或 dumpbin 等工具自行验证这一点。

dumpbin /exports kernel32.dll | grep codePointer

    205   CC          DecodePointer (forwarded to NTDLL.RtlDecodePointer)
    240   EF          EncodePointer (forwarded to NTDLL.RtlEncodePointer)

关于c - GetProcAddress 奇怪的返回地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11022930/

相关文章:

c++ - CPU 时间测量

java - 如何在 Windows 中进行 SNMP 查询?

java模拟

c# - 尝试在 C++ 中加载 COM 包装的 DLL 时出现未处理的异常

c++ - 在 C++ 中禁用自动 DLL 加载

c++ - 如何使用 C 或 C++ 在 Linux 上获取已安装的 True Type 字体列表?

c - 从C中的字符串中检索字母

c - GCC 函数名冲突

c# - StreamWriter 用新文本替换行

windows - Win32 应用程序是否自动链接到 ntdll.dll?