gcc编译器,这样的随机数是如何产生的?

宇宙第一人气偶像
  • 5
新手上路,请多包涵

image
gcc版本9.3.0,笔记本上运行的。

回复
阅读 750
1 个回答

这并不是随机数,C 语言的 vararg(变长参数)不包含长度信息,所以即便你没传参数 printf 也不会知道,它仍然会傻傻地读取预定的位置,在 32 位下这个位置应该是 ebp + 12,在 64 位下则是 rsi 寄存器。

通常来讲这个内容不会变,至于为什么实际运行中在变,是因为 Linux 默认开启了名为 ASLR 的安全手段,在每次程序启动时都给程序基址附加了一个随机的偏移,提高内存漏洞的利用难度。将它关掉就会发现数字稳定下来了。

图片.png

这方面的知识可以搜索“C语言函数调用约定”来了解

你知道吗?

宣传栏