2012-06-20 2 views
0

Есть ли способ проверить, какая память machenizem используется ОС?изменение защиты памяти linux

У меня есть программа, которая не работает с ошибкой сегментации, на одном компьютере (ubuntu), но не в другом (RH6).

Одним из объяснений был механизм механики памяти, используемый ОС. Есть ли способ найти/изменить его?

Спасибо,

+0

- это программа, написанная в c? Потому что, возможно, glibc мог бы так себя вести. – DonCallisto

+4

Почему вы не исправляете свою программу, чтобы перестать пытаться получить доступ к памяти, которой она не владеет? – geoffspear

+0

Это для его исправления. – dk7

ответ

1

Вы можете узнать больше о 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).

Смежные вопросы