Предположим, я хочу полностью взять на себя системный вызов open(), возможно, чтобы обернуть фактический системный вызов и выполнить некоторые протоколирования. One way to do this is to use LD_PRELOAD, чтобы загрузить (пользовательскую) библиотеку общих объектов, которая принимает точку входа open().Как переопределить (или обернуть) функцию syscall в Linux?
Пользовательская процедура open() затем получает указатель на функцию glibc open()
от dlsym()
и вызывает ее.
Решение, предложенное выше, является динамическим решением. Предположим, я хочу связать свою собственную open()
обертку статически. Как мне это сделать? Я предполагаю, что механизм тот же, но я также предполагаю, что произойдет столкновение символов между пользовательскими open()
и libc open()
.
Пожалуйста, поделитесь любыми другими методами для достижения той же цели.
Как насчет того, чтобы вы просто вставляли функцию/макрос в ваш код? –
@Seamus: Я предпочитаю не использовать макросы. У меня действительно нет проблем. Я прошу только увеличить знания SO и изучить новый трюк. –