birabiraのめも

忘れっぽいのでここにメモをしていきます

アセンブラ入門  -レジスタ-

セキュリティー業界はアセンブラが読めないと話にならないらしいので勉強したいと思います。

今回はx86アーキテクチャで行きたいと思います。

レジスタ一覧

汎用レジスタ

R〇〇が64ビットレジスタ
X〇〇が32ビットレジスタ
よく使われるレジスタはあるけど基本的に自由。だけどESPとRBPは変更しないほうがいいっぽい。

レジスタ意味
RAX (EAX, AX, AL, AH)アキュームレータレジスタ。算術演算結果が格納される。
RCX (ECX, CX, CL, CH)カウンタレジスタ。ループ命令などのカウンタなどに使われる。
RDX (EDX, DX, DL, DH)データレジスタ。なんにでも使われる。
RBX (EBX, BX, BL, BH)ベースレジスタ
RSP (ESP/SP)スタックポインタ。スタックの一番上を示している
RBP (EBP, BP)ベースポインタ。スタックの一番下をしてしている。めったに変更されない。
RSI (ESI, SI)ソースレジスタ。ポインタとかを保存
RDI (EDI, DI)デスティネーションレジスタ。なんにでも使う

フラグレジスタ

EFLAGSと呼ばれる32ビットのレジスタ
1ビットごと意味がある。

名前何bit目意味
CF0キャリーフラグ。桁上りか桁借りした時にセットされる。
PF2パリティフラグ。2進数で見た時、1の数がが偶数個だったらセット。
AF4調整フラグ。BCD演算の時、桁上りか桁借りした時にセット。
ZF6ゼロフラグ。結果が0になったらセット。
SF7符号フラグ。結果がマイナスになったらセットされる。
TF8ラップフラグ。なにこれ
IF9割り込み可能フラグ。割り込みを有効化したいときにセットする。
DF10方向フラグ。なにこれ
OF11オーバーフローフラグ。オーバーフローした時にセットされる。
IOPL12,13I/Oの特権レベルを表す。
多いので割愛

次は命令とかかな?