stringtranslate.com

Pin (programa de computadora)

Pin es una plataforma para crear herramientas de análisis. Una herramienta pin comprende rutinas de instrumentación, análisis y devolución de llamadas . Las rutinas de instrumentación se llaman cuando se va a ejecutar un código que aún no se ha recompilado y permiten la inserción de rutinas de análisis. Las rutinas de análisis se llaman cuando se ejecuta el código asociado a ellas. Las rutinas de devolución de llamadas solo se llaman cuando se cumplen condiciones específicas o cuando se ha producido un determinado evento. Pin proporciona una amplia interfaz de programación de aplicaciones (API) para la instrumentación en diferentes niveles de abstracción, desde una instrucción hasta un módulo binario completo. También admite devoluciones de llamadas para muchos eventos, como cargas de bibliotecas, llamadas al sistema, señales/excepciones y eventos de creación de subprocesos.

En 2020 recibió el premio Programming Languages ​​Software Award de ACM SIGPLAN . [1]

Pin realiza la instrumentación tomando el control del programa justo después de que se carga en la memoria. Luego, recompila en tiempo real (JIT) pequeñas secciones del código binario utilizando pin justo antes de que se ejecute. Se agregan nuevas instrucciones para realizar el análisis al código recompilado. Estas nuevas instrucciones provienen de la herramienta Pintool. Se utiliza una amplia gama de técnicas de optimización para obtener el menor tiempo de ejecución y uso de memoria posibles. A junio de 2010, la sobrecarga base promedio de Pin es del 30 por ciento (sin ejecutar una herramienta Pintool). [2]

Características

Modos de instrumentación

Pin admite dos modos de instrumentación llamados modo JIT y modo Probe. El modo JIT admite todas las funciones de Pin, mientras que el modo Probe admite un conjunto de funciones limitado, pero es mucho más rápido y prácticamente no agrega sobrecarga al tiempo de ejecución del programa. El modo JIT utiliza un compilador justo a tiempo para recompilar todo el código del programa e insertar la instrumentación, mientras que el modo Probe utiliza trampolines de código para la instrumentación.

Independencia de la plataforma

Pin fue diseñado para la portabilidad de herramientas y, a pesar de la compilación JIT de una ISA a la misma ISA (y no usar una única representación intermedia para todo el código), la mayoría de sus API son independientes de la arquitectura y del sistema operativo . También fue diseñado para ser portátil en sí mismo, aislando cuidadosamente el código específico de la plataforma del código genérico, lo que permite la rápida adaptación de Pin a nuevas plataformas. Aproximadamente la mitad del código es genérico y el resto depende de la arquitectura o del sistema operativo. [3]

Optimizaciones

Pin utiliza muchas técnicas para optimizar el código de instrumentación y análisis, utilizando técnicas como la inserción en línea , el análisis de vida y el desbordamiento inteligente de registros . Pin realiza estas optimizaciones automáticamente siempre que sea posible, sin necesidad de que los usuarios inserten ningún código adicional para permitir la inserción en línea. Naturalmente, algunas optimizaciones aún requieren sugerencias del usuario y algunas estructuras de código son más fáciles de insertar en línea que otras. También se utilizan la vinculación directa de secciones de código jitted, una técnica llamada trace linking , y la reconciliación de enlaces de registros , que minimiza el desbordamiento y la reasignación de registros.

Facilidad de uso

La API y la implementación de Pin se centran en facilitar la escritura de herramientas de pin. Pin asume la responsabilidad total de garantizar que el código de instrumentación de la herramienta de pin no afecte el estado de la aplicación. Además, la API permite que el código de instrumentación solicite muchos datos a Pin. Por ejemplo, el código de instrumentación de la herramienta de pin puede utilizar la API de Pin para obtener la dirección de memoria a la que accede una instrucción, sin tener que examinar la instrucción en detalle.

Herramientas

Hay muchas herramientas Pintools que se utilizan para distintas tareas.

Alternativas a la herramienta Pin

Hay muchas otras herramientas disponibles para recopilar el uso de recursos de los programas que se ejecutan en el sistema, como la herramienta strapon de Bell Lab y la herramienta Dyninst, etc. La herramienta de Bell Lab utiliza la tecnología strap on que ejecuta una herramienta para recopilar recursos simultáneamente con el programa, pero esta herramienta solo es compatible con los programas que permiten que otros programas se ejecuten simultáneamente con ellos. [6] Además, la herramienta Dyninst utiliza la reescritura binaria de los comandos ejecutables e implementables del programa dentro del programa para verificar el uso de recursos y es muy eficiente. Sin embargo, es muy inestable ya que es una herramienta relativamente nueva y se bloquea en programas de gran escala. [7] Por último, la herramienta Intel Pin utiliza instrumentación binaria estática y ejecuta el programa como parte de sí mismo mientras realiza un seguimiento de todos sus recursos. [8] Este enfoque es más adecuado para un antivirus, ya que puede ejecutar fácilmente todos los procesos bajo sí mismo y puede matar programas si alcanzan un límite máximo asignado según lo definido por el antivirus.

Véase también

Notas

  1. ^ "Premio de Software de Lenguajes de Programación". www.sigplan.org .
  2. ^ Análisis de programas paralelos con Pin
  3. ^ Pin: Creación de herramientas de análisis de programas personalizados con instrumentación dinámica
  4. ^ CMP$im: un simulador de caché multinúcleo basado en PIN y sobre la marcha
  5. ^ PinPlay: un marco para la repetición determinista y el análisis reproducible de programas paralelos
  6. ^ Gupta, Chandrashekhar (2007). "Creación de productos y soluciones seguras". Bell Labs Technical Journal . 12 (3): 21-38. doi :10.1002/bltj.20247. S2CID  30412754.
  7. ^ Lee, Schulz (2007). "Instrumentación binaria dinámica y agregación de datos en sistemas de gran escala". Revista internacional de programación paralela . 35 (3): 207–232. doi :10.1007/s10766-007-0036-3. S2CID  6653468.
  8. ^ Bach, M.; Charney, M.; Cohn, R.; Demikhovsky, E.; Devor, T.; Hazelwood, K.; Jaleel, A.; Luk, Chi-Keung; Lyons, G. (marzo de 2010). "Análisis de programas paralelos con PIN". Computadora . 43 (3): 34–41. doi :10.1109/MC.2010.60. ISSN  0018-9162. S2CID  15155077.

Referencias

Enlaces externos