From 8cc70a6a1a1ced22ff4948cfe678bc2c7ec7ec10 Mon Sep 17 00:00:00 2001 From: ami-chuu Date: Tue, 31 Mar 2026 00:14:07 +0300 Subject: [PATCH] Print PhysAddr --- src/interrupts.rs | 18 ++++++++++++++++-- src/main.rs | 8 ++++++++ src/vga_buffer.rs | 2 +- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/interrupts.rs b/src/interrupts.rs index b9e1ba9..5348439 100644 --- a/src/interrupts.rs +++ b/src/interrupts.rs @@ -1,8 +1,8 @@ -use crate::{gdt, print, println}; +use crate::{gdt, hlt_loop, print, println}; use lazy_static::lazy_static; use pic8259::ChainedPics; use spin; -use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame}; +use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame, PageFaultErrorCode}; #[derive(Debug, Clone, Copy)] #[repr(u8)] @@ -22,6 +22,7 @@ lazy_static! { } idt[InterruptIndex::Timer.as_usize()].set_handler_fn(timer_interrupt_handler); idt[InterruptIndex::Keyboard.as_usize()].set_handler_fn(keyboard_interrupt_handler); + idt.page_fault.set_handler_fn(page_fault_handler); idt }; @@ -91,6 +92,19 @@ extern "x86-interrupt" fn keyboard_interrupt_handler(_stack_frame: InterruptStac } } +extern "x86-interrupt" fn page_fault_handler( + stack_frame: InterruptStackFrame, + error_code: PageFaultErrorCode, +) { + use x86_64::registers::control::Cr2; + + println!("EXCEPTION: PAGE FAULT"); + println!("Accessed Address: {:?}", Cr2::read()); + println!("Error Code: {:?}", error_code); + println!("{:?}", stack_frame); + hlt_loop(); +} + #[test_case] fn test_breakpoint_exception() { // invoke a breakpoint exception diff --git a/src/main.rs b/src/main.rs index ae33235..b5ed8fa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,6 +13,14 @@ pub extern "C" fn _start() -> ! { amix::init(); + use x86_64::registers::control::Cr3; + + let (level_4_page_table, _) = Cr3::read(); + println!( + "Level 4 page table at: {:?}", + level_4_page_table.start_address() + ); + #[cfg(test)] test_main(); diff --git a/src/vga_buffer.rs b/src/vga_buffer.rs index 8f28833..4946715 100644 --- a/src/vga_buffer.rs +++ b/src/vga_buffer.rs @@ -129,7 +129,7 @@ impl fmt::Write for Writer { lazy_static! { pub static ref WRITER: Mutex = Mutex::new(Writer { column_position: 0, - color_code: ColorCode::new(Color::White, Color::Black), + color_code: ColorCode::new(Color::LightGray, Color::Black), buffer: unsafe { &mut *(0xb8000 as *mut Buffer) }, }); }