Это хороший способ перехвата системных вызовов?

Пишу инструмент. Частью этого инструмента будет его способность регистрировать параметры системных вызовов. Хорошо, я могу использовать ptraceдля этой цели, но ptraceдовольно медленный. Более быстрый метод, который пришел мне в голову, заключался в изменении файла glibc. Но это усложняется, поскольку gcc волшебным образом вставляет свои собственные встроенные функции в качестве оболочек системных вызовов, а не использует код, определенный в glibc. Использование -fno-builtinтоже не помогает.

Поэтому мне пришла в голову идея написать разделяемую библиотеку, включающую в себя каждую оболочку системного вызова, такую ​​как mmap, а затем выполнить регистрацию перед вызовом фактической функции оболочки системного вызова. Например, ниже приведен псевдокод того, как будет выглядеть мой mmap.

int mmap(...)
{
 log_parameters(...);
 call_original_mmap(...);
 ...
}

Затем я могу использовать LD_PRELOAD, чтобы сначала загрузить эту библиотеку. Как думаете, эта идея сработает, или я что-то упускаю?

12
задан MetallicPriest 21 May 2012 в 16:08
поделиться