CJK Workbench
Flujos de trabajo

Ingeniería inversa práctica, una función a la vez

03
El escenario

Cómo empezar con la ingeniería inversa práctica

Elige una función pequeña de un programa en C que compilaste tú y estúdiala desde la primera instrucción hasta el último return. La ley y las condiciones de licencia cambian según el país, así que usa solo tu propio código o archivos de práctica. A continuación van cuatro pasos.

01

Abre la carpeta de tu proyecto

Elige una carpeta de trabajo que contenga tu código fuente en C, una copia del archivo compilado y, más adelante, el listado exportado.

02

Exporta un listado de texto

Deja que Shell ejecute el comando de exportación de tu desensamblador sobre la copia, o guarda tú mismo el listado, para que el resultado sea un archivo de texto.

03

Pide una explicación

Pide al agente que lea el listado y explique la función línea por línea, y guarda las notas con write_file.

04

Comprueba la respuesta

Compara las notas con tu código fuente y con el listado, lee el diff en Ask first y prueba el resultado en un laboratorio si es legal.

Un listado didáctico para leer

add_numbers.asm
; add_numbers.asm - teaching listing, x64 Windows
; Returns the sum of its first two integer arguments.
; Argument 1 arrives in ecx (low half of rcx).
; Argument 2 arrives in edx (low half of rdx).
add_numbers:
    mov eax, ecx    ; copy argument 1 into eax
    add eax, edx    ; add argument 2, the sum stays in eax
    ret             ; return to the caller, result in eax

Esta función suma dos enteros. Con la convención de Windows x64, los argumentos llegan en ecx y edx, la suma se forma en eax y ret devuelve el control a quien llamó.

Dos ejercicios para una clase de ingeniería inversa

Empieza con una función que escribiste tú

Una pregunta común de quien empieza es cómo se aprende ensamblador, y la respuesta es una función que hayas escrito tú. Escribe una función corta en C, compílala y exporta el listado como texto. read_file abre el listado y el agente explica cada instrucción: qué registro contiene cada argumento, qué hace la pila y dónde vuelve el resultado. write_file guarda esas explicaciones en notes/begin.md. En Plan only, el agente primero enumera estos pasos. Todavía no se ejecuta nada. Después cambia a Ask first y lee el diff antes de cada guardado. Por último, compara las notas con tu código y, si es legal, prueba la función compilada en un laboratorio.

Documenta las funciones de tu propia biblioteca

Un buen ejercicio de ingeniería inversa de API es enumerar las funciones que expone tu propia biblioteca y anotar qué hace cada argumento. Guarda como texto la lista de funciones importadas y expuestas de tu propia herramienta, y luego el agente usa grep para encontrar cada llamada a una función y read_file para abrir las líneas que la rodean. Redacta una tabla en notes/api.md, y edit_file muestra cada cambio como un diff. Empieza con una sola función. El mismo método te ayuda a recuperar cómo funcionaba tu propio código antiguo. El agente puede equivocarse con un tipo o una finalidad, así que compara cada fila con tu código fuente y con una prueba tuya antes de aceptarla.

CJK Workbench para Windows

Trabaja con tu propio ejemplo

Descargar CJK Workbench ↗