Как я могу записать системные вызовы (включая связанные параметры) приложения из ядра? - PullRequest
0 голосов
/ 31 июля 2010

Я хочу записывать системные вызовы (включая параметры), вызываемые приложением из ядра. Кто-то сказал мне, что я могу перехватить все системные вызовы или перехватить sysenter, однако я не знаю, как это сделать. Кстати, я попробовал утилиту strace, но казалось, что strace предоставил мне больше системных вызовов, чем я ожидал. Например: я создаю программу, содержащую только системные вызовы «open, lseek, read, write and close» для простой файловой операции, но strace вернул мне больше системных вызовов, таких как «access, fstat64 и т. Д.», Чем упомянутые выше. почему?

Ответы [ 3 ]

5 голосов
/ 31 июля 2010

strace будет намного проще.

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

1 голос
/ 31 июля 2010

Возможно, вы захотите попробовать присоединить strace к запущенному процессу

strace -p pid

Хорошей идеей будет запустить программу, подождать, пока она не произойдет, присоединиться к ней и затем запустить событие.

Ура!

0 голосов
/ 04 августа 2010

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

Чтобы удовлетворить потребность в фильтрации выходных данных strace, используйте параметр -e. См. man strace для инструкций по его использованию для ограничения того, что вы захватываете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...