lea 命令#
LEA はLOAD EFFECTIVE ADDRESS:“LEA A, B”
命令で、B のアドレスを A に渡します。
この命令は B に格納された内容を取得せず、アドレスまたは後のオペランドの計算結果(角括弧を追加)を渡すだけで、この方法は変数パラメータのアドレスを取得するのに一般的に使用されます。
関数パラメータとローカル変数#
IDA が発見した関数は、呼び出し前に一般的にパラメータを渡す必要があり、大部分は PUSH 命令(32 ビットのみ)を通じて行われます。
関数パラメータ
パラメータの渡し方
LEA 命令は角括弧を使用していますが、角括弧内の式を計算してアドレスを渡すだけで、その内容を読み取ることはありません。
LEA のその他の効果#
LEA はまた、角括弧内の計算結果をターゲットレジスタに渡すためにも使用でき、結果のアドレスに格納された内容を読み取ることはありません。例えば、LEA EAX,[4+5]
命令は計算結果 9 を EAX に渡し、MOV EAX,[4+5]
命令のようにアドレス0x9
に格納された内容を EAX に渡すことはありません。
LEA は変数のアドレスを取得し、MOV は変数のアドレスに格納された値を取得します(OFFSET を除く)。