Skip to content

Commit bf513d8

Browse files
committed
Optimizes kernel base address resolver
1 parent 1b7b49b commit bf513d8

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

macros/src/derive.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,21 @@ pub fn mapped_kernel(item: ItemStruct) -> syn::Result<TokenStream> {
3737
impl Default for #ident {
3838
fn default() -> Self {
3939
// Read LSTAR register.
40-
let mut edx = 0u32;
41-
let mut eax = 0u32;
40+
let mut rdx: usize;
41+
let mut rax: usize;
4242

4343
unsafe {
4444
core::arch::asm!(
4545
"rdmsr",
4646
in("ecx") 0xc0000082u32,
47-
out("edx") edx,
48-
out("eax") eax,
47+
out("rdx") rdx, // Use 64-bits version to suppress "mov edx, edx".
48+
out("rax") rax, // Same here.
4949
options(pure, nomem, preserves_flags, nostack)
5050
);
5151
}
5252

5353
// Get base address of the kernel.
54-
let aslr = ((edx as usize) << 32 | (eax as usize)) - 0xffffffff822001c0;
54+
let aslr = ((rdx << 32) | rax) - 0xffffffff822001c0;
5555
let base = aslr + 0xffffffff82200000;
5656

5757
Self(base as *const u8)

0 commit comments

Comments
 (0)