循环代码模型构建方法

news2025/5/18 23:38:29

        循环结构是源代码程序的重要结构,然而即使是简单的循环程序,也很容易出错,循环中的很多错误往往需要执行多次或者在某些特定的情况下才能被发现,检测这些错误的代价很高,所以需要重点开展对软件循环代码的安全性分析研究,而对循环代码结构进行研究的重要前提是构建有效且准确的循环模型。

       构建循环模型通常是以代码解析为基础进行的,代码解析的结果是代码元数据。循环定义信息可直接从代码元数据中提取。通过分析变量应用元数据可获取循环数据集合。以循环体内的元数据为基础,对循环体代码进行有效的块划分,并基于块划分结果,构建起以循环体开始行为起点,以各块的起始行为节点,并依据块类型及块间关系将各节点连接在一起,以循环体终止行为终点,可构建循环体控制流图。

        1)提取循环定义信息

        循环定义信息主要包括两部分:循环描述信息和循环出口信息。

  • 提取循环描述信息

一般情况下,代码元数据中包含有循环的头部起始行、循环体起始行、终止行、入口信息、循环类型等描述信息,因此通过代码元数据可直接获取循环描述信息。

  • 提取循环出口信息

        出口信息包括出口的描述信息、直接出口条件表达式、间接出口条件表达式集合以及所应用的循环数据集合。出口描述信息包括出口位置、类型、关键词等信息。出口条件表达式是指当该条件表达式取值为真时,循环必然从该出口跳出时的条件表达式。

                 

       首先提取循环的描述信息。在一般的高级语言中,按照循环出口的位置,可将循环出口分为两类:头部出口和内部出口。如果出口为头部出口,头部出口一般同入口相重合,通过分析特定循环的元数据,将就可以获取头部出口描述信息。内部出口一般由break以及return之一构成,通过分析 break和return关键词所对应的元数据,即可获取相应的出口描述信息。

       第二步是提取出口条件表达式。出口条件又分为两种:直接出口条件和间接出口条件。对于头部出口来说,直接出口条件是指入口条件的否,对于内部出口来说,直接出口条件是指出口所在分支代码块的直接分支条件。

        另外,在获取循环数据集合的情况下,还要分析出口表达式中对循环数据的应用集合,整理出每个出口表达式中所应用的循环数据集合,为后续的循环类型判断提供支持。

2) 提取循环数据信息

        首先要获取循环数据基本信息。在构成循环体的代码中,对数据应用分为两种方式:引用和定值。定值可能会导致数据发生变化,循环体中所有进行了定值操作的不同数据构成了循环数据集合。因此首先要提取循环体中的发生定值操作的数据集合。具体要通过对代码元数据分析获取数据表达式、数据的值、行号等数据定值基本信息,除了基本信之外,数据定值的顺序对数据的终值是有影响的,还要提取出能够对数据定值进行排序的顺序号。

        判断循环是否能够准确求解的一个重要依据就是循环数据定值的发生属性。发生属性有两个取值:可能和必然。为了确定定值发生的可能性及必然性,还要分析定值发生位置所在块的所属层级,对于头部出口来说,层级号为1的定值是必然发生的。对于内部出口来说,尽管层级好不是1,内部出口位置之前同一块内的定值是必然发生。

       得到循环数据集合后,还要记录下循环函数的所有循环数据的初始值,一般情况下,初始值是求过程值和出口值的重要依据。

3) 循环体控制流图

        循环体控制流也是循环的重要特征,控制流图及其创建方法是静态分析领域的基础技术,与函数控制流图相区别,循环体控制流图是对循环体内的处理逻辑构建同其互为映射的控制流图。

        循环定义信息、循环数据信息以及循环控制流图之间的有机组合即为循环模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/451336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简单聊下HBase

大家好,我是易安! Google发表了三篇论文,即GFS、MapReduce和BigTable,被誉为“三驾马车”,开启了大数据时代。今天我们来聊一下BigTable对应的NoSQL系统HBase,看看它是如何处理海量数据的。 在计算机数据存…

Mybatis 全局配置文件 mybatis-config.xml

1、全局配置文件的用处 mybatis通过配置文件可以配置数据源、事务管理器、运行时行为、处理别名、类型处理、插件等信息。在mybatis应用初始化时,程序会解析全局配置文件,使用配置的信息实例化Configuration组件,完成基本配置的初始化。在my…

图论 Union-Find 并查集算法

union-find API: class UF { public:/* 将 p 和 q 连接 */void union(int p, int q);/* 判断 p 和 q 是否连通 */bool connected(int p, int q);/* 返回图中有多少个连通分量 */int count(); };连通性概念 触点:每个单独的不与任何点相连的点叫做触点 连…

绿色智慧档案馆构想之智慧档案馆环境综合管控一体化平台

【智慧档案馆整体效果图】 智慧档案库房一体化平台通过智慧档案管理,实现智慧档案感知协同处置功能;实现对档案实体的智能化识别、定位、跟踪监控;实现对档案至智能密集架、空气恒湿净化一体设备、安防设备,门禁设备等智能化巡检与…

camunda流程引擎receive task节点用途

Camunda的Receive Task用于在流程中等待外部系统或服务发送消息。当接收到消息后,Receive Task将流程继续执行。Receive Task通常用于与Send Task配合使用,以便流程可以在发送和接收消息之间进行交互。 Receive Task可以用于以下场景: 1、等…

DAB-DETR代码学习记录之模型解析

