Un pequeño resumen sobre la gestión de memoria y la traducción de direcciones
Como es más fácil dibujar en un iPad, subiré la versión manuscrita de esta nota directamente. He solucionado la conversión de dirección lineal a dirección física y la actualizaré si hay alguna adición en el futuro.
La función principal de la tabla de páginas de cuatro niveles es la asignación de direcciones, que asigna direcciones lógicas a direcciones físicas.
El proceso de traducción de direcciones de ARM MMU es en realidad más complicado. Se implementa a través de una tabla de páginas de dos niveles. Hay dos tipos principales de métodos de conversión y cuatro casos para obtener más información. sinat_41104353/article/details/82778822
Se sabe que el sistema utiliza paginación IA-32 y ahora conocemos una dirección virtual 0x10036270, que debe convertirse en una dirección física. Si se sabe que el valor en el registro CR3 es 0x7401000, el proceso de conversión es el siguiente:
1 La dirección virtual es 0x10036270 (00010000 00000011 01100010 01110000)
22- 31 bits es el valor PDI (00 0100 0000), 12-21 bits es el valor PTI (00 0011 0110), 0-11 bits es el desplazamiento de dirección (010 0111 0000)
2. La dirección de la página entrada de directorio PDE = PDI×4 PDB (CR3 )=0x40×4 0x740100=0x7401100
3. Después de conocer la dirección física de la PDE, puede conocer el valor almacenado en la dirección física. Por ejemplo, supongamos que. el valor almacenado en la dirección física es 0x28cf9067. El valor de PTE consta de 12-31 bits del valor de PDE y 12-21 bits de la dirección virtual (0-11 bits se completan con 0 según 12 bits. Se puede obtener la dirección física del PTE = 0x28cf9058<). /p>
4. Suponga que la dirección física tiene el valor 0x182a7071 y el valor de la dirección física consta de 12 a 31 bits del valor PTE y la dirección de desplazamiento.
Finalmente, la dirección física = 0x28cf9000 0x270 = 0x28cf9270.
Lo anterior es el proceso de convertir la dirección virtual de paginación IA-32 en una dirección física.
Acerca de la conversión de una dirección virtual a una dirección física
Dado que lo que se almacena en la memoria es generalmente una dirección virtual, y la dirección ubicada en la memoria física debe ser una dirección física, por lo que la Se calcula la dirección virtual. La relación de mapeo entre (dirección lineal) y la dirección física es la clave para el análisis de la memoria.
El cálculo del mapeo de una dirección virtual a una dirección física debe utilizar una regla básica: el contenido de la misma página de dirección virtual también está en la misma página física.
Por ejemplo, en la gestión de la memoria física, el tamaño de la página es generalmente 4 KB, 2 MB, 4 MB, todos mayores o iguales a 0x1000 (4 KB). De acuerdo con las reglas anteriores, la dirección virtual 0xffdff000-0xffdfffff debe asignarse a la misma página física. Calcular la dirección base del directorio de páginas del sistema es la clave para calcular la asignación de memoria. Si se encuentra un puntero a la dirección base del directorio de páginas del sistema en 0xffdff000-0xffdfffff, el problema de asignación de direcciones se resolverá.
Como puede ver en las notas de la parte anterior, el registro CR3 es un registro muy importante. Registra la dirección base del directorio de la página (o la dirección base del puntero del directorio de la página, o la dirección base PLM4). Puede obtener el contenido del registro CR3 y luego es posible obtener la dirección base del directorio de la página ya preparada.
Aquí, utilizando el ejemplo de "Principios y práctica forense de la memoria", primero describiremos brevemente el método de utilizar la dirección virtual de CR3 para encontrar su dirección física.
Tomando como ejemplo el sistema operativo win7 de 64 bits, el miembro de la estructura ProcessorState de _KPRCB es una estructura _KPRROCESSOR_STATE, la dirección inicial es 0xfffff80045eff80 0x40, el miembro SpecialRegister está en 0x0 y el registro CR3 está en el desplazamiento 0x010 La dirección virtual es 0xfffff80045eff80 0x40 0x10.
De acuerdo con las reglas básicas mencionadas anteriormente, podemos saber que está en la misma página que 0xfffff800045efe00, por lo que su dirección física = dirección física de 0xFFFFF800045EFE00 0x180 (la diferencia entre estas dos direcciones) 0x40 0x10.
El método de paginación de la página y el tamaño de la página se determinan mediante el siguiente proceso:
1. Encuentre la dirección física a la que apunta el registro CR3 en función de su contenido.
2. Determine el primer byte en la dirección. Si no es 0x01, salte al tercer paso. De lo contrario, indica que se utiliza el modo PAE. Los 8 bytes que comienzan desde esta dirección son la página. puntero de directorio. Seleccione el puntero del directorio de páginas según los bits 31 ~ 30 de la dirección virtual que se va a convertir. Por ejemplo, si la dirección que se va a convertir es 0x8054c2b8 (10000000 01010100 11000010 10111000), el tercer elemento (binario 10) de la tabla de punteros del directorio de páginas es un puntero al directorio de páginas y la dirección base del directorio de páginas se puede encontrar en función de este puntero.
Determine la entrada del directorio de páginas correspondiente a la dirección virtual que se va a convertir en función de la dirección base del directorio de páginas y los bits 21 a 20 de la dirección virtual. Por ejemplo, si la dirección que se va a convertir es ox8054c2b8, entonces los bits 21 al 29 son 000000010 (0x02), entonces los 8 bytes que comienzan desde la dirección base del directorio de páginas más 8 × 2 son las entradas del directorio de páginas que se encuentran.
3. Determine el bit más alto del primer byte en la dirección. Si es "1", indica que se utiliza el modo de página grande; si es "0", indica que apunta; a la tabla de páginas.