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 con LD_PRELOAD
, pero quiero una solución que sea permanente en el binario, independiente del entorno, y que funcione para binarios setuid/setgid, ninguno de los cuales LD_PRELOAD
puede lograr.Parche de código/símbolos en un binario ELF de enlace dinámico
Lo que me gustaría hacer es agregar código de archivos de objetos adicionales (posiblemente en secciones nuevas, si es necesario) y agregar los símbolos de estos archivos de objetos a la tabla de símbolos del binario para que la nueva versión del código utilizado en lugar del 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 el tiempo de ejecución de la manera habitual PLT (por lo que vale, solo me importan las funciones, no los datos).
Por favor no me responda a lo largo de la línea "¡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 bibliotecas compartidas ligeramente incompatibles con ABI. La plataforma en cuestión es i386-linux (es decir, 32 bits) si es importante. A menos que me equivoque sobre 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.
No sé si esto es trabaje cualquier cosa para usted, pero revise el comando del sistema 'nm' (probablemente ya lo sepa). Da bastante información acerca de un modo. – Marm0t
¡Guau, el truco de LD_PRELOAD parece divertido! Yo también estoy buscando una manera de hacerlo en el binario sin embargo. Mi problema es que mi binario tiene un símbolo que el enlazador de BeagleBone no puede resolver. – CJxD