0

NTDLL によってエクスポートされたローダー関数のみを使用して、Windows システム DLL から関数をロードする実験を行ってきました。これは期待どおりに機能します。好奇心と NT ベースのシステムのプロセス構造をよりよく理解するために、次の手順を実行して NTDLL から関数をロードする試みを開始しました。

  1. gs:[60h] からプロセスの PEB をロードします。
  2. ローダーに従ってプロセスにロードされたモジュールを繰り返し処理し、NTDLL のベース アドレスを見つけます。
  3. NTDLL の PE ヘッダーを解析する
  4. エクスポート テーブルを解析してLdrLoadDll、、、LdrGetDllHandleおよびLdrGetProcedureAddress

これはステップ 4 で失敗します。デバッガー (VS2019 と WinDbg Preview の両方) でステップ実行した後、コードが現在の関数名を私が探しているものの一つ。私のコードは、Windows 10 Pro ビルド 21364 の 64 ビット コピーでコンパイルおよび実行されwinnt.hます。私のコードの残りの部分でうまくいかないでください。これを行おうとしている関数はこちらです. 記録として、これは私自身の libc を実装する試みの一部です (これも好奇心のためです)。関数を呼び出すコードはこちらです。これに関するヘルプは非常に高く評価されています。

4

1 に答える 1

0

気にしないでください、私が使用していた構造の冗長な定義が古くなっていることがわかりました。https://vergiliusproject.comでより良い (より最新の) 定義を見つけました。

于 2021-04-27T17:50:14.723 に答える