Windowsカーネルの解析インデックスディレクトリします。https://www.cnblogs.com/onetrainee/p/11675224.html
Windowsのシステムコールでシーンを保存
私たちは、中断またはクイックリコールによって達成され、ゼロ三環にステップの前に導入されました。
しかし、我々は、CPUがその三環ゼロから三環を保存する方法を登録入るかどうかを検討したとき。
これは、導入するファイル(三環)保存されたオンサイトの問題システムコールです。
まず、いくつかの重要な構造の導入
1. _Ktrap_frame
簡単に述べると、レジスタ三環、ゼロを保持するための構造は、オペレーティングシステムによって維持される、環内に格納されています
詳細については、あなたがこの記事を閲覧することができます:毎日のトークトラップWindowsカーネルのスケジューリングを解析します
我々は0が非常に重要であるリング、SS \ CS \ EIP \ ESPに入る前に約話したときに、新しい4つのレジスタを取得するには
リングゼロを入力するときに、以下の、オペレーティングシステムは、ESP値ポイント_Ktrap_frame構造を取得し、古いSS \ CS \ EIP \ ESP \ EFLAG連続的に押す(0x78-0x68で)、ESP + 0x070後ERRCODE場所。
あなたは、カーネル関数を実行するためにEIPに取得した後。
2. _ETHREAD構造
この構造は、スレッドに関連する情報を保持し、(三環TEB、スレッド環境ブロックでない)0リングで
_KTHRADである第1部材_ETHREAD構造では、スレッド内のいくつかの情報を保持しては0x200のサイズことがわかります
KD> DT _ethread
NTDLL _ETHREAD!
+ $ 000 Tcbの:_KTHREAD
+ 0x200からCREATETIME:_LARGE_INTEGER
····
KD> DT _kthread
NTDLL _KTHREAD!
+ 0x000のヘッダー:_DISPATCHER_HEADER
+ 0x010サイクルタイム:Uint8B
+ 0x018 HighCycleTime:Uint4B
+ 0x020 QuantumTarget:Uint8B
+ 0x028 InitialStack:Ptr32ボイド
+ 0x02c StackLimit:Ptr32ボイド
+ 0x030 KernelStack:Ptr32ボイド
+ 0x034 ThreadLock:Uint4B
+ 0x038 WaitRegister:_KWAIT_STATUS_REGISTER
+ 0x039実行:UCHAR
3. KPCR構造(カーネルプロセッサ制御領域カーネルスレッド制御領域)
一般的な構造を説明する記事が、あります- > [Windowsカーネル分析] KPCR構造の導入(CPU制御エリアプロセッサ制御領域)
簡単に言えば、KPCR構造体は、CPUに関する情報を保持し、核が独自のプライベートKPCR構造を持って、8コアの各コアは、独自の独立した構造を有しているKPCR
私たちは、現在のスレッドの_KTHREAD構造を得るためにCurrentThreadの最後のメンバーを使用する必要があります。
KD> DT _kpcr
NTDLL _KPCR!
+ $ 000 NtTib:_NT_TIB
+ 0x000のUsed_ExceptionList:Ptr32 _EXCEPTION_REGISTRATION_RECORD
····
+ 0x120 PrcbData:_KPRCB
KD> DT _KPRCB
NTDLL _KPRCB!
+ $ 000 MinorVersionの:Uint2B
+ 0x002のMajorVersion:Uint2B
+ 0x004 CurrentThread:Ptr32 _KTHREAD
+ 0x008とNextThread:Ptr32 _KTHREAD
···