勉強会というよりかは「七誌先生の講義」って感じだったかな。個人的にはバイナリエディタで異常動作する PE をいじって正常に動くようにするあたりが+(0゚・∀・) + ワクテカ +でした。
途中で PE ファイルヘッダの話になった時にふと「この TimeDateStamp ってコンパイル時のタイムスタンプが入るの?」ということが気になったことを思い出したのでちょっと試してみた。
typedef struct _IMAGE_FILE_HEADER { WORD Machine; WORD NumberOfSections; DWORD TimeDateStamp; DWORD PointerToSymbolTable; DWORD NumberOfSymbols; WORD SizeOfOptionalHeader; WORD Characteristics; } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
% uname -s CYGWIN_NT-6.1 % echo 'int main(){}' > a.c % gcc a.c -o 1.exe % gcc a.c -o 2.exe % md5sum.exe 1.exe 2.exe 907129d2a56fd3777ffa725588ba9498 *1.exe 38584a31ff69bb022abf0fc87afb3a31 *2.exe
--- /dev/fd/63 (objdump.exe -afhp 1.exe) +++ /dev/fd/62 (objdump.exe -afhp 2.exe) @@ -1,6 +1,6 @@ -1.exe: file format pei-i386 -1.exe +2.exe: file format pei-i386 +2.exe architecture: i386, flags 0x0000013a: EXEC_P, HAS_DEBUG, HAS_SYMS, HAS_LOCALS, D_PAGED start address 0x00401000 @@ -11,7 +11,7 @@ line numbers stripped 32 bit words -Time/Date Mon Feb 21 23:14:35 2011 +Time/Date Mon Feb 21 23:14:38 2011 Magic 010b (PE32) MajorLinkerVersion 2 MinorLinkerVersion 21 @@ -33,7 +33,7 @@ Win32Version 00000000 SizeOfImage 0000b000 SizeOfHeaders 00000400 -CheckSum 00007171 +CheckSum 00007174 Subsystem 00000003 (Windows CUI) DllCharacteristics 00008000 SizeOfStackReserve 00200000
なんか CheckSum というのも独自別のヘッダにあるなあ。*1 それはさておき、そもそも何故、こんなことが気になったかというと、同じコンパイラおよびオプションでコンパイルしたバイナリが合致しないとなると、同じバイナリは二度とつくれないということになるのかなと思った次第。メーカーとかテストする時に手間とかどうなんだろとか余計なことを考えてみた。
【追記】本当にあったらしいw
ちなみに Mac OS X だと Mach-O がそういう情報を持たないのか、差分は出なかった。
% uname -s Darwin % echo 'int main(){}' > a.c % gcc a.c -o 1.exe % gcc a.c -o 2.exe % gmd5sum a1.exe a2.exe dced646ad5ae2d7fbe4791a61c9bab23 a1.exe dced646ad5ae2d7fbe4791a61c9bab23 a2.exe
Linux はすぐに使える環境は手元にないから、気が向いたらここに追記する。
あと、MacBook* でこの勉強会に参加する人は HugeDomains.com - LoadupDates.com is for sale (Loadup Dates) の mingw ターゲットのクロスコンパイラを使うといいんじゃないかな。*2
*1:EXEファイルの内部構造(PEヘッダ) (2/3):CodeZine(コードジン)
*2:自分は VirtualBox 上の Windows 7 に CygwinPorts からインストールした i686-mingw32-gcc を使って課題を解いたけど、素人にはおすすめできない茨のセットアップの道だと思う。