CN113377379B - 一种基于模拟器指令插桩的操作系统信息统计方法 - Google Patents
一种基于模拟器指令插桩的操作系统信息统计方法 Download PDFInfo
- Publication number
- CN113377379B CN113377379B CN202110922684.0A CN202110922684A CN113377379B CN 113377379 B CN113377379 B CN 113377379B CN 202110922684 A CN202110922684 A CN 202110922684A CN 113377379 B CN113377379 B CN 113377379B
- Authority
- CN
- China
- Prior art keywords
- information
- task
- instruction
- function
- pile
- 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.)
- Active
Links
Images
Classifications
-
- 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
- G06F8/44—Encoding
- G06F8/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及操作系统信息处理技术领域,具体涉及一种基于模拟器指令插桩的操作系统信息统计方法,包括任务信息获取和统计,可以高效的进行系统信息的收集和整理,便于在模拟器环境下进行系统的调试。本发明使用指令插桩方式,无需更改目标程序,即可以对软件的操作系统信息进行统计,不仅保持了代码的稳定和安全,还大大提高了效率。
Description
技术领域
本发明涉及操作系统信息处理技术领域,具体涉及一种基于模拟器指令插桩的操作系统信息统计方法。
背景技术
模拟器使用软件仿真技术来模拟物理硬件目标系统,原来运行于真实目标机的嵌入式软件,可以不用修改就直接在模拟器上运行,并且其运行的动态特性与真实目标机上一致。利用模拟器,可以在不具备目标硬件的情况下,进行嵌入式软件开发、调试、测试和验证。
带操作系统的嵌入式软件调试时,若能够实时掌握操作系统的任务调度关系、任务执行时间、创建的信号量、创建的消息等信息,将对软件设计、软件故障分析和排查大有裨益。传统的操作系统信息统计在源码上进行插桩,执行时统计桩执行信息。传统源码插桩方式会侵入代码,使代码扩张。
因此,传统的系统信息统计方法还存在亟待改进之处,需要提出更为合理的技术方案,解决现有技术中的不足。
发明内容
为了解决上述内容中提到的现有技术缺陷,本发明提供了一种基于模拟器指令插桩的操作系统信息统计方法,在模拟器的基础上使用指令插桩方式进行信息统计,无需更改目标程序,即可以实现对操作系统信息的统计。
为了实现上述目的,本发明采用的技术方案是:
一种基于模拟器指令插桩的操作系统信息统计方法,包括任务信息获取和统计,其中任务信息获取过程包括:
根据系统任务指令的位置进行插桩,桩信息中均包含时刻信息;
在模拟器初始化时从目标程序中获取所有函数符号地址(函数首地址);
执行目标任务并获取桩信息,若检查到任务创建函数则从函数参数获取任务基本信息,否则循环执行目标任务并直至获取桩信息;
解析并获取任务循环主体地址范围,并从栈分配函数获取任务栈信息;
信息统计过程包括:
在模拟器环境下执行目标程序若检查到任务切换函数时则记录该任务起始时间,否则循环执行目标程序直至出现起始时间记录;
获取栈使用范围,若栈的使用范围超过分配大小则报错,直至任务结束;
任务主体结束时,获取任务执行时间。
上述公开的信息统计方法,可以高效的进行系统信息的收集和整理,便于在模拟器环境下进行系统的调试。
进一步的,本发明中所公开的统计方法,在进入系统后的不同时刻均可进行插桩,具体的,此处进行优化并举出其中一种可行的选择:根据任务翻译期和执行期的指令进行插桩,且包括初始桩和附加桩,附加桩信息中包括辅助信息以辅助获取函数调用参数以及栈访问越界判别。采用如此方案时,附加桩的辅助信息能够收集统计更多的系统信息。
再进一步,本发明中在进入系统后的不同时刻均进行插桩,对应进行不同的系统信息处理,具体的,此处进行优化并举出其中一种可行的选择,所述的桩至少包括:
头桩,第一条指令后插桩,标志执行开始;
尾桩,模拟器停止时最后一条指令后产生桩信息,标志执行结束;
分支指令桩,分支指令后插桩,用于记录跳转信息;
中断异常桩,中断或异常触发时,插桩并产生桩信息;
异常返回桩,异常返回指令后插桩,用于记录异常处理程序退出信息;
中断信息桩,任务中断时进行插桩,用于记录中断号信息;
保存现场指令桩,携带栈指针信息,用于栈访问越界判别;
函数调用指令桩,用于记录函数调用参数信息;
写存储指令桩,至少携带写目标地址信息。
采用上述插桩方案时,对时刻、指令地址、跳转起始地址、跳转目标地址、中断触发地址、中断目标地址、异常结束地址、返回目标地址、中断号、栈指针、所有寄存器值、写目标地址、写的值等均进行收集统计。
进一步的,模拟器环境下所获取的系统信息若干,其并不唯一限定,此处进行优化,所述的系统信息包括任务信息、信号量信息和消息。
再进一步,所述的任务信息至少包括任务名称、任务函数信息、任务执行时间、执行次数和栈使用情况,对应有任务创建函数、任务销毁函数、栈分配函数和任务切换函数。
再进一步,所述的信号量信息至少包括信号量名称、所属任务和等待任务;对应有信号量创建函数和信号量销毁函数。
再进一步,所述的消息至少包括消息名称、消息数量和阻塞任务;对应有信号量创建函数和信号量销毁函数。
进一步的,本发明中,系统持续运行则持续进行信息收集,具体的,此处进行优化并举出如下一种可行的选择:当信息统计过程完毕时,执行新的目标程序并进行信息统计。
进一步的,所述的获取栈使用范围,具体为根据写存储指令和保存线程指令获取栈的使用范围。
再进一步,信号量和消息的信息结构在相应创建函数调用时获取,需要查看某个信号量或消息时,直接通过信息结构基地址获取关注的信号量或消息。
与现有技术相比,本发明具有的有益效果是:
本发明使用指令插桩方式,无需更改目标程序,即可以对软件的操作系统信息进行统计,不仅保持了代码的稳定和安全,还大大提高了效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅表示出了本发明的部分实施例,因此不应看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它相关的附图。
图1为操作系统任务信息获取过程示意图。
图2为获取的函数符号地址示意图。
图3为获取的函数首尾地址示意图。
图4为isr_pro_int9任务主体地址范围示意图。
图5为任务信息统计结果示意图。
图6为操作系统任务信息统计过程示意图。
具体实施方式
下面结合附图及具体实施例对本发明做进一步阐释。
在此需要说明的是,对于这些实施例方式的说明用于帮助理解本发明,但并不构成对本发明的限定。本文公开的特定结构和功能细节仅用于描述本发明的示例实施例。然而,可用很多备选的形式来体现本发明,并且不应当理解为本发明限制在本文阐述的实施例中。
实施例
针对现有的操作系统信息统计方法存在侵入代码,导致代码扩张的情况,本实施例进行优化以解决现有技术中的问题。
具体的,本实施例公开了一种基于模拟器指令插桩的操作系统信息统计方法,包括任务信息获取和统计,其中任务信息获取过程包括:
S01:对目标程序进行指令插桩;
S02:在模拟器初始化时从目标程序中获取所有函数符号地址(函数首地址),如图2所示,按地址从小到大进行排序后,根据函数的无缝衔接特点,获取函数尾地址,如图3所示;
S03:执行目标程序并获取桩信息,若检查到任务创建函数则从函数参数获取任务信息,否则循环执行目标任务并直至获取桩信息;
S04:解析并获取任务循环主体地址范围,中断服务程序也作为任务处理,如图4中isr_pro_int9任务主体地址范围为40003b38到40003b80;
S05:从栈分配函数获取任务栈信息。
图1给出了与上述过程相关的操作系统任务信息获取过程示意图。
任务信息统计过程包括:
S01:在模拟器环境下执行目标程序若检查到任务切换函数时则记录该任务起始时间,否则循环执行目标程序直至出现起始时间记录,对于中断服务程序isr_pro_int9,进入isr_pro_int9即执行到首地址40003b38时记录为任务起始时间,;
S02:获取栈使用范围,若栈的使用范围超过分配大小则报错,直至任务结束;
S03:任务主体结束时,获取任务执行时间,对于中断服务程序isr_pro_int9,执行到尾地址40003b80时计算任务执行时间,最后任务信息统计结果如图6所示,包含任务最大、最小执行时间、栈使用情况等。
上述公开的信息统计方法,可以高效的进行系统信息的收集和整理,便于在模拟器环境下进行系统的调试。图5给出了与上述过程相关的任务信息统计结果示意图。
本实施例中所公开的统计方法,在进入系统后的不同时刻均可进行插桩,具体的,本实施例进行优化并采用其中一种可行的选择:根据任务翻译期和执行期的指令进行插桩,且包括初始桩和附加桩,附加桩信息中包括辅助信息以辅助获取函数调用参数以及栈访问越界判别。采用如此方案时,附加桩的辅助信息能够收集统计更多的系统信息。
本实施例中在进入系统后的不同时刻均进行插桩,对应进行不同的系统信息处理,具体的,此处进行优化并举出其中一种可行的选择,所述的桩至少包括:
头桩,第一条指令后插桩,标志执行开始;
尾桩,模拟器停止时最后一条指令后产生桩信息,标志执行结束;
分支指令桩,分支指令后插桩,用于记录跳转信息;
中断异常桩,中断或异常触发时,插桩并产生桩信息;
异常返回桩,异常返回指令后插桩,用于记录异常处理程序退出信息;
中断信息桩,任务中断时进行插桩,用于记录中断号信息;
保存现场指令桩,携带栈指针信息,用于栈访问越界判别;
函数调用指令桩,用于记录函数调用参数信息;
写存储指令桩,至少携带写目标地址信息。
采用上述插桩方案时,对时刻、指令地址、跳转起始地址、跳转目标地址、中断触发地址、中断目标地址、异常结束地址、返回目标地址、中断号、栈指针、所有寄存器值、写目标地址、写的值等均进行收集统计。具体的,本实施例中公开了一种插桩方案,如下表1所示:
表1 插桩位置
优选的,模拟器环境下所获取的系统信息若干,其并不唯一限定,本实施例进行优化,所述的系统信息包括任务信息、信号量信息和消息。
优选的,所述的任务信息至少包括任务名称、任务函数信息、任务执行时间、执行次数和栈使用情况,对应有任务创建函数、任务销毁函数、栈分配函数和任务切换函数。
优选的,所述的信号量信息至少包括信号量名称、所属任务和等待任务;对应有信号量创建函数和信号量销毁函数。
优选的,所述的消息至少包括消息名称、消息数量和阻塞任务;对应有信号量创建函数和信号量销毁函数。
系统信息可采用如下表2中所描述的内容进行搜集统计。
表2 操作系统信息
本实施例中,系统持续运行则持续进行信息收集,具体的,此处进行优化并举出如下一种可行的选择:当信息统计过程完毕时,执行新的目标程序并进行信息统计。
优选的,所述的获取栈使用范围,具体为根据写存储指令和保存线程指令获取栈的使用范围。
优选的,信号量和消息的信息结构在相应创建函数调用时获取,需要查看某个信号量或消息时,直接通过信息结构基地址获取关注的信号量或消息。
以上即为本实施例列举的实施方式,但本实施例不局限于上述可选的实施方式,本领域技术人员可根据上述方式相互任意组合得到其他多种实施方式,任何人在本实施例的启示下都可得出其他各种形式的实施方式。上述具体实施方式不应理解成对本实施例的保护范围的限制,本实施例的保护范围应当以权利要求书中界定的为准,并且说明书可以用于解释权利要求书。
Claims (10)
1.一种基于模拟器指令插桩的操作系统信息统计方法,其特征在于,包括任务信息获取和统计,其中任务信息获取过程包括:
根据系统任务指令的位置进行插桩,桩信息中均包含时刻信息;
在模拟器环境下获取所有函数地址,即函数首地址,按地址从小到大进行排序后,根据函数的无缝衔接特点,获取函数尾地址;
执行目标任务并获取桩信息,若检查到任务创建函数则从函数参数获取任务基本信息,否则循环执行目标任务并直至获取桩信息;
解析并获取任务循环主体地址范围,并从栈分配函数获取任务栈信息;
信息统计过程包括:
在模拟器环境下执行目标程序若检查到任务切换函数时则记录该任务起始时间,否则循环执行目标程序直至出现起始时间记录;
获取栈使用范围,若栈的使用范围超过分配大小则报错,直至任务结束;
任务主体结束时,获取任务执行时间。
2.根据权利要求1所述的基于模拟器指令插桩的操作系统信息统计方法,其特征在于:
根据任务翻译期和执行期的指令进行插桩,且包括初始桩和附加桩,附加桩信息中包括辅助信息以辅助获取函数调用参数以及栈访问越界判别。
3.根据权利要求1所述的基于模拟器指令插桩的操作系统信息统计方法,其特征在于,所述的桩至少包括:
头桩,第一条指令后插桩,标志执行开始;
尾桩,模拟器停止时最后一条指令后产生桩信息,标志执行结束;
分支指令桩,分支指令后插桩,用于记录跳转信息;
中断异常桩,中断或异常触发时,插桩并产生桩信息;
异常返回桩,异常返回指令后插桩,用于记录异常处理程序退出信息;
中断信息桩,任务中断时进行插桩,用于记录中断号信息;
保存现场指令桩,携带栈指针信息,用于栈访问越界判别;
函数调用指令桩,用于记录函数调用参数信息;
写存储指令桩,至少携带写目标地址信息。
4.根据权利要求1所述的基于模拟器指令插桩的操作系统信息统计方法,其特征在于:
所述的系统信息包括任务信息、信号量信息和消息。
5.根据权利要求4所述的基于模拟器指令插桩的操作系统信息统计方法,其特征在于:
所述的任务信息至少包括任务名称、任务函数信息、任务执行时间、执行次数和栈使用情况,对应有任务创建函数、任务销毁函数、栈分配函数和任务切换函数。
6.根据权利要求4所述的基于模拟器指令插桩的操作系统信息统计方法,其特征在于:
所述的信号量信息至少包括信号量名称、所属任务和等待任务;对应有信号量创建函数和信号量销毁函数。
7.根据权利要求4所述的基于模拟器指令插桩的操作系统信息统计方法,其特征在于:
所述的消息至少包括消息名称、消息数量和阻塞任务;对应有信号量创建函数和信号量销毁函数。
8.根据权利要求1所述的基于模拟器指令插桩的操作系统信息统计方法,其特征在于:
当信息统计过程完毕时,执行新的目标程序并进行信息统计。
9.根据权利要求1所述的基于模拟器指令插桩的操作系统信息统计方法,其特征在于:
所述的获取栈使用范围,具体为根据写存储指令和保存线程指令获取栈的使用范围。
10.根据权利要求4或7所述的基于模拟器指令插桩的操作系统信息统计方法,其特征在于:
信号量和消息的信息结构在相应创建函数调用时获取,需要查看任何信号量或消息时,直接通过信息结构基地址获取关注的信号量或消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110922684.0A CN113377379B (zh) | 2021-08-12 | 2021-08-12 | 一种基于模拟器指令插桩的操作系统信息统计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110922684.0A CN113377379B (zh) | 2021-08-12 | 2021-08-12 | 一种基于模拟器指令插桩的操作系统信息统计方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113377379A CN113377379A (zh) | 2021-09-10 |
CN113377379B true CN113377379B (zh) | 2021-11-16 |
Family
ID=77576936
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110922684.0A Active CN113377379B (zh) | 2021-08-12 | 2021-08-12 | 一种基于模拟器指令插桩的操作系统信息统计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113377379B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101706750A (zh) * | 2009-11-16 | 2010-05-12 | 西安邮电学院 | 一种基于嵌入式模拟器的测试桩获取方法 |
CN102222041A (zh) * | 2011-06-15 | 2011-10-19 | 深圳市运通信息技术有限公司 | 一种基于嵌入式软件的测试分析系统及方法 |
CN104461521A (zh) * | 2014-11-26 | 2015-03-25 | 北京航空航天大学 | 一种应用程序重放方法及系统 |
CN112287357A (zh) * | 2020-11-11 | 2021-01-29 | 中国科学院信息工程研究所 | 一种针对嵌入式裸机系统的控制流验证方法与系统 |
CN112905184A (zh) * | 2021-01-08 | 2021-06-04 | 浙江大学 | 一种基于插桩的基本块粒度下工控协议语法逆向分析方法 |
CN113176990A (zh) * | 2021-03-25 | 2021-07-27 | 中国人民解放军战略支援部队信息工程大学 | 一种支持数据间关联分析的污点分析框架及方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040148594A1 (en) * | 2003-01-24 | 2004-07-29 | Stephen Williams | Acquiring call-stack information |
US20050071516A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus to autonomically profile applications |
CN101241464B (zh) * | 2007-02-05 | 2010-08-18 | 中兴通讯股份有限公司 | 一种检测堆栈帧破坏的方法 |
CN105808369B (zh) * | 2016-03-29 | 2018-11-23 | 北京系统工程研究所 | 一种基于符号执行的内存泄漏检测方法 |
CN106778264A (zh) * | 2016-11-24 | 2017-05-31 | 北京金山安全管理系统技术有限公司 | 一种移动客户端的应用程序分析方法及分析系统 |
-
2021
- 2021-08-12 CN CN202110922684.0A patent/CN113377379B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101706750A (zh) * | 2009-11-16 | 2010-05-12 | 西安邮电学院 | 一种基于嵌入式模拟器的测试桩获取方法 |
CN102222041A (zh) * | 2011-06-15 | 2011-10-19 | 深圳市运通信息技术有限公司 | 一种基于嵌入式软件的测试分析系统及方法 |
CN104461521A (zh) * | 2014-11-26 | 2015-03-25 | 北京航空航天大学 | 一种应用程序重放方法及系统 |
CN112287357A (zh) * | 2020-11-11 | 2021-01-29 | 中国科学院信息工程研究所 | 一种针对嵌入式裸机系统的控制流验证方法与系统 |
CN112905184A (zh) * | 2021-01-08 | 2021-06-04 | 浙江大学 | 一种基于插桩的基本块粒度下工控协议语法逆向分析方法 |
CN113176990A (zh) * | 2021-03-25 | 2021-07-27 | 中国人民解放军战略支援部队信息工程大学 | 一种支持数据间关联分析的污点分析框架及方法 |
Non-Patent Citations (3)
Title |
---|
A Novel Low-Overhead Flexible Instrumentation Framework for Virtual Platforms;Tennessee Carmel-Veilleux 等;《In Proceedings of the 2011 22nd IEEE International Symposium on Rapid System Prototyping》;20110623;92-98 * |
基于二进制指令插桩的C++程序缺陷检测技术的研究与实现;何磊;《中国优秀硕士学位论文全文数据库信息科技辑》;20180315(第3期);I138-819 * |
基于动态二进制翻译和插桩的函数调用跟踪;卢帅兵 等;《计算机研究与发展》;20190215;第56卷(第2期);421-430 * |
Also Published As
Publication number | Publication date |
---|---|
CN113377379A (zh) | 2021-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8423965B2 (en) | Tracing of data flow | |
CN112463581B (zh) | 一种对分布式系统进行模糊测试的方法及系统 | |
CN105512036A (zh) | 根据预置规则自动生成测试用例的测试模板及测试方法 | |
WO2002052411A9 (en) | Computer software run-time analysis systems and methods | |
US8291399B2 (en) | Off-line program analysis and run-time instrumentation | |
CN100388234C (zh) | 一种基于有限状态机的对内存变量改写进行监控的方法 | |
CN102831054B (zh) | 程序断点处理方法及装置 | |
CN102508780A (zh) | 一种用于软件测试的交叉式动态法和装置 | |
US20090249305A1 (en) | Super Nested Block Method to Minimize Coverage Testing Overhead | |
CN110059014B (zh) | 一种并发程序数据竞争指令级定位方法 | |
CN104252402A (zh) | 一种程序调试方法及装置 | |
CN115061837B (zh) | 一种调度跟踪和获取用户空间调用栈的方法和装置 | |
CN110704314A (zh) | 一种嵌入式软件测试的故障注入方法 | |
US20090249285A1 (en) | Automatic Generation of Run-Time Instrumenter | |
CN113377379B (zh) | 一种基于模拟器指令插桩的操作系统信息统计方法 | |
CN116305162A (zh) | 一种基于模糊测试和静态分析的并发程序漏洞检测方法 | |
CN115757157A (zh) | 一种高效回归的实现方法、装置及存储介质 | |
CN108021495B (zh) | 基于回放的代码调试方法 | |
CN113535545A (zh) | 一种用于程序动态分析的二进制插桩方法 | |
CN110968493A (zh) | 一种基于运行日志分析推演程序运行状态的方法及系统 | |
US20040194067A1 (en) | Method for program debugging | |
WO2020073200A1 (zh) | 调试程序的方法和系统 | |
CN114238107A (zh) | 一种跟踪调试方法、系统及计算机可读存储介质 | |
CN110727577B (zh) | 嵌入式系统软件中概率复现问题的调试方法、系统及介质 | |
CN110347589B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |