Замените Syscall в пользовательском пространстве в различных операционных системах - PullRequest
0 голосов
/ 10 апреля 2020

TL; DR : Я пытаюсь перенаправить системные вызовы в различных операционных системах, чтобы системный вызов, такой как open, делал вещи, отличные от предыдущих,

Справочная информация (для тех читателей, которые не знают, что такое системные вызовы и что я хочу здесь сделать):

Итак, я пытаюсь сделать: 1. создать подпроцесс (легко; - )) 2. указанный подпроцесс должен автоматически останавливаться, как только он выполняет системный вызов (например, open()), и вместо исходного системного вызова должен выполняться некоторый предопределенный метод, что позволяет мне выполнять свои вставленные вещи.

Итак, вот что я выяснил (пока):

Состояние в macOS:

Я работаю в macOS, здесь я обнаружил замечательную функцию task_set_emulation внутри Ядро Маха, которое, казалось, позволило мне заменить части таблицы системных вызовов в пространстве пользователя. ЕСЛИ ТОЛЬКО ЯБЛОКО БЫЛО РЕАЛЬНО РЕАЛИЗОВАНО, ЭТО ВМЕСТО ОСТАВЛЕНИЯ ЗАГОТОВКИ ЖАТКИ: rant:

ptrace также довольно дрянно на macOS, поэтому в настоящее время я не знаю ни одного возможного решения

Состояние на Windows:

Ну, спасибо MS, есть это: https://www.microsoft.com/en-us/research/project/detours/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fprojects%2Fdetours%2F

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

Статус на Linux:

Здесь ptrace, кажется, работает как следует (: glance: на apple), но, возможно, есть лучший способ сделать это, знаете ли вы?

Итак, кто-нибудь из вас знает лучшие методы для Linux и Windows? Или какие-нибудь указатели о том, как это сделать в macOS?

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

...