www.delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin-apps/2002/04/29/12:02:31

Mailing-List: contact cygwin-apps-help AT cygwin DOT com; run by ezmlm
Sender: cygwin-apps-owner AT cygwin DOT com
List-Subscribe: <mailto:cygwin-apps-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin-apps/>
List-Post: <mailto:cygwin-apps AT cygwin DOT com>
List-Help: <mailto:cygwin-apps-help AT cygwin DOT com>, <http://sources.redhat.com/lists.html#faqs>
Mail-Followup-To: cygwin-apps AT cygwin DOT com
Delivered-To: mailing list cygwin-apps AT cygwin DOT com
From: "Ralf Habacker" <Ralf DOT Habacker AT freenet DOT de>
To: "Robert Collins" <robert DOT collins AT itdomain DOT com DOT au>
Cc: "Kde-Cygwin" <kde-cygwin AT kde DOT org>,
"Binutils" <binutils AT sources DOT redhat DOT com>,
"Cygwin-Apps" <cygwin-apps AT cygwin DOT com>
Subject: RE: ordinal linking for cygwin ld
Date: Mon, 29 Apr 2002 18:00:13 +0200
Message-ID: <004501c1ef96$f2a53250$d36707d5@BRAMSCHE>
MIME-Version: 1.0
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400
In-Reply-To: <020501c1ef86$f8bc7140$0200a8c0@lifelesswks>
Importance: Normal

> a self
> > written rebind app and got a problem.
> >
> > rebind does only patch the first IAT entry, if the dll is created with
> ld. The
> > others are set to zero ????
> >
> > Rebinding for example the cygwin1.dll to some natvie windows apps
> works, so this
> > seems to be an ld incompatiblity.
> >
> > Does anyone have got experience in such binding stuff ?
>
> No, but perhaps it's the auto-import duplicates that cause the problem?

No. I have checked this by a dll without vars. See below:

The Import Tables (interpreted .idata section contents)
 vma:            Hint    Time      Forward  DLL       First
                 Table   Stamp     Chain    Name      Thunk
 00004000       00004054 00000000 00000000 0000420c 00004074

        DLL Name: dll.dll
        vma:  Hint/Ord Member-Name
        40dc        0  printfunc0000__1Av
        40f4        1  printfunc0001__1Av
        410c        2  printfunc0002__1Av
        4124        3  printfunc0003__1Av
        413c        4  printfunc0004__1Av

 00004014       00004070 00000000 00000000 00004230 000040a8

        DLL Name: cygwin1.dll
        vma:  Hint/Ord Member-Name
        4154       26  __main
        4160      581  calloc
        416c      634  cygwin_internal
        4180      652  dll_crt0__FP11per_process
        419c      722  free
        41a4      876  malloc
        41b0     1006  realloc
        The Import Address Table is identical

 00004028       00004094 00000000 00000000 00004248 000040cc

        DLL Name: KERNEL32.dll
        vma:  Hint/Ord Member-Name
        41bc      248  GetCurrentProcess
        41d0      296  GetModuleHandleA
        41e4      661  TerminateProcess
        The Import Address Table is identical

--------------------------------------------------------------------------------
------
rebinding client.exe
--------------------------------------------------------------------------------
------
rebind client.exe ./
rebind - message: client.exe dll.dll Module import is starting.
rebind - message: client.exe dll.dll Procedure import is starting.
printfunc0000__1Av
rebind - message: client.exe dll.dll Procedure import failed. printfunc0000__1Av

He has patched, which you can see below, but break after this.

rebind - message: client.exe cygwin1.dll Module import failed. -> not found.
okay
rebind - message: client.exe KERNEL32.dll Module import failed. -> not found.
okay
rebind - message: client.exe (null) Image modified.
BIND: Details of binding client.exe
    Import from dll.dll [6]
                    ^^^^^^^^^
    Import from cygwin1.dll [0]
    Import from KERNEL32.dll [0]
rebind 2
--------------------------------------------------------------------------------
------
The Import Tables (interpreted .idata section contents)

 vma:            Hint    Time      Forward  DLL       First
                 Table   Stamp     Chain    Name      Thunk
 00004000       00004054 ffffffff ffffffff 0000420c 0004074

        DLL Name: dll.dll
        vma:  Hint/Ord Member-Name
        40dc        0  printfunc0000__1Av       0001
        40f4        1  printfunc0001__1Av       0004
        410c        2  printfunc0002__1Av       0000
        4124        3  printfunc0003__1Av       8000
        413c        4  printfunc0004__1Av       0400
