blitz_ex.linux.x86.s 532 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. format ELF
  2. public _bbExEnter
  3. public _bbExThrow
  4. section "code"
  5. ;0[esp]=ret
  6. ;4[esp]=state block
  7. _bbExEnter:
  8. mov edx,[esp+4]
  9. ;
  10. mov [edx+0],ebx
  11. mov [edx+4],esi
  12. mov [edx+8],edi
  13. mov [edx+12],ebp
  14. ;
  15. mov ecx,[esp]
  16. mov [edx+16],esp
  17. mov [edx+20],ecx
  18. ;
  19. xor eax,eax
  20. ret
  21. ;0[esp]=ret
  22. ;4[esp]=state block
  23. ;8[esp]=throw value
  24. _bbExThrow:
  25. mov edx,[esp+4]
  26. mov eax,[esp+8]
  27. ;
  28. mov ebp,[edx+12]
  29. mov edi,[edx+8]
  30. mov esi,[edx+4]
  31. mov ebx,[edx+0]
  32. ;
  33. mov ecx,[edx+20]
  34. mov esp,[edx+16]
  35. add esp,4
  36. jmp ecx