Me preguntaba si era posible acceder a un bloque directo de memoria usando C/C++ y tomar el valor. Por ejemplo:Accediendo a direcciones de memoria directa y obteniendo los valores en C++
int i = 15;
int *p = &i;
cout << &i;
Si tomaba el valor impreso aquí, eso me dará la dirección de la variable i, que contiene el valor 15. Me limitaré a decir que imprime 0x0ff9c1 para este ejemplo. Si tengo un programa separado que declara un puntero al igual que ...
int *p = 0x0ff9c1;
cout << *p;
¿Sería posible imprimir que el 15 que la otra aplicación se coloca en el bloque de memoria 0x0ff9c1? Sé que la declaración de mi puntero con la dirección de la memoria es incorrecta, de lo contrario no estoy seguro de cómo hacerlo. He intentado usar memcopy
pero tampoco he podido hacer que funcione. Sé que esto es posible de alguna manera ya que tengo un programa llamado Cheat Engine que modifica los valores de la dirección de la memoria del juego para obtener ventajas injustas. He tenido éxito en colocar la ubicación de la memoria impresa y obtener el valor (15) a través de Cheat Engine. Mi objetivo es hacer esto usando C++. Si esto es demasiado confuso, básicamente me gustaría acceder a una variable que otra aplicación almacena usando su dirección de memoria e imprimir el valor. Estoy usando Windows 7 x64 con el compilador MinGW si eso es importante. ¡Gracias!
PD: Voy a publicar una imagen de lo que hace Cheat Engine para dar una mejor idea.
+1 para tales experimentos. – Nawaz
lea un libro sobre la memoria virtual. Como nota adicional: Linux y algunas versiones nuevas de Windows emplean la distribución aleatoria de la pila, por lo que las direcciones de las variables locales variarán entre las ejecuciones del programa. – unkulunkulu
Sí, aunque la experimentación descubrí eso. Estaba pensando en exportar la dirección a través de un argumento de ejecución al segundo programa. Buscaré en la memoria virtual, gracias por la sugerencia. – llk