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

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

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

(1)IDA中打开目标二进制文件,通常会自动定位到_start,若是没有的话,也能够在侧边的Functions window中查找_start,而后双击定位。htm

(2)_start的所有以下图所示,咱们能够看到在最后一行经过B指令调用了__uClibc_main函数。blog

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

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

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

相关文章
相关标签/搜索