这并不是随机数,C 语言的 vararg(变长参数)不包含长度信息,所以即便你没传参数 printf 也不会知道,它仍然会傻傻地读取预定的位置,在 32 位下这个位置应该是 ebp + 12,在 64 位下则是 rsi 寄存器。
通常来讲这个内容不会变,至于为什么实际运行中在变,是因为 Linux 默认开启了名为 ASLR 的安全手段,在每次程序启动时都给程序基址附加了一个随机的偏移,提高内存漏洞的利用难度。将它关掉就会发现数字稳定下来了。
这方面的知识可以搜索“C语言函数调用约定”来了解
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…