<div dir="ltr">Hola Yolmer,<div class="gmail_extra"><br><div class="gmail_quote">2014-03-16 23:40 GMT-04:00 Yolmer Rosales <span dir="ltr"><<a href="mailto:yolmer.rosales@gmail.com" target="_blank">yolmer.rosales@gmail.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hola lista,<br>
<br>
Hace poco, utilicé un plugin del emulador de la playstation que te<br>
permite buscar y modificar valores cargados en memoria del juego en<br>
pleno funcionamiento, y pensé que tal vez se podía leer cualquier<br>
valor en memoria de la computadora usando punteros y c++.<br>
<br>
Entonces escribí algo como esto:<br>
<br>
int* pos_memoria = (int*) 0xFFFF;<br>
cout << "posición de memoria:    contenido" << endl  << pos_memoria <<<br>
" : " << *pos_memoria << endl;<br>
<br>
para mi sorpresa funcionó....<br></blockquote><div><br></div><div>Esto es lo interesante de C/C++. Puedes acceder a cualquier dirección de memoria que se te antoje; el lenguaje te lo permite. Sólo existen unos cuantos lenguajes de programación de alto nivel que permiten el acceso directo a memoria.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 pero cuando intenté hacer otras asignaciones arbitrarias de memoria<br>
se acabó la magia y ni hablar del intento de hacer un bucle con 100<br>
posiciones diferentes.<br>
<br>
 Ahora un par de preguntas y otra más<br>
<br>
por qué no puedo leer cualquier parte de la memoria que yo quiera? , y<br>
existe alguna manera de saber las direcciones de memoria que están<br>
siendo usadas por un programa en particular o el propio programa?<br>
<br></blockquote><div><br></div><div>Existen varias razones:<br><br></div><div>1. Recuerda que tu programa no se ejecuta directamente, sino mediante el Sistema Operativo. Nuestras aplicaciones siempre estarán a la merced del S.O., quien gestiona los recursos, como la memoria y el tiempo de procesamiento para las aplicaciones.</div>
<div><br></div><div>Hoy día, los SS.OO. no permiten un acceso directo a la memoria, por motivos de seguridad, pero también por motivos de la gestión correcta de la memoria, que es la 2ª razón que te voy a comentar.</div><div>
<br></div><div>2. Los SS.OO. actuales usan memoria virtual que se basa en usar direcciones virtuales de memoria. Brevemente, el gestor de memoria virtual convierte las direcciones virtuales a direcciones físicas en memoria. Por esta razón, nuestras aplicaciones no pueden acceder directamente a una dirección de memoria (física), ya que es posible que tal dirección tomada no corresponda a la misma dirección física que indicamos.</div>
<div><br></div><div>Si queremos indicar una dirección de memoria física, tenemos que comunicarnos con el S.O. para permitirnos tal acceso y que no haga la conversión.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

El plugin que comente al principio puede escribirse en c++? o tal vez<br>
es de nivel más bajo como ASM?<br>
<br></blockquote><div><br></div><div>Sí; se puede hacer en C++ y por supuesto, se puede hacer en ensamblador. La cuestión importante es si C++ nos es más útil que ensamblador para solucionar nuestro problema.</div><div><br>
</div><div><br></div><div>Espero que esto aclare las dudas.</div><div><br></div><div>Steven</div><div><br></div></div></div></div>