PE と COFF の仕様、Matt Pietrek の「Peering Inside the PE: A Tour of the Win32 Portable Executable File Format」、「An In-Depth Look into the Win32 Portable Executable File Format」、およびこの件に関する他のいくつかのソースを読みました。 .
MinGW GCC 4.7 によって生成されたオブジェクト ファイルから、COFF セクション テーブルと COFF シンボル テーブルを読み取ることができました (デバッグ モードでスタティック ライブラリをコンパイルしていました)。
最終的な目標は、特定のオブジェクト ファイル (COFF) で定義されているすべての関数にアクセスし、それらのマシン コードを構成するすべてのバイトを読み取ることです。
質問 1 : COFF ファイル内の単一関数の開始アドレスを計算するにはどうすればよいですか? 「SectionNumber」で指定されたセクションへのオフセットとして、シンボル レコードの「Value」フィールドを使用する必要があると思います。
質問 2 : 特定の関数の長さ (読み取る必要があるバイト数) を調べるにはどうすればよいですか?
質問 3 : Microsoft の PE & COFF 仕様によると、関数を定義する各シンボル レコードの後に、補助シンボル テーブル レコードが必要です。3 つの定義済み関数のオブジェクト ファイル (デバッグ モードでコンパイルされた .a ファイルから抽出) で、そのような補助レコードが 1 つしかないのはなぜですか? そして、それもゼロで完全に埋められていますか?