summaryrefslogtreecommitdiff
path: root/tools/page
diff options
context:
space:
mode:
Diffstat (limited to 'tools/page')
-rwxr-xr-xtools/page/page.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/tools/page/page.py b/tools/page/page.py
new file mode 100755
index 0000000..03d8e32
--- /dev/null
+++ b/tools/page/page.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python3
+from math import ceil as c
+def get_offsets(addr):
+ if addr % 4096:
+ print("You must align to 4096!")
+ return 0
+ if addr > 2 ** 47:
+ print("Address too big!")
+ return 0
+
+
+ pte = (addr >> 12) & 0x1ff
+ pde = (addr >> 21) & 0x1ff
+ pdpe =(addr >> 30) & 0x1ff
+ pml4 =(addr >> 39) & 0x1ff
+ print("pte:\t{}\npde:\t{}\npdpe:\t{}\npml4:\t{}".format(pte, pde, pdpe, pml4))
+
+def get_table_size(addr):
+ pte_cnt = c(c(addr / (1 << 12)) / 512) * 512
+ pde_cnt = c(c(addr / (1 << 21)) / 512) * 512
+ pdpe_cnt = c(c(addr / (1 << 30)) / 512) * 512
+ pml4_cnt = c(c(addr / (1 << 39)) / 512) * 512
+
+
+ return((pte_cnt + pde_cnt + pdpe_cnt + pml4_cnt) * 8)
+
+ts = get_table_size(68719476736)
+print(hex(ts))
+