☠️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.EDI
yESI
: Se usan para copiar bloques de codigo siendoesi
el origen yedi
el destino.
Vemos un ejemplo de los bits en x86 con una direccion:
Esto para EAX
, EBX
, ECX
y EDX
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:
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