banner
lca

lca

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

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

画像

3.2 レジスタ#

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

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

image

image

  • EAX(アキュムレータ):EAX は算術演算や一部のフォーマット指令によく使用されます。
  • EBX(ベースインデックス):EBX は、開始メモリアドレスを格納するためによく使用されます。
  • ECX(カウンタ):ECX は、さまざまな命令のカウンタとして使用されます。同時に、メモリデータのアドレスオフセットも格納します。カウンタを使用する命令には、文字列命令、オフセット命令、シフト命令、およびループがあります。
  • EDX(データ):EDX は通常、乗算の一部のビットと除算の余りを格納するために使用されます。同時に、開始メモリアドレスも格納できます。
  • EBP(ベースポインタ):EBP は、関数内のパラメータや変数のベースアドレスとして使用されます。
  • EDI(宛先インデックス):EDI は、文字列命令によく使用され、対象の文字列を指します。
  • ESI(ソースインデックス):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

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

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

3.3 MOV 命令#

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

MOV EAX, EDI

image

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

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

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