如何在windows中用C查找特定模块的状态和路径?
如windbg lm(列出加载的模块)
kd> lm m cdd
start end module name
93ae0000 93afe000 cdd (deferred)
我需要启动模块(. sys)但在 C 代码上
谢谢
如何在windows中用C查找特定模块的状态和路径?
如windbg lm(列出加载的模块)
kd> lm m cdd
start end module name
93ae0000 93afe000 cdd (deferred)
我需要启动模块(. sys)但在 C 代码上
谢谢
VirtualQueryEx()
如果您想要目标进程的内存映射,这是要走的路。
但是,如果您只需要有关模块的信息,则可以从目标进程的 PEB 中提取它。
使用 获取 PEB 地址NtQueryInformationProcess
,使用ProcessBasicInformation
为ProcessInformationClass
,所以它写了一个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)