__do_global_dtors_aux和__do_global_ctors_aux

| 我反汇编了一个用C ++编写的简单程序,其中有两个函数名。我猜ctor表示构造函数,而dtor表示析构函数,而global一词可能意味着它们创建和销毁了全局对象。我猜不出aux这个名字。这两个功能做什么?     
已邀请:
        静态对象的构造函数和析构函数的地址分别存储在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; }
some_global
需要在某处实际构造(和销毁),C ++保证构造要在
main
之前进行。一种实现方法是发出一个在emit2ѭ之前发生的函数,该函数构造全局对象,而另一个函数在
main
之后发生以销毁它们。 如果您在
std::vector
构造函数中插入了一个断点并运行了该程序,则堆栈跟踪将向您显示从中对其进行初始化的函数。     

要回复问题请先登录注册