Skip to content

Instantly share code, notes, and snippets.

@IoTeacher
Last active February 16, 2026 06:45
Show Gist options
  • Select an option

  • Save IoTeacher/2fca496922069c1122658ead0572a3f4 to your computer and use it in GitHub Desktop.

Select an option

Save IoTeacher/2fca496922069c1122658ead0572a3f4 to your computer and use it in GitHub Desktop.
Para principiantes profesionales de uso shell con $ tmux

🧠 Flujo Completo – ARM64 Assembly + GDB + Git

πŸ“‹ Tabla Resumen Paso a Paso

Paso Comando ΒΏQuΓ© hace?
1️⃣ Crear archivo nano main.s Crear archivo Assembly ARM64
2️⃣ Ensamblar as -o main.o main.s Convierte .s en archivo objeto .o
3️⃣ Enlazar ld -o main main.o Genera el ejecutable
4️⃣ Ejecutar ./main Corre el programa
5️⃣ Compilar con debug as -g -o main.o main.s Genera sΓ­mbolos para GDB
6️⃣ Enlazar con debug ld -o main main.o Crear ejecutable con debug
7️⃣ Abrir GDB gdb ./main Iniciar depuraciΓ³n
8️⃣ Breakpoint break _start Punto de parada en inicio
9️⃣ Ejecutar en GDB run Ejecutar dentro de GDB
πŸ”Ÿ Paso a paso stepi Ejecutar instrucciΓ³n por instrucciΓ³n
1️⃣1️⃣ Ver registros info registers Mostrar registros ARM64
1️⃣2️⃣ Salir de GDB quit Salir del depurador
1️⃣3️⃣ Inicializar Git git init Crear repositorio
1️⃣4️⃣ Agregar archivos git add . Preparar archivos para commit
1️⃣5️⃣ Commit git commit -m "ARM64 program" Guardar versiΓ³n
1️⃣6️⃣ Subir a GitHub git push origin main Subir repositorio

πŸ”§ Alternativa Profesional (MΓ‘s Recomendada)

En ARM64 moderno es mejor usar gcc como frontend:

AcciΓ³n Comando
Compilar y enlazar gcc -g main.s -o main
Ejecutar ./main
Debug gdb ./main

Ventaja:

  • Maneja automΓ‘ticamente librerΓ­as
  • MΓ‘s compatible en AWS Ubuntu

🐞 Comandos Esenciales en GDB (ARM64)

Comando FunciΓ³n
break _start Breakpoint al inicio
layout asm Vista Assembly
run Ejecutar
stepi Ejecutar una instrucciΓ³n
nexti Siguiente instrucciΓ³n sin entrar
info registers Ver registros
x/10x $sp Ver memoria
disassemble Mostrar cΓ³digo ensamblado

πŸ“‚ Estructura Recomendada del Proyecto

arm64-project/
β”‚
β”œβ”€β”€ main.s
β”œβ”€β”€ README.md
└── .gitignore

πŸš€ Ejemplo RΓ‘pido de Programa ARM64

.section .text
.global _start

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

Compilar:

gcc -g main.s -o main

πŸ“¦ Flujo Completo Profesional

nano main.s
gcc -g main.s -o main
./main
gdb ./main
git init
git add .
git commit -m "Primer programa ARM64"

πŸŽ“ Resumen Visual para Estudiantes

Editar β†’ Compilar β†’ Ejecutar β†’ Debug β†’ Subir a Git

πŸ”₯ tmux + GEF (ARM64) – ConfiguraciΓ³n Profesional sin Romper el Layout

Complemento a la misiΓ³n original ARM64 Assembly + GDB Enfocado en estudiantes AWS / Ubuntu Server / Graviton


🎯 Problema

Cuando usamos GEF (GDB Enhanced Features) dentro de tmux, el debugger:

  • Redibuja toda la pantalla
  • Ocupa completamente el pane
  • Puede romper layouts divididos
  • Hace difΓ­cil trabajar junto a editor o compilaciΓ³n

