summaryrefslogtreecommitdiff
path: root/tools/page/page.py
blob: 95d1ccc80aa73ab2af15680f271e6be545917eca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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(34359738368) 
print(ts)