- Nombre: Torres Moreno Diego Antonio
- Matrícula: 23212077
- Asignatura: Lenguajes de Interfaz
- Institución: TECNM Campus ITT
- Fecha: 22 de abril de 2026
.
Variante C: Detectar la primera aparición de 503.
La solución requerida modifica el comportamiento de un analizador de logs HTTP tradicional. En lugar de contar y clasificar todos los códigos hasta el final del archivo, este analizador se maneja en modo de monitoreo crítico (Early Exit). Lee el flujo de datos y, al detectar el primer evento 503 Service Unavailable, detiene inmediatamente la ejecución y manda una alerta, ignorando cualquier registro posterior.
El código fue escrito exclusivamente en ensamblador ARM64, evitando la biblioteca estándar de C (libc) y comunicándose directamente con el kernel de Linux a través de llamadas al sistema (syscalls).
-
Lectura en Bloques: Se utiliza la syscall
read(x8 = 63) para cargar hasta 4096 bytes de la entrada estándar (stdin) a un buffer en memoria, optimizando las operaciones de E/S. -
Parser de Enteros Cíclico: El programa itera byte por byte. Si el carácter ASCII está entre '0' y '9', lo convierte a su valor decimal y lo acumula usando desplazamientos en base 10 (
numero_actual = numero_actual * 10 + digito). -
Condición de Alerta (Branching): Al detectar un salto de línea (
\n), el analizador evalúa el número parseado:- Se ejecuta una comparación directa:
cmp x22, #503. - Si coincide (
b.eq), el flujo salta inmediatamente a la etiquetaalerta_503, la cual invoca la syscallwrite(x8 = 64) para imprimir la alerta crítica y luego ejecutaexit(x8 = 93), garantizando que se cumpla la condición de "primera aparición".
- Se ejecuta una comparación directa:
-
Manejo de Casos Borde: Si la syscall
readdevuelve0(EOF - Fin de archivo) sin haber detectado un 503, el programa imprime un mensaje de estado[OK]y finaliza limpiamente.
- Archivo fuente: El código se encuentra en
src/analyzer.s. - Adaptación a Entorno Termux (Android): Durante el desarrollo, se me presentó el error de arquitectura
unexpected e_type: 2. Llegue a la conclusión de que las políticas de seguridad del sistema necesitaban que los ejecutables sean independientes de la posición. Lo pude solucionar enlazando el binario con el flag-pie(ld -pie -o analyzer analyzer.o).
Proceso de compilación y enlazado en entorno ARM64:
Generación de archivos de prueba personalizados ('test_ok.txt' y 'test_error.txt') mediante el comando echo:**
Prueba de Caso Negativo. Al procesar el archivo 'test_ok.txt', el analizador recorre la secuencia completa sin activar alertas, confirmando que no se detectaron eventos 503 y finalizando con un estado de éxito [OK]:
A continuación, se presenta la validación manual utilizando los datos de prueba asignados (data/logs_C.txt):
Comando ejecutado:
cat data/logs_C.txt | ./analyzer
Realice el desarrollo de esta solución utilizando control de versiones. Todo el progreso, refactorización de la lógica base a la Variante C, y ajustes de compilación para ARM64 quedaron registrados por medio de commits con descripción enviados directamente desde la terminal de Termux hasta este repositorio.