Saltar al contenido

Llamar a una función a través de su dirección en memoria en c/c++

Bienvenido a nuestro sitio web, ahora hallarás la solucíon a lo que andabas buscando.

Solución:

En los sistemas operativos modernos, cada el proceso tiene su propio espacio de direcciones y las direcciones solo son válidas dentro de un proceso. Si desea ejecutar código en algún otro proceso, debe inyectar una biblioteca compartida o adjunte su programa como un depurador.

Una vez que esté en el espacio de direcciones del otro programa, este código invoca una función en una dirección arbitraria:

typedef int func(void);
func* f = (func*)0xdeadbeef;
int i = f();

Sí, estás describiendo un puntero de función. Aquí hay un ejemplo simple;

int (*func)(void) = (int (*)(void))0x12345678;
int x = func();

Probablemente no funcionará entre procesos: en la mayoría de los sistemas operativos, los procesos no tienen acceso a la memoria de los demás.

Cuando necesite una llamada directa:

((void(*)(void))0x1234)();

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *