CN114327497A - 一种代码处理方法、装置及设备 - Google Patents

一种代码处理方法、装置及设备 Download PDF

Info

Publication number
CN114327497A
CN114327497A CN202011063134.XA CN202011063134A CN114327497A CN 114327497 A CN114327497 A CN 114327497A CN 202011063134 A CN202011063134 A CN 202011063134A CN 114327497 A CN114327497 A CN 114327497A
Authority
CN
China
Prior art keywords
code
variable
address
function
platform
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
Application number
CN202011063134.XA
Other languages
English (en)
Inventor
吕志宏
鲍鹏
乐永年
吴伟男
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202011063134.XA priority Critical patent/CN114327497A/zh
Priority to PCT/CN2021/117889 priority patent/WO2022068559A1/zh
Priority to EP21874220.3A priority patent/EP4209896A4/en
Publication of CN114327497A publication Critical patent/CN114327497A/zh
Priority to US18/192,533 priority patent/US20230236814A1/en
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/76Adapting program code to run in a different environment; Porting

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

为了解决本申请应用开发、移植的效率不高的问题,本申请提供了一种代码处理方法,包括:获取第一代码,该第一代码为经过编译所得的、适用于源平台的代码,然后对第一代码中函数关联的变量的地址进行重定位,得到变量的逻辑地址,接着根据变量的逻辑地址和第一代码进行反编译,得到适用于目标平台的第二代码。该方法一方面实现了跨平台反编译,提高了应用开发或移植的效率;另一方面,对第一代码中函数关联的变量进行重定位,解决由于变量的定义、访问地址不确定,导致生成的伪代码逻辑错误的问题,提高了反编译的准确度,以及提高了反编译的可靠性。

Description

一种代码处理方法、装置及设备
技术领域
本申请涉及应用开发技术领域,尤其涉及一种代码处理方法以及对应的装置、设备。
背景技术
在进行应用开发时,开发人员可以借鉴已有应用进行应用开发,以提高开发效率。具体地,开发人员可以利用反编译(decompilation)将已编译的程序代码还原成源代码,然后对源代码进行分析,从而为应用开发提供帮助。其中,已编译的程序代码通常是低级程序语言的代码,例如可以是机器语言的代码(也称作机器码),源代码通常是高级程序语言的代码,例如可以是C语言的代码、Java语言的代码等,在一些情况下,源代码也可以是汇编语言的代码。
已有的反编译技术可以支持相同平台中不同程序语言的代码转换。例如,已有的反编译器可以将x86平台的机器语言的代码转换成x86平台的汇编语言的代码。然而,在许多场景中,还需要将一些平台的代码移植到另一些平台,从而实现将应用移植到其他平台。
基于此,业界亟需提供一种跨平台转换代码的方法,从而提高应用开发、移植的效率。
发明内容
本申请提供了一种代码处理方法,该方法通过对经过编译所得的第一代码中函数关联的变量进行重定位,然后再进行跨平台反编译,实现自动地跨平台转换代码,提高了应用开发和移植的效率。本申请还提供了上述方法对应的装置、设备、计算机可读存储介质以及计算机程序产品。
第一方面,本申请提供了一种代码处理方法。该方法可以由反编译器执行。其中,反编译器可以是软件模块,通过在计算机等硬件设备上运行从而提供代码反编译服务。在一些可能的实现方式中,反编译器也可以是具有代码反编译功能的硬件模块。
具体地,反编译器获取第一代码,该第一代码为经过编译所得的、适用于源平台的代码,例如是x86平台下obj文件中的代码,然后反编译器对第一代码中函数关联的变量的地址进行重定位,得到变量的逻辑地址,基于变量的逻辑地址可以用于生成变量的定义,如此可以实现将第一代码中变量的定义和访问地址确定化,由此可以获得完整的可执行文件,反编译器根据变量的逻辑地址和第一代码进行反编译,相当于对完整的可执行文件进行反编译,由此得到适用于目标平台的第二代码。
一方面,该方法实现了跨平台反编译,提高了应用开发或移植的效率;另一方面,该方法对第一代码中函数关联的变量的地址进行重定位,重定位后的地址可以用于生成变量的定义,如此解决了由于变量的定义、访问地址不确定,导致生成的伪代码逻辑错误的问题,提高了反编译的准确度,以及提高了反编译的可靠性。
在一些可能的实现方式中,反编译器可以软件包的形式提供给用户使用。具体地,反编译器的所有方可以发布反编译器的软件包,用户通过计算装置获取该软件包,然后运行该软件包,从而实现对适用于源平台的第一代码进行跨平台反编译。如此可以实现在本地对代码进行跨平台反编译。
在一些可能的实现方式中,反编译器可以云服务的形式提供给用户使用。用户可以将适用于源平台的第一代码上传至云端,云端的反编译服务可以对代码进行反编译,然后向用户返回适用于目标平台的第二代码。其中,反编译的过程主要在云环境中进行,端侧的计算装置主要协助进行反编译,因此对计算装置的性能要求较低,该方案具有较高可用性。
在一些可能的实现方式中,反编译器可以根据变量的逻辑地址和第一代码进行反编译,得到与目标平台相关的编译器中间表示。其中,中间表示具体是指利用中间语言表示的代码。在编译或反编译过程中,编译器或者反编译器可以将第一代码翻译为中间语言表示的代码,即中间表示,然后对中间表示进行翻译得到第二代码。
该方法中,根据变量的逻辑地址和第一代码生成的编译器中间表示包括变量的定义。其中。变量的定义将所述变量的符号和地址关联。基于该编译器中间表示能够生成逻辑正确的伪代码,进而生成准确性较高的、适用于目标平台的第二代码。
一方面,该方法通过编译器中间表示实现代码跨平台反编译,另一方面该方法通过对第一代码中函数关联的变量进行重定位,使得生成的伪代码逻辑正确,从而使得生成的适用于目标平台的第二代码具有较高的准确性。
在一些可能的实现方式中,编译器中间表示包括第一变量和第二变量。其中,第一变量具有第一逻辑地址,第二变量具有第二逻辑地址,第一逻辑地址和所述第二逻辑地址不同。其中,逻辑地址可以是绝对地址,基于该绝对地址可以准确地获取不同变量的数据,由此可以生成准确的第二代码。
在一些可能的实现方式中,第一代码中包括代码区、符号区、数据区以及重定位表,反编译器可以从第一代码中获取上述重定位表,该重定位表中存储有变量的逻辑地址,反编译器可以根据重定位表对第一代码中函数关联的变量的地址进行重定位。
基于此,反编译器可以根据重定位所得的变量的逻辑地址生成变量的定义,由此解决变量的定义、访问地址不确定导致生成的伪代码逻辑错误,进而导致生成的适用于目标平台的代码可用性不高的问题,该方法提高了反编译的准确度和可靠性。
在一些可能的实现方式中,函数关联的变量可以包括多种类型。例如,函数关联的变量可以包括局部变量和全局变量。在一些实施例中,函数关联的变量也可以根据是否保留原值,分为静态变量和动态变量。相应地,反编译器在进行变量重定位时,可以根据第一代码中函数关联的变量的类型,确定重定位类型,然后根据重定位表,按照重定位类型对第一代码中函数关联的变量的地址进行重定位。
其中,反编译器可以根据变量的类型以及关联的编译选项,结合重定位表确定重定位类型。其中,编译选项用于指示编译方式,如fpIC指示代码是与位置无关的代码(position independent code,PIC),mcmodel指示代码模型。mcmodel可以取值为small、midium或large,分别用于指示小代码模型、中等代码模型和大代码模型。
例如针对全局变量、静态变量等普通变量,mcmodel=large时,反编译器根据重定位指令段的立即数指令,确定重定位类型为R_X86_64_64,即将寻址方式改为立即寻址。在确定该寻址方式后,反编译器可以按照立即寻址方式结合重定位表获取变量的逻辑地址。
该方法通过对不同类型的变量分别采用对应的重定位方式进行重定位,使得整个代码文件能够准确地定位,由此生成逻辑正确的伪代码,基于该逻辑正确的伪代码可以生成准确性较高的第二代码。如此能够满足业务需求。
在一些可能的实现方式中,在根据所述变量的逻辑地址和所述第一代码进行反编译之前,反编译器还可以根据源平台和目标平台的函数调用规则的差异,调整第一代码中函数的参数。
该方法通过对第一代码进行跨平台差异处理,从而实现对第一代码的跨平台转换,转换后的代码能够在目标平台上执行。
在一些可能的实现方式中,反编译器在调整第一代码中函数的参数时,具体是根据源平台和目标平台的函数调用规则的差异,调整第一代码中函数的寄存器信息或栈信息。
具体地,函数的参数存储在寄存器或者存储在内存的栈中。不同平台中参数的存储方式不同。反编译器可以根据源平台和目标平台的函数调用规则的差异,调整第一代码中函数的寄存器信息和/或栈信息。例如,反编译器可以将存储在寄存器中的参数进行调整,将其存储在栈中;或者是将存储在栈中的参数进行调整,将其存储在寄存器中,从而使得跨平台前的运行时和跨平台后的运行时一致。由此使得跨平台后的代码能够正常执行。
在一些可能的实现方式中,反编译器可以提供用户界面,如提供图形用户界面。用户可以通过图形用户界面等用户界面输入第一代码,然后反编译器接收该第一代码,进而对第一代码进行跨平台反编译,由此提高代码或应用移植的效率。
在一些可能的实现方式中,适用于目标平台的第二代码可以是低级程序语言的代码,例如是目标文件格式的代码。当然,适用于目标平台的第二代码也可以是高级程序语言的代码,如C语言的代码等等。其中,通过跨平台反编译得到高级程序语言的代码提高代码移植的效率。
第二方面,本申请提供了一种代码处理装置。该装置包括:
通信模块,用于获取第一代码,第一代码为经过编译所得的、适用于源平台的代码;
重定位模块,用于对第一代码中函数关联的变量的地址进行重定位,得到变量的逻辑地址;
反编译模块,用于根据变量的逻辑地址和第一代码进行反编译,得到适用于目标平台的第二代码。
在一些可能的实现方式中,反编译模块具体用于:
根据逻辑地址和第一代码进行反编译,得到与目标平台相关的编译器中间表示,编译器中间表示包括变量的定义,变量的定义将变量的符号和地址关联;
根据编译器中间表示生成适用于目标平台的第二代码。
在一些可能的实现方式中,编译器中间表示包括第一变量和第二变量,第一变量具有第一逻辑地址,第二变量具有第二逻辑地址,第一逻辑地址和第二逻辑地址不同。
在一些可能的实现方式中,重定位模块具体用于:
从第一代码中获取重定位表,重定位表中存储有变量的逻辑地址;
根据重定位表对第一代码中函数关联的变量的地址进行重定位。
在一些可能的实现方式中,重定位模块具体用于:
根据第一代码中函数关联的变量的类型,确定重定位类型;
根据重定位表,按照重定位类型对第一代码中函数关联的变量的地址进行重定位。
在一些可能的实现方式中,该装置还包括:
调整模块,用于在根据变量的逻辑地址和第一代码进行反编译之前,根据源平台和目标平台的函数调用规则的差异,调整第一代码中函数的参数。
在一些可能的实现方式中,调整模块具体用于:
根据源平台和目标平台的函数调用规则的差异,调整第一代码中函数的寄存器信息或栈信息。
在一些可能的实现方式中,通信模块具体用于:
接收用户通过图形用户界面输入的第一代码。
第三方面,本申请提供一种计算装置,所述计算装置包括处理器和存储器。所述处理器、所述存储器进行相互的通信。所述处理器用于执行所述存储器中存储的指令,以使得计算装置执行如第一方面或第一方面的任一种实现方式中的代码处理方法。
第四方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,所述指令指示计算装置执行上述第一方面或第一方面的任一种实现方式所述的代码处理方法。
第五方面,本申请提供了一种包含指令的计算机程序产品,当其在计算装置上运行时,使得计算装置执行上述第一方面或第一方面的任一种实现方式所述的代码处理方法。
本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
为了更清楚地说明本申请实施例的技术方法,下面将对实施例中所需使用的附图作以简单地介绍。
图1为本申请实施例提供的一种代码处理方法的系统架构图;
图2为本申请实施例提供的一种代码处理方法的系统架构图;
图3为本申请实施例提供的一种代码处理方法的流程图;
图4为本申请实施例提供的一种通过GUI接收第一代码的示意图;
图5为本申请实施例提供的一种对函数的参数进行调整的示意图;
图6为本申请实施例提供的一种代码处理方法的流程示意图;
图7为本申请实施例提供的一种代码处理装置的结构示意图;
图8为本申请实施例提供的一种计算装置的结构示意图。
具体实施方式
本申请实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
首先对本申请实施例中所涉及到的一些技术术语进行介绍。
编程语言(programming language),是用来定义计算机程序的形式语言,因此编程语言也被称作计算机语言。开发人员在开发应用时,具体是通过上述编程语言编写代码文件实现的。
编程语言可以根据是否面向机器分为低级程序语言和高级程序语言。其中,面向机器(例如是计算机)的编程语言为低级程序语言。低级程序语言包括机器语言、汇编语言等。
机器语言是采用二进制代码进行表示的语言。机器语言是计算机唯一可以识别和执行的语言。汇编语言则是为了解决机器语言难以理解和记忆的缺点,采用易于理解和记忆的名称和符号表示机器指令中的操作码的语言。汇编语言采用符号代替机器语言的二进制代码,因此汇编语言实质上是一种符号语言。
需要说明,使用汇编语言编写的代码文件通常不能直接被机器(例如计算机)识别。为此,开发人员通常还可以利用汇编程序将汇编语言翻译成机器语言,以便机器可以识别和执行。因此,与机器语言相比,汇编语言是相对高级的程序语言。
编程语言中除面向机器的编程语言之外的编程语言为高级程序语言。高级程序语言是一种独立于机器的语言。也即高级程序语言通常可以应用于不同类型的机器,如应用于x86指令集架构的机器,或者应用于高级精简指令集机器(advanced RISC machines,ARM)架构的机器。高级程序语言对机器的依赖性较低。
高级程序语言通常接近于自然语言,而且可以使用数学表达式,因而具有更强的表达能力,可以方便地表示数据的运算和程序的控制结构,能够更好的描述各种算法。高级程序语言具体包括java,c,c++,C#,pascal,python等不同语言。与汇编语言类似,高级程序语言不能直接被机器识别和执行。开发人员可以通过编译程序如编译器对基于高级程序语言编写的代码文件进行编译,以便能够被机器识别和执行。
在进行应用开发时,开发人员可以借鉴已有应用进行应用开发,以提高开发效率。具体地,开发人员可以利用反编译(decompilation)将已编译的程序代码进行还原,然后对还原后的代码进行分析,以为应用开发提供帮助。
其中,已编译的程序代码通常是低级程序语言的代码,例如可以是机器语言的代码(也称作机器码),还原后的代码通常是高级程序语言的代码,例如可以是C语言的代码、Java语言的代码等,在一些情况下,还原后的代码也可以是汇编语言的代码。
已有的反编译技术可以支持相同平台中不同程序语言的代码转换。例如,已有的反编译器可以将x86平台的机器语言的代码转换成x86平台的汇编语言的代码。然而,在许多场景中,还需要将一些平台的代码移植到另一些平台,从而实现将应用移植到其他平台。
其中,被移植的代码对应的平台称为源平台,移植得到的代码对应的平台称为目标平台。源平台和目标平台具体是不同平台。不同平台是指具有不同指令集的平台。其中,具有不同指令集的平台可以是同一类型下不同指令集的平台,如x86平台下的Pentium II和Pentium III(引入了新的SSE指令集),或者ARM平台下的ARM V8和ARM V9。具有不同指令集的平台也可以是不同类型下的平台,例如x86平台下的任一平台和ARM平台下的任一平台。源平台的代码具体可以是经过编译所得的代码,该代码例如可以是目标(object,obj)文件中的代码。
然而,obj文件中的代码虽然是二进制代码,但是obj文件并非完整的可执行文件,obj文件中变量的定义、访问地址均不确定,由此导致生成的伪代码逻辑错误,进而导致反编译器直接对obj文件中的代码反编译的准确度较低,可靠性不高。
有鉴于此,本申请实施例提供了一种代码处理方法。该方法可以由反编译器执行。其中,反编译器可以是软件模块,通过在计算机等硬件设备上运行从而提供代码反编译服务。在一些可能的实现方式中,反编译器也可以是具有代码反编译功能的硬件模块。
具体地,反编译器获取第一代码,该第一代码为经过编译所得的、适用于源平台的代码,例如是x86平台下obj文件中的代码,然后反编译器对第一代码中函数关联的变量的地址进行重定位,得到变量的逻辑地址。该逻辑地址也称作程序地址,通常是开发人员在编写代码时分配的地址,其可以被翻译或映射为物理地址,以便于寻址。
基于变量的逻辑地址可以用于生成变量的定义,如此可以实现将第一代码中变量的定义和访问地址确定化,由此可以获得完整的可执行文件。反编译器根据变量的逻辑地址和第一代码进行反编译,相当于对完整的可执行文件进行反编译,由此得到适用于目标平台的第二代码。
一方面,该方法实现了跨平台反编译,提高了应用开发或移植的效率;另一方面,该方法对第一代码中函数关联的变量的地址进行重定位,重定位后的地址可以用于生成变量的定义,如此解决了由于变量的定义、访问地址不确定,导致生成的伪代码逻辑错误的问题,提高了反编译的准确度,以及提高了反编译的可靠性。
需要说明,本申请实施例提供的反编译器可以软件包的形式提供给用户使用。具体地,反编译器的所有方可以发布反编译器的软件包,用户获取该软件包,然后运行该软件包,从而实现对适用于源平台的第一代码进行跨平台反编译。在一些可能的实现方式中,本申请实施例提供的反编译器可以云服务的形式提供给用户使用。用户可以将适用于源平台的第一代码上传至云端,云端的反编译服务可以对代码进行反编译,然后向用户返回适用于目标平台的第二代码。
为了使得本申请的技术方案更加清楚、易于理解,下面结合附图对反编译器的部署方式进行详细说明。
参见图1所示的代码处理方法的系统架构图,反编译器100可以部署在计算装置200上。计算装置200包括但不限于台式机、笔记本电脑等设备。其中,反编译器100用于对代码进行反编译。反编译器100可以是独立的,也可以与其他开发工具进行集成,例如可以与编辑器、编译器、调试器等进行集成,形成集成开发环境(integrated developmentenvironment,IDE)。
计算装置200上运行的反编译器100可以获取第一代码,该第一代码是经过编译所得的、适用于源平台的代码,例如可以是适用于x86平台的obj文件中的二进制代码,然后反编译器100对第一代码中函数关联的变量的地址进行重定位,接着反编译器100根据变量重定位后的地址和第一代码进行反编译,得到适用于目标平台的第二代码。由此实现在本地(例如是本地的计算装置200)对第一代码进行跨平台反编译。
接着,参见图2所示的代码处理方法的系统架构图,反编译器100部署在云环境300中,用户通过计算装置200访问云环境300中的反编译器100,从而实现第一代码的跨平台反编译。
其中,云环境300指示云服务提供商拥有的,用于提供计算、存储、通信资源的云计算集群。该云计算集群根据在网络拓扑中的位置可以分为中心云和边缘云。云计算集群中包括至少一个云计算设备,例如包括至少一个中心服务器,或者包括至少一个边缘服务器。
计算装置200可以向云环境300中运行的反编译器100提交第一代码,反编译器100获取到第一代码,可以对第一代码中函数关联的变量的地址进行重定位,接着反编译器100根据变量重定位后的地址和第一代码进行反编译,从而得到适用于目标平台的第二代码。进一步地,云环境300中的反编译器100可以向计算装置200返回第二代码。如此实现了在云端对代码进行跨平台反编译。由于反编译的过程主要在云端进行,计算装置200主要是协助进行反编译,故对计算装置200的性能要求较低,具有较高可用性。
图1和图2仅仅是示例性地描述了反编译器100的一些部署方式,在本申请实施例其他可能的实现方式中,反编译器100还可以采用其他方式部署。本申请实施例对此不作限定。
接下来,结合附图,从反编译器100的角度对本申请实施例提供的代码处理方法进行详细介绍。
参见图3所示的代码处理方法的流程图,该方法包括:
S302:反编译器100获取第一代码。
第一代码为经过编译所得的、适用于源平台的代码。其中,源平台可以是x86平台、ARM平台等平台中的任意一种。经过编译所得的代码是编译器对源代码进行编译所得的代码。该代码具体为二进制代码。在一些实施例中,第一代码可以是obj文件中的代码。在另一些实施例中,第一代码也可以是混合代码,该混合代码具体混合有obj文件中的代码。
在一些可能的实现方式中,反编译器100可以通过用户界面,如图形用户界面(graphical user interface,GUI)或者命令用户界面(command user interface,CUI)等,接收用户输入的第一代码。
为了便于理解,下面结合一具体示例进行说明。参见图4所示的反编译器100通过GUI获取第一代码的示意图,如图4所示,反编译器100提供的GUI承载有代码输入控件402和代码反编译控件404,用户可以通过代码输入控件402输入第一代码。具体地,用户可以通过代码输入控件402输入第一代码的存储路径,如此,反编译器100可以根据该存储路径获取第一代码。用户还可以通过代码反编译控件404触发对上述第一代码的反编译操作,反编译器100可以响应于该操作启动对第一代码的跨平台反编译。
需要说明的是,上述第一代码可以是代码文件中的部分代码,也可以是代码文件中的全部代码。本申请实施例对此不作限定。
S304:反编译器100对第一代码中函数关联的变量的地址进行重定位,得到变量的逻辑地址。
第一代码中包括至少一个函数调用。被调用的函数包括自变量和因变量,其中,自变量是可以被操纵,从而引起因变量变化的条件或因子,因变量是随着自变量变化而变化的量。自变量取唯一值时,因变量有且只有唯一值与其对应。基于此,函数关联的变量可以包括上述自变量和因变量中的至少一个。例如,在函数y=a+b*c中,函数关联的变量包括上述自变量a、b、c以及因变量y。
在本实施例中,第一代码(例如obj文件中的代码)中函数关联的变量的地址是相对地址,也即各变量的地址是不确定的,为此,反编译器100可以对第一代码中函数关联的变量进行重定位,从而确定各变量的逻辑地址,该逻辑地址具体是指变量的绝对地址。
具体地,第一代码中包括代码区、符号区、数据区和重定位表。其中,代码区主要包括代码,符号区主要包括变量的符号,数据区主要包括代码中的数据,重定位表主要包括各变量的逻辑地址。基于此,反编译器100可以从第一代码中获取重定位表,然后通过访问重定位表,从而获得第一代码中函数关联的变量的逻辑地址,由此实现对第一代码中函数关联的变量的地址进行重定位。
进一步地,反编译器100在对根据重定位表对第一代码中函数关联的变量的地址进行重定位时,还可以结合变量的类型进行重定位。具体地,反编译器100可以根据第一代码中函数关联的变量的类型,确定重定位类型,然后根据重定位表,按照重定位类型对所述第一代码中函数关联的变量的地址进行重定位。
其中,变量的类型可以包括局部变量和全局变量。当然,变量的类型也可以根据是否保持原值分为静态变量和动态变量。反编译器100可以根据变量的类型以及关联的编译选项,结合重定位表确定重定位类型。其中,编译选项用于指示编译方式,如fpIC指示代码是与位置无关的代码(position independent code,PIC),mcmodel指示代码模型。mcmodel可以取值为small、midium或large,分别用于指示小代码模型、中等代码模型和大代码模型。
例如针对全局变量、静态变量等普通变量,mcmodel=large时,反编译器100根据重定位指令段的立即数指令,确定重定位类型为R_X86_64_64,即将寻址方式改为立即寻址。在确定该寻址方式后,反编译器100可以按照立即寻址方式结合重定位表获取变量的逻辑地址。
进一步地,反编译器100可以将该绝对地址与变量的符号关联,由此实现对函数关联的变量的地址进行重定位。
S306:反编译器100根据变量的逻辑地址和第一代码进行反编译,得到适用于目标平台的第二代码。
目标平台是不同于源平台的平台。目标平台可以是x86平台、ARM平台等平台中的任意一个。当源平台为x86平台时,目标平台可以是ARM平台,当源平台为ARM平台时,目标平台可以是x86平台。
适用于目标平台的第二代码可以是适用于目标平台的低级程序语言代码。例如,第一代码为x86平台下机器语言的代码时,第二代码可以是ARM平台下机器语言的代码。进一步地,第二代码还可以是ARM平台下汇编语言的代码。
适用于目标平台的第二代码还可以是高级程序语言代码。例如,第一代码为x86平台下机器语言的代码时,第二代码可以是C语言的代码、Java语言的代或者Python语言的代码等等。
在本实施例中,变量的逻辑地址和第一代码可以构成完整的可执行文件,反编译器100可以对完整的可执行文件进行反编译,从而得到适用于目标平台的第二代码。
具体地,反编译器100可以根据变量的逻辑地址和第一代码进行反编译,得到与目标平台相关的编译器中间表示(intermediate representation,IR)。
其中,中间表示具体是指利用中间语言表示的代码。在编译或反编译过程中,编译器或者反编译器可以将第一代码翻译为中间语言表示的代码,即中间表示,然后对中间表示进行翻译得到第二代码。
由于反编译器100是根据变量重定位后的逻辑地址和第一代码进行反编译,因此,反编译器100得到的中间表示中包括函数关联的变量的定义。其中,变量的定义将变量的符号与变量的逻辑地址关联。反编译器100可以根据该中间表示生成逻辑正确的伪代码,进而生成相应的第二代码。如此,克服了由于变量的定义、访问地址不确定,导致生成的伪代码逻辑错误的问题,提高了反编译的准确度,以及提高了反编译的可靠性。
在一些可能的实现方式中,反编译器100可以对编译器中间表示进行编译,得到适用于目标平台的第二代码。该第二代码可以是适用于目标平台的机器语言代码(如obj格式的代码)。
在另一些可能的实现方式中,反编译器100还可以在得到适用于目标平台的低级程序语言代码后,如得到机器语言代码后,对该低级程序语言代码进行进一步处理,例如进行反汇编,得到汇编语言代码。第二代码还可以是适用于目标平台的汇编语言代码。当然,反编译器100也可以对编译器中间表示进行处理,得到高级程序语言代码。第二代码还可以是高级程序语言代码。
反编译器100对第一代码进行反编译,得到第二代码后,还可以输出该第二代码。在一些实施例中,反编译器100可以通过文件的方式输出该第二代码。在另一些实施例中,反编译器100也可以通过用户界面,如GUI或CUI向用户呈现第二代码。
基于上述内容描述,本申请实施例提供了一种代码处理方法。该方法通过将经过编译所得的第一代码通过反编译转换为与目标平台相关的中间表示,然后基于该中间表示进行编译得到适用于目标平台的第二代码,由此实现第一代码的跨平台反编译,降低了跨平台的代码迁移技术门槛,提高了代码迁移效率。并且,该方法解决了反编译过程中低级程序语言模块的地址重定向信息缺失的问题,提高了反编译的准确度,以及提高了反编译的可靠性。
在图3所示实施例中,考虑到不同平台上函数调用规则的差异,反编译器100在对代码进行跨平台反编译之前,具体是根据变量重定位后的逻辑地址和第一代码进行反编译之前,反编译器100可以根据源平台和目标平台的函数调用规则的差异,调整第一代码中函数的参数。
具体地,函数的参数存储在寄存器或者存储在内存的栈中。不同平台中参数的存储方式不同。反编译器100可以根据源平台和目标平台的函数调用规则的差异,调整第一代码中函数的寄存器信息和/或栈信息。例如,反编译器100可以将存储在寄存器中的参数进行调整,将其存储在栈中;或者是将存储在栈中的参数进行调整,将其存储在寄存器中。
在对寄存器信息和/或栈信息进行调整之前,反编译器100可以先利用解码(decode)工具,例如intel xed对第一代码进行解码,得到指令控制流。然后反编译器100可以针对指令控制流执行数据流分析算法,以对活跃的寄存器和栈进行分析,从而得到第一代码中函数的参数类型和数量。其中,参数类型主要用于指示参数存储于寄存器或者是存储于栈。
为了便于理解,下面分别对寄存器分析和栈分析的过程进行详细说明。
首先,本实施例定义如下几种数据集:
Use[n]:set of variables used by n;
Def[n]:set of variables defined by n;
In[n]:variables live on entry to n;
Out[n]:variables live on exit to n;
其中,variables表示变量对应的寄存器。In[n]和Out[n]分别表示输入和输出对应的寄存器的集合,Def[n]和Use[n]分别表示定义和使用对应的寄存器的集合。
反编译器100可以遍历第一代码中的区块(block),构造每个block的use集和def集。具体构造过程如下:
a)按照block中指令执行顺序,遍历block中指令;
b)如果指令的operand的type为Register且action为kActionRead,则将加入use集;
c)如果指令的operand的type为Register且action为kActionWrite,则将加入def集;
d)如果指令的operand type为Address,则将其base_reg和index_reg加入use集;
反编译器100可以根据上述集合建立数据流分析方程,如下所示:
Figure BDA0002712989980000101
其中,n表征一个block,符号
Figure BDA0002712989980000102
表示符号右边的集合为符号左边的集合的子集。succ[n]表示block中仍然有效的寄存器。
反编译器100可以通过不动点算法对上述方程求解,如下所示:
Figure BDA0002712989980000103
经过不动点算法,函数入口的in集与Calling Convention规定的入参Reg取交集即为入参寄存器;函数出口的out集与Calling Convention规定的出参Reg取交集,即为可能的返回值寄存器。
反编译器100在进行栈分析时,可以使用基于扩展栈指针寄存器(rex-extendedstack pointer,RSP)的算法或者基于扩展基指针寄存器(rex-extended base pointer,RBP)的算法对指令控制流进行分析实现。
反编译器100使用基于RSP的算法进行分析的过程具体可以包括如下步骤:
a.基于function prelogue部分(entry basic block)查看RSP是否有偏移,并记录偏移值off;
其中,反编译器100可以通过sub指令或者push指令判断偏移。反编译器100还记录与RSP关联的寄存器。
b.遍历所有block的所有指令,查找操作数Operand Type为kTypeAddress,action为kActionRead,base_reg=RSP(关联寄存器),内存偏移(dispalcement,dis)为正数的使用场景。该参数即为第(dis-off)/8个栈参数,然后统计参数总数S。
c.对于符合b规则的情况下,进一步区分参数类型:
如果同指令的其他寄存器操作数为整型寄存器(RXX),且指令为非浮点->整型类型转换相关指令,判断该栈参数为整型。如果同指令的其他寄存器操作数为浮点寄存器(XMM),且指令为非整型->浮点类型转换相关指令,判断该栈参数为浮点。
反编译器100使用基于RBP的算法进行分析的过程具体可以包括如下步骤:
a.遍历所有block的所有指令,查找操作数Operand Type为kTypeAddress,action为kActionRead,base_reg=RBP,dis为正数的使用场景。该参数即为第(dis-8)/8个栈参数,统计参数总数X。
b.对于符合a规则的情况下,进一步区分参数类型:
如果同指令的其他寄存器操作数为整型寄存器(RXX),且指令为非浮点->整型类型转换相关指令,判断该栈参数为整型,如果同指令的其他寄存器操作数为浮点寄存器(XMM),且指令为非整型->浮点类型转换相关指令,判断该栈参数为浮点。
在一些可能的实现方式中,反编译器100可以同时执行上述两个算法,然后对两个算法确定的参数总数S取最大值。
在获得参数总数和参数类型后,反编译器100可以根据函数调用规则的差异调整参数的存储位置。具体是反编译器100根据函数调用规则的差异,对入参寄存器和栈进行跨平台处理,例如将寄存器中的若干参数入栈、对栈指针进行切换等等,使得不同平台下的运行时的入参寄存器和栈空间视角一致。
为了便于理解,下面结合一具体示例进行说明。
参见图5所示的对函数的参数进行调整的示意图,该示例中,函数test包括i0至i9共计10个参数。在x86平台下的运行时中,参数i0至i5存储在寄存器中,i6至i9存储在栈中。在ARM平台下的运行时中,参数i0至i7存储在寄存器中,i8至i9存储在栈中。反编译器100可以将参数i6、i7入栈,并切换栈指针,从而使得不同平台下的运行时的入参寄存器和栈空间视角一致。
该方法通过利用编译器活跃寄存器分析和栈分析,得到精确入参寄存器和栈入参,减少不必要的函数调用约定的寄存器转换。
此外,本申请还提供了一具体示例对函数关联的变量的地址进行重定位,并根据重定位后的逻辑地址和第一代码反编译得到第二代码进行详细说明。
参见图6所示的代码处理方法的流程示意图,如图6所示,反编译器100先获取待进行反编译的第一代码,如图6中(A)所示,第一代码包括至少一个函数调用,如test1、main,每个被调用的函数关联有变量。变量的地址具体如(A)中标注框602所示,基于602可知,第一代码中变量的地址为相对地址。
然后参见图6中(B),反编译器100对第一代码中函数关联的变量进行重定位,例如test1的地址由0000000000000000重定向为0000000000400536,main的地址由000000000000000c重定向为0000000000400542,test1的函数体中关联的一个变量的地址由00 00 00 00重定向为dc 0a 20 00,在此不再一一例举。其中,变量重定位后的地址如(B)中标注框604所示。
接着参见图6中(C),反编译器100根据变量重定位后的地址和第一代码进行反编译,得到编译器中间表示。该编译器中间表示包括变量的定义,如(C)中606所示。如606所示,@test1为test1的定义。
最后参见图6中(D),反编译器100根据编译器中间表示生成适用于目标平台如ARM平台的第二代码,具体为适用于ARM平台的汇编语言代码。
需要说明的是,第一代码为机器语言代码,具体是二进制的代码,为了增强可读性,图6中(A)、(B)均是以对第一代码进行反汇编后所得的代码进行示例说明。
上文结合图1至图6对本申请实施例提供的代码处理方法进行了详细介绍,下面将结合附图对本申请实施例提供的装置、设备进行介绍。
参见图7所示的代码处理装置的结构示意图,该装置700可以是实现反编译器100功能的装置,该装置700包括:
通信模块702,用于获取第一代码,第一代码为经过编译所得的、适用于源平台的代码;
重定位模块704,用于对第一代码中函数关联的变量的地址进行重定位,得到变量的逻辑地址;
反编译模块706,用于根据变量的逻辑地址和第一代码进行反编译,得到适用于目标平台的第二代码。
在一些可能的实现方式中,反编译模块706具体用于:
根据变量的逻辑地址和第一代码进行反编译,得到与目标平台相关的编译器中间表示,编译器中间表示包括变量的定义,变量的定义将变量的符号和地址关联;
根据编译器中间表示生成适用于目标平台的第二代码。
在一些可能的实现方式中,编译器中间表示包括第一变量和第二变量,第一变量具有第一逻辑地址,第二变量具有第二逻辑地址,第一逻辑地址和第二逻辑地址不同。
在一些可能的实现方式中,重定位模块704具体用于:
从第一代码中获取重定位表,重定位表中存储有变量的逻辑地址;
根据重定位表对第一代码中函数关联的变量的地址进行重定位。
在一些可能的实现方式中,重定位模块704具体用于:
根据第一代码中函数关联的变量的类型,确定重定位类型;
根据重定位表,按照重定位类型对第一代码中函数关联的变量的地址进行重定位。
在一些可能的实现方式中,该装置700还包括:
调整模块,用于在根据变量的逻辑地址和第一代码进行反编译之前,根据源平台和目标平台的函数调用规则的差异,调整第一代码中函数的参数。
在一些可能的实现方式中,调整模块具体用于:
根据源平台和目标平台的函数调用规则的差异,调整第一代码中函数的寄存器信息或栈信息。
在一些可能的实现方式中,通信模块702具体用于:
接收用户通过图形用户界面输入的第一代码。
根据本申请实施例的代码处理装置700可对应于执行本申请实施例中描述的方法,并且代码处理装置700的各个模块/单元的上述和其它操作和/或功能分别为了实现图3所示实施例中的各个方法的相应流程,为了简洁,在此不再赘述。
本申请实施例还提供了一种计算装置200。该计算装置200可以是笔记本电脑、台式机等端侧设备。该计算装置200具体用于实现如图7所示实施例中代码处理装置700的功能。
图8提供了一种计算装置200的结构示意图,如图8所示,计算装置200包括总线201、处理器202、通信接口203和存储器204。处理器202、存储器204和通信接口203之间通过总线201通信。
总线201可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
处理器202可以为中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)、微处理器(micro processor,MP)或者数字信号处理器(digital signal processor,DSP)等处理器中的任意一种或多种。
通信接口203用于与外部通信。例如,获取适用于源平台的第一代码,该第一代码为经过编译所得的代码,例如是obj文件中的代码;或者输出适用于目标平台的第二代码等等。
存储器204可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM)。存储器204还可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM),快闪存储器,硬盘驱动器(hard diskdrive,HDD)或固态驱动器(solid state drive,SSD)。
存储器204中存储有可执行代码,处理器202执行该可执行代码以执行前述代码处理方法。
具体地,在实现图7所示实施例的情况下,且图7实施例中所描述的代码处理装置700的各模块为通过软件实现的情况下,执行图7中的重定位模块704、反编译模块706等模块功能所需的软件或程序代码存储在存储器204中。通信模块702功能通过通信接口203实现。
具体地,通信接口203获取第一代码,该第一代码为经过编译所得的、适用于源平台的代码,通信接口203将第一代码通过总线201传输至处理器202,处理器202执行存储器204中存储的各模块对应的程序代码,如重定位模块704、反编译模块706对应的程序代码,以执行对第一代码中函数关联的变量的地址进行重定位,得到变量的逻辑地址,然后根据变量重定位后的逻辑地址和第一代码进行反编译,从而得到适用于目标平台的第二代码的步骤。
可选地,处理器202还可以用于执行图3所示实施例中其他可能的实现方式对应的方法步骤。
上述计算装置200是以位于端侧的装置进行示例说明的,本申请实施例还提供了一种云环境300中的云计算装置,例如是中心服务器等等。该云计算装置具有与端侧的计算装置200相似的结构,并且具有与计算装置200相同的功能,即对代码进行跨平台反编译的功能。
本申请实施例中的耦合是装置、模块或模块之间的间接耦合或通信连接,可以是电性,机械或其它的形式,用于装置、模块或模块之间的信息交互。本申请实施例中不限定上述通信接口203、处理器202以及存储器204之间的具体连接介质。比如存储器、处理器以及通信接口之间可以通过总线连接。所述总线可以分为地址总线、数据总线、控制总线等。
基于以上实施例,本申请实施例还提供了一种计算机存储介质,该存储介质中存储软件程序,该软件程序在被一个或多个处理器读取并执行时可实现上述任意一个或多个实施例提供的端侧设备、云计算设备执行的方法。所述计算机存储介质可以包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
基于以上实施例,本申请实施例还提供了一种芯片,该芯片包括处理器,用于实现上述实施例所涉及的端侧设备或云计算设备的功能,例如用于实现图1~图2中计算装置200、云环境300中的云计算设备所执行的方法。
可选地,所述芯片还包括存储器,所述存储器,用于处理器所执行必要的程序指令和数据。该芯片,可以由芯片构成,也可以包含芯片和其他分立器件。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请实施例进行各种改动和变型而不脱离本申请实施例的范围。这样,倘若本申请实施例的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (17)

1.一种代码处理方法,其特征在于,所述方法包括:
获取第一代码,所述第一代码为经过编译所得的、适用于源平台的代码;
对所述第一代码中函数关联的变量的地址进行重定位,得到所述变量的逻辑地址;
根据所述变量的逻辑地址和所述第一代码进行反编译,得到适用于目标平台的第二代码。
2.根据权利要求1所述的方法,其特征在于,所述根据所述变量的逻辑地址和所述第一代码进行反编译,得到适用于目标平台的第二代码,包括:
根据所述变量的逻辑地址和所述第一代码进行反编译,得到与目标平台相关的编译器中间表示,所述编译器中间表示包括所述变量的定义,所述变量的定义将所述变量的符号和所述逻辑地址关联;
根据所述编译器中间表示生成适用于所述目标平台的第二代码。
3.根据权利要求2所述的方法,其特征在于,所述编译器中间表示包括第一变量和第二变量,所述第一变量具有第一逻辑地址,所述第二变量具有第二逻辑地址,所述第一逻辑地址和所述第二逻辑地址不同。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述对所述第一代码中函数关联的变量的地址进行重定位,包括:
从所述第一代码中获取重定位表,所述重定位表中存储有所述变量的逻辑地址;
根据所述重定位表对所述第一代码中函数关联的变量的地址进行重定位。
5.根据权利要求4所述的方法,其特征在于,所述根据所述重定位表对所述第一代码中函数关联的变量的地址进行重定位,包括:
根据所述第一代码中函数关联的变量的类型,确定重定位类型;
根据所述重定位表,按照所述重定位类型对所述第一代码中函数关联的变量的地址进行重定位。
6.根据权利要求1至5任一项所述的方法,其特征在于,在根据所述变量的逻辑地址和所述第一代码进行反编译之前,所述方法还包括:
根据所述源平台和所述目标平台的函数调用规则的差异,调整所述第一代码中所述函数的参数。
7.根据权利要求6所述的方法,其特征在于,所述根据所述源平台和所述目标平台的函数调用规则的差异,调整所述第一代码中所述函数的参数,包括:
根据所述源平台和所述目标平台的函数调用规则的差异,调整所述第一代码中所述函数的寄存器信息或栈信息。
8.根据权利要求1至7任一项所述的方法,其特征在于,所述获取第一代码,包括:
接收用户通过图形用户界面输入的第一代码。
9.一种代码处理装置,其特征在于,所述装置包括:
通信模块,用于获取第一代码,所述第一代码为经过编译所得的、适用于源平台的代码;
重定位模块,用于对所述第一代码中函数关联的变量的地址进行重定位,得到所述变量的逻辑地址;
反编译模块,用于根据所述变量的逻辑地址和所述第一代码进行反编译,得到适用于目标平台的第二代码。
10.根据权利要求9所述的装置,其特征在于,所述反编译模块具体用于:
根据所述变量的逻辑地址和所述第一代码进行反编译,得到与目标平台相关的编译器中间表示,所述编译器中间表示包括所述变量的定义,所述变量的定义将所述变量的符号和所述逻辑地址关联;
根据所述编译器中间表示生成适用于所述目标平台的第二代码。
11.根据权利要求10所述的装置,其特征在于,所述编译器中间表示包括第一变量和第二变量,所述第一变量具有第一逻辑地址,所述第二变量具有第二逻辑地址,所述第一逻辑地址和所述第二逻辑地址不同。
12.根据权利要求9至11任一项所述的装置,其特征在于,所述重定位模块具体用于:
从所述第一代码中获取重定位表,所述重定位表中存储有所述变量的逻辑地址;
根据所述重定位表对所述第一代码中函数关联的变量的地址进行重定位。
13.根据权利要求12所述的装置,其特征在于,所述重定位模块具体用于:
根据所述第一代码中函数关联的变量的类型,确定重定位类型;
根据所述重定位表,按照所述重定位类型对所述第一代码中函数关联的变量的地址进行重定位。
14.根据权利要求9至13任一项所述的装置,其特征在于,所述装置还包括:
调整模块,用于在根据所述变量的逻辑地址和所述第一代码进行反编译之前,根据所述源平台和所述目标平台的函数调用规则的差异,调整所述第一代码中所述函数的参数。
15.根据权利要求14所述的装置,其特征在于,所述调整模块具体用于:
根据所述源平台和所述目标平台的函数调用规则的差异,调整所述第一代码中所述函数的寄存器信息或栈信息。
16.根据权利要求9至15任一项所述的装置,其特征在于,所述通信模块具体用于:
接收用户通过图形用户界面输入的第一代码。
17.一种计算装置,其特征在于,所述计算装置包括处理器和存储器;
所述处理器用于执行所述存储器中存储的指令,以使得所述计算装置执行如权利要求1至8中任一项所述的方法。
CN202011063134.XA 2020-09-30 2020-09-30 一种代码处理方法、装置及设备 Pending CN114327497A (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN202011063134.XA CN114327497A (zh) 2020-09-30 2020-09-30 一种代码处理方法、装置及设备
PCT/CN2021/117889 WO2022068559A1 (zh) 2020-09-30 2021-09-13 一种代码处理方法、装置及设备
EP21874220.3A EP4209896A4 (en) 2020-09-30 2021-09-13 CODE PROCESSING METHOD AND APPARATUS AND DEVICE
US18/192,533 US20230236814A1 (en) 2020-09-30 2023-03-29 Code processing method, apparatus, and device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011063134.XA CN114327497A (zh) 2020-09-30 2020-09-30 一种代码处理方法、装置及设备

Publications (1)

Publication Number Publication Date
CN114327497A true CN114327497A (zh) 2022-04-12

Family

ID=80949636

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011063134.XA Pending CN114327497A (zh) 2020-09-30 2020-09-30 一种代码处理方法、装置及设备

Country Status (4)

Country Link
US (1) US20230236814A1 (zh)
EP (1) EP4209896A4 (zh)
CN (1) CN114327497A (zh)
WO (1) WO2022068559A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024152682A1 (zh) * 2023-01-18 2024-07-25 腾讯科技(深圳)有限公司 应用程序的更新调试方法、装置、设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101650664A (zh) * 2009-06-30 2010-02-17 北京飞天诚信科技有限公司 链接方法和链接器
CN102830975A (zh) * 2012-08-15 2012-12-19 深圳市翌日科技有限公司 一种汇编语言到高级语言的代码转换方法和装置
US20150277766A1 (en) * 2014-03-31 2015-10-01 International Business Machines Corporation Transparent code patching
US20190227779A1 (en) * 2016-03-11 2019-07-25 Lzlabs Gmbh Load module compiler
WO2020177994A1 (de) * 2019-03-04 2020-09-10 Fujitsu Technology Solutions Intellectual Property Gmbh Verfahren zum erzeugen einer darstellung einer programmlogik, dekompiliervorrichtung, rekompiliersystem und computerprogrammprodukt

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5278961A (en) * 1990-02-22 1994-01-11 Hewlett-Packard Company Physical address to logical address translator for memory management units
CN1818863A (zh) * 2006-03-13 2006-08-16 浙江大学 嵌入式软件反编译中的静态库函数识别实现方法
CN108920133B (zh) * 2018-06-14 2021-06-18 北京三快在线科技有限公司 跨语言编程方法、装置、电子设备及存储介质
CN110457046B (zh) * 2019-08-22 2023-05-12 广州小鹏汽车科技有限公司 混合指令集程序的反汇编方法、装置、存储介质及终端
CN110765027B (zh) * 2019-12-27 2020-04-10 中国人民解放军国防科技大学 一种pe文件地址定位系统
CN111708539B (zh) * 2020-06-17 2021-07-06 腾讯科技(深圳)有限公司 一种应用程序代码转换方法、装置、电子设备和存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101650664A (zh) * 2009-06-30 2010-02-17 北京飞天诚信科技有限公司 链接方法和链接器
CN102830975A (zh) * 2012-08-15 2012-12-19 深圳市翌日科技有限公司 一种汇编语言到高级语言的代码转换方法和装置
US20150277766A1 (en) * 2014-03-31 2015-10-01 International Business Machines Corporation Transparent code patching
US20190227779A1 (en) * 2016-03-11 2019-07-25 Lzlabs Gmbh Load module compiler
WO2020177994A1 (de) * 2019-03-04 2020-09-10 Fujitsu Technology Solutions Intellectual Property Gmbh Verfahren zum erzeugen einer darstellung einer programmlogik, dekompiliervorrichtung, rekompiliersystem und computerprogrammprodukt

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024152682A1 (zh) * 2023-01-18 2024-07-25 腾讯科技(深圳)有限公司 应用程序的更新调试方法、装置、设备及存储介质

Also Published As

Publication number Publication date
EP4209896A1 (en) 2023-07-12
WO2022068559A1 (zh) 2022-04-07
EP4209896A4 (en) 2024-03-06
US20230236814A1 (en) 2023-07-27

Similar Documents

Publication Publication Date Title
US8832669B2 (en) Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization
US8612959B2 (en) Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization
CN100555218C (zh) 用于改善片上仿真系统中高级语言的仿真速度的装置和方法
CN110287702B (zh) 一种二进制漏洞克隆检测方法及装置
CN102402451B (zh) 用户定义类型的编译时边界检查
JP4638484B2 (ja) データ処理装置におけるデータ整合性
US20110126179A1 (en) Method and System for Dynamic Patching Software Using Source Code
KR102013582B1 (ko) 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법
CN112905447B (zh) 一种区块链虚拟机的测试方法和系统
JP4026940B2 (ja) プログラム変換装置
US10747514B2 (en) Reduced save and restore instructions for call-clobbered registers
US20230236814A1 (en) Code processing method, apparatus, and device
CN114253554A (zh) 一种代码处理方法、装置及存储介质
US11886839B2 (en) Non-transitory computer-readable recording medium, function generation method, and information processing device
US10776255B1 (en) Automatic verification of optimization of high level constructs using test vectors
US10671397B2 (en) Reduced save and restore instructions for call-clobbered registers
US20230229410A1 (en) Code processing method and apparatus, and storage medium
CN113031956A (zh) 程序编译方法和装置以及程序运行方法和装置
US11669432B1 (en) Compiler-enabled application execution tracking
KR20170115185A (ko) 소프트웨어 빌드 모듈을 포함하는 임베디드 시스템
Wang Enhancing Static Binary Analysis: Type Inference and Pointer Analysis for Executable Programs
JP2024142008A (ja) 検証プログラム、検証方法、および情報処理装置
JP2023057721A (ja) 検証プログラム、検証方法、および情報処理装置
CN116414401A (zh) 应用程序运行方法及装置
CN113220334A (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