Skip to content

Commit 131049e

Browse files
committed
add x86-64 vaddr composer
1 parent 129d48a commit 131049e

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed

tools/x86_64_vaddr_composer.html

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<title>x86-64 Virtual Address Composer</title>
5+
<meta charset="UTF-8">
6+
</head>
7+
<body onload="decompose()">
8+
<script>
9+
function setPart(name, value) {
10+
let part = document.getElementById(name);
11+
part.value = ('000' + value.toString(16)).slice(-3);
12+
part.style.backgroundColor = "";
13+
}
14+
15+
function decompose() {
16+
let vaddr = document.getElementById("vaddr").value;
17+
let vaddr_hi = parseInt(('0000000000000000' + vaddr).slice(-16, -8), 16);
18+
let vaddr_lo = parseInt(('00000000' + vaddr).slice(-8), 16);
19+
let pml4 = (vaddr_hi >> (39 - 32)) & 0x1ff;
20+
let pdp = ((vaddr_hi << 2) & 0x1fc) | ((vaddr_lo >> 30) & 0x3);
21+
let pd = (vaddr_lo >> 21) & 0x1ff;
22+
let pt = (vaddr_lo >> 12) & 0x1ff;
23+
let off = vaddr_lo & 0xfff;
24+
setPart("pml4", pml4);
25+
setPart("pdp", pdp);
26+
setPart("pd", pd);
27+
setPart("pt", pt);
28+
setPart("offset", off);
29+
}
30+
31+
function to_hex(i) {
32+
return ('00000000' + (i >>> 0).toString(16)).slice(-8);
33+
}
34+
35+
function getPart(name, maxValue) {
36+
let part = document.getElementById(name);
37+
let v = parseInt(part.value, 16);
38+
if (v < 0 || v > maxValue) {
39+
part.style.backgroundColor = "red";
40+
} else {
41+
part.style.backgroundColor = "";
42+
}
43+
return v;
44+
}
45+
46+
function compose() {
47+
let pml4 = getPart("pml4", 0x200);
48+
let pdp = getPart("pdp", 0x200);
49+
let pd = getPart("pd", 0x200);
50+
let pt = getPart("pt", 0x200);
51+
let off = getPart("offset", 0x1000);
52+
let canonical = 0;
53+
if (pml4 >>> 8) {
54+
canonical = 0xffff;
55+
}
56+
let vaddr_hi = canonical << 16 | pml4 << (39 - 32) | pdp >> 2;
57+
let vaddr_lo = (pdp & 0x3) << 30 | pd << 21 | pt << 12 | off;
58+
document.getElementById("vaddr").value = to_hex(vaddr_hi) + to_hex(vaddr_lo);
59+
}
60+
</script>
61+
62+
<h1>x86-64 Virtual Address Composer</h1>
63+
64+
<p>
65+
vaddr 0x<input type="text" id="vaddr" size="16" maxlength="16" oninput="decompose()" value="ffff800012345678"></input>
66+
</p>
67+
<hr>
68+
<table>
69+
<tr>
70+
<td>PML4</td>
71+
<td>0x<input type="text" id="pml4" size="2" maxlength="3" oninput="compose()" /></td>
72+
</tr>
73+
<tr>
74+
<td>PDP</td>
75+
<td>0x<input type="text" id="pdp" size="2" maxlength="3" oninput="compose()" /></td>
76+
</tr>
77+
<tr>
78+
<td>PD</td>
79+
<td>0x<input type="text" id="pd" size="2" maxlength="3" oninput="compose()" /></td>
80+
</tr>
81+
<tr>
82+
<td>PT</td>
83+
<td>0x<input type="text" id="pt" size="2" maxlength="3" oninput="compose()" /></td>
84+
</tr>
85+
<tr>
86+
<td>Offset</td>
87+
<td>0x<input type="text" id="offset" size="2" maxlength="3" oninput="compose()" /></td>
88+
</tr>
89+
</table>
90+
</body>
91+
</html>

0 commit comments

Comments
 (0)