機械語初心者がアセンブラを作ってみる

機械語初心者がアセンブラを作ってみるだけのブログです。ひつまぶしひつまぶし

第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 固定?

 

また、オブジェクトファイル名とアセンブラ名の間にもこんなコードがあったんですが

 

f:id:kmynews:20130519140557p:plain

 

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するという強硬手段に出ることにした。実行はしないからなっ!今は試す時間がないのでまた後で