☠️REGISTROS BASICOS
Registros Assembly x86
EIP: (Punto de Interrupcion) Este registro apunta a la direccion de memoria que se va ejecutar.ESP: (Puntero de Pila) Este apunta a la parte superior de la pila.EBP: (Puntero Base) Nos marca la direccion de la base del Stack.EAX: Es un acomulador que guarda resultados de las funciones.EBX: No tiene un proposito pero generalmente es usado para la data.ECX: Este funciona como un contador en loops, va incrementando o decrementando.EDX: Este puede almacenar datos extras para facilitar calculos.EDIyESI: Se usan para copiar bloques de codigo siendoesiel origen yediel destino.
Vemos un ejemplo de los bits en x86 con una direccion:
Esto para EAX, EBX , ECX y EDX
EAX 00 FB 2F 01 32 bits (1 DWORD)
AX 2F 01 16 bits (1 WORD)
AH 2F 8 bits (1 BYTE)
AL 01 8 bits (1 BYTE)Nos podemos ayudar de este pdf http://www.jegerlehner.ch/intel/IntelCodeTable.pdf
VIRTUAL ADDRESS
La direccion virual la tenemos al inicio de las lineas de codigo:

IMAGE BASE
Esta la encontramios en el memory map es un cuadro de codigo que es parte del programa:

RELATIVE VIRTUAL ADDRESS
Para sacar esta direccion debemos de restar el Virtual Address con el Image Base:

De igual manera el dar run al programa y situarnos al principio se nos da esta info:

DESPLAZMIENTO (llamadas y saltos directos)
Para saber cual es el desplazamiento. este lo encontramos despies de la Virtual Address :

El desplazamiento se usa para saber a donde va llamar, en el caso de la imagen con el desplazamiento sabemos la direccion a la que se llamara en el call que es igual a E8 .
Ahora para saber cual es la direccion a la que se llamara debemos sumar el Virtual Addres y el Dezplazamiento tomando que es de derecha a izquierda, pero tambien debemos de sumar la cantidad de bytes que contiene, que en este caso son 5, son 4 del desplazamiento y el otro es el E8 que corresponde al call por lo que quedaria asi:
21372 + 3C4 + 5 = 0002173B
Al darle F7 en el call nos dirigue exactamente a esa direccion:

Es lo mismo para el desplazamiento de los saltos (jmp) pero en este caso el jmp se representa por E9 :

En este caso el salto es negativo ya que se hace hacia arriba.
Llamadas y saltos indirectos
En estos casos tenemos los call que sin indirectos a diferencia de los call directos que su offcode era E8 los indirectos sin FF15 :

Este tambien tiene corchetes en la instruccion. Este no cuenta con desplazamiento, si tienen una direccion pero esta es una direccion directa a donde va llamar el programa.
En esa llamada que se hace al darle clik derecho -> follow in dump -> constant .
Esto nos dara la direccion a donde se apunta:

En la imagen podemos ver tanto la direccion como la funcion a la que apunta, tambien podemos terminar de confirmar al hacer click dercho sobre la direccion -> address:

Para los saltos es igual a la llamada, solo que el offcode del jmp es FF25.
Otros registros e instrucciones que vamos a necesitar los vamos a encontrar en el apartado de Assembly x86.
Última actualización