¿Se podría usar el código de modificación automática para acelerar la llamada de funciones en bibliotecas vinculadas dinámicamente?
Por lo que yo entiendo, las bibliotecas compartidas ELF usan una especie de tabla de salto indirecta (la tabla de vinculación de procedimientos, o PLT) para permitir la unión diferida de las funciones de la biblioteca. El propósito parece ser evitar tener que modificar la tabla en el segmento de código mientras se habilita la resolución diferida de las posiciones de función en la primera llamada.
¿No sería más rápido crear dinámicamente el código para esa tabla en el momento de la carga, o posiblemente incluso en la primera llamada a la función?
¿Es para permitir compartir el segmento de código entre procesos tanto como sea posible (una tabla dinámica sería privada para un proceso)? ¿Es por razones de seguridad (el código editable no debe ser ejecutable , pero los JIT lo hacen todo el tiempo y el cargador puede agregar y eliminar el permiso de escritura antes de iniciar realmente el programa)?
¿O es una combinación de esos, y la pequeña ganancia de rendimiento por llamada de función simplemente no valdría la pena?
Los DSO de ELF pueden usar un indicador (DF_TEXREL) para anunciar que requieren reasignaciones mediante la modificación de su sección de texto (que normalmente es de solo lectura). Sin embargo, el enfoque de la tabla de salto junto con el código independiente de posición PIE debería ser más óptimo.
(Encontré eso en http://www.akkadia.org/drepper/dsohowto.pdf , pero otros recursos también lo mencionan).
fuente