一种公共数据的多线程访问轨迹的分析方法技术

技术编号:35156668 阅读:32 留言:0更新日期:2022-10-05 10:39
本发明专利技术公开了一种公共数据的多线程访问轨迹的分析方法,通过修改编译器使其在对源代码编译过程中能够根据语义标注信息增加断点,通过修改调试器使其在运行二进制代码的过程中能够根据需要记录断点处代码执行相关信息,由此能够实现对目标变量执行过程的精准跟踪与记录,基于记录的信息能够确定针对公共数据的多线程访问轨迹,从而有效降低了调试过程的难度,提高了调试的效率及精度。提高了调试的效率及精度。提高了调试的效率及精度。

【技术实现步骤摘要】
一种公共数据的多线程访问轨迹的分析方法


[0001]本专利技术属于计算机
,具体涉及一种公共数据的多线程访问轨迹的分析方法。

技术介绍

[0002]在多线程程序中,多个线程并发访问公共变量是一种常见现象。当多个线程对公共变量进行访问出现错误时,现有的增加断点、单步交互式等程序调试方式主要存在以下问题:一是错误复现困难,由于操作系统分配CPU给某个线程的时机和顺序具有不确定性,某个错误可能需要反复交互式调试才能再次出现,增加了调试分析的难度;二是错误定位费时,错误复现后在单步交互式调试模式下,需要程序员记忆错误时多个线程访问变量前后的历史场景,再分析每个线程的调用栈等情况,过程复杂费时;三是日志形式不直观,日志中记录了程序的执行过程,然而日志记录的内容十分有限,往往缺乏线程调用栈、相关变量等有用信息,此外,通过日志分析需要反复查看文本日志,这些都增加了程序调试分析的难度。

技术实现思路

