delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2012/03/06/20:52:15

X-Recipient: archive-cygwin AT delorie DOT com
X-SWARE-Spam-Status: No, hits=0.5 required=5.0 tests=AWL,BAYES_50,EXECUTABLE_URI,RCVD_IN_DNSWL_NONE
X-Spam-Check-By: sourceware.org
X-Mail-Handler: MailHop Outbound by DynDNS
X-Report-Abuse-To: abuse AT dyndns DOT com (see http://www.dyndns.com/services/mailhop/outbound_abuse.html for abuse reporting information)
X-MHO-User: U2FsdGVkX19xXv3oDUn+whJ75N1Hpk+z
Date: Tue, 6 Mar 2012 20:51:49 -0500
From: Christopher Faylor <cgf-use-the-mailinglist-please AT cygwin DOT com>
To: cygwin AT cygwin DOT com
Subject: Re: ldd fails when dll has no execute permissions
Message-ID: <20120307015149.GA8442@ednor.casa.cgf.cx>
Reply-To: cygwin AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
References: <1331078014 DOT 61966 DOT YahooMailNeo AT web36701 DOT mail DOT mud DOT yahoo DOT com>
MIME-Version: 1.0
In-Reply-To: <1331078014.61966.YahooMailNeo@web36701.mail.mud.yahoo.com>
User-Agent: Mutt/1.5.20 (2009-06-14)
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie DOT com AT cygwin DOT com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

On Tue, Mar 06, 2012 at 03:53:34PM -0800, cppjavaperl wrote:
>> On Feb 24 12:56, Corinna Vinschen wrote:
>>
>> On Feb 23 15:03, cppjavaperl wrote:
>> > This was discovered in cygwin-1.7.10-1.
>> > 
>> > If you run 'ldd' against an executable, and the executable has 
>> > dependent DLLs which do *not* have execute permissions, ldd's output
>> > stops when it reaches the offending dependent DLL, and reports no
>> > further information.? ldd does not give an error message, and the exit
>> > code is zero.
>> 
>> DLL's must have execute permissions to be loaded into the process.
>> And that is what ldd does, it starts a process and inspects the 
>> process memory to see what DLLs are loaded via the Win32 debug API.
>> 
>> The problem is that the Win32 loader stops loading as soon as it
>> encounters the non-executable DLL.  So there will simply be no further
>> LOAD_DLL_DEBUG_EVENT.  The next event is an EXIT_PROCESS_DEBUG_EVENT
>> which means to ldd that it collected all DLLs and so it just prints
>> the list of so far collected DLLs.
>> 
>> I don't see how this could be changed to behave differently in this
>> case.
>> 
>> 
>> Corinna
>> 
>
>Sorry I just got back to this topic.  After a little research, I found
>this old link which discusses a similar type tool provided by Microsoft:
>
>http://www.mail-archive.com/delphi AT delphi DOT org DOT nz/msg11393.html
>
>After reading that thread, I downloaded the code from Microsofts ftp site
>here:
>
>ftp://ftp.microsoft.com/softlib/mslfiles/MSJFEB97.EXE
>
>The code looks reasonable, and doesn't appear to be difficult at all to 
>follow.  Running the executable in testing like I did with ldd gives
>better results (IMHO).  It finds the dependent DLLs even if the executable
>bit is not set, and it continues looking for DLLs when it can't find one,
>while noting each DLL that can't be found.
>
>Perhaps it would be good to use this sample code to make modifications
>to ldd, so that it could give more accurate information.  I do not know
>if there are any situations where the Microsoft sample code would 
>provide inaccurate information, and perhaps there are situations I'm not 
>aware of where the existing ldd code would work and the Microsoft code
>would not.  However, it seems to me that the Microsoft code is worth
>looking at -- in order to consider improving ldd.  The Microsoft code
>doesn't appear to me to be restricted in any way that would hinder its use 
>in ldd.
>
>It seems to me that the ideal solution would list all the DLLs, 
>noting which could not be found, and also giving a warning if a DLL
>is not executable.  Perhaps that kind of solution could be achieved by
>modifiying ldd using Microsoft's sample code as an example.

ldd.exe is not going to change.  ldd on linux is also unable to display
dependencies unless the thing being checked has executable permissions.

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

- Raw text -


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