[lcrash] ADD: Virtual memory manager

This commit is contained in:
xwashere 2024-04-22 08:45:07 -04:00
parent 4334e21878
commit aa0ed9df08
Signed by: XWasHere
GPG Key ID: 042F8BFA1B0EF93B

View File

@ -26,32 +26,37 @@ void VmemInitialize() {
for (int j = 0; j < 512; j++) { for (int j = 0; j < 512; j++) {
if ((*OriginalPDPT)[j] & 1) { if ((*OriginalPDPT)[j] & 1) {
u64 (*OriginalPD)[512] = (u64(*)[512])(((*OriginalPDPT)[j] & 0x000ffffffffff000)); if ((*OriginalPDPT)[j] & 128) {
u64 (*NewPD)[512] = KernelHeapAlloc(sizeof(u64) * 512, 0x1000, 0); (*NewPDPT)[j] = (*OriginalPDPT)[j];
} else {
u64 (*OriginalPD)[512] = (u64(*)[512])(((*OriginalPDPT)[j] & 0x000ffffffffff000));
u64 (*NewPD)[512] = KernelHeapAlloc(sizeof(u64) * 512, 0x1000, 0);
for (int k = 0; k < 512; k++) { for (int k = 0; k < 512; k++) {
if ((*OriginalPD)[k] & 1) { if ((*OriginalPD)[k] & 1) {
u64 (*OriginalPT)[512] = (u64(*)[512])(((*OriginalPD)[k] & 0x000ffffffffff000)); if ((*OriginalPD)[k] & 128) {
u64 (*NewPT)[512] = KernelHeapAlloc(sizeof(u64) * 512, 0x1000, 0); (*NewPD)[k] = (*OriginalPD)[k];
} else {
u64 (*OriginalPT)[512] = (u64(*)[512])(((*OriginalPD)[k] & 0x000ffffffffff000));
u64 (*NewPT)[512] = KernelHeapAlloc(sizeof(u64) * 512, 0x1000, 0);
if ((s64)NewPT <= 0) Panic("Failed to allocate memory"); if ((s64)NewPT <= 0) Panic("Failed to allocate memory");
for (int l = 0; l < 512; l++) { for (int l = 0; l < 512; l++) {
//if ((*OriginalPT)[l] & 1) { (*NewPT)[l] = (*OriginalPT)[l];
// (*NewPT)[l] = (*OriginalPT)[l]; }
//} else (*NewPT)[l] = 0;*
(*NewPT)[l] = (*OriginalPT)[l] | 0x87;
}
NewPT = (void*)((u64)OriginalPT | 0x87); NewPT = (void*)((u64)OriginalPT | (((*OriginalPD)[k] & ~0x000ffffffffff000)));
(*NewPD)[k] = (u64)NewPT; (*NewPD)[k] = (u64)NewPT;
} else (*NewPD)[k] = 0; }
} else (*NewPD)[k] = 0;
}
NewPD = (void*)((uptr)NewPD | (((*OriginalPDPT)[j]) & ~0x0007fffffffff000));
(*NewPDPT)[j] = (u64)NewPD;
} }
NewPD = (void*)((uptr)NewPD | (((*OriginalPDPT)[j]) & ~0x0007fffffffff000));
(*NewPDPT)[j] = (u64)NewPD;
} else (*NewPDPT)[j] = 0; } else (*NewPDPT)[j] = 0;
} }
@ -69,6 +74,4 @@ void VmemInitialize() {
CR3 ^= (u64)VmemOriginalPML4; CR3 ^= (u64)VmemOriginalPML4;
CR3 |= ((u64)VmemPML4) & 0x0007fffffffff000; CR3 |= ((u64)VmemPML4) & 0x0007fffffffff000;
asm volatile ("mov %q0, %%cr3" : : "r" (CR3)); asm volatile ("mov %q0, %%cr3" : : "r" (CR3));
Panic("FUCK");
} }