码迷,mamicode.com
首页 > 其他好文 > 详细

IDA如何找到二进制的main函数

时间:2020-07-22 21:04:18      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:main   就是   信息   双击   code   也会   没有   图片   寄存器   

main函数可以反应程序的主要执行流程,在看源代码的时候通常也会通过main函数了解程序的主要功能,那么在看二进制文件的时候怎么找到程序的“main”函数呢?

一般情况下,系统在编译源代码时,会在main函数之前加一些其它的信息,用于给main的执行准备一下环境之类的。二进制文件的入口一般就是_start,然后先执行一些指令,接着就会跳转到main运行,所以可以从_start中找到main函数的位置。

(1)IDA中打开目标二进制文件,一般会自动定位到_start,如果没有的话,也可以在侧边的Functions window中查找_start,然后双击定位。

技术图片

(2)_start的全部如下图所示,我们可以看到在最后一行通过B指令调用了__uClibc_main函数。

技术图片

(3)一开始以为这个函数就是main了吧,毕竟函数名里边都有main了,然后双击点进去看这个函数的具体实现。这肯定不是main函数啊,看样子应该是某个库函数。

技术图片

(4)网上找了一下这个函数的定义,但是没找到。根据一篇文章的启发,推测它的某个参数就是main函数的地址,然后就把目光锁定了最有可能的R0寄存器中的那个值sub_FCB0。点进去看一下,首先就是一大长串的变量,第六感感觉像是main的样子。文章指路:http://blog.sina.com.cn/s/blog_83f3c04c0102xfcb.html(其中还详细介绍了_start的每条指令的含义,可以对照看一下)

技术图片

(5)还可以F5反汇编一下,返回值int,参数一个是int,一个是char*,完全符合int main(int argc, char* argv)的格式,再往下看一看函数体,基本没跑了。宣布:当事函数sub_FCB0就是main!

技术图片

IDA如何找到二进制的main函数

标签:main   就是   信息   双击   code   也会   没有   图片   寄存器   

原文地址:https://www.cnblogs.com/from-zero/p/13362361.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!