.so:需要找出加载时执行哪个函数

在加载共享库时自动执行的函数中,我们读到:

要在加载或卸载共享库时执行函数,可以使用特定于GCC的属性语法标记构造函数和析构函数:

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

文章__attribute __((构造函数))如何工作? 还提到了.init/.fini

现在,我有一个.so模块(一个共享的对象库,没有源),我想知道哪些函数是在库加载/卸载时执行的。 我尝试nm ,但它看起来像这些属性不显示在输出中。

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

我仍然没有一般的答案,但这是我发现的:

该库有部分.init_array.fini_array 。 (没有.init.ctors ,但是YMMV。)

 ; Segment type: Pure data AREA .init_array, DATA DCD sub_F5C+1 DCB 0 DCB 0 DCB 0 DCB 0 .init_array ends 

所以看起来像sub_F5C()是初始化时调用的唯一函数。 最后的4个零字节实际上是一个零字; +1是一个ARM功能来选择指令集。

更多关于.init_array和其他特殊部分