Вы можете узнать больше о virtual memory, system calls, то linux kernel, ASLR.
Затем вы могли изучить роль и использование системных вызовов mmap & munmap (также mprotect). Это системные вызовы, используемые для извлечения памяти (например, для реализации malloc
& free
), иногда с устаревшими системными вызовами, например sbrk
(что становится все более бесполезным).
Вы должны использовать отладчик gdb
(его команда watch
может пригодиться) и утилиту valgrind. strace также может быть полезен.
Посмотрите также на псевдо-файловую систему /proc. Постарайтесь понять, что
cat /proc/self/maps
говорит вам (о процессе работы, что cat
). Смотрите также внутри /proc/$(pidof your-program)/maps
рассмотрите также с использованием утилиты pmap.
Если это ваш собственный исходный код, всегда компилируйте его со всеми предупреждениями и информацией об отладке, например. gcc -Wall -Wextra -g
и улучшите его, пока компилятор не даст никаких предупреждений. Используйте последнюю версию gcc
(т.е. 4.7) и gdb
(т. Е. 7.4).
- это программа, написанная в c? Потому что, возможно, glibc мог бы так себя вести. – DonCallisto
Почему вы не исправляете свою программу, чтобы перестать пытаться получить доступ к памяти, которой она не владеет? – geoffspear
Это для его исправления. – dk7