banner
lca

lca

真正的不自由,是在自己的心中设下牢笼。

《ゼロから始めるIDAリバースエンジニアリング》学習ノート-3(レジスタ)

image

3.2 レジスタ#

例えば、ADD(加算)命令では、メモリ内の 2 つの数を直接加算することはできず、プロセッサはそのうちの 1 つの数をレジスタに転送し、もう 1 つのメモリアドレスの数を加算する必要があります。

32 ビットの汎用レジスタには、EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI、および EIP があります。

image

image

  • EAX (accumulator, アキュムレータ):EAX は四則演算やいくつかのフォーマット命令でよく使用されます。
  • EBX (Base index, ベースインデックスレジスタ):EBX は開始メモリアドレスを保存するためによく使用されます。
  • ECX (counter, カウンタ):ECX はさまざまな命令のカウンタとして使用されます。また、メモリデータのアドレスオフセットも保存します。カウンタを使用する命令には、文字列命令、オフセット命令、シフト命令、およびループがあります。
  • EDX (data):EDX は通常、積の部分ビット数や除算の余りを保存するために使用され、開始メモリアドレスも保存できます。
  • EBP (base pointer):EBP はメモリアドレスを指し、主に関数内のパラメータや変数のベースアドレスとして使用されます。
  • EDI (destination index):EDI は文字列命令でよく使用され、ターゲット文字列を指します。
  • ESI (source index):ESI は文字列命令でよく使用され、初期文字列を指します。
  • EIP:次に実行される命令のアドレスを保存します。
  • ESP:スタックのトップアドレスを保存します。

思考マインドマップは以下の通りです:

image

image

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-bit32-bit16-bit8-bit Low8-bit Highcomment
RAXEAXAXALAH
RBXEBXBXBLBH
RCXECXCXCLCH
RDXEDXDXDLDH
RSIESISISIL-
RDIEDIDIDIL-
RBPEBPBPBPL-ベースポインタ
RSPESPSPSPL-スタックポインタ
R8R8DR8WR8B-
R9R9DR9WR9B-
R10R10DR10WR10B-
R11R11DR11WR11B-
R12R12DR12WR12B-
R13R13DR13WR13B-
R14R14DR14WR14B-
R15R15DR15WR15B-
RIPEIPIP--
RFLAGSEFLAGSFLAGS--

レジスタとサブレジスタ

image

データ型サイズ(ビット)一般的な使用
バイト8文字、少数の整数
ワード16文字、整数
ダブルワード32整数、単精度浮動小数点
クワッドワード64整数、倍精度浮動小数点
ダブルクワッドワード128パック整数、パック浮動小数点

基本データ型とメモリ占有

3.3 MOV 命令#

データ転送命令 MOV: 始動操作単位(src)の内容を目標単位(dest)にコピーします。

MOV EAX, EDI

image

ほとんどの場合、レジスタ間で直接転送できますが、EIP レジスタには直接値を設定したり読み取ったりすることはできません。例えば、MOV EIP, EAXという命令は無効です。

IDA では、アドレスの前にOFFSETという言葉がある場合、そのアドレス自体の値を指しますOFFSETという言葉がない場合、そのアドレスに保存されている内容を指します。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。