pDI-Tools: Mecanismo de interposición dinámica de código: Descripción del proyecto | ||
---|---|---|
Anterior |
La idea original era portar y adaptar DITools a GNU/Linux™.
Después de estudiar muy detenidamente la aplicación se concluyó que DITools estaba demasiado ligado a particularidades de Irix, y que el estándar ELF se trata como una simple particularidad más de Irix. Esto me llevo a reescribir totalmente la aplicación.
Para no caer en las mismas dependencias que el DITools original, lo siguiente fue recoger artículos, documentos, manuales y cualquier información sobre ELF, junto a su especificación. A continuación se estudió cómo se implementa en otros sistemas operativos, a qué nivel se suele respetar el estándar y aplicaciones que lo usan. El objetivo era ver si era posible emular el comportamiento de DITools intentando usar tan solo las estructuras de datos y mecanismos especificados por el estándar.
Se dedicó un buen tiempo a estudiar las limitaciones y decisiones de diseño de DITools para aprovechar toda la experiencia que DITools representa. Ha sido una buena inversión ya que ha servido para corregir cosas que en DITools hubieran sido difíciles de resolver sin reescribir grandes porciones del código. Además ha permitido dar una mejor estructura al programa mejorando su legibilidad, velocidad y facilidad a la hora de depurarlo.
En la actualidad se ha implementado una versión integra del software para GNU/Linux™ sobre plataformas IA32 y otra versión no tan completa para Solaris 8 para plataformas SPARC.
La versión para GNU/Linux™ sobre IA32 implementa tres tipos de interposiciones: reenlaces, redefiniciones y "callbacks". Además funciona sobre versiones 2.4.x y 2.6.x del kernel. Además recientemente se ha dado soporte a las últimas versiones de GNU C Library[1].
La versión para Solaris 8 sobre SPARC implementa sólo dos de los tres tipos de interposiciones: reenlaces y redefiniciones. En el resto es tan funcional como la versión para GNU/Linux™ sobre IA32.
Se han añadido y potenciado los mecanismos que permiten definir los parámetros de funcionamiento del software. Antiguamente sólo se podían fijar mediante variables de entorno. Ahora, como novedad, se pueden ajustar mediante ficheros de configuración. Este método a mi parecer es claramente más limpio, potente y controlable.
Respecto al método de establecer las interposiciones de código es prácticamente idéntico al antiguo DITools: mediante una lista de interposiciones. La única diferencia estriba en que se puede usar más de un fichero de instrucciones y en consecuencia tener ficheros más pequeños y reciclables.
El entorno para desarrollar y mantener la documentación está establecido y aún en desarrollo. Se usa DocBook/XSL. El presente documento está escrito mediante este sistema.
El software usado para mantener el código, versiones y revisiones es el CVS. Los "bugs" y mejoras se controlan con ayuda de Bugzilla.
Empezar y terminar la documentación del proyecto. Se pretende incluir en él un manual de usuario, y otro de compilación e instalación (manual de administrador).
Todavía se deben resolver algunos fallos, inconsistencias y limitaciones y realizar más pruebas para asegurar un buen nivel de estabilidad.
[1] | Desde las versiones 2.2.x a las 2.3.x |