
x86-64 पेजिंग तालिकाओं को उपयोगकर्ता मोड से परिवर्तित करने के लिए C++ लाइब्रेरी: PML4E, PDPTE, PDE और PTE प्रविष्टियों को पढ़ें/लिखें, वर्चुअल पतों को फ़िज़िकल पतों में अनुवादित करें, और स्व-संदर्भित तालिकाएँ बनाएँ।
उपयोगकर्ता-मोड से पेजिंग टेबल मैनिपुलेशन। सभी पेजिंग टेबल प्रविष्टियों और मानों को प्राप्त करने और सेट करने जैसे ऑपरेशन प्रदान किए जाते हैं। कोड बड़े पेजों के प्रति जागरूक है। लेख का लिंक यहाँ पाया जा सकता है।
vdm::read_phys_t _read_phys =
[&](void* addr, void* buffer, std::size_t size) -> bool
{
return vdm::read_phys(addr, buffer, size);
};
vdm::write_phys_t _write_phys =
[&](void* addr, void* buffer, std::size_t size) -> bool
{
return vdm::write_phys(addr, buffer, size);
};
vdm::vdm_ctx vdm(_read_phys, _write_phys);
nasa::mem_ctx my_proc(vdm);
const auto ntoskrnl_base =
reinterpret_cast<void*>(
util::get_kmodule_base("ntoskrnl.exe"));
const auto ntoskrnl_pde = my_proc.get_pde(ntoskrnl_base);
std::printf("[+] pde.present -> %d\n", ntoskrnl_pde.second.present);
std::printf("[+] pde.pfn -> 0x%x\n", ntoskrnl_pde.second.pfn);
std::printf("[+] pde.large_page -> %d\n", ntoskrnl_pde.second.large_page);
[+] pde.present -> 1
[+] pde.pfn -> 0x10400
[+] pde.large_page -> 1
[+] बंद करने के लिए कोई भी कुंजी दबाएँ...