Добавлены функции развертывания таблиц страниц

This commit is contained in:
Aren 2024-02-21 16:49:46 +03:00
parent ae0b51beb1
commit e258525c8a
3 changed files with 52 additions and 1 deletions

View File

@ -71,6 +71,7 @@ static struct gdt_desc gdt_descs[] = { { 0 },
.base_hi = 0x00 } };
extern void load_gdt(uint64_t gdtr);
void paging_init( );
uint64_t rdtsc( ) {
unsigned int lo, hi;
@ -111,4 +112,5 @@ void arch_init( ) {
pic_init( );
idt_init( );
cpu_init( );
paging_init( );
}

View File

@ -7,3 +7,52 @@
*/
#include <arch.h>
#include <log.h>
typedef struct {
uint64_t present : 1;
uint64_t rw : 1;
uint64_t user : 1;
uint64_t pwt : 1;
uint64_t pcd : 1;
uint64_t accessed : 1;
uint64_t dirty : 1;
uint64_t pat : 1;
uint64_t global : 1;
uint64_t ignored : 3;
uint64_t addr : 40;
uint64_t reserved : 11;
uint64_t no_execute : 1;
} page_table_entry_t;
// Получение адреса CR3
static inline uint64_t get_cr3( ) {
uint64_t cr3;
asm volatile("mov %%cr3, %0" : "=r"(cr3));
return cr3;
}
// Вывод флагов
void print_flags(page_table_entry_t entry) {
LOG("\tФлаги: [%c%c%c%c%c%c%c]\n", entry.present ? 'P' : '-', entry.rw ? 'W' : 'R', entry.user ? 'U' : '-',
entry.pwt ? 'T' : '-', entry.pcd ? 'D' : '-', entry.accessed ? 'A' : '-', entry.no_execute ? 'X' : 'E');
}
// Вывод структуры таблицы страниц, начиная с CR3
void print_page_structure(uint64_t cr3) {
page_table_entry_t* pml4 = (page_table_entry_t*)(cr3 & ~0xFFF); // Получаем адрес PML4
LOG("PML4 Address: 0x%x\n", pml4);
for (uint64_t i = 0; i < 512; i++) {
if (pml4[i].present) {
LOG("PML4[%d] - present\n", i);
print_flags(pml4[i]);
LOG("Адрес: 0x%x\n", pml4[i].addr);
}
}
}
void paging_init( ) {
LOG("Paging...\n");
print_page_structure(get_cr3( ));
}

View File

@ -128,7 +128,7 @@ void mod_init( ) {
continue;
}
module_info_t (*module_init)(env_t * env) =
module_info_t (*module_init)(env_t *env) =
(module_info_t(*)(env_t * env)) elf_entry((elf64_header_t *)module_ptr->address);
// LOG("\t->Точка входа: 0x%x\n", module_init);