首页
社区
课程
招聘
[求助]关于<C++反汇编与逆向分析解密>这本书除法部分
2019-5-30 11:22 43460

[求助]关于<C++反汇编与逆向分析解密>这本书除法部分

2019-5-30 11:22
43460
推导6: (有 整数a b 实数x a!=b b != 0)

设 a=2 b=100 x = 3.14

(/)为分之符

0<=x < | 1/b | 则 向下取整 ⌊  0<=xa/b + x ⌋ =  ⌊ a/b ⌋
0<=x < | 1/b | :
0<3.14<20
⌊ a/b + x⌋ = ⌊ a/b ⌋ :

2/100 = 50
50+3.14 = 53.14
⌊ a/b ⌋ :
2/100=50

53.14 = 50 ?????????

求解

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 1000
活跃值: (67)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
DeepMind 2019-5-30 19:53
2
1
推导6本身是正确的,你的演算有如下问题: 

你的值:
a = 2; b = 100; x = 3.14;
;
0、
a是分子,b是分母,那么a ÷ b = 2 ÷ 100 = 2 / 100 = 0.02
由于C语言本身是向0取整,结果丢弃小数位,值为0;
;
1、
实数x不是任意定义的,实数x必须满足推导6的两个条件之一,实数x满足的条件不同,将直接影响最后的结果。
而你的x = 3.14属于任意定义,且不符合推导6的两个条件;



先假设x = 3.14正确,代入推导6公式,可反证你的错误
0 <= x < |1/b| ==> 0 <= 3.14 < |1/100| ==> 0 <= 3.14 < 0.01
3.14 >=0 满足,3.14 < 0.01 不满足
-|1/b| < x <=0 ==> -|1/100| < 3.14 <= 0 ==> -0.01 < 3.14 <= 0
3.14 > -0.01 满足,3.14 <= 0 不满足

如此,推导6公式对你的演算,是不支持的。

;
2、
计算实数x的值:

0 <= x < |1/b| ==> 0 <= x < |1/100| ==> 0 <= x < 0.01
实数x在条件①的范围 [0,0.01)

-|1/b| < x <=0 ==> -|1/100| < x <= 0 ==> -0.01 < x <= 0
实数x在条件②的范围(-0.01,0]
;
3、
验证实数x在条件范围内时,推导6的正确:
0 <= x < |1/b| , 实数x在条件①的范围 [0,0.01),假设实数x取值0.001
代入推导6取下整(往负无穷方向)
a/b+x = 2/100 + 0.001 = 0.021 ==> 取下整值为 0
a/b = 2/100 = 0.02 ==> 取下整值为 0
0 等于 0,符合 

-|1/b| < x <=0 ,实数x在条件②的范围 (-0.01,0] ,假设实数x取值-0.001

代入推导6取上整(往正无穷方向)

a/b+x = 2/100 + (-0.001) = 0.019 ==> 取上整值为 1

a/b = 2/100 = 0.02 ==> 取上整值为 1

1 等于 1,符合


最后于 2019-5-30 22:24 被DeepMind编辑 ,原因:
游客
登录 | 注册 方可回帖
返回