page0002
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* jitb00cの紹介
-(by [[K]], 2018.03.06)
** (0) はじめに
-このプログラムは面白半分で作っているだけです。実用性がな...
** (1) これはなに?
-プログラムをコマンドラインから16進数で書いていくと、それ...
-言うまでもないですが、おかしな命令を書けばすぐに落ちます...
-ちなみに VirtualAlloc を使っているのでWindows専用ですが...
-そのうちダウンロードできるようにします。
** (2) 実行例
> がプロンプトなので、その行だけが入力行で、残りは出力で...
→ 起動直後にregsコマンドを実行してみました。
>regs
<regs> eax:00000000 ecx:00000000 edx:00000000 ebx:00...
<stack>
→ espレジスタ以外は0に初期化されています。スタックは何も...
→ セクション命令で機械語をメモリにおいてみます。セクショ...
>sec(0xb8 0x11 0x22 0x33 0x44)
→ B8はEAXへの代入命令です。
→ ちゃんと代入できているか確認してみます。
>regs
<regs> eax:44332211 ecx:00000000 edx:00000000 ebx:00...
<stack>
→ よしよし
→ ではスタックに積んでみましょう。
>sec(0x50)
→ 50 は PUSH EAX です。しかし何も言わないのでうまくいっ...
→ ということで確認です。
>regs
<regs> eax:44332211 ecx:00000000 edx:00000000 ebx:00...
<stack> [44332211]
→ よしよし
→ スタックからおろしてみます。
>sec(0x59)
→ ちなみにこれは POP ECX です。
→ 確認すると・・・
>regs
<regs> eax:44332211 ecx:44332211 edx:00000000 ebx:00...
<stack>
→ うまくいっていることが分かります。
→ これだけだと面白くないので、他のこともやってみます。
>labels
004012f0 : putdec
→ 登録済みの関数が表示されます。
→ この関数を使ってみます。Cで書かれた関数なので、スタッ...
>sec(0x50 0xe8 rel32(0x4012f0) 0x58)
1144201745
→ ADD ESP,4 するのが面倒だったので、 POP EAX で戻してい...
→ ちゃんと10進数表示されているようです。
→ rel32は32ビットの相対アドレスを書き込む命令です。E8はC...
-命令secはセクションの略だったのですが、セクションを作る...
** (3) 見どころは?
-スタックが中途半端な状態でも、ちゃんと帰ってこられるし、...
-レジスタは全部自由に使える。
-ソースはC言語だけになっていて、インラインアセンブラも使...
* こめんと欄
#comment
終了行:
* jitb00cの紹介
-(by [[K]], 2018.03.06)
** (0) はじめに
-このプログラムは面白半分で作っているだけです。実用性がな...
** (1) これはなに?
-プログラムをコマンドラインから16進数で書いていくと、それ...
-言うまでもないですが、おかしな命令を書けばすぐに落ちます...
-ちなみに VirtualAlloc を使っているのでWindows専用ですが...
-そのうちダウンロードできるようにします。
** (2) 実行例
> がプロンプトなので、その行だけが入力行で、残りは出力で...
→ 起動直後にregsコマンドを実行してみました。
>regs
<regs> eax:00000000 ecx:00000000 edx:00000000 ebx:00...
<stack>
→ espレジスタ以外は0に初期化されています。スタックは何も...
→ セクション命令で機械語をメモリにおいてみます。セクショ...
>sec(0xb8 0x11 0x22 0x33 0x44)
→ B8はEAXへの代入命令です。
→ ちゃんと代入できているか確認してみます。
>regs
<regs> eax:44332211 ecx:00000000 edx:00000000 ebx:00...
<stack>
→ よしよし
→ ではスタックに積んでみましょう。
>sec(0x50)
→ 50 は PUSH EAX です。しかし何も言わないのでうまくいっ...
→ ということで確認です。
>regs
<regs> eax:44332211 ecx:00000000 edx:00000000 ebx:00...
<stack> [44332211]
→ よしよし
→ スタックからおろしてみます。
>sec(0x59)
→ ちなみにこれは POP ECX です。
→ 確認すると・・・
>regs
<regs> eax:44332211 ecx:44332211 edx:00000000 ebx:00...
<stack>
→ うまくいっていることが分かります。
→ これだけだと面白くないので、他のこともやってみます。
>labels
004012f0 : putdec
→ 登録済みの関数が表示されます。
→ この関数を使ってみます。Cで書かれた関数なので、スタッ...
>sec(0x50 0xe8 rel32(0x4012f0) 0x58)
1144201745
→ ADD ESP,4 するのが面倒だったので、 POP EAX で戻してい...
→ ちゃんと10進数表示されているようです。
→ rel32は32ビットの相対アドレスを書き込む命令です。E8はC...
-命令secはセクションの略だったのですが、セクションを作る...
** (3) 見どころは?
-スタックが中途半端な状態でも、ちゃんと帰ってこられるし、...
-レジスタは全部自由に使える。
-ソースはC言語だけになっていて、インラインアセンブラも使...
* こめんと欄
#comment
ページ名: