CN111930413A - 一种补丁自动生成方法、装置及系统 - Google Patents
一种补丁自动生成方法、装置及系统 Download PDFInfo
- Publication number
- CN111930413A CN111930413A CN202010440120.9A CN202010440120A CN111930413A CN 111930413 A CN111930413 A CN 111930413A CN 202010440120 A CN202010440120 A CN 202010440120A CN 111930413 A CN111930413 A CN 111930413A
- Authority
- CN
- China
- Prior art keywords
- patch
- source code
- file
- assembly
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/658—Incremental updates; Differential updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- 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)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种补丁自动生成方法、装置及系统,所述方法包括响应于获取到的补丁源码文件名,加载预设的补丁源码模板,形成补丁源码初始文件;加载补丁源码编辑器,对所述补丁源码初始文件进行缺陷修改,形成补丁源码文件;基于所述补丁源码文件生成补丁目标文件,完成补丁自动生成。本发明能够避免手动打补丁过程中的低效劳动,能使软件工程师对于打补丁的制作效率得到几何倍数的提升。
Description
技术领域
本发明属于补丁生成技术领域,具体涉及一种补丁自动生成方法、装置及系统。
背景技术
在小规模的嵌入式解决方案,一般是以ARM Cortex-M系列处理器为主。这一系列产品中,为了极致地做低成本,就更加偏向以只读存储器(Read-Only Memory,ROM)作为代码的存储代码介质,从而避免使用成本更高的片上FLASH。但是,在生产过程中ROM版本的芯片产品仅能烧录一次代码,后续使用过程中无法继续更新代码。而以片上FLASH版本为主的芯片产品就可以多次烧录代码。
在以ROM作为代码存储器的系统方案中,由于其具有天然不可改写特性,一旦程序代码中存在有BUG,哪怕是非常小的错误,都会给芯片带来不可挽回的后果,甚至造成当前芯片无法使用。修正ROM的常用办法只能是流片,而流片所产生的巨额物料成本,以及其因流片所带来的时间成本,对生存周期较短的芯片行业来说,都是非常致命的。
而补丁(PATCH)模块利用ARM Cortex-M系列处理器的FPB(Flash PATCH andBreakpoint)单元所提供的代码重映射功能和Thumb-2指令集中灵活多样的分支指令,实现了所谓的为ROM打补丁的功能,则是一项了不起迭代。
对基于C语言为开发基础语言的软件产品来说,在ROM上都是采用BINARY方式进行存储的,BINARY文件是ARMCC或GCC编译链接生成的,这是ARM官方定义的一种文档格式。一个补丁是由一个BIN文件构成,而一个BIN文件是可以由一个或多个补丁C文件编译链接而成。
一个补丁是由三个基本部分组成:补丁入口地址、补丁出口地址、补丁源码,具体参见图1。传统的补丁生成过程分为如下几个步骤:
首先,使用IDE软件(如Keil uVision)对补丁C文件进行编译链接后生成汇编文件;然后,就汇编文件手动提取补丁源码对应的汇编信息,完成后再手动对汇编信息进行整理;再编写出口、入口汇编信息,调整对齐后形成单一补丁汇编代码文件;然后,再导入汇编代码文件到IDE软件中进行二次编译链接后再次生成汇编文件;最后,就汇编文件再手动提机器码信息并整理形成补丁BINARY文件,此BINARY则为补丁目标文件。
如图2所示为补丁生成流程图,由于涉及多个手动处理的步骤,诸如手动提取并整理及手动提取机器码,很容易发生错误。
一般情况下,一个补丁耗时最好的情况要四个小时,最差要一个星期左右;这个过程仅仅从源码到补丁BINARY文件一个周期;当最后在调试过程发现要再次修改补丁源码时,这个周期需要重新走一遍,非常耗费时间,而且效率也非常低。
现有技术中所使用的补丁自动化生成流程存在以下问题:(1)补丁源码文件包含的信息不一样的;(2)所涉及手动操作步骤都完全自动化完成;(3)本地源码文件中包含俩部分信息:一是补丁所含基本必要信息,二是补丁描述头信息(补包含丁入口地址、补丁出口地址)和补丁源码。
发明内容
针对上述问题,本发明提出一种补丁自动生成方法、装置及系统,将ARM Cortex-M系列的补丁生成流程做到核心环节的全自动化,避免手动打补丁过程中的低效劳动,能使软件工程师对于打补丁的制作效率得到几何倍数的提升。
为了实现上述技术目的,达到上述技术效果,本发明通过以下技术方案实现:
第一方面,本发明提供了一种补丁自动生成方法,包括:
响应于获取到的补丁源码文件名,加载预设的补丁源码模板,形成补丁源码初始文件;加载补丁源码编辑器,对所述补丁源码初始文件进行缺陷修改,形成补丁源码文件;
基于所述补丁源码文件生成补丁目标文件,完成补丁自动生成。
可选地,所述补丁源码模板包括补丁描述头信息、补丁包含头文件和补丁入口空函数;所述补丁描述头信息包括补丁描述头函数名、补丁入口地址、补丁出口地址、补丁寄存器和补丁入口汇编信息。
可选地,所述补丁目标文件的生成步骤包括:
获取补丁源码文件的路径信息、文件名信息和补丁描述头信息;
在预设的补丁编译脚本模板中添加补丁源码文件路径信息和文件名信息,形成第一补丁编译脚本;
执行所述第一补丁编译脚本,输出第一汇编信息;
对所述第一汇编信息处理,提取汇编源码,形成补丁汇编源码文件,并向补丁汇编源码文件中添加补丁描述头信息;
对所述补丁汇编源码文件进行处理,获得补丁汇编源码文件路径和文件名;
在预设的补丁编译脚本模板中添加所述补丁汇编源码文件路径和文件名,形成第二补丁编译脚本;
执行所述第二补丁编译脚本,输出第二汇编信息;
提取所述第二汇编信息的机器码,得到补丁目标文件。
可选地,所述在获取补丁源码文件的路径信息、文件名信息和源码信息步骤之前还包括:
对所述补丁源码文件进行地址合法性检测、补丁个数检测和补丁类型检测。
可选地,所述在预设的补丁编译脚本模板中添加补丁源码文件路径和补丁源码文件名,形成第一补丁编译脚本,包括:
加载预设的补丁编译脚本模板;
自动获取所述预设的补丁编译脚本模板中的ARMCC或GCC框架路径信息;
按照规则将ARMCC或GCC框架路径信息中的编译器与补丁源码文件路径和补丁源码文件名组合成编译目标文件;
按照规则将ARMCC或GCC框架路径信息中的链接器与编译目标文件组合成链接目标文件;
按照规则将ARMCC或GCC框架路径信息中的格式转换器与链接目标文件组合成第一补丁编译脚本。
可选地,所述对所述第一汇编信息处理,提取汇编源码,并添加补丁入口汇编信息,形成补丁汇编源码文件,包括:
打开所述第一汇编信息处理;
查找到当前代码段分区位置;
重复执行:查找汇编函数;记录汇编函数名称;对所述汇编函数进行汇编信息提取并整理;将所述汇编函数加入函数列表中;
最终得到补丁汇编源码文件。
可选地,所述在预设的补丁编译脚本模板中添加所述补丁汇编源码文件路径和文件名,形成第二补丁编译脚本,包括:
加载预设的补丁编译脚本模板;
自动获取所述预设的补丁编译脚本模板中的ARMCC或GCC框架路径信息;
按照规则将ARMCC或GCC框架路径信息中的编译器与补丁源码文件路径和文件名组合成编译目标文件;
按照规则将ARMCC或GCC框架路径信息中的编译器与编译目标文件组合成链接目标文件;
按照规则将ARMCC或GCC框架路径信息中的格式转换器与链接目标文件组合成第二补丁编译脚本。
可选地,所述提取所述第二汇编信息的机器码,得到补丁目标文件,包括:
打开所述第二汇编信息处理;
查找到当前代码段分区位置;
查找汇编函数;
记录汇编函数名称;
对汇编函数进行机器码提取并整理;
得到补丁汇编源码文件。
可选地,所述对所述补丁源码初始文件进行缺陷修改,包括:
编写补丁源码初始文件中的缺陷代码,修改补丁入口地址和补丁出口地址。
可选地,所述预设的补丁编译脚本模板包括补丁源码的执行路径、输出路径和编译框架。
第二方面,本发明提供了一种补丁自动生成装置,包括:
补丁源码初始文件形成单元,用于响应于获取到的补丁源码文件名,加载预设的补丁源码模板,形成补丁源码初始文件;
补丁源码文件形成单元,用于加载补丁源码编辑器,对所述补丁源码初始文件进行缺陷修改,形成补丁源码文件;
补丁目标文件生成单元,用于基于所述补丁源码文件生成补丁目标文件,完成补丁自动生成方法。
第三方面,本发明提供了一种补丁自动生成系统,包括:存储介质和处理器;
所述存储介质用于存储指令;
所述处理器用于根据所述指令进行操作以执行第一方面中任一项所述方法的步骤。
与现有技术相比,本发明的有益效果:
本发明提出一种补丁自动生成方法、装置及系统,将ARM Cortex-M系列的补丁生成流程做到核心环节的全自动化,避免手动打补丁过程中的低效劳动,能使软件工程师对于打补丁的制作效率得到几何倍数的提升。
本发明不仅适用于为ARM Cortex-M系列的处理器打补丁,也适用于任何使用ROM作为代码存储的嵌入式处理器。
本发明能完美的实现与ARMCC或GCC的工具框架的融合,不需要对现有的IDE工具做额外附加的改动。
附图说明
为了使本发明的内容更容易被清楚地理解,下面根据具体实施例并结合附图,对本发明作进一步详细的说明,其中:
图1为现有技术中1个补丁的构成示意图;
图2为现有技术中补丁生成流程图;
图3为补丁机实现原理示意图;
图4为本发明补丁自动生成方法的流程图;
图5为补丁源码模板的框架图;
图6为获取补丁源码文件的流程示意图;
图7为补丁目标文件的生成流程示意图之一;
图8为对补丁源码文件进行检测的流程示意图;
图9为输出第一汇编信息的流程示意图;
图10为生成补丁汇编源码文件的流程示意图;
图11为现有技术中补丁生成流程图;
图12为输出第二汇编信息的流程示意图;
图13为补丁目标文件的生成流程示意图之二。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明的保护范围。
下面结合附图对本发明的应用原理作详细的描述。
实施例1
本发明实施例中提供了一种补丁自动生成方法,如图4所示,包括以下步骤:
响应于获取到的补丁源码文件名,加载预设的补丁源码模板,形成补丁源码初始文件,所述补丁源码模板包括补丁描述头信息、补丁包含头文件和补丁入口空函数;所述补丁描述头信息包括补丁描述头函数名、补丁入口地址、补丁出口地址、补丁寄存器和补丁入口汇编信息;
加载补丁源码编辑器,对所述补丁源码初始文件进行缺陷修改,形成补丁源码文件;
基于所述补丁源码文件生成补丁目标文件,完成补丁自动生成。
本发明实施例中格式化的补丁源码模板是为了便于补丁机的提取,从而简化工程师的操作,所述补丁源码模板的框架图参见图5。
基于本发明实施例中的补丁源码模板,制作补丁就变得非常简单,如图6所示,在具体操作过程中包括以下步骤:
(1)在补丁机上点击“新建补丁源码文件”按钮,弹出补丁源码文件名输入框;
(2)在输入框中输入补丁源码文件名,点击“保存”按钮后就形成补丁源码初始文件;
(3)补丁软件自动加载补丁源码编辑器,并显示补丁源码初始文件;
(4)由工程师编写缺陷代码,并修改补丁入口地址、补丁出口地址;
(5)点击保存“补丁源码文件”按钮就形成了补丁源码文件;
(6)点击“执行生成补丁”,补丁软件即可生成补丁目标文件。
上述过程中,在输入的补丁源码文件名时有2个要求:
1)文件名须包含原缺陷函数名,且需在文件名加入前缀Patch;
2)补丁为新模块时,其命名必须符合公司软件命名规范(其须为<Patch>_<模块名>_<功能名>),文件名长度不能超过64字符;
在完成补丁源码文件名输入后,点击“保存”按钮,补丁软件开始创建补丁源码空文件,并存储于本地磁盘上;
从补丁软件指定目录加载“补丁源码模板”到补丁源码空文件中,形成最初始的补丁源码文件;
在完成此步骤后,使用算法把补丁源码文件中的默认“补丁描述头函数名”以及“补丁入口空函数名”进行替换;
在上述完成后,就形成了补丁源码初始文件;
在补丁软件加载完成补丁源码编辑器后,研发工程师就可以在编辑器中完成缺陷代码的编写以及对应的调试,之后再填写补丁入口地址以及出口地址;另在某些特殊的情况下需调整补丁的寄存器,以及补丁入口汇编信息;
为了保证输入的可靠性,补丁文件的任何输入都定时存储入本地磁盘的,这个定时的时间间隔是可以由工程师自定指定,默认为5秒钟;也就是说每间隔5秒钟保存一次。
完成上述步骤并保存后,此时“补丁源码文件”就创建完成。
在本发明实施例的一种具体实施方式中,如图7所示,所述补丁目标文件的生成步骤包括:
(1)补丁源码预处理:获取补丁源码文件的路径信息、文件名信息和补丁描述头信息;
(2)在预设的补丁编译脚本模板中添加补丁源码文件路径信息和补丁源码文件名信息,形成第一补丁编译脚本;
(3)执行所述第一补丁编译脚本,输出第一汇编信息;
(4)对所述第一汇编信息处理,提取汇编源码,形成补丁汇编源码文件,并向补丁汇编源码文件中添加补丁描述头信息;
(5)对所述补丁汇编源码文件进行处理,获得补丁汇编源码文件路径和文件名;
(6)在预设的补丁编译脚本模板中添加所述补丁汇编源码文件路径和文件名,形成第二补丁编译脚本;
(7)执行所述第二补丁编译脚本,输出第二汇编信息;
(8)提取所述第二汇编信息的机器码,得到补丁目标文件。
在本发明实施例的一种具体实施方式中,如图8所示,所述在获取补丁源码文件的路径信息、文件名信息和源码信息步骤之前还包括:
对所述补丁源码文件进行地址合法性检测、补丁个数检测和补丁类型检测;
所述地址合法性检测指的是:检测所有补丁入口地址、以及出口地址是否合法,比如说补丁入口地址必须是一个4字节对齐地址,而出口地址必须也是一个偶数地址(为了适配不同的平台,芯片就出口地址进行了加1操作);
所述补丁个数检测指的是:检测当前待生成的补丁个数,一款芯片支持补丁的个数是有限制的,ARM官方提供仅支持6个,如当前待生成的补丁个数超过6个时则是要进行抛出异常处理,指示不能进行自动生成。芯片是支持多余6个的,但补丁个数大于这个阈值也是要产生同样的异常提示;
所述补丁类型检测指的是:检测当前待生成补丁的类型,首先补丁是分类型的,比如ARM类型补丁分3个类型,分别是通用型补丁、指令补丁、数据补丁;
通用型补丁是针对所有的通用函数的补丁;
指令补丁是其是就是单指令替换不同,意思是把一条汇编指令替换成另外一条汇编指令的补丁;
数据补丁也是单数据替换补丁,一是就是把指令所携带的数据替换成另外一个数据;
另外三种类型的补丁在放入芯片补丁索引位置也是有要求的;在官方所提供的6个是没有要求的,但是某些芯片是扩展支持补丁个数大于6个的;指令补丁或数据补丁,可以存放在任意位置上;而索引7、8位置是不能存放通用型补丁的,这个位置上只能存放指令补丁或数据补丁。
在补丁目标文件的生成过程中,当加载完预设的补丁编译脚本模板后,需要在模板中替换更新其中一些关键信息(必须补丁源码文件编译执行路径、ARMCC框架路径、编译目标文件表、链接目标文件表);在替换其中关键信息其是由先后顺序要求的,这样做才能做到最简化;
首先,从本地Windows系统Keil uvision安装路径下获取,如当前系统未安装编译keil uvision或GCC的集成环境,则软件自动结束编译;
然后,获取补丁源码文件编译执行路径,在获取其路径时,会同时检查其路径下补丁源码文件是否存在,如没有存在源码文件,则直接结束本次编译;
再是,依次把补丁源码文件按照其要求的格式组合而成编译目标文件表;
最后,依次把补丁源码文件按照其要求的格式组合而成链接目标文件表;
待上述4个处理过程完成后,就是执行编译脚本批处理文件,输出的就是汇编信息文件。因此,在本发明实施例的一种具体实施方式中,如图9所示,所述在预设的补丁编译脚本模板中添加补丁源码文件路径和补丁源码文件名,形成第一补丁编译脚本,包括:
加载预设的补丁编译脚本模板;
自动获取所述预设的补丁编译脚本模板中的ARMCC或GCC框架路径信息;
按照规则将ARMCC或GCC框架路径信息中的编译器与补丁源码文件路径和补丁源码文件名组合成编译目标文件;
按照规则将ARMCC或GCC框架路径信息中的链接器与编译目标文件组合成链接目标文件;
按照规则将ARMCC或GCC框架路径信息中的格式转换器与链接目标文件组合成第一补丁编译脚本。
汇编信息处理,逻辑处理流程较为复杂的,下面就逻辑处理流程进行描述说明。处理流程:在执行完成批处理文件,本次编译链接也就完成了,软件会自动打开编译输出的汇编信息文件;然后开始使用算法查找汇编文件中代码分区片段位置,再按行查找到汇编函数,找到汇编函数后,记录当前函数名,再开始就此函数的内汇编信息的按行提取和整理;当此汇编函数提取完成后,再把汇编函数加入汇编列表中;再逐行的对再一个函数提取和整理,直至全部汇编函数处理完成。因此,在本发明实施例的一种具体实施方式中,如图10所示,所述对所述第一汇编信息处理,提取汇编源码,并添加补丁入口汇编信息,形成补丁汇编源码文件,包括:
打开所述第一汇编信息处理;
查找到当前代码段分区位置;
重复执行:查找汇编函数;记录汇编函数名称;对所述汇编函数进行汇编信息提取并整理;将所述汇编函数加入函数列表中;
最终得到补丁汇编源码文件。
如图通11所示,所述的就此函数的内汇编信息的按行提取和整理,包括:
重新定义其补丁汇编源码文件名(文件名_ASM.c),另外以补丁入口函数加_ASM为主函数,这里在定义汇编补丁主函数时,在函数名末尾附加_ASM标记来指示(补丁入口函数名_ASM);
然后把补丁源码中的补丁汇编描述头加入到汇编代码的首部;
然后开始把当补丁源码中的入口函数添加其后,再把补丁入口函数所关联到的函数都添入到汇编函数体内,并在每个汇编函数头尾加入汇编对齐指令,然后在函数体的最后位置添加出口地址的定义,然后后保存为成补丁汇编代码文件,并以汇编函数名命名文件。
在本发明实施例的一种具体实施方式中,如图12所示,所述在预设的补丁编译脚本模板中添加所述补丁汇编源码文件路径和文件名,形成第二补丁编译脚本,包括:
加载预设的补丁编译脚本模板;
自动获取所述预设的补丁编译脚本模板中的ARMCC或GCC框架路径信息;
按照规则将ARMCC或GCC框架路径信息中的编译器与补丁源码文件路径和文件名组合成编译目标文件;
按照规则将ARMCC或GCC框架路径信息中的编译器与编译目标文件组合成链接目标文件;
按照规则将ARMCC或GCC框架路径信息中的格式转换器与链接目标文件组合成第二补丁编译脚本。
在本发明实施例的一种具体实施方式中,如图13所示,所述提取所述第二汇编信息的机器码,得到补丁目标文件,包括:
打开所述第二汇编信息处理;
查找到当前代码段分区位置;
查找汇编函数;
记录汇编函数名称;
进行机器码提取并整理;
得到补丁汇编源码文件;
具体的处理流程包括:在编译链接完成后,软件自动加载其输出的补丁汇编源码“汇编信息”文件,开始使用算法查找代码段分区位置,查找汇编文件中补丁汇编代码函数,在查找到补丁汇编代码函数后,则可以按一定的规则提取其中所含的机器码信息,并按照大小端进行调整后,形成补丁目标文件。
实施例2
本发明实施例中提供了一种补丁自动生成装置,包括:
补丁源码初始文件形成单元,用于响应于获取到的补丁源码文件名,加载预设的补丁源码模板,形成补丁源码初始文件,所述补丁源码模板包括补丁描述头信息、补丁包含头文件和补丁入口空函数;所述补丁描述头信息包括补丁描述头函数名、补丁入口地址、补丁出口地址、补丁及寻求和补丁入口汇编信息;
补丁源码文件形成单元,用于加载补丁源码编辑器,对所述补丁源码初始文件进行缺陷修改,形成补丁源码文件;
补丁目标文件生成单元,用于基于所述补丁源码文件生成补丁目标文件,完成补丁自动生成方法。
其余部分均与实施例1相同。
实施例3
本发明实施例中提供了一种补丁自动生成系统,包括:存储介质和处理器;
所述存储介质用于存储指令;
所述处理器用于根据所述指令进行操作以执行根据实施例1中任一项所述方法的步骤。
其余部分均与实施例1相同。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。
以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
Claims (12)
1.一种补丁自动生成方法,其特征在于,包括:
响应于获取到的补丁源码文件名,加载预设的补丁源码模板,形成补丁源码初始文件;
加载补丁源码编辑器,对所述补丁源码初始文件进行缺陷修改,形成补丁源码文件;
基于所述补丁源码文件生成补丁目标文件,完成补丁自动生成。
2.根据权利要求1所述的一种补丁自动生成方法,其特征在于:所述补丁源码模板包括补丁描述头信息、补丁包含头文件和补丁入口空函数;所述补丁描述头信息包括补丁描述头函数名、补丁入口地址、补丁出口地址、补丁寄存器和补丁入口汇编信息。
3.根据权利要求2所述的一种补丁自动生成方法,其特征在于:所述补丁目标文件的生成步骤包括:
获取补丁源码文件的路径信息、文件名信息和补丁描述头信息;
在预设的补丁编译脚本模板中添加补丁源码文件路径信息和文件名信息,形成第一补丁编译脚本;
执行所述第一补丁编译脚本,输出第一汇编信息;
对所述第一汇编信息处理,提取汇编源码,形成补丁汇编源码文件,并向补丁汇编源码文件中添加补丁描述头信息;
对所述补丁汇编源码文件进行处理,获得补丁汇编源码文件路径和文件名;
在预设的补丁编译脚本模板中添加所述补丁汇编源码文件路径和文件名,形成第二补丁编译脚本;
执行所述第二补丁编译脚本,输出第二汇编信息;
提取所述第二汇编信息的机器码,得到补丁目标文件。
4.根据权利要求3所述的一种补丁自动生成方法,其特征在于,所述在获取补丁源码文件的路径信息、文件名信息和源码信息步骤之前还包括:
对所述补丁源码文件进行地址合法性检测、补丁个数检测和补丁类型检测。
5.根据权利要求3所述的一种补丁自动生成方法,其特征在于,所述在预设的补丁编译脚本模板中添加补丁源码文件路径和补丁源码文件名,形成第一补丁编译脚本,包括:
加载预设的补丁编译脚本模板;
自动获取所述预设的补丁编译脚本模板中的ARMCC或GCC框架路径信息;
按照规则将ARMCC或GCC框架路径信息中的编译器与补丁源码文件路径和补丁源码文件名组合成编译目标文件;
按照规则将ARMCC或GCC框架路径信息中的链接器与编译目标文件组合成链接目标文件;
按照规则将ARMCC或GCC框架路径信息中的格式转换器与链接目标文件组合成第一补丁编译脚本。
6.根据权利要求3所述的一种补丁自动生成方法,其特征在于,所述对所述第一汇编信息处理,提取汇编源码,并添加补丁入口汇编信息,形成补丁汇编源码文件,包括:
打开所述第一汇编信息处理;
查找到当前代码段分区位置;
重复执行:查找汇编函数;记录汇编函数名称;对所述汇编函数进行汇编信息提取并整理;将所述汇编函数加入函数列表中;
最终得到补丁汇编源码文件。
7.根据权利要求3所述的一种补丁自动生成方法,其特征在于,所述在预设的补丁编译脚本模板中添加所述补丁汇编源码文件路径和文件名,形成第二补丁编译脚本,包括:
加载预设的补丁编译脚本模板;
自动获取所述预设的补丁编译脚本模板中的ARMCC或GCC框架路径信息;
按照规则将ARMCC或GCC框架路径信息中的编译器与补丁源码文件路径和文件名组合成编译目标文件;
按照规则将ARMCC或GCC框架路径信息中的编译器与编译目标文件组合成链接目标文件;
按照规则将ARMCC或GCC框架路径信息中的格式转换器与链接目标文件组合成第二补丁编译脚本。
8.根据权利要求3所述的一种补丁自动生成方法,其特征在于,所述提取所述第二汇编信息的机器码,得到补丁目标文件,包括:
打开所述第二汇编信息处理;
查找到当前代码段分区位置;
查找汇编函数;
记录汇编函数名称;
对汇编函数进行机器码提取并整理;
得到补丁汇编源码文件。
9.根据权利要求3所述的一种补丁自动生成方法,其特征在于:所述预设的补丁编译脚本模板包括补丁源码的执行路径、输出路径和编译框架。
10.根据权利要求1所述的一种补丁自动生成方法,其特征在于,所述对所述补丁源码初始文件进行缺陷修改,包括:
编写补丁源码初始文件中的缺陷代码,修改补丁入口地址和补丁出口地址。
11.一种补丁自动生成装置,其特征在于,包括:
补丁源码初始文件形成单元,用于响应于获取到的补丁源码文件名,加载预设的补丁源码模板,形成补丁源码初始文件;
补丁源码文件形成单元,用于加载补丁源码编辑器,对所述补丁源码初始文件进行缺陷修改,形成补丁源码文件;
补丁目标文件生成单元,用于基于所述补丁源码文件生成补丁目标文件,完成补丁自动生成方法。
12.一种补丁自动生成系统,其特征在于,包括:存储介质和处理器;
所述存储介质用于存储指令;
所述处理器用于根据所述指令进行操作以执行根据权利要求1~10中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010440120.9A CN111930413B (zh) | 2020-05-22 | 2020-05-22 | 一种补丁自动生成方法、装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010440120.9A CN111930413B (zh) | 2020-05-22 | 2020-05-22 | 一种补丁自动生成方法、装置及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111930413A true CN111930413A (zh) | 2020-11-13 |
CN111930413B CN111930413B (zh) | 2023-07-21 |
Family
ID=73317316
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010440120.9A Active CN111930413B (zh) | 2020-05-22 | 2020-05-22 | 一种补丁自动生成方法、装置及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111930413B (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01270129A (ja) * | 1988-04-22 | 1989-10-27 | Nec Corp | パッチ自動作成方式 |
CN101799763A (zh) * | 2009-02-10 | 2010-08-11 | 华为技术有限公司 | 内核在线补丁的方法、装置和系统 |
CN102479092A (zh) * | 2010-11-30 | 2012-05-30 | 中兴通讯股份有限公司 | 软件系统更新补丁的方法和装置 |
CN103744709A (zh) * | 2014-01-23 | 2014-04-23 | 华为技术有限公司 | 补丁加载方法及装置 |
CN104111848A (zh) * | 2014-06-27 | 2014-10-22 | 华中科技大学 | 一种基于异步检查点的多线程软件动态升级方法 |
CN104317589A (zh) * | 2014-10-22 | 2015-01-28 | 中国电子科技集团公司第四十一研究所 | 一种用于加载动态链接库的代码自动生成方法及装置 |
CN105354045A (zh) * | 2014-08-21 | 2016-02-24 | 中兴通讯股份有限公司 | 补丁的制作方法及装置、补丁的激活方法及装置 |
CN108874438A (zh) * | 2018-06-25 | 2018-11-23 | 南京中感微电子有限公司 | 补丁生成方法、装置、电子设备及计算机程序产品 |
US10248409B1 (en) * | 2014-12-03 | 2019-04-02 | Amazon Technologies, Inc. | Limiting the effects of source code patches on corresponding native-code patches |
CN111142923A (zh) * | 2019-12-26 | 2020-05-12 | 无锡中感微电子股份有限公司 | 一种补丁管理方法和系统 |
CN111142877A (zh) * | 2019-12-19 | 2020-05-12 | 无锡中感微电子股份有限公司 | Rom芯片补丁的接口函数及参数类型自动化提取方法、系统及存储介质 |
-
2020
- 2020-05-22 CN CN202010440120.9A patent/CN111930413B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01270129A (ja) * | 1988-04-22 | 1989-10-27 | Nec Corp | パッチ自動作成方式 |
CN101799763A (zh) * | 2009-02-10 | 2010-08-11 | 华为技术有限公司 | 内核在线补丁的方法、装置和系统 |
CN102479092A (zh) * | 2010-11-30 | 2012-05-30 | 中兴通讯股份有限公司 | 软件系统更新补丁的方法和装置 |
CN103744709A (zh) * | 2014-01-23 | 2014-04-23 | 华为技术有限公司 | 补丁加载方法及装置 |
CN104111848A (zh) * | 2014-06-27 | 2014-10-22 | 华中科技大学 | 一种基于异步检查点的多线程软件动态升级方法 |
CN105354045A (zh) * | 2014-08-21 | 2016-02-24 | 中兴通讯股份有限公司 | 补丁的制作方法及装置、补丁的激活方法及装置 |
CN104317589A (zh) * | 2014-10-22 | 2015-01-28 | 中国电子科技集团公司第四十一研究所 | 一种用于加载动态链接库的代码自动生成方法及装置 |
US10248409B1 (en) * | 2014-12-03 | 2019-04-02 | Amazon Technologies, Inc. | Limiting the effects of source code patches on corresponding native-code patches |
CN108874438A (zh) * | 2018-06-25 | 2018-11-23 | 南京中感微电子有限公司 | 补丁生成方法、装置、电子设备及计算机程序产品 |
CN111142877A (zh) * | 2019-12-19 | 2020-05-12 | 无锡中感微电子股份有限公司 | Rom芯片补丁的接口函数及参数类型自动化提取方法、系统及存储介质 |
CN111142923A (zh) * | 2019-12-26 | 2020-05-12 | 无锡中感微电子股份有限公司 | 一种补丁管理方法和系统 |
Non-Patent Citations (1)
Title |
---|
李斌等: "程序自动修复:关键问题及技术", 《软件学报》, vol. 30, no. 2, pages 1 - 22 * |
Also Published As
Publication number | Publication date |
---|---|
CN111930413B (zh) | 2023-07-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10459695B2 (en) | Correction of code errors using machine learning | |
CN104239082B (zh) | 嵌入式系统的热补丁实现方法 | |
CN109408528B (zh) | 一种数据库脚本生成方法、装置、计算装置和存储介质 | |
CN103019787B (zh) | 函数调用关系确定方法、热补丁升级方法及装置 | |
US20230004368A1 (en) | Multi-chip compatible compiling method and device | |
CN102479265B (zh) | 修改硬掩膜产品固件错误功能的方法 | |
CN103885770A (zh) | 单片机从可执行文件找回汇编文件的实现方法 | |
US10248409B1 (en) | Limiting the effects of source code patches on corresponding native-code patches | |
CN110442371A (zh) | 一种发布代码的方法、装置、介质及计算机设备 | |
CN107515739B (zh) | 提高代码执行性能的方法及装置 | |
CN105630661A (zh) | 用于自动化跨系统程序调试的方法和装置 | |
CN111142877B (zh) | Rom芯片补丁的接口函数及参数类型自动化提取方法、系统及存储介质 | |
CN109947711B (zh) | 一种对ios项目开发过程中的多语言文件自动化管理方法 | |
CN110795326A (zh) | 一种代码拦截检测方法、存储介质、电子设备及系统 | |
US10761962B1 (en) | Automated software program repair | |
CN111930413A (zh) | 一种补丁自动生成方法、装置及系统 | |
US11740895B2 (en) | Generation of software program repair explanations | |
CN114595204A (zh) | 一种数据文件拼接方法 | |
CN111142923B (zh) | 一种补丁管理方法及系统 | |
JP2002342129A (ja) | コーディングチェック方式 | |
CN117348915B (zh) | 一种内核代码自动同步方法及系统 | |
US11119889B1 (en) | Automated software program repair | |
TWI498727B (zh) | 一種除錯方法及系統 | |
CN112416362B (zh) | 一种pdk编译功能的实现方法 | |
JP2003091431A (ja) | テストシナリオ選択実行システム、方法、およびプログラム |
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 |