.so: 需要找出在加载时执行的函数(或函数)。

9 浏览
0 Comments

.so: 需要找出在加载时执行的函数(或函数)。

在加载共享库时自动执行的函数

当加载或卸载共享库时,您可以使用GCC特定的属性语法来标记构造函数和析构函数:

__attribute__((constructor)) void init(void) { ... }
__attribute__((destructor))  void fini(void) { ... }

文章"How exactly does __attribute__((constructor)) work?"也提到了.init/.fini。

现在,我有一个.so模块(一个共享对象库,没有源代码),我想知道在加载/卸载库时执行了哪个函数。我尝试了nm,但似乎这些属性在输出中没有显示。

那么,我如何知道在加载或卸载共享库时自动执行哪个函数?

0
0 Comments

在这段内容中,我们可以看到库中有一个名为.init_array的部分,其中包含一个函数sub_F5C()。根据内容中的描述,这个函数是在初始化时被调用的唯一函数。通过观察代码中的4个零字节,我们可以看出这实际上是一个零双字;+1是ARM的一个特性,用于选择指令集。

根据这些信息,我们可以得出问题的原因是在加载库时无法确定哪些函数会被执行。解决这个问题的方法是查看库中特定的部分,如.init_array,以找出在加载时将被执行的函数。

更多关于.init_array和其他特殊部分的信息可以在这里找到:http://www.sco.com/developers/gabi/latest/ch4.sheader.html#special_sections

0