blob: c5af4919afd5eb58cfd056808cc573fba4502711 (
plain) (
blame)
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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;
}
|