Tại sao khi chạy mã từ gdb, tôi nhận được cùng địa chỉ cho các biến được khai báo, nhưng trong khi chỉ thực hiện nhị phân, tôi không nhận được cùng địa chỉ.Tại sao địa chỉ của biến cục bộ thay đổi khi thực thi nhiều lần, nhưng không phải khi gỡ lỗi với 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));
}
Tôi đã chạy chương trình thông qua gdb và không bao giờ bị phân đoạn.
$ 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
$
Nhưng việc thực hiện chương trình thông thường luôn tạo ra SEGFAULT.
$ ./a.out
Segmentation fault
Tôi không biết nếu câu hỏi này là một bản sao của Is this always the address for GDB debug program?
Chú ý: Tôi đã không tắt ASLR
Câu trả lời hay, cảm ơn –