Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: lweb20 en 17 Mayo 2013, 02:03 am



Título: EIP Del llamador de la función ( EIP FROM FUNCTION CALLER )
Publicado por: lweb20 en 17 Mayo 2013, 02:03 am
Hola a todos. Continuando con el desarrollo de mi SO.

Tengo una duda:

Si tengo el siguiente código de ejemplo:


KERNEL:

Código:
void EjecutarProceso(int id){
   ...
   _asm iret // interrupt return
}

void sys_TerminarProceso(){
   ...
}

void EjecutarPrograma(){
   int id = CrearProceso("programa.exe");
   EjecutarProceso(id);

   continuar:
   ...
}


PROGRAMA:

Código:
#include "syscalls.h"

void main(){
   ...
   sys_TerminarProceso();
}

Explico:

El código de ejemplo lo asemejo a un código para entrar al modo usuario desde el kernel, ejecutar un programa y regresar al modo kernel ( todo funciona perfectamente ). Lo que quiero hacer es que cuando termine el proceso "sys_TerminarProceso" continúe al label "continuar".

Para ello he pensado en 2 alternativas:

PRIMERA ALTERNATIVA ( probada y sí funciona ) :

a) Pasarle como parámetro a "EjecutarPrograma" la dirección de "continuar".
b) Guardar esa dirección en la memoria mediante una variable global.
c) Cuando el programa ( usuario ) ejecute sys_TerminarProceso, esta función ejecutará al final ( después de los ... ) dicha dirección del label.
d) Enjoy! :P

Bueno este es muy seguro y lógico a mi parecer, pero... este "EjecutarPrograma" también lo ejecutará el cliente como un "sys_EjecutarPrograma" y bueno no es muy normal que ejecute algo así: "EjecutarPrograma(etiquetaparacontinuar)".

SEGUNDA ALTERNATIVA ( dudas, problemas ) :

Obtener la dirección de una vez pasada la llamada "EjecutarProceso(id);", es decir, por donde está continuar ( sin el label claro ).


Si alguien tiene alguna idea agradecería mucho su ayuda. Gracias por la atención.