gpt4 book ai didi

linux - .so : need to find out which function(s) are executed on loading

转载 作者:太空狗 更新时间:2023-10-29 11:22:09 25 4
gpt4 key购买 nike

Automatically executed functions when loading shared libraries我们阅读:

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

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

文章How exactly does __attribute__((constructor)) work?还提到了 .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 功能。

More about .init_array and other special sections

关于linux - .so : need to find out which function(s) are executed on loading,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25383152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com