[0003]有鉴于此,本专利技术提供了一种公共数据的多线程访问轨迹的分析方法,实现了基于二进制代码调试过程中根据需要记录的代码执行相关信息完成对目标变量执行过程的精准跟踪与记录。
[0004]本专利技术提供的一种公共数据的多线程访问轨迹的分析方法,具体包括以下步骤:步骤1、确定源代码中与目标变量相关的所有变量为目标相关变量,在所有目标相关变量处增加语义标注;步骤2、在编译器编译所述源代码的过程中,根据语义标注识别目标相关变量后获取针对目标相关变量的所有写操作代码,在写操作代码的前后均增加自定义断点语句生成二进制代码;所述自定义断点语句包括特定opcode、变量ID及源代码行号,特定opcode为设定的无效opcode;步骤3、使用调试器调试所述二进制代码,当调试器接收到InVaLidOpCode异常消息后,设置处理器的异常处理标志为异常,若异常消息相关无效opcode为自定义断点语句中所的特定opcode,则执行步骤4;否则执行步骤5;当处理器抛出异常时,执行步骤6;步骤4、根据自定义断点语句记录信息实体的信息及信息实体间的对应关系形成断点历史数据,所述信息实体包括断点指令地址A、变量ID、源代码行号、线程、栈顶函数及变量;步骤5、设置处理器的异常处理标志为继续执行,调试器计算断点指令地址A之后跳过自定义断点语句的长度的地址位置B,若地址位置B存在则将指令地址B作为当前指令地址执行步骤3;若指令地址B不存在或处理器抛出异常,则执行步骤6;步骤6、令迭代执行次数自加1,若迭代执行次数小于或等于阈值则执行步骤3,否
则结束调试执行步骤7;若处理器已抛出异常则结束调试执行步骤7;步骤7、根据断点历史数据完成对变量及线程的分析。
[0005]进一步地,所述步骤1中的所述目标变量采用源代码文件全路径、源代码行号及变量名描述。
[0006]进一步地,所述步骤1中确定源代码中与目标变量相关的所有变量为目标相关变量的方式为:采用污点分析方法确定与目标变量相关的目标相关变量。
[0007]进一步地,所述步骤1中确定源代码中与目标变量相关的所有变量为目标相关变量的方式为:采用符号执行方法确定与目标变量相关的目标相关变量。
[0008]进一步地,所述自定义断点语句还包括源代码文件信息,所述源代码文件信息为源代码文件的哈希值。
[0009]进一步地,所述步骤4中根据自定义断点语句记录信息实体的信息及信息实体间的对应关系形成断点历史数据的过程中,根据源代码文件信息获取二进制代码所对应的源代码文件。
[0010]进一步地,所述步骤4中根据自定义断点语句记录信息实体的信息及信息实体间的对应关系形成断点历史数据的过程包括以下步骤:步骤4.1、获取断点指令地址A所在线程的调用栈A,计算调用栈A的栈顶变量地址列表与目标相关变量的交集,记录交集中所有的变量及其当前值;步骤4.2、获取除断点指令地址A所在线程以外的其他线程的调用栈栈顶的变量地址列表与目标相关变量的交集,若交集不为空则记录该线程的调用栈,及交集中的变量及对应的当前值;若交集为空则不处理。
[0011]进一步地,所述步骤7中根据断点历史数据完成对变量及线程的分析的方式为:根据输入的条件查询其首次和末次出现的时间点,再以时间点为条件查询已存在的实体及其关系;当实体存在而关系数据不存在时,以包含该实体且与该时间点最接近的前一个断点时间点的关系数据作为查询结果。
[0012]进一步地,所述步骤6中所述结束调试之后将二进制代码中自定义断点语句中的特定opcode修改为Nop指令。
[0013]进一步地,所述步骤6中所述结束调试之后删除源代码中的语义标注后重新编译生成二进制代码。
[0014]有益效果:1、本专利技术通过修改编译器使其在对源代码编译过程中能够根据语义标注信息增加断点,通过修改调试器使其在运行二进制代码的过程中能够根据需要记录断点处代码执行相关信息,由此能够实现对目标变量执行过程的精准跟踪与记录,基于记录的信息能够确定针对公共数据的多线程访问轨迹,从而有效降低了调试过程的难度,提高了调试的效率及精度。
[0015]2、本专利技术通过获取断点指令地址位置处处理器内的线程的调用栈,并从调用栈的栈顶变量地址列表中选择与目标相关变量相同的变量记录其变量取值,以有效减小记录的信息量优化记录信息,从而避免由记录所有线程的信息所导致的消耗过多资源的问题。
附图说明
[0016]图1为本专利技术提供的一种公共数据的多线程访问轨迹的分析方法的流程图。
具体实施方式
[0017]下面结合附图并举实施例,对本专利技术进行详细描述。
[0018]本专利技术提供了一种公共数据的多线程访问轨迹的分析方法,其核心思想是:根据设定的目标变量确定待分析源代码中的目标相关变量,并在源代码的目标相关变量处增加语义标注;在编译器编译上述源代码的过程中,在语义标注位置的前后均插入断点指令,断点指令设计为特定的无效opcode,该无效opcode会触发处理器产生类型为InVaLidOpCode的异常,之后形成待分析的二进制代码;在调试器运行上述二进制代码的过程中,当遇到上述断点时记录代码运行相关信息,直到出现异常或达到设定的迭代次数为止;最后根据记录的代码运行相关信息完成对公共数据的多线程访问轨迹的分析。
[0019]本专利技术提供了一种公共数据的多线程访问轨迹的分析方法,流程如图1所示,包括以下步骤:步骤1、开发者确定其所关注的源代码中的目标变量,目标变量采用源代码文件全路径、源代码行号及变量名等信息描述;确定源代码中与目标变量相关的所有变量为目标相关变量,在源代码内所有目标相关变量处增加语义标注。
[0020]其中,在源代码内所有目标相关变量处所增加的语义标注可表示为“@Breakpoint”等形式。
[0021]在漏洞分析中通常使用污点分析方法将所感兴趣的数据标记为污点数据,再通过跟踪与污点数据相关的信息的流向就能够确定污点数据是否会影响关键的程序操作,进而挖掘程序漏洞。本专利技术中,可采用污点分析方法确定源代码中与目标变量相关的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种公共数据的多线程访问轨迹的分析方法,其特征在于,具体包括以下步骤:步骤1、确定源代码中与目标变量相关的所有变量为目标相关变量,在所有目标相关变量处增加语义标注;步骤2、在编译器编译所述源代码的过程中,根据语义标注识别目标相关变量后获取针对目标相关变量的所有写操作代码,在写操作代码的前后均增加自定义断点语句生成二进制代码;所述自定义断点语句包括特定opcode、变量ID及源代码行号,特定opcode为设定的无效opcode;步骤3、使用调试器调试所述二进制代码,当调试器接收到InVaLidOpCode异常消息后,设置处理器的异常处理标志为异常,若异常消息相关无效opcode为自定义断点语句中所的特定opcode,则执行步骤4;否则执行步骤5;当处理器抛出异常时,执行步骤6;步骤4、根据自定义断点语句记录信息实体的信息及信息实体间的对应关系形成断点历史数据,所述信息实体包括断点指令地址A、变量ID、源代码行号、线程、栈顶函数及变量;步骤5、设置处理器的异常处理标志为继续执行,调试器计算断点指令地址A之后跳过自定义断点语句的长度的地址位置B,若地址位置B存在则将指令地址B作为当前指令地址执行步骤3;若指令地址B不存在或处理器抛出异常,则执行步骤6;步骤6、令迭代执行次数自加1,若迭代执行次数小于或等于阈值则执行步骤3,否则结束调试执行步骤7;若处理器已抛出异常则结束调试执行步骤7;步骤7、根据断点历史数据完成对变量及线程的分析。2.根据权利要求1所述的分析方法,其特征在于,所述步骤1中的所述目标变量采用源代码文件全路径、源代码行号及变量名描述。3.根据权利要求1所述的分析方法,其特征在于,所述步骤1中确定源代码中与目标变量相关的所有变量为目标相关变量的方式为:采用污点分析方法确定与目标变量相关的目标相关变量。4....

【专利技术属性】
技术研发人员:杜凯温研
申请(专利权)人:北京麟卓信息科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1