Guía de Depuración con Ensamblador NASM y GDB en Linux

Este artículo proporciona un tutorial práctico para establecer un entorno de compilación y depuración utilizendo nasm y gdb en sistemas Linux. El siguiente ejemplo demeustra los pasos esenciales para compilar y depurar código ensamblador.

Consideremos el siguiente programa como ejemplo de implementación:

section .data
    mensaje db "hola desde ensamblador", 10 ; Cadena a imprimir en pantalla
    tamano equ $ - mensaje ; Calcula la longitud de la cadena

section .text
    global _main ; Punto de entrada reconocido por el enlazador

; Rutina de finalización del programa
finalizar:
    mov rax, 60 ; Código de sistema para exit
    mov rdi, 0 ; Código de salida
    syscall ; Invocación al sistema

; Función de suma simple
; Parámetros: rsi, rdi
suma:
    push rbp
    mov rbp, rsp
    mov [rbp-8], rsi
    mov [rbp-16], rdi
    mov eax, [rbp-8]
    add eax, [rbp-16]
    pop rbp
    ret

; Punto de entrada principal
_main:
    ; Llamada al sistema write para mostrar texto
    mov rax, 1 ; Código para write
    mov rdi, 1 ; Salida estándar
    mov rsi, mensaje ; Dirección del texto
    mov rdx, tamano ; Longitud del texto
    syscall ; Ejecutar llamada al sistema

    mov rsi, 15
    mov rdi, 25
    call suma
    mov rbx, rax
    jmp finalizar

Proceso de Compilación con NASM

En entornos Linux, nasm permite generar archivos ejecutables mediante dos métodos principales:

  1. Generar código objeto y luego enlazar:
nasm -f elf64 programa.asm -o programa.o
ld -o programa programa.o


  1. Creación directa del ejecutbale:
nasm -f bin programa.asm -o programa


Depuración con GDB

El código generado por NASM no contiene información de depuración, por lo que debemos utilizar instrucciones como disassemble para examinar el código:

gdb ./programa	# Iniciar gdb
# Comandos en la interfaz interactiva
break _main	# Establecer punto de ruptura en _main
run	# Ejecutar el programa
layout asm	# Vista TUI con código ensamblador
layout regs	# Vista TUI con registros del procesador


Comandos Comunes de GDB:

  • info registers: Muestra información de todos los registros
  • stepi: Ejecuta una sola instrucción
  • continue: Continúa la ejecución del programa
  • break *0x401016: Establece punto de ruptura en dirección específica
  • x /10x $rsp - 16: Examina 10 palabras de memoria a partir de rsp-16

Es importante considerar la arquitectura (64 bits = 8 bytes por registro) y el formato de endianidad little empleado por los procesadores Intel.

Etiquetas: Ensamblador NASM GDB depuración linux

Publicado el 7-30 18:52