text0006の補足説明#1

  • (by K, 2019.03.01)

(0)

(1) x86の32ビットモード用の簡易コード表

  • 32ビットレジスタについて:
    • レジスタは8本ある。このうち、EAXとECXとEDXは値を壊したままRETしても平気。EBXとESPとEBPとESIとEDIは使ってもよいがRET前には値を復元する必要がある。
    • ESPは、関数に入ったらすぐに、8バイトアラインしなければいけない関係で、(8の倍数+4)を引き算し、RET前に(8の倍数+4)を足し算するとよいです。
レジスタ名EAXECXEDXEBXESPEBPESIEDI
レジスタ番号01234567
  • リトルエンディアン
    • x86はリトルエンディアンを採用しているので、EAXに0x12345678を代入したいと思ったら、 B8 78 56 34 12 と書く必要があります。32ビット定数が逆順になって並ぶことに注意してください。
  • 簡易コード表
機械語アセンブラ表記(参考)動作説明
B8 xx xx xx xxMOV EAX,xxxxxxxxEAXレジスタに定数xxxxxxxxを代入する
B9 xx xx xx xxMOV ECX,xxxxxxxxECXレジスタに定数xxxxxxxxを代入する(以下この調子で続き、BFがEDIへの定数代入になります)
8B 05 xx xx xx xxMOV EAX,[xxxxxxxx]メモリの値を4バイト読み込んでEAXレジスタに代入(xxxxxxxxはメモリの番地)
8B 0D xx xx xx xxMOV ECX,[xxxxxxxx]メモリの値を4バイト読み込んでECXレジスタに代入(以下この調子で15, 1D, 25, 2D, 35, 3Dで、EDX~EDIを指定できます)
89 05 xx xx xx xxMOV [xxxxxxxx],EAXEAXの値を4バイトのメモリに書き込む
89 0D xx xx xx xxMOV [xxxxxxxx],ECXECXの値を4バイトのメモリに書き込む(以下この調子で15, 1D, 25, 2D, 35, 3Dで、EDX~EDIを指定できます)
A1 xx xx xx xxMOV EAX,[xxxxxxxx]8B 05 xx xx xx xxの簡略表記
A3 xx xx xx xxMOV EAX,[xxxxxxxx]89 05 xx xx xx xxの簡略表記
89 C0MOV EAX,EAXこんなの意味ない命令だけど、一応紹介
89 C1MOV ECX,EAXECX = EAX;
89 C2MOV EDX,EAXEDX = EAX; 一般にC2の部分のビット0~ビット2が代入先(reg1)を表し、ビット3~ビット5が代入元(reg0)を表す(0xc2 = reg1 + reg0 * 8 + 0xc0)
01 C2ADD EDX,EAXEDX += EAX; ここのC2を変えれば他のレジスタの組み合わせもできる
29 C2SUB EDX,EAXEDX -= EAX; ここのC2を変えれば他のレジスタの組み合わせもできる
21 C2AND EDX,EAXEDX &= EAX; ここのC2を変えれば他のレジスタの組み合わせもできる
09 C2OR EDX,EAXEDX |= EAX; ここのC2を変えれば他のレジスタの組み合わせもできる
31 C2XOR EDX,EAXEDX ^= EAX; ここのC2を変えれば他のレジスタの組み合わせもできる
39 C2CMP EDX,EAXif (EDX ?? EAX) 比較用の命令で??の部分は後続の0f 8x命令群で指定する
0F 8D xx xx xx xxJGE xxxxxxxxif ( >= ) goto ... [符号付き整数比較](xxxxxxxxの部分はEIPへの加算量(相対アドレス)で記述する)
0F AF C2IMUL EAX,EDXEAX *= EDX; c2の部分の意味が加算などとは逆になっていることに注意
83 C0 xxADD EAX,xxEAX += xx; 127以下の小さな整数の定数の加算(C0のところをC1~C7にすることでECX~EDIを指定可能)
83 E8 xxSUB EAX,xxEAX -= xx; 127以下の小さな整数の定数の減算(E8のところをE9~EFにすることでECX~EDIを指定可能)
C3RETreturn; 関数の終了(呼び出し元へ戻る)
  • 現状で認識している問題点
    • 0F 8x命令群の紹介が少ない
    • メモリ番地の指定にレジスタを混ぜる方法の説明がごっそり抜けている

こめんと欄


コメントお名前NameLink

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-03-01 (金) 14:56:28 (262d)