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}