Definiciones y relación con las prácticas del curso.
No hay conceptos que coincidan. Prueba con otro término.
ABI y convención de llamada
La ABI define cómo se entienden los componentes binarios de una plataforma. La convención de llamada especifica dónde se pasan argumentos, dónde se devuelve un resultado y qué registros debe conservar una función. System V AMD64 y Windows x64 tienen reglas diferentes.
Ver en la lección 01 ↗Ensamblador
Representación legible de instrucciones de una arquitectura. Una instrucción indica una operación y sus operandos; su significado depende de la arquitectura y del modo de ejecución. El ensamblador de un ejemplo no es una traducción literal, línea a línea, de su código C.
Ver en la lección 01 ↗Desensamblado y decompilado
El desensamblado interpreta bytes como instrucciones. La decompilación reconstruye una representación de mayor nivel. El resultado de un decompilador facilita la lectura, pero sus tipos, nombres y estructuras de control pueden necesitar comprobación en las instrucciones.
Ver en la lección 01 ↗Registro
Ubicación de almacenamiento que utiliza directamente el procesador. En x86-64, nombres como RAX, EAX y AL designan partes relacionadas de un registro. El tamaño de la parte utilizada afecta a la operación y a la interpretación del valor.
Ver en la lección 01 ↗Flags
Bits de estado que ciertas instrucciones actualizan y que otras pueden consultar. Una comparación puede modificar flags sin conservar el resultado numérico de la resta. Los saltos condicionales utilizan combinaciones de esos bits para seleccionar una ruta.
Ver en la lección 03 ↗Bloque básico
Secuencia de instrucciones con una entrada al inicio y una transferencia de control al final. Los bloques y sus conexiones forman el grafo de flujo de control de una función. Son útiles para reconocer condiciones, bucles y rutas de salida.
Ver en la lección 03 ↗Referencia cruzada / xref
Relación entre una ubicación del programa y otra que utiliza o menciona. Las referencias permiten encontrar qué función utiliza una cadena, dónde se llama a una rutina o qué instrucciones acceden a un dato. Revisa qué tipo de referencia ha identificado la herramienta.
Ver en la lección 10 ↗Breakpoint
Punto de parada del depurador. Permite inspeccionar registros y memoria en un estado concreto de la ejecución. La dirección donde se detiene el proceso y el motivo de parada deben comprobarse antes de interpretar una lectura como evidencia de ese punto.
Ver en la lección 07 ↗Pila / stack
Región utilizada para organizar parte del estado de las llamadas, como datos locales y registros guardados. Su distribución depende del compilador y de la convención de llamada. La distancia entre dos variables locales no determina por sí sola el tamaño de su tipo.
Ver en la lección 07 ↗Heap
Memoria gestionada mediante reservas dinámicas. En C son habituales interfaces como malloc y free. Al analizarla, sigue el puntero devuelto por la reserva, los accesos al objeto y su liberación. El tamaño pedido y los metadatos internos del asignador son conceptos distintos.
Ver en la lección 11 ↗Puntero
Valor que representa una dirección según el modelo de la plataforma. Una operación puede copiar ese valor o acceder al contenido situado en la dirección. Distinguir ambas acciones es necesario para seguir argumentos, arrays y estructuras enlazadas.
Ver en la lección 11 ↗Offset
Desplazamiento respecto a una referencia, como el inicio de una estructura, una sección o un módulo. Un offset necesita indicar su base y su unidad. Puede permanecer estable entre cargas del mismo archivo aunque cambie la dirección absoluta.
Ver en la lección 07 ↗sizeof
Operador de C que obtiene el tamaño de un tipo u objeto, medido en bytes de C. Para una estructura incluye el relleno que exige su disposición. No mide la longitud de una cadena ni la distancia elegida entre variables locales independientes.
Ver en la lección 07 ↗Alineación y padding
La alineación establece restricciones sobre la posición de un objeto. El compilador puede introducir bytes de relleno entre campos o al final de una estructura para respetarlas. Comprueba por separado la alineación del tipo y la organización de las variables dentro de una función.
Ver en la lección 07 ↗Terminador nulo
Byte con valor cero que marca el final de una cadena de C. La capacidad del array que contiene la cadena incluye espacio para ese byte. Funciones como strlen recorren el texto hasta encontrarlo; no reciben la capacidad del destino.
Ver en la lección 05 ↗Extensión de signo
Operación que conserva la interpretación con signo al ampliar el ancho de un entero. Se diferencia de rellenar con ceros, que conserva una interpretación sin signo. La elección de la instrucción ayuda a reconstruir tipos y conversiones.
Ver en la lección 06 ↗Endianness
Orden de los bytes de un valor de varios bytes en memoria. x86 utiliza habitualmente little-endian: el byte menos significativo se almacena primero. Los protocolos de red pueden usar otro orden, por lo que conviene identificar las conversiones.
Ver en la lección 17 ↗ELF
Formato utilizado por ejecutables, bibliotecas y otros objetos en sistemas como Linux. Sus cabeceras describen arquitectura, carga y otras propiedades. Las secciones organizan el archivo; los segmentos aportan información relevante para su representación en memoria.
Ver en la lección 15 ↗PE
Formato de ejecutables y bibliotecas de Windows. Incluye cabeceras, secciones y directorios como importaciones, exportaciones y relocaciones. La posición de un dato en disco puede diferir de su ubicación relativa dentro de la imagen cargada.
Ver en la lección 16 ↗RVA y dirección virtual
En un PE, una RVA es una dirección relativa a la base de la imagen cargada. La dirección virtual incorpora esa base. Una posición dentro del archivo es otra coordenada, que se relaciona con las anteriores mediante la información de sus secciones.
Ver en la lección 33 ↗Importaciones y exportaciones
Las importaciones describen dependencias que un binario solicita a otros componentes. Las exportaciones identifican interfaces que ofrece a otros. También existen resoluciones dinámicas que no quedan declaradas de forma completa en esas tablas.
Ver en la lección 16 ↗PLT y GOT
Estructuras asociadas al enlace dinámico en ELF. Ayudan a que el programa utilice funciones y referencias cuya dirección depende de la carga. Al observarlas, distingue el stub de llamada, la referencia resuelta y la implementación de biblioteca.
Ver en la lección 26 ↗Syscall
Llamada que cruza la interfaz entre un proceso y el núcleo del sistema operativo. Una función de biblioteca puede preparar argumentos y gestionar errores alrededor de esa operación. Una llamada a libc y una syscall no tienen necesariamente la misma interfaz.
Ver en la lección 15 ↗ESIL
Lenguaje intermedio utilizado por radare2 para representar y emular efectos de instrucciones. Permite observar cambios en registros y memoria según el estado que se configure. Una emulación depende de ese estado y no sustituye todas las propiedades de un proceso real.
Ver en la lección 15 ↗Canario de pila
Valor que el compilador guarda y comprueba en ciertas funciones para advertir alteraciones del estado de la pila. Localizar la comprobación ayuda a reconocer la instrumentación. Su presencia complementa la gestión correcta de límites y tamaños.
Ver en la lección 25 ↗DEP / NX
Protección que permite impedir la ejecución desde páginas marcadas como no ejecutables. Afecta a permisos de ejecución; no elimina todos los errores de acceso a memoria ni garantiza por sí sola la integridad del flujo de control.
Ver en la lección 23 ↗ASLR y PIE
ASLR introduce variación en la ubicación de regiones del proceso. PIE permite cargar un ejecutable en bases distintas. Para comparar sesiones, registra la identidad del archivo, su base cargada y los offsets de las ubicaciones analizadas.
Ver en la lección 26 ↗Análisis estático y dinámico
El análisis estático estudia un archivo y sus representaciones sin ejecutar su lógica. El dinámico observa una ejecución concreta, por ejemplo mediante un depurador. Las rutas posibles del código y la ruta observada en una sesión aportan información complementaria.
Ver en la lección 27 ↗Loader
Componente que prepara o carga otra etapa. En malware puede obtener, descifrar o disponer un contenido para que continúe la ejecución. La palabra describe su función en la cadena; el comportamiento concreto debe reconstruirse en cada muestra.
Ver en la lección 31 ↗Packing y unpacking
El packing transforma o encapsula un programa y añade lógica para disponer su contenido durante la ejecución. El análisis de unpacking busca reconstruir las etapas y las representaciones del código. Cada volcado debe conservar su contexto y procedencia.
Ver en la lección 29 ↗MCP
Protocolo que permite a un agente acceder a herramientas de otros procesos. En el companion, radare2-mcp conecta las herramientas de Hermes con una sesión de radare2. El protocolo aporta la conexión; la interpretación de los resultados corresponde al modelo y al analista.
Ver en la lección 01 ↗Skill y harness
La skill reúne instrucciones y referencias para una tarea. El harness organiza el entorno y el acceso a herramientas, sesiones y resultados. En este curso, coursectl prepara el laboratorio y el perfil con el que trabaja Hermes.
Ver en la lección 01 ↗