Cita de: calk9 en 11 Diciembre 2011, 22:42 PM
Primero quisiera saber si los offsets son SIEMPRE estáticos, o puede que cambien, y si estos son propios de cada programa o propios de cada porción de memoria (dinamica o estatica).
Sí, siempre serán estáticos, ya que estos los establece el compilador.
Cita de: calk9 en 11 Diciembre 2011, 22:42 PM
El tema es el siguiente. Tengo un programa el cual cuenta con memoria totalmente dinamica, al volver a ejecutarlo cambian los adresses de memoria, como todos saben. Ahora, se que para no tener que obtener el adress de memoria de cada variable de mi programa cada vez que lo ejecuto, utilizo los pointers y offsets. Tengo claro que los adresses de memoria dinamica se almacenan en otros adresses que son estáticos (esto es lo que no puedo obtener) pero no se almacenan TALCUAL nosotros podemos verlos; si no que hay una especie de "cuenta" en los cuales intervienen los offsets y los pointers.
Tienes una base fuerte de lo que punteros significa, sin embargo se puede perfeccionar.
Cada compilador tiene su manera de asignar punteros, (entiéndase entonces que un puntero no es más que una dirección de memoria estática la cual apunta a una dirección de memoria dinámica, siendo ésta variante con un reinicio de sistema, cierre de proceso, bla bla bla...). Entonces, dependiendo del compilador, al momento de compilar, éste le asignará al programa los punteros que apuntarán (valga la redundancia) a tales direcciones dinámicas (direcciones que alojaran variables, elementos de estructuras, elementos de clases, etc...) permitiendo al programa en ejecución acceder a ellas, ya sea para lectura o escritura.
Pero, cabe destacar que un puntero hace referencia a una región/zona de memoria, no siempre directamente a una dirección dinámica la cual contiene exactamente el valor buscado, entonces... debido a esto, como el puntero hace referencia a una zona de memoria, supongase:
(Puntero) [0x00460000] -> (Hace referencia a una región de memoria dinámica) [0x07A00000]
El compilador tiene que establecer un desplazamiento desde esa zona de memoria que lleve exactamente donde se encuentra la dirección dinámica poseedora del valor que el programa necesita leer/editar. Este desplazamiento (también llamado OffSet) puede hacerse con una simple resta o suma (depende de como lo veas), suponiendo entonces que:
Mi puntero está haciendo referencia esta vez a la zona de memoria dinámica: [0x07A00000], pero el valor que el programa usará se encuentra unas quince direcciones más abajo, supongase [0x7A00015], entonces el compilador al haber establecido esto, deducirá que el desplazamiento será 0x15.
En base a esto, saca tus conclusiones, quizá sonaron algunas palabras un tanto repetitivas, pero... estoy escribiendo a vuelo de pájaro (tengo un juego de fútbol en unos minutos) me debo ir .
Cita de: calk9 en 11 Diciembre 2011, 22:42 PM
Bueno, voy al grano, en este programa obtengo la direccion de memoria dinamica de una variable (con CE), de esta misma obtengo su offset y pointer (con MHS5). Pero no logro encontrar alguna funcion para obtener la memoria estatica en donde se almacena la memoria dinamica (por asi decirlo).
También cabe aclarar que cada vez que vuelvo a buscar los pointers y offsets que pertenecen a una direccion de memoria dinamica de una variable, estos mismos son diferentes a las busquedas anteriores, aunque la variable siempre sea la misma (pero no la direccion de memoria).
Me temo que lo debes estar haciendo mal, hace unos días hice un mini-tuto donde le enseñaba a un amigo a encontrar punteros con el CE, pero... también lo hice a vuelo de pájaro , aquí te lo dejo, espero te sirva de algo... disculpa que te escriba a esta velocidad, no es por menospreciarte, es que no tengo mucho tiempo libre.
Salud .