DynamoRIO es un marco de instrumentación binario dinámico con licencia BSD para el desarrollo de herramientas de análisis de programas dinámicos . DynamoRIO se dirige a las 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 .
Desarrollador (es) | Autores de DynamoRIO |
---|---|
Versión inicial | Junio de 2002 |
Lanzamiento estable | 7.0.17598 [1] / 12 de marzo de 2018 |
Versión de vista previa | 7.0.0-RC1 / 3 de febrero de 2017 |
Repositorio | |
Sistema operativo | Android , Linux , Windows |
Plataforma | AArch32 , AArch64 , IA-32 , x86-64 |
Tipo | Marco de instrumentación , perfilador |
Licencia | BSD |
Sitio web | dynamorio.org |
DynamoRIO se creó originalmente como un sistema de optimización binario dinámico , pero desde entonces se ha utilizado para herramientas de seguridad, depuración y análisis. DynamoRIO se originó en 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] en MIT ; de ahí el nombre combinado "DynamoRIO". Se lanzó por primera vez públicamente como un conjunto de herramientas binario patentado en junio de 2002 y luego fue de código abierto con una licencia BSD en enero de 2009.
Descripción general
DynamoRIO es una máquina virtual de proceso que redirige la ejecución de un programa desde su código binario original a una copia de ese código. Luego se agrega a esta copia la instrumentación que realiza las acciones de la herramienta deseada. No se realizan cambios en el programa original, que no necesita preparación especial de ninguna manera. DynamoRIO funciona completamente en tiempo de ejecución y maneja código heredado, bibliotecas cargadas dinámicamente, código generado dinámicamente y código auto modificable.
DynamoRIO monitorea todo el flujo de control para capturar la ejecución completa del programa de destino. Este monitoreo agrega gastos generales incluso cuando no hay ninguna herramienta presente. La sobrecarga promedio de DynamoRIO es del 11 por ciento. [3]
Características
La API de DynamoRIO abstrae los detalles del proceso de virtualización y se enfoca en monitorear o modificar el flujo de código dinámico del programa. Una herramienta puede insertar camas elásticas en el programa que invocan acciones de la herramienta en puntos específicos del programa. Una herramienta también puede insertar instrumentación a nivel de lenguaje ensamblador , lo que proporciona un control detallado sobre las acciones y el rendimiento de la herramienta. 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 llamada registradas por herramientas en varios puntos de eventos comunes del programa, como la creación de subprocesos, la carga de bibliotecas, las llamadas al sistema, las señales o las excepciones. Su API también permite inspeccionar las bibliotecas del programa y el espacio de direcciones además de su código.
La API de DynamoRIO y las devoluciones de llamada de eventos 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á operando la herramienta.
DynamoRIO contiene bibliotecas que amplían su API para proporcionar acceso a la tabla de símbolos , ajuste y reemplazo de funciones y utilidades de seguimiento de direcciones de memoria.
Herramientas
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 fines, incluida la comprobación de la corrupción [5] y la elaboración de perfiles . [6]
Pastoreo del programa
La aplicación de DynamoRIO en el campo de la seguridad dio como resultado una técnica denominada programa pastoreo . [7] La instrumentación de control de programas monitorea el origen de cada instrucción del programa y el flujo de control entre instrucciones para evitar que una vulnerabilidad de seguridad tome el control del programa. En 2003, el pastoreo de programas se comercializó como el software de prevención de intrusiones de host Memory Firewall en una empresa de nueva creación llamada Determina. VMware adquirió Determina en agosto de 2007. [8]
Dr. memoria
Dr. Memory es un depurador de memoria de código abierto construido en DynamoRIO y lanzado bajo una licencia LGPL . [9] Dr. Memory monitorea las asignaciones de memoria y los accesos a la memoria usando la memoria oculta . 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 dos veces más rápido que Memcheck. [10]
Ver también
- Análisis dinámico de programas
- Alfiler
- Valgrind
- AddressSanitizer (ASAN)
Notas
- ^ "Versión 7.0.17598" . 12 de marzo de 2018 . Consultado el 13 de marzo de 2018 .
- ^ El proyecto RIO: introspección y optimización en tiempo de ejecución
- ^ Instrumentación dinámica transparente, figura 4
- ^ Una infraestructura para la optimización dinámica adaptativa
- ^ TaintTrace: seguimiento de flujo eficiente con reescritura binaria dinámica
- ^ PiPA: perfiles y análisis canalizados en sistemas multinúcleo
- ^ Ejecución segura a través del pastoreo de programas
- ^ VMware adquiere el proveedor HIPS Determina
- ^ Dr. Memory: depurador de memoria para Windows y Linux
- ^ Comprobación práctica de la memoria con Dr. Memory
Referencias
- Bruening, Derek (2004). Manipulación de código en tiempo de ejecución (Ph.D.) eficiente, transparente y completo . Instituto de Tecnología de Massachusetts.
- Derek Bruening; Timothy Garnett; Saman Amarasinghe (marzo de 2003). "Una infraestructura para la optimización dinámica adaptativa" . Actas del Simposio Internacional sobre Generación y Optimización de Código . San Francisco, California, Estados Unidos. págs. 265-275.
enlaces externos
- Página web oficial
- Lista de correo para usuarios de DynamoRIO
- Página de inicio de Dr. Memory