global get_rsp get_rsp: mov rax, rsp ret global get_rip get_rip: pop rax ; do the same thing as 'ret', except with 'jmp' jmp rax ; with the return address still in rax global get_caller get_caller: ; No prelude - don't touch rsp or rbp mov rax, [rbp+8] ret global get_grandcaller get_grandcaller: ; No prelude - don't touch rsp or rbp mov rax, [rbp] mov rax, [rax+8] ret global get_gsbase get_gsbase: rdgsbase rax ret global _halt _halt: hlt jmp _halt