我怎样才能在我的程序中获得_GLOBAL_OFFSET_TABLE_地址?
问题描述:
我想在我的程序中得到_GLOBAL_OFFSET_TABLE_的地址。一种方法是在Linux中使用nm命令,可能会将输出重定向到一个文件并解析该文件以获取_GLOBAL_OFFSET_TABLE_的地址。但是,这种方法似乎效率很低。什么是更有效的方法呢?我怎样才能在我的程序中获得_GLOBAL_OFFSET_TABLE_地址?
答
这似乎工作:
#include <stdio.h>
extern void *_GLOBAL_OFFSET_TABLE_;
int main()
{
printf("_GLOBAL_OFFSET_TABLE = %p\n", &_GLOBAL_OFFSET_TABLE_);
return 0;
}
它提供:
$ ./test
_GLOBAL_OFFSET_TABLE = 0x6006d0
然而,nm
认为不同:
$ nm test | fgrep GLOBAL
0000000000600868 d _GLOBAL_OFFSET_TABLE_
誓言,这是惊人的! – MetallicPriest 2012-03-13 15:28:01
@MetallicPriest也许你可以告诉我*为什么'nm'给出了不同的值? – trojanfoe 2012-03-13 15:29:43
好吧,当我检查它时,我会让你知道:)。 – MetallicPriest 2012-03-13 16:22:04