DynamoRIO es un marco de instrumentación binaria dinámica con licencia BSD para el desarrollo de herramientas de análisis de programas dinámicos . DynamoRIO está destinado a aplicaciones de espacio de usuario en los sistemas operativos Android , Linux y Windows que se ejecutan en las arquitecturas de conjuntos de instrucciones AArch32 , IA-32 y x86-64 .
DynamoRIO se creó originalmente como un sistema de optimización binaria dinámica , pero desde entonces se ha utilizado para herramientas de seguridad, depuración y análisis. DynamoRIO surgió de una colaboración entre el sistema de optimización Dynamo de Hewlett-Packard y el grupo de investigación Runtime Introspection and Optimization (RIO) [2] del MIT ; de ahí el nombre combinado "DynamoRIO". Se lanzó al público por primera vez como un kit de herramientas binario propietario en junio de 2002 y luego se convirtió en código abierto con una licencia BSD en enero de 2009.
DynamoRIO es una máquina virtual de procesos que redirige la ejecución de un programa desde su código binario original a una copia de ese código. A continuación, se añaden a esta copia los instrumentos que llevan a cabo las acciones de la herramienta deseada. No se realizan cambios en el programa original, que no necesita preparación especial de ningún tipo. DynamoRIO funciona completamente en tiempo de ejecución y gestiona código heredado, bibliotecas cargadas dinámicamente, código generado dinámicamente y código automodificable.
DynamoRIO monitorea todo el flujo de control para capturar la ejecución completa del programa de destino. Esta supervisión agrega sobrecarga incluso cuando no hay ninguna herramienta presente. La sobrecarga promedio de DynamoRIO es del 11 por ciento. [3]
La API de DynamoRIO abstrae los detalles del proceso de virtualización y se centra en supervisar o modificar el flujo de código dinámico del programa. Una herramienta puede insertar trampolines en el programa que invoquen acciones de la herramienta en puntos específicos del programa. Una herramienta también puede insertar instrumentación en el nivel de lenguaje ensamblador , lo que proporciona un control detallado sobre las acciones de la herramienta y el rendimiento de la misma. DynamoRIO admite la optimización adaptativa y la instrumentación adaptativa al permitir que una herramienta elimine o modifique su instrumentación en cualquier punto durante la ejecución del programa de destino.
DynamoRIO invoca devoluciones de llamadas registradas por la herramienta en una serie de puntos de eventos comunes del programa, como creación de subprocesos, carga de bibliotecas, llamadas del sistema, señales o excepciones. Su API también permite inspeccionar las bibliotecas y el espacio de direcciones del programa , además de su código.
La API y las devoluciones de llamadas de eventos de DynamoRIO están diseñadas para ser multiplataforma, lo que permite que el mismo código de herramienta funcione tanto en Windows como en Linux y en IA-32 y x86-64. DynamoRIO garantiza la transparencia de la herramienta al aislar los recursos de la herramienta, como su pila , memoria y accesos a archivos, del programa en el que está funcionando la herramienta.
DynamoRIO contiene bibliotecas que amplían su API para proporcionar acceso a la tabla de símbolos , envoltura y reemplazo de funciones y utilidades de seguimiento de direcciones de memoria.
Las primeras herramientas creadas para DynamoRIO se centraron en la optimización dinámica. [4] Se han creado varias herramientas de investigación para diversos propósitos, incluida la comprobación de la contaminación [5] y la creación de perfiles . [6]
La aplicación de DynamoRIO al campo de la seguridad dio como resultado una técnica llamada "program shepherding" [7] . La instrumentación de "program shepherding" monitorea el origen de cada instrucción del programa y el flujo de control entre instrucciones para evitar que un exploit de seguridad tome el control del programa. En 2003, el "program shepherding" se comercializó como el software de prevención de intrusiones en el host Memory Firewall de marca en una empresa emergente llamada Determina. VMware adquirió Determina en agosto de 2007. [8]
Dr. Memory es un depurador de memoria de código abierto creado en DynamoRIO y publicado bajo una licencia LGPL . [9] Dr. Memory monitorea las asignaciones de memoria y los accesos a la memoria utilizando shadow memory . Detecta errores de programación relacionados con la memoria, como accesos a memoria no inicializada, accesos a memoria liberada, desbordamiento y subdesbordamiento del montón y fugas de memoria . Su conjunto de características es similar al de la herramienta Memcheck basada en Valgrind , aunque funciona tanto en Windows como en Linux y es el doble de rápido que Memcheck. [10]