12345678910111213141516171819202122232425262728293031323334353637383940 |
- [bits 64]
- %define MJB_RBX 0
- %define MJB_RBP 1
- %define MJB_R12 2
- %define MJB_R13 3
- %define MJB_R14 4
- %define MJB_R15 5
- %define MJB_RSP 6
- %define MJB_PC 7
- %define MJB_SIZE (8*8)
- EXPORT __mylongjmp
- mov rbx, [rdi + MJB_RBX * 8]
- mov rbp, [rdi + MJB_RBP * 8]
- mov r12, [rdi + MJB_R12 * 8]
- mov r13, [rdi + MJB_R13 * 8]
- mov r14, [rdi + MJB_R14 * 8]
- mov r15, [rdi + MJB_R15 * 8]
- test esi, esi
- mov eax, 1
- cmove esi, eax
- mov eax, esi
- mov rdx, [rdi + MJB_PC * 8]
- mov rsp, [rdi + MJB_RSP * 8]
- jmp rdx
- EXPORT __mysetjmp
- mov [rdi + MJB_RBX * 8], rbx
- mov [rdi + MJB_RBP * 8], rbp
- mov [rdi + MJB_R12 * 8], r12
- mov [rdi + MJB_R13 * 8], r13
- mov [rdi + MJB_R14 * 8], r14
- mov [rdi + MJB_R15 * 8], r15
- lea rdx, [rsp + 8]
- mov [rdi + MJB_RSP * 8], rdx
- mov rax, [rsp]
- mov [rdi + MJB_PC * 8], rax
- mov eax, 0
- ret
|