2

*アセンブリで操作を解釈する方法は? ある種の配列操作が含まれますか?

IDA のスニペットの例では、プログラムの引数を使用しています。

mov     eax, [ebp+arg_0]
mov     ecx, [ebp+arg_4]
mov     edx, [ecx+eax*4-4]
4

1 に答える 1

3

これは乗算です。

x86 では、1 つの命令で次の式を使用してメモリにアクセスできます。

*(base + offset*multiplier + displacement)

base と offset はレジスタで、multiplier は 1、2、4 または 8 で、displacement は定数です。

通常、これが表示されるときは、配列操作を見ています。たとえば、ecx - 4(これはただのarg_4 - 4であり、ここでarg_4はポインターです) は 4 バイト整数の配列の開始である可能性が高く、eax(これはただのarg_1であり、ここでarg_1は a ですsize_t)配列へのオフセットになります。ただし、絶対に何でもかまいません。プログラムが最適化されてコンパイルされると、コンパイラはこれらの構造を使用してあらゆる種類の巧妙なトリックを引き出します。

于 2012-08-31T14:18:29.480 に答える