私はこれを約2日間試みましたが、成功しませんでした。多くの PE ファイル形式のチュートリアルを読みましたが、役に立ちませんでした。
完全に機能するCreateFileMappingを介して、32ビットの実行可能ファイルをメモリにマップします。次に、プログラムはセクション ヘッダーをループ処理し、デフォルトの特性に対して特性をチェックします (セクションが実行可能でコードであることを確認するため)。true の場合、プログラムはそのセクション ヘッダーへの (PIMAGE_SECTION_HEADER) ポインターを返します (プログラムはこれまでのところ完全に動作しています)。
ポインターを取得したので、構造体には 2 つの特定のエントリがあり、私を困惑させました。エントリを数えると、それは PointerToRawData と VirtualAddress です。VirtualSize = 4096、PointerToRawData = 1536。
PE ドキュメントで読んだことから、PointerToRawData は、ディスク上のセクションのデータの最初のバイトへの想定オフセット (RVA???) であり (正しいですか?)、アライメント値 (512 )。問題は、セクションのデータにアクセスするために使用できるポインターを取得するために、この値を何に設定するかです。メモリ マップト ファイルでは、セクションの最初のバイトを見つけるために (VirtualAddress 値 + imagebase 値) を使用する方がよいでしょうか?
もう 1 つの混乱点は、VirtualSize と SizeOfRawData です。この記事 - http://msdn.microsoft.com/en-us/library/ms809762.aspxでは、「構造内の SizeOfRawData フィールド (少し誤称のようです) が後で切り上げられた値」ですが、VirtualSize が SizeOfRawData の値よりも大きいため、どちらを使用すべきかについて混乱が生じています。
このプログラムの目的は、実行可能セクション (.text セクション) を見つけて、セクション内のすべてのビットに対してビット演算を実行し、次のセクションの前に演算を終了することです。
スプーンフィードを期待しているように思われたくないので、明確にしたいだけです.
お時間を割いていただき、ありがとうございます。