首页
社区
课程
招聘
浮点指令 转换 C语言该怎么写
发表于: 2013-11-27 19:43 7488

浮点指令 转换 C语言该怎么写

2013-11-27 19:43
7488
小弟代码能力很弱 烦劳各位大哥 指点下 在此谢过
在破解一个CM的时候 里面的算法是用的浮点指令
fild qword ptr ss:[ebp-0x8]
fstp qword ptr ss:[ebp-0x14]
fld qword ptr ss:[ebp-0x14]
fmul qword ptr ds:[0x639534] ;*2.0000000000
fstp qword ptr ss:[ebp-0x1C]
fld qword ptr ss:[ebp-0x1C]
算法十分简单就是
循环50次  key=key*2.0000000000
OD得出的值是这个
9.4289814595999989760E+11
程序取了一个DWORD 最后得出的是9428981459
我用VC6写注册机
cstring str;
double key=atof(numstr)
while(i<50)
{
   key=key*2.0;
   i++;
}
str.Format("%lf",key);
得出的值是这个
9.4289814601930156e+038
转换str=9428981460 和上面程序运行的尾数不一样
请问下各位大哥 该怎么改写注册机 觉得是精度问题 该怎么改呀 多谢了

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
直接内联
2013-11-27 23:18
0
雪    币: 645
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
fild qword ptr ss:[ebp-0x8]
fstp qword ptr ss:[ebp-0x14]
fld qword ptr ss:[ebp-0x14]
fmul qword ptr ds:[0x639534]
fstp qword ptr ss:[ebp-0x1C]
fld qword ptr ss:[ebp-0x1C]

这几句在VC6内联汇编中 怎么实现
double a=2.0;
int i=1;
while(i<=0x64)
{
        _asm
        {
                  fld inum
                   fld a
                   fmul st(1)
                    fstp eax 格式错误 好像
        }
}
2013-11-28 10:32
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
浮点运算,本来尾数就会出现不一样的。

不信你自己写个double 的然后printf

程序运行多次,结果会不一样的
2013-11-28 10:34
0
雪    币: 645
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
那岂不是 算法注册机 没法写吗?
2013-11-28 11:43
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我觉得他根本就没有把浮点的所有数值都用上吧。 最后的不在精度范围内的值不用
2013-11-28 14:13
0
雪    币: 645
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
用上了 9428981459
我写的计算出是9428981460
最后两位 感觉像是 四舍五入进去的   CM到很简单  那岂不是 浮点运算 都没法写注册机不成 郁闷
2013-11-28 14:39
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
你看下这段代码是不是单独的函数,如果是的,直接把函数写成shellcode映射到内存,然后传参进去调用!
2013-11-28 14:46
0
雪    币: 4381
活跃值: (4373)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
就是 乘以2  没有其它什么浮点.一看就是易语言的代码
2013-11-30 16:05
0
游客
登录 | 注册 方可回帖
返回
//