3.2 レジスタ#
たとえば、ADD(加算)命令の場合、メモリ内の 2 つの数値を直接加算することはできません。プロセッサは、そのうちの 1 つの数値をレジスタに転送し、もう 1 つのメモリアドレスの数値と加算する必要があります。
32 ビットの汎用レジスタは、EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI、および EIP です。
- EAX(アキュムレータ):EAX は算術演算や一部のフォーマット指令によく使用されます。
- EBX(ベースインデックス):EBX は、開始メモリアドレスを格納するためによく使用されます。
- ECX(カウンタ):ECX は、さまざまな命令のカウンタとして使用されます。同時に、メモリデータのアドレスオフセットも格納します。カウンタを使用する命令には、文字列命令、オフセット命令、シフト命令、およびループがあります。
- EDX(データ):EDX は通常、乗算の一部のビットと除算の余りを格納するために使用されます。同時に、開始メモリアドレスも格納できます。
- EBP(ベースポインタ):EBP は、関数内のパラメータや変数のベースアドレスとして使用されます。
- EDI(宛先インデックス):EDI は、文字列命令によく使用され、対象の文字列を指します。
- ESI(ソースインデックス):ESI は、文字列命令によく使用され、元の文字列を指します。
- EIP:次に実行される命令のアドレスを格納します。
- ESP:スタックのトップアドレスを格納します。
以下はマインドマップです:
EBX には BX、BH、および BL のサブレジスタがあり、ECX には CX、CH、および CL のサブレジスタがあり、EDX には DX、DH、および DL のサブレジスタがあります。他の汎用レジスタの 9〜16 ビットには名前が付けられておらず、直接内容を取得することもできません。
基本的なデータタイプは、BYTE が 1 バイト(8 ビット)のメモリを使用し、WORD が 2 バイト(16 ビット)のメモリを使用し、DWORD が 4 バイト(32 ビット)のメモリを使用し、QWORD が 8 バイト(64 ビット)のメモリを使用します。
64 ビット | 32 ビット | 16 ビット | 8 ビット(下位) | 8 ビット(上位) | コメント |
---|---|---|---|---|---|
RAX | EAX | AX | AL | AH | |
RBX | EBX | BX | BL | BH | |
RCX | ECX | CX | CL | CH | |
RDX | EDX | DX | DL | DH | |
RSI | ESI | SI | SIL | - | |
RDI | EDI | DI | DIL | - | |
RBP | EBP | BP | BPL | - | ベースポインタ |
RSP | ESP | SP | SPL | - | スタックポインタ |
R8 | R8D | R8W | R8B | - | |
R9 | R9D | R9W | R9B | - | |
R10 | R10D | R10W | R10B | - | |
R11 | R11D | R11W | R11B | - | |
R12 | R12D | R12W | R12B | - | |
R13 | R13D | R13W | R13B | - | |
R14 | R14D | R14W | R14B | - | |
R15 | R15D | R15W | R15B | - | |
RIP | EIP | IP | - | - | |
RFLAGS | EFLAGS | FLAGS | - | - |
レジスタとサブレジスタ
データタイプ | サイズ(ビット) | 一般的な使用法 |
---|---|---|
バイト | 8 | 文字、小さな整数 |
ワード | 16 | 文字、整数 |
ダブルワード | 32 | 整数、単精度浮動小数点数 |
クワッドワード | 64 | 整数、倍精度浮動小数点数 |
ダブルクワッドワード | 128 | パックされた整数、パックされた浮動小数点数 |
基本データタイプとメモリの使用量
3.3 MOV 命令#
データ転送命令 MOV:始操作単位(src)の内容をターゲット単位(dest)にコピーします。
MOV EAX, EDI
ほとんどの場合、レジスタ間で直接転送することができますが、EIP レジスタは直接的に値を代入または読み取ることはできません。たとえば、MOV EIP, EAX
という命令は無効です。
IDA では、アドレスの前にOFFSET
という単語がある場合、そのアドレス自体の値を指しますが、OFFSET
という単語がない場合、そのアドレスに格納されている内容を指します。