我有一个包含符号的大二进制文件,我可以在 `nm` 或 `objdump` 中看到这个符号。
我知道这个符号被使用了,否则链接器不会把它包含进去(更准确地说,我知道同一源文件中的某个符号被使用了)。
我正在尝试找到它具体是如何被使用的。
如果引用是通过函数(例如函数调用函数、函数使用全局变量)实现的,我可以使用 `objdump -rd` 来反汇编文件并找到引用点。
但如果是通过变量(例如初始化为指向某个变量的全局指针)来引用,那么反汇编就无法展示它。
我没能找到任何方法来解决这个问题。
下面是一个演示它的例子。在这个例子中,很明显谁使用了 `x`,但我不知道如何检查生成的二进制文件并找到它。
我知道这个符号被使用了,否则链接器不会把它包含进去(更准确地说,我知道同一源文件中的某个符号被使用了)。
我正在尝试找到它具体是如何被使用的。
如果引用是通过函数(例如函数调用函数、函数使用全局变量)实现的,我可以使用 `objdump -rd` 来反汇编文件并找到引用点。
但如果是通过变量(例如初始化为指向某个变量的全局指针)来引用,那么反汇编就无法展示它。
我没能找到任何方法来解决这个问题。
下面是一个演示它的例子。在这个例子中,很明显谁使用了 `x`,但我不知道如何检查生成的二进制文件并找到它。
// x.c
int x = 3;
// main.c
extern int x;
static int *y = &x;
int main() {
return *y;
}
// Build process
gcc -o x.o -c x.c
ar r libx.a x.o
gcc -o main.o -c main.c
gcc -o main main.o -L. -lx