四类程序分析

1、静态分析VS动态分析
静态分析:包括分析程序的源码和机器码(在不运行的情况下);很多工具进行静态分析,尤其是编译器;例如,编译器通过进行静态分析来分析正确性(correctness),例如类型检查;用来进行性能优化;一些静态分析可以鉴别bugs或者使代码可视化;只需要读入代码,然后对它进行分析。
动态分析:当客户程序执行的时候进行分析;现存很多工具来进行动态分析,例如,分析器(profilers)、checkers and execution visualisers(校验器和模拟器);
要想分析程序,必须对客户程序运用分析代码插桩。分析代码可以完全内嵌,也可以包括额外的程序(由内嵌代码调用)。分析程序作为程序正常执行的一部分,不会干扰程序的执行(否则可能使程序运行变慢),但是可以做一些额外工作,比如测量性能,识别bug。这些分析代码必须维持多类分析状态。
     两种方法是互补的,静态可以考虑到程序中所有执行路径,动态分析通常不全面,只是考虑单条执行路径。动态比静态更精确,因为它是运用真实的值在跑程序。动态分析比静态分析一般简单。

2、源码分析 VS 二进制分析
源码分析:涉及在source code 层面分析程序。很多工具执行源码分析,编译器仍然是个好的例子。这种分类包括来自源码基于程序表现的分析,例如控制流图。源码分析通常依据程序语言结构,比如函数、语句、表达式和变量。
二进制分析:涉及在机器码层面分析,存在形式为目标代码(pre-linking)或者执行代码(post-linking)(是否链接库)。这类分析执行在可执行的中间表示层,例如字节代码(可以运行在虚拟机上)。二进制分析通常依据机器实体,例如过程、指令、寄存器和内存地址。
     源码分析对不依赖于平台(架构和操作系统),但是是语言相关的;二进制分析时编程语言无关,但是平台相关。源码分析可以得到高层次信息,使分析更强大;相反,二进制分析可以得到低层次信息(例如,寄存器的分配结果)他需要一些任务。二进制分析不需要源码,源码在系统中经常是不存在的。

四类分析:static source analysis、dynamic source analysis、static binary analysis、dynamic binary analysis。

3、静态二进制插桩 vs 动态二进制插桩
根据出现时间不同,对于程序分析可以分为两种主要插桩技术:
静态二进制插桩发生在程序执行前,在重写目标代码或者执行代码阶段;
动态二进制插桩技术发生在运行阶段。可以通过程序或者另外进程将分析代码拼接到客户进程上。如果客户端用的是动态链接代码,需要在动态链接后再添加分析程序。

插桩有纯软件实现插桩、也可以借助硬件和微程序操作。

动态二进制插桩有两个明显优势。第一,不需要准备客户程序,对用户来说很方便。第二,它本来包含了所有客户端代码;如果代码和数据是混合的或者运用了不同的模块,对所有代码进行静态插桩比较困难, 通过客户端用动态生成代码来动态插桩所有代码是不可能的。对所有代码进行插桩的能力对函数库正确性和完全操纵很重要。DBI有两个缺点:第一,在运行时会体现插桩的代价;第二、很难实现在运行时重写执行代码。

{译自:Dynamic Binary Analysis and Instrumentation or Building Tools is Easy}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值