Эта простая тестовая программа,
$ cat crash.c
int main() {
int x = 0;
*(&x + 5) = 10;
return 0;
}
Скомпилирована с GCC 7.4.0,
$ gcc -O0 -g crash.c
Имеет неожиданную трассировку стека
$ ./a.out
Segmentation fault (core dumped)
$ gdb ./a.out /tmp/wk_cores/core-pid_19675.dump
Reading symbols from ./a.out...done.
[New LWP 19675]
Core was generated by `./a.out'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00007f450000000a in ?? ()
(gdb) bt
#0 0x00007f450000000a in ?? ()
#1 0x0000000000000001 in ?? ()
#2 0x00007fffd6f97598 in ?? ()
#3 0x0000000100008000 in ?? ()
#4 0x00005632be83d66a in frame_dummy ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
Не знаюне понимаю, почему стек не показывает недопустимое хранилище в привилегированную память?Может кто-нибудь помочь мне понять это?