¿Es posible que un programa modifique su propio código?

Absolutamente. El kernel de Linux hace un uso extensivo de código que se automodifica automáticamente:
  • En el momento del arranque, el kernel se optimiza para la CPU del host, utilizando instrucciones específicas del procesador más nuevas para reemplazar el código de reserva genérico.
  • Un kernel que admite multiprocesamiento simétrico , cuando se inicia en un sistema de un solo procesador, corrige las instrucciones de bloqueo innecesarias sin operaciones. En los sistemas que admiten la conexión en caliente de la CPU, incluso parcheará estas instrucciones de forma dinámica a medida que se agregan y eliminan las CPU.
  • Un kernel que admite la paravirtualización , cuando se inicia en hardware nativo, elimina las hipercall lentas en favor de las instrucciones nativas.
  • Los ganchos de depuración predefinidos se pueden activar y desactivar en tiempo de ejecución; se reparan con no-ops cuando no están activos.
  • Ksplice avanza varios pasos en la aplicación de parches en caliente para permitir la aplicación segura de cambios de código más o menos arbitrarios en un núcleo en ejecución.
Además, cualquier entorno que utilice compilación justo a tiempo ,como la máquina virtual Java o el motor de JavaScript V8 de Google o PyPy , se basa completamente en código que se modifica automáticamente.


Sin embargo, las sugerencias de los detalles de la pregunta (firewalls inteligentes con parcheo automático y sistemas operativos con autodepuración) aún están muy lejos, no porque no podamos escribir programas que se modifiquen por sí mismos, sino porque no sabemos cómo construir ese tipo de inteligencia.

Deja un comentario