首页
社区
课程
招聘
[旧帖] [求助]0 day 第90页,有一句汇编不懂 0.00雪花
发表于: 2013-3-4 21:17 1348

[旧帖] [求助]0 day 第90页,有一句汇编不懂 0.00雪花

2013-3-4 21:17
1348
DWORD digest=0
digest=((digest<<25) |  (digest>>7) )

其实汇编就一条 ror 7 ,循环右移7位。

我不知道循环右移7位的代码为什么是
digest=((digest<<25) |  (digest>>7) )

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我也不知道理解是否正确,因为针对32位运算,digest循环向右移7位就等于digest循环向左移25位,所以中间是或“ | ”。但是为什么不直接写digest>>7 ??
2013-3-5 10:00
0
雪    币: 5
活跃值: (108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
看不懂.......
2013-3-5 10:56
0
雪    币: 496
活跃值: (286)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
4
要打好基础
在C语言中 >> 和 << 是逻辑移位操作,并不是循环移位操作。
举个例子
一个

DWORD a = 0x10000001000000100000000000000001;
b = a << 3;


以上代码执行后
b = 0x00001000000100000000000000001000;
可以看到最高3位(最左边的)是被丢弃了的,并不是放到最低3位,而低位多出来的用0来填充。
同理 >> 逻辑右移也是舍弃低位,空位填0

所以要上述说的循环右移7位在C语言中的做法是
1.将原数值 左移25位,结果是高25位被丢弃,而最低  7位移到高  7位,结果赋值b
2.将原数值右移    7为,结果是低  7位被丢弃,而最高25位移到低25位,结果赋值c
3.将b和c进行或运算,得到的结果就相当于a循环右移7位。
2013-3-5 13:28
0
游客
登录 | 注册 方可回帖
返回
//