Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: theternitend en 18 Abril 2012, 02:20 am



Título: ImageBase de ejecutables y de librerías de enlace dinámico
Publicado por: theternitend en 18 Abril 2012, 02:20 am
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.


Título: Re: ImageBase de ejecutables y de librerías de enlace dinámico
Publicado por: Eternal Idol en 18 Abril 2012, 09:03 am
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.


Título: Re: ImageBase de ejecutables y de librerías de enlace dinámico
Publicado por: Binary_Death en 18 Abril 2012, 11:59 am
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.


Título: Re: ImageBase de ejecutables y de librerías de enlace dinámico
Publicado por: Eternal Idol en 18 Abril 2012, 13:21 pm
¿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 (http://msdn.microsoft.com/en-us/library/windows/desktop/aa366912%28v=vs.85%29.aspx)


Si el problema es la teoria te recomiendo conseguir Windows Internals y depurar en modo Kernel.


Título: Re: ImageBase de ejecutables y de librerías de enlace dinámico
Publicado por: Binary_Death en 18 Abril 2012, 17:00 pm
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?


Título: Re: ImageBase de ejecutables y de librerías de enlace dinámico
Publicado por: Eternal Idol en 18 Abril 2012, 19:24 pm
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.


Título: Re: ImageBase de ejecutables y de librerías de enlace dinámico
Publicado por: Binary_Death en 18 Abril 2012, 20:04 pm
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.


Título: Re: ImageBase de ejecutables y de librerías de enlace dinámico
Publicado por: Eternal Idol en 18 Abril 2012, 20:24 pm
De nadas ::)