获取VC++真的入口函数,也是OEP的位置
链接:https://www.bilibili.com/video/BV1MJeueDEQg/?spm_id_from=333.788.recommend_more_video.0&vd_source=ed7e1573fed2129df22621f1fcf7fceb在咱们逆向过程中,经常遇到OEP这个词,也就是程序入口点。其实在C/C++里面,OEP并不是main函数,有另外一个个函数mainCRTStartUP,那么究竟做了什么事情呢?这就是我这个视频讲述的东西。如果有更好的理解和没有讲到的东西,大家可以跟帖子,咱们一起完善。 vc编译生成的exe文件,双击运行后,建立新进程的地址空间,然后主线程开始运行。
mainCRTStartup() ANSI + 控制台程序
wmainCRTStartup() UNICODE + 控制台程序
WinMainCRTStartup() ANSI + GUI程序
wWinMainCRTStartup() UNICODE + GUI程序
程序一进来通过jmp指令来到前面列出的四个启动函数,它们再调用最终的启动器_tmainCRTStartup。
这个启动器干了几件大事,分别是,使用GetStartupInfo获取进程启动信息,然后使用_inititem初始化全局变量和对象,最后调用我们main、wmain、WinMain、wWinMain进入我们的程序。。。
所以,从编程语言的角度来说,main函数就是入口函数,这一点毋庸置疑。至于mainCRTStartup,则是VC++这个编译器额外增加的包含C/C++运行时库初始化操作在内的封装函数,可以算可执行文件的入口函数。 感谢分享 感谢分享 跟着大佬学逆向 对函数解剖很深刻,向大佬学习{:1_893:} 感谢大佬分享
很好,厉害 qq465881818 发表于 2024-8-22 14:40
vc编译生成的exe文件,双击运行后,建立新进程的地址空间,然后主线程开始运行。
坛友,说的非常明白,逆向角度的OEP和编程角度的OEP确实是两个不同的概念。给坛友点赞! 感谢分享
页:
[1]
2