首页
社区
课程
招聘
算法求教
发表于: 2009-11-25 17:24 4672

算法求教

2009-11-25 17:24
4672
mov edi,0x6457b
mov ecx,edi
mov eax,edi
shr eax,8
and ecx,0xffff
xor ecx,eax
mov edx,0x80808081
mov eax,ecx
mul edx
shr edx,7
mov eax,edx
shr eax,8
sub eax,edx
sub ecx,eax
lea eax,[ecx+ecx*2]
lea eax,[ecx+eax*4]
请问这段算法用0x6457b 做了怎样的运算?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
2
y= (x>>8) ^ LoWord(x)
HiByte= y div FF
LoByte= y mod FF

以这例子 0006457B :
  000645^457B= 433E
  433E div FF = 43
  433E mod FF = 81
所以得 4381

最后2行只是乘以 0Dh
4381*0D=36D8D

--------------

若你 shr eax,8 改成 shl
则只是 y mod FF , 再乘0Dh
2009-11-25 21:06
0
雪    币: 290
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
问下sessiondiy大哥
HiByte= y div FF
LoByte= y mod FF
一句句看能看懂 但这个两个不明白怎么来的
2009-11-26 13:24
0
雪    币: 149
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这4句
mov edx,0x80808081
mov eax,ecx
mul edx
shr edx,7
相当于  y/FF  (y*0x80808081/2^39≈y/255)

mov eax,edx
shr eax,8
sub eax,edx
sub ecx,eax
为y/FF+y

最后两句 即乘以0Dh(15)
2009-11-26 16:22
0
雪    币: 141
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
你太强了,我今天才发现后面输错了,果然是shl
2009-11-26 16:43
0
雪    币: 141
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
请教一下sessiondiy大哥:
一般什么情况下会mod ff 呢,我最近分析代码时老是遇到
2009-11-26 16:47
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
7
这问题你以前问过了.
我不知道.

(shl 是比较合理. 不想发帖问,我就直接写了.)
(这个跟你之前问的那个其实是一样的算法)
2009-11-26 17:54
0
雪    币: 290
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
Thanks
看来汇编功底不行 看的好费劲

记得哪个帖子某人说sessiondiy看汇编跟看报纸一样 然后s回帖 我不看报纸
2009-11-26 19:51
0
游客
登录 | 注册 方可回帖
返回
//