如何在windows中用C查找特定模块的状态和路径?

逆向工程 调试 C 风袋 内核模式 司机
2021-06-16 08:49:46

如何在windows中用C查找特定模块的状态和路径?

如windbg lm(列出加载的模块)

kd> lm m cdd
start    end       module   name
93ae0000 93afe000  cdd          (deferred)

我需要启动模块(. sys)但在 C 代码上

谢谢

1个回答

VirtualQueryEx() 如果您想要目标进程的内存映射,这是要走的路。

但是,如果您只需要有关模块的信息,则可以从目标进程的 PEB 中提取它。

使用 获取 PEB 地址NtQueryInformationProcess,使用ProcessBasicInformationProcessInformationClass,所以它写了一个PROCESS_BASIC_INFORMATION. 该结构有一个PebBaseAddress字段,可以为您提供 PEB 地址。

使用这个 PEB 地址,访问该PPEB_LDR_DATA Ldr字段,它包含一个名为的列表InMemoryOrderModuleList,您可以使用它来遍历进程的所有模块。

是该技术的演示。

输出 :

modules.exe    : 0x00400000 -> 0x00422fff (C:\Users\Spl3en\Desktop\modules.exe)
ntdll.dll      : 0x81d20000 -> 0x81ec8fff (C:\Windows\SYSTEM32\ntdll.dll)
KERNEL32.DLL   : 0x7f660000 -> 0x7f798fff (C:\Windows\system32\KERNEL32.DLL)
KERNELBASE.dll : 0x7f450000 -> 0x7f55dfff (C:\Windows\system32\KERNELBASE.dll)
msvcrt.dll     : 0x7f970000 -> 0x7fa16fff (C:\Windows\system32\msvcrt.dll)