Я не понимаю. Вы **** и используя `найти` и для того, чтобы изучить каталог контента, который вы хотите использовать `остается`, `лс` и `команда grep`? Это кажется сумасшедшим для меня. спасибо за ответ, это работает. можете ли вы объяснить всю команду ? @не понимаешь практике не практикует, а просто оставаться в нашей зоне комфорта, как мы похожи на животных. @GendoIkari я не знаю *почему* они сделали исключение к правилу 109.2, но они сделали. Спархок @да, я знаю, что, но это не поможет ответить на вопрос. Я хотел бы избежать, что путь суховато, а у него на ИСО когда я запустите команду `make build_netboot`.

Следующий быстрый-и-грязный скрипт на Python, дампы памяти процесса в stdout. Это имеет побочный эффект загружать любые выгружена страница или файл, сопоставленный. Называйте это как cat_proc_mem 123 456 789 , где аргументы являются идентификаторами процесса.

Этот сценарий является абсолютно специфичным для Linux. Это могут быть адаптированы для других систем с аналогичным в/proc структуры (Солярис?), но забывать о его, например, на *БСД. Даже на Linux, вам может потребоваться изменить определение c_pid_t и значения PTRACE_ATTACH и PTRACE_DETACH. Это доказательство принципа скрипт, не предназначены в качестве примера хорошей практики программирования. Используйте на свой страх и риск.

Linux делает памяти процесса доступен как в/proc/$PID в/мэм. Читаются только определенные диапазоны адресов. Эти диапазоны могут быть найдены путем считывания памяти отображения информации из текстового файла в/proc/$PID в/карты. Псевдо-файл в/proc/$PID в/мэм не может быть прочитан всеми процессами, которые имеют права на чтение: читатель процесс должен был позвонить в ptrace(PTRACE_ATTACH, $пид).

#!/usr/Бен/ОКР питона
импорт под, пере, Сыс

## Частичный интерфейс вызова ptrace(2), только для PTRACE_ATTACH и PTRACE_DETACH.
c_ptrace = под.CDLL("библиотеки libc.так.6").в ptrace
c_pid_t = под.c_int32 # это предполагает pid_t это int32_t
c_ptrace.argtypes = [под.c_int, c_pid_t, под.c_void_p, под.c_void_p]
деф в ptrace(прикрепить, пид):
 ОП = под.c_int(16 если присоединить еще 17) #PTRACE_ATTACH или PTRACE_DETACH
 c_pid = c_pid_t(пид)
 нуль = под.c_void_p()
 подстраховаться = c_ptrace(ОП, c_pid, нуль, нуль)
 если индикатор ERR != 0: поднять SysError, 'в ptrace', подстраховаться

## Распарсить строку в /proc/$PID в/карты. Вернуть границы чанка
## читать характер разрешения.
деф maps_line_range(линии):
 м = ре.матч(Р'([0-9А-ФА-ф]+)-([0-9А-ФА-Ф]+) ([-Р])', строка)
 возвращение [инт(м. группы(1), 16), инт(м. группа(2), 16), м.группа(3)]

## Дамп читается куски памяти процессом
деф cat_proc_mem(пид):
 ## Видимо нужно в ptrace(PTRACE_ATTACH, $PID) для чтение файла /proc/$PID в/мэм
 в ptrace(правда, инт(пид))
 ## Чтения памяти карты, чтобы увидеть, что диапазоны адресов чтения
 maps_file = открыть("/proc и/" + пид + "/ "карты"", 'Р')
 диапазоны = карте(maps_line_range, maps_file.readlines())
maps_file.закрыть()
 ## Читать четкий сопоставлены диапазоны
 mem_file = открыть("/proc и/" + пид + "/ "мэм"", 'Р', 0)
 для R в диапазонах:
 если R[2] == 'р':
mem_file.искать(Р[0])
 чанк = mem_file.чтение(r[1] - Р[0])
 кусок печати,
mem_file.закрыть()
 ## Очистка
 в ptrace(ложь, инт(пид))

если __имя__ == "__основной__":
 для пид в sys.аргумент argv[1:]:
cat_proc_mem(пид)

См. также более подробную информацию о в/proc/$PID в/мэм.

unswap () {
 cat_proc_mem "$@" >/dev/нуль
}