一段汇编代码的分析

今天在逆向的时候碰到了如下一段汇编代码,对里面的magicnumber有点好奇,研究了一下:

.text:6E06EB40 000 push    ebp

.text:6E06EB41 004 mov     ebp, esp

.text:6E06EB43 004 push    ebx

.text:6E06EB44 008 mov     ebx, ecx

.text:6E06EB46 008 mov     ecx, [ebp+size]

.text:6E06EB49 008 push    esi

.text:6E06EB4A 00C push    edi

.text:6E06EB4B 010 mov     edi, edx

.text:6E06EB4D 010 lea     esi, [ecx+2]

.text:6E06EB50 010 mov     eax, 0AAAAAAABh

.text:6E06EB55 010 mul     esi

.text:6E06EB57 010 shr     edx, 1   ;高32位逻辑右移1位

.text:6E06EB59 010 shl     edx, 2   ;高32位逻辑左移2位

.text:6E06EB5C 010 cmp     edi, edx

.text:6E06EB5E 010 jnb     short  loc_6E

其实是计算:

                (ECX + 2)*(AAAAAAAB/2^32/2)*4 

 

所以上面的汇编代码就是在计算ECX的值加上2再除以3然后再乘以4. 

 

总结:

Mov eax, MagicNumber

mul ...

Shr edx,...

Mov reg, edx

;此后直接使用EDX的值,EAX弃而不用

当遇到以上指令序列式,基本可判定是除法优化后的代码。Mul表明是无符号计算。

 

参考:《c++反汇编与逆向分析技术揭秘》 钱林松 赵海旭 著

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值