CN114490310A - 嵌入式系统内存改写监测方法、装置、设备及存储介质 - Google Patents
嵌入式系统内存改写监测方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114490310A CN114490310A CN202011270848.8A CN202011270848A CN114490310A CN 114490310 A CN114490310 A CN 114490310A CN 202011270848 A CN202011270848 A CN 202011270848A CN 114490310 A CN114490310 A CN 114490310A
- Authority
- CN
- China
- Prior art keywords
- memory
- monitored
- variable
- monitoring
- memory address
- 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
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/362—Software debugging
-
- 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/362—Software debugging
- G06F11/366—Software debugging using diagnostics
-
- 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/53—Decompilation; Disassembly
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请实施例提供了嵌入式系统内存改写监测方法、装置、设备及存储介质,获取嵌入式系统中由内存改写而导致异常的异常线程的运行数据;根据异常线程的运行数据,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量;运行嵌入式系统,并通过预设的监测程序监测待监测内存地址或内存变量;在待监测内存地址或内存变量被异常改写时,通过预设调用工具获取待监测内存地址或内存变量的调用栈信息。实现了对嵌入式系统中的内存改写的自动化监测,并且获取了内存改写时的调用栈信息,能够方便定位改写原因。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及嵌入式系统内存改写监测方法、装置、设备及存储介质。
背景技术
嵌入式系统是以应用为中心,以现代计算机技术为基础,能够根据用户需求(例如,功能、可靠性、成本、体积、功耗、环境等)灵活裁剪软硬件模块的专用计算机系统。
嵌入式系统由硬件和软件组成.是能够独立进行运作的器件。其软件内容只包括软件运行环境及其操作系统。硬件内容可以包括处理器、存储器、通信模块等。相比于一般的计算机处理系统而言,嵌入式系统存在较大的差异性,它不能实现大容量的存储功能,因为没有与之相匹配的大容量介质。在嵌入式系统中,由于内存变量没有明确的空间隔离,在同一个进程内,各个子系统共享同一块内存空间,所以经常发生内存改写的问题,从而导致进程访问内存数据错误的情况,容易导致进程崩溃。因此,希望对嵌入式系统中的内存改写进行监测。
发明内容
本申请实施例的目的在于提供一种嵌入式系统内存改写监测方法、装置、设备及存储介质,以实现对嵌入式系统中的内存改写进行监测。具体技术方案如下:
第一方面,本申请实施例提供了一种嵌入式系统内存改写监测方法,所述方法包括:
获取嵌入式系统中由内存改写而导致异常的异常线程的运行数据;
根据所述异常线程的运行数据,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量;
运行所述嵌入式系统,并通过预设的监测程序监测所述待监测内存地址或内存变量;
在所述待监测内存地址或内存变量被异常改写时,通过预设调用工具获取所述待监测内存地址或内存变量的调用栈信息。
在一种可能的实施方式中,所述根据所述异常线程的运行数据,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量,包括:
对所述异常线程的运行数据进行反汇编,得到汇编数据;
根据所述汇编数据得到内存改写的位置;
根据所述内存改写的位置,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量。
在一种可能的实施方式中,所述运行所述嵌入式系统,并通过预设的监测程序监测所述待监测内存地址或内存变量,包括:
根据所述汇编数据,确定所述嵌入式系统中内存变量被改写的代码段,针对所述内存变量被改写的代码段添加监测函数;
运行添加监测函数后的嵌入式系统,并利用所述监测函数监测所述待监测内存地址或内存变量。
在一种可能的实施方式中,所述在所述待监测内存地址或内存变量被异常改写时,通过预设调用工具获取所述待监测内存地址或内存变量的调用栈信息,包括:
在所述待监测内存地址或内存变量被异常改写时触发断点,并通过程序调试工具GDB调用call函数,以获取异常修改改写所述待监测内存地址或内存变量的调用栈信息。
第二方面,本申请实施例提供了一种嵌入式系统内存改写监测装置,其特征在于,所述装置包括:
运行数据获取模块,用于获取嵌入式系统中由内存改写而导致异常的异常线程的运行数据;
待监测内存获取模块,用于根据所述异常线程的运行数据,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量;
内存监测获取模块,用于运行所述嵌入式系统,并通过预设的监测程序监测所述待监测内存地址或内存变量;
调用栈信息获取模块,用于在所述待监测内存地址或内存变量被异常改写时,通过预设调用工具获取所述待监测内存地址或内存变量的调用栈信息。
在一种可能的实施方式中,所述待监测内存获取模块,具体用于:对所述异常线程的运行数据进行反汇编,得到汇编数据;根据所述汇编数据得到内存改写的位置;根据所述内存改写的位置,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量。
在一种可能的实施方式中,所述内存监测获取模块,具体用于:根据所述汇编数据,确定所述嵌入式系统中内存变量被改写的代码段,针对所述内存变量被改写的代码段添加监测函数;运行添加监测函数后的嵌入式系统,并利用所述监测函数监测所述待监测内存地址或内存变量。
在一种可能的实施方式中,所述调用栈信息获取模块,具体用于:在所述待监测内存地址或内存变量被异常改写时触发断点,并通过程序调试工具GDB调用call函数,以获取异常修改改写所述待监测内存地址或内存变量的调用栈信息。
第三方面,本申请实施例提供了一种电子设备,其特征在于,包括处理器及存储器;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的程序时,实现本申请中任一所述的嵌入式系统内存改写监测方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现本申请中任一所述的嵌入式系统内存改写监测方法。
本申请实施例提供的嵌入式系统内存改写监测方法、装置、设备及存储介质,获取嵌入式系统中由内存改写而导致异常的异常线程的运行数据;根据异常线程的运行数据,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量;运行嵌入式系统,并通过预设的监测程序监测待监测内存地址或内存变量;在待监测内存地址或内存变量被异常改写时,通过预设调用工具获取待监测内存地址或内存变量的调用栈信息。实现了对嵌入式系统中的内存改写的自动化监测,并且获取了内存改写时的调用栈信息,能够方便定位改写原因。当然,实施本申请的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例的嵌入式系统内存改写监测方法的第一种示意图;
图2为本申请实施例中步骤S102的具体实现方式的一种示意图;
图3为本申请实施例中步骤S103的具体实现方式的一种示意图;
图4a为本申请实施例中添加监测程序前的代码段的一种示意图;
图4b为本申请实施例中添加监测程序后的代码段的一种示意图;
图5为本申请实施例的嵌入式系统内存改写监测方法的第二种示意图;
图6为本申请实施例的嵌入式系统内存改写监测装置的一种示意图;
图7为本申请实施例的电子设备的一种示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在嵌入式系统中,常常会遇到内存访问错误的问题,由于内存改写造成的内存访问错误是很难定位的。当遇到异常的内存改写问题时,由于无法捕获到内存改写的第一现场,因此增加定位问题的难度。有鉴于此,本申请实施例提供了一种嵌入式系统内存改写监测方法,参见图1,该方法包括:
S101,获取嵌入式系统中由内存改写而导致异常的异常线程的运行数据。
本申请实施例的嵌入式系统内存改写监测方法,可以通过嵌入式系统实现,也可以通过连接该嵌入式系统的电子设备,例如,电子计算机等设备实现。
异常线程的运行数据为异常线程在运行过程中所生成的数据。
S102,根据上述异常线程的运行数据,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量。
对异常线程的运行数据进行分析,可以得到异常线程是在读取哪些地址的内存数据或读取内存中的哪些数据后产生异常的,从而可以确定发生异常的内存地址或内存变量,以下称为待监测内存地址或内存变量。
S103,运行上述嵌入式系统,并通过预设的监测程序监测上述待监测内存地址或内存变量。
在确定待监测内存地址或内存变量后,可以重新运行嵌入式系统中的异常线程,同时利用预设的监测程序监测待监测内存地址或内存变量。预设的监测程序可以根据实际情况自由选取,例如,可以使用GDB(GNU Symbolic Debugger,GNU程序调试工具)中的Watch功能程序,监测待监测内存地址或内存变量。可以通过配置监测条件来区分待监测内存地址或内存变量是正常还是异常。
S104,在上述待监测内存地址或内存变量被异常改写时,通过预设调用工具获取上述待监测内存地址或内存变量的调用栈信息。
在监测到待监测内存地址或内存变量被异常改写后,通过预设调用工具调用待监测内存地址或内存变量的调用栈信息,具体可以为待监测内存地址或内存变量被异常改写时的调用栈信息,从而可以根据调用栈信息定位改写原因。
在本申请实施例中,实现了对嵌入式系统中的内存改写的自动化监测,并且获取了内存改写时的调用栈信息,能够方便定位改写原因。
在一种可能的实施方式中,参见图2,上述根据上述异常线程的运行数据,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量,包括:
S1021,对上述异常线程的运行数据进行反汇编,得到汇编数据。
反汇编是指把机器语言代码转为汇编语言代码的过程,运行数据进程返汇编,可以得到汇编语言代码下的数据,即汇编数据。
S1022,根据上述汇编数据得到内存改写的位置。
通过分析汇编数据,可以得到异常的PC(Program Counter,程序计数器)指针和DAR(Data Address Register,数据地址寄存器)指针,从而可以得到内存改写的位置。
S1023,根据上述内存改写的位置,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量。
利用内存改写的位置,可以得到发生异常的内存地址或内存变量,即待监测内存地址或内存变量。
在本申请实施例中,通过分析异常的PC指针和DAR指针并结合反汇编确认内存改写的位置,从而能够通过现有已知的异常准确确定被改写的内存变量或内存地址。
待监测内存地址或内存变量的监测支持静态配置和动态配置两种模式,动态配置是指在不改变现在版本的代码段的基础上,直接监测待监测内存地址或内存变量,但是动态配置的方式不利于监测时机的选取,会存在无用监测的时段。静态配置就是在代码中插入监测函数,然后再等待问题复现。在一种可能的实施方式中,参见图3,上述运行上述嵌入式系统,并通过预设的监测程序监测上述待监测内存地址或内存变量,包括:
S1031,根据上述汇编数据,确定上述嵌入式系统中内存变量被改写的代码段,针对上述内存变量被改写的代码段添加监测函数。
对运行数据进行反汇编得到汇编数据,通过分析汇编数据可以得到变量被改写的代码段。针对该变量被改写的代码段添加监测函数,例如,图4a及图4b所示。一个例子中,可以在代码中增加监测内存变量函数:OSP_STATUS Osp_Start_Mem_Watch(u64WatchAddr,u32 u32Bytes);在变量被改写的代码段由输入待监测的内存地址和监测的长度,脚本向程序调试工具中配置内存监测信息,以完成内存的监测功能。
S1032,运行添加监测函数后的嵌入式系统,并利用上述监测函数监测上述待监测内存地址或内存变量。
下面以程序调试工具为GBD组件为例,进行具体说明:
首先从系统调用的入参中获取异常线程,并获取创建文件路径如下:pid=$1;tid=$2;path=$3。
然后创建标准输入文件和标准输出文件:inputfile=$path/mem_watch_in;outputfile=$path/mem_watch_out。
接着重定向GBD组件的标准输入文件和标准输出文件:exec996<>$outputfile;exec 997<>$inputfile。
再运行GBD函数并获取异常线程信息:gdb<&997>&996&。
附着到待监测变量进程:echo attach$pid>>$inputfile
设置忽略系统干扰信号:
handle SIGPIPE SIGTRAP SIGABRT SIGBUS SIGSEGV nostop noprint
handle SIG35 SIG36 SIG37 SIG38 SIG39 nostop noprint
设置监测内存变量或者内存地址信息:g_pOspMemWatchAddr指针存储了需要监测的变量地址或者内存地址。
监测变量命令如下:watch*g_pOspMemWatchAddr。
触发嵌入式系统中的各进程继续执行,等待待监测内存地址或内存变量被改写:continue。
当发生改写后获取调用栈信息:backtrace。
监测到的异常改写的调用栈信息保存在标准输出文件中,通过open指令打开mem_wathc_out文件后,读取其中的调用栈信息即可定位改写异常。
其中,GBD组件中的watch函数程序在监测的待监测内存地址或内存变量被改写时会自动捕获改写的调用栈信息:
mem watch:
Hardware watchpoint 1:*g_pOspMemWatchAddr
Num Type Disp Enb Address What
1 hw watchpoint keep y *g_pOspMemWatchAddr
------continue--------
改写变量的线程信息:
[Switching to Thread 0x7ffef465eb00(LWP 1211)]
Thread 12"sysboot"hit Hardware watchpoint 1:*g_pOspMemWatchAddr
监测的变量改写变化:
Old value=0
New value=1
改写调用栈信息:
__memcpy_ssse3()at../sysdeps/x86_64/multiarch/memcpy-ssse3.S:2390
#0__memcpy_ssse3()at../sysdeps/x86_64/multiarch/memcpy-ssse3.S:2390
#1 0x00007ffedccf76dc in Osp_Ack_Change_Mem(pstruMsgHeader=0x7ffedc524160,
ps8FailReasonBuf=0x7ffedff4b180<g_s8OspAgentFailReasonBuf>"")
at../../OSP_V2/osp_d/agent/osp_dbghook.c:2185
#2 0x00007ffedccf1eb2 in Osp_Agent_Sfu_Main(pstruMsgHeader=0x7ffedc524160,
u32Metric=<optimized out>)at../../OSP_V2/osp_d/agent/osp_agent.c:354
#3 0x00007ffedccf175e in Osp_Cpm_Sfu_Main(pstruMsgHeader=0x7ffedc524160,
u32Metric=0)at../../OSP_V2/osp_d/cpm/osp_cpm_critical.c:136
#4 0x00007ffedccee538 in Osp_Deal_Msg(pstruMsgHead=<optimized out>,
MsgQId=2)at../../OSP_V2/osp_c/sfum/osp_sfum_critical.c:381
#5 Osp_Task_Entry(TaskId=2)
at../../OSP_V2/osp_c/sfum/osp_sfum_critical.c:626
#6 0x00007ffedccd0c32 in Osp_Task_Global_Entry(pOspTaskId=0x2)
at../../OSP_V2/osp_a/posix/task/osp_task.c:1296
#7 0x0000003f45c07f40 in start_thread(arg=<optimized out>)
at pthread_create.c:486
#8 0x0000003f45af564f in clone()
at../sysdeps/unix/sysv/linux/x86_64/clone.S:95
以程序调试工具为GDB组件为例,在一种可能的实施方式中,参见图5,上述在上述待监测内存地址或内存变量被异常改写时,通过预设调用工具获取上述待监测内存地址或内存变量的调用栈信息,包括:
S1041,在上述待监测内存地址或内存变量被异常改写时触发断点,并通过GDB调用call函数,以获取异常修改改写上述待监测内存地址或内存变量的调用栈信息。
在待监测内存地址或内存变量被异常改写时触发断点,使嵌入式系统中可能会改写待监测内存地址或内存变量的应用全部停止运行或暂停运行,并通过GDB调用call函数,利用call函数获取异常修改改写上述待监测内存地址或内存变量的调用栈信息。通过触发断点,能够防止其他相关应用改写待监测内存地址或内存变量后生成无用的调用栈信息,以减少无用的调用栈信息对异常改写的调用栈信息的影响,从而增加异常定位的准确度。
本申请实施例还提供了一种嵌入式系统内存改写监测装置,参见图6,该装置包括:
运行数据获取模块11,用于获取嵌入式系统中由内存改写而导致异常的异常线程的运行数据;
待监测内存获取模块12,用于根据上述异常线程的运行数据,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量;
内存监测获取模块13,用于运行上述嵌入式系统,并通过预设的监测程序监测上述待监测内存地址或内存变量;
调用栈信息获取模块14,用于在上述待监测内存地址或内存变量被异常改写时,通过预设调用工具获取上述待监测内存地址或内存变量的调用栈信息。
在一种可能的实施方式中,上述待监测内存获取模块,具体用于:对上述异常线程的运行数据进行反汇编,得到汇编数据;根据上述汇编数据得到内存改写的位置;根据上述内存改写的位置,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量。
在一种可能的实施方式中,上述内存监测获取模块,具体用于:根据上述汇编数据,确定上述嵌入式系统中内存变量被改写的代码段,针对上述内存变量被改写的代码段添加监测函数;运行添加监测函数后的嵌入式系统,并利用上述监测函数监测上述待监测内存地址或内存变量。
在一种可能的实施方式中,上述调用栈信息获取模块,具体用于:在上述待监测内存地址或内存变量被异常改写时触发断点,并通过程序调试工具GDB调用call函数,以获取异常修改改写上述待监测内存地址或内存变量的调用栈信息。
本申请实施例还提供了一种电子设备,包括:处理器及存储器;
上述存储器,用于存放计算机程序;
上述处理器用于执行上述存储器存放的计算机程序时,实现如下步骤:
获取嵌入式系统中由内存改写而导致异常的异常线程的运行数据;
根据上述异常线程的运行数据,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量;
运行上述嵌入式系统,并通过预设的监测程序监测上述待监测内存地址或内存变量;
在上述待监测内存地址或内存变量被异常改写时,通过预设调用工具获取上述待监测内存地址或内存变量的调用栈信息。
可选的,参见图7,除了上述处理器21及存储器23外,本申请实施例的电子设备还包括通信接口22和通信总线24,其中,处理器21,通信接口22,存储器23通过通信总线24完成相互间的通信。
可选的,上述处理器用于执行上述存储器存放的计算机程序时,还能够实现上述任一嵌入式系统内存改写监测方法。
上述电子设备提到的通信总线可以是PCI(Peripheral ComponentInterconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括RAM(Random Access Memory,随机存取存储器),也可以包括NVM(Non-Volatile Memory,非易失性存储器),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,例如,基于X86架构的微处理器或ARM(AdvancedRISC Machines)系列的CPU(Central Processing Unit,中央处理器)等。
本申请实施例还提供了一种计算机可读存储介质,上述计算机可读存储介质内存储有计算机程序,上述计算机程序被处理器执行时实现上述任一嵌入式系统内存改写监测方法
在本申请提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一嵌入式系统内存改写监测方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘SolidState Disk(SSD))等。
需要说明的是,在本文中,各个可选方案中的技术特征只要不矛盾均可组合来形成方案,这些方案均在本申请公开的范围内。诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备、计算机程序产品及存储介质的实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的较佳实施例,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。
Claims (10)
1.一种嵌入式系统内存改写监测方法,其特征在于,所述方法包括:
获取嵌入式系统中由内存改写而导致异常的异常线程的运行数据;
根据所述异常线程的运行数据,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量;
运行所述嵌入式系统,并通过预设的监测程序监测所述待监测内存地址或内存变量;
在所述待监测内存地址或内存变量被异常改写时,通过预设调用工具获取所述待监测内存地址或内存变量的调用栈信息。
2.根据权利要求1所述的方法,其特征在于,所述根据所述异常线程的运行数据,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量,包括:
对所述异常线程的运行数据进行反汇编,得到汇编数据;
根据所述汇编数据得到内存改写的位置;
根据所述内存改写的位置,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量。
3.根据权利要求2所述的方法,其特征在于,所述运行所述嵌入式系统,并通过预设的监测程序监测所述待监测内存地址或内存变量,包括:
根据所述汇编数据,确定所述嵌入式系统中内存变量被改写的代码段,针对所述内存变量被改写的代码段添加监测函数;
运行添加监测函数后的嵌入式系统,并利用所述监测函数监测所述待监测内存地址或内存变量。
4.根据权利要求1-3任一所述的方法,其特征在于,所述在所述待监测内存地址或内存变量被异常改写时,通过预设调用工具获取所述待监测内存地址或内存变量的调用栈信息,包括:
在所述待监测内存地址或内存变量被异常改写时触发断点,并通过程序调试工具GDB调用call函数,以获取异常修改改写所述待监测内存地址或内存变量的调用栈信息。
5.一种嵌入式系统内存改写监测装置,其特征在于,所述装置包括:
运行数据获取模块,用于获取嵌入式系统中由内存改写而导致异常的异常线程的运行数据;
待监测内存获取模块,用于根据所述异常线程的运行数据,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量;
内存监测获取模块,用于运行所述嵌入式系统,并通过预设的监测程序监测所述待监测内存地址或内存变量;
调用栈信息获取模块,用于在所述待监测内存地址或内存变量被异常改写时,通过预设调用工具获取所述待监测内存地址或内存变量的调用栈信息。
6.根据权利要求5所述的装置,其特征在于,所述待监测内存获取模块,具体用于:对所述异常线程的运行数据进行反汇编,得到汇编数据;根据所述汇编数据得到内存改写的位置;根据所述内存改写的位置,确定发生异常的内存地址或内存变量,得到待监测内存地址或内存变量。
7.根据权利要求6所述的装置,其特征在于,所述内存监测获取模块,具体用于:根据所述汇编数据,确定所述嵌入式系统中内存变量被改写的代码段,针对所述内存变量被改写的代码段添加监测函数;运行添加监测函数后的嵌入式系统,并利用所述监测函数监测所述待监测内存地址或内存变量。
8.根据权利要求5-7任一所述的装置,其特征在于,所述调用栈信息获取模块,具体用于:在所述待监测内存地址或内存变量被异常改写时触发断点,并通过程序调试工具GDB调用call函数,以获取异常修改改写所述待监测内存地址或内存变量的调用栈信息。
9.一种电子设备,其特征在于,包括处理器及存储器;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的程序时,实现权利要求1-4任一所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-4任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011270848.8A CN114490310A (zh) | 2020-11-13 | 2020-11-13 | 嵌入式系统内存改写监测方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011270848.8A CN114490310A (zh) | 2020-11-13 | 2020-11-13 | 嵌入式系统内存改写监测方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114490310A true CN114490310A (zh) | 2022-05-13 |
Family
ID=81490529
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011270848.8A Pending CN114490310A (zh) | 2020-11-13 | 2020-11-13 | 嵌入式系统内存改写监测方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114490310A (zh) |
-
2020
- 2020-11-13 CN CN202011270848.8A patent/CN114490310A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109800159B (zh) | 程序调试方法、程序调试装置、终端设备及存储介质 | |
CN105843741B (zh) | 应用程序的信息处理方法和装置 | |
US9465717B2 (en) | Native code profiler framework | |
KR100868762B1 (ko) | 임베디드용 소프트웨어의 오류 검출 방법 | |
US8156475B2 (en) | Device and method for testing embedded software using emulator | |
EP1754156B1 (en) | Data processing system with trace co-processor | |
US8250543B2 (en) | Software tracing | |
US10013334B1 (en) | Dynamic crash detection and debugging assistance | |
US20070168972A1 (en) | Debugging a computer program | |
EP2787442B1 (en) | Controller, information processing apparatus, and program | |
US9355003B2 (en) | Capturing trace information using annotated trace output | |
US9009678B2 (en) | Software debugging with execution match determinations | |
US20150212923A1 (en) | Nontransitory processor readable recording medium having fault injection program recorded therein and fault injection method | |
US7404178B2 (en) | ROM-embedded debugging of computer | |
US20120151267A1 (en) | System for extending use of a data address break point register to implement multiple watch points | |
US20130055217A1 (en) | Breakpoint synchronization for modified program source code | |
CN108121650B (zh) | 一种对于页面用户界面的测试方法及装置 | |
US10318731B2 (en) | Detection system and detection method | |
US9069895B2 (en) | Analyzing concurrent debugging sessions | |
CN105446886A (zh) | 一种计算机程序调试方法和装置 | |
US20080162776A1 (en) | Identifying Race Conditions Involving Asynchronous Memory Updates | |
CN114490310A (zh) | 嵌入式系统内存改写监测方法、装置、设备及存储介质 | |
JP2009223714A (ja) | 演算回路及び演算回路の異常解析方法 | |
CN114328090A (zh) | 一种程序监控方法、装置、电子设备及存储介质 | |
US20130031534A1 (en) | Software Development With Information Describing Preceding Execution Of A Debuggable Program |
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 |