基于多步智能体的应用程序分析方法、装置、设备及介质

摘要: 本技术涉及程序分析,尤其涉及一种基于多步智能体的应用程序分析方法、装置、设备及介质。背景技术:1、相关技术中,通过对程序代码进行竞态检测,判断程序是否存在数据竞...
基于多步智能体的应用程序分析方法、装置、设备及介质

本技术涉及程序分析,尤其涉及一种基于多步智能体的应用程序分析方法、装置、设备及介质。

背景技术:

1、相关技术中,通过对程序代码进行竞态检测,判断程序是否存在数据竞争。竞态检测可通过动态分析工具、静态分析工具或人工代码审核实现。采用动态分析工具执行竞态检测时,需要成功编译并执行程序,且分析覆盖范围会受测试输入和线程调度的影响。静态分析工具虽无需执行程序,但在指针、别名、函数指针、回调、跨文件调用和复杂同步语义下容易产生大量保守误报;人工代码审核依赖专家经验,难以在大规模代码库中稳定识别跨文件、跨函数和隐式共享关系。因此,如何提高竞态检测的准确性,成为了亟待解决的问题。

技术实现思路

1、本技术实施例的主要目的在于提出一种基于多步智能体的应用程序分析方法、装置、设备及介质,旨在提高竞态检测的准确性。

2、为实现上述目的,本技术实施例的第一方面提出了一种基于多步智能体的应用程序分析方法,所述方法包括:

3、获取应用程序的源代码;

4、对所述源代码进行代码结构识别,生成并发结构索引;

5、通过第一预设智能体基于所述源代码和所述并发结构索引进行共享资源识别,得到候选共享资源;

6、通过第二预设智能体基于所述候选共享资源,从所述源代码中检索访问所述候选共享资源的代码切片;

7、通过第三预设智能体基于所述候选共享资源和所述代码切片,在所述代码切片中枚举针对所述候选共享资源的访问事件,并生成候选共享资源的资源共享标签,得到线程共享摘要;其中,所述资源共享标签包括目标共享标签;

8、对所述线程共享摘要中标注有所述目标共享标签的候选共享资源对应的访问事件进行竞态检测,得到目标竞态数据。

9、在一些实施例,所述通过第一预设智能体基于所述源代码和所述并发结构索引进行共享资源识别,得到候选共享资源,包括:

10、通过所述第一预设智能体基于所述源代码和所述并发结构索引标注所述源代码的全局变量、静态变量、文件作用域对象和单例状态,根据所述全局变量、所述静态变量、所述文件作用域对象和所述单例状态确定初始共享资源;

11、通过所述第一预设智能体基于所述源代码、所述并发结构索引和所述初始共享资源对所述初始共享资源进行资源扩展,得到第一中间共享资源,并根据所述第一中间共享资源从所述源代码中提取触发所述资源扩展的参考代码语句;

12、通过所述第一预设智能体基于所述源代码、所述并发结构索引和所述第一中间共享资源对所述第一中间共享资源进行线程可达性校验,得到第二中间共享资源;

13、通过所述第一预设智能体基于所述初始共享资源、所述第一中间共享资源、所述参考代码语句和所述第二中间共享资源进行资源汇总,得到所述候选共享资源。

14、在一些实施例,所述通过第三预设智能体基于所述候选共享资源和所述代码切片,在所述代码切片中枚举针对所述候选共享资源的访问事件,并生成候选共享资源的资源共享标签,得到线程共享摘要,包括:

15、通过所述第三预设智能体逐条扫描所述代码切片的代码语句,根据命中所述候选共享资源的代码语句输出所述访问事件;

16、通过所述第三预设智能体按照所述候选共享资源的资源身份对所述访问事件进行分组,得到访问分组;

17、通过所述第三预设智能体基于所述访问分组中所述访问事件的访问类型字段和线程入口字段,生成所述资源共享标签;

18、根据所述访问事件和所述资源共享标签,生成所述线程共享摘要。

