12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- [bits 32]
- %define MJB_BX 0
- %define MJB_SI 1
- %define MJB_DI 2
- %define MJB_BP 3
- %define MJB_SP 4
- %define MJB_PC 5
- %define MJB_RSP MJB_SP
- %define MJB_SIZE 24
- %define LINKAGE 4
- %define PCOFF 0
- %define PTR_SIZE 4
- %define PARMS LINKAGE
- %define JMPBUF PARMS
- %define JBUF PARMS
- %define VAL JBUF + PTR_SIZE
- EXPORT __mylongjmp
- mov ecx, [esp + JBUF]
- mov eax, [esp + VAL]
- mov edx, [ecx + MJB_PC*4]
- mov ebx, [ecx + MJB_BX*4]
- mov esi, [ecx + MJB_SI*4]
- mov edi, [ecx + MJB_DI*4]
- mov ebp, [ecx + MJB_BP*4]
- mov esp, [ecx + MJB_SP*4]
- jmp edx
- EXPORT __mysetjmp
- mov eax, [esp + JMPBUF]
- mov [eax + MJB_BX*4], ebx
- mov [eax + MJB_SI*4], esi
- mov [eax + MJB_DI*4], edi
- lea ecx, [esp + JMPBUF]
- mov [eax + MJB_SP*4], ecx
- mov ecx, [esp + PCOFF]
- mov [eax + MJB_PC*4], ecx
- mov [eax + MJB_BP*4], ebp
- xor eax, eax
- ret
|