Gcc中在main前和后执行的函数

gcc在主函数前后运行的函数

逆向的时候我们直到elf文件在start函数中有main函数、init和fini函数,init就是初始化,即在主函数前运行的函数,fini就是在主函数之后执行的函数

那么我们怎么实现呢,windows下我没找到好方法

但是linux下则可以,我们需要用到gcc编译器

实现

gcc支持_attribute_((constructor)) void FunctionName(),这样这个函数就是在主函数运行前的函数,_attribute_((destructor)) void FunctionName{}是在主函数运行之后执行的。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
#include<string.h>
char string[]="123456";

__attribute__((constructor)) void FunctionName(){
printf("helloworld");
}

int main()
{
printf("%s",string);
return 0;
}

效果

利用

我们可以定义全局变量的密钥,然后在init中修改密钥,进而阻碍他人的静态分析