逆アセンブルされた win32 C++ プログラムを読んでいると、かなりの数が表示されます。
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]