2016-04-03 18 views
0

(私が投稿した類似の質問に申し訳ありませんが、私はそれを修正しました) Windows XP上で実行可能なPEファイルをデバッグして、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)コマンドで割り込みが表示されません!2台のコンピュータを使用する必要がありますか?いいえ、このコマンドはユーザーモードのデバッグとは関係ありませんでした。 – conio

+0

なぜ '!pte'が助けになると思いますか?これまで使用していた他のコマンドは何ですか?どのような問題を解決しようとしていますか?なぜあなたは実行ファイルをデバッグしますか?それはクラッシュしますか? WinDbgには何百ものコマンドがあります。なぜあなたはデバッグのためにこれを選択しましたか? –

答えて

0

あなたはXPにLocal Kernel Debuggingサポートを使用しているので、あなたは、オペレーティング・システム上でXPを使用して、/デバッグとOSのブート構成を編集する必要があることが高い場合にはブート構成を編集することと

を再起動することなく利用可能ですローカルカーネルデバッグをサポートするためのスイッチと、再起動時に

bcdedit /debug on and rebootだけにしてwindbg -kl

if you don't want to edit your boot configuration download livekd  
from sysinternals and use it instead for local kernel debugging 
012 XP より大きいOS上で動作します

このコマンドラインでのオープンwindbgの

windbg -kl 

これは代わりに、今あなたが!pteコマンド

代替explorer.exeのを使用することができます0:000>

のプロンプトlkd>でwindbgを開きます。あなたが調べたい実行中のバイナリの名前を持っている(これはバイナリのカーネルモードの部分を見ているusermodeではないことに注意してください)例で 私は窓に7 x86の32ビットの物理マシンをlivekdを使用しています下の

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

実行可能ファイルをデバッグしています。これは、ユーザモードでデバッグしていることを意味します。アプリケーションをユーザモードで見ると、仮想メモリのみが表示されます。デバッガは、アプリケーション/実行可能ファイルと同じビューを表示します。

仮想メモリは、さまざまな方法でアプリケーションに提供されます。それは、物理メモリ、ページファイルの内容、または何も(予約されたメモリのための)ものであってもよい。

これは実際には何でも、アプリケーションから隠されています。それはカーネルがあなたのためにするものです。どのようにそれを確認するには、カーネルデバッグを使用する必要があります。デバッガはOSが内部的にどのように見えるかを確認し、!pte(さらに多くのもの)のようなカーネル関連コマンドの使用を許可します。

PTE(ページテーブルエントリ)とPDE(ページディレクトリエントリ)は、仮想メモリと物理メモリ間のマッピングを実行するためにカーネルが使用する「オブジェクト」とまったく同じです。

これを分析するには、カーネルのデバッグとユーザーモードのデバッグを同時に実行して、カーネル側の結果が実際にユーザーモード側の結果と一致していることを確認します。

このトピックについては初心者だと思うので、仮想マシンや専用のPCで行うことをお勧めします。重要なデータを持つPCは使用しないでください。カーネルモードでは、ブルースクリーンが表示され、保存されていない作業がすべて失われる可能性があります。

Part 3 - Non-PAE and X64のあとには、Understanding !pte - Part 1 - Let's get physicalのようなNTのデバッグブログの記事があります。

+0

カーネルのデバッグは危険ではありません。確かに、マシンをクラッシュさせることはできますが、実際にマシンを破壊して永続的なデータを破損させるには、少しの労力が必要です。いずれにせよ、(blabbが提案したように) 'livekd'を使って'!pte'で遊ぶのは十分ではなく、より簡単で、より使いやすく、より高速です。 – conio

+0

ありがとうございます。確かに、私はそれについての初心者です。私はブログを理解しようとします。 –

+0

@conio:そうです、私たちはブルースクリーンを持っています:あなたがRAMの内容以上を失うことからあなたを守るためです。しかし、RAMの内容を失うことさえ時々傷つくことがあります。私はそれを言い換えた。 –

関連する問題