Hi,
You should _really_ use register functions instead of inline assembly. Then you can do setjmp/longjmp 100% in C.
I can't get this to build cleanly. Changing the type to register in the .spec, and adding a CONTEXT86 * as the last parameter in the prototype gave me an unresolved external to CALL32_Regs when making the .so. Adding IMPORTS = ntdll to the makefile (as in kernel32, which uses reg functions) got rid of that but now gives me the warning:
/usr/bin/ld: warning: type and size of dynamic symbol `CALL32_Regs' are not defined
Ugh. I guess there is something I need to change in my Makefile to get this to work? Although it builds, it dies, esp is not set correctly in the context structure. dereferencing esp to get the jump return address segfaults.
I'll resubmit when I'm back from travelling, once I understand whats going on.
Cheers, Jon