Предположим, я хочу полностью взять на себя системный вызов open(), возможно, чтобы обернуть фактический системный вызов и выполнить некоторую регистрацию. Один из способов это использование LD_PRELOAD для загрузки (созданной пользователем) общей библиотеки объектов, которая принимает точку входа open().
Созданная пользователем подпрограмма open() затем получает указатель на функцию glibc open()
, dlsym()
изменяя ее и вызывая ее.
Однако предложенное выше решение является динамическим. Предположим, я хочу статически связать свою собственную оболочку open()
. Как бы я это сделал? Я предполагаю, что механизм тот же, но я также предполагаю, что будет конфликт символов между определенным пользователем open()
и libc open()
.
Пожалуйста, поделитесь любыми другими методами для достижения той же цели.