第10回 COFFオブジェクトファイルの解析(4)
dumpbinですら解析されないdebug$sセクション。
アセンブルのデータが入ってるという線でいってみました。
ml64.exeでアセンブルしたオブジェクトファイルを解析してて
まったく何もわからないわけなんですが
cl.exe(Cコンパイラ)でコンパイルしたアセンブラっぽいやつのオブジェクトファイルまで引っ張りだして比べた結果、次の可能性が分かりました。
04 00 00 00 固定?
F1 00 00 00 固定?
6E 00 00 00 セクション終端までの相対アドレス
33 00 オブジェクトファイル名終端のNULL文字までの相対アドレス
01 11 00 00 00 00 固定?
また、オブジェクトファイル名とアセンブラ名の間にもこんなコードがあったんですが
MASM Ver.11:
37 00 3C 11 03 02 00 00 D0 00 00 00 00 00 00 00 00 00 0B 00 00 00 27 C6 01 00
Cコンパイラ Ver.17:
3A 00 3C 11 00 62 00 00 D0 00 11 00 00 00 27 C6 01 00 11 00 00 00 27 C6 01 00
Cコンパイラ Ver.16:
3A 00 3C 11 00 22 00 00 07 00 10 00 00 00 6F 76 01 00 10 00 00 00 6F 76 01 00
コンパイラの違いじゃなかったらすまん(´・ω・`)
でも、Cコンパイラは同じ情報を2回繰り返してるんだなーと思った。何の意味があるか分からない。
けど
右から8番目と16番目にコンパイラのバージョンが入ってるっていうのは分かった。
0B 00 00 00 27 C6 01 00←27 C6 01 00は固定かなと思ってたらそうでもなかった
というか10進数に直したら全部コンパイラのビルド情報だったわこれ
MASMのバージョンが 11.00.50727.1だったので
0B 00 11
00 00 00
27 C6 50727
01 00 1
ということになっただ
つまりコンパイラのビルドバージョンを書いてるわけかここ。
Cコンパイラが2回繰り返してる理由は分からんけど。
残った
37 00 3C 11 03 02 00 00 D0 00
について
先頭の37 00は、そこからコンパイラ名の終端NULLまでの長さ
っていうのは分かったけどその後が続かない。
でも、とりあえずコンパイラ関連だろうということで
もう放棄することにした。
なんとかならないのかなぁここんとこ
シンボルテーブル最初の@comp.idと@feat.00についてもいろいろ調べてみたけど
結局分からずしまい。
IMAGE_SYMBOL構造体のValueメンバだけが違って後は同じ、っていうとこまで分かったので
あとはこのValueがどうやって決まるかを調べないと
ああめんどい(´・ω・`)
追記:@comp.idと@feat.00に対して、ここの値を直接書き換えてリンク&dumpbinするという強硬手段に出ることにした。実行はしないからなっ!今は試す時間がないのでまた後で