scd*_*dmb 8 c++ assembly constructor destructor elf
我反汇编了一个用C++编写的简单程序,并且有两个函数名.我猜ctor意味着构造函数,dtor意味着析构函数,而word global可能意味着它们创建并销毁全局对象.我无法猜出这个名字.这两个功能有什么作用?
Alo*_*ave 18
静态对象的构造函数和析构函数的地址分别存储在ELF可执行文件的不同部分中.对于构造函数,有一个名为.CTORS的部分,对于析构函数,有一个.DTORS部分.
编译器创建两个辅助函数__do_global_ctors_aux和__do_global_dtors_aux,分别用于调用这些静态对象的构造函数和析构函数.
__do_global_ctors_aux函数只是在.CTORS部分执行步骤,而__do_global_dtors_aux仅对包含程序指定的析构函数的.DTORS部分执行相同的工作.
它们是编译器添加的辅助函数,用于构造和销毁静态对象.
例如
std::vector<int> some_global;
int main() { return 0; }
Run Code Online (Sandbox Code Playgroud)
some_global需要在某个地方实际构建(和破坏),C++保证之前的构造main.实现此目的的一种方法是发出一个之前发生的函数main,它构造全局对象,以及在main销毁它们之后发生的另一个函数.
如果你在std::vector构造函数中插入了一个断点并运行了这个程序,那么堆栈跟踪会显示它正在初始化的函数.