Могут ли системные вызовы OS X быть переопределены или вставлены в масштабе всей системы?
Работая под OS X Lion, я недавно поработал с внедрением кода, чтобы в последнее время вставлять системные вызовы на индивидуальной основе.
Я многому научился на этом пути, и теперь, похоже, было бы разумнее, по крайней мере, для исследовательских целей, "просто" вставлять все вызовы определенных системных функций, таких как pwrite
, если такая вещь возможна.
Можно ли заставить мой код вызываться вместо ОС для каждого вызова определенных системных вызовов (например, pwrite
) из каждого процесса?
И если да, могу ли я узнать, какой процесс совершил звонок?
Изменить: чтобы никто не думал, что я автор вредоносных программ из-за характера моего вопроса, я объясню, почему я здесь, спрашиваю, что я спрашиваю:
Я пытаюсь заставить большой и сложный кусок программного обеспечения с закрытым исходным кодом работать так, как должно. Почему бы не подождать, пока поставщик исправит это? Два года назад они начали указывать пальцем на другую сторону, и эта сторона указала прямо назад. Ситуация нелепа, и ее стоит попытаться преодолеть без помощи любой из сторон, потому что это программное обеспечение используется людьми, занимающимися производством фильмов и видео, которые берут сотни долларов в час за свои творчески и технически продвинутые усилия и не должны тратить впустую их время борется со своими инструментами.
Проблема с моими усилиями до сих пор состоит в том, что мне нужно использовать внедрение кода и вставку, чтобы найти источник проблемы (это то, что я упоминал выше как "исследование"). Как только я нахожу источник проблемы, решением также может быть внедрение и вставка, или замена динамической библиотеки, или некоторая неясная низкоуровневая настройка системы, или кто знает что? Программное обеспечение, которое я анализирую, растягивается, и в свою очередь оно использует другие платформы, библиотеки и фоновые задачи, некоторые из которых являются частью OS X, а некоторые - частью рассматриваемого программного пакета. Внедрение кода и вставка на основе компонентов за компонентом стало немного сумасшедшим, поэтому я хотел бы следить за тем, что происходит в конце системных вызовов, так что я могу видеть, например, где все pwrite
звонки происходят и специфика звонков.
Я надеюсь, что это разъяснение поможет, и что кто-то может направить меня в правильном направлении. Спасибо!
1 ответ
Вы должны взглянуть на DTrace: http://en.wikipedia.org/wiki/DTrace Теперь это часть OS X. Для вставки, я думаю, есть несколько подходов, многие из которых, вероятно, будут искажены Gatekeeper/Code Signing. Если это не беспокоит, вы можете использовать otool для редактирования связи приложения, чтобы оно загружало измененные версии своих библиотек. Я полагаю, что для внедрения кода люди взламывали это в прошлом с помощью Input Components... но я действительно не знаю, работает ли это до сих пор. Не совсем ответ, наверное.