Parchear códigos / símbolos en un binario ELF vinculado dinámicamente

Supongamos que tengo un binario ELF que está vinculado dinámicamente y quiero anular / redirigir ciertas llamadas a la biblioteca. Sé que puedo hacer esto conLD_PRELOAD, pero quiero una solución que sea permanente en el binario, independiente del entorno, y que funcione para los binarios setuid / setgid, ninguno de los cualesLD_PRELOAD puede lograr.

Lo que me gustaría hacer es agregar código de archivos de objetos adicionales (posiblemente en nuevas secciones, si es necesario) y agregar los símbolos de estos archivos de objetos a la tabla de símbolos del binario para que la versión recién agregada del código se use en lugar de El código de la biblioteca compartida. Creo que esto debería ser posible sin realizar ninguna reubicación en el código existente; a pesar de que están en el mismo archivo, estos deberían poder resolverse en tiempo de ejecución de la manera PLT habitual (por lo que vale, solo me interesan las funciones, no los datos).

Por favor, no me des respuestas en la línea de "¡No quieres hacer esto!" o "¡Eso no es portátil!" En lo que estoy trabajando es en una forma de interconectar binarios con implementaciones alternativas de biblioteca compartida ligeramente incompatibles con ABI. La plataforma en cuestión es i386-linux (es decir, 32 bits) si es importante. A menos que me equivoque acerca de lo que es posible, podría escribir algunas herramientas para analizar los archivos ELF y realizar mis hacks, pero sospecho que hay una forma elegante de usar el enlazador GNU y otras herramientas para lograr esto sin escribir código nuevo.

Respuestas a la pregunta(4)

Su respuesta a la pregunta