Esto no es un bug, es el comportamiento normal de GEF.


βœ… OpciΓ³n Recomendada: Ventana Dedicada para GEF

En lugar de abrir GEF en un pane dividido:

split-window -v "gdb ./main"

Usa una ventana exclusiva.


πŸ”§ Modificar tu .tmux.conf

Reemplaza tu binding de GDB por:

# Abrir GEF en ventana dedicada
bind G new-window -n GEF "gdb ./main"

Ahora:

Ctrl-a G

Abre GEF en su propia ventana limpia y completa.

Para volver rΓ‘pidamente:

bind g last-window

πŸ— Layout Profesional Recomendado

Window 1 β†’ Editor + CompilaciΓ³n
Window 2 β†’ GEF Debugger
Window 3 β†’ Git / Logs

Nunca mezclar:

  • Editor
  • Compilador
  • Debugger

en el mismo pane.


βš™οΈ Ajustar GEF para que No Limpie Toda la Pantalla

Edita:

nano ~/.gef.rc

Agrega:

gef config context.clear_screen False
gef config context.layout "regs stack code"
gef config context.nb_lines_stack 5
gef config context.nb_lines_code 6

Esto:

  • Reduce redibujado
  • Hace el output mΓ‘s compacto
  • Mejora comportamiento en tmux

🧩 Opcional: Usar Layout ClÑsico de GDB

Dentro de GEF puedes usar:

layout asm

o

layout split

Esto activa el modo TUI clΓ‘sico, que funciona muy bien dentro de tmux.


πŸš€ Flujo Profesional ARM64 + GEF

  1. Editar main.s
  2. Ctrl-a C β†’ Compilar
  3. Ctrl-a G β†’ Abrir GEF en ventana dedicada
  4. break _start
  5. run
  6. stepi
  7. info registers

πŸ† Buenas PrΓ‘cticas Reales (SRE / Reversing / CTF)

βœ” GEF siempre en ventana propia βœ” Nunca debuggear en pane compartido βœ” Separar compilaciΓ³n y ejecuciΓ³n βœ” Mantener sesiones tmux persistentes en AWS βœ” Reducir ruido visual del context


🧠 Extra: Si Usas AWS Graviton (ARM64)

GEF funciona perfectamente en:

sudo apt install gdb
git clone https://github.com/hugsy/gef.git
echo "source ~/gef/gef.py" >> ~/.gdbinit

Verificar:

gdb -q

Debe mostrar banner de GEF.


πŸŽ“ Resumen Final

GEF no estΓ‘ roto. Simplemente necesita su propio espacio.

La arquitectura correcta es:

tmux
 β”œβ”€β”€ Window: Code
 β”œβ”€β”€ Window: GEF
 └── Window: Git / Logs

Eso es workflow profesional.

πŸ–₯️ tmux – GuΓ­a RΓ‘pida para Principiantes

tmux es una herramienta que te permite tener mΓΊltiples terminales dentro de una sola ventana y mantenerlas activas incluso si se cierra la conexiΓ³n SSH.


πŸ“Œ Conceptos BΓ‘sicos

πŸ”Ή ΒΏQuΓ© es una sesiΓ³n?

Una sesiΓ³n es un entorno de trabajo completo en tmux. Puedes tener varias sesiones activas al mismo tiempo.

πŸ”Ή ΒΏQuΓ© es una ventana?

Una sesiΓ³n puede tener varias ventanas (como pestaΓ±as).

πŸ”Ή ΒΏQuΓ© es un panel (pane)?**

Una ventana puede dividirse en varios paneles.


⌨️ Notación Importante

  • C- β†’ Control
  • M- β†’ Alt / Meta
  • C-b β†’ Control + b

⚠️ Importante: Primero se presiona el prefijo (C-b) y luego la tecla del comando.

