delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2013/06/10/12:50:56

X-Recipient: archive-cygwin AT delorie DOT com
DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:message-id:date:from:reply-to:mime-version:to
:subject:references:in-reply-to:content-type
:content-transfer-encoding; q=dns; s=default; b=ib2BCnqmAaU5lt+3
xkmA2JmjdHjRxvpTLVNsg5nWv12Kuosaooo/0XL6lEzJI5A4mlJbYueCDbu43pxX
m1yrHcnUEqPfcfd0Avr//C/BOZZL2o6Bb2MCaHram2J3wWJ2/3K1p8cqMWNLdEP1
Vfi+K8ypO+v25DlPtAjcs1xf9dM=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:message-id:date:from:reply-to:mime-version:to
:subject:references:in-reply-to:content-type
:content-transfer-encoding; s=default; bh=NmvR3b2GhNLVLcryHN0zjM
NTeoE=; b=KDDmZMM7QcdrmQUnzqdHMlSbE33K6kwO07C8/5ss3unScmnxQD4bGw
lx/sd5CZ1d7R70pnqM32m/4UJEAugRtQHAI8hRv1q08KFYPnxiVhcHtfsQyzRAAt
i3FlU/o+pKxzJQN5dSMTOjOb5+Shrke53k6ptt4zr8eJBBso8Q2bk=
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.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
X-Spam-SWARE-Status: No, score=-3.6 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_NO,RCVD_IN_HOSTKARMA_YE,SPF_PASS,TW_CG autolearn=ham version=3.3.1
Message-ID: <51B603D8.707@cwilson.fastmail.fm>
Date: Mon, 10 Jun 2013 12:50:32 -0400
From: Charles Wilson <cygwin AT cwilson DOT fastmail DOT fm>
Reply-To: The Cygwin Mailing List <cygwin AT cygwin DOT com>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130509 Thunderbird/17.0.6
MIME-Version: 1.0
To: Philip Goetz <philgoetz AT gmail DOT com>,
The Cygwin Mailing List <cygwin AT cygwin DOT com>
Subject: Re: peflags documentation anywhere?
References: <CALqisMm6TC_fPzD=Am_7dK5F6O+N0Qi66WJKCR7n1_Ey9fxV_g AT mail DOT gmail DOT com>
In-Reply-To: <CALqisMm6TC_fPzD=Am_7dK5F6O+N0Qi66WJKCR7n1_Ey9fxV_g@mail.gmail.com>

Please confine questions to the cygwin mailing list.

On 6/9/2013 7:53 PM, Philip Goetz wrote:
> I tried but was unable to find any documentation on peflags other than
> that provided by
>
>     peflags --help
>
> This documentation indicates that I should be able to do something like this:
>
>     $ peflags --bigaddr `which perl`
>
> but instead of getting a zero or one back, I get this, and have no
> idea how to interpret it:
>
>     /usr/bin/perl: coff(0x0326[+bigaddr]) pe(0x8000)

See below.

> The documentation also indicates I should be able to do this, but I cannot:
>
> $ peflags --bigaddr 1 `which perl`
> 1: skipped because nonexistent
> /usr/bin/perl: coff(0x0326[+bigaddr]) pe(0x8000)

I think you need to say "--bigaddr=1" but I could be wrong there.

> Neither does this work:
>
> $ peflags -l1 `which perl`
> /usr/bin/perl: skipped because could not open
>
> I have write permission on /usr/bin/perl .

No explanation here, but your followup seems to indicate it was a cygwin 
version problem.

> Can you point me to some documentation that will explain how to use
> peflags to view and set this --bigaddr bit?

The existing documentation says:

"For each numerical value, if an argument is given, the specified value 
will be overwritten; if no argument is given, the numerical value will 
be displayed in decimal and hexadecimal notation."


The cryptic output "/usr/bin/perl: coff(0x0326[+bigaddr]) pe(0x8000)" 
contains the actual values of the Characteristics fields of the COFF 
File Header, and the PE OptionalHeader records in the on-disk file, 
expressed in hex notation.

*coff_characteristics = pep->ntheaderNN->FileHeader.Characteristics;
*pe_characteristics = pep->ntheaderNN->OptionalHeader.DllCharacteristics;

It's really for debugging. By setting a particular flag true then false, 
and checking the output, you can tell which bit corresponds to that flag 
AND you can verify that the on-disk file actually got changed.

I had this whole big scheme to extensibly express all the flag values in 
readable english, but it was a maintenance nightmare and cgf rightly 
nixed it.

Instead, you get english output for JUST the value(s) you query. If you 
query -d then the hex output is augmented with a string for dynamic base 
-- but nothing else. If you query -l, then the hex output is augmented 
with a string for big address -- but nothing else.  There's a "+" if the 
flag is turned "on", and a "-" if the flag is turned "off".

E.g.

$ peflags -l /usr/bin/perl
/usr/bin/perl: coff(0x0326[+bigaddr]) pe(0x8000)

Means you have bigaddr on.


$ peflags -d /usr/bin/perl
/usr/bin/perl: coff(0x0326) pe(0x8000[-dynamicbase])

Means you have dynamicbase off.

You can combine multiple queries:
$ peflags -d -l /usr/bin/perl
/usr/bin/perl: coff(0x0326[+bigaddr]) pe(0x8000[-dynamicbase])



So, what you do is grep the output for "+bigaddr" -- if that doesn't 
appear when you query -l, then bigaddr is not set.

$ peflags -l /usr/bin/perl | grep '+bigaddr' >/dev/null &&\
	 echo has_bigaddr
has_bigaddr

$ peflags -d /usr/bin/perl | grep '+dynamicbase' >/dev/null &&\
	 echo has_dynamicbase

$

--
Chuck


--
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