Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - theternitend

#1
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.
#2
Entiendo... y la posicion donde se carguen esas API dependera de su ImageBase

Gracias por sus respuestas  ;-)
#3
Siempre que abro un fichero con el Olly y miro el volcado de memoria veo que por ejemplo la direccion donde comienza el kernel32.dll (que incorpora muchas API) es siempre la misma.
Eso quiere decir que siempre estan cargadas en memoria y lo unico que hacen los programas es llamarlas?
#4
Encontré estaa páginas (y más) acorde a lo que me dijiste: http://www.mitecnologico.com/Main/InterrupcionesPuertos
http://www.zator.com/Hardware/H2_4.htm

Muchas gracias, me quedó todo más claro  :P

PD: Por cierto, tengo una duda más:

Tengo entendido que existe una memoria ajena a la principal que es la responsable de los puertos. En una dirección de esa memoria se escriben los datos que un periférico lee. ¿Existe? ¿Cuál es el nombre de esa memoria?
#5
Pongamos cualquier procesador de la familia x86.
Se coloca la dirección en el bus de direcciones, el bus de control indica que se va a realizar una operación de lectura/escritura de un puerto, y el bus de datos está listo para enviar o recibir información.

¿Y entonces? ¿Qué sucede?

Tengo entendido que el periférico al que se va a acceder lo detecta y responde a la llamada, pero eso es con términos muy generales.

¿Alguien me lo podría explicar más en detalle?

Gracias  :)