x86/bits64/registers.rs
1use core::arch::asm;
2
3/// Read the RIP register (instruction pointer).
4#[inline(always)]
5pub fn rip() -> u64 {
6 let rip: u64;
7 unsafe {
8 asm!("leaq 0(%rip), {0}", out(reg) rip, options(att_syntax));
9 }
10 rip
11}
12
13/// Read the RSP register (stack pointer register).
14#[inline(always)]
15pub fn rsp() -> u64 {
16 let rsp: u64;
17 unsafe {
18 asm!("mov %rsp, {0}", out(reg) rsp, options(att_syntax));
19 }
20 rsp
21}
22
23/// Read the RBP register (base pointer register).
24#[inline(always)]
25pub fn rbp() -> u64 {
26 let rbp: u64;
27 unsafe {
28 asm!("mov %rbp, {0}", out(reg) rbp, options(att_syntax));
29 }
30 rbp
31}