吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1870|回复: 6
收起左侧

[求助] 请教关于imul的疑问

[复制链接]
lmyj2me 发表于 2019-11-17 08:36
本帖最后由 lmyj2me 于 2019-11-17 08:38 编辑

分析某64位游戏,这句代码 imul r8d,eax,01000193 自己用易语言实现的话和调试里面的结果不一样,不知道原因,请高手指点下,不胜感激!
此处eax=811C9D0F,r8d=811c9dc5
调试工具里面的r8d结果为:4F0B3E9D  我用程序实现结果为4F0B3E9C
我的程序里面试过方法:1:r8d=eax * 0x1000193
                                       2:tmp=eax * 0x1000193
                                             r8d=tmp xor 0xffffffff  两个结果都是4F0B3E9C

高手指点下怎么回事,谢谢!

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

苏紫方璇 发表于 2019-11-17 09:53
imul最后是补码,最后要+1的
 楼主| lmyj2me 发表于 2019-11-17 10:07
eax=0x9E77B6BC的时候又不用加1了啊,这个什么时候加1,什么时候不用加1
 楼主| lmyj2me 发表于 2019-11-17 10:14
不好意思,我是新人,发错版块了,还请指点下这个问题,非常感谢!
 楼主| lmyj2me 发表于 2019-11-17 10:17
我试过r8d=eax * 0x1000193结果为负数时,取低8位后+1,有时候又不对,比如eax=0x9E77B6BC的时候
cndml 发表于 2019-11-22 22:00
汇编语言功底欠缺,imul是有符号数乘法,eax=811c9d0f 最高位是1说明是个负数,乘上0x1000193后结果肯定是个负数,所以其结果应该是-(0x11c9d0f × 0x1000193)=-4F0B3E9D,在64位寄存器上就是r8d=4F0B3E9D,cf位=1
 楼主| lmyj2me 发表于 2019-11-24 18:34
是啊,汇编基础很差,谢谢指点,eax=811c9d0f 怎么看出最高位是1呢,应该不用转成二进制才能看出的吧
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 14:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表