banner
lca

lca

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

「ゼロから始めるIDA逆向き学習」学習ノート-3(レジスタ)

画像

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 ビット32 ビット16 ビット8 ビット(下位)8 ビット(上位)コメント
RAXEAXAXALAH
RBXEBXBXBLBH
RCXECXCXCLCH
RDXEDXDXDLDH
RSIESISISIL-
RDIEDIDIDIL-
RBPEBPBPBPL-ベースポインタ
RSPESPSPSPL-スタックポインタ
R8R8DR8WR8B-
R9R9DR9WR9B-
R10R10DR10WR10B-
R11R11DR11WR11B-
R12R12DR12WR12B-
R13R13DR13WR13B-
R14R14DR14WR14B-
R15R15DR15WR15B-
RIPEIPIP--
RFLAGSEFLAGSFLAGS--

レジスタとサブレジスタ

image

データ型サイズ(ビット)一般的な使用法
Byte8文字、小さな整数
Word16文字、整数
Doubleword32整数、単精度浮動小数点数
Quadword64整数、倍精度浮動小数点数
Double Quadword128パックされた整数、パックされた浮動小数点数

基本データ型とメモリの使用量

3.3 MOV 命令#

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

MOV EAX, EDI

image

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

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

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