http://bugs.winehq.org/show_bug.cgi?id=17497
Andrey Turkin andrey.turkin@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |andrey.turkin@gmail.com
--- Comment #10 from Andrey Turkin andrey.turkin@gmail.com 2009-10-21 08:56:40 --- Xfire hooks quite a few functions with 5 bytes long "jmpl" instruction. To do this, it copies instructions from function start to its own memory and sets up a trampoline back into a function; the problem is that Xfire doesn't recognize relative"call" instructions so when such instruction is copied and executed at different address it will lead to invalid code being executed. Unfortunately, since Wine dlls are usually compiled with -fPIC option, function prologue can sometimes look like:
func+0: push ebp func+1: mov ebp, esp func+3: push ebx func+4: call thunk
which, when hooked, will lead to a crash.
Technically this is Xfire hook bug (it should recognize instructions that depends on their address and fix/emulate them accordingly) but on Windows this bug is never triggered.
Stefan Dösinger recently submitted set of patches into Wine and GCC which force GCC to emit specific prologue for some functions hooked by Xfire. So compile very latest GCC (from CVS) and use it to compile Wine (from GIT) and that should fix this bug.