首页
论坛
课程
招聘

[调试逆向] [己解决]整数相除的问题

2008-3-9 08:31 4363

[调试逆向] [己解决]整数相除的问题

2008-3-9 08:31
4363
如,函数:  
int func(int a){return a/0x1234;}


反汇编后,可得到:
00401000  MOV ECX,DWORD PTR SS:[ESP+4]
00401004  MOV EAX,[COLOR="Red"]38410B35[/COLOR][COLOR="Blue"] ;<=== 注意这个数值[/COLOR]
00401009  IMUL ECX
0040100B  MOV EAX,EDX
0040100D  SAR EAX,0A       
00401010  MOV ECX,EAX
00401012  SHR ECX,1F       
00401015  ADD EAX,ECX
00401017  RETN


这里采用一种倒数相乘的方法来实现整数相除。0x1234转为倒数之后,是如何和 38410B35 这个数值联系起来的?

请高手指点,谢谢!

[推荐]看雪工具下载站,全新登场!(Android、Web、漏洞分析还未更新)

最新回复 (3)
ccfer 15 2008-3-9 09:37
2
0
0x38410B35 = 0x100000000*0x400/0x1234

取EDX相当于缩放0x100000000倍
SAR EAX,0A相当于缩放0x400倍
szdbg 5 2008-3-9 10:48
3
0
哦,原来如此,明白了

非常感谢ccfer大哥的指点!
BlueT 2 2008-3-9 20:51
4
0
这东西真是怪。那……编译后浮点数(整数和小数)怎么辨认?
游客
登录 | 注册 方可回帖
返回