Por rutina entiéndase un llamado a un método en C.
Son básicamente las mismas preguntas que hice en clase.
Recuerde que cuando se llama a una función, la dirección
de retorno al código donde se llamo la función queda en la
pila (RET). Entonces:
"cómo se localizan esas direcciones desde la
rutina que vamos
a inyectar si esta estará EJECUTANDOSE EN UN ESPACIO
DE
DIRECCIONES DIFERENTE ?"
En realidad, el espacio de direcciones no varía de ejecución a
ejecución a menos que otro programa se ejecute entre dos
ejecuciones del mismo. Esto es válido para Sistemas Operativos
viejos
Con un debugger (gdb) podemos saber las direcciones para una
ejecución.
"Y Si la rutina a inyectar TIENE SU
DIRECCION de memoria en
NUESTRO ESPACIO"
Mmm... por eso es que la inyectamos: ¡para que esté en el
espacio del programa! Si no no podríamos...
"COMO PUEDE EL OTRO PROCESO REFERENCIARLA y ejecutarla en
su propio espacio ?"
Se la inyectamos, modificamos la dirección de retorno para que apunte
al código inyectado.