我在做一个项目,需要非本地windows2003用crash把full memory给dump下来,然后看目标进程一些信息,比如我想看有些进程的cmdline,我发现peb里面都能看到。
但是,我自己在自己xp机器上做实验的时候,发现有些问题,在自己机器上windows xp sp3用本地内核调试,却无法得到完整的peb。
比如下面,无法看到peb里面的ldr和CommandLine!
我用tlist在xp上能看到每个进程的CommandLine,里面使用的是NtQueryInformationProcess,和这个不太一样。
请教下,这个是怎么回事?
lkd> !process 0 0
这里我找到目标进程后
lkd> .process 89211918Implicit process is now 89211918lkd> !pebUnable to read selector for PCR for processor 0PEB at 7ffd9000error 1 InitTypeRead( nt!_PEB at 7ffd9000)...lkd> !peb 7ffd9000PEB at 7ffd9000error 1 InitTypeRead( nt!_PEB at 7ffd9000)...lkd> .process 89581b50Implicit process is now 89581b50lkd> !pebUnable to read selector for PCR for processor 0PEB at 7ffdf000 InheritedAddressSpace: Yes ReadImageFileExecOptions: Yes BeingDebugged: Yes ImageBaseAddress: 00064000 Ldr 00000000 *** unable to read Ldr table at 00000000 SubSystemData: 00000000 ProcessHeap: 7ffdf000 ProcessParameters: 00001e00 WindowTitle: '< Name not readable >' ImageFile: '< Name not readable >' CommandLine: '< Name not readable >' DllPath: '< Name not readable >'
可以尝试在.process命令中加/p选项,但这种情况最好使用系统dump或者双机调试,因为LKD时,用户态空间随时都可能切换...
哦,谢谢了,应该是用户态空间被切换了.