最近在处理一段代码的时候遇到一个问题:一个数据段的指针需要重新设置,想让这个过程用独立的代码实现,而不在main函数中添加新的代码,这就需要一种能在main函数之前运行的机制,网上查了一下,还真有。
以下内容摘自网络
在 gcc 中
#include <stdio.h>
__attribute((constructor)) void before_main()
{
printf("%s\n",__function__);
}
__attribute((destructor)) void after_main()
{
printf("%s\n",__function__);
}
int main( int argc, char ** argv )
{
printf("%s\n",__function__);
return 0;
}
在 vc 中
#include <stdio.h>
int main( int argc, char ** argv )
{
printf("%s\n",__function__);
return 0;
}
int before_main()
{
printf("%s\n",__function__);
return 0;
}
int after_main()
{
printf("%s\n",__function__);
return 0;
}
typedef int func();
#pragma data_seg(".crt$xiu")
static func * before[] = { before_main };
#pragma data_seg(".crt$xpu")
static func * after[] = { after_main };
#pragma data_seg()
在vc中,使用了预编译指令,将要执行的函数指针设置到.crt$xiu和.crt$xpu数据段就行了。
以下内容摘自网络
在 gcc 中
#include <stdio.h>
__attribute((constructor)) void before_main()
{
printf("%s\n",__function__);
}
__attribute((destructor)) void after_main()
{
printf("%s\n",__function__);
}
int main( int argc, char ** argv )
{
printf("%s\n",__function__);
return 0;
}
在 vc 中
#include <stdio.h>
int main( int argc, char ** argv )
{
printf("%s\n",__function__);
return 0;
}
int before_main()
{
printf("%s\n",__function__);
return 0;
}
int after_main()
{
printf("%s\n",__function__);
return 0;
}
typedef int func();
#pragma data_seg(".crt$xiu")
static func * before[] = { before_main };
#pragma data_seg(".crt$xpu")
static func * after[] = { after_main };
#pragma data_seg()
在vc中,使用了预编译指令,将要执行的函数指针设置到.crt$xiu和.crt$xpu数据段就行了。