# REGISTROS BASICOS

* `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` y `ESI` : Se usan para copiar bloques de codigo siendo `esi` el origen y `edi` el 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>

## &#x20;VIRTUAL ADDRESS

La direccion virual la tenemos al inicio de las lineas de codigo:

<figure><img src="https://92799483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9cgYhu8bocuplJfOrqoA%2Fuploads%2FWarmRco6iMm0OzE5H8Lu%2Fimage.png?alt=media&#x26;token=2ab39641-6cd9-42c1-bb5f-2b4b28f8db64" alt=""><figcaption></figcaption></figure>

## IMAGE BASE

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

<figure><img src="https://92799483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9cgYhu8bocuplJfOrqoA%2Fuploads%2FtcfGp9QuioWLMWcxD8Tn%2Fimage.png?alt=media&#x26;token=52ac3bd5-f301-46f2-ae79-50195ba3994f" alt=""><figcaption></figcaption></figure>

## RELATIVE VIRTUAL ADDRESS

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

<figure><img src="https://92799483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9cgYhu8bocuplJfOrqoA%2Fuploads%2FELgO4BB12u6EZHi3fBPS%2Fimage.png?alt=media&#x26;token=5a4ef4bf-ff43-4c7c-a3d5-e421f7c7ab74" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://92799483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9cgYhu8bocuplJfOrqoA%2Fuploads%2FiW2jWVfie5qqxw1QRdrx%2Fimage.png?alt=media&#x26;token=307e12aa-876b-4209-93cb-ccd2c86bf65f" alt=""><figcaption></figcaption></figure>

## DESPLAZMIENTO (llamadas y saltos directos)

Para saber cual es el desplazamiento. este lo encontramos despies de la Virtual Address :&#x20;

<figure><img src="https://92799483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9cgYhu8bocuplJfOrqoA%2Fuploads%2F46t2JsR0kwnZ1r9B5tUG%2Fimage.png?alt=media&#x26;token=5ef9c96c-445b-4e57-9288-2184cf16016b" alt=""><figcaption></figcaption></figure>

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
```

<figure><img src="https://92799483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9cgYhu8bocuplJfOrqoA%2Fuploads%2F5kg2SmHgJ86izfEpz9RM%2Fimage.png?alt=media&#x26;token=edc71c9f-13ba-426d-abcb-8405af14e572" alt=""><figcaption></figcaption></figure>

Al darle F7 en el `call` nos dirigue exactamente a esa direccion:

<figure><img src="https://92799483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9cgYhu8bocuplJfOrqoA%2Fuploads%2Fw3iHV4GyrMmpFtloW862%2Fimage.png?alt=media&#x26;token=c9b149f5-3206-42e8-b85b-7a850e61f388" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://92799483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9cgYhu8bocuplJfOrqoA%2Fuploads%2FjrzHaTlwslvJw0fz55uF%2Fimage.png?alt=media&#x26;token=a1160a28-63a5-4d90-b10b-ff35a7460398" alt=""><figcaption></figcaption></figure>

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` :&#x20;

<figure><img src="https://92799483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9cgYhu8bocuplJfOrqoA%2Fuploads%2FVMxaPh7W4KSm4x0vfVVg%2Fimage.png?alt=media&#x26;token=ec93db9b-03c7-454d-85f6-22f070b65ff6" alt=""><figcaption></figcaption></figure>

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.&#x20;

En esa llamada que se hace al darle clik derecho -> follow in dump -> constant .

Esto nos dara la direccion a donde se apunta:

<figure><img src="https://92799483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9cgYhu8bocuplJfOrqoA%2Fuploads%2FqT8OsuL5v7eQ1fLrh0cR%2Fimage.png?alt=media&#x26;token=3dbd9a8f-a454-48f0-bd4a-225724e8ee53" alt=""><figcaption></figcaption></figure>

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:&#x20;

<figure><img src="https://92799483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9cgYhu8bocuplJfOrqoA%2Fuploads%2FDVxhdi5YEbG287gAR1qj%2Fimage.png?alt=media&#x26;token=002e4850-27f3-445e-ac03-6231e7ae2e8b" alt=""><figcaption></figcaption></figure>

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](https://bla0x1s-organization.gitbook.io/untitled-1/reverse-engineering/assembly-x86 "mention").
