Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: franfis en 18 Marzo 2012, 18:42 pm



Título: ayuda memoria virtual
Publicado por: franfis en 18 Marzo 2012, 18:42 pm
Hola, bueno realmente tengo muchas dudas sobre la memoria virtual; paginacion, segmentacion, reubicacion, proteccion, marco de pagina, etc.

Para comenzar ya leì esos conceptos pero solo lo entiendo a nivel teorico, en los libros de sistemas operativos solo hacen eso "a nivel teorico"  y unos ejemplillos digamos que no son reales usando terminos por ejemplo "sea un marco de pagina a....... numero de pagina b.....etc". No encuentro ejemplos, como se hace en 32 bits.

Por ejemplo de una instruccion de Olly dice:

 Stack SS:[0012FF58]=00000001  y el ss:0023 32bits 0(FFFFFFFF)

¿Que operacion se hizo para obtener 00000001?

Por otro lado ¿cada pagina tiene un proceso y sus propios segmentos SS, ES , etc ?

Bueno es unas de mis muchas dudas.

Gracias....


Título: Re: ayuda memoria virtual
Publicado por: MCKSys Argentina en 19 Marzo 2012, 22:55 pm
Stack SS:[0012FF58]=00000001  y el ss:0023 32bits 0(FFFFFFFF)

¿Que operacion se hizo para obtener 00000001?

00000001 es el valor que esta en esa direccion de memoria, la cual corresponde al stack. Es tan simple como hacer, por ej.

Código:
mov eax, dword ptr [0012FF58]

Por otro lado ¿cada pagina tiene un proceso y sus propios segmentos SS, ES , etc ?
...

Un proceso alloca una o varias paginas de memoria. El tema segmento-desplazamiento esta heredado de los 16 bits. En 32 bits casi no se usan, excepto, por ej. para establecer un exception handler. En este caso se usa FS.

Aunque, bueno, mis conocimientos de ASM son reducidos...


Título: Re: ayuda memoria virtual
Publicado por: x64core en 20 Marzo 2012, 08:36 am
Por otro lado ¿cada pagina tiene un proceso y sus propios segmentos SS, ES , etc ?
Bueno es unas de mis muchas dudas.
Gracias....

pues claro cada proceso tiene su par de registros con sus valores correspondiente en modo protegido de 32 bits
sino mal recuerdo el micro es el que se encarga de eso y tambien es el encargado de restarurarlos...
no encuentro la pagina donde habla de eso en mi librito :3


Título: Re: ayuda memoria virtual
Publicado por: franfis en 21 Marzo 2012, 17:23 pm
Gracias  ::) creo que mis preguntas son muy minuciosas jeje ..

Cada proceso se carga en varias paginas, cada proceso en memoria tiene sus segmentos de codigo, datos,pila,etc. sin importar en que pagina esta ubicada. ¿cierto?

.data----> en una pagina
.code----> en otra pagina
.ext------>en otra pagina

¿Esto lo puedo probar con el softice? o ¿que herramienta es bueno para averiguarlo yo mismo? Es que intenté instalar softice en mi PC como hace 6 años y me era imposible configurarlo, tampoco habia mucha info.

Graciass otra vez


Título: Re: ayuda memoria virtual
Publicado por: MCKSys Argentina en 21 Marzo 2012, 18:34 pm
El tema es que Sice ya esta viejito. Se que existe una version de Sice para XP, pero no tengo idea de donde puedes bajarla.

Una cosa: no confundas paginas de memoria con "secciones allocadas". Para que te des una idea, por ej., si usas VirtualAlloc varias veces, dependiendo del tamaño a reservar, una o varias de las secciones allocadas pueden estar en la misma pagina de memoria...

Osea, que veas en Olly diferentes secciones de memoria, no significa que esten en diferentes paginas...

Saludos!

PD: Sobre esto, es probable que EternalIdol tenga una idea mas concluyente (y exacta) que la mia... :)


Título: Re: ayuda memoria virtual
Publicado por: Eternal Idol en 21 Marzo 2012, 18:58 pm
Usa WinDbg.

PD. Una pagina suele tener 4096 bytes de tamaño.


Título: Re: ayuda memoria virtual
Publicado por: jacosito en 6 Abril 2012, 21:31 pm
Gracias  ::) creo que mis preguntas son muy minuciosas jeje ..

Cada proceso se carga en varias paginas, cada proceso en memoria tiene sus segmentos de codigo, datos,pila,etc. sin importar en que pagina esta ubicada. ¿cierto?

.data----> en una pagina
.code----> en otra pagina
.ext------>en otra pagina

¿Esto lo puedo probar con el softice? o ¿que herramienta es bueno para averiguarlo yo mismo? Es que intenté instalar softice en mi PC como hace 6 años y me era imposible configurarlo, tampoco habia mucha info.

Graciass otra vez

A ver para aclarar conceptos.

Todavía se utilizan los segmentos y no es cosa del pasado.

La gran diferencia es que ahora los segmentos tienen un tamaño muchísimo mayor a 64KB (anteriores procesadores).

Bien, lo que ocurre es lo siguiente: El código/datos se encuentran delimitados a un segmento y este segmento cuando se carga en memoria, sólo se carga una/varias página(s) en memoria, no se carga todo el segmento en memoria solo la página que se necesite. El tamaño de la página es variable y depende mucho de que tipo de OS  se esté operando, si es base de datos, normalmente la página es de 8KB-16KB, de lo contrario 4KB o menos. La idea es hacer coincidir el tamaño de la página del procesador con la página que se maneja desde el OS.

Ahora, los segmentos se pueden definir de manera tal que sea uno solo pero el problema radica en el segmento de código que no se permite que se auto-modifique.

Ahora, el OS tiene tablas que se inicializaron al start-up y en las cuales se han definido las cosas necesarias para su buen funcionamiento: Tabla de interrupciones, de tareas locales, tareas globales, etc.

Saludos