什么是特征?
每一种编程语言或者编译器所编译出来的程序都有其独特的特征,其通常表现在:入口点,程序区段,加载模块等。下面就各种语言和编译器所编译出来的程序进行分析。
VC6
使用OllyDbg查看
可以看到其入口点代码为
1 | push ebp |
使用Exeinfope查看区段情况

总结
在入口点代码上,VC6程序使用了固定的两行代码,其调用的API也是相同的在程序区段上,VC6程序的区段为固定的.text,.rdata,.data,.rsrc
VS2008&VS2013
使用OllyDbg查看
2008:

2013:

其入口点代码为
1 | call xxx ;调用模块相同 |
使用Exeinfope查看区段情况
2008:

2013:

相较于VC6多了一个.reloc段
总结
VS2008&VS2013的入口点代码特征为先call后jmp,区段相较vc6多一个.reloc段
易语言独立(非独立)编译程序
使用OllyDbg查看入口点代码非独立编译:
第一个call作用我感觉是进入主函数(main)的意思,后面则定义了几个字符串进入到0x40108E后,0x40109E开始调用krnln.fnr库
易语言程序在非独立编译后,会生成两个运行所需的依赖库分别为
krnln.fnr和krnln.fne
还有个很独特的特征,就是在每次call完之后,都会返回到一个核心函数中
在我理解看来,这个操作和C语言中调用库函数会触发延迟绑定重定向到真正函数的操作差不多
使用Exeinfope查看区段情况
可以看到区段情况和VC6相同
总结
从入口点代码特征上看,易语言程序先是call到主函数,后面则定义了几个字符串从程序执行流程代码上看,每次调用函数,会触发重定向操作从区段上看,和VC6相同