Function 我如何从NTDLL加载函数而不与它或任何其他DLL链接?

Function 我如何从NTDLL加载函数而不与它或任何其他DLL链接?,function,dynamic-linking,portable-executable,ntdll,windows-nt,Function,Dynamic Linking,Portable Executable,Ntdll,Windows Nt,我一直在尝试仅使用NTDLL导出的加载程序函数从Windows系统DLL加载函数。这正如预期的那样有效。为了好奇和更好地理解基于NT的系统中的进程结构,我开始尝试通过执行以下步骤从NTDLL加载函数: 从gs加载过程的PEB:[60h] 根据加载程序对加载到进程中的模块进行迭代,以查找NTDLL的基址 解析NTDLL的PE头 尝试分析导出表以查找LdrLoadDll、LdrGetDllHandle和LdrGetProcedureAddress 这在步骤4失败。在调试器(VS2019和WinDbg

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

  • 从gs加载过程的PEB:[60h]
  • 根据加载程序对加载到进程中的模块进行迭代,以查找NTDLL的基址
  • 解析NTDLL的PE头
  • 尝试分析导出表以查找
    LdrLoadDll
    LdrGetDllHandle
    LdrGetProcedureAddress

  • 这在步骤4失败。在调试器(VS2019和WinDbg预览)中单步执行后,似乎我尝试的偏移量产生了一个无效的结构,当我的代码将当前函数名与我正在搜索的函数名进行比较时,该结构会导致访问冲突。我的代码正在Windows 10 Pro build 21364的64位副本上编译和运行。请注意,我使用的是包含用于此的结构定义的(这些定义来自
    winnt.h
    和),因为Windows标题与我的其余代码不太协调。尝试这样做的函数是。作为记录,这是实现我自己的libc的一部分尝试(同样,出于好奇)。调用函数的代码是。非常感谢您对这方面的任何帮助。

    不过,事实证明,我使用的结构的详细定义已经过时了。我在网站上找到了更好(更及时)的定义