132-2299-7075

逆向工程中的运算符识别与优化

  在大多数工作中,咱们所需求分析的最要害内容简直都是算法,由于就是一个软件的魂灵。一般意义上来讲,是由各种杂乱的数学公式组成的,因而假如咱们要真实看懂一个加密、解密或紧缩算法的话,那么学习运算符的技巧仍是十分必要的。下面咱们就由简入繁,逐个为您分析中数学运算的精要。


timg (4).jpg


  为了使除法的倒数相乘优化成为可能,编译器运用了定点运算计划来表明小数。何为定点运算,定点运算有什么特色呢?我们都知道,一般状况下,小数都是用浮点类型来表明的,有一位记载当时的小数点坐落哪里。当然还有其他的一些转化规则,咱们只需知道浮点类型的小数点能够坐落恣意一位,也就是说"小数点是起浮的".


  而定点运算依据字面意思来了解就是"小数点是固定的",这种小数的定点表明法有许多长处,其间最重要的就是效率高。当然,作为价值,相同也有必要承当随之而来的精度上的丢掉。那么,这个定点表明法又是怎样运作的呢?它怎样就能保存小数信息呢?这部分内容的相关材料很难寻觅,通过很多近似材料的启示与实验,终究才证明其原理其实很简单,这还要从定点表明法的小数点方位与精度说起。


  编译器一般都将小数点定位在第一位,而要表明一个数的倒数,那么用小数表明的话必定是一个小于1的数。例如倒数与12345678的倒数分别为0.125与0.000000081,其整数部分恒为0.大多数状况下除法是最好辨认的,由于其特征很显着。在前面具体地解说了编译器运用位移指令(sar、shr)的优化状况,显着,除法必定也会存在这种优化,可是鉴于其基础知识现已解说过,且原理比较简单,因而除法的位移优化将一带而过,咱们将要点放在与倒数相乘相关的优化上。


  当咱们试图用定点表明法表明更小的小数时,其精度问题就越显着。拿一个4位的定点小数来讲,其最小精度为0.0625,也就是说,假如咱们想表明0.05的话是不可的,那么除了添加位数以外,还有没有什么其他办法呢?做法很简单,咱们只需用0.05乘以5,那么咱们就能够用0x4来表明它了,并且精度一点也没丢掉,再次运用的时分只需再将其除以5即可。


  不过令人懊丧的是,上面的思路尽管原理是对的,可是实际状况要杂乱一些。由于编译器终究是要将除法优化掉的,所以咱们有必要确保在数据复原时不能呈现除法。这很显着要用到位移了,而位移的特色是只能转化除数为2的整数次方的除法,因而这就需求咱们确保在改换小数时将其添加的倍数也有必要是2的整数次方。


在线客服
 
 
 工作时间
周一至周六 :8:30-17:30
周六至周日 :9:00-17:00
 联系方式
杨经理:13222997075
邮箱:13222997075@163.com