Ejemplo:

C-b c

Significa:

  1. Presiona Ctrl + b
  2. Suelta
  3. Presiona c

πŸš€ Comandos BΓ‘sicos (Desde la Terminal)

Estos se ejecutan fuera de tmux:

tmux new                # Crear nueva sesiΓ³n
tmux new -s nombre      # Crear sesiΓ³n con nombre
tmux ls                 # Listar sesiones
tmux attach             # Volver a ΓΊltima sesiΓ³n
tmux attach -t nombre   # Conectarse a sesiΓ³n especΓ­fica

πŸŽ›οΈ Comandos Dentro de tmux

(Usando el prefijo C-b)


πŸͺŸ Manejo de Ventanas

Comando AcciΓ³n
C-b c Crear nueva ventana
C-b n Ir a la siguiente ventana
C-b p Ir a la ventana anterior
C-b 0-9 Ir a ventana por nΓΊmero
C-b l Volver a la ventana anterior
C-b , Renombrar ventana
C-b & Cerrar ventana

🧱 Manejo de Paneles (Divisiones)

Comando AcciΓ³n
C-b " Dividir verticalmente
C-b % Dividir horizontalmente
C-b ← ↑ β†’ ↓ Cambiar entre paneles
C-b o Ir al siguiente panel
C-b q Mostrar nΓΊmero de paneles
C-b x Cerrar panel
C-b z Maximizar/restaurar panel

πŸ“ Redimensionar Paneles

Comando AcciΓ³n
C-b M-↑ Agrandar hacia arriba
C-b M-↓ Agrandar hacia abajo
C-b M-← Agrandar a la izquierda
C-b M-β†’ Agrandar a la derecha

🧩 Gestión de Sesiones

Comando AcciΓ³n
C-b d Salir sin cerrar sesiΓ³n (detach)
C-b s Cambiar entre sesiones

πŸ” Modo Comando

C-b :

Permite escribir comandos manualmente dentro de tmux.

Ejemplo:

new-session -s prueba

🧠 Flujo Recomendado para Estudiantes (SSH en AWS)

  1. Conectarse al servidor:

    ssh usuario@ip
  2. Crear sesiΓ³n:

    tmux new -s dev
  3. Dividir ventana:

    C-b "
    
  4. Desconectarse sin perder trabajo:

    C-b d
    
  5. Volver despuΓ©s:

    tmux attach -t dev

πŸŽ“ Ejemplo PrΓ‘ctico

Imagina que estΓ‘s trabajando en AWS:

  • Panel 1 β†’ Editor (nano / vim)
  • Panel 2 β†’ Servidor backend
  • Panel 3 β†’ Logs

Si se cae tu SSH, todo sigue funcionando.


πŸ›  Comando de Emergencia

Si algo se bloquea:

tmux kill-session -t nombre

πŸ’‘ Consejo para Principiantes

Al principio solo necesitas dominar:

  • C-b c
  • C-b %
  • C-b d
  • tmux attach

Con eso ya eres mΓ‘s productivo que el 80% de los estudiantes.


🏁 Resumen Visual

SesiΓ³n
 β”œβ”€β”€ Ventana
 β”‚    β”œβ”€β”€ Panel
 β”‚    └── Panel
 └── Ventana

@IoTeacher

Copy link
Copy Markdown
Author

🧠 .tmux.conf – ARM64 Assembly + GEF Mission Edition

##### ════════════════════════════════════════════════
#####   TMUX ARM64 + GEF – Mission Edition
#####   AWS Ubuntu / Graviton / SSH Optimized
##### ════════════════════════════════════════════════


##### ─── PERFORMANCE PARA EC2 ─────────────────────

set -sg escape-time 0
set -g history-limit 200000
set -g focus-events off
set -g default-terminal "screen-256color"
set -g set-clipboard off
set -g detach-on-destroy off
set -g remain-on-exit on
set -g visual-activity off
set -g visual-bell off


