Могут ли системные вызовы 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... но я действительно не знаю, работает ли это до сих пор. Не совсем ответ, наверное.

Другие вопросы по тегам