zyc900329 发表于 2021-12-22 22:16

逆向过程中 遇到的一个小问题

mov   eax, r15d

shl   eax, 31

eax的值为d34805e8 左移31
windows计算器得出结果为
ida里单步调试   得出的结果为0


通过易语言来逆向
d34805e8 转为十进制是3544712680 左移31 结果为7612212517158256640
通过windows计算器计算十进制左移31 得出的结果又是一个值


彻底蒙圈了求大神来给讲讲。。。

wapj152321 发表于 2021-12-23 10:03

这是我计算的,供参考

evea 发表于 2021-12-23 11:43

EAX 是4字节

evea 发表于 2021-12-23 11:49

你把 QWORD 切换到 DWORD

搜索曾经的回忆 发表于 2021-12-23 11:56

复现了下,楼主第一次计算器操作,是在十六进制下输入的
d34805e8,然后左移动0x31位,问题很明显,16进制下的31转十进制是49位,所以就导致了第一次和第三次计算器的运算结果不同

在来解释下第二次为什么是0,因为eax只能放4个字节,1字节=8位,所以eax是32位,运算的结果只取低32位,高32位舍弃(不知道这样说对不对),而你计算器能放64位,所以导致了结果不同

第三次就是64位寄存器左移31位的运算结果
页: [1]
查看完整版本: 逆向过程中 遇到的一个小问题