Análisis técnico de un bug de memoria en Infidel

Fuentes: Technical analysis of a memory bug in Infidel

El artículo detalla el descubrimiento de un error de puntero salvaje en la versión serial 840522 del videojuego Infidel, desarrollado por Infocom. A diferencia de los errores comunes que afectan la jugabilidad, este fallo corrige la memoria de una manera no intencionada, lo que lo clasifica como un error grave para un programador en C. El bug reside en la rutina DESERT-TO-TABLE, responsable de gestionar objetos en la sala ENDLESS-DESERT, que representa todas las ubicaciones no mapeadas del desierto egipcio del juego.

El autor, utilizando un depurador de memoria, identificó que la rutina no escribe correctamente en el array DESERT-TABLE, dejando este vacío aunque los objetos desaparezcan y reaparezcan en el juego. Al desensamblar el código Z-machine, se reveló que la instrucción STOREW utiliza un puntero local incorrecto, apuntando a una dirección de memoria reservada para variables locales en lugar de la tabla de datos. Este error de asignación de memoria es una consecuencia directa de un fallo en la compilación del código ZIL. El análisis técnico, que incluye el desensamblado del código y la explicación de la lógica de la lista enlazada, ofrece una lección sobre la fragilidad de la memoria en sistemas embebidos y la importancia de verificar las direcciones de memoria en el desarrollo de software retro.