我创建了一个简单的 C 程序,每次在 GDB 中加载它时,我都会看到分配给程序指令的相同内存地址。例如,一个函数what()
总是在内存位置 0x000055555555472d 加载。实际上,每次执行的堆栈都完全相同(不仅是堆栈的内容,还包括 rsp 指向的内存地址。
我知道可以通过将“/proc/sys/kernel/randomize_va_space”设置为 0 在 Linux 中禁用 ASLR,但我的 Debian 系统中的值为 2。
root@Sierra ~ % cat /proc/sys/kernel/randomize_va_space
2
Run Code Online (Sandbox Code Playgroud)
根据我对 ASLR 的理解,这些地址应该在每次运行时随机化。我的问题是为什么会发生这种情况?我做错了什么吗?
默认情况下,gdb 在 Linux 上禁用地址空间随机化,覆盖kernel.randomize_va_space
sysctl 变量可能具有的任何值。
gdb 命令set disable-randomization off
将关闭此功能,之后由 gdb 创建的任何调试目标将根据 的值打开或关闭 ASLR kernel.randomize_va_space
。
归档时间: |
|
查看次数: |
809 次 |
最近记录: |