2016-04-03 3 views
0

(Извините за аналогичный вопрос, который я опубликовал, я его изменил.) Я пытаюсь отладить excutable PE файл на Windows XP, чтобы увидеть, как PDE и PTE работают в реальной системе , Я узнал, что у windbg есть некоторые команды, чтобы увидеть детали. Похоже, что pte сможет видеть соответствующие PDE и PTE виртуального адреса. Но я сталкиваюсьНе удается запустить команды расширения в WinDBG

0:000> !pte No export pte found

Я сделал некоторые Google работу и найти, что это extension command, но я не вижу никакого описания о том, как включить эти расширения. Кажется, что все используют его напрямую, кроме меня.

Интересно, что я пропустил, но я не мог понять. Может кто-нибудь, пожалуйста, дайте мне совет?

Спасибо.

+0

Спасибо. Вы имеете в виду, что лучше отлаживать с другого компьютера? –

+1

Нет. Это означает, что '! Pte', вероятно, не имеет отношения к проблеме, которую вы пытаетесь решить. Ваш вопрос аналогичен запросу «Я выполняю пользовательский режим-отладки, но ['! Idt'] (https://msdn.microsoft.com/en-us/library/windows/hardware/ff563219 (v = vs. 85) .aspx) для отображения прерываний не работает! Должен ли я использовать два компьютера? " Нет. Эта команда не имеет ничего общего с отладкой в ​​режиме пользователя. – conio

+0

Почему вы думаете, что '! Pte' было бы полезно? Какие еще команды вы использовали до сих пор? Какую проблему ты пытаешься решить? Почему вы отлаживаете исполняемый файл? Это крушение? WinDbg содержит сотни команд. Почему вы выбрали этот вариант для отладки? –

ответ

0

, так как вы используете хрыLocal Kernel Debugging поддержки доступен без необходимости редактирования конфигурации загрузки и перезагрузок

если вы на операционной системе выше, что хры вам нужно изменить конфигурацию начальной загрузки ОС с/отладками на переключателе и перезагрузки для поддержки отладки локального ядра

bcdedit /debug on and reboot только тогда windbg -kl будет работать на ОС больше, чем XP

if you don't want to edit your boot configuration download livekd  
from sysinternals and use it instead for local kernel debugging 

открыто WinDbg с этой командной строкой

windbg -kl 

откроется WinDbg с быстрой lkd> вместо 0:000>

теперь вы можете использовать команду !pte

заменитель explorer.exe с именем исполняемого бинарного файла, который вы хотите проверить (помните, что это не usermode, вы смотрите на часть режима ядра вашего двоичного кода)
в приведенном ниже примере я использую LiveKd в окнах 7 x86 32 битных физическая машина

C:\>livekd  
LiveKd v5.40 - Execute kd/windbg on a live system 
Sysinternals - www.sysinternals.com 
Copyright (C) 2000-2015 Mark Russinovich and Ken Johnson 

Launching C:\Program Files\Windows Kits\8.1\Debuggers\x86\kd.exe: 

Microsoft (R) Windows Debugger Version 6.3.9600.17298 X86 
Copyright (c) Microsoft Corporation. All rights reserved. 

kd> !process 0 0 explorer.exe 

PROCESS 864b2638 SessionId: 1 Cid: 05f8 Peb: 7ffde000 ParentCid: 05e4 
    DirBase: 7e28c2c0 ObjectTable: 964ccad8 HandleCount: 1062. 
    Image: explorer.exe 

kd> .process /p /r 864b2638 
Implicit process is now 864b2638 
Loading User Symbols 

kd> !pte explorer 
        VA 00400000 
PDE at C0600010   PTE at C0002000 
contains 000000000FFB2867 contains 80000000103F7025 
pfn ffb2  ---DA--UWEV pfn 103f7  ----A--UR-V 

kd> $$ page table entry contains 103f7025 
kd> dc c0002000 l1 
c0002000 103f7025        %p?. 
kd> $$ the top 5 bytes are page frame nos lets see if the physical page contains MZ 
kd> !dc 103f7000 l1 
#103f7000 00905a4d MZ.......L`...ac 
kd> 
+0

Большое спасибо, очень полезно и практично. Я научусь использовать livevd. –

+0

Я тестировал это в наши дни, но оказывается, что PAE включен на моей машине, поэтому '! Pte' не будет работать должным образом из-за существования PDPE (чтобы найти, что этот факт стоил много времени). Кажется, что команда '! Vtop' более понятна, как виртуальный адрес преобразуется в физический адрес. Спасибо за помощь. –

0

Вы отлаживаете исполняемый файл. Это означает, что вы отлаживаете пользовательский режим. Если посмотреть на приложение в пользовательском режиме, вы увидите только виртуальную память. Отладчик представит вам тот же вид, что и приложение/исполняемый файл.

Виртуальная память предоставляется приложению по-разному. Это может быть физическая память, содержимое файла страницы или даже ничего (для зарезервированной памяти).

Независимо от того, что находится на самом деле, это скрыто от приложения. Это то, что делает ядро ​​для вас. Чтобы узнать, как это сделать, вам нужно использовать отладку ядра. Затем отладчик позволит вам увидеть, что ОС видит внутри, и разрешить использование связанных с ядром команд, таких как !pte (и многие другие).

PTE (запись в таблице страниц) и PDE (запись в каталоге страниц) - это именно те «объекты», которые использует ядро ​​для сопоставления между виртуальной памятью и физической памятью.

Чтобы проанализировать это, вы, вероятно, захотите выполнить отладку ядра и отладку пользовательского режима в одно и то же время, чтобы убедиться, что результаты, полученные на стороне ядра, действительно соответствуют результатам, которые вы получаете в режиме пользователя.

Поскольку кажется, что вы новичок в этой теме, я бы предложил сделать это на виртуальной машине или на выделенном ПК. Не используйте ПК с важными данными. В режиме ядра вы можете вызвать синие экраны и потерять всю несохраненную работу.

Есть статьи из отладочного блога NT, такие как Understanding !pte - Part 1 - Let's get physical, с которого вы начали, а затем Part 2 - Flags and Large Pages и Part 3 - Non-PAE and X64.

+0

Kernel отладка нет * это * опасно. Несомненно, вы можете разрушить свою машину, но на самом деле ее уничтожить и развратить постоянные данные потребуют некоторых усилий. В любом случае, играть с помощью '! Pte' с помощью' livekd' (как предложил blabb) не только более чем достаточно, но и проще, удобнее и быстрее. – conio

+0

Спасибо. Действительно, я новичок в этом. Я постараюсь понять блоги. –

+0

@conio: да, поэтому у нас есть синие экраны: чтобы защитить вас от потери больше, чем содержимого ОЗУ. Но иногда даже потеря содержимого ОЗУ может повредить. Я это перефразировал. –

Смежные вопросы