某些Win32 API调用实际上是其他库的转发器。例如,KERNEL32.LeaveCriticalSection是NTDLL.RtlLeaveCriticalSection的转发。如何以编程方式找到NTDLL.RtlLeaveCriticalSection的调用实际上转发到KERNEL32.LeaveCriticalSection调用,反之亦然(我试图在我的项目中不使用所谓的系统库NTDLL.DLL并且只使用用户KERNEL32.DLL )
答案 0 :(得分:2)
您可以解析实际的可执行文件kernel32.dll
。阅读PE元数据以了解如何定义导出。
试图避免依赖ntdll
是徒劳的。这是因为kernel32
与ntdll
有很强的依赖关系,所有进程都包含kernel32
。我怀疑你对这些库的作用有点困惑,但你的过程中会有ntdll
。
现在,您可能希望避免调用ntdll
导出的本机API中的函数。这是非常合理的,kernel32
和其他Win32库所做的事情之一就是将您与本机API隔离开来。但是,Win32是在本机API之上实现的。 kernel32
可以使用它。