让我们考虑这个例子:
glob.c 源代码链接到名为 glob.so 的共享库。从 main.c 链接到 glob.so 我想在运行时读取“global_offset”变量的值(我认为在编译时不可能这样做)。我的编译器是 gcc 4.8.5 MinGW。
glob.c:
int glob_shared_var = 69;
主.c:
size_t global_offset = // read shared library load offset
size_t relative_glob_shared_var_offset = // read offset value from e.g. nm glob.a symbols table
printf("glob_shared_var value: %d \n", *(int *)(global_offset + relative_glob_shared_var_offset));
控制台输出:
glob_shared_var value: 69