逆向工程之表达式优化识别(5)-取模

本文介绍了两种取模运算的优化方法:一种通过位操作实现有分支的取模运算;另一种则采用位移和加减法实现无分支的取模运算。这两种方法能够提高程序效率,适用于特定场景。

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

取模优化

取模运算是得到除法运算之后的余数的运算,这里简单提一下其相关的优化
示例:

mov eax, VAL
and eax, 8000001F
jns LAB1
dec eax
or eax, FFFFFFE0
inc reg
LAB1:

说明:这是一取模运算的示例,VAL是被除数,and的立即数是一个掩码,用来去掉高位保留地位,根据保留的低位数量,可以得到2^k次方的k,所以这里也就是一个x%(x^k)的取模运算

示例2:

mov eax, VAL
cdq
and edx, 1F
add eax, edx
sar eax, 5
shl eax, 5
sub VAL, eax

这也是一个取模运算,区别在于这是一个没有分支语句的取模运算,主要思路是余数 = 被除数 - 商 * 2^k的,可以自行分析,写出表达式,应该难度不大了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值