如何解决如何在不链接 NTDLL 或任何其他 DLL 的情况下从 NTDLL 加载函数?
我一直在试验从 Windows 系统 DLL 加载函数,只使用 NTDLL 导出的加载器函数。这按预期工作。出于好奇并更好地了解基于 NT 的系统中的进程结构,我开始尝试通过执行以下步骤从 NTDLL 加载函数:
- 从gs加载进程的PEB:[60h]
- 根据加载器遍历加载到进程中的模块,找到NTDLL的基地址
- 解析NTDLL的PE头
- 尝试解析导出表,找到
LdrLoadDll
、LdrGetDllHandle
和LdrGetProcedureAddress
这在第 4 步失败。在调试器(VS2019 和 WinDbg 预览版)中逐步执行后,似乎我尝试过的偏移量产生了无效结构,当我的代码比较当前函数名称到我正在搜索的函数名称之一。我的代码正在 Windows 10 Pro build 21364 的 64 位副本上编译和运行。请注意,我使用的 my own header 包含用于此的结构的定义(这些定义来自 winnt.h
和 here),因为 Windows 标头与我的其余代码并不真正兼容。尝试执行此操作的函数是 here。为了记录,这是尝试实现我自己的 libc 的一部分(再次,为了好奇)。调用函数的代码是here。非常感谢您对此的任何帮助。
解决方法
没关系,事实证明我已经过时了我正在使用的结构的详细定义。我在 https://vergiliusproject.com 找到了更好(更新)的定义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。