This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
Ask help for the value of _GLOBAL_OFFSET_TABLE_
- From: JL <abcd dot bpmf at gmail dot com>
- To: libc-alpha at sources dot redhat dot com
- Date: Wed, 19 Jan 2005 12:03:29 +0800
- Subject: Ask help for the value of _GLOBAL_OFFSET_TABLE_
- Reply-to: JL <abcd dot bpmf at gmail dot com>
Hi,
I read the function elf_machine_dynamic() in sysdeps/i386/dl-machine.h
. so I want to use this function in my prograom to get the
information of _GLOBAL_OFFSET_TABLE_ .
first, I want to get the value of symbol _DYNAMIC .the program as below
=======================
/*test.c*/
#include <elf.h>
#include <stdio.h>
static inline Elf32_Addr __attribute__ ((unused, const))
elf_machine_dynamic (void)
{
extern const Elf32_Addr _GLOBAL_OFFSET_TABLE_[]
__attribute__ ((visibility ("hidden")));
return _GLOBAL_OFFSET_TABLE_[0];
}
int main()
{
printf ("0x%x\n", elf_machine_dynamic());
}
=======================
I use gcc compile it , when I run it , Segmentation fault (core dumped).
second, I want to get the value of _GLOBAL_OFFSET_TABLE, so I modify
the statement "return _GLOBAL_OFFSET_TABLE_[0];" to "return
_GLOBAL_OFFSET_TABLE_;" in the function elf_machine_dynamic .
=======================
#include <elf.h>
#include <stdio.h>
static inline Elf32_Addr __attribute__ ((unused, const))
elf_machine_dynamic (void)
{
extern const Elf32_Addr _GLOBAL_OFFSET_TABLE_[]
__attribute__ ((visibility ("hidden")));
return _GLOBAL_OFFSET_TABLE_;
}
int main()
{
printf ("0x%x\n", elf_machine_dynamic());
}
=======================
[tmp]$ gcc test.c
test.c: In function `elf_machine_dynamic':
test.c:8: warning: return makes integer from pointer without a cast
[tmp]$ ./a.out
0x11d3
but
[tmp]$ readelf -s a.out | grep _GLOBAL
63: 08049578 0 OBJECT GLOBAL DEFAULT 21 _GLOBAL_OFFSET_TABLE_
the value of _GLOBAL_OFFSET_TABLE_ is 08049578!
who can tell me where I made a mistake? thanks in advance.
David
1.19