diff options
| author | 2026-08-18 12:15:05 +0200 | |
|---|---|---|
| committer | 2026-08-18 12:15:05 +0200 | |
| commit | 132d3236bb884433bf94e961f6d32264e0334aec (patch) | |
| tree | 06638976b06f019ea4037175ff228f8271057c44 /misc-host/test-vaddr/vaddr.cpp | |
Diffstat (limited to 'misc-host/test-vaddr/vaddr.cpp')
| -rw-r--r-- | misc-host/test-vaddr/vaddr.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/misc-host/test-vaddr/vaddr.cpp b/misc-host/test-vaddr/vaddr.cpp new file mode 100644 index 0000000..c5af491 --- /dev/null +++ b/misc-host/test-vaddr/vaddr.cpp @@ -0,0 +1,50 @@ +#include <iostream> +#include <cstdio> +#include <cstdint> + +typedef struct __attribute__((packed)) +{ + unsigned long page:21; + unsigned long PD:9; + unsigned long PDP:9; + unsigned long PML4:9; + unsigned long sign:16; +} s_vptr; + +union v +{ +s_vptr vptr; +unsigned long ptr; +}; + +int main() +{ + // 0x0FFFFFFFF; below 4GB + //unsigned long vaddr = 0x40000000; // 1GB // 0x100000000; // 4GB + + unsigned long vaddr = 0x280000000; // 10GB + + uint64_t kr = 0xffffffff7fffffff; // -2GB mark + + //v * p = (v*)&vaddr; + v * p = (v*)&kr; + + std::cout << "sign " << p->vptr.sign << std::endl; + std::cout << "PML4 " << p->vptr.PML4 << std::endl; + std::cout << "PDP " << p->vptr.PDP << std::endl; + std::cout << "PD " << p->vptr.PD << std::endl; + std::cout << "Page " << p->vptr.page << std::endl; + + + printf("%p\n", p->ptr); + //std::cout << "Pointer " << p->ptr << std::endl; + + v p2; + p2.ptr = 0; + p2.vptr.PML4 = 1; + + printf("p2: %p\n", p2.ptr); + + return 0; +} + |
