У меня есть динамически связанный исполняемый файл ELF на Linux, и я хочу поменять местами функцию в библиотеке, с которой она связана. Конечно, с помощью LD_PRELOAD я могу предоставить небольшой библиотеке замену функции, которую я сам компилирую. Однако что если в замене я хочу вызвать оригинальную библиотечную функцию? Например, функция может быть srand (), и я хочу перехватить ее с моим собственным выбором семени, но в противном случае позвольте srand () делать то, что обычно делает.
Если бы я делал ссылку на этот исполняемый файл, я будет использовать опцию wrap компоновщика, но здесь у меня есть только скомпилированный двоичный файл.
Одним из тривиальных решений, которое я вижу, является вырезание и вставка исходного кода для исходной библиотечной функции в замену, но я хочу обработать более общий случай, когда источник недоступен. Или я мог бы в шестнадцатеричном виде отредактировать необходимый дополнительный код в двоичный файл, но это указывает c для двоичного файла, а также отнимает много времени. Возможно ли что-то более элегантное, чем любой из них? Например, некоторые волхвы c с загрузчиком?
(Извините, если я не использовал терминологию точно ...)