Как мне повторно реализовать (или обернуть) функцию системных вызовов в Linux?

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

Пользовательская процедура open () затем получает указатель на функцию glibc open () с помощью dlsym () ее и вызова.

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

Пожалуйста, поделитесь любые другие методы для достижения той же цели.

31
задан Peter Mortensen 2 June 2017 в 20:36
поделиться