I解体Win32のC++プログラムを読んだと私はかなりの数を参照してください。コンパイラはこれらを生成する理由"AND AL、0xFF"の目的は何ですか?
AND AL,0xFF
は、この完全に無意味ですか?ここで
は長い例です。
movsx eax, byte ptr [ebx]
shl eax, 18h
movsx edx, byte ptr [ebx+1]
shl edx, 10h
add eax, edx
movsx ecx, byte ptr [ebx+2]
shl ecx, 8
add eax, ecx
movsx edx, byte ptr [ebx+3]
add eax, edx
xor edx, edx
call sub_43B55C
mov ecx, eax
mov edx, eax
sar ecx, 10h
and al, 0FFh # <----
sar edx, 8
and cl, 0FFh # <----
mov [esi], cl
and dl, 0FFh # <----
mov [esi+1], dl
mov [esi+2], al
add ebx, 4
add esi, 3
inc ebp
cmp ebp, 6
jl short loc_43B5E4
ことが目的ではないことができるようにフラグは、これらの操作の後にチェックされていません。 AND
の後には、AL
,CL
およびDL
の値が[ESI + n]
に移動されています。
前に何があったかわからなくても、言うことは難しいです。 EAXがポインタであり、16バイトの境界に整列させる必要があるとしましょう。これは、真の場合はZFを設定するので、命令へのポイントはフラグを設定することだけです。コンパイラの設定が適切であれば、 'test al、0xff'を使用することもできます。 –
コメントありがとうございます。フラグはチェックされていません。 ANDingは、バイトがメモリに移動する前に発生しているようです。コンテキストの周囲のコードを更新しました。 – user35358
本当に変わったようです。おそらく、この命令は、パディングのために、またはフックのマーカーとして存在します。 – fuz