CN111913878A - 基于程序分析结果的字节码插桩方法、装置及存储介质 - Google Patents
基于程序分析结果的字节码插桩方法、装置及存储介质 Download PDFInfo
- Publication number
- CN111913878A CN111913878A CN202010671078.1A CN202010671078A CN111913878A CN 111913878 A CN111913878 A CN 111913878A CN 202010671078 A CN202010671078 A CN 202010671078A CN 111913878 A CN111913878 A CN 111913878A
- Authority
- CN
- China
- Prior art keywords
- basic block
- information
- target
- block
- candidate
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开基于程序分析结果的字节码插桩方法,包括:基于程序的源代码划分的至少一个基本块的基本块信息,获取目标插桩点信息;基于所述目标插桩点信息,设置对应的目标插桩点;所述目标插桩点用于获取所述目标插桩点对应的基本块的运行信息;本申请还公开了基于程序分析结果的字节码插桩装置及存储介质;通过本申请实施例,可以实现字节码插桩,进而获取程序源代码的运行信息。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及基于程序分析结果的字节码插桩方法、装置及存储介质。
背景技术
插桩技术是白盒测试工具必须使用到的技术,相关技术中,常使用字节码插桩技术或二进制代码插桩技术,由于上述两种插桩技术均需要分析字节码,但字节码的分析导致源代码信息缺失,进而无法获得程序的控制流信息;因此如何在源代码中进行插桩以获取程序源代码的运行信息是需要解决的技术问题。
发明内容
本申请实施例提供一种基于程序分析结果的字节码插桩方法、装置及存储介质,可以通过在源代码中设置插桩点,实现源代码运行信息的获取。
本申请实施例的技术方案是这样实现的:
一方面,本申请实施例提供基于程序分析结果的字节码插桩方法,包括:
基于程序的源代码划分的至少一个基本块的基本块信息,获取目标插桩点信息;
基于所述目标插桩点信息,设置对应的目标插桩点;
所述目标插桩点用于获取所述目标插桩点对应的基本块的运行信息。
上述方案中,所述基于程序的源代码划分的至少一个基本块的基本块信息,获取目标插桩点信息,包括:
基于所述程序的源代码划分的至少一个基本块的基本块信息,确定候选插桩点信息。
上述方案中,所述基于所述程序的源代码划分的至少一个基本块的基本块信息,获取目标插桩点信息包括:
在所述候选插桩点信息对应的基本块包括逻辑块的情况下,删除所述逻辑块对应的候选插桩点信息;
确定所述候选插桩点信息中除已删除的候选插桩点信息之外的候选插桩点信息为目标插桩点信息。
上述方案中,所述基于所述目标插桩点信息,设置对应的目标插桩点,包括:
基于所述目标插桩点信息确定目标插桩点的代码;
基于所述目标插桩点的代码设置对应的目标插桩点。
上述方案中,所述基于所述目标插桩点信息确定目标插桩点的代码,包括:
判断所述目标插桩点信息对应的基本块是否为起始块;
在所述目标插桩点信息对应的基本块是起始块的情况下,确定所述目标插桩点的代码包括第一字符串;
或者,在所述目标插桩点信息对应的基本块不是起始块的情况下,确定所述目标插桩点的代码包括第二字符串。
上述方案中,所述候选插桩点信息包括:
所述候选插桩点对应的基本块信息和所述候选插桩点的位置信息。
上述方案中,所述候选插桩点的位置信息包括:
所述候选插桩点对应的基本块的代码的行号之前。
上述方案中,其特征在于,所述基本块信息包括以下至少一种:所述基本块所属的文件的身份标识号(Identity document,ID)、所述基本块的标识信息、所述基本块的行号和所述基本块的块类型标识。
另一方面,本申请实施例还提供基于程序分析结果的字节码插桩装置,所述装置包括:
获取单元,用于基于程序的源代码划分的至少一个基本块的基本块信息,获取目标插桩点信息;
设置单元,用于基于所述目标插桩点信息,设置对应的目标插桩点;
所述目标插桩点用于获取所述目标插桩点对应的基本块的运行信息。
上述方案中,所述装置还包括:
确定单元,用于基于所述程序的源代码划分的至少一个基本块的基本块信息,确定候选插桩点信息。
上述方案中,所述装置还包括:
过滤单元,用于在所述候选插桩点信息对应的基本块包括逻辑块的情况下,删除所述逻辑块对应的候选插桩点信息;
所述确定单元,还用于确定所述候选插桩点信息中除已删除的候选插桩点信息之外的候选插桩点信息为目标插桩点信息。
上述方案中,所述确定单元,还用于基于所述目标插桩点信息确定目标插桩点的代码;
设置单元,用于基于所述目标插桩点的代码设置对应的目标插桩点。
上述方案中,所述装置还包括:
判断单元,用于判断所述目标插桩点信息对应的基本块是否为起始块;
所述确定单元,用于在所述目标插桩点信息对应的基本块是起始块的情况下,确定所述目标插桩点的代码包括第一字符串;或者,在所述目标插桩点信息对应的基本块不是起始块的情况下,确定所述目标插桩点的代码包括第二字符串。
上述方案中,所述候选插桩点信息包括:
所述候选插桩点对应的基本块信息和所述候选插桩点的位置信息。
上述方案中,所述候选插桩点的位置信息包括:
所述候选插桩点对应的基本块的代码的行号之前。
上述方案中,所述基本块信息包括以下至少一种:所述基本块所属的文件的身份标识号ID、所述基本块的标识信息、所述基本块的行号和所述基本块的块类型标识。
本申请实施例提供的基于程序分析结果的字节码插桩方法、装置及存储介质,通过基于程序的源代码划分的至少一个基本块的基本块信息,获取目标插桩点信息;基于所述目标插桩点信息,设置对应的目标插桩点;可以实现在设置插桩点之前,根据程序的源代码确定目标插桩点的位置;在程序启动过程中针对字节码进行动态插桩,基于插桩点获取程序源代码的运行信息,可以使测试的覆盖信息覆盖到基本块层级,提升测试的可靠性和可见性。
附图说明
图1为本申请实施例提供的基于程序分析结果的字节码插桩方法的可选流程示意图一;
图2为本申请实施例提供的基于程序分析结果的字节码插桩方法的可选流程示意图二;
图3为本申请实施例提供的静态分块表文件的可选数据结构示意图;
图4为本申请实施例提供的基于程序分析结果的字节码插桩方法的可选流程示意图三;
图5为本申请实施例提供的源代码静态分析的示意图;
图6为本申请实施例提供的基本块分类的示意图;
图7为本申请实施例提供的源代码对应的控制流程图;
图8为本申请实施例提供的获取控制流程图中的覆盖率信息的示意图;
图9为本申请实施例提供的基于程序分析结果的字节码插桩装置的可选结构示意图。
具体实施方式
以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
相关技术中,白盒测试工具必须使用到的技术是插桩技术。目前常用的字节码或者二进制代码插桩技术由于对字节码进行分析,导致源代码信息缺失,不能获取到源代码信息,也就不能获得程序的控制流信息,可视化能力弱;此外,在应用的过程中,一旦出现程序运行问题,也很难进行排查和调整,导致程序源代码的可靠性差。而源代码插桩技术(Source Code Analyzer Source Code Instrumentation,SASI),虽然可以提供最稳定,信息最全的测试能力,但其对源代码插桩以后,还需要重新打包编译,不仅流程相对较长,而且打包过程同时需要和持续集成(Continuous Integration,CI)以及开发人员对接,会增加从测试入口推进产品的难度。另外从发布角度,会产生两个发布包,一个是插桩代码的发布包,一个是原始代码编译的发布包。那么按照流程测试运行的是插桩代码,而发布是原始代码,在流程要求上也会存在一定的问题,有可能增加测试版和发布版对应不上的风险。
基于目前源代码运行监控方法中存在的问题,本申请提出基于程序分析结果的字节码插桩方法,能够解决现有技术方案中无法解决的技术难题和缺点。
图1示出了本申请实施例提供的基于程序分析结果的字节码插桩方法的可选流程示意图一,将根据各个步骤进行说明。
步骤S101,基于程序的源代码划分的至少一个基本块的基本块信息,获取目标插桩点信息。
在一些实施例中,基于程序分析结果的字节码插桩装置对程序源代码进行静态分析,将所述源代码根据不同的逻辑划分为不同类型的基本块;基于所述基本块的基本块信息,对所述基本块进行分类,并将所述基本块信息存储至数据库;和/或将所述基本块信息以文件的形式存储至服务器。
在一些实施例中,所述基本块信息包括以下至少一种:所述基本块所属的文件的ID、所述基本块的标识信息、所述基本块的行号和所述基本块的块类型标识。其中,所述基本块所属的文件的ID,用于表示候选插桩点或目标插桩点属于哪一个文件;所述基本块的标识信息可以是基本块的索引,用于表示所述基本块的标识,每一个基本块都具备唯一的基本块索引;所述基本块的行号,用于记录插桩点的位置,在插桩时,将所述目标插桩点设置在所述基本块的行号之前;所述基本块的块类型标识可以是8到16进制的数字,用于表示对应基本块的类型;所述基本块的块类型可以包括:顺序语句块、if节点块、if的代码体块、else节点块或else代码体块。
在一些实施例中,基于程序分析结果的字节码插桩装置基于程序的源代码划分的至少一个基本块的基本块信息,获取目标插桩点信息包括:基于以文件形式存储的所述程序的源代码划分的至少一个基本块的基本块信息,确定候选插桩点信息。
在一些实施例中,所述基于程序分析结果的字节码插桩装置基于所述程序的源代码划分的至少一个基本块的基本块信息,确定目标插桩点信息,包括:基于程序分析结果的字节码插桩装置基于以文件形式存储的至少一个基本块的基本块信息,确定候选插桩点信息和候选插桩点位置。所述候选插桩点可以是拟插桩点,所述候选插桩点需要经过进一步的处理才能确认所述候选插桩点能否插桩至对应的基本块,进而获取所述基本块的运行信息。
在一些实施例中,所述候选插桩点信息包括:基本块信息,和/或候选插桩点位置信息。其中,所述候选插桩点位置包括:待插桩的文件包括的基本块的行号之前。
在一些实施例中,所述基于程序分析结果的字节码插桩装置基于至少一个基本块的基本块信息,确定候选插桩点信息和候选插桩点位置,包括:基于以文件形式存储的至少一个基本块所属的文件的ID、所述基本块的索引、所述基本块的行号和所述基本块的块类型标识,确定所述候选插桩点信息和所述候选插桩点位置。
在一些实施例中,所述基于程序分析结果的字节码插桩装置基于所述程序的源代码划分的至少一个基本块的基本块信息,获取目标插桩点信息包括:基于所述候选插桩点信息对应的基本块的块类型标识判断所述基本块的块类型,在所述候选插桩点信息对应的基本块包括逻辑块的情况下,删除所述逻辑块对应的候选插桩点信息;确定所述候选插桩点信息中除已删除的候选插桩点信息之外的候选插桩点信息为目标插桩点信息。其中,所述判断所述候选插桩点信息对应的基本块的块类型可以包括:在所述候选插桩点信息对应的基本块的块类型标识是第一类型的形式的情况下,判断所述候选插桩点信息对应的基本块的块类型标识包括的第一字符是否等于第一预设字符;在所述第一字符等于第一预设字符的情况下,所述基本块是插桩块;或者,在所述第一字符不等于第一预设字符的情况下,所述基本块是逻辑块。
在一些实施例中,在所述基本块的块类型信息不是第一类型的情况下,所述基于程序分析结果的字节码插桩装置需要将所述8到16进制的基本块的块类型标识转换为第一类型,然后基于转换成第一类型的基本块的块类型标识,判断所述基本块的块类型;所述第一类型可以是2进制、8进制、10进制、16进制、32进制等类型;所述第一预设字符可以根据实际需要设置。
在一些实施例中,所述方法还包括:基于存储至数据库中的存储的至少一个基本块的基本块信息,确定所述源代码的控制流程图。
如此,在所述程序运行的过程中,通过读取以文件形式存储的基本块信息,可以确定候选插桩点信息和候选插桩点位置,进而在程序运行的过程中可以动态确认目标插桩点的信息和位置。
步骤S102,基于所述目标插桩点信息,设置对应的目标插桩点。
在一些实施例中,基于程序分析结果的字节码插桩装置基于所述目标插桩点信息,设置对应的目标插桩点,包括:基于程序分析结果的字节码插桩装置基于所述目标插桩点信息确定目标插桩点的代码,基于所述目标插桩点的代码设置对应的目标插桩点。其中,基于程序分析结果的字节码插桩装置基于所述目标插桩点信息确定目标插桩点的代码可以包括:基于所述候选插桩点信息对应的基本块的块类型标识,判断所述基本块是否为起始块;在所述目标插桩点信息对应的基本块是起始块的情况下,确定所述目标插桩点的代码包括第一字符串;或者,在所述目标插桩点信息对应的基本块不是起始块的情况下,确定所述目标插桩点的代码包括第二字符串。
在一些实施例中,所述基于程序分析结果的字节码插桩装置判断所述目标插桩点信息对应的基本块是否为起始块,包括:在所述候选插桩点信息对应的基本块的块类型标识是第一类型的形式的情况下,判断所述候选插桩点信息对应的基本块的块类型标识包括的第二字符是否等于第二预设字符;在所述第二字符等于第二预设字符的情况下,所述基本块是起始块;或者,在所述第二字符不等于第二预设字符的情况下,所述基本块是非起始块。
在一些实施例中,所述基于程序分析结果的字节码插桩装置基于所述目标插桩点的代码设置对应的目标插桩点,包括:根据目标插桩点的位置信息,将所述目标插桩点的代码插入至所述目标插桩点对应的基本块的行号之前。所述目标插桩点用于获取所述目标插桩点对应的基本块的运行信息。
如此,本申请实施例中,通过基于程序的源代码划分的至少一个基本块的基本块信息,获取目标插桩点信息;基于所述目标插桩点信息,设置对应的目标插桩点;在设置插桩点之前,根据程序的源代码确定目标插桩点的位置;在程序启动过程中针对字节码进行动态插桩,可以使测试的覆盖信息覆盖到基本块层级,提升测试的可靠性和可见性,并且在插桩过程中如果出现埋点失误的情况,可以根据源代码的静态分析来进行追溯,对错误插桩点的位置信息和插桩点信息进行还原。本申请实施例提供的基于程序分析结果的字节码插桩方法,在精准测试系统中可以实现简单部署。
图2示出了本申请实施例提供的基于程序分析结果的字节码插桩方法的可选流程示意图二,将根据各个步骤进行说明。
步骤S201,获取源代码包括的至少一个基本块信息。
在一些实施例中,基于程序分析结果的字节码插桩装置对程序源代码进行静态分析,将所述源代码根据不同的逻辑划分为不同类型的基本块;基于所述基本块的基本块信息,对所述基本块进行分类,并将所述基本块信息存储至数据库;和/或将所述基本块信息以文件的形式存储至服务器。
在一些实施例中,所述方法还包括:基于存储至数据库中的存储的至少一个基本块的基本块信息,确定所述源代码的控制流程图。
在一些实施例中,基于程序分析结果的字节码插桩装置获取源代码包括的至少一个基本块信息包括:对源代码进行静态分析,获取所述源代码包括的至少一个基本块信息。
在一些实施例中,所述基本块是指一个连续的程序语句序列,从它的开始进入,并从它的末尾离开,所述控制流中间没有中断或者分支。
在一些实施例中,所述基本块信息包括以下至少一种:所述基本块所属的文件的ID、所述基本块的标识信息、所述基本块的行号和所述基本块的块类型标识。其中,所述基本块所属的文件的ID,用于表示候选插桩点或目标插桩点属于哪一个文件;所述基本块的标识信息可以是基本块的索引,用于表示所述基本块的标识,每一个基本块都具备唯一的基本块索引;所述基本块的行号,用于记录插桩点的位置,在插桩时,将所述目标插桩点设置在所述基本块的行号之前;所述基本块的块类型标识可以是8到16进制的数字,用于表示对应基本块的类型;所述基本块的块类型可以包括:顺序语句块、if节点块、if的代码体块、else节点块或else代码体块。这些信息与版本信息一起组成了基本块信息。在一个版本中所有的基本块共用一个版本信息。在一个类中所有的基本块共用一个文件id。通过不同的数据的组合,可以保证在整个项目中基本块信息的唯一性。
步骤S202,基于程序的源代码划分的至少一个基本块的基本块信息,确定候选插桩点信息。
在一些实施例中,所述基于程序分析结果的字节码插桩装置基于所述程序的源代码划分的至少一个基本块的基本块信息,确定目标插桩点信息,包括:基于程序分析结果的字节码插桩装置基于以文件形式存储的至少一个基本块的基本块信息,确定候选插桩点信息和候选插桩点位置。所述候选插桩点可以是拟插桩点,所述候选插桩点需要经过进一步的处理才能确认所述候选插桩点能否插桩至对应的基本块,进而获取所述基本块的运行信息。
在一些实施例中,所述候选插桩点信息包括:基本块信息,和/或候选插桩点位置信息。其中,所述候选插桩点位置包括:待插桩的文件包括的基本块的行号之前。
在一些实施例中,所述基于程序分析结果的字节码插桩装置基于至少一个基本块的基本块信息,确定候选插桩点信息和候选插桩点位置,包括:基于以文件形式存储的至少一个基本块所属的文件的ID、所述基本块的索引、所述基本块的行号和所述基本块的块类型标识,确定所述候选插桩点信息和所述候选插桩点位置。
图3示出了本申请实施例提供的静态分块表文件的可选数据结构示意图,将根据各个部分进行说明。
在一些实施例中,所述静态分块表文件包括以下至少一种:项目信息、序列码、版本信息、需要插桩的文件列表和基本块信息。其中,所述项目信息表征被测试程序的相关信息,所述被测试程序的相关信息可以是项目名称;所述序列码表征所述静态分块表文件的版本对应的标识,当前版本的全部程序共用一个字段,所有的插桩点选择任一个版本的序列码即可;所述版本信息包括:版本相关信息和/或基本块信息;所述需要插桩的文件列表包括:在Java虚拟机(Java Virtual Machine,JVM)加载类之前,对类进行过滤,判断需要插桩的类,一个Java文件中包含有至少一个类,一个类中包含有至少一个函数,一个函数包含至少一个基本块。
图3中,静态分块表中的字段为:
其中,“com/action/GoLogin.java”表征Java文件的全路径(或名称);“com/action/GoLogin”表征Java类的路径;“test”表征函数名称;“()V”表征参数和返回值信息。通过Java文件的全路径、Java类的路径、函数名称和参数及返回值信息,可以唯一确定一个函数。
图3中,块列表中每一个基本块信息包括:文件ID(fileid)、索引(ddindex)、行号(line)和块类型(Type)标识。其中,所述文件的ID,用于表示候选插桩点或目标插桩点属于哪一个文件;所述基本块的索引,用于表示所述基本块的标识,每一个基本块都具备唯一的基本块索引;所述基本块的行号,用于记录插桩点的位置,在插桩时,将所述目标插桩点设置在所述基本块的行号之前;所述基本块的块类型标识可以是8到16进制的数字,用于表示对应基本块的类型;所述基本块的块类型可以包括:顺序语句块、if节点块、if的代码体块、else节点块或else代码体块。
步骤S203,获取目标插桩点信息。
在一些实施例中,所述基于程序分析结果的字节码插桩装置获取目标插桩点信息包括:基于所述候选插桩点信息对应的基本块的块类型标识判断所述基本块的块类型,在所述候选插桩点信息对应的基本块包括逻辑块的情况下,删除所述逻辑块对应的候选插桩点信息;确定所述候选插桩点信息中除已删除的候选插桩点信息之外的候选插桩点信息为目标插桩点信息。其中,所述基于所述候选插桩点信息对应的基本块的块类型标识判断所述基本块的块类型可以包括:在所述候选插桩点信息对应的基本块的块类型标识是第一类型的形式的情况下,判断所述候选插桩点信息对应的基本块的块类型标识包括的第一字符是否等于第一预设字符;在所述第一字符等于第一预设字符的情况下,所述基本块是插桩块;或者,在所述第一字符不等于第一预设字符的情况下,所述基本块是逻辑块。
在一些实施例中,在所述基本块的块类型信息不是第一类型的情况下,所述基于程序分析结果的字节码插桩装置需要将所述8到16进制的基本块的块类型标识转换为第一类型,然后基于转换成第一类型的基本块的块类型标识,判断所述基本块的块类型;所述第一类型可以是2进制、8进制、10进制、16进制、32进制等类型;所述第一预设字符可以根据实际需要设置。
如此,在所述程序运行的过程中,通过读取以文件形式存储的基本块信息,可以确定候选插桩点信息和候选插桩点位置,进而在程序运行的过程中可以动态确认目标插桩点的信息和位置。
步骤S204,基于所述目标插桩点信息确定目标插桩点的代码。
在一些实施例中,所述目标插桩点的代码至少包括:所述基本块是否为起始块的标记、文件ID、索引和序列码。其中,每一个字段使用空格隔开。
基于程序分析结果的字节码插桩装置基于所述目标插桩点信息确定目标插桩点的代码,基于所述目标插桩点的代码设置对应的目标插桩点。其中,基于程序分析结果的字节码插桩装置基于所述目标插桩点信息确定目标插桩点的代码可以包括:判断所述目标插桩点信息对应的基本块是否为起始块;在所述目标插桩点信息对应的基本块是起始块的情况下,确定所述目标插桩点的代码包括第一字符串;或者,在所述目标插桩点信息对应的基本块不是起始块的情况下,确定所述目标插桩点的代码包括第二字符串。
在一些实施例中,所述基于程序分析结果的字节码插桩装置判断所述目标插桩点信息对应的基本块是否为起始块,包括:在所述候选插桩点信息对应的基本块的块类型标识是第一类型的形式的情况下,判断所述候选插桩点信息对应的基本块的块类型标识包括的第二字符是否等于第二预设字符;在所述第二字符等于第二预设字符的情况下,所述基本块是起始块;或者,在所述第二字符不等于第二预设字符的情况下,所述基本块是非起始块。
在一些实施例中,所述第一字符串可以是1001;所述第二字符串可以是1000;所述目标插桩点的代码可以是:
其中,所述代码中“1001 1 0 15104052”为拼接的信息,“1001”表示当前块是函数开始块,“1”是文件ID、,“0”是索引,“15104052”是序列码。在“10001 3 15104052”的拼接信息中,“1000”表示当前块是非函数开始块,“1”是文件id,“2”是索引,“15104052”是序列码。在“1000 1 3 15104052”的拼接信息中,“1000”表示当前块是非函数开始块,“1”是文件id,“3”是索引,“15104052”是序列码。
步骤S205,基于所述目标插桩点的代码设置对应的目标插桩点。
在一些实施例中,所述基于程序分析结果的字节码插桩装置基于所述目标插桩点的代码设置对应的目标插桩点,包括:根据目标插桩点的位置信息,将所述目标插桩点的代码插入至所述目标插桩点对应的基本块的行号之前。所述目标插桩点用于获取所述目标插桩点对应的基本块的运行信息。
如此,本申请实施例通过对源代码静态分析确定了目标插桩点的位置,保证可以用一个指令完成插桩。而传统的字节码插桩需要在字节分析过程中根据不同的指令去做不同的插桩动作,复杂性高,稳定性差。此外,本申请实施例通过对源代码进行静态分析得到源代码信息,根据源代码信息计算出静态分块信息,根据静态分块信息去插桩字节码,此后,无论是字节码信息还是源代码信息都可以在程序运行的过程中得到,进而,也就能得到后续更多的覆盖率数据,包括控制流程图、覆盖率可视化、实时覆盖率等一系列数据。而传统字节码插桩由于是对字节码进行操作,导致源代码信息缺失,只能结合代码一行行的展示覆盖,并不能支持图形化的控制流上分析覆盖数据,覆盖可视化效果差。本申请实施例是根据源代码来计算出每一个目标插桩点的,在插桩过程中如果出现了埋点失误的情况,可以根据静态分块文件来进行追溯,对错误插桩点的位置信息和插桩点信息进行还原,进而排查问题出现的原因。
图4示出了本申请实施例提供的基于程序分析结果的字节码插桩方法的可选流程示意图三,将根据各个步骤进行说明。
步骤S301,对源代码进行静态分析,将源代码分成基本块。
在一些实施例中,所述基本块是指一个连续的程序语句序列,从它的开始进入,并从它的末尾离开,中间没有中断或者分支。
在一些实施例中,所述基于程序分析结果的字节码插桩装置对源代码进行静态分析,将源代码分成基本块包括:将源代码分成至少一个类,将所述至少一个类分成至少一个函数,将所述至少一个函数分成至少一个基本块。所述基本块根据代码逻辑的不同分为不同的类型的块,并通过块类型信息加以标识。
图5示出了本申请实施例提供的源代码静态分析的示意图,将结合步骤S301进行说明。
图5中,程序源代码经过静态分析后,被分成5个基本块,每个基本块的块类型标识从上至下依次为:02020000、01100000、02110000、06120000、02130000;其中,块类型标识为“02020000”的基本块为顺序语句块;块类型标识为“01100000”的基本块为if节点块;块类型标识为“02110000”的基本块为if的代码体块;块类型标识为“06120000”的基本块为else节点块;块类型标识为“02130000”的基本块为else代码体块。
步骤S302,根据基本块的基本块信息对基本块进行分类。
在一些实施例中,基于程序分析结果的字节码插桩装置对程序源代码进行静态分析,将所述源代码根据不同的逻辑划分为不同类型的基本块;基于所述基本块的基本块信息,对所述基本块进行分类,包括:基于基本块信息中的块类型标识对基本块进行分类,主要分成两类:插桩块和逻辑块。其中插桩块可以进行插桩点代码的拼接。逻辑块表示代码间的逻辑关系。
图6示出了本申请实施例提供的基本块分类的示意图,将结合步骤S302进行说明。
图6中,将图5中经过静态分析得到的5个基本块进行分类,在所述块类型标识为8到16进制的数字的情况下,依据所述块类型标识包括的第一字符对所述基本块进行分类,包括:在所述基本块对应的块类型标识的第一字符等于2的情况下,所述基本块是插桩块;在所述基本块对应的块类型标识的第一字符不等于2的情况下,所述基本块是逻辑块。
在一些实施例中,所述方法还包括:将所述基本块信息存储至数据库;和/或将所述基本块信息以文件的形式存储至服务器。
步骤S303,基于所述基本块的分类确认所述源代码对应的控制流程图。
在一些实施例中,所述基于程序分析结果的字节码插桩装置基于所述基本块的分类确认所述源代码对应的控制流程图包括:基于所述基本块对应的块类型标识确认所述源代码对应的控制流程图。
图7示出了本申请实施例提供的源代码对应的控制流程图。
根据块的索引顺序遍历,一个插桩块用一个长方形来表示,控制流的进入用一个指向图形的箭头来表示,控制流的离开用一个从图形向外的箭头来表示。当遍历至逻辑块时,说明当前代码中包含分支,根据逻辑块类型判断后面的yes与no对应的插桩块,将表示分支条件的逻辑块集成到一个菱形中进行表示。所有的插桩块以及逻辑块对应的图形和箭头连接在一起构成控制流程图。
步骤S304,基于程序的源代码划分的至少一个基本块的基本块信息,确定候选插桩点信息。
在一些实施例中,所述基于以文件形式存储的程序分析结果的字节码插桩装置获取基于程序的源代码划分的至少一个基本块的基本块信息,获取候选插桩点信息,包括:基于程序分析结果的字节码插桩装置基于至少一个基本块的基本块信息,确定候选插桩点信息和候选插桩点位置。所述候选插桩点可以是拟插桩点,所述候选插桩点需要经过进一步的处理才能确认所述候选插桩点能否插桩至对应的基本块,进而获取所述基本块的运行信息。
在一些实施例中,所述候选插桩点信息包括:基本块信息,和/或候选插桩点位置信息。其中,所述候选插桩点位置包括:待插桩的文件包括的基本块的行号之前。
在一些实施例中,所述基于程序分析结果的字节码插桩装置基于至少一个基本块的基本块信息,确定候选插桩点信息和候选插桩点位置,包括:基于至少一个基本块所属的文件的ID、所述基本块的索引、所述基本块的行号和所述基本块的块类型标识,确定所述候选插桩点信息和所述候选插桩点位置。
步骤S305,获取目标插桩点信息。
在一些实施例中,所述基于程序分析结果的字节码插桩装置获取目标插桩点信息包括:在所述程序的源代码运行的过程中,基于所述候选插桩点信息对应的基本块的块类型标识判断运行到的所述候选插桩点信息对应的基本块的块类型,在所述候选插桩点信息对应的基本块包括逻辑块的情况下,删除所述逻辑块对应的候选插桩点信息;确定所述候选插桩点信息中除已删除的候选插桩点信息之外的候选插桩点信息为目标插桩点信息。其中,所述判断所述候选插桩点信息对应的基本块的块类型可以包括:在所述候选插桩点信息对应的基本块的块类型标识是第一类型的形式的情况下,判断被运行的所述候选插桩点信息对应的基本块的块类型标识包括的第一字符是否等于第一预设字符;在所述第一字符等于第一预设字符的情况下,所述基本块是插桩块;或者,在所述第一字符不等于第一预设字符的情况下,所述基本块是逻辑块。
在一些实施例中,所述第一字符可以是所述基本块的块类型标识的第二个字符;所述第一字符可以是2。例如图5中,在所述基本块的块类型标识的左起第二个字符是2的情况下,所述基本块是插桩块,所述基本块对应的候选插桩点信息为目标插桩点信息;在所述基本块的块类型标识的左起第二个字符不是2的情况下,所述基本块是逻辑块,删除所述基本块对应的候选插桩点信息。
在一些实施例中,所述第一类型可以是2进制、8进制、10进制、16进制、32进制等类型;所述第一预设字符可以根据实际需要设置。
如此,可以实现在程序源代码运行的过程中,对运行到的候选插桩点信息对应的基本块进行判断,在所述基本块是插桩块的情况下,执行步骤S306。
步骤S306,基于所述目标插桩点信息确定目标插桩点的代码。
在一些实施例中,所述目标插桩点的代码至少包括:所述基本块是否为起始块的标记、文件ID、索引和序列码。其中,每一个字段使用空格隔开。
基于程序分析结果的字节码插桩装置基于所述目标插桩点信息确定目标插桩点的代码,基于所述目标插桩点的代码设置对应的目标插桩点。其中,基于程序分析结果的字节码插桩装置基于所述目标插桩点信息确定目标插桩点的代码可以包括:判断所述目标插桩点信息对应的基本块是否为起始块;在所述目标插桩点信息对应的基本块是起始块的情况下,确定所述目标插桩点的代码包括第一字符串;或者,在所述目标插桩点信息对应的基本块不是起始块的情况下,确定所述目标插桩点的代码包括第二字符串。
在一些实施例中,所述基于程序分析结果的字节码插桩装置判断所述目标插桩点信息对应的基本块是否为起始块,包括:在所述候选插桩点信息对应的基本块的块类型标识是第一类型的形式的情况下,判断所述候选插桩点信息对应的基本块的块类型标识包括的第二字符是否等于第二预设字符;在所述第二字符等于第二预设字符的情况下,所述基本块是起始块;或者,在所述第二字符不等于第二预设字符的情况下,所述基本块是非起始块。
在一些实施例中,所述第一字符串可以是1001;所述第二字符串可以是1000;所述目标插桩点的代码可以是:
其中,所述代码中“1001 1 0 15104052”为拼接的信息,“1001”表示当前块是函数起始块,“1”是文件ID、,“0”是索引,“15104052”是序列码。在“1000 1 3 15104052”的拼接信息中,“1000”表示当前块是非函数起始块,“1”是文件ID,“2”是索引,“15104052”是序列码。在“1000 1 3 15104052”的拼接信息中,“1000”表示当前块是非函数开始块,“1”是文件id,“3”是索引,“15104052”是序列码。
步骤S307,基于所述目标插桩点的代码设置对应的目标插桩点。
在一些实施例中,所述基于程序分析结果的字节码插桩装置基于所述目标插桩点的代码设置对应的目标插桩点,包括:根据目标插桩点的位置信息,将所述目标插桩点的代码插入至所述目标插桩点对应的基本块的行号之前。所述目标插桩点用于获取所述目标插桩点对应的基本块的运行信息。
步骤S308,获取源代码的运行信息。
在一些实施例中,基于程序分析结果的字节码插桩装置获取源代码的运行信息包括:在程序运行的过程中,获取控制流程图中的覆盖率信息。所述获取控制流程图中的覆盖率信息包括:将所述数据库中存储的控制流程图与所述已运行的基本块信息进行比对,获取所述源代码的运行信息。
图8示出了本申请实施例提供的获取控制流程图中的覆盖率信息的示意图。
图8中,以num的初始值为2开始;有阴影的基本块表示运行的节点;加粗的代码表示运行过的块以及对应的代码(如int num=2;);无阴影的块表示没有运行的节点;未加粗的代码表示没有运行的基本块以及代码。
如此,本申请实施例通过对源代码静态分析确定了目标插桩点的位置,保证可以用一个指令完成插桩。而传统的字节码插桩需要在字节分析过程中根据不同的指令去做不同的插桩动作,复杂性高,稳定性差。此外,本申请实施例通过分析源代码得到源代码信息,根据源代码信息计算出静态分块信息,根据静态分块信息去插桩字节码,此后,无论是字节码信息还是源代码信息都可以在程序运行的过程中得到,也就能得到后续更多的覆盖率数据,包括控制流程图,覆盖率可视化,实时覆盖率一系列数据。而传统字节码插桩由于是对字节码进行操作,导致源代码信息缺失,只能结合代码一行行的展示覆盖,并不能支持图形化的控制流上分析覆盖数据,覆盖可视化效果差。本申请实施例是根据源代码来计算出每一个目标插桩点的,在插桩过程中如果出现了埋点失误的情况,可以根据静态分块文件来进行追溯,对错误插桩点的位置信息和插桩点信息进行还原。进而排查问题出现的原因。并且,本申请提供的实施例中,基于基本块信息可以绘制出源代码的控制流程图,在后续程序运行的过程中,与已运行的基本块进行比对,得到覆盖率数据,提升测试的可见性。
图9示出了本申请实施例提供的基于程序分析结果的字节码插桩装置的可选结构示意图,将根据各个部分进行说明。
在一些实施例中,所述基于程序分析结果的字节码插桩装置400,至少包括:
获取单元401,用于基于程序的源代码划分的至少一个基本块的基本块信息,获取目标插桩点信息。
设置单元402,用于基于所述目标插桩点信息,设置对应的目标插桩点。
所述目标插桩点用于获取所述目标插桩点对应的基本块的运行信息。
在一些实施例中,所述装置400还包括:
确定单元403,用于基于所述程序的源代码划分的至少一个基本块的基本块信息,确定候选插桩点信息。
在一些实施例中,所述装置400还包括:
过滤单元404,用于在所述候选插桩点信息对应的基本块包括逻辑块的情况下,删除所述逻辑块对应的候选插桩点信息。
所述确定单元403,还用于确定所述候选插桩点信息中除已删除的候选插桩点信息之外的候选插桩点信息为目标插桩点信息。
所述确定单元403,还用于基于所述目标插桩点信息确定目标插桩点的代码。
所述设置单元402,用于基于所述目标插桩点的代码设置对应的目标插桩点。
在一些实施例中,所述装置400还包括:
判断单元405,用于判断所述目标插桩点信息对应的基本块是否为起始块;
所述确定单元403,还用于在所述目标插桩点信息对应的基本块是起始块的情况下,确定所述目标插桩点的代码包括第一字符串;或者,在所述目标插桩点信息对应的基本块不是起始块的情况下,确定所述目标插桩点的代码包括第二字符串。
在一些实施例中,所述候选插桩点信息包括:所述候选插桩点对应的基本块信息和所述候选插桩点的位置信息。
在一些实施例中,所述候选插桩点的位置信息包括:所述候选插桩点对应的基本块的代码的行号之前。
在一些实施例中,所述基本块信息包括以下至少一种:所述基本块所属的文件的身份标识号ID、所述基本块的标识信息、所述基本块的行号和所述基本块的块类型标识。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序命令相关的硬件来完成,前述的程序可以存储于一存储介质中,该程序在执行时,执行在第一应用运行过程中接收到基于第二应用的通知消息时,在电子设备屏幕上的第一区域响应所述通知消息;其中,所述第一区域小于单独运行第二应用时加载的输入法应用在所述电子设备屏幕上对应的区域。而前述的存储介质包括:移动存储设备、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干命令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (18)
1.基于程序分析结果的字节码插桩方法,其特征在于,所述方法包括:
基于程序的源代码划分的至少一个基本块的基本块信息,获取目标插桩点信息;
基于所述目标插桩点信息,设置对应的目标插桩点;
所述目标插桩点用于获取所述目标插桩点对应的基本块的运行信息。
2.根据权利要求1所述的方法,其特征在于,所述基于程序的源代码划分的至少一个基本块的基本块信息,获取目标插桩点信息,包括:
基于所述程序的源代码划分的至少一个基本块的基本块信息,确定候选插桩点信息。
3.根据权利要求2所述的方法,其特征在于,所述基于所述程序的源代码划分的至少一个基本块的基本块信息,获取目标插桩点信息包括:
在所述候选插桩点信息对应的基本块包括逻辑块的情况下,删除所述逻辑块对应的候选插桩点信息;
确定所述候选插桩点信息中除已删除的候选插桩点信息之外的候选插桩点信息为目标插桩点信息。
4.根据权利要求1所述的方法,其特征在于,所述基于所述目标插桩点信息,设置对应的目标插桩点,包括:
基于所述目标插桩点信息确定目标插桩点的代码;
基于所述目标插桩点的代码设置对应的目标插桩点。
5.根据权利要求4所述的方法,其特征在于,所述基于所述目标插桩点信息确定目标插桩点的代码,包括:
判断所述目标插桩点信息对应的基本块是否为起始块;
在所述目标插桩点信息对应的基本块是起始块的情况下,确定所述目标插桩点的代码包括第一字符串;
或者,在所述目标插桩点信息对应的基本块不是起始块的情况下,确定所述目标插桩点的代码包括第二字符串。
6.根据权利要求1所述的方法,其特征在于,所述候选插桩点信息包括:
所述候选插桩点对应的基本块信息和所述候选插桩点的位置信息。
7.根据权利要求6所述的方法,其特征在于,所述候选插桩点的位置信息包括:
所述候选插桩点对应的基本块的代码的行号之前。
8.根据权利要求1至7任一项所述的方法,其特征在于,所述基本块信息包括以下至少一种:
所述基本块所属的文件的身份标识号ID、所述基本块的标识信息、所述基本块的行号和所述基本块的块类型标识。
9.基于程序分析结果的字节码插桩装置,其特征在于,所述装置包括:
获取单元,用于基于程序的源代码划分的至少一个基本块的基本块信息,获取目标插桩点信息;
设置单元,用于基于所述目标插桩点信息,设置对应的目标插桩点;
所述目标插桩点用于获取所述目标插桩点对应的基本块的运行信息。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
确定单元,用于基于所述程序的源代码划分的至少一个基本块的基本块信息,确定候选插桩点信息。
11.根据权利要求10所述的装置,其特征在于,所述装置还包括:
过滤单元,用于在所述候选插桩点信息对应的基本块包括逻辑块的情况下,删除所述逻辑块对应的候选插桩点信息;
所述确定单元,还用于确定所述候选插桩点信息中除已删除的候选插桩点信息之外的候选插桩点信息为目标插桩点信息。
12.根据权利要求9所述的装置,其特征在于,
所述确定单元,还用于基于所述目标插桩点信息确定目标插桩点的代码;
设置单元,用于基于所述目标插桩点的代码设置对应的目标插桩点。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括:
判断单元,用于判断所述目标插桩点信息对应的基本块是否为起始块;
所述确定单元,用于在所述目标插桩点信息对应的基本块是起始块的情况下,确定所述目标插桩点的代码包括第一字符串;或者,在所述目标插桩点信息对应的基本块不是起始块的情况下,确定所述目标插桩点的代码包括第二字符串。
14.根据权利要求9所述的装置,其特征在于,所述候选插桩点信息包括:
所述候选插桩点对应的基本块信息和所述候选插桩点的位置信息。
15.根据权利要求14所述的装置,其特征在于,所述候选插桩点的位置信息包括:
所述候选插桩点对应的基本块的代码的行号之前。
16.根据权利要求9至15任一项所述的装置,其特征在于,所述基本块信息包括以下至少一种:
所述基本块所属的文件的身份标识号ID、所述基本块的标识信息、所述基本块的行号和所述基本块的块类型标识。
17.一种存储介质,存储有可执行程序,其特征在于,所述可执行程序被处理器执行时,实现权利要求1至8任一项所述的基于程序分析结果的字节码插桩方法。
18.基于程序分析结果的字节码插桩装置,包括存储器、处理器及存储在存储器上并能够由所述处理器运行的可执行程序,其特征在于,所述处理器运行所述可执行程序时执行如权利要求1至8任一项所述的基于程序分析结果的字节码插桩方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010671078.1A CN111913878B (zh) | 2020-07-13 | 2020-07-13 | 基于程序分析结果的字节码插桩方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010671078.1A CN111913878B (zh) | 2020-07-13 | 2020-07-13 | 基于程序分析结果的字节码插桩方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111913878A true CN111913878A (zh) | 2020-11-10 |
CN111913878B CN111913878B (zh) | 2023-09-15 |
Family
ID=73226414
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010671078.1A Active CN111913878B (zh) | 2020-07-13 | 2020-07-13 | 基于程序分析结果的字节码插桩方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111913878B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112463607A (zh) * | 2020-11-26 | 2021-03-09 | 苏州洞察云信息技术有限公司 | 一种判定语句取值的确认方法、装置及存储介质 |
CN112559322A (zh) * | 2020-11-20 | 2021-03-26 | 国家电网有限公司 | 一种基于动态插桩的软件分析方法及系统 |
CN115617687A (zh) * | 2022-10-31 | 2023-01-17 | 清华大学 | 程序插桩方法、装置、设备和存储介质 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070168670A1 (en) * | 2006-01-17 | 2007-07-19 | Dean Jeffrey R | Secure bytecode instrumentation facility |
US20090249308A1 (en) * | 2008-03-26 | 2009-10-01 | Avaya Inc. | Efficient Encoding of Instrumented Data in Real-Time Concurrent Systems |
CN101833500A (zh) * | 2010-04-07 | 2010-09-15 | 南京航空航天大学 | 一种基于Agent的嵌入式软件智能测试方法 |
CN102214142A (zh) * | 2011-07-15 | 2011-10-12 | 南京大学 | 无痕可管理的源代码手动定义标志插桩方法 |
CN102521123A (zh) * | 2011-11-24 | 2012-06-27 | 西安邮电学院 | 一种基于逻辑执行块的嵌入式软件测试插桩方法 |
CN102789413A (zh) * | 2011-05-23 | 2012-11-21 | 同济大学 | 一种并行程序的调试系统及方法 |
CN108268356A (zh) * | 2016-12-30 | 2018-07-10 | 中国移动通信集团浙江有限公司 | 基于字节码覆写的反向web插桩分析方法和web服务器 |
CN109885479A (zh) * | 2019-01-07 | 2019-06-14 | 中国人民解放军战略支援部队信息工程大学 | 基于路径记录截断的软件模糊测试方法及装置 |
CN110058999A (zh) * | 2019-03-13 | 2019-07-26 | 平安普惠企业管理有限公司 | 电子装置、应用程序异常定位方法及存储介质 |
CN110389764A (zh) * | 2019-06-19 | 2019-10-29 | 平安普惠企业管理有限公司 | 无用代码清理方法、设备、存储介质及装置 |
CN110414218A (zh) * | 2018-11-13 | 2019-11-05 | 腾讯科技(深圳)有限公司 | 内核检测方法、装置、电子设备及存储介质 |
-
2020
- 2020-07-13 CN CN202010671078.1A patent/CN111913878B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070168670A1 (en) * | 2006-01-17 | 2007-07-19 | Dean Jeffrey R | Secure bytecode instrumentation facility |
US20090249308A1 (en) * | 2008-03-26 | 2009-10-01 | Avaya Inc. | Efficient Encoding of Instrumented Data in Real-Time Concurrent Systems |
CN101833500A (zh) * | 2010-04-07 | 2010-09-15 | 南京航空航天大学 | 一种基于Agent的嵌入式软件智能测试方法 |
CN102789413A (zh) * | 2011-05-23 | 2012-11-21 | 同济大学 | 一种并行程序的调试系统及方法 |
CN102214142A (zh) * | 2011-07-15 | 2011-10-12 | 南京大学 | 无痕可管理的源代码手动定义标志插桩方法 |
CN102521123A (zh) * | 2011-11-24 | 2012-06-27 | 西安邮电学院 | 一种基于逻辑执行块的嵌入式软件测试插桩方法 |
CN108268356A (zh) * | 2016-12-30 | 2018-07-10 | 中国移动通信集团浙江有限公司 | 基于字节码覆写的反向web插桩分析方法和web服务器 |
CN110414218A (zh) * | 2018-11-13 | 2019-11-05 | 腾讯科技(深圳)有限公司 | 内核检测方法、装置、电子设备及存储介质 |
CN109885479A (zh) * | 2019-01-07 | 2019-06-14 | 中国人民解放军战略支援部队信息工程大学 | 基于路径记录截断的软件模糊测试方法及装置 |
CN110058999A (zh) * | 2019-03-13 | 2019-07-26 | 平安普惠企业管理有限公司 | 电子装置、应用程序异常定位方法及存储介质 |
CN110389764A (zh) * | 2019-06-19 | 2019-10-29 | 平安普惠企业管理有限公司 | 无用代码清理方法、设备、存储介质及装置 |
Non-Patent Citations (2)
Title |
---|
M. DMITRIEV: "Selective profiling of Java applications using dynamic bytecode instrumentation", 《IEEE INTERNATIONAL SYMPOSIUM ON - ISPASS PERFORMANCE ANALYSIS OF SYSTEMS AND SOFTWARE》, pages 141 - 150 * |
范琳 等: "基于顺序块的嵌入式白盒测试插桩技术研究", 《现代电子技术》, vol. 04, no. 18, pages 140 - 142 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112559322A (zh) * | 2020-11-20 | 2021-03-26 | 国家电网有限公司 | 一种基于动态插桩的软件分析方法及系统 |
CN112559322B (zh) * | 2020-11-20 | 2023-09-26 | 国家电网有限公司 | 一种基于动态插桩的软件分析方法及系统 |
CN112463607A (zh) * | 2020-11-26 | 2021-03-09 | 苏州洞察云信息技术有限公司 | 一种判定语句取值的确认方法、装置及存储介质 |
CN112463607B (zh) * | 2020-11-26 | 2024-03-15 | 苏州洞察云信息技术有限公司 | 一种判定语句取值的确认方法、装置及存储介质 |
CN115617687A (zh) * | 2022-10-31 | 2023-01-17 | 清华大学 | 程序插桩方法、装置、设备和存储介质 |
CN115617687B (zh) * | 2022-10-31 | 2023-08-25 | 清华大学 | 程序插桩方法、装置、设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111913878B (zh) | 2023-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7493596B2 (en) | Method, system and program product for determining java software code plagiarism and infringement | |
CN111913878A (zh) | 基于程序分析结果的字节码插桩方法、装置及存储介质 | |
US8312440B2 (en) | Method, computer program product, and hardware product for providing program individuality analysis for source code programs | |
CN108459954B (zh) | 应用程序漏洞检测方法和装置 | |
CN106776338B (zh) | 一种测试方法、装置及服务器 | |
CN110231994B (zh) | 内存分析方法、装置和计算机可读存储介质 | |
CN105550594A (zh) | 安卓应用文件的安全性检测方法 | |
CN110554962A (zh) | 回归测试的流程覆盖方法、服务器及计算机可读存储介质 | |
CN108984416B (zh) | 一种评估Maven环境中依赖冲突危险级别的方法 | |
CN110795357A (zh) | 程序监控方法及装置 | |
CN110716866A (zh) | 代码质量扫描方法、装置、计算机设备及存储介质 | |
US20130179735A1 (en) | Concurrent test instrumentation | |
US11868465B2 (en) | Binary image stack cookie protection | |
CN114579203A (zh) | 脚本文件检查方法、装置、电子设备及存储介质 | |
KR102380434B1 (ko) | 도커 파일 분석을 수행하는 도커 이미지 취약점 검사 장치 및 방법 | |
CN112597023A (zh) | 基于导图的案例管理方法、装置、计算机设备及存储介质 | |
CN114328168A (zh) | 异常检测方法、装置、计算机设备和存储介质 | |
CN111258562A (zh) | Java代码质量检查方法、装置、设备和存储介质 | |
CN115687129A (zh) | 一种覆盖率报告生成方法、装置、存储介质和计算机设备 | |
CN116501596A (zh) | 应用程序的测试方法及装置 | |
CN112784264B (zh) | 越狱状态检测方法、装置、设备及存储介质 | |
CN114780952B (zh) | 敏感应用调用场景的检测方法、系统及存储介质 | |
CN115658551B (zh) | 代码测试方法、存储介质、电子设备和装置 | |
CN115687158B (zh) | 一种协议软件的测试方法及装置 | |
CN109426601B (zh) | 一种对程序进行无状态检测的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |