Comments 8
Спасибо! Очень познавательно и интересно. Хотя переносимость таких штуковин может хромать — как между разными версиям одной ОС, так тем более — между разными ОС (например, нам нужно универсальная программа между Win/Lin/Mac).
Не совсем понятен смысл этого проекта — имхо, через ptrace можно заставить процесс форкнуться, поэкспериментировать с форком и затем завершить его, и "отпустить" на волю оригинальный процесс.
Также, вспоминается проект для старых Motorola с залоченным загрузчиком "2ndinit", где аналогично (через ptrace на init) заставляли init выполнить execve() без fork() и запустить поверх себя в контексте PID 1 совершенно другой бинарник — там это применяли для запуска CyanogenMod поверх стоковой прошивки без изменения boot.img. Причём, это всё делали ещё поверх ядра 2.6.
Или я чего-то не понимаю?
Ну… Whitequark его сделала в первую очередь потому, что она может :)
Вообще по идее это можно использовать для отладки и мониторинга в рамках одного процесса: периодически делать снепшоты удалённого процесса к себе в адресное пространство и там просто читать память, или заставлять свою локальную копию процесса что-то выполнить, имея его у себя в адресном пространстве. Так и оригинальный процесс не затрагивается (он возможно даже не узнает, что к нему подключался отладчик), и «отладчик» может более-менее простым образом, например, пробенчмаркать что-то, вызывая код напрямую и не реализуя половину gdb, и не вгружая себя или бенчмаркалку в другой процесс.
Необычные системные вызовы на Linux