--------------------------------------------------------------------------------
------
rebinding cygwin1.dll
--------------------------------------------------------------------------------
------
$ rebind ./client.exe /bin
rebind client.exe c:\programme\cygwin\bin
rebind - message: client.exe dll.dll Module import is starting.
rebind - message: client.exe dll.dll Procedure import is starting.
printfunc0000__1Av
rebind - message: client.exe dll.dll Procedure import failed. printfunc0000__1Av
rebind - message: client.exe cygwin1.dll Module import is starting.
rebind - message: client.exe c:\programme\cygwin\bin\cygwin1.dll Procedure
import is starting. __main
rebind - message: client.exe c:\programme\cygwin\bin\cygwin1.dll Procedure
import failed. __main
rebind - message: client.exe KERNEL32.dll Module import failed.
rebind - message: client.exe (null) Image modified.
BIND: Details of binding client.exe
    Import from dll.dll [6]
    Import from cygwin1.dll [6]
    Import from KERNEL32.dll [0]
--------------------------------------------------------------------------------
------

 00004014       00004070 ffffffff ffffffff 00004230 000040a8

        DLL Name: cygwin1.dll
        vma:  Hint/Ord Member-Name
        4154       26  __main   61004308
        4160      581  calloc   0000
        416c      634  cygwin_internal  0000
        4180      652  dll_crt0__FP11per_process        0000
        419c      722  free     0000
        41a4      876  malloc   0000
        41b0     1006  realloc  0000
--------------------------------------------------------------------------------
------
                                ^^^^^^
Do you see this ? The first is set correct, the other set to zero.

The masin difference I see currently are differences in the data directory
relating entry c, which is defined on native dll's and not for ld builded dll#s

ChkRes2K.dll
The Data Directory
Entry 0 00000000 00000000 Export Directory [.edata (or where ever we found it)]
Entry 1 00013fe0 0000008c Import Directory [parts of .idata]
Entry 2 0001b000 00003a00 Resource Directory [.rsrc]
Entry 3 00000000 00000000 Exception Directory [.pdata]
Entry 4 00000000 00000000 Security Directory
Entry 5 00000000 00000000 Base Relocation Directory [.reloc]
Entry 6 00000000 00000000 Debug Directory
Entry 7 00000000 00000000 Description Directory
Entry 8 00000000 00000000 Special Directory
Entry 9 00000000 00000000 Thread Storage Directory [.tls]
Entry a 00000000 00000000 Load Configuration Directory
Entry b 00000000 00000000 Bound Import Directory
Entry c 00011000 00000394 Import Address Table Directory
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Entry d 00000000 00000000 Delay Import Directory
Entry e 00000000 00000000 Reserved
Entry f 00000000 00000000 Reserved


my client.exe

The Data Directory
Entry 0 00000000 00000000 Export Directory [.edata (or where ever we found it)]
Entry 1 00004000 00000258 Import Directory [parts of .idata]
Entry 2 00000000 00000000 Resource Directory [.rsrc]
Entry 3 00000000 00000000 Exception Directory [.pdata]
Entry 4 00000000 00000000 Security Directory
Entry 5 00000000 00000000 Base Relocation Directory [.reloc]
Entry 6 00000000 00000000 Debug Directory
Entry 7 00000000 00000000 Description Directory
Entry 8 00000000 00000000 Special Directory
Entry 9 00000000 00000000 Thread Storage Directory [.tls]
Entry a 00000000 00000000 Load Configuration Directory
Entry b 00000000 00000000 Bound Import Directory
Entry c 00000000 00000000 Import Address Table Directory
         ^^^^^^^^^^^^^^
Entry d 00000000 00000000 Delay Import Directory
Entry e 00000000 00000000 Reserved
Entry f 00000000 00000000 Reserved


after rebinding client.exe

The Data Directory
Entry 0 00000000 00000000 Export Directory [.edata (or where ever we found it)]
Entry 1 00004000 00000258 Import Directory [parts of .idata]
Entry 2 00000000 00000000 Resource Directory [.rsrc]
Entry 3 00000000 00000000 Exception Directory [.pdata]
Entry 4 00000000 00000000 Security Directory
Entry 5 00000000 00000000 Base Relocation Directory [.reloc]
Entry 6 00000000 00000000 Debug Directory
Entry 7 00000000 00000000 Description Directory
Entry 8 00000000 00000000 Special Directory
Entry 9 00000000 00000000 Thread Storage Directory [.tls]
Entry a 00000000 00000000 Load Configuration Directory
Entry b 00000268 00000044 Bound Import Directory
           ^^^^^^^^^^^^^^^^
Entry c 00000000 00000000 Import Address Table Directory
Entry d 00000000 00000000 Delay Import Directory
Entry e 00000000 00000000 Reserved
Entry f 00000000 00000000 Reserved

Ralf


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019