В настоящее время я работаю над проектом, в котором мне нужно отслеживать использование нескольких системных вызовов и низкоуровневых функций, таких как mmap
, brk
, sbrk
. До сих пор я делал это с помощью вставки функции: я пишу функцию-оболочку с тем же именем, что и функция, которую я заменяю (например, mmap
), и загружаю ее в программу, устанавливая LD_PRELOAD
переменная окружения. Я вызываю реальную функцию через указатель, который загружаю с помощью dlsym
.
К сожалению, одна из функций, которую я хочу обернуть, sbrk
, используется внутри dlsym
, поэтому программа вылетает, когда я пытаюсь загрузить символ. sbrk
не является системным вызовом в Linux, поэтому я не могу просто использовать syscall
для его косвенного вызова.
Итак, мой вопрос: как я могу вызвать библиотечную функцию из одноименной функции-оболочки без использования dlsym
? Есть ли какой-нибудь трюк с компилятором (использующий gcc), который позволяет мне ссылаться на оригинальную функцию?