##### ─── PREFIX PROFESIONAL ───────────────────────

unbind C-b
set -g prefix C-a
bind C-a send-prefix

# Recargar config
bind r source-file ~/.tmux.conf \; display-message "ARM64 Mission Config Recargado βœ”"


##### ─── INDEXACIΓ“N LIMPIA ─────────────────────────

set -g base-index 1
setw -g pane-base-index 1
set -g renumber-windows on


##### ─── NAVEGACIΓ“N TIPO VIM ───────────────────────

setw -g mode-keys vi

bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"

bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5


##### ─── WORKSPACE ARM64 AUTOMÁTICO ───────────────

# Crear entorno ARM64 (Editor + Compile + Shell)
bind A \
new-window -n ARM64 \; \
split-window -h -c "#{pane_current_path}" \; \
split-window -v -t 1 -c "#{pane_current_path}" \; \
select-layout tiled \; \
select-pane -t 1


##### ─── COMPILACIΓ“N RÁPIDA ARM64 ─────────────────

# Compilar con debug (recomendado)
bind C \
run-shell "gcc -g main.s -o main && tmux display-message 'Compilado βœ”' || tmux display-message 'Error de compilaciΓ³n ✘'"

# Ejecutar programa
bind E \
run-shell "./main && tmux display-message 'Programa ejecutado βœ”' || tmux display-message 'Error en ejecuciΓ³n ✘'"


##### ─── GEF EN VENTANA DEDICADA (SOLUCIΓ“N CLAVE) ─

# Abrir GEF en ventana exclusiva (NO pane compartido)
bind G new-window -n GEF "gdb ./main"

# Volver rΓ‘pidamente a ventana anterior
bind g last-window


##### ─── STATUS BAR ARM64 LOW-LEVEL ───────────────

set -g status-position top
set -g status-interval 3

set -g status-style bg=black,fg=green
set -g window-status-current-style fg=black,bg=green,bold

set -g pane-border-style fg=colour238
set -g pane-active-border-style fg=green

set -g status-left "#[bold] ARM64:#S "

set -g status-right-length 150
set -g status-right "\
CPU:#(top -bn1 | grep 'Cpu(s)' | awk '{print $2}')% \
RAM:#(free -m | awk '/Mem:/ {print int($3/$2*100)}')% \
Git:#(git rev-parse --abbrev-ref HEAD 2>/dev/null) \
%H:%M #H"


##### ─── COPY MODE ÚTIL PARA DEBUG ────────────────

bind -T copy-mode-vi v send -X begin-selection
bind -T copy-mode-vi y send -X copy-selection-and-cancel
bind -T copy-mode-vi r send -X rectangle-toggle


##### ════════════════════════════════════════════════
##### FIN ARM64 + GEF MISSION
##### ════════════════════════════════════════════════

πŸš€ CΓ³mo usar esta configuraciΓ³n

1️⃣ Crear entorno ARM64

Ctrl-a A

2️⃣ Compilar

Ctrl-a C

3️⃣ Ejecutar

Ctrl-a E

4️⃣ Abrir GEF correctamente

Ctrl-a G

GEF abrirΓ‘ en ventana completa dedicada.

5️⃣ Volver al editor

Ctrl-a g

🧠 Configuración recomendada para GEF

Editar:

nano ~/.gef.rc

Agregar:

gef config context.clear_screen False
gef config context.layout "regs stack code"
gef config context.nb_lines_stack 5
gef config context.nb_lines_code 6

πŸ— Arquitectura Final Profesional

tmux
 β”œβ”€β”€ Window: ARM64 (editor + compile)
 β”œβ”€β”€ Window: GEF (debug)
 └── Window: Shell / Git

Esto es workflow real de:

  • Reverse Engineering
  • CTF
  • Low-level debugging
  • Seguridad ofensiva
  • AWS ARM64 labs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment