CN118193387A - 用于代码分析的方法、装置、设备和介质 - Google Patents
用于代码分析的方法、装置、设备和介质 Download PDFInfo
- Publication number
- CN118193387A CN118193387A CN202410354845.4A CN202410354845A CN118193387A CN 118193387 A CN118193387 A CN 118193387A CN 202410354845 A CN202410354845 A CN 202410354845A CN 118193387 A CN118193387 A CN 118193387A
- Authority
- CN
- China
- Prior art keywords
- intermediate representation
- source code
- information
- analysis tool
- type information
- 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.)
- Pending
Links
- 238000004458 analytical method Methods 0.000 title claims abstract description 121
- 238000000034 method Methods 0.000 title claims abstract description 49
- 230000006870 function Effects 0.000 claims abstract description 44
- 230000008569 process Effects 0.000 claims abstract description 21
- 238000013507 mapping Methods 0.000 claims abstract description 15
- 238000012545 processing Methods 0.000 claims description 18
- 230000003068 static effect Effects 0.000 claims description 15
- 238000006243 chemical reaction Methods 0.000 claims description 10
- 238000004590 computer program Methods 0.000 claims description 9
- 238000000605 extraction Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 17
- 238000004891 communication Methods 0.000 description 8
- 239000000306 component Substances 0.000 description 6
- 230000006872 improvement Effects 0.000 description 4
- 238000001514 detection method Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 101000822695 Clostridium perfringens (strain 13 / Type A) Small, acid-soluble spore protein C1 Proteins 0.000 description 1
- 101000655262 Clostridium perfringens (strain 13 / Type A) Small, acid-soluble spore protein C2 Proteins 0.000 description 1
- 238000006424 Flood reaction Methods 0.000 description 1
- 101000655256 Paraclostridium bifermentans Small, acid-soluble spore protein alpha Proteins 0.000 description 1
- 101000655264 Paraclostridium bifermentans Small, acid-soluble spore protein beta Proteins 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000010921 in-depth analysis Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
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/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
根据本公开的实施例,提供了用于代码分析的方法、装置、设备和介质。该方法包括:获得在目标编译器对源代码进行编译的过程中生成的第一中间表示,第一中间表示符合目标编译器对应的中间表示格式;提取第一中间表示中的第一类型信息和第一控制流信息,第一类型信息指示源代码中的变量和函数的类型,第一控制流信息指示源代码中的函数控制流;根据源代码的编程语言与目标代码分析工具之间的指令映射关系,基于第一类型信息和第一控制信息,将第一中间表示转换为第二中间表示,第二中间表示符合目标代码分析工具的中间表示格式;以及利用目标代码分析工具,基于第二中间表示来确定针对源代码的分析结果。由此,实现了准确、可靠的代码分析。
Description
技术领域
本公开的示例实施例总体涉及计算机技术领域,特别地涉及用于代码分析的方法、装置、设备和计算机可读存储介质。
背景技术
编译器和程序分析一直是计算机科学领域的关键组成部分。编译器在程序开发周期(这个周期也可以被称之为编译期)中扮演了关键的角色。编译器的主要任务是将高级编程语言代码转化为机器可执行代码,以便计算机能够理解和执行。程序分析旨在确保程序的质量、性能和安全性。静态程序分析和动态程序分析是程序分析的两种主要方法,其中静态程序分析是在代码运行之前对程序进行检测,以识别潜在问题和错误。期待提升编译器和静态程序分析的兼容性,以获取更为准确的分析结果。
发明内容
在本公开的第一方面,提供了一种代码分析的方法。该方法包括:获得在目标编译器对源代码进行编译的过程中生成的第一中间表示,第一中间表示符合目标编译器对应的中间表示格式;提取第一中间表示中的第一类型信息和第一控制流信息,第一类型信息指示源代码中的变量和函数的类型,第一控制流信息指示源代码中的函数控制流;根据源代码的编程语言与目标代码分析工具之间的指令映射关系,基于第一类型信息和第一控制信息,将第一中间表示转换为第二中间表示,第二中间表示符合目标代码分析工具的中间表示格式;以及利用目标代码分析工具,基于第二中间表示来确定针对源代码的分析结果。
在本公开的第二方面,提供了一种用于代码分析的装置。该装置包括:第一表示获取模块,被配置为获得在目标编译器对源代码进行编译的过程中生成的第一中间表示,第一中间表示符合目标编译器对应的中间表示格式;第一信息提取模块,被配置为提取第一中间表示中的第一类型信息和第一控制流信息,第一类型信息指示源代码中的变量和函数的类型,第一控制流信息指示源代码中的函数控制流;第二表示获取模块,被配置为根据源代码的编程语言与目标代码分析工具之间的指令映射关系,基于第一类型信息和第一控制信息,将第一中间表示转换为第二中间表示,第二中间表示符合目标代码分析工具的中间表示格式;以及分析结果确定模块,被配置为利用目标代码分析工具,基于第二中间表示来确定针对源代码的分析结果。
在本公开的第三方面,提供了一种电子设备。该设备包括至少一个处理单元;以及至少一个存储器,至少一个存储器被耦合到至少一个处理单元并且存储用于由至少一个处理单元执行的指令。指令在由至少一个处理单元执行时使设备执行第一方面的方法。
在本公开的第四方面,提供了一种计算机可读存储介质。该介质上存储有计算机程序,计算机程序被处理器执行时实现第一方面的方法。
在本公开的第五方面,提供了一种计算机程序产品。该计算机程序产品被有形地存储在计算机存储介质中并且包括计算机可执行指令,计算机可执行指令在由设备执行时使设备执行第一方面的方法。
应当理解,该部分中所描述的内容并非旨在限定本公开的实施例的关键特征或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的描述而变得容易理解。
附图说明
结合附图并参考以下详细说明,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标记表示相同或相似的元素,其中:
图1示出了能够在其中实现本公开的实施例的示例环境的示意图;
图2示出了根据本公开的一些实施例的用于代码分析的过程的流程图;
图3示出了根据本公开的一些实施例的代码-中间表示转换的示例;
图4示出了根据本公开的一些实施例的代码分析的过程的示意图;
图5示出了根据本公开的一些实施例的用于代码分析的装置的示意性结构框图;以及
图6示出了其中可以实现本公开的一个或多个实施例的电子设备。
具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中示出了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反,提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
在本公开的实施例的描述中,术语“包括”及其类似用语应当理解为开放性包含,即“包括但不限于”。术语“基于”应当理解为“至少部分地基于”。术语“一个实施例”或“该实施例”应当理解为“至少一个实施例”。术语“一些实施例”应当理解为“至少一些实施例”。下文还可能包括其他明确的和隐含的定义。
可以理解的是,本技术方案所涉及的数据(包括但不限于数据本身、数据的获取或使用)应当遵循相应法律法规及相关规定的要求。
可以理解的是,在使用本公开各实施例公开的技术方案之前,均应当根据相关法律法规通过适当的方式对本公开所涉及个人信息的类型、使用范围、使用场景等告知用户并获得用户的授权。
例如,在响应于接收到用户的主动请求时,向用户发送提示信息,以明确地提示用户,其请求执行的操作将需要获取和使用到用户的个人信息,从而使得用户可以根据提示信息来自主地选择是否向执行本公开技术方案的操作的电子设备、应用程序、服务器或存储介质等软件或硬件提供个人信息。
作为一种可选的但非限制性的实现方式,响应于接收到用户的主动请求,向用户发送提示信息的方式,例如可以是弹出窗口的方式,弹出窗口中可以以文字的方式呈现提示信息。此外,弹出窗口中还可以承载供用户选择“同意”或“不同意”向电子设备提供个人信息的选择控件。
可以理解的是,上述通知和获取用户授权过程仅是示意性的,不对本公开的实现方式构成限定,其他满足相关法律法规的方式也可应用于本公开的实现方式中。
图1示出了能够在其中实现本公开的实施例的示例环境100的示意图。在环境100中,电子设备110可以获取源代码102并生成针对源代码102的分析结果112。源代码102可以是电子设备110经由获取到的用户输入所确定的代码(例如,源代码102可以是用户经由输入框输入电子设备110的),也可以是电子设备110本地的代码。源代码102可以是任意适当编程语言(例如Swift语言、C语言、C++语言等等)的代码,本公开对此不作限定。分析结果112可以指示源代码102是否存在问题和错误,其可以帮助用户对源代码112进行改进和调整。
电子设备110可以采用任意适当方式来获取针对源代码102的分析结果112。例如,电子设备110可以利用任意适当的代码分析工具(例如任意适当的代码分析应用或任意适当的代码分析模型)来确定针对源代码102的分析结果112。在一些实施例中,电子设备110可以利用编译器120对源代码102执行编译,并利用代码分析工具130,基于编译过程中产生的中间表示,确定针对源代码102的分析结果112。编译器120和/或代码分析工具130可以被部署在电子设备110本地,也可以被部署在其他电子设备(例如远端设备)。
电子设备110可以是任何类型的具有计算能力的设备,包括终端设备或服务端设备。终端设备可以是任何类型的移动终端、固定终端或便携式终端,包括移动手机、台式计算机、膝上型计算机、笔记本计算机、上网本计算机、平板计算机、媒体计算机、多媒体平板、个人通信系统(PCS)设备、个人导航设备、个人数字助理(PDA)、音频/视频播放器、数码相机/摄像机、定位设备、电视接收器、无线电广播接收器、电子书设备、游戏设备或者前述各项的任何组合,包括这些设备的配件和外设或者其任何组合。服务端设备例如可以包括计算系统/服务器,诸如大型机、边缘计算节点、云环境中的计算设备,等等。
应当理解,仅出于示例性的目的描述环境100的结构和功能,而不暗示对于本公开的范围的任何限制。
如上文所提及的,编译器的主要任务是将高级编程语言代码转化为机器可执行代码,以便计算机能够理解和执行。这个过程通常包括词法分析、语法分析、语义分析和代码生成等步骤。编译器的性能和质量对于最终生成的可执行代码的效率和可维护性至关重要。
示例性地,针对Swift编程语言(一种现代的高级编程语言,它提供了强大的类型系统、高效的性能和丰富的标准库),编译Swift代码的Swift编译器是Swift编程生态系统的核心组成部分,其可以将Swift源代码转化为中间表示形式(IntermediateRepresentation,简称IR),即SIL。
静态程序分析(也可以叫做静态代码分析)是在代码运行之前对程序进行检测,以识别潜在问题和错误。静态程序分析通过对源代码进行深入分析,能够自动检测代码中的潜在问题,如内存泄漏、数据竞争和空指针引用等。静态程序分析对于大规模代码库的维护和改进至关重要。
传统上的编译器和静态代码分析往往使用源代码的不同中间表示形式(也可以叫做中间表示格式)、不同的控制流以及不同的类型信息。因此,编译器和静态代码分析之间往往无法直接进行兼容,需要对编译器的中间表示形式进行修改。
有鉴于此,根据本公开的实施例,提供了一种代码分析的改进方案。根据该方案,获得在目标编译器对源代码进行编译的过程中生成的第一中间表示,第一中间表示符合目标编译器对应的中间表示格式。提取第一中间表示中的第一类型信息和第一控制流信息,第一类型信息指示源代码中的变量和函数的类型,第一控制流信息指示源代码中的函数控制流。根据源代码的编程语言与目标代码分析工具之间的指令映射关系,基于第一类型信息和第一控制信息,将第一中间表示转换为第二中间表示,第二中间表示符合目标代码分析工具的中间表示格式。利用目标代码分析工具,基于第二中间表示来确定针对源代码的分析结果。
以此方式,提供了一种改善编程语言的编译器和程序分析领域关键问题的改进方案,改善了编程语言和代码分析工具之间的兼容性和互操作性,以及实现了方便且准确可靠的静态代码分析。
以下将继续参考附图描述本公开的一些示例实施例。
图2示出了根据本公开的一些实施例的用于代码分析的过程200的流程图。为便于讨论,将参考图1的环境100来描述过程200。过程200可以被实现在电子设备110处。
在框210,电子设备110获得在目标编译器(例如,编译器120)对源代码102进行编译的过程中生成的第一中间表示。第一中间表示符合目标编译器对应的中间表示格式。
这里的目标编译器也即将源代码转化为机器可执行代码的编译器,其可以被部署在电子设备110本地,也可以被部署在其他电子设备(例如远端设备)。以源代码为Swift编程语言为例,目标编译器也即Swift编译器,第一中间表示也即符合Swift编译器对应的中间表示格式的SIL。
在框220,电子设备110提取第一中间表示中的第一类型信息和第一控制流信息,第一类型信息指示源代码中的变量和函数的类型,第一控制流信息指示源代码中的函数控制流。函数控制流可以为多种形式,例如代码形式、图形式等等。图形式的函数控制流可以被可视化为控制流图(Control Flow Graph,简称CFG),其可以帮助用户方便快捷地了解源代码的控制流信息。
这里的第一类型信息也可以被称之为类型环境(Type Environment,简称Tenv),其例如可以包括源代码的编程语言库中的类型信息和自定义类型信息。源代码的编程语言库中的类型信息例如可以包括丰富的内置类型,如整数、浮点数、字符串等,以及强大的标准库,包括集合类型、函数类型等。自定义类型信息可以是用户(例如开发者)所自行定义的信息,其例如可以包括用户自行定义的数据结结构、类和协议等等,其可以是针对特定需求的类型信息。自定义类型信息例如还可以包括从外部库(源代码的编程语言库之外的库)所导入的类型信息。第一类型信息可以通过维护编程语言库中的类型信息,来使得后续分析工具可以正确地理解和处理这些类型的操作。第一类型信息例如可以负责存储和提供与第一中间表示中变量和函数参数相关联的类型信息(也即源代码的编程语言库中的类型信息和自定义类型信息),这些信息对静态分析至关重要。第一类型信息的存在确保了分析工具可以正确识别和处理第一类型信息,从而保持了源代码的原本逻辑。
示例性地,以源代码为Swift编程语言为例,第一类型信息可以包括Swift编程语言库中的类型信息和自定义类型信息,其可以提供与SIL中变量和函数参数相关联的类型信息。例如,若SIL包括class a、class b、class c三个参数,其中b继承a,c继承b,则第一类型信息可以指示包括a、b、c三个类,且这三个类中有一定的继承关系。由于Swift编程语言十分灵活,SIL中的变量和函数参数也十分复杂。第一类型信息可以帮助了解SIL中的变量和函数参数,也即有助于提高对SIL的理解能力。
关于提取第一中间表示中的第一类型信息和第一控制流信息的具体方式,在一些实施例中,电子设备110可以在目标编译器中,利用第一编译器流水线来提取第一中间表示中的类型信息和控制流信息。示例性地,以源代码为Swift编程语言为例,第一编译器流水线可以被称之为的Swift Pass,电子设备110例如可以利用Swift Pass对SIL进行处理以提取到第一中间表示中的类型信息和控制流信息。需要注意的是,第一编译器流水线(例如Swift Pass)其仅用于构建代码分析时需要的控制流图与类型环境,而不对原有的SIL进行修改。
在一些实施例中,在提取第一中间表示中的第一类型信息和第一控制流信息之前,电子设备110还可以对第一中间表示中的泛型参数执行泛型实例化,以得到实例化后的第一中间表示。泛型参数允许用户(例如开发者)在编写代码时使用一些以后才指定的类型,并在实例化时指明这些类型。电子设备110例如可以在目标编译器中,利用第二编译器流水线来对第一中间表示中的泛型参数执行泛型实例化。第二编译器流水线例如可以为用于在编译器实例化泛型参数的泛型实例化Pass,其和第一编译器流水线可以是相同类型的编译器流水线,也可以是不同类型的编译器流水线。例如,电子设备110可以借助另一个Swift Pass来对SIL中的泛型参数执行泛型实例化。由此,用户可以借助泛型参数来提高代码的灵活性和重用性。电子设备110也可以根据泛型参数和第二编译器流水线来更准确地了解变量和函数参数的类型,从而可以为后续的代码分析提供更多的上下文信息。
在框230,电子设备110根据源代码的编程语言与目标代码分析工具之间的指令映射关系,基于第一类型信息和第一控制信息,将第一中间表示转换为第二中间表示,第二中间表示符合目标代码分析工具的中间表示格式。这里的目标代码分析工具可以为任意适当的代码分析工具,本公开对此不作限定。在一些实施例中,目标代码分析工具可以包括静态代码分析工具(例如Infer工具)。
在一些实施例中,源代码的编程语言与目标代码分析工具之间的指令映射关系包括从编程语言中的每个指令类型到目标代码分析工具中对应指令类型的转换规则。这样的转换规则例如可以是用户基于第一中间表示中的每种指令的行为所自行开发出来的规则(也即可以为用户对每种指令进行深度理解后所开发出的规则)。当然,这样的转换规则还可以是预先被确定好的,本公开对此不作限定。电子设备110可以基于这样的转换规则来对各种指令进行针对性的转化,这可以确保代码在不同分析工具之间的正确性和一致性。
示例性地,以源代码为Swift编程语言且目标代码分析工具为Infer工具为例(其中符合Infer工具的中间表示格式的第二中间表示也可以被称之为Infer工具SIL或InferSIL),编程语言中的指令类型例如可以为SIL所包括的指令类型,目标代码分析工具中的指令类型例如可以为Infer SIL所包括的指令类型,SIL所包括的指令类型要远远多于InferSIL所包括的指令类型(例如,SIL包括192种指令类型,而Infer SIL仅包括Load、Store、Call、Prune和Metadata等五种指令类型,其中Load指令通常用于加载内存中的数据,Store指令用于存储数据,Call指令用于调用函数,Prune指令用于条件分支,而Metadata指令则包含有关程序的元数据信息)。从编程语言中的每个指令类型到目标代码分析工具中对应指令类型的转换规则例如可以为SIL所包括的大量的指令类型和Infer SIL所包括的少量的指令类型之间的转换规则(也即SIL中任意某个指令类型可以被转化为Infer SIL中的哪种指令类型)。可以理解,仅以Infer工具为例进行说明,本公开的实施例可以被应用到其他静态代码分析工具。
在一些实施例中,在先前对第一中间表示中的泛型参数执行泛型实例化以得到实例化后的第一中间表示的情况下,电子设备110可以将实例化后的第一中间表示转换为第二中间表示。
在一些实施例中,电子设备110还可以根据源代码的编程语言与目标代码分析工具之间的指令映射关系,将第一类型信息和第一控制信息分别转换为第二类型信息和第二控制信息。这里第二类型信息例如可以指示源代码中的变量和函数的类型在目标代码分析工具中对应的变量和函数的类型,第二控制流信息例如可以指示源代码中的函数控制流在目标代码分析工具中对应的函数控制流。与第一类型信息类似地,第二类型信息也可以被称之为类型环境,其例如可以包括目标代码分析工具中的类型信息和自定义类型信息。
由此,可以将编译时的第一类型信息和第一控制信息转换为匹配于目标代码分析工具的第二类型信息和第二控制信息,这有助于使得目标代码分析工具能够准确地分析源代码的控制信息和类型信息,从而提供更准确、可靠的程序分析结果。
图3示出了根据本公开的一些实施例的代码-中间表示转换的示例300。如图3所示,电子设备110可以利用编译器(例如,Swift编译器)将Swift源代码310中的第7行代码至第12行代码(也即虚线框301所框住的部分)转换成对应的中间表示Swift SIL 320。进一步地,电子设备110还可以基于Swift编程语言与Infer工具之间的指令映射关系,将示SwiftSIL 320转换为符合Infer工具的中间表示格式要求的Infer SIL 330。在图3中,将InferSIL 330示出为图控制流的视觉表示形式,但其也可以是其他表示形式。
在框240,电子设备110利用目标代码分析工具(例如,代码分析工具130),基于第二中间表示来确定针对源代码102的分析结果112。
在一些实施例中,电子设备110可以将第二中间表示输入给目标代码分析工具,并从目标代码分析工具处获取针对源代码的分析结果。由于第二中间表示符合目标代码分析工具的中间表示格式,因此,目标代码分析工具可以直接按照常规方式对第二中间表示执行代码分析,提供对应的分析结果。
图4示出了根据本公开的一些实施例的代码分析的过程400的示意图。如图4所示,电子设备110可以获取源代码102,并将源代码102提供给编译器120。备选地或者附加地,电子设备110也可以直接经由编译器120获取到源代码102,在这种情况下,电子设备110无需再单独将源代码102提供给编译器120。电子设备110可以获得(410)在编译器120对源代码102进行编译的过程中生成的第一中间表示401。电子设备110可以对第一中间表示401中的泛型参数执行(420)泛型实例化,得到实例化后的第一中间表示402。泛型实例化也可以是在编译器120内执行的。电子设备110进而可以将泛型实例化后的第一中间表示402转换(430)为第二中间表示403。电子设备110可以将第二中间表示403提供(440)给代码分析工具130。代码分析工具130可以基于获取到的第二中间表示403生成针对源代码102的分析结果112。电子设备110可以从代码分析工具120处获取(450)到该分析结果112。
综上所述,在本公开的实施例中,提供了一种改善编程语言编译器和程序分析领域关键问题的新技术路线,改善了编程语言和代码分析工具之间的兼容性和互操作性,以及实现了准确、可靠的静态代码分析。
本公开的实施例还提供了用于实现上述方法或过程的相应装置。图5示出了根据本公开的一些实施例的用于代码分析的装置500的示意性结构框图。装置500可以被实现为或者被包括在图1的电子设备110中。装置500中的各个模块/组件可以由硬件、软件、固件或者它们的任意组合来实现。
如图所示,装置500包括第一表示获取模块510,被配置为获得在目标编译器对源代码进行编译的过程中生成的第一中间表示,第一中间表示符合目标编译器对应的中间表示格式。装置500还包括第一信息提取模块520,被配置为提取第一中间表示中的第一类型信息和第一控制流信息,第一类型信息指示源代码中的变量和函数的类型,第一控制流信息指示源代码中的函数控制流。装置500还包括第二表示获取模块530,被配置为根据源代码的编程语言与目标代码分析工具之间的指令映射关系,基于第一类型信息和第一控制信息,将第一中间表示转换为第二中间表示,第二中间表示符合目标代码分析工具的中间表示格式。装置500还包括分析结果确定模块540,被配置为利用目标代码分析工具,基于第二中间表示来确定针对源代码的分析结果。
在一些实施例中,装置500还包括:信息转换模块,被配置为根据源代码的编程语言与目标代码分析工具之间的指令映射关系,将第一类型信息和第一控制信息分别转换为第二类型信息和第二控制信息,第二类型信息指示源代码中的变量和函数的类型在目标代码分析工具中对应的变量和函数的类型,第二控制流信息指示源代码中的函数控制流在目标代码分析工具中对应的函数控制流。
在一些实施例中,第一信息提取模块520具体被配置为:在目标编译器中,利用第一编译器流水线来提取第一中间表示中的第一类型信息和第一控制流信息。
在一些实施例中,第一类型信息包括源代码的编程语言库中的类型信息和自定义类型信息。
在一些实施例中,装置500还包括:实例化执行模块,被配置为对第一中间表示中的泛型参数执行泛型实例化,得到实例化后的第一中间表示;并且第二表示获取模块530具体被配置为:将实例化后的第一中间表示转换为第二中间表示。
在一些实施例中,实例化执行模块具体被配置为:在目标编译器中,利用第二编译器流水线来对第一中间表示中的泛型参数执行泛型实例化。
在一些实施例中,源代码的编程语言与目标代码分析工具之间的指令映射关系包括:从编程语言中的每个指令类型到目标代码分析工具中对应指令类型的转换规则。
在一些实施例中,目标代码分析工具包括静态代码分析工具。
装置500中所包括的单元和/或模块可以利用各种方式来实现,包括软件、硬件、固件或其任意组合。在一些实施例中,一个或多个单元和/或模块可以使用软件和/或固件来实现,例如存储在存储介质上的机器可执行指令。除了机器可执行指令之外或者作为替代,装置500中的部分或者全部单元和/或模块可以至少部分地由一个或多个硬件逻辑组件来实现。作为示例而非限制,可以使用的示范类型的硬件逻辑组件包括现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准品(ASSP)、片上系统(SOC)、复杂可编程逻辑器件(CPLD),等等。
图6示出了其中可以实施本公开的一个或多个实施例的电子设备600的框图。应当理解,图6所示出的电子设备600仅仅是示例性的,而不应当构成对本文所描述的实施例的功能和范围的任何限制。图6所示出的电子设备600可以用于实现图1的电子设备110或图5的装置500。
如图6所示,电子设备600是通用计算设备的形式。电子设备600的组件可以包括但不限于一个或多个处理器或处理单元610、存储器620、存储设备630、一个或多个通信单元640、一个或多个输入设备650以及一个或多个输出设备660。处理单元610可以是实际或虚拟处理器并且能够根据存储器620中存储的程序来执行各种处理。在多处理器系统中,多个处理单元并行执行计算机可执行指令,以提高电子设备600的并行处理能力。
电子设备600通常包括多个计算机存储介质。这样的介质可以是电子设备600可访问的任何可以获得的介质,包括但不限于易失性和非易失性介质、可拆卸和不可拆卸介质。存储器620可以是易失性存储器(例如寄存器、高速缓存、随机访问存储器(RAM))、非易失性存储器(例如,只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、闪存)或它们的某种组合。存储设备630可以是可拆卸或不可拆卸的介质,并且可以包括机器可读介质,诸如闪存驱动、磁盘或者任何其他介质,其可以能够用于存储信息和/或数据并且可以在电子设备600内被访问。
电子设备600可以进一步包括另外的可拆卸/不可拆卸、易失性/非易失性存储介质。尽管未在图6中示出,可以提供用于从可拆卸、非易失性磁盘(例如“软盘”)进行读取或写入的磁盘驱动和用于从可拆卸、非易失性光盘进行读取或写入的光盘驱动。在这些情况中,每个驱动可以由一个或多个数据介质接口被连接至总线(未示出)。存储器620可以包括计算机程序产品625,其具有一个或多个程序模块,这些程序模块被配置为执行本公开的各种实施例的各种方法或动作。
通信单元640实现通过通信介质与其他电子设备进行通信。附加地,电子设备600的组件的功能可以以单个计算集群或多个计算机器来实现,这些计算机器能够通过通信连接进行通信。因此,电子设备600可以使用与一个或多个其他服务器、网络个人计算机(PC)或者另一个网络节点的逻辑连接来在联网环境中进行操作。
输入设备650可以是一个或多个输入设备,例如鼠标、键盘、追踪球等。输出设备660可以是一个或多个输出设备,例如显示器、扬声器、打印机等。电子设备600还可以根据需要通过通信单元640与一个或多个外部设备(未示出)进行通信,外部设备诸如存储设备、显示设备等,与一个或多个使得用户与电子设备600交互的设备进行通信,或者与使得电子设备600与一个或多个其他电子设备通信的任何设备(例如,网卡、调制解调器等)进行通信。这样的通信可以经由输入/输出(I/O)接口(未示出)来执行。
根据本公开的示例性实现方式,提供了一种计算机可读存储介质,其上存储有计算机可执行指令,其中计算机可执行指令被处理器执行以实现上文描述的方法。根据本公开的示例性实现方式,还提供了一种计算机程序产品,计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括计算机可执行指令,而计算机可执行指令被处理器执行以实现上文描述的方法。
这里参照根据本公开实现的方法、装置、设备和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其他可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
可以把计算机可读程序指令加载到计算机、其他可编程数据处理装置、或其他设备上,使得在计算机、其他可编程数据处理装置或其他设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其他可编程数据处理装置、或其他设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本公开的多个实现的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本公开的各实现,上述说明是示例性的,并非穷尽性的,并且也不限于所公开的各实现。在不偏离所说明的各实现的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实现的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其他普通技术人员能理解本文公开的各个实现方式。
Claims (12)
1.一种代码分析的方法,包括:
获得在目标编译器对源代码进行编译的过程中生成的第一中间表示,所述第一中间表示符合所述目标编译器对应的中间表示格式;
提取所述第一中间表示中的第一类型信息和第一控制流信息,所述第一类型信息指示所述源代码中的变量和函数的类型,所述第一控制流信息指示所述源代码中的函数控制流;
根据所述源代码的编程语言与目标代码分析工具之间的指令映射关系,基于所述第一类型信息和所述第一控制信息,将所述第一中间表示转换为第二中间表示,所述第二中间表示符合所述目标代码分析工具的中间表示格式;以及
利用所述目标代码分析工具,基于所述第二中间表示来确定针对所述源代码的分析结果。
2.根据权利要求1所述的方法,还包括:
根据所述源代码的编程语言与目标代码分析工具之间的指令映射关系,将所述第一类型信息和所述第一控制信息分别转换为第二类型信息和第二控制信息,所述第二类型信息指示所述源代码中的变量和函数的类型在所述目标代码分析工具中对应的变量和函数的类型,所述第二控制流信息指示所述源代码中的函数控制流在所述目标代码分析工具中对应的函数控制流。
3.根据权利要求1所述的方法,其中提取所述第一中间表示中的第一类型信息和第一控制流信息包括:
在所述目标编译器中,利用第一编译器流水线来提取所述第一中间表示中的第一类型信息和第一控制流信息。
4.根据权利要求1所述的方法,其中所述第一类型信息包括所述源代码的编程语言库中的类型信息和自定义类型信息。
5.根据权利要求1所述的方法,所述方法还包括:
对所述第一中间表示中的泛型参数执行泛型实例化,得到实例化后的第一中间表示;并且
其中将所述第一中间表示转换为第二中间表示包括:
将所述实例化后的第一中间表示转换为所述第二中间表示。
6.根据权利要求5所述的方法,其中对所述第一中间表示中的泛型参数执行泛型实例化包括:
在所述目标编译器中,利用第二编译器流水线来对所述第一中间表示中的泛型参数执行泛型实例化。
7.根据权利要求1所述的方法,其中所述源代码的编程语言与目标代码分析工具之间的所述指令映射关系包括:从所述编程语言中的每个指令类型到所述目标代码分析工具中对应指令类型的转换规则。
8.根据权利要求1所述的方法,其中所述目标代码分析工具包括静态代码分析工具。
9.一种用于代码分析的装置,包括:
第一表示获取模块,被配置为获得在目标编译器对源代码进行编译的过程中生成的第一中间表示,所述第一中间表示符合所述目标编译器对应的中间表示格式;
第一信息提取模块,被配置为提取所述第一中间表示中的第一类型信息和第一控制流信息,所述第一类型信息指示所述源代码中的变量和函数的类型,所述第一控制流信息指示所述源代码中的函数控制流;
第二表示获取模块,被配置为根据所述源代码的编程语言与目标代码分析工具之间的指令映射关系,基于所述第一类型信息和所述第一控制信息,将所述第一中间表示转换为第二中间表示,所述第二中间表示符合所述目标代码分析工具的中间表示格式;以及
分析结果确定模块,被配置为利用所述目标代码分析工具,基于所述第二中间表示来确定针对所述源代码的分析结果。
10.一种电子设备,包括:
至少一个处理单元;以及
至少一个存储器,所述至少一个存储器被耦合到所述至少一个处理单元并且存储用于由所述至少一个处理单元执行的指令,所述指令在由所述至少一个处理单元执行时使所述设备执行根据权利要求1至9中任一项所述的方法。
11.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现根据权利要求1至9中任一项所述的方法。
12.一种计算机程序产品,所述计算机程序产品被有形地存储在计算机存储介质中并且包括计算机可执行指令,计算机可执行指令在由设备执行时使设备执行根据权利要求1至9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410354845.4A CN118193387A (zh) | 2024-03-26 | 2024-03-26 | 用于代码分析的方法、装置、设备和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410354845.4A CN118193387A (zh) | 2024-03-26 | 2024-03-26 | 用于代码分析的方法、装置、设备和介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118193387A true CN118193387A (zh) | 2024-06-14 |
Family
ID=91394188
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410354845.4A Pending CN118193387A (zh) | 2024-03-26 | 2024-03-26 | 用于代码分析的方法、装置、设备和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118193387A (zh) |
-
2024
- 2024-03-26 CN CN202410354845.4A patent/CN118193387A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108628635B (zh) | 获取参数名和局部变量名的方法、装置、设备及存储介质 | |
EP3365772B1 (en) | Missing include suggestions for external files | |
CN111736840B (zh) | 小程序应用的编译方法、运行方法、存储介质及电子设备 | |
US9280442B1 (en) | System and method for generating coverage reports for software unit tests | |
US8407667B2 (en) | Inferring missing type information for reflection | |
US9886268B1 (en) | Dual programming interface | |
US20160357534A1 (en) | Data type reassignment | |
CN108595171B (zh) | 对象的模型生成方法、装置、设备及存储介质 | |
US20120084750A1 (en) | Method for Efficiently Managing Property Types and Constraints In a Prototype Based Dynamic Programming Language | |
US8935686B2 (en) | Error-code and exception-based function dispatch tables | |
US20160004579A1 (en) | Method of generating automatic code for remote procedure call | |
CN113296786B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
WO2018161509A1 (zh) | 条件编译预处理方法、终端及存储介质 | |
EP3008585A1 (en) | Automatic source code generation | |
US20220004526A1 (en) | Method and apparatus of converting schema in deep learning framework, and computer storage medium | |
US9274755B2 (en) | Infrastructure for generating code using annotation and template generators | |
CN112416313B (zh) | 支持大整数数据类型和运算符的编译方法 | |
Di Natale et al. | An MDA approach for the generation of communication adapters integrating SW and FW components from Simulink | |
CN111475150A (zh) | 一种跨语言绑定方法、装置、设备及存储介质 | |
WO2022068556A1 (zh) | 一种代码翻译方法、装置及设备 | |
US11474795B2 (en) | Static enforcement of provable assertions at compile | |
US20090328001A1 (en) | Unloadable managed code | |
CN113220306A (zh) | 操作执行方法、装置和电子设备 | |
CN118193387A (zh) | 用于代码分析的方法、装置、设备和介质 | |
CN106933665A (zh) | 预测mpi程序运行时间的方法 |
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 |