19、在一些实施例,所述通过所述第三预设智能体基于所述访问分组中所述访问事件的访问类型字段和线程入口字段,生成所述资源共享标签,包括:

20、通过所述第三预设智能体基于所述访问分组中所述访问事件的线程入口字段,对所述访问事件进行筛选,输出访问线程集合;

21、通过所述第三预设智能体基于所述访问分组中所述访问事件的访问类型字段,对所述访问事件进行筛选,输出读写集合;

22、根据所述访问线程集合和所述读写集合确定关键访问集合;

23、基于所述关键访问集合中所述访问事件的同步上下文字段,生成所述资源共享标签。

24、在一些实施例,所述对所述线程共享摘要中标注有所述目标共享标签的候选共享资源对应的访问事件进行竞态检测,得到目标竞态数据,包括:

25、对所述线程共享摘要中标注有所述目标共享标签的候选共享资源对应的访问事件进行竞态校验,生成候选竞态数据;

26、将所述候选竞态数据转换为逻辑约束;

27、通过预设求解器基于所述逻辑约束对所述候选竞态数据进行验证状态标注,得到所述目标竞态数据。

28、在一些实施例,所述对所述源代码进行代码结构识别,生成并发结构索引,包括:

29、对所述源代码进行语句识别,得到创建语句;

30、对所述创建语句进行线程可达性扩展,得到所述并发结构索引。

31、在一些实施例,在所述对所述线程共享摘要中标注有所述目标共享标签的候选共享资源对应的访问事件进行竞态检测,得到目标竞态数据之后,所述方法还包括:

32、获取所述源代码在多轮程序分析得到的候选共享资源表、线程结构表、同步模式表和候选竞态表;

33、根据所述候选共享资源表、所述线程结构表和所述同步模式表生成线程共享报告;

34、根据所述候选共享资源表、所述线程结构表、所述同步模式表和所述候选竞态表生成数据竞争报告。

35、为实现上述目的,本技术实施例的第二方面提出了一种基于多步智能体的应用程序分析装置,所述装置包括:

36、获取模块,用于获取应用程序的源代码;

37、第一识别模块,用于对所述源代码进行代码结构识别,得到并发结构;其中,所述并发结构具有并发结构索引;

38、第二识别模块,用于通过第一预设智能体基于所述源代码和所述并发结构索引进行共享资源识别,得到候选共享资源;

39、检索模块,用于通过第二预设智能体基于所述候选共享资源,从所述源代码中检索访问所述候选共享资源的代码切片;

40、摘要生成模块,用于通过第三预设智能体基于所述候选共享资源和所述代码切片,在所述代码切片中枚举针对所述候选共享资源的访问事件,并生成候选共享资源的资源共享标签,得到线程共享摘要;其中,所述资源共享标签包括目标共享标签;

41、竞态分析模块,用于对所述线程共享摘要中标注有所述目标共享标签的候选共享资源对应的访问事件进行竞态检测,得到目标竞态数据。

42、为实现上述目的,本技术实施例的第三方面提出了一种电子设备,所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述第一方面所述的方法。

43、为实现上述目的,本技术实施例的第四方面提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的方法。

44、本技术实施例提出的基于多步智能体的应用程序分析方法、基于多步智能体的应用程序分析装置、电子设备及计算机可读存储介质,在无需强依赖编译执行环境的条件下,以多步智能体为调度核心,基于源代码识别候选共享资源,围绕候选共享资源从源代码中检索代码切片,根据代码切片和候选共享资源生成线程共享摘要,并在线程共享摘要的基础上检测数据竞态。不直接对完整程序进行一次性判断,而是按并发结构识别、候选共享资源识别、并发感知切片、共享摘要生成、竞态推理的顺序逐步推进,从而把复杂并发问题拆成多个小步骤,使模型的语义理解、工具检索和形式化验证能够分工协同。通过将多步智能体的语义理解能力、代码检索与切片能力、同步上下文分析能力等结合起来进行代码分析,大大提高了竞态检测的准确性。