[Wine] __wine_spec_relay_entry_points - need more info please
DieselMachine
wineforum-user at winehq.org
Sun May 9 12:13:56 CDT 2010
Hi, Wine experts.
The program I'm trying to run in Wine crashes with SIGSEGV in the __wine_spec_relay_entry_points. Here is disassembled code that I got from gdb
Code:
Dump of assembler code for function __wine_spec_relay_entry_points:
0x68d97bbd <+0>: nop
0x68d97bbe <+1>: xchg %ax,%ax
0x68d97bc0 <+3>: push %esp
0x68d97bc1 <+4>: push $0x30000
0x68d97bc6 <+9>: call 0x68d98790 <__wine_spec_get_pc_thunk_eax>
0x68d97bcb <+14>: lea 0x17845(%eax),%eax
0x68d97bd1 <+20>: push %eax
0x68d97bd2 <+21>: call *0x4(%eax)
0x68d97bd5 <+24>: ret $0xc
0x68d97bd8 <+27>: push %esp
0x68d97bd9 <+28>: push $0x30001
0x68d97bde <+33>: call 0x68d98790 <__wine_spec_get_pc_thunk_eax>
0x68d97be3 <+38>: lea 0x1782d(%eax),%eax
0x68d97be9 <+44>: push %eax
0x68d97bea <+45>: call *0x4(%eax)
0x68d97bed <+48>: ret $0xc
0x68d97bf0 <+51>: push %esp
0x68d97bf1 <+52>: push $0x10002
0x68d97bf6 <+57>: call 0x68d98790 <__wine_spec_get_pc_thunk_eax>
0x68d97bfb <+62>: lea 0x17815(%eax),%eax
0x68d97c01 <+68>: push %eax
0x68d97c02 <+69>: call *0x4(%eax)
0x68d97c05 <+72>: ret $0x4
0x68d97c08 <+75>: mov %edi,%edi
0x68d97c0a <+77>: push %ebp
0x68d97c0b <+78>: mov %esp,%ebp
0x68d97c0d <+80>: add %ch,%al
0x68d97c0f <+82>: jge 0x68d97c1c <__wine_spec_relay_entry_points+95>
0x68d97c11 <+84>: add %al,(%eax)
0x68d97c13 <+86>: lea 0x177fd(%eax),%eax
0x68d97c19 <+92>: push %eax
0x68d97c1a <+93>: call *0x4(%eax)
0x68d97c1d <+96>: ret $0xc
0x68d97c20 <+99>: push %esp
0x68d97c21 <+100>: push $0x30004
0x68d97c26 <+105>: call 0x68d98790 <__wine_spec_get_pc_thunk_eax>
0x68d97c2b <+110>: lea 0x177e5(%eax),%eax
0x68d97c31 <+116>: push %eax
0x68d97c32 <+117>: call *0x4(%eax)
0x68d97c35 <+120>: ret $0xc
...............................................................................
0x68d985f5 <+2616>: lea 0x0(%esi),%esi
0x68d985f8 <+2619>: push %esp
0x68d985f9 <+2620>: push $0x20096
0x68d985fe <+2625>: call 0x68d98790 <__wine_spec_get_pc_thunk_eax>
0x68d98603 <+2630>: lea 0x16e0d(%eax),%eax
0x68d98609 <+2636>: push %eax
0x68d9860a <+2637>: call *0x4(%eax)
0x68d9860d <+2640>: ret $0x8
End of assembler dump.
Look at the part 0x68d97c08 <+75>-0x68d97c1d <+96> - it is different from all others which look the same. My program crashes here 0x68d97c1a <+93>: call *0x4(%eax) because memory at this address couldn't be read.
So, I have several questions.
1. What is the place where this code is generated? When DLL is loading into the address space?
2. Is the part I mentioned above broken? And how could it be generated like this?
All that I found is the code in output_relay_debug in /wine-1.1.43/tools/winebuild/spec32.c. Is this the source of the generated assembler code? But I didn't see "broken" code here
Thanks for your help.
More information about the wine-users
mailing list