GDB:不同硬件平台上每个程序的功能地址是固定的还是动态的?

问题描述 投票:0回答:1

如果我们编写类似printf("%p\n", __builtin_return_address(0));的C代码,并假设得到的结果0xabcd 从客户平台。然后,我们使用gdb 在我们的平台上运行相同的程序,我们发现0xabcd映射到sample_function(),当客户运行该程序时,该功能在客户的平台上是否相同?或者换句话说,对于同一程序但在不同硬件平台上,堆栈地址是固定的还是动态的?

c debugging gdb remote-debugging gdbserver
1个回答
0
投票

为了防止某些攻击,例如缓冲区溢出,操作系统使用地址空间布局随机化(ASLR)。 ASLR确​​保每次您运行程序时,地址将被随机放置在虚拟地址空间上。在Linux上,默认情况下启用。您可以通过运行

来禁用它
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

然后,如果要再次启用它,请运行

echo 2 | sudo tee /proc/sys/kernel/randomize_va_space

有关更多信息,请查看本文How Effective is ASLR on Linux Systems?

另一方面,默认情况下,gdb中禁用了ASLR以简化调试。您可以使用以下命令启用/禁用它

set disable-randomization off
set disable-randomization on
© www.soinside.com 2019 - 2024. All rights reserved.