12345678910111213141516171819202122232425 |
- .globl setjmp
- setjmp:
- mov (%esp), %ecx // get return EIP
- mov 4(%esp), %eax // get jmp_buf
- mov %ecx, (%eax)
- mov %esp, 4(%eax)
- mov %ebp, 8(%eax)
- mov %ebx, 12(%eax)
- mov %esi, 16(%eax)
- mov %edi, 20(%eax)
- xor %eax, %eax
- ret
- .globl longjmp
- longjmp:
- mov 8(%esp), %eax // get return value
- mov 4(%esp), %ecx // get jmp_buf
- mov 20(%ecx), %edi
- mov 16(%ecx), %esi
- mov 12(%ecx), %ebx
- mov 8(%ecx), %ebp
- mov 4(%ecx), %esp
- mov (%ecx), %ecx // get saved EIP
- mov %ecx, (%esp) // and store it on the stack
- ret
|