アセンブラの基本文法のメモ
- 作者: 愛甲健二
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (12件) を見る
これ読んでいます。これで文法の基礎が勉強できる箇所がありましたので自分用にメモしておきます。
基礎知識
走り書きメモですみません。
Python(核心部分はCで実装)とかRuby(核心部分MRIはCで実装)とかJavaとか(高級言語)
↓
コンパイル
↓
バイトコード(中間コード)(より低級言語。パッと見アセンブラに似た感じ)→逆アセンブル→アセンブラコードを解読(可読)→バイトコードは逆コンパイルができる!ツールJad、JadClipse
↓
仮想機械(MV)上で実行(JavaだとJITコンパイラ(=Just in Time)が機械語ソースを動的に書き出す(イメージ?))
Cとか
↓
gccなどでコンパイル
↓
アセンブリソースができる
↓
アセンブラ
↓
機械語(バイナリ)→逆アセンブル→アセンブラコードを解読(可読,CTF頻出)
レジスタ
CPUのメモリ領域のこと スタックはメモリの扱われ方でデータがロケット鉛筆式に出入りするデータ型っぽいもの
EAX ECX EDX EBX ESP スタックの管理に使われる EBP スタックの管理に使われる ESI EDI EIP 現在のプロセスの管理に使われる
フラグ
C・・・Oまでで0と1の値がはいる。Fをつけてアセンブラ上で扱われることがある
C 0or1:CF P 0or1:PF A 0or1:AF Z 0or1:ZF S 0or1:SF T 0or1:TF D 0or1:DF O 0or1:OF
頻出文法
= MOV (move) += ADD (add) -= SUB (substract) ++ INC (increment) -- DEC (decrement) if == : else: CMP(compare) (ユーザー認証の比較ででるためCTFでキーになる可能性あり) if == : ZF=1 else: ZF=0 TEST(test) (ユーザー認証の比較ででるためCTFでキーになる可能性あり) if ZF==1 : else: JE (just exist?) if ZF==0 : Goto Func() JNE (just not exist?) Goto Func: JMP (jump) Func(): CALL
これでバイナリ解析が少しはできそうだ^^
勉強・引用・参考元の本と記事
- 作者: 愛甲健二
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (12件) を見る