カーネルモジュールのシンボル名取得

やっとできたものの、モノにするまで作りこむ気力がないので方法の概要だけ。

  1. シンボル名を解決したいシステム空間のアドレスを用意
    • たとえば 0x81DBC716
  2. SymLoadModule64でカーネルモジュールのシンボルテーブルをロード
    • たとえば C:\Windows\system32\ntoskrnl.exe
  3. IMAGEHLP_SYMBOL64構造体を用意
  4. 「システム空間のアドレス + SymLoadModule64の戻り値 - ntoskrnl.exeのべースアドレス」の値を計算
    • たとえば「0x81DBC716 + 0x00400000 - 0x81C04000」
    • システムモジュールのべースアドレスはEnumDeviceDriversで取得
  5. 計算した値でSymGetSymFromAddr64
  6. (゚Д゚)ウマー
    • たとえば _NtAcceptConnectPort@24(゚Д゚)ウマー

そのうちに、HookDetectorに実装しようかと思ってます。思ってますが、飽きてるのでやらない予感!

05/02 追記

システム空間のアドレス - SymLoadModule64の戻り値 - ntoskrnl.exeのべースアドレス
って書いてました。間違いなので修正しました。