セクションにはデータサイズ、RVAなどが保存される
L ネイティブコード、リソース情報、デバッグ情報など
L 読み込み専用領域、再配置情報、インポート関数、エクスポート関数など
なるほど、ソースコードだけでなく、ソフトウェア一式ってイメージだな
typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; union { DWORD PhysicalAddress: DWORD VirtualSize; } DWORD VirtualAddress; // セクションサイズ DWORD SizeOfRawData; // セクション位置 DWORD PointerToRawData; DWORD PointerToRelocations; //再配置エントリ情報 DWORD PointerToLinenumbers; //行番号 WORD NumberOfRelocations; //再配置エントリ WORD NumberOfLinenumbers; DWORD Characteristics; // セクション特性 } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADERS;
Nameはセクション名
.text, .data, .idata, .edata, .rsrc, .debug, .reloc, .tls
.text, .data, .rsrcなどの各セクションはIMAGE_SECTION_HEADER構造体の後に配置。やっとか。
インポートは外部DLLと動作リンクを行う
リソースセクション(.rsrc)では、実行に直接関係ない特徴的なデータを管理
L データ型、ID、言語
結構気の遠くなるようなことやってるなー
あれ、でもメモリのポインタってC言語だとソースの中で指定するはずだけど、PointerToRawDataでIMAGE_SECTION_HEADER構造体で指定している?
それと、ネイティブコードのセクションは構造化されるのだろうか?それとも、1つのセクションに纏められるのだろうか?データ処理で考えると、.textセクション、.dataセクション、.rsrcセクションなど各セクション内部で構造化された方が効率的に見えるが。。
ああああ、メモリかー