gpt4 book ai didi

c - 为什么多次执行局部变量的地址不同,用GDB调试却不一样?

转载 作者:太空狗 更新时间:2023-10-29 17:25:51 25 4
gpt4 key购买 nike

为什么当从 gdb 运行代码时,我为声明的变量获得了相同的地址,但在执行二进制文件时却没有获得相同的地址。

#include<stdio.h>
void main()
{
int *x,q;
//I saw the address of the variable q in this program through gdb during the __1st__ execution.
//I re-compiled the program to make x to point to this address.
x=0x7fffffffe2bc;
*x=3;
printf("%d",(*x));
}

我通过 gdb 运行该程序,它从未出现过段错误。

$ gdb -q ./a.out  
Reading symbols from /home/eknath/needed2/a.out...done.
(gdb) r
Starting program: /home/eknath/needed2/a.out
3
Program exited normally.
(gdb) q
$

但程序的正常执行总是会产生 SEGFAULT。

$ ./a.out   
Segmentation fault

我不知道这个问题是否与 Is this always the address for GDB debug program? 重复

注意:我没有关闭ASLR

最佳答案

在 GDB 下运行时您总是获得相同地址的局部变量的原因是 GDB(为了简化大多数调试场景)禁用地址空间随机化。

您可以通过 set disable-address-randomization off 要求 GDB 这样做。

奇怪的是,禁用当前进程的地址随机化不需要任何特权,并且通过调用personality(2) 来完成。这是 patch添加了此功能。

关于c - 为什么多次执行局部变量的地址不同,用GDB调试却不一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7720462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com