首页
社区
课程
招聘
函数返回值问题
发表于: 2011-9-24 10:49 3828

函数返回值问题

2011-9-24 10:49
3828
刚开始学逆向,用扫雷做例子。
BP RAND函数后,程序停留在
多次运行,EAX的值都是00031EA0
这是为什么?
rand函数的返回值每次应该都不一样吧?
但是dword ptr [eax+14]里面的值每次都不一样?
求解释

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
可能eax是地址,[eax+14]才是内容。
2011-9-24 11:04
0
雪    币: 1839
活跃值: (295)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
3
也许是没有Rand没有初始化。
不妨用 : RDTSC获得随机,这个不需要初始化.
2011-9-24 15:22
0
雪    币: 171
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我是来看别人的程序的
2011-9-24 16:39
0
雪    币: 171
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=ronging;1003312]可能eax是地址,[eax+14]才是内容。[/QUOTE]

EAX不是存函数返回值的吗?
难道rand返回的是一个地址?
2011-9-24 16:52
0
雪    币: 188
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
第一行函数返回后eax不是rand的返回值, 他在77c09f25函数结束时被赋值esi(一般都是地址)
然后下面的计算才是真正计算随即数的过程

1。77c09f25 被调用,返回值写在eax+14h (首次有一个预设值被使用)
2。 eax+14h的内容记录下来 ecx
3。 经过计算, 将结果记录写回 eax+14h, 该值会作为下次77c09f25被调用时计算的种子
4。再次对ecx 计算, 然后结果赋给eax 作为rand 返回值

这样,每次计算的中间结果会作为下次计算的种子, 来保证最终为随即数的规模尽量大

这样做是因为rand是一个伪随机数(你运行两次程序,每次记录10000条,你会发现他们是一样的)
第一个种子是写死的,选择理由就是用这个种子产生的序列最长
还有一个函数是设置种子的,忘了是什么了
2011-9-24 22:41
0
游客
登录 | 注册 方可回帖
返回
//