jitb00cの紹介

(0) はじめに

(1) これはなに?

(2) 実行例

> がプロンプトなので、その行だけが入力行で、残りは出力です。


→ 起動直後にregsコマンドを実行してみました。
>regs
<regs>  eax:00000000  ecx:00000000  edx:00000000  ebx:00000000  esp:00680000  ebp:00000000  esi:00000000  edi:00000000
<stack>
→ espレジスタ以外は0に初期化されています。スタックは何も積んでいないので表示されません。

→ セクション命令で機械語をメモリにおいてみます。セクション命令が代入命令の一部ではないとき、これは直ちに実行されます。
>sec(0xb8 0x11 0x22 0x33 0x44)
→ B8はEAXへの代入命令です。

→ ちゃんと代入できているか確認してみます。
>regs
<regs>  eax:44332211  ecx:00000000  edx:00000000  ebx:00000000  esp:00680000  ebp:00000000  esi:00000000  edi:00000000
<stack>
→ よしよし

→ ではスタックに積んでみましょう。
>sec(0x50)
→ 50 は PUSH EAX です。しかし何も言わないのでうまくいっているかどうかわかりません・・・。

→ ということで確認です。
>regs
<regs>  eax:44332211  ecx:00000000  edx:00000000  ebx:00000000  esp:0067fffc  ebp:00000000  esi:00000000  edi:00000000
<stack>  [44332211]
→ よしよし

→ スタックからおろしてみます。
>sec(0x59)
→ ちなみにこれは POP ECX です。

→ 確認すると・・・
>regs
<regs>  eax:44332211  ecx:44332211  edx:00000000  ebx:00000000  esp:00680000  ebp:00000000  esi:00000000  edi:00000000
<stack>
→ うまくいっていることが分かります。

→ これだけだと面白くないので、他のこともやってみます。
>labels
004012f0 : putdec
→ 登録済みの関数が表示されます。

→ この関数を使ってみます。Cで書かれた関数なので、スタックに引数を積みます。
>sec(0x50 0xe8 rel32(0x4012f0) 0x58)
1144201745
→ ADD ESP,4 するのが面倒だったので、 POP EAX で戻しています。
→ ちゃんと10進数表示されているようです。
→ rel32は32ビットの相対アドレスを書き込む命令です。E8はCALL命令です。

(3) 見どころは?

こめんと欄


コメントお名前NameLink

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS