符号执行漏洞与代码插桩技术

       符号执行技术不同于一般程序测试分析技术。一般分析技术以真实数据为输入,符号执行技术虚拟化数据输入,模拟程序通过符号进行数值操作。生成符号执行技术的目的是提高测试和分析代码程序过程中路径的覆盖率。通常的做法是模拟程序的执行,然后利用静态分析技术分析目标代码程序的信息流,从而获得函数的调用图和控制流图。然后将符号值作为程序流的输入,计算程序运行时的符号。最后得到一个包含所有路径约束条件的表达式,通常可以通过约束求解来检测漏洞或生成测试用例。一个简单的代码,并显示如何为该代码段生成符号。

outputo-20211122-104450-855-pggl.png

执行生成的符号。然后,符号执行过程如下:1。使用S符号状态:存储代码中的变量与符号的值关系;符号路径条件SPC:存储路径的约束解决条件,初始值为true。2.在S符号状态中添加变量与符号之间的值关系;并在动态模拟程序代码时更新S中的符号表达式。3.运行到程序分支时,更新符号路径条件SPC。4.解决SPC的约束,以便在路径条件下获得输入数据。

程序代码插桩技术最早提出。该技术是将分析人员的特定跟踪代码插入目标代码程序的某些特定位置,确保目标代码程序在模拟程序运行中具有与以前相同的逻辑处理功能,并在程序运行过程中收集状态信息。从源代码程序到生成可执行文件,我们将遇到以下步骤:编写、编译、连接和执行源代码。在这四个步骤中,代码插桩技术可以用来插入程序的特定位置。

代码插桩技术的主要功能如下:1.代码跟踪。代码插桩技术可以在代码的某些位置插桩,从而获取应用程序运行时的状态信息。2.有利于调试。跟踪程序代码执行时的内容状态,有利于发现和记录错误。3.性能监控。只有代码插桩技术才能在函数运行时实现实时状态信息。使用代码插桩技术可以更好地解决代码替换的问题。例如,方法display()的替换应该在程序代码中实现,并且应该写的mydisplay()函数方法。如果我们不使用代码插桩技术直接替换display()函数,如果display()方法在其他类别中定义并调用,那么直接的全局替换是错误的。因此,使用代码插桩技术可以实现无痕埋点、性能监控等。

分享: