【汇编】sar与shr的坑爹之旅。

本文讲述了在逆向工程中遇到的一道题目,涉及汇编指令SAR和SHR的区别。SAR算数右移保留符号位,SHR逻辑右移用0填充。作者通过调试发现初始Python代码中未考虑SAR特性,修正后得到正确结果0x7eeb184f。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一道简单逆向题目卡了我好久。。(主要还是汇编太渣。
是关于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

我一开始的python代码如下:


                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值