看来我听不懂。
我正在尝试在VirtualBox下的Windows 10(x86)上将VA转换为PA。 为此,我使用Microsoft manual。 我设置了本地内核调试器(bcedit),并启动了CFF Explorer作为经过测试的应用程序。然后,我启动WinDbg,连接到内核并获取活动进程:
!process 0 0
找到了我的测试应用程序:
PROCESS a6bd7900 SessionId: 1 Cid: 0988 Peb: 7ffd9000 ParentCid: 0840
DirBase: ba9ac3c0 ObjectTable: acaeedc0 HandleCount: <Data Not Accessible>
Image: CFF Explorer.exe
然后获得PEB:
.process /p a6bd7900; !peb 7ffd9000
Implicit process is now a6bd7900
PEB at 7ffd9000
...
ImageBaseAddress: 00400000
...
Ldr 76f99aa0
Ldr.Initialized: Yes
Ldr.InInitializationOrderModuleList: 00881658 . 00887c00
Ldr.InLoadOrderModuleList: 00881728 . 00887bf0
Ldr.InMemoryOrderModuleList: 00881730 . 00887bf8
Base TimeStamp Module
400000 50a8fbd6 Nov 18 18:16:38 2012 C:\Program Files\NTCore\Explorer Suite\CFF Explorer.exe
76e90000 580ee2c9 Oct 25 07:42:49 2016 C:\WINDOWS\SYSTEM32\ntdll.dll
74970000 57cf8f7a Sep 07 06:54:34 2016 C:\WINDOWS\system32\KERNEL32.DLL
...
我键入“!r”命令以打印所有寄存器:
cr0 Value: 00720054
cr2 Value: 00720054
cr3 Value: 00720054
cr4 Value: 00720054
cr4在bin中:00000000 00001010 11111100 10110110 第5位是 true ,表示已启用PAE。
然后,我打开“内存”窗口并键入400000地址,以检查我在虚拟内存中是否具有 CFF Explorer.exe 的标题。
然后我尝试通过PTE extension(根据手册)获取页面框架编号(PFN):
lkd> !pte 00400000
VA 00400000
PDE at C0600010 PTE at C0002000
contains 0000000000000000
contains 0000000000000000
not valid
我没有一个无效的地址。同时,当我尝试获取kernel32.dll的 PFN 时,我得到了有效地址:
lkd> !pte 74970000
VA 74970000
PDE at C0601D20 PTE at C03A4B80
contains 000000000121B867 contains 800000006F1CE005
pfn 121b ---DA--UWEV pfn 6f1ce -------UR-V
然后通过“ !dc 6f1ce000 ”成功通过物理地址获得了标头。
然后我检查了 windbg.exe 本身,发现 kernel32.dll 与 CFF Explorer.exe 具有相同的基址。我一直认为每个进程都有自己的依赖模块到他自己的内存的映射,但是现在看来并非如此。
我的问题:
更新0 : 我不知道为什么,但是当我在本地调试内核时-在 ALL 寄存器中看到相同的值。我尝试过远程调试内核,现在我看到每个寄存器的不同值:
cr0 Value: 80010033
cr2 Value: 909a301c
cr3 Value: 001a8000
cr4 Value: 000406e9
现在,我无法获得 kernel32.dll 或其他模块的翻译。 主要问题已经打开。