Кажется, я чего-то не понимаю.
Я пытаюсь перевести VA в PA в Windows 10 (x86) в VirtualBox. Я использую руководство Microsoft для этого. Я установил локальный отладчик ядра (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 в ячейке: 00000000 00001010 11111100 10110110 5-й бит - true , что означает, что PAE включено.
Затем я открыл окна памяти и набрал адрес 400000, чтобы проверить, есть ли в виртуальной памяти заголовок CFF Explorer.exe .
![enter image description here](https://i.stack.imgur.com/N14aw.png)
Затем я попытался получить номер кадра страницы (PFN) через расширение PTE (по инструкции):
lkd> !pte 00400000
VA 00400000
PDE at C0600010 PTE at C0002000
contains 0000000000000000
contains 0000000000000000
not valid
У меня неправильный адрес. В то же время, когда я пытался получить PFN файла kernel32.dll, я получил действительный адрес:
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 имеет тот же базовый адрес, что и CFFExplorer.exe . Я всегда думаю, что у каждого процесса есть собственное отображение зависимого модуля в его собственную память, но сейчас это кажется не так.
Мои вопросы:
- Почему я получаю "недействительно" при попытке перевести 0x00400000 адрес?
- Пожалуйста, проясните ситуацию с kernel32.dll и моими сомнениями по поводу сопоставления модуля с каждым процессом.
ОБНОВЛЕНИЕ 0 : я не знаюпочему, но когда я отлаживаю ядро как локальное - я вижу то же значение в ALL регистрах. Я попытался удаленно отладить ядро, и теперь я вижу разные значения для каждого регистра:
cr0 Value: 80010033
cr2 Value: 909a301c
cr3 Value: 001a8000
cr4 Value: 000406e9
И теперь я не могу получить kernel32.dll илиперевод других модулей. Основные вопросы открыты.