Re: 请教关于R3与R0地址转换问题

《软件调试》答疑

请教关于R3与R0地址转换问题


小菜一号 2011-05-11, 19:17 下午
论坛的各位大大好,张老师好
在学习软件调试的过程中遇到了些问题,期待各位大大的解答
环境:
干净的 xp sp3 windbg 本地内核调试中..... 

现象:
lkd>!process 0 0
...省略无关内容若干...
PROCESS 892f1ab0 SessionId: 0 Cid: 0f7c Peb: 7ffdd000 ParentCid: 0638
DirBase: 0acc0620 ObjectTable: e170f938 HandleCount: 52.
Image: NOTEPAD.EXE
...省略无关内容若干...
lkd>.process 892f1ab0 
lkd>!peb
peb at 7ffda000
error 1 InitTypeRead( nt!_PEB at 7ffda000)...
lkd> dt nt!_PEB 7ffda000
   +0x000 InheritedAddressSpace : ??
   +0x001 ReadImageFileExecOptions : ??
   +0x002 BeingDebugged    : ??
   +0x003 SpareBool        : ??
   +0x004 Mutant           : ???? 
   +0x008 ImageBaseAddress : ???? 
   +0x00c Ldr              : ???? 
   +0x010 ProcessParameters : ???? 
   +0x014 SubSystemData    : ???? 
   +0x018 ProcessHeap      : ???? 
   +0x01c FastPebLock      : ???? 
   +0x020 FastPebLockRoutine : ???? 
   +0x024 FastPebUnlockRoutine : ???? 
   +0x028 EnvironmentUpdateCount : ??
   +0x02c KernelCallbackTable : ???? 
   +0x030 SystemReserved   : [1] ??
   +0x034 AtlThunkSListPtr32 : ??
   +0x038 FreeList         : ???? 
   +0x03c TlsExpansionCounter : ??
   +0x040 TlsBitmap        : ???? 
   +0x044 TlsBitmapBits    : [2] ??
   +0x04c ReadOnlySharedMemoryBase : ???? 
   +0x050 ReadOnlySharedMemoryHeap : ???? 
   +0x054 ReadOnlyStaticServerData : ???? 
   +0x058 AnsiCodePageData : ???? 
   +0x05c OemCodePageData  : ???? 
   +0x060 UnicodeCaseTableData : ???? 
   +0x064 NumberOfProcessors : ??
   +0x068 NtGlobalFlag     : ??
   +0x070 CriticalSectionTimeout : _LARGE_INTEGER
   +0x078 HeapSegmentReserve : ??
   +0x07c HeapSegmentCommit : ??
   +0x080 HeapDeCommitTotalFreeThreshold : ??
   +0x084 HeapDeCommitFreeBlockThreshold : ??
   +0x088 NumberOfHeaps    : ??
   +0x08c MaximumNumberOfHeaps : ??
   +0x090 ProcessHeaps     : ???? 
   +0x094 GdiSharedHandleTable : ???? 
   +0x098 ProcessStarterHelper : ???? 
   +0x09c GdiDCAttributeList : ??
   +0x0a0 LoaderLock       : ???? 
   +0x0a4 OSMajorVersion   : ??
   +0x0a8 OSMinorVersion   : ??
   +0x0ac OSBuildNumber    : ??
   +0x0ae OSCSDVersion     : ??
   +0x0b0 OSPlatformId     : ??
   +0x0b4 ImageSubsystem   : ??
   +0x0b8 ImageSubsystemMajorVersion : ??
   +0x0bc ImageSubsystemMinorVersion : ??
   +0x0c0 ImageProcessAffinityMask : ??
   +0x0c4 GdiHandleBuffer  : [34] ??
   +0x14c PostProcessInitRoutine : ???? 
   +0x150 TlsExpansionBitmap : ???? 
   +0x154 TlsExpansionBitmapBits : [32] ??
   +0x1d4 SessionId        : ??
   +0x1d8 AppCompatFlags   : _ULARGE_INTEGER
   +0x1e0 AppCompatFlagsUser : _ULARGE_INTEGER
   +0x1e8 pShimData        : ???? 
   +0x1ec AppCompatInfo    : ???? 
   +0x1f0 CSDVersion       : _UNICODE_STRING 
   +0x1f8 ActivationContextData : ???? 
   +0x1fc ProcessAssemblyStorageMap : ???? 
   +0x200 SystemDefaultActivationContextData : ???? 
   +0x204 SystemAssemblyStorageMap : ???? 
   +0x208 MinimumStackCommit : ??
Memory read error 7ffda208

疑问:
(1).process 命令的作用.
.process 命令切换到应用程序的地址空间,那为什么我依然不能访问输入进程892f1ab0的地址0x7ffda000?
(2)除了通过.process切换地址空间,如何才能在不调试 NOTEPAD.EXE 的情况下查看 它的PEB,
也就是如何才能将一个PE独立地址空间内的地址转换为在lkd>提示符下可以访问的地址
也就是R3的地址如何转换成R0的地址
或者这种方式不可行?

Re: 请教关于R3与R0地址转换问题


格蠹老雷 2011-05-12, 07:31 上午
简单回答,LKD不可行。对于LKD,系统仍在正常运行,用户空间随时都可能切换,CR3会指向不同进程的页表...
可以考虑LiveKD,或者使用虚拟机做双机内核调试

Re: 请教关于R3与R0地址转换问题


小菜一号 2011-05-12, 13:26 下午
张老师您好谢谢您的解答

lkd> !process 0 0
........省略无关数据若干.....
PROCESS 88a47c30  SessionId: 0  Cid: 0f50    Peb: 7ffde000  ParentCid: 067c
    DirBase: 0b0003c0  ObjectTable: e380c838  HandleCount: 171.
    Image: plugin-container.exe
........省略无关数据若干.....

lkd> .process /r 871b9da0
Implicit process is now 871b9da0


lkd> dt -r nt!_KPROCESS 888c4da0
........省略无关数据若干.....
   +0x018 DirectoryTableBase : [2] 0xb000380
........省略无关数据若干.....


DirectoryTableBase 也可能会切换么?

Re: 请教关于R3与R0地址转换问题


格蠹老雷 2011-05-13, 06:21 上午
不会,何出此问?上面摘录的是两个不同进程的信息...

Powered by Community Server Powered by CnForums.Net