Skip to content

tectijuana/4miniloganalizer-ElHenricus

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Review Assignment Due Date Open in Codespaces

🧪 Práctica 4.2 - Mini Cloud Log Analyzer (ARM64)

📌 Variante D: Detección de 3 errores consecutivos


👨‍💻 Autor

Barajas Carpio Enrique 23210547


🎯 Objetivo

Desarrollar un programa en ARM64 Assembly que procese códigos HTTP desde stdin y detecte la ocurrencia de tres errores consecutivos (4xx o 5xx).


🧠 Lógica de la solución

Se implementa un contador que:

  • Incrementa cuando el código HTTP es ≥ 400
  • Se reinicia cuando el código es < 400
  • Genera una alerta cuando el contador alcanza 3

🧾 Pseudocódigo (Referencia en C)

int count = 0;

while (leer_codigo()) {
    if (codigo >= 400) {
        count++;
        if (count == 3) {
            printf("ALERTA\n");
            break;
        }
    } else {
        count = 0;
    }
}

⚙️ Implementación en ARM64

/*
========================================
Autor: Tu Nombre
Práctica: Mini Cloud Log Analyzer
Variante: D - Detectar 3 errores consecutivos

Solución en C incluida arriba
========================================
*/

.global _start

.section .bss
buffer: .skip 16

.section .data
msg_alerta: .asciz "ALERTA: 3 errores consecutivos\n"
len_alerta = . - msg_alerta

.section .text

_start:

    mov x19, #0         // contador de errores consecutivos

loop_read:

    // read(stdin)
    mov x0, #0
    ldr x1, =buffer
    mov x2, #16
    mov x8, #63
    svc #0

    cmp x0, #0
    ble exit

    // convertir ASCII → número
    ldr x2, =buffer

    ldrb w3, [x2]
    sub w3, w3, #'0'
    mov w4, #100
    mul w3, w3, w4

    ldrb w5, [x2, #1]
    sub w5, w5, #'0'
    mov w4, #10
    mul w5, w5, w4
    add w3, w3, w5

    ldrb w6, [x2, #2]
    sub w6, w6, #'0'
    add w3, w3, w6

    // lógica de errores
    cmp w3, #400
    blt reset_counter

    add x19, x19, #1
    cmp x19, #3
    bne loop_read

    // imprimir alerta
    mov x0, #1
    ldr x1, =msg_alerta
    mov x2, #len_alerta
    mov x8, #64
    svc #0

    b exit

reset_counter:
    mov x19, #0
    b loop_read

exit:
    mov x0, #0
    mov x8, #93
    svc #0

🛠️ Compilación

make

▶️ Ejecución

cat logs.txt | ./analyzer

📄 Ejemplo de entrada (logs.txt)

200
500
404
200
500
500
404
200
200
500
404
200
500
500
200
404
200
500
200
404
500
500
200
404
200
500
404
200
500
200
404
500
200
200
500
404
200
500
500
404
200
200
500
404
200
500
200
404
500
200
500
404
200
200
500
404
200
500
500
200
404
200
500
404
200
500
200
404
500
200
500
404
200
200
500
404
200
500
500
200
404
200
500
404
200
500
200
404
500
200
500
404
200
200
500
404
200
500
500
200
404
...

📤 Salida esperada

ALERTA: 3 errores consecutivos

🔍 Explicación técnica

  • Se utiliza la syscall read para obtener datos desde stdin

  • Conversión manual de ASCII a entero (sin libc)

  • Uso de:

    • cmp para comparación
    • blt, bne para control de flujo
  • Contador implementado en registro x19


🧪 Pruebas realizadas

Caso Resultado
Sin errores No imprime
Errores aislados No imprime
3 errores consecutivos ✅ ALERTA
Más de 3 errores ✅ ALERTA

📚 Conclusión

Esta práctica demuestra cómo implementar lógica de alto nivel directamente en arquitectura ARM64, utilizando registros, saltos condicionales y syscalls sin apoyo de lenguajes de alto nivel.


🚀 Posibles mejoras

  • Detectar N errores consecutivos (configurable)
  • Soporte para múltiples líneas reales (parseo robusto)
  • Integración con C (scanf)
  • Logging más detallado

Codigo ejecutando en AWS

cap 2 interfaz cap interfaz 1

About

26aldi4pm-4miniloganalizer-tmpLDI-logs1 created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Shell 46.3%
  • Makefile 27.3%
  • Assembly 26.4%