[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