カーネルモジュールのシンボル名取得
やっとできたものの、モノにするまで作りこむ気力がないので方法の概要だけ。
- シンボル名を解決したいシステム空間のアドレスを用意
- たとえば 0x81DBC716
- SymLoadModule64でカーネルモジュールのシンボルテーブルをロード
- たとえば C:\Windows\system32\ntoskrnl.exe
- IMAGEHLP_SYMBOL64構造体を用意
- 「システム空間のアドレス + SymLoadModule64の戻り値 - ntoskrnl.exeのべースアドレス」の値を計算
- たとえば「0x81DBC716 + 0x00400000 - 0x81C04000」
- システムモジュールのべースアドレスはEnumDeviceDriversで取得
- 計算した値でSymGetSymFromAddr64
- (゚Д゚)ウマー
- たとえば _NtAcceptConnectPort@24(゚Д゚)ウマー
そのうちに、HookDetectorに実装しようかと思ってます。思ってますが、飽きてるのでやらない予感!
05/02 追記
システム空間のアドレス - SymLoadModule64の戻り値 - ntoskrnl.exeのべースアドレス
って書いてました。間違いなので修正しました。