Reading high memory causes page fault in UEFI Bootloader
Posted: Mon Mar 20, 2023 3:26 pm
I try to read memory mapped above 0xffff800000000000 but it gives a page fault at CR2=00000000fee00020. even if I map that address (which looks like the LAPIC) it gives a page fault at 0xffff800000000000.
- I have one of the latest qemu version 7.2.0 which supports 5 level paging, is it related to the problem ?
- I map the kernel with 2 MB Pages and Global Paging
- Here is the "info mem" dump in QEMU:
- Here is the "info registers" dump :
Here is the testing instruction :
Operating System Link : https://github.com/NXTdevosc1/New-Operating-System
src/boot/efi/amd64/
- I have one of the latest qemu version 7.2.0 which supports 5 level paging, is it related to the problem ?
- I map the kernel with 2 MB Pages and Global Paging
- Here is the "info mem" dump in QEMU:
Code: Select all
0000000000000000-00000000000a0000 00000000000a0000 -rw
0000000000100000-0000000080000000 000000007ff00000 -rw
00000000b0000000-00000000c0000000 0000000010000000 -rw
00000000ffc00000-0000000180000000 0000000080400000 -rw
ffff800000000000-ffff800000200000 0000000000200000 - rw
Code: Select all
CPU#0
RAX=0000000000000000 RBX=000000007f17d4e8 RCX=000000007f170548 RDX=0000000000000002
RSI=0000000000000032 RDI=000000007f170548 RBP=00000000000004d0 RSP=000000007fe9ca70
R8 =0000000000000000 R9 =0000000000000000 R10=000000000000000a R11=ffff800000001000
R12=000000007fe9cbb8 R13=000000000000000e R14=000000007f5a8018 R15=000000007e362000
RIP=000000007f166148 RFL=00000046 [---Z-P-] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0030 0000000000000000 ffffffff 00cf9300 DPL=0 DS [-WA]
CS =0038 0000000000000000 ffffffff 00af9a00 DPL=0 CS64 [-R-]
SS =0030 0000000000000000 ffffffff 00cf9300 DPL=0 DS [-WA]
DS =0030 0000000000000000 ffffffff 00cf9300 DPL=0 DS [-WA]
FS =0030 0000000000000000 ffffffff 00cf9300 DPL=0 DS [-WA]
GS =0030 0000000000000000 ffffffff 00cf9300 DPL=0 DS [-WA]
LDT=0000 0000000000000000 0000ffff 00008200 DPL=0 LDT
TR =0000 0000000000000000 0000ffff 00008b00 DPL=0 TSS64-busy
GDT= 000000007f9de000 00000047
IDT= 000000007f593018 00000fff
CR0=80010033 CR2=00000000fee00020 CR3=0000000000001000 CR4=00000668
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
EFER=0000000000000d00
FCW=037f FSW=0000 [ST=0] FTW=00 MXCSR=00001f80
FPR0=0000000000000000 0000 FPR1=0000000000000000 0000
FPR2=0000000000000000 0000 FPR3=0000000000000000 0000
FPR4=0000000000000000 0000 FPR5=0000000000000000 0000
FPR6=0000000000000000 0000 FPR7=0000000000000000 0000
XMM00=0000000000000000 0000000000000000 XMM01=0000000000000000 0000000000000000
XMM02=0000000000000000 0000000000000000 XMM03=0000000000000000 0000000000000000
XMM04=0000000000000000 0000000000000000 XMM05=0000000000000000 0000000000000000
XMM06=0000000000000000 0000000000000000 XMM07=0000000000000000 0000000000000000
XMM08=0000000000000000 0000000000000000 XMM09=0000000000000000 0000000000000000
XMM10=0000000000000000 0000000000000000 XMM11=0000000000000000 0000000000000000
XMM12=0000000000000000 0000000000000000 XMM13=0000000000000000 0000000000000000
XMM14=0000000000000000 0000000000000000 XMM15=0000000000000000 0000000000000000
Code: Select all
QemuWriteSerialMessage(ToStringUint64(*(UINT64*)(0xffff800000000000)));
src/boot/efi/amd64/