• 通过启动函数定位main()函数


      如下,通过vc6.0编写一个hello world程序。尝试结合汇编代码、分析启动函数找到main函数。
      在printf(xxx)插入断点,调试执行。如下,在堆栈窗口中可见main()下的一个函数mainCRTStartup()。mainCRTStartup函数是连接器对控制台程序设置的入口函数,此函数会调用main函数。
      双击mainCRTStartup 函数,可调准到基本文件CRT0.c中,此文件定义了启动的规则,也就是说程序首先是从这里运行的,然后才调用运行main()函数的。OD打开此exe文件,结合分析。如下,可知exe文件先有调用GetVersion()函数,此函数获取系统的版本号。
      然后它有调用_ioinit()函数...最后发现它调用setargv()、setenvp()、_cinit()函数后,跳转到test4.00401005,这儿是什么函数捏?对照CRT0.c,发现后面的语句就是跳转到main()函数了,尝试进入test4.00401005,没有错,看到了hello world等关键信息,可知确实进入了main()函数,如下图所示。因此可知通过这种方式定位main()函数的方法主要是找到连续的三个call(setargv、setenvp、cinit),下一个call就是跳转想main处-。-
     
    知识点总结:
    mainCRTStartup函数是连接器对控制台程序设置的入口函数,此函数会调用进入程序的main函数。
    CRT0.c文件定义了启动的规则,也就是说应用程序的运行顺序。
    通过启动函数mainCRTStartup找main()的方式是:找到连续的三个call(setargv、setenvp、cinit ),下一个call指令就会跳转到main()处。
     
     
  • 相关阅读:
    处理安卓9patch(.9.png)图片
    block 方法参数中带有block 如何生成 如何使用
    hash_hmac
    日期(NSDate)是NSString类的格式(stringWithFormat)
    UITableView刷新单个cell或者单个Section
    iOS enum 定义与使用
    拼接url地址
    demo效果
    好东西
    关于ios7 navigationController中view的frame以及坐标点
  • 原文地址:https://www.cnblogs.com/HYWZ36/p/10298726.html
Copyright © 2020-2023  润新知