Problema en C

Kr4n3oK

Buenas, ahí va la preguntita ¿como podría acceder a toda la memoria RAM y ver los valores que están dentro de cada regitro?, gracias de antemano xd

Lecherito

Yo creo que lo que tienes que saber es en qué dirección de memoria está cada cosa, (o donde empieza y saber cuanto ocupa cada registro), y eso ya depende de tu pc, a mi parecer, quizá deberías mirar la documentación y eso.

Te lo digo sin saber mucho del tema la verdad, pero en la Nintendo DS lo hacía así.

ExTiNcT_

Qué sentído tendría acceder a toda la memoria RAM??

A tí si una variable X=3 el ordenador la guarda en una posición u otra de memoria no debería importarte, de igual modo con las posiciones de un array, etc.
A tí te interesará luego conocer el valor de X o poder recorrer el array, indistintamente de la posición física de memoria donde esté almacenado.

Aún que podrías conocer si te interesara la posición de memoria concreta donde se almacena el valor de X.

Pero recorrer todas las celdas de tu memoria RAM, lo veo una locura.. pero esto es MV!:P

Kr4n3oK

Para crear un cheat básicamente, es una meta que me he propuesto xdd, aunque luego no le de uso.

Es decir si entro en memoria cuando ejecute el juego que sea intentar ver todos los registro y guardar las variables y comenzar a experimentar, la verdad que no tengo ni idea de como hacer estas cosas, pero una vez pensé en como se haría y me hizo ilu empezar uno de ellos aver que consigo xddd

Vefalst

Para mi que no se puede hacer eso... si accedes a una posicion de memoria que no este asignada al propio programa te va a salir lo de "violacion del segmento"

Aunque tampoco estoy seguro :no:

1 respuesta
VipeR_CS

Me da a mí que como dice #5, tarde o temprano accederás a memoria protegida y te va a petar el pc por todos lados.

Kr4n3oK

Me lo imaginaba xdd, una cosa ya que estamos aquí voy a haceros una pregunta que me mata, los punteros, se que son y como se usan pero en que situación real se suelen usar en un software.

catalon

cheatengine es basicamente lo que quieres hacer. Como te han dicho cuando el 'trozo' de memoria este protegido te comeras los mocos.

si sabes que son los punteros sabras para que se usan no? lo que pasa que en los lenguajes de programacion de 3 y 4 nivel ni se usan. Basicamente el puntero es lo que le dice a una variable X la direccion en memoria de su valor.

Kr4n3oK

Se que el puntero es la dirección fisica de una variable, pero nen no se donde se suelen utilizar es una cosa que siempre pregunto a las personas y todos me dicen lo mismo "si sabes lo que es tienes que saber como se usa", pues no, porque saber se lo que es pero no se donde se suele usar y porque.

1 respuesta
ExTiNcT_

Se usan para muchas cosas, por ejemplo tienes un array o un hash donde en cada celda guardas una lista enlazada de objectos (que se almacenan en "pila" digamos).

Y tú quieres añadir al final de la lista enlazada de una celda concreta otro elemento; para ello la clase tiene una función pública implementada con dicha finalidad.

Lo que harías sería recoger el elemento que quieres inserir, crearte un puntero del tipo "lista enlazada de objetos" (que corresponde a lo que estas almacenando en las celdas), este puntero lo harías apuntar a la celda deseada y podrias ahora sí, inserir el elemento recogido al final de la lista enlazada de esa celda.

Sería un ejemplo en programación orientada a objectos.

catalon

#9 Pues nada, cada vez que usas una variable estas usando un puntero, lo que pasa que en los lenguajes mas nuevos el puntero ni lo hueles. Hace mucho que no programo en c++ pero creo recordar que ahi si se utilizababn mas, para recorrer la memoria desde una posicion. Pero vamos que apenas e visto punteros en la universidad y nunca mas.

LOc0

#1 Para estas cosas dependes del SO y acceder a "toda la RAM" muy resumidamente no tiene sentido. La idea es acceder a la memoria de otros procesos:

Windows -> http://msdn.microsoft.com/en-us/library/ms680553%28v=vs.85%29.aspx

Unix y primos -> http://en.wikipedia.org/wiki/Ptrace

Salu2 ;)

1 respuesta
Kr4n3oK

#12 bastante interesante gracias xdd

0buS

C tiene acceso directo a memoria? Yo creo que no, no? Máximo me suena que uses punteros, pero vamos de ahí a ver toda la tabla de direcciones de memoria... xD

#15 A eso me refiero. Que C no tiene el nivel tan bajo como para acceder a cualquier posición de memoria no? Ya se que si creas un puntero puedes acceder a esa dirección, pero de ahí a acceder a CUALQUIERA... me parece raro.

1 respuesta
Kartalon

#14 ¿Y si punteros no es acceso directo a memoria qué es? Creas un puntero, le asignas el valor que te salga de los huevos, ya accedes a la posición de memoria deseada. Incrementas y accedes a la posición de memoria siguiente.

Otra cosa es que esa posición de memoria esté protegida o lo que sea y te den violaciones de memoria, pero eso ya lo han dicho en los replies anteriores.

Edit: #14 Pero es que eso no es problema del nivel de abstracción del lenguaje utilizado, sino de la arquitectura del sistema operativo (por lo general). Por mucho que programaras en código máquina si el sistema no te permite acceder a dichas posiciones de memoria pues saltará una violación de memoria xDD

1 respuesta

Usuarios habituales

  • Kartalon
  • 0buS
  • Kr4n3oK
  • LOc0
  • catalon
  • ExTiNcT_
  • Lecherito