DAB-DETR是吸收了Deformable-DETR,Conditional-DETR,Anchor-DETR等基础上完善而来的。其主要贡献为将query初始化为x,y,w,h思维坐标形式。 这篇博文主要从代码角度来分析DAB-DETR所完成的工作。 DAB-DETR主要是对Decoder模型进行改进。博主也主要是对Dec…

【C++】6. 内联函数

文章目录 前言一、宏函数二、内联函数三、内联函数的易错点 前言 当我们调用函数时,是有很多消耗的。其中最大的销毁就是为函数开辟空间 - 函数栈帧。 如果我们有一个函数,很短,而且要调用很多次,比如Swap()。它所造成消耗就比较…

机器学习笔记Python笔记:HMM(隐马尔科夫模型)

1 引子:猜天气小游戏 一对异地恋的情侣,女朋友想根据男友的心情猜测男友所在城市的天气 1.1 天气和心情一定一一对应 晴天——>高兴雨天——>烦躁 可以根据心情唯一确定天气 1.2 天气和心情没有一一对应 晴天——>80%高兴,20%烦…

有关实现深拷贝的四种方法

深拷贝与浅拷贝: 在开始之前我们需要先了解一下什么是浅拷贝和深拷贝,其实深拷贝和浅拷贝都是针对的引用类型,JS中的变量类型分为值类型(基本类型)和引用类型;对值类型进行复制操作会对值进行一份拷贝,而对…

Logstash学习

一、Logstash基础 1、什么是Logstash logstash是一个数据抽取工具,将数据从一个地方转移到另一个地方。下载地址:https://www.elastic.co/cn/downloads/logstash logstash之所以功能强大和流行,还与其丰富的过滤器插件是分不开的&#xff…

CDGP认证|ChatGPT的出现,对数据治理行业冲击如何?

ChatGPT的出现对数据治理有很多好处,其中最明显的是提供了更高效、更准确和更自动化的数据处理和分析服务,可以帮助企业和组织更好地管理和利用数据资源,提高数据质量和决策效率。此外,ChatGPT还能够发现隐藏在大量数据中的信息和趋势&#x…

OJ练习第82题——填充书架

填充书架 力扣链接:1105. 填充书架 题目描述 给定一个数组 books ,其中 books[i] [thicknessi, heighti] 表示第 i 本书的厚度和高度。你也会得到一个整数 shelfWidth 。 按顺序 将这些书摆放到总宽度为 shelfWidth 的书架上。 先选几本书放在书架…

Nexus 组件发布失败、npm 登录失败 解决过程

目录 参考发布文章进行打包 提示发布成功,但在 Nexus 里没发现组件 测试 yarn 发布 测试 npm 发布(解决登录失败) Nexus 设置 Sonatype Nexus Repository Manager 相关权限 参考发布文章进行打包 整体发布:根目录运行 yarn r…

直播软件app开发:如何保证音视频质量?

随着社交媒体的发展,视频直播已成为越来越流行的社交方式。直播软件app开发也因此成为了一个热门话题。在开发直播软件app时,保证音视频质量是至关重要的。本文将介绍如何确保你的直播软件app在音视频质量方面表现出色。 确定音视频质量标准 首先&…

第七章 建造者模式

文章目录 前言一、传统方式解决盖房子需求完整代码抽象房子类 AbstractHouse实现子类 普通房子实现子类 高楼大厦客户端盖房子 二、引入建造者模式建造者模式的四个角色: 产品、抽象建造者、具体建造者、指挥者完整代码House类 (产品角色)抽象父类(抽象建…

CV 领域的 ChatGPT?MetaAI 推出“最强”大视觉模型 SAM

出品人:Towhee 技术团队 随着 ChatGPT 引起一波又一波的“GPT热潮”,自然语言领域又一次成为了人工智能的讨论焦点。大家不由得思考,计算机视觉领域里是否会出现这样一个堪称划时代的模型?在这种万众瞩目的时候,一直处…

Python3《机器学习实战》学习笔记(七):支持向量机原理篇之手撕线性SVM

文章目录 一、SVM介绍二、线性SVM2.1 数学建模2.1.1决策面方程2.1.2"分类间隔"方程2.1.3约束条件2.1.4线性SVM优化问题基本描述2.1.5求解准备(讲讲凸函数)2.1.6拉格朗日函数2.1.7KKT条件2.1.8对偶问题求解2.1.9最后求解 2.2 SMO算法 三、代码实战3.1准备数据 一、SVM…

M_Map工具箱简介及地理图形绘制

M_Map工具箱简介及地理图形绘制 1 M_Map简介1.1 具体代码说明 2 地理图形绘制案例2.1 M_Map给定案例2.1.1 M_Map Logo2.1.2 Lambert Conformal Conic projection of North American Topography2.1.3 Stereographic projection of North Polar regions2.1.4 Colourmaps 2.2 案例…

vue封装公共组件库并发布到npm库详细教程

vue组件封装的原理:利用vue框架提供的api: Vue.use( plugin ),我们需要把封装好组件的项目打包成vue库,并提供install方法,然后发布到npm中。Vue.use( plugin )的时候会自动执行插件中的install方法。 一、组件库代码目录 目录…

常见的四种排名函数的用法(sql)

四个排名函数: 1.row_number 2.rank 3.dense_rank 4.ntile 1. ROW_NUMBER(排名场景推荐) 1.1 介绍 在 SQL 中,ROW_NUMBER() 是一个窗口函数,它为结果集中的每一行分配一个唯一的序号。该函数的语法如下: …