C++ dlopen';时是否运行静态初始化(和/或其他)代码;惯性导航与制导?
当您C++ dlopen';时是否运行静态初始化(和/或其他)代码;惯性导航与制导?,c++,dlopen,shared-objects,dynamic-loading,static-initialization,C++,Dlopen,Shared Objects,Dynamic Loading,Static Initialization,当您dlopen()一个共享对象时,是否有一种机制可以让DLL中的代码在不被显式调用的情况下执行?具体而言,C++(代码)> DLUN()/调用方的全局/静态静态初始化代码可能不知道。我很确定答案应该是“是”,但我不记得是什么机制导致了这种情况,以及如何利用它来运行任意代码。是:dlopen尊重一种ELF二进制格式机制,用于在加载时运行代码 实际上有两种机制: 旧版本使用特殊的.init和.finis节,其中包含用于调用dlopen和dlclose的函数指针数组。由于节在运行时可能不存在,因此
dlopen()
一个共享对象时,是否有一种机制可以让DLL中的代码在不被显式调用的情况下执行?具体而言,C++(代码)> DLUN()/<代码>调用方的全局/静态静态初始化代码可能不知道。我很确定答案应该是“是”,但我不记得是什么机制导致了这种情况,以及如何利用它来运行任意代码。是:dlopen
尊重一种ELF二进制格式机制,用于在加载时运行代码
实际上有两种机制:
- 旧版本使用特殊的
和.init
s节,其中包含用于调用.fini
和dlopen
的函数指针数组。由于节在运行时可能不存在,因此还有指向相应节的dlclose
和DT_INIT
动态标记DT_FINI
- 较新的机制是
和.init\u数组
以及相应的.fini\u数组
,DT\u init\u数组
,DT\u init\u数组
动态标记DT\u fini\u数组
转到源代码级别,如果您使用
\uuuuu attribute\uuuu((构造函数))
装饰C函数,编译器将使用这两种机制中的一种,使其在对象为“代码> DLOpen< /COD> EDE时运行。对于需要动态初始化的全局C++对象的构造代码,同样如此。布瑞恩:我认为您可以回答这个问题……虽然-如果我不使用GCC怎么办?e、 g.叮当声还是国际刑事法院?