gcc编译器,这样的随机数是如何产生的?
gcc版本9.3.0,笔记本上运行的。
回答:
这并不是随机数,C 语言的 vararg(变长参数)不包含长度信息,所以即便你没传参数 printf 也不会知道,它仍然会傻傻地读取预定的位置,在 32 位下这个位置应该是 ebp + 12,在 64 位下则是 rsi 寄存器。
通常来讲这个内容不会变,至于为什么实际运行中在变,是因为 Linux 默认开启了名为 ASLR 的安全手段,在每次程序启动时都给程序基址附加了一个随机的偏移,提高内存漏洞的利用难度。将它关掉就会发现数字稳定下来了。
这方面的知识可以搜索“C语言函数调用约定”来了解
以上是 gcc编译器,这样的随机数是如何产生的? 的全部内容, 来源链接: utcz.com/p/194336.html