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

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

第4回 COFFオブジェクトファイルの解析(2)

はーい

 

今日も痛い文が飛び出てきますよー

 

f:id:kmynews:20130515221058p:plain

 

さっきの記事の最後に

0Bは文字列リテラルのかたまりの中のアドレスじゃね」って

書いたわけですが

 

オブジェクトファイルに上のような変更を加えて

リンクしてみたんだ。

 

そしたら

 

 

f:id:kmynews:20130515221100p:plain


(`・ω・´)

 

(※変更前の動作はこちら)

 

f:id:kmynews:20130515221101p:plain


 

ね?

機械語でどこをどう変えたら

どうなっちゃうか分かっちゃうってのが

楽しいというか

 

念のためEXEファイルの中をメモ帳で開いてみましたが

「いやっほーい」のとこはちゃんと残ってました。

一度も使われていないリテラルであっても

オブジェクトファイルに残ってればそのままファイルサイズに‥‥ごくり

 

シンボルテーブルの見方をメモっとく。

 

00B 00000000 UNDEF  notype       External     | MessageBoxA

00C 0000000B SECT2  notype       Static       | message

 

00B00CってのはSymbol Indexかなぁー。textセクションの最後にあるテーブルでも使う。

000000000000000Bはシンボルテーブル‥じゃなかった、

シンボルテーブルの前に文字列定義してるかたまりがあったんだけど

その中のアドレス。多分。

というかMessageBoxAはまだリンクしてないのでUNDEFです(´・ω・`)

UNDEFは無条件で00000000になるのかしら?

SECT2は2番目のセクションと関係してますよーって意味?なのかしら?(´・ω・`)

2番目のセクションと言ったらtextかなぁー。。

notypeってなにそれおいしいのry

とりあえず他も全部notype(関数のStartだけ最後にかっこついてた)

MessageBoxAにかっこがついてないのはまだ関数かどうかも分からないから?

今はまだ詮索せんとこうと。

ExternalとかStaticとかは知らんがな。

Externalって「これからリンクする時外部にあるかもよー」って意味?

でもStartにもExternalついてるし(´・ω・`)

もう関数=External、アドレス=Staticでええわ。知らんがな(´・ω・`)

 

隊長!シンボルテーブルの1行の情報は構造体になっているものと思われます!

何だと!して、構造体の定義は?

 

知らんがな(´・ω・`)

 

 

f:id:kmynews:20130515221057p:plain


 

バイナリの中の定義部分確認してみました。

(※messageの行の000Bに戻し忘れてたけどまあいっか)

 

6D 65 73 73 61 67 65 00 00 00 00 00 02 00 00 00 03 00

 

のうち

 

6D 65 73 73 61 67 65 00

 

はもちろんmessageASCIIですよね。

そしたら

 

02 00 00 00

 

SECT2

 

03 00

 

Staticを表す?

なーんか選択部分の直前の02 00が引っかかるんですよ。

 

2 → External

3 → Static

 

でいいのかなぁ(´・ω・`)知らんがな

なんか知らんがなばかりだけど暗中模索だから仕方ない‥‥orz

 

notypeということは当然0だろうけど、どこにあるんだろそんなデータ。

messageNULL文字のすぐ後の4バイトはアレでしょ、

文字列のかたまりの中の、自身のデータが格納されているアドレス。

最近の若者言葉で言うところのRVAなのかしらー。

 

しかしRVAって無駄にかっこいい。

Tシャツ作ってもいいレベル。

 

f:id:kmynews:20130515221059p:plain


ついでなのでExitProcessMessageBoxAの定義部分も確認します。

なーんかどちらも文字列が入るべきところが00 00 00 00になってて、その後に04だとか10だとかあるわけなんですが、これはファイル最後の「ExitProcess」「MessageBoxA」関数名がまとまってるところがあって、そこのアドレスだと思いまし

1C@2DEのところが0にあたる?