2008年06月25日

はじめてのりばーすえんじにありんぐ

最適化の為のアセンブラ入門はわかりやすい。
やっとx86系アセンブリ言語を理解できそうなページに出会えた。ただコードの一覧表がないのが不便だ。他でもなかなか見つからず、結局intelのpdfをダウンロードした。

ということで、前から身につけたかったWinプログラムの(知りたい箇所の)解析を開始。エンジン本体はソースが公開されているやつで、下知識を手に入れる。これ自体の技術も凄まじいのだが。

まず簡単そうなのからやってみる。DISWINで逆アセンブルソースを書き出し、下知識で手に入れた情報から、リソースを参照しているアドレスを検索し、そこからそれっぽいところを特定し・・・できた。たぶん読めた。確認していないけど。なんかうれしい。

調子に乗って、難しそうなのに挑戦する。入り口の特定まではいったと思うが、へんな場所にとんでる。って.deccセクションってなんだよ。どうりでソースファイルが二つも作られて変だと思ったんだ。
セクションのフラグが書き込み可能になってるし、暗号化されているのだろうと、起動させて「うさみみハリケーン」ってのでメモリを調べる。当たりだ。ちなみにサイズは同じだった。該当箇所をコピーして逆アセンブル。それっぽいコードに辿りついた。
大まかにやってることはわかったと思うが、条件分岐で戸惑う。前出の「うさみみハリケーン」でブレークポイントを置いて実行してみた。使ったのは初めて。これ、レジスタの中身が理解できると面白いな。でも一回しか呼ばれないと思っていたコードが、何度も呼ばれている。何故だろうと考えて、エンジンの方が細分化して処理しているんだと気ついた。他にも勘違いしていた部分が判明し、ファイルを二分して暗号化しているところまでわかった。
そこから全く進まなくなる。スタックの内容がまるで見当つかないのだ。push と call というか、コンパイラがサブルーチンをどうしているのかよくわからん。おかげで本処理の部分はわかるけど、XORしている相方の計算方法がわからない。さらにファイルのフォーマットから試してみたけど、所々のバイトでもう一処理しているようだ。

ここでリタイア。

まあ俺の場合、昔やったZ80が下地にあるからな。うろ覚えだけど。でもそのときは、モーターを動かすマイコンというので、メモリの内容は自分で決めるし、スタックを使ったことがまるでなかった覚えがある。

でもまあ面白かった。コンパイラがC++ソースをどう変換しているのか、少しだけ分かったような気がする。

また挑戦したくなったら、やろう。
posted by 七癖 at 19:04| Comment(0) | TrackBack(1) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック

Z80アセンブラ入門
Excerpt: Z80アセンブラ入門 25年程前に PC-6001 のマシン語を理解しようとして挫折した小学生が、そのままじゃ悔しいのでと四半世紀後に買っ...
Weblog: もぼなもな書房
Tracked: 2009-05-21 21:52