修改程序的入口点时未调用全局变量的构造函数

Global variable's constructor has not been invoked while modify program’s entrypoint

本文关键字:调用 全局变量 构造函数 程序 入口 修改      更新时间:2023-10-16

我想将程序的入口点从主函数更改为自定义函数,但在这种情况下似乎无法调用全局变量的构造函数。

像这样的代码:

#include <stdin.h>
#include <stdlib.h>
const char my_interp[] __attribute__((section(".interp"))) = "/lib64/ld-linux-x86-64.so.2";
class A {
public:
A() {
printf("construct An");
}
};
A a;
int main() {
printf("main startn");
}
extern "C" {
int smain() {
printf("smain startn");
exit(0);
}
}

编译命令是这样的:

g++ -g -Wl,-e,smain -o smain smain.cc

使用-e选项进行编译可以替代_start例程,而不是main
当你使用start的替代方法时,你将丢失初始化,这将是_start例程的一部分。

在这种特殊情况下,您将丢失构造函数对A的调用,因为a是全局的。 也不能使用命令行参数。