Pull to refresh

Comments 8

Спасибо! Очень познавательно и интересно. Хотя переносимость таких штуковин может хромать — как между разными версиям одной ОС, так тем более — между разными ОС (например, нам нужно универсальная программа между Win/Lin/Mac).

Спасибо! :) В некоторых случаях можно попробовать сделать разные обёртки для разных систем: например, на Windows, говорят, есть некий Structured Exception Handling (а вот как быть на старых Линуксах и прочих *nix...).

userfaultfd вообще интересный. Тут с его помощью недавно кое-кто реализовал unfork() — как fork(), только наоборот: объединяет два процесса в один.

Не совсем понятен смысл этого проекта — имхо, через ptrace можно заставить процесс форкнуться, поэкспериментировать с форком и затем завершить его, и "отпустить" на волю оригинальный процесс.
Также, вспоминается проект для старых Motorola с залоченным загрузчиком "2ndinit", где аналогично (через ptrace на init) заставляли init выполнить execve() без fork() и запустить поверх себя в контексте PID 1 совершенно другой бинарник — там это применяли для запуска CyanogenMod поверх стоковой прошивки без изменения boot.img. Причём, это всё делали ещё поверх ядра 2.6.


Или я чего-то не понимаю?

Ну… Whitequark его сделала в первую очередь потому, что она может :)


Вообще по идее это можно использовать для отладки и мониторинга в рамках одного процесса: периодически делать снепшоты удалённого процесса к себе в адресное пространство и там просто читать память, или заставлять свою локальную копию процесса что-то выполнить, имея его у себя в адресном пространстве. Так и оригинальный процесс не затрагивается (он возможно даже не узнает, что к нему подключался отладчик), и «отладчик» может более-менее простым образом, например, пробенчмаркать что-то, вызывая код напрямую и не реализуя половину gdb, и не вгружая себя или бенчмаркалку в другой процесс.

пробенчмаркать что-то, вызывая код напрямую

Интересная мысль. Но вот реализацию себе плохо представляю.
Допустим получили дамп удаленного процесса, но это бинарные данные… вот дальше как оттуда вызывать ф-цию?
Или еще нужно распарсить elf программы и оттуда брать указатели на ф-ции?
Абалденный пост! Побольше бы такого, мой респект!
Sign up to leave a comment.

Articles