double类型逆向
来源:互联网 发布:手机淘宝聊天记录恢复 编辑:程序博客网 时间:2024/06/08 16:18
发到了看雪:http://bbs.pediy.com/showthread.php?t=153009
建议先自己动手尝试一下再阅读本文。
看代码:代码:
9: double fDouble = 15.5; 00410958 mov dword ptr [ebp-8],0 0041095F mov dword ptr [ebp-4],402F0000h
01000000001011110000000000000000
根据mov dword ptr [ebp-8],0,得到补上末尾的32位为:
0100000000101111000000000000000000000000000000000000000000000000
开始分析:
第一位符号位:0
之后的十一位为指数位:10000000010,减去1023后得3
剩余为尾数位:1111000000000000000000000000000000000000000000000000
把尾数位补上1,小数点点在后面:
1.1111000000000000000000000000000000000000000000000000
小数点根据指数位,向后移动:
1111.1000000000000000000000000000000000000000000000000
还原成了二进制小数,这里有一篇不错的文章详述了十进制数与二进制数的互转,如果你不熟悉,可以参考:http://hi.baidu.com/ctzhidao/item/cf...48c51e886d10f8
这里给出转为十进制后的结果:
整数位:
1+2+4+8=15
小数位:
(2^-1)*1=0.5
结果:15+0.5=15.5
完毕
需要注意的是,由于入栈时栈顶是从高地址向低地址增长的,所以这种情况要把第一个push后面的操作数放到前面:
代码:
9: printf("%.1f\n", 8.0/5.0); 00410958 push 3FF99999h 0041095D push 9999999Ah
代码:
00401028 push 40080000h0040102D push 00040102F call _sqrt (00401124)00401034 add esp,800401037 fadd st(0),st00401039 fdiv qword ptr [__real@8@40019cccccccccccd000 (00428038)]0040103F fadd qword ptr [__real@8@3fff8000000000000000 (00428028)]00401045 sub esp,800401048 fstp qword ptr [esp]0040104B push offset string "%.8f\n" (0042801c)00401050 call printf (00401090)00401055 add esp,0Ch
00428038 9A 99 99 99 99 99 13 40
00428028 00 00 00 00 00 00 F0 3F
- double类型逆向
- double类型赋值问题
- double类型相等判断
- mysql float double 类型
- double类型的讨论
- JAVA double 类型相加
- mysql float double 类型
- double类型显示问题
- double类型内存存储
- mysql float double 类型
- mysql float double 类型
- double 类型 客户端解析
- double类型数据范围
- double类型存储
- Double 类型 运算处理
- double类型数据初始化
- java Double类型减
- double类型解析
- MySQL存储过程
- Android Bluetooth 分析(精)
- Asp.net MVC + MySQl + EF Code First 不能自动生成数据库
- webservice
- VC实现串口通信例程
- double类型逆向
- Openssl ASN.1 说明一 分享
- VC++ 常用插件
- 统计难题(hOJ 1251)
- Linux下SVN的备份与恢复
- enum枚举类型
- 新手应该具备的基本素质
- 电视上那些特别"没常识"的广告,真的会有人买吗?为什么这么明显的假广告还会有电视台播放?
- iOS UIview传递参数