原来老帖就有了这俩常数:
http://bbs.bathome.net/thread-10146-1-1.html- 下面我们到msvcrt.dll里看看这个rand函数到底做了什么. 下面这个就是rand函数
-
- msvcrt&rand()函数 ;以下就是msvcrt&rand函数,简化下给大家看
- push 1
- call FlsGetValue ;返回值eax 是一个结构的指针(这个结构与纤程有关,我们不管其具体含义)
- mov ecx,[eax + 14h] ;[eax + 14h]对我们的随机数 至关重要 !从计算过程可以看出,它直接影响随机数的计算!
- imul ecx,ecx,343FDh ;ecx里就是从[eax + 14h]取出来的值,看它在计算了
- add ecx,269EC3h
- mov [eax + 14h],ecx ;这里更新了 [eax + 14h],这样下次我们再取随机数,再用到[eax + 14h],那么他已经不是原来的值了
- mov eax,ecx ;这样每一次的数值才可能不同
- shr eax,10h
- and eax,7FFFh ;与运算保证了随机数的范围0~32767。此时的eax中的值就是 我们最后 得到的%random%的值
复制代码
|