srupのメモ帳

競プロで解いた問題や勉強したことを記録していくメモ帳

リーバスエンジニアリングバイブル メモ1

リバースエンジニアリングバイブルという本を読み始めたので、章ごとにわかったことをまとめていきたいと思います。

www.impressjapan.jp

 

 

レジスタ = 変数

EAX : 32bit( 4Byte )のレジスタ
 算術計算と戻り値の保存


EDX
 EAX と役割は同じだが、戻り値の保存には使用されない

ECX
 ループを実行するときに(減算)カウントする

EBX
 EAX、EDX、ECX では足りない場合利用

ESI、EDI
 ESI と EDI もスタートアドレスと目的地アドレスであり、ESI からメモリの内容を読み込んで EDI にコピーする
 ソース(Source:スタートアドレス)
 デスティネーション(Destination:目的地アドレス)

 

__declspec(naked)

naked を使用すると、それ以降、この関数の中では補助的なコードを全く使用しないことを指定することになり、コンパイラはこの関数内にどんな独自コード、戻り値を生成しない。

 

重要なアセンブラの命令


PUSH, POP

MOV 値を渡す
LEA アドレスを渡す

ADD

SUB

INT

CALL
INC, DEC

AND OR XOR

XOR EAX, EAX でEAXを0で初期化できる

NOP
CMP, JMP

 

関数の呼び出し(理解不十分)

ebp+4にはリターンアドレスが入っている。

 

反省

まだ関数呼び出しのスタックの部分の理解があいまい