#navi_header|技術| PEフォーマット関連で頻出する構造体のサイズ一覧 (WinXP SP3, Pentium4, 32bit環境のVisual C++ 2008 Express Edition) #pre||> hex, dec : structure typedef -------------------------------- 0x0040, 64 : sizeof(IMAGE_DOS_HEADER) 0x00F8, 248 : sizeof(IMAGE_NT_HEADERS) 0x0014, 20 : sizeof(IMAGE_FILE_HEADER) 0x00E0, 224 : sizeof(IMAGE_OPTIONAL_HEADER) 0x0008, 8 : sizeof(IMAGE_DATA_DIRECTORY) 0x0028, 40 : sizeof(IMAGE_SECTION_HEADER) 0x0012, 18 : sizeof(IMAGE_SYMBOL) 0x0012, 18 : sizeof(IMAGE_AUX_SYMBOL) 0x000A, 10 : sizeof(IMAGE_RELOCATION) 0x0008, 8 : sizeof(IMAGE_BASE_RELOCATION) 0x003C, 60 : sizeof(IMAGE_ARCHIVE_MEMBER_HEADER) 0x0028, 40 : sizeof(IMAGE_EXPORT_DIRECTORY) 0x0004, 4 : sizeof(IMAGE_IMPORT_BY_NAME) 0x0004, 4 : sizeof(IMAGE_THUNK_DATA) 0x0014, 20 : sizeof(IMAGE_IMPORT_DESCRIPTOR) 0x0008, 8 : sizeof(IMAGE_BOUND_IMPORT_DESCRIPTOR) 0x0008, 8 : sizeof(IMAGE_BOUND_FORWARDER_REF) 0x0010, 16 : sizeof(IMAGE_RESOURCE_DIRECTORY) 0x0008, 8 : sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY) 0x0048, 72 : sizeof(IMAGE_LOAD_CONFIG_DIRECTORY) ||< ソース: #code|c|> #include #include #define print_sz(structure) { \ sz = sizeof(structure); \ printf("0x%04X, %4d : sizeof(" #structure ")\n", sz, sz); \ } int main(int argc, char *argv[]) { size_t sz; printf("hex, dec : structure typedef\n"); printf("--------------------------------\n"); print_sz(IMAGE_DOS_HEADER); print_sz(IMAGE_NT_HEADERS); print_sz(IMAGE_FILE_HEADER); print_sz(IMAGE_OPTIONAL_HEADER); print_sz(IMAGE_DATA_DIRECTORY); print_sz(IMAGE_SECTION_HEADER); print_sz(IMAGE_SYMBOL); print_sz(IMAGE_AUX_SYMBOL); print_sz(IMAGE_RELOCATION); print_sz(IMAGE_BASE_RELOCATION); print_sz(IMAGE_ARCHIVE_MEMBER_HEADER); print_sz(IMAGE_EXPORT_DIRECTORY); print_sz(IMAGE_IMPORT_BY_NAME); print_sz(IMAGE_THUNK_DATA); print_sz(IMAGE_IMPORT_DESCRIPTOR); print_sz(IMAGE_BOUND_IMPORT_DESCRIPTOR); print_sz(IMAGE_BOUND_FORWARDER_REF); print_sz(IMAGE_RESOURCE_DIRECTORY); print_sz(IMAGE_RESOURCE_DIRECTORY_ENTRY); print_sz(IMAGE_LOAD_CONFIG_DIRECTORY); return 0; } ||< #navi_footer|技術|