
Llamar a una funcion de una DLL cargada dinamicamente
Publicado por Pablo Hugo (1 intervención) el 12/07/2021 03:02:29
Hola:
Estoy haciendo un interprete y necesito llamar a una funcion tomada de una dll cargada dinamicamente, esto es asi ya que quiero que el programa interpretado cargue la dll y no el interprete. Ademas necesito que los parametros se encuentren en un pila de enteros.
aqui tengo un fragmento del codigo que estoy probando
la llamada comentada funciona ok ya que no lo esta haciendo por la direccion de la funcion (hFunc)
pero quiero llamarla por esta direccion y le hago un cast para poder llamarla, aqui quiero aclara que necesito que todos los valores sean pasados int64, me imagina que la funcion a la que llame interpretara el valor segun le corresponda (esto no se como funciona)
Alguien sabe como puedo hacer esto?, desde ya gracias.
Estoy haciendo un interprete y necesito llamar a una funcion tomada de una dll cargada dinamicamente, esto es asi ya que quiero que el programa interpretado cargue la dll y no el interprete. Ademas necesito que los parametros se encuentren en un pila de enteros.
aqui tengo un fragmento del codigo que estoy probando
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
HANDLE hStdout;
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
HMODULE hLib=LoadLibraryA("KERNEL32.DLL");
if (!hLib) {
printf("Load Error");
return 0;
}else{
printf("Load OK");
hFunc=(int64_t)GetProcAddress(hLib,"WriteConsole");
printf("Address=%x ",hFunc);
// WriteConsole(hStdout, "coso", 5, 0, 0); // Esto funciona correctamente
// **** quiero que funcione de esta manera ***
hFunc=(int64_t)(* (int64_t(*)(int64_t,int64_t,int64_t,int64_t,int64_t))hFunc)((int64_t)hStdout,(int64_t)"coso",5,0,0) ;
printf("ok?");
}
la llamada comentada funciona ok ya que no lo esta haciendo por la direccion de la funcion (hFunc)
pero quiero llamarla por esta direccion y le hago un cast para poder llamarla, aqui quiero aclara que necesito que todos los valores sean pasados int64, me imagina que la funcion a la que llame interpretara el valor segun le corresponda (esto no se como funciona)
Alguien sabe como puedo hacer esto?, desde ya gracias.
Valora esta pregunta


0