【发布时间】:2013-11-26 13:41:57
【问题描述】:
我用 C 语言开发了很多年,现在才发现程序可以在 main() 函数之前执行代码。 这是一个代码示例
int generateNum(){
// Some malicious code here...
return 5;
}
static int someArray[] = {generateNum(),generateNum()}
int main(){
// Some code here...
}
函数generateNum()在main()之前被调用了两次。
我的问题是
- 谁调用 generateNum()?我知道在 Windows 上是 crtexe()
- 此行为是否在不同平台上标准化:Windows/Linux/Android/iOS?
- 如何获得有关此行为的更多信息?我想在谷歌搜索,但我不知道如何描述它。
- 我可以在 generateNum() 中做任何我想做的事情吗?我的意思是,我可以调用 malloc() 吗? fopen() 和 fwrite() 呢?我可以打开一个套接字并通过 UDP 发送信息吗?最终我可以滥用这个函数,甚至从中调用 main() :-)
【问题讨论】:
-
静态对象在进入 main 之前被初始化,按照标准(据我所知是 C++ 标准,但我认为 C 也是)。
-
事实上,在进入 main 之前,可以使用虚拟静态函数从其构造函数中调用某些代码。
-
需要注意的是,您不知道执行初始化的顺序。它甚至可以在同一台机器上的编译之间改变,具体取决于链接顺序、目标文件布局和月相。
-
“C/C++”不是一种语言。 -1 表示makes no sense 的虚构问题。
-
标签: c++