This is the mail archive of the
cygwin@sourceware.cygnus.com
mailing list for the Cygwin project.
Re: text/data segments in cygnus executables
- To: "Read, Gordon" <GRead@Broner.co.uk>
- Subject: Re: text/data segments in cygnus executables
- From: Fergus Henderson <fjh@cs.mu.OZ.AU>
- Date: Fri, 6 Aug 1999 04:00:14 +1000
- Cc: "'cygwin@sourceware.cygnus.com'" <cygwin@sourceware.cygnus.com>
- References: <BAB9541AAA7FD211844A00E0290C074C056BE5@BGPC66>
On 05-Aug-1999, Read, Gordon <GRead@Broner.co.uk> wrote:
> I need to find out the addresses of the the various segments in the
> currently running process (i.e. the start address of the text segment, data
> segment and so on), these are the values reported by "size -A program.exe".
>
> How do I do this from within a C program compiled using gcc under cygnus?
The start and end of the data and bss segments are contained in the
symbols __data_start__, __data_end__, __bss_start__, and __bss_end__.
I think there are other symbols like these; check the linker script for
details. (I think there's an option to `ld' to get it to dump the linker
script, but if not, you could try using strace to see what files `ld' reads,
or looking at the `ld' source code.)
You can access these symbols from C program using declarations
like the following:
extern char _data_start__[];
extern char _data_end__[];
extern char _bss_start__[];
extern char _bss_end__[];
int main() {
printf("data start = %p\n", (void *) _data_start__);
}
For an example of their use, check the definitions of DATASTART and DATAEND
for CYGWIN in the file config.h from gc.tar.gz available at
http://reality.sgi.com/boehm/gc.html.
-
Fergus Henderson <fjh@cs.mu.oz.au> | "I have always known that the pursuit
WWW: <http://www.cs.mu.oz.au/~fjh> | of excellence is a lethal habit"
PGP: finger fjh@128.250.37.3 | -- the last words of T. S. Garp.
--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe@sourceware.cygnus.com