认识符号执行

1、符号执行的分类

符号执行根据发展状况可以分为传统的符号执行、动态符号执行和选择性符号执行。
传统的符号执行并不真实的执行,而是通过解析程序通过符号值模拟执行。
动态符号执行结合了真实执行和传统符号执行技术的有点,在真实执行的过程中同时进行符号执行。
选择性符号执行可以对程序员感兴趣的部分进行符号执行,其它的部分使用真实值执行。

2、符号执行的概念

符号执行使用不执行程序使用符号值来代替具体变量,来模拟每个路径来产生每一个执行的可能性,将执行语句的结果整合成若干条数学表达式。
对某结果的数学表达式进行求解,就能获得到达该结果的路径。
将产生漏洞的条件设置为程序执行的结果,降低分析程序的难度。

3、控制流图->符号执行树
int d(int x){
  int y = 2*x;
  y--;
  if(y==2)
    x++;
  else
    x--;
  return x;
}
14899865-43e8c0a10ef5be59.png
控制流图

14899865-6fe42bc893d44257.png
符号执行树

可知有两条路径表达式:
2X-1==2
2
X-1!=2
就是程序的全部路径运行结果,可以选择对应的赋值来到达对应的运行结果

4、符号传递丢失

在某些系统调用的输入输出时,可能并不会是简单的赋值,在执行类似文件调用读写之类的函数时,符号数值的会丢失,导致下一步无法获得外部正确赋值,因此,符号执行无法求解上述问题,因为在调用系统函数与外设交互的时候,符号数值的赋值过程被截断了。

参考链接1
参考链接2
参考链接3
参考链接4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值