Как управлять файловым дескриптором в другом процессе? [дубликат]

0
18.05.2016, 05:35
1 ответ

Технически почти все возможно с ptrace () / gdb . Результаты поиска .

Использование ptrace () зависит от архитектуры, неудобно, и, AFAICT, никто не реализовал это за вас. Популярным приложением является внедрение файлового дескриптора в процесс, но это примерно противоположное тому, что вы хотите.

Я думал о том, что потребуется, и это выглядит очень болезненно.

Вы можете использовать подход сценария gdb и посмотреть исходный код screenify . Вероятно, все еще очень неудобно передавать FD изнутри gdb. Способ передачи fds заключается в отправке их как «вспомогательных данных» с помощью sendmsg () через сокет unix.

К сожалению, отправка дополнительных данных обычно выполняется с помощью макроса. Хотя gdb производит потрясающее впечатление от интерпретатора C, я не думаю, что можно использовать макросы.

Другой способ передачи fds - использование fork () , что может предоставить несколько более простых вариантов (в сочетании с exec () ). К сожалению, похоже, что ptrace () и fork () не лучшие друзья.Есть несколько специфичных для Linux команд gdb , которые могут выполнять эту работу, но в них упоминается только поддержка точек останова; он не говорит, можете ли вы заставить команду gdb вызвать fork () , чтобы она работала разумно. Даже если это сработает, вам, возможно, придется повозиться и с FD_CLOEXEC (close-on-exec). Это тоже макрос.

Нетрудно найти числовое значение простого макроса (так был написан screenify). Макроинтерфейс для отправки вспомогательных данных не очень сложен, поэтому вместо этого может быть проще перепроектировать его.

0
28.01.2020, 04:50

Теги

Похожие вопросы