CN105138341A - 基于MIPS架构和vxworks系统实现热补丁长跳转的方法 - Google Patents
基于MIPS架构和vxworks系统实现热补丁长跳转的方法 Download PDFInfo
- Publication number
- CN105138341A CN105138341A CN201510617430.2A CN201510617430A CN105138341A CN 105138341 A CN105138341 A CN 105138341A CN 201510617430 A CN201510617430 A CN 201510617430A CN 105138341 A CN105138341 A CN 105138341A
- Authority
- CN
- China
- Prior art keywords
- patch
- register
- function
- patch function
- loaded
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于MIPS架构和vxworks系统实现热补丁长跳转的方法,将补丁函数绝对地址的高位值加载到寄存器的高位,将绝对地址的低位值加载到寄存器的低位,将被补丁函数的入口指令修改为跳转至寄存器。本发明通过三条指令实现在4G程序空间范围内任意地址跳转,通过修改指令前的遍历检查操作确保系统中其他任务不因热补丁激活而被终端挂起,通过修改函数前后设置的关中断和开中断操作确保修改过程不被抢占。本发明方法不依赖编译器支持特殊选项(如-mlongcall选项),不需要增加中间跳转函数,跳转距离可以达到4G程序寻址空间范围,且实现原理简单。
Description
技术领域
本发明涉及一种通信技术领域的热补丁实现方法,具体涉及一种基于MIPS架构和vxworks系统实现热补丁长跳转的方法。
背景技术
热补丁是在不重启设备的情况下,对设备当前软件版本的错误进行修复的一种解决方案。热补丁的主要原理是将被补丁函数的入口指令修改为跳转指令,跳转指令跳转到补丁函数执行。如图1所示,修改ip_rcv(被补丁函数)的入口指令为j指令(MIPS汇编跳转指令,跳转到补丁函数fos_patch_ip_rcv执行)。这样CPU执行到ip_rcv函数时会立即跳转到fos_patch_ip_rcv函数执行,这样便可以在补丁函数(fos_patch_ip_rcv)修复ip_rcv函数中存在的错误。
32位CPU单条跳转指令的跳转距离限制是热补丁必须解决的一个问题。如图1所示,被补丁函数(ip_rcv)跳转到补丁函数(fos_patch_ip_rcv)的距离如果大于跳转指令的跳转距离(如MIPSCPU的j指令,跳转范围最大是256M),CPU就无法完成跳转功能。
目前针对热补丁长跳转问题,目前常见解决方法有如下几种:1)通过修改链接器的链接脚本,确保被补丁函数到补丁函数的跳转距离在跳转指令的跳转范围内。这种方法仅适用代码段比较小的程序,且具体实现复杂;2)使用编译器的-mlongcall选项,生成64位长指令。这种方案需要编译器的支持,而且生成的程序文件比较大,在flash资源紧缺嵌入式系统中使用可能性较小;3)通过增加中间小函数。被补丁函数先跳转到中间小函数,然后跳转到补丁函数。这种方法需要对中间小函数在程序空间中的位置进行规划,实现比较复杂。
发明内容:
为了克服上述背景技术的缺陷,本发明提供一种基于MIPS架构和vxworks系统实现热补丁长跳转的方法。
为了解决上述技术问题本发明的所采用的技术方案为:
一种基于MIPS架构和vxworks系统实现热补丁长跳转的方法,将补丁函数绝对地址的高位值加载到寄存器的高位,将绝对地址的低位值加载到寄存器的低位,将被补丁函数的入口指令修改为跳转至寄存器。
较佳地,将被补丁函数的入口指令修改为跳转至寄存器之前,检查确保被补丁函数的入口指令安全可修改。
较佳地,确保被补丁函数的入口指令安全可修改的具体方法为:遍历系统全部任务,检查每个任务的下一条待执行指令地址是否为被补丁函数的入口指令的地址,若否,则表示安全可修改,若是,则表示不可修改。
较佳地,确保将被补丁函数的入口指令修改为跳转至寄存器的动作以原子方式完成,该修改过程不被抢占。
较佳地,确保将被补丁函数的入口指令修改为跳转至寄存器的动作以原子方式完成的具体方法为:修改前设置关中断函数,修改后设置开中断函数。
较佳地,补丁函数绝对地址为32位,将补丁函数绝对地址的高16位值加载到寄存器的高16位,将补丁函数绝对地址的低16位值加载到寄存器的低16位。
较佳地,用lui指令将补丁函数绝对地址的高16位值加载到寄存器的高16位,用ori指令将补丁函数绝对地址的低16位值加载到寄存器的低16位。
较佳地,将被补丁函数的入口指令修改为jrt0,即跳转至t0寄存器。
本发明的有益效果在于:通过三条指令实现在4G程序空间范围内任意地址跳转,通过修改指令前的遍历检查操作确保系统中其他任务不因热补丁激活而被终端挂起,通过修改函数前后设置的关中断和开中断操作确保修改过程不被抢占。本发明方法不依赖编译器支持特殊选项(如-mlongcall选项),不需要增加中间跳转函数,跳转距离可以达到4G程序寻址空间范围,且实现原理简单。
附图说明
图1为热补丁实现方法示意图;
图2为未设置本发明实施例2中所述确保系统中没有任务在执行被补丁函数的步骤时,被补丁函数在存储器中的存储结构图;
图3为未设置本发明实施例2中所述确保系统中没有任务在执行被补丁函数的步骤,且补丁函数被激活后被补丁函数在存储器中的存储结构图;
图4为本发明实施例2的流程图;
图5为本发明实施例3的流程图。
具体实施方式
下面结合附图和实施例对本发明做进一步的说明。
实施例1,一种基于MIPS架构和vxworks系统实现热补丁长跳转的方法,包括以下步骤:
步骤S11,将补丁函数绝对地址的高位值加载到寄存器的高位,将绝对地址的低位值加载到寄存器的低位;
步骤S12,将被补丁函数的入口指令修改为跳转至寄存器。
MIPSCPU的j跳转指令的跳转距离最大为256M,本实施例可以通过jr指令来实现4G范围的长距离跳转,将jr指令与多条指令结合完成到指定地址的跳转。本实施例用如下三条指令实现4G范围的热补丁长距离跳转,即热补丁长跳转指令为:
其中,addr为32位的热补丁函数的绝对地址,t0为CPU寄存器。lui指令将addr的高16位值加载到t0寄存器的高16位,ori指令将addr的低16位值加载到t0寄存器的低16位,jr指令是跳转到t0所指的地址执行。t0是32位寄存器,所能寻址的地址范围是2^32次方(也就是4G)。所以通过如上的三条指令便可以实现在4G程序空间范围内任意地址的热补丁长跳转。
实施例2,在修改被补丁函数入口指令前和修改时要检查,确保系统中没有任务在执行待修改的指令,也即没有任务正在执行被补丁函数。
如图2和图3所示,在激活热补丁时,需要将ip_rcv入口的三条指令(图2中2c、30、34)替换为热补丁长跳转指令。如果系统中有任务A正在执行2c、30、34这三条指令时被其他任务中断挂起,并修改图2中2c、30、34这三条指令,那么任务A再次得到运行时将会导致系统不可预知的后果。
任务A执行到ip_rcv函数第二条指令(地址30)时被抢占挂起,下次再次运行的执行的指令地址是34;热补丁激活后,如图3所示,被补丁函数入口的三条指令被替换为长跳转指令,任务A再次运行时执行的指令地址是34也就是jrt0,而不是执行热补丁激活前如图2中2c、30、34这三条指令,而t0的值是不可预知的,此时就会导致系统异常。
为了防止这种情况的发生本实施例在实施例1的基础上增加了确保激活热补丁的同时不会有其他系统任务被中断挂起的功能,包括以下步骤:
步骤S21,将补丁函数绝对地址的高位值加载到寄存器的高位,将绝对地址的低位值加载到寄存器的低位;
步骤S22,遍历系统全部任务,检查每个任务的下一条待执行指令地址是否为被补丁函数的入口指令的地址,若否,则表示安全可修改,进入步骤S23,若是,则表示不安全不可修改,中断热补丁跳转程序;
步骤S23,将被补丁函数的入口指令修改为跳转至寄存器。
在修改函数的入口指令前遍历系统所有任务,确保没有任务的下一条待执行指令地址是准备要修改的指令地址,代码伪码如下:
/*检查函数func_addr入口指令是否安全可修改,返回true表示安全可修改*/
实施例3,修改被补丁函数入口指令时,需保证整个修改过程不被抢占。在经过检查确保被补丁函数入口指令安全可修改后,执行修改函数指令时,修改动作(替换三条热补丁长跳转指令)必须是原子方式修改,修改执行过程中不能有被系统其他任务抢占的情况发生,否则也会导致系统异常。
解决方法就是修改前增加关中断,修改后增加开中断处理,具体步骤如下:
步骤S31,将补丁函数绝对地址的高位值加载到寄存器的高位,将绝对地址的低位值加载到寄存器的低位;
步骤S32,遍历系统全部任务,检查每个任务的下一条待执行指令地址是否为被补丁函数的入口指令的地址,若否,则表示安全可修改,进入步骤S33,若是,则表示不安全不可修改,中断热补丁跳转程序;
步骤S33,设置关中断函数,进行关中断操作;
步骤S34,将被补丁函数的入口指令修改为跳转至寄存器;
步骤S35,设置开中断函数,进行开中断操作。关中断后操作系统不会处理中断事件,可以保证不发生任务抢占。相反,开中断后,操作系统处理中断事件,有可能发生任务抢占。
设置关中断和开中断处理的代码伪码如下:
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (8)
1.一种基于MIPS架构和vxworks系统实现热补丁长跳转的方法,其特征在于:将补丁函数绝对地址的高位值加载到寄存器的高位,将所述绝对地址的低位值加载到所述寄存器的低位,将被补丁函数的入口指令修改为跳转至所述寄存器。
2.根据权利要求1所述的一种基于MIPS架构和vxworks系统实现热补丁长跳转的方法,其特征在于:将所述被补丁函数的入口指令修改为跳转至所述寄存器之前,检查确保所述被补丁函数的入口指令安全可修改。
3.根据权利要求2所述的一种基于MIPS架构和vxworks系统实现热补丁长跳转的方法,其特征在于,确保所述被补丁函数的入口指令安全可修改的具体方法为:遍历系统全部任务,检查每个任务的下一条待执行指令地址是否为所述被补丁函数的入口指令的地址,若否,则表示安全可修改,若是,则表示不可修改。
4.根据权利要求2所述的一种基于MIPS架构和vxworks系统实现热补丁长跳转的方法,其特征在于:确保将所述被补丁函数的入口指令修改为跳转至所述寄存器的动作以原子方式完成,该修改过程不被抢占。
5.根据权利要求4所述的一种基于MIPS架构和vxworks系统实现热补丁长跳转的方法,其特征在于,确保将所述被补丁函数的入口指令修改为跳转至所述寄存器的动作以原子方式完成的具体方法为:修改前设置关中断函数,修改后设置开中断函数。
6.根据权利要求1所述的一种基于MIPS架构和vxworks系统实现热补丁长跳转的方法,其特征在于:所述补丁函数绝对地址为32位,将所述补丁函数绝对地址的高16位值加载到寄存器的高16位,将所述补丁函数绝对地址的低16位值加载到寄存器的低16位。
7.根据权利要求6所述的一种基于MIPS架构和vxworks系统实现热补丁长跳转的方法,其特征在于:用lui指令将所述补丁函数绝对地址的高16位值加载到寄存器的高16位,用ori指令将所述补丁函数绝对地址的低16位值加载到寄存器的低16位。
8.根据权利要求1所述的一种基于MIPS架构和vxworks系统实现热补丁长跳转的方法,其特征在于:将被补丁函数的入口指令修改为jrt0,即跳转至t0寄存器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510617430.2A CN105138341A (zh) | 2015-09-24 | 2015-09-24 | 基于MIPS架构和vxworks系统实现热补丁长跳转的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510617430.2A CN105138341A (zh) | 2015-09-24 | 2015-09-24 | 基于MIPS架构和vxworks系统实现热补丁长跳转的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105138341A true CN105138341A (zh) | 2015-12-09 |
Family
ID=54723699
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510617430.2A Pending CN105138341A (zh) | 2015-09-24 | 2015-09-24 | 基于MIPS架构和vxworks系统实现热补丁长跳转的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105138341A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111666096A (zh) * | 2020-07-02 | 2020-09-15 | 腾讯科技(深圳)有限公司 | 目标应用的热更新方法和装置、存储介质和电子设备 |
WO2021115036A1 (zh) * | 2019-12-13 | 2021-06-17 | 中兴通讯股份有限公司 | Linux内核热补丁实现方法、电子设备及计算机可读介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120102476A1 (en) * | 2010-02-11 | 2012-04-26 | Yu Jiaqiang | Method, device and system for activating on-line patch |
CN103399775A (zh) * | 2013-08-05 | 2013-11-20 | 北京华为数字技术有限公司 | 一种热补丁方法及设备 |
-
2015
- 2015-09-24 CN CN201510617430.2A patent/CN105138341A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120102476A1 (en) * | 2010-02-11 | 2012-04-26 | Yu Jiaqiang | Method, device and system for activating on-line patch |
CN103399775A (zh) * | 2013-08-05 | 2013-11-20 | 北京华为数字技术有限公司 | 一种热补丁方法及设备 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021115036A1 (zh) * | 2019-12-13 | 2021-06-17 | 中兴通讯股份有限公司 | Linux内核热补丁实现方法、电子设备及计算机可读介质 |
US11868763B2 (en) | 2019-12-13 | 2024-01-09 | Zte Corporation | Method for implementing Linux kernel hot patch, electronic device, and computer readable medium |
CN111666096A (zh) * | 2020-07-02 | 2020-09-15 | 腾讯科技(深圳)有限公司 | 目标应用的热更新方法和装置、存储介质和电子设备 |
CN111666096B (zh) * | 2020-07-02 | 2021-03-16 | 腾讯科技(深圳)有限公司 | 目标应用的热更新方法和装置、存储介质和电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105159738A (zh) | 一种热补丁实现方法及系统 | |
CN106933609B (zh) | Android应用程序安装包的生成方法及装置 | |
US10379861B2 (en) | Decoding instructions that are modified by one or more other instructions | |
CN102402427A (zh) | 一种Java应用程序的更新方法及装置 | |
CN109117362B (zh) | 一种基于中间语言的plc程序验证系统 | |
WO2015090196A1 (zh) | 一种在配电终端中建立可信环境的方法 | |
CN105975816A (zh) | 移动终端下基于虚拟技术的代码保护方法及系统 | |
RU2012149004A (ru) | Увеличение числа доступных для команд регистров общего назначения | |
US9639442B2 (en) | Modified condition/decision coverage test case automation | |
CN105138341A (zh) | 基于MIPS架构和vxworks系统实现热补丁长跳转的方法 | |
WO2015018302A1 (zh) | 一种热补丁方法及设备 | |
CN104598841A (zh) | 一种面向终端安全的双系统引导方法和装置 | |
US11132184B2 (en) | Engineering apparatus, control method, and program for executing a control application | |
CN112114789A (zh) | 一种业务开发方法及设备 | |
CN102566481B (zh) | 一种基于c语言的plc控制系统及其实现方法 | |
JP6271206B2 (ja) | 制御装置および編集装置 | |
TW201732562A (zh) | 控制轉移強制執行中的非追蹤控制轉移 | |
CN107704279B (zh) | 一种数据加载方法以及装置 | |
US20130311164A1 (en) | Dynamic generation of test segments | |
JP2015161997A (ja) | 分岐命令を高速に処理するためのインストラクションキャッシュを有するプログラマブルコントローラ | |
CN104751026A (zh) | 安卓系统的软件保护方法、软件应用方法及相关装置 | |
CN104516752A (zh) | 一种信息处理方法及电子设备 | |
Narayan Rajput et al. | Icspatch: Automated vulnerability localization and non-intrusive hotpatching in industrial control systems using data dependence graphs | |
CN110084005A (zh) | 一种代码的处理方法及装置 | |
KR20100099569A (ko) | 실행 파일 생성 방법 및 그 방법을 이용하는 시스템 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20151209 |
|
RJ01 | Rejection of invention patent application after publication |