zmbilx 发表于 2024-8-22 11:37

获取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,那么究竟做了什么事情呢?这就是我这个视频讲述的东西。如果有更好的理解和没有讲到的东西,大家可以跟帖子,咱们一起完善。

qq465881818 发表于 2024-8-22 14:40

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++运行时库初始化操作在内的封装函数,可以算可执行文件的入口函数。

cnmingxing 发表于 2024-8-22 16:42

感谢分享

AuroraVerses 发表于 2024-8-22 18:17

感谢分享

justwz 发表于 2024-8-22 21:02

跟着大佬学逆向

ycb510725 发表于 2024-8-23 09:35

对函数解剖很深刻,向大佬学习{:1_893:}

gusong125 发表于 2024-8-23 21:15

感谢大佬分享

521423 发表于 2024-8-24 11:44

很好,厉害

zmbilx 发表于 2024-8-26 17:00

qq465881818 发表于 2024-8-22 14:40
vc编译生成的exe文件,双击运行后,建立新进程的地址空间,然后主线程开始运行。




坛友,说的非常明白,逆向角度的OEP和编程角度的OEP确实是两个不同的概念。给坛友点赞!

AuroraVerses 发表于 2024-9-2 22:01

感谢分享
页: [1] 2
查看完整版本: 获取VC++真的入口函数,也是OEP的位置