【问题标题】:How could I go about loading functions from NTDLL without linking against it or any other DLLs?我如何才能在不链接 NTDLL 或任何其他 DLL 的情况下从 NTDLL 加载函数?
【发布时间】:2021-04-25 15:23:41
【问题描述】:

我一直在尝试仅使用 NTDLL 导出的加载器函数从 Windows 系统 DLL 加载函数。这按预期工作。为了好奇和更好地了解基于 NT 的系统中的进程结构,我开始尝试通过执行以下步骤从 NTDLL 加载函数:

  1. 从 gs:[60h] 加载进程的 PEB
  2. 根据加载器遍历加载到进程中的模块,找到NTDLL的基地址
  3. 解析 NTDLL 的 PE 头
  4. 尝试解析导出表找到LdrLoadDllLdrGetDllHandleLdrGetProcedureAddress

这在第 4 步失败。在调试器(VS2019 和 WinDbg 预览版)中单步执行后,似乎我尝试的偏移量产生了一个无效结构,当我的代码比较当前时会导致访问冲突我正在搜索的函数名称之一。我的代码正在 Windows 10 Pro build 21364 的 64 位副本上编译和运行。请注意,我使用的是 my own header,其中包含用于此的结构的定义(这些定义来自 winnt.hhere ) 因为 Windows 标头与我的其余代码并不能很好地配合。尝试执行此操作的函数是 here。作为记录,这是尝试实现我自己的 libc 的一部分(再次,为了好奇)。调用函数的代码是here。非常感谢您对此提供任何帮助。

【问题讨论】:

    标签: function dynamic-linking portable-executable ntdll windows-nt


    【解决方案1】:

    没关系,原来我对所使用的结构的详细定义已经过时了。我在https://vergiliusproject.com 找到了更好(更新)的定义。

    【讨论】:

      猜你喜欢
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-24
      相关资源
      最近更新 更多