Как я могу изменить файл приложения, которое запущено в данный момент (в Linux)? - PullRequest
3 голосов
/ 07 июня 2010

У меня запущено приложение под названием AppFS. Это приложение имеет файловую систему ext2, только что присоединенную к концу файла (она расположена таким образом, что двоичный файл приложения существует в интервале 1 МБ, за которым следуют данные ext2).

Теперь в программу встроен FUSE, и мне удалось извлечь файловую систему из данных приложения во временный файл, чтобы FUSE мог его смонтировать / использовать.

Теперь у меня проблема с записью временного файла обратно в файл приложения. Я получаю «Текстовый файл занят», предположительно, потому что приложение заблокировало себя и не позволяет производить запись.

Есть ли способ заставить файл разблокироваться, чтобы я мог записать в него данные? (Важно отметить, что я не изменяю двоичную область приложения - просто переписываю компонент ext2.) Его необходимо разблокировать, не требуя прав доступа root (разблокировано тем же пользователем, который запустил приложение).

Ответы [ 2 ]

1 голос
/ 08 июня 2010

Решением этой проблемы было переименование существующего имени приложения (в местоположение во временном каталоге), а затем перемещение нового (сгенерированного) файла обратно на его место и применение того же umask / uid / gid, что и старого один имел. После перемещения вы можете просто отключить исполняемый файл.

Это немного хакерский обходной путь (мне особенно не нравится тот факт, что приложение полностью удалено и заменено), но оно работает.

0 голосов
/ 07 июня 2010

Что бы я сделал:

  1. Запустить AppFS
  2. Извлечение только исполняемой части в файл (без ФС)
  3. Запустить извлеченный исполняемый файл, указав в качестве параметра исходный исполняемый файл (с прикрепленной ФС)
  4. Изменить исходный исполняемый файл из извлеченной программы (без проблем - исполняемый файл больше не работает)
  5. Самостоятельно удалить извлеченную программу при выходе

Что нужно сделать:

  1. Измените приложение AppFS, чтобы оно выполняло шаги 2, 3, 4 и 5 из предыдущего перечисления.

Я не вижу другого способа сделать это. Эта архитектура напоминает архитектуру SFX .

...