我创建了一个简单的C程序,每次将其加载到GDB中时,都会看到分配给该程序指令的相同内存地址。例如,一个函数what()
总是在内存位置0x000055555555472d中加载。实际上,每次执行的堆栈都是完全相同的(不仅是堆栈的内容,而且是rsp指向的内存地址。
我知道可以在Linux中通过将“ / proc / sys / kernel / randomize_va_space”设置为0来禁用ASLR,但是我的Debian系统中的值为2。
root@Sierra ~ % cat /proc/sys/kernel/randomize_va_space
2
根据我对ASLR的了解,这些地址应在每次运行时随机分配。我的问题是为什么会这样?我做错什么了吗?
默认情况下,gdb在Linux上禁用地址空间随机化,覆盖kernel.randomize_va_space
sysctl变量可能具有的任何值。
gdb命令set disable-randomization off
将关闭此功能,并且gdb之后创建的任何调试目标都将根据的值打开或关闭ASLR kernel.randomize_va_space
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句