ImageBase de ejecutables y de librerías de enlace dinámico

Iniciado por theternitend, 18 Abril 2012, 02:20 AM

0 Miembros y 4 Visitantes están viendo este tema.

theternitend

Buenas!

Tengo entendido que en Windows, en lo que respecta a los ejecutables en formato PE, la ImageBase suele ser 4000000h y a partir de ahí se cargan en memoria.
En las DLL puede ocurrir que cuando tu programa intenta cargar una, y esta intenta cargarse desde la ImageBase especificada en su Header, esta parte de la memoria ya esté ocupada, y de ahí surge el tema de las relocaciones de las DLL.

La pregunta es... ¿cómo es que la ImageBase de los ejecutables siempre hace referencia a una zona de memoria libre?
Si todos los programas se cargan a partir de esa dirección, debería de estar ocupada si hay unos cuantos cargados en memoria.

Todo esto es lo que me pareció entender... si me equivoco en todo lo que digo corregidme por favor  :silbar:

Gracias a todos.

Eternal Idol

Cada proceso tiene su espacio de memoria PRIVADO al que no se puede acceder con un puntero (sino todos podrian sobreescribir a los demas). Por eso la misma direccion VIRTUAL puede perfectamente apuntar a otra direccion FISICA.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Binary_Death

#2
En ese caso, si tengo la dirección virtual, ¿puedo calcular de alguna forma la dirección física a la que corresponde durante la ejecución de un proceso?

¿Tiene esto que ver con la LDT y la GDT? Windows carga los registros de segmento con un selector que haciendo referencia a la tabla de descriptores indica una dirección real de memoria...

Pero no sé, es que tengo muchos datos teóricos pero pocos prácticos, y entonces sólo puedo hacerme a la idea de como funciona el asunto pero no consigo entenderlo del todo.

Gracias Eternal.

Eternal Idol

¿theternitend = Binary_Death?

No podes, excepto desde modo Kernel. Mas tiene que ver con los PDEs y PTEs.

http://en.wikipedia.org/wiki/Virtual_memory

Virtual Address Space


Si el problema es la teoria te recomiendo conseguir Windows Internals y depurar en modo Kernel.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Binary_Death

theternitend = Binary_Death en este caso.
Es que hacía mucho que no me conectaba y no recordaba ya la password que tenía, así que usé la cuenta que se creó un amigo.
Ya recuperé la pass.

En el caso de las DLL, es necesario tener una tabla de reubicación porque se cargan en el mismo espacio de memoria del proceso, ¿no?

Eternal Idol

Si, la gran mayoria son relocalizable y tienen la misima direccion base pretederminada (0x10000000), de no ser asi en cuanto coincidiera que una direccion base esta ocupada no se podria cargar la DLL.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Binary_Death

Por suerte parece que ya se comienzan a aclarar las cosas en mi cabeza   :xD

Vamos a ver si con un poco de práctica y haciendo un par de programas lo asimilo del todo.

Gracias de nuevo Eternal. Un saludo.

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón