nop
mmm como te explico..
supongamos esto:
int *puntador
int variable
si yo hago:
puntador = &variableentonces, puntador va a apuntar a variable (a la direccion de variable).
si yo hago:
puntador = &puntadorentonces, puntador va a apuntar a puntador (a la direccion de puntador).
si yo hago:
*puntador = &variableentonces, la direccion a la que apunta "puntador" (en este caso, la misma direccion de puntador), contendra la direccion de variable.
*puntador escribe en la direccion de memoria guardada la direccion de variable
la direccion de memoria guardada es la direccion de puntador
entonces
*puntador escribe en su direccion, la direccion de "variable", ENTONCES AHORA APUNTO A VARIABLEen el otro caso:
puntador = &puntador + 2puntador apunta a su direccion de memoria "mas 2".
despues:
*puntador = &variablela direccion de memoria a la que apunta "puntador" ahora va a contener la direccion de variable.
si vemos el primer puntador, y el segundo:
primero:
*puntador = CONTENIDO DE LO QUE ESTOY APUNTANDO (contenido variable)
puntador = A DONDE ESTOY APUNTANDO (direccion de variable)
&puntador = DIRECCION DE MEMORIA QUE OCUPO
segundo:
*puntador = CONTENIDO DE LO QUE ESTOY APUNTANDO (direccion de variable)
puntador = A DONDE ESTOY APUNTANDO (al puntero de EIP guardado)
&puntador = DIRECCION DE MEMORIA QUE OCUPO
si ves la tablita que te mostre la primera ves:
- ret1 0x00421a30 _shellcode
828250859
- ret2 0x0012ff80
4332080
como vemos el primero (ret1) esta en la direccion de "shellcode", y apunta al contenido de shellcode (que en este caso son los primeros 4 bytes del shellcode)
y el segundo esta en la direccion del puntero de EIP guardado, y apunta a la direccion de shellcode.
decimal(4332080)=hexadecimal(421a30)
decimal(828250859)=hexadecimal(315E1AEB);
315E1AEB = inverso (\xeb\x1a\x5e\x31)
Saludos!!