[C con Clase] los temibles punteros

Yolmer Rosales yolmer.rosales en gmail.com
Lun Mar 17 19:21:47 CET 2014


Gracias Steven

pueden también recomendar alguna bibliografía  sobre la memoria virtual en
windows o en general

desde la época del 386 se comenzó hablar de modo virtual o modo seguro es
entonces eso precisamente lo mismo de aquellos tiempos remotos?

que pasaría si intento correr eso mismo en linux tengo más, menos o igual
acceso?

Cuando hablas de comunicarse con el sistema operativo para ver direcciones
específicas de memoria, te refieres a alguna biblioteca en particular, o
cómo se podría hacer?

disculpen la insistencia con el plugin, pero en ahora que lo dices, si el
epsxe EMULA la plataforma psone entonces los datos definitivamente no se
encuentran físicamente en la dirección que indica...

me atrevo entonces a hacer unas conjeturas, el plugin se comunica con el
emulador este con el SO y este otro a su vez con el hardware, y de esa
manera se garantizan unas cuantas cosas ... pero entonces me surge la otra
pregunta, que es similar a una de las del primer mensaje.

Este plugin. cómo lee de la memoria del programa? Por una parte ya revisé
es una dll entonces... conjeturo nuevamente aprovecharon la comunicación
que queda abierta con una librería dinámica. Pero no me queda del todo
claro porque...

Según yo lo veo es imposible que los datos se carguen en las mismas
direcciones en cada ejecución aún siendo virtuales, no hay nada que
garantice [creo yo] que los va a encontrar libre. Entonces de que se puede
valer un programador para hurgar  en la memoria de otro programa. Acaso de
los socket? no se disculpen si dije barbaridades

Tal vez viendo el fuente me pierda más porque no soy experto pero ni
siquiera es un proyecto abierto

Disculpen lo largo.




El 17 de marzo de 2014, 12:33, Davidson, Steven <srd4121 en njit.edu> escribió:

> Hola Yolmer,
>
> 2014-03-16 23:40 GMT-04:00 Yolmer Rosales <yolmer.rosales en gmail.com>:
>
> Hola lista,
>>
>> Hace poco, utilicé un plugin del emulador de la playstation que te
>> permite buscar y modificar valores cargados en memoria del juego en
>> pleno funcionamiento, y pensé que tal vez se podía leer cualquier
>> valor en memoria de la computadora usando punteros y c++.
>>
>> Entonces escribí algo como esto:
>>
>> int* pos_memoria = (int*) 0xFFFF;
>> cout << "posición de memoria:    contenido" << endl  << pos_memoria <<
>> " : " << *pos_memoria << endl;
>>
>> para mi sorpresa funcionó....
>>
>
> 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.
>
>  pero cuando intenté hacer otras asignaciones arbitrarias de memoria
>> se acabó la magia y ni hablar del intento de hacer un bucle con 100
>> posiciones diferentes.
>>
>>  Ahora un par de preguntas y otra más
>>
>> por qué no puedo leer cualquier parte de la memoria que yo quiera? , y
>> existe alguna manera de saber las direcciones de memoria que están
>> siendo usadas por un programa en particular o el propio programa?
>>
>>
> Existen varias razones:
>
> 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.
>
> 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.
>
> 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.
>
> 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.
>
> El plugin que comente al principio puede escribirse en c++? o tal vez
>> es de nivel más bajo como ASM?
>>
>>
> 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.
>
>
> Espero que esto aclare las dudas.
>
> Steven
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140317/851c4489/attachment.html>


Más información sobre la lista de distribución Cconclase