一道简单逆向题目卡了我好久。。(主要还是汇编太渣。
是关于sar和shr的具体功能不熟悉导致的。
首先说下理论:
汇编语言中SAR和SHR指令都是右移指令,SAR是算数右移指令(shift arithmetic right),而SHR是逻辑右移指令(shift logical right)。
两者的区别在于SAR右移时保留操作数的符号,即用符号位来补足,而SHR右移时总是用0来补足。
例如10000000算数右移一位是11000000,而逻辑右移一位是01000000。
逆向题目的反汇编代码如下:
loc_8048400:
mov ecx, eax
sar ecx, 1Bh //就是这货
shl eax, 5
xor eax, ecx
movzx ecx, byte ptr [edx]
add edx, 1
xor eax, ecx
cmp edx, ebx
jnz short loc_8048400