EIP Del llamador de la función ( EIP FROM FUNCTION CALLER )

Iniciado por lweb20, 17 Mayo 2013, 02:03 AM

0 Miembros y 1 Visitante están viendo este tema.

lweb20

Hola a todos. Continuando con el desarrollo de mi SO.

Tengo una duda:

Si tengo el siguiente código de ejemplo:


KERNEL:


void EjecutarProceso(int id){
  ...
  _asm iret // interrupt return
}

void sys_TerminarProceso(){
  ...
}

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

  continuar:
  ...
}



PROGRAMA:


#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.