Google ha publicado GWPSan, una herramienta para identificar errores durante la ejecución de aplicaciones.

Google ha lanzado el código fuente de la herramienta GWPSan, destinada a detectar errores en la etapa de ejecución de aplicaciones compiladas para arquitecturas x86-64 y ARM64. GWPSan se compila como una biblioteca compartida, que se enlaza al iniciar la aplicación mediante LD_PRELOAD y utiliza los mecanismos de parada (PERF_TYPE_BREAKPOINT) y muestreo de procesos disponibles en el núcleo de Linux para analizar la ejecución del programa. El código está escrito en C++ y se distribuye bajo la licencia Apache 2.0.

GWPSan está diseñado como un marco modular que soporta la conexión de módulos con implementaciones de detectores de diversas clases de errores. GWPSan realiza un análisis dinámico activado a través de controladores de señales, lo que permite evitar la modificación del código ejecutable de la aplicación. Para un funcionamiento eficiente de la mayoría de los detectores, se requiere compilar la aplicación con ciertas banderas del compilador que añaden los metadatos necesarios. Se necesita al menos Clang 18 y un núcleo de Linux 6.4.

Actualmente hay tres detectores disponibles:

  • UAR (Uso después de retorno) — detecta errores causados por el uso de un objeto en la pila después de salir de la función en la que se definió ese objeto. La protección se organiza mediante la interceptación de los puntos de entrada y salida de la función: al entrar, se reemplaza la pila por una copia para utilizarla durante la ejecución de la función, y al salir se restaura el estado anterior de la pila.
  • TSan (Thread Sanitizer) — identifica condiciones de carrera entre hilos (Data-race), que ocurren cuando diferentes hilos ejecutándose simultáneamente pueden leer o modificar áreas comunes de memoria sin utilizar primitivas de sincronización. La protección se basa en el uso de puntos de ruptura de hardware asociados a áreas compartidas de memoria. Un controlador que se activa durante un breve período interrumpe la ejecución del hilo al acceder a la memoria, y durante esta pausa verifica si se activó un punto de ruptura para otro hilo.
  • LMSan (Lightweight Memory Sanitizer) — detecta el uso de datos no inicializados en memoria. Este detector está marcado como experimental y no se recomienda su uso.

GWPSan analiza el código ejecutable de un programa utilizando el marco DynamoRIO para decodificar el código máquina en instrucciones ISA abstractas, que luego se ejecutan utilizando emulación. A través de señales periódicas del temporizador se llama a un manejador unificado, que en cada llamada ejecuta una cierta porción de instrucciones para el flujo analizado. En caso de detectar problemas al ejecutar ciertas instrucciones, se activa un detector de problemas específico para esas instrucciones, por ejemplo, un detector de estados de carrera para instrucciones que acceden a la memoria.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster