Big Bummer for running Shrinkered files!

Robert Baruch autophile at starband.net
Mon Dec 17 16:42:53 CST 2001


> What you probably want to do is rewrite EXC_CallHandler in assembler,
> making sure you use the right instructions. This would also address
> the issue with %ebp where we currently depend on the way gcc compiles
> the code, which is not ideal.

Excellent idea!

Something like this should work:

// prologue

push ebp
push ecx
mov ebp, esp
mov ecx, handler

// create a new frame on the stack

push ???           // stack low
push ???           // stack top
push fs:[00000000] // previous frame pointer

// set the new frame

mov fs:[00000000], esp

// call the handler

push dispatcherpush context
push frame
push record
call ecx                // exact instruction required by Shrinker

// eax now contains the return code.
// restore the stack

mov esp, fs:[00000000]  // exact instruction required by Shrinker

// pop off the previous frame to be current.

pop fs:[00000000]

// epilogue

mov esp, ebp
pop ecx
pop ebp
ret

What I'm not certain about is what to put in as the top of the stack and the minimum stack. I also don't know what the purpose of nested_handler is in the arguments, and how it works.

--Rob






More information about the wine-devel mailing list