2015-05-26 8 views
1

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

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

То, что я хочу, чтобы переопределить системный вызов для моего приложения только

+0

Можете ли вы связать приложение по-другому, используя библиотеку, чтобы переопределить системный вызов? Я сделал что-то подобное для обработки нестандартного формата с плавающей запятой. – mpez0

+0

@ mpez0 можете ли вы подробно остановиться на примере – eswaat

ответ

1

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

#define rmdir(p) overridden_rmdir(p) 

С overridden_rmdir определена в библиотеке на вашем пути ссылки.

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

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

Другая возможность - запустить это приложение на виртуальной машине с другим ядром, где ядро ​​изменено для использования переопределенного системного вызова.

Надеюсь, это полезно.

Смежные вопросы