我怎样才能在我的程序中获得_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_ 
+0

誓言,这是惊人的! – MetallicPriest 2012-03-13 15:28:01

+0

@MetallicPriest也许你可以告诉我*为什么'nm'给出了不同的值? – trojanfoe 2012-03-13 15:29:43

+0

好吧,当我检查它时,我会让你知道:)。 – MetallicPriest 2012-03-13 16:22:04