
Существуют ли какие-либо инструменты для просмотра/редактирования памяти пользовательского пространства запущенных процессов в Linux?
Это было бы отличным инструментом обучения.
решение1
Память процесса доступна в виде файла, /proc/12345/mem
где 12345 — это идентификатор процесса. Однако вы пока не сможете узнать что-либо напрямую из него. Первое, что нужно выяснить, — это какие части отображаются; эта информация доступна в /proc/12345/maps
и /proc/12345/smaps
. Записи в /proc
документированы в документации ядра по адресуDocumentation/filesystems/proc.txt
. lsof
Команда предоставит информацию о файлах, которые процесс отобразил в памяти, в более удобном для чтения виде.
Может быть, будет более поучительно посмотреть на запущенный процесс с помощью отладчика. Обычный отладчик под Linux — этоГдб. Gdb имеет простой интерфейс командной строки;ДДДиEmacsпредоставить более удобные интерфейсы. Для достижения наилучших результатов посмотрите на программу, в которой все еще есть отладочные символы и исходный код которой доступен (т. е. посмотрите на программу, которую вы только что скомпилировали -g
и не удалили).
Вам также следует знать о strace
необходимости наблюдения за системными вызовами, которые выполняет процесс, и ltrace
наблюдения за (некоторыми) библиотечными вызовами.