Message du 18/03/04 00:51 De : Marcus Meissner A : Christian Costa Copie à : wined Objet : Re: PLT pointer destroyed problem when loading IR32_32.DLL (Indeo codec) On Wed, Mar 17, 2004 at 10:37:01PM +0000, Christian Costa wrote:
Hi,
When executing the DllMain of the native IR32_32.DLL (VFW), Wine crashes. After some investigations, I found that a part of the code uses the EBX register at one point without saving and restore it afterwards. Since this register contains the PLT pointer for standard unix functions like libc ones, this does not take a long time for Wine to crashing. I tested with the ugly hack attached that saves and restores the EBX register between the call to DllMain and that fixed the problem and the DLL works fine then.
This might happen.
That ebx can be scrapped?
Your fix is not really ok, you must not modify the stackpointer in asm statements.
Try using: __asm__ __volatile__ ("":::"ebx");
after entry(), which tells the compiler that ebx has been scrapped.
Thanks for this! :-)
Christian
Hi,
When executing the DllMain of the native IR32_32.DLL (VFW), Wine crashes. After some investigations, I found that a part of the code uses the EBX register at one point without saving and restore it afterwards. Since this register contains the PLT pointer for standard unix functions like libc ones, this does not take a long time for Wine to crashing. I tested with the ugly hack attached that saves and restores the EBX register between the call to DllMain and that fixed the problem and the DLL works fine then.
This might happen.
That ebx can be scrapped?
Yes. I have seen such a case too, however in a windows WDM driver.
However, the Win32 ABI specifies that the registers should be saved across a function call, so this is a bug in IR32_32.DLL I think.
googling gives something like:
http://www.codeproject.com/cpp/calling_conventions_demystified.asp?print=tru... http://weblogs.asp.net/oldnewthing/archive/2004/01/08/48616.aspx
Ciao, Marcus