Есть ли способ отправить данные другому стандартный ввод процесса в Mac OS?

Мне было интересно, есть ли API, каким бы неясным он был, который позволял бы кому-то отправлять данные в поток stdin другого процесса в Mac OS X. В Linux, если Я правильно помню, вы можете использовать файловую систему в / proc для доступа к этим потокам (с правильными разрешениями, конечно).

Я не знаю. Порты Маха, Кто-нибудь?

6
задан zneak 21 August 2010 в 22:28
поделиться

4 ответа

К сожалению, я не верю, что вы можете это сделать - MacPorts все пользовательские, и операция, которую вы требуете, требует (либо много хитростей, см. ниже, либо) сотрудничества ядра, которое, я полагаю, не будет обеспечено. Например, в Mac OSX Internals, a System Approach в разделе о передаче дескриптора файла говорится:

Дескриптор является локальным для процесса. в том смысле, что он имеет значение только в процессе, который получил дескриптор, например, при открытии файла. В в частности, процесс A не может получить доступ к к файлу, который открыт в другом процессе B, просто используя значение дескриптора, представляющего этот файл в B.

и затем переходит к описанию того, как отправляются FD.

Часть "хитрости" потребует, чтобы вы заставили какой-то ваш код выполняться (либо в пользовательской среде, либо как часть ядра) в другом процессе.

Например, вы могли бы сделать это в пользовательской среде путем исправления двоичного файла, который является их исполняемым файлом - найти любую инструкцию в начале пути запуска, которая обязательно будет выполнена, и поместить вместо нее переход к вашему собственному коду, который посылает FD вашему наблюдающему процессу-демону, выполняет исправленную инструкцию, а затем переходит обратно в обычный последовательный поток другого процесса.

Чтобы сделать это на уровне ядра, потребуются аналогичные патчи либо к самому коду ядра, либо к коду, который ядро загружает и запускает с полным, непроверенным доверием (так что они могут перехватить записи таблицы дескрипторов файлов несвязанного процесса) - я очень надеюсь, что в Mac OS X не осталось таких путей кода (поскольку их основное использование, несомненно, будет вирусами, но, если они есть и вы можете их найти, это может быть более общим решением, чем исправление каждого отдельного двоичного исполняемого файла, представляющего интерес.

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

4
ответ дан 8 December 2019 в 17:17
поделиться

Ну, технически вы могли бы машинно внедрить поток в целевой процесс, а затем заставить его отправить вам дубликат дескриптора файла stdin ... Но вы, вероятно, не должны. : -)

Что вы на самом деле пытаетесь сделать?

0
ответ дан 8 December 2019 в 17:17
поделиться

Просто мысль, но не могли бы вы сделать канал и перенаправить этот (именованный) канал на стандартный ввод процесса при запуске этого процесса?

Примерно что-то вроде

mkfifo MYPIPE
Prog < MYPIPE
echo "test" > MYPIPE
]
5
ответ дан 8 December 2019 в 17:17
поделиться

Предполагая, что это с разрешения пользователя (т.е. вы хотите получить информацию от третьего party для перенаправления в другое приложение, такое как аудио-приложения Rogue Amoeba или некоторые приложения для захвата видеопотока), тогда я бы сказал, что вы хотите либо посмотреть на расширения ядра, либо на диспетчеры ввода.

(См. Также fscriptwhere, SIMBL и Application Enhancer - все примеры программного обеспечения, которое внедряет функции в сторонние приложения).

Многие старые методы внедрения кода, управляемого пользователем, были ограничены в версии 10.6 (например, менеджеры ввода сложнее установить).

Если вас интересует ввод данных пользователем, а не стандартный ввод, заменяющий набор методов ввода может оказаться «достаточно хорошим» - классически менеджеры ввода использовались для внедрения всех видов кода в приложения.

С другой стороны, если вы хотите сделать это без разрешения пользователя (т. Е. С регистрацией ключей), тогда вам придется взломать. Вероятно, существует цепочка еще не исправленных уязвимостей, которые можно комбинировать, чтобы делать то, что вы хотите, но тот, кто знает, что это, скорее всего, будет зарабатывать на этом деньги.

1
ответ дан 8 December 2019 в 17:17
поделиться
Другие вопросы по тегам:

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