C/C++反汇编-1-找到启动函数和用户入口

当你采用c语言来写程序的时候,无论是WinMain还是main函数其实都并不是整个程序的启动入口,而是用户入口。本文将会介绍如何找到启动函数入口和用户入口

因为所有的函数处理都是利用堆栈来进行的所以直接在调试框架下查看栈窗口就可以查看到具体的程序函数调用。

这是在vs2019下的调用情况

 

 

这是在vc++下的调用情况

 

 

经过百度调查知道KERNEL32.dll是高级源码不能查看。

而第二个函数呢对于不同的编译环境下是不一样的vs2019可能是我用的是社区版没有,而vc++用的是破解版也没有但是知道函数名。于是可以通过查函数名的方式来查看函数mainCRTStartup()

这段代码我没有找到所以我直接在书上照相可以参考一下

 

 

 

 

于是我直接采用了Olldbg来反编译查看mainCRTStartup函数

 

 

找这个函数的调用方式,以及传参的格式可以知道,main函数中其实是传了三个参数

但是一般申明使用main函数都是

int main(int argc,char *argv[])却没问题

原因是C语言的特性是可以多输入参数,但是如果不匹配就有问题,但是往后面多输入是没问题的,就算用void来申明了也只是进行警告并不会报错。

用代码来举例

 

 

所以,如果要找main函数的入口的话,可以看前面的参数push了几个,对于mainCRTMain()这个函数来说只有main函数是传了3个参数,所以可以用这个来确定main函数的位置来处理