一种电能表和用采终端程序的全局变量监控方法与流程
本发明涉及嵌入式系统程序运行监控,具体涉及一种嵌入式裸机程序中全局变量越界访问的监测方法。
背景技术:
1、在电能表和用采终端的嵌入式裸机程序中,全局变量和静态变量统一存放在ram的数据段(.data、.bss、.noinit等),编译器根据链接脚本自动分配各变量的内存地址。由于裸机程序缺乏内存管理单元(mmu)或内存保护单元(mpu)的硬件内存保护机制,缓冲区溢出、野指针写入、栈溢出以及数组或指针偏移错误等场景极易导致全局变量被非法篡改。
2、上述问题在嵌入式设备中具有高度偶发性(与特定时序和数据组合相关)、难以复现、无法外接调试器(现场已部署设备),且出问题时设备可能已重启丢失现场信息等特点。传统的调试手段,如在线仿真和日志打印,均无法有效定位此类问题。
3、针对上述问题,目前常见的监测手段主要包括以下几种。
4、软件定时巡检方案通过周期性检查关键变量值是否合法来检测异常。该方案实现简单,但其仅能检测到变量"已被破坏"这一结果,无法追溯破坏的源代码位置,对于定位越界根因帮助有限。
5、部分微控制器具备mpu,可配置内存区域的访问权限。当发生非法写入时,mpu可触发memmanage异常。然而,mpu方案存在分区数量少、对零散分布的全局变量难以精细配置等限制,且并非所有微控制器都支持mpu,适用范围受到硬件平台制约。
6、在线仿真器方案通过外接jtag或swd调试器并停止cpu运行来观测内存状态。该方案虽然功能强大,但需要外接调试器且必须停止cpu运行,无法在设备正常运行工况下使用,更无法覆盖已经部署在现场的设备。
7、纯软件看门狗方案通过监测程序执行流是否超时来判断系统是否异常。但看门狗仅能检测系统级异常(如死循环),无法精确定位内存被篡改的具体位置和原因。
8、综上所述,现有技术尚缺乏一种能够在嵌入式设备正常运行工况下、无需外接仿真器即可以低开销方式实时监测全局变量越界访问,并在检测到异常时自动捕获和记录关键调试信息的方案。
技术实现思路
1、本发明提出了一种电能表和用采终端程序的全局变量监控方法,其目的是:解决现有技术中在嵌入式裸机设备正常运行工况下无法以低开销方式实时监测并精确定位全局变量越界访问源代码位置的问题,实现在无需外接仿真器的条件下,自动捕获触发越界写入指令的关键调试信息。
2、本发明技术方案如下:
3、一种电能表和用采终端程序的全局变量监控方法,包括以下步骤:
4、s1、在编译阶段,在程序源代码中添加多个类型相同、初始值为预设魔数的哨兵变量,并根据链接器输出的地址映射文件,将所述哨兵变量以编译器段属性方式设置在全局变量密集分布的内存区间的边界位置;
5、s2、在程序运行阶段,以预设周期巡检各哨兵变量的当前值,当检测到任一哨兵变量的当前值偏离其初始魔数时,判定发生全局变量越界写入事件,进入步骤s3;
6、s3、采用以下方式之一建立对异常哨兵地址的监测:
7、方式一:软件配置微控制器的硬件监测单元,将检测到异常的哨兵变量地址设置为写入监测点,并使能硬件监测异常响应模式;
8、方式二:定时器以固定周期采样当前程序计数器pc值和栈指针sp值,并将采样值存入内存中的滑动窗口缓存区,当哨兵巡检发现异常时停止采样并冻结所述缓存区;
9、s4、当同一代码路径再次执行并对被监测地址执行写操作时,或者当哨兵巡检发现异常并冻结缓存后,将以下信息写入非易失存储器:
10、对应于方式一:硬件监测单元触发硬件监测异常,异常处理函数从cpu异常栈帧中提取触发指令的pc值、sp值和链接寄存器lr值,连同被访问地址一并写入;
11、对应于方式二:将冻结的pc和sp历史记录连同异常哨兵索引和时间戳一并写入。
12、作为所述电能表和用采终端程序的全局变量监控方法的进一步改进,步骤s1中,所述哨兵变量统一采用包含魔数值字段、自身地址字段和分组编号字段的结构体类型,所有哨兵变量通过同一套宏模板通过宏定义生成。
13、作为所述电能表和用采终端程序的全局变量监控方法的进一步改进,步骤s1中,通过分析所述地址映射文件识别不同源文件模块的全局变量区之间的边界地址,并通过链接脚本的地址定位指令将各哨兵变量所在的编译器段分别固定至对应边界地址处。
14、作为所述电能表和用采终端程序的全局变量监控方法的进一步改进,步骤s2中,所述预设周期为10毫秒至1秒,巡检操作对各哨兵变量的魔数字段进行等值比较。
15、作为所述电能表和用采终端程序的全局变量监控方法的进一步改进,步骤s3中,所述硬件监测单元为数据观测点与跟踪单元,配置过程包括:通过写微控制器系统地址空间的方式,向所述数据观测点与跟踪单元的比较器值寄存器写入目标哨兵地址,向所述数据观测点与跟踪单元的功能寄存器写入匹配使能位和数据地址写入匹配位,向调试异常与监控控制寄存器写入调试监测异常模式使能位。
16、作为所述电能表和用采终端程序的全局变量监控方法的进一步改进,当存在多个哨兵变量同时异常时,采用基于哨兵分组优先级的比较器时隙轮转复用策略:优先将所述数据观测点与跟踪单元的硬件比较器分配给高优先级分组的异常哨兵,当硬件比较器触发并完成记录后释放并分配给下一等待哨兵。
17、作为所述电能表和用采终端程序的全局变量监控方法的进一步改进,在所述时隙轮转复用策略中,若已分配的硬件比较器在预设时间窗口内未触发,则超时释放该比较器并记录未复现状态。
18、作为所述电能表和用采终端程序的全局变量监控方法的进一步改进,步骤s4中,对应于方式一,写入非易失存储器的信息还包括异常发生的时间戳和异常记录序列号,且采用循环写入策略保留最近若干次异常记录。
19、作为所述电能表和用采终端程序的全局变量监控方法的进一步改进,还包括事后分析步骤:读取非易失存储器中记录的pc值或pc历史记录,通过地址映射文件或地址到代码行转换工具,将所述pc值关联至对应的源代码函数及代码行。
20、作为所述电能表和用采终端程序的全局变量监控方法的进一步改进,步骤s3中,所述硬件监测单元为内存保护单元,配置过程包括:将检测到异常的哨兵变量地址所在内存区间设置为只读属性;步骤s4中,当发生写入操作时触发内存管理异常,在内存管理异常处理函数中提取pc值和sp值并写入非易失存储器。
21、相对于现有技术,本发明具有以下有益效果:
22、1.本发明通过软件自主配置硬件监测单元(如数据观测点与跟踪单元或内存保护单元)并使能硬件监测异常响应模式,整个过程由运行中的固件自主完成,无需外接仿真器即可精确定位越界访问的源代码位置。当越界写入再次发生时,硬件监测单元自动触发异常并从cpu异常栈帧中提取pc值、sp值和lr值,事后通过地址映射文件即可将pc值关联至具体的源代码函数及代码行,从而在设备正常运行工况下实现越界源头的精确定位。
23、2.本发明在正常运行阶段,仅需周期性地对若干哨兵变量的魔数字段进行等值比较(微秒级即可完成),硬件监测单元仅在哨兵检测到异常后才被配置启用,且硬件监测单元的地址匹配由硬件自动完成,不消耗cpu指令周期,日常监测开销极低,对设备的主业务流程几乎无性能影响。
24、3.本发明将所有异常现场信息写入非易失存储器。对于采用硬件监测方式的场景,记录的信息包括pc值、sp值、lr值、被访问地址和时间戳等;对于采用纯软件回溯方式的场景,记录的信息包括pc历史序列、sp历史记录、异常哨兵索引和时间戳等。无论采用何种方式,即使设备因异常自动复位或现场断电,调试记录依然保留,设备返回后即可读取和分析,异常现场信息可追溯,为偶发越界问题的根因定位提供了完整、可靠的现场数据,有效解决偶发问题无法复现的痛点。
25、4.本发明通过哨兵变量的编译期布局策略,实现对任意全局变量区域的灵活覆盖。具体而言,通过分析地址映射文件识别不同模块变量区之间的边界地址,利用编译器段属性和链接脚本的地址定位指令将哨兵变量精准插入关键边界位置,相比内存保护单元受限于分区数量和对零散变量难以精细配置的不足,本方法可灵活部署在任意变量密集区间的边界处,覆盖范围不受硬件分区数量的限制。
26、5.对于具备数据观测点与跟踪单元的微控制器平台(如arm cortex-m3/m4/m7/m33等),本发明可利用其数据观测点与跟踪单元实现精确定位;对于不具备数据观测点与跟踪单元但具备内存保护单元的微控制器平台(如部分cortex-m0+等),本发明同样可通过配置内存保护单元的方式实现异常捕获和现场信息记录,具有良好的平台适应性,通用性强。
27、6.在多哨兵同时异常的场景下,通过比较器时隙轮转复用策略有效利用有限的硬件资源。当异常哨兵数量超过硬件比较器数量时,基于分组优先级分配比较器,触发后释放并轮转至下一等待哨兵,配合超时释放机制,可在有限硬件资源下有序覆盖所有异常哨兵。
28、7.本发明还提供了一种退路实现方式,适用于不具备硬件监测单元的微控制器平台。当目标平台无数据观测点与跟踪单元(dwt)和内存保护单元(mpu)时,通过定时器周期性采样pc值和sp值并存入滑动窗口缓存,在哨兵巡检发现异常时冻结缓存并写入非易失存储器,事后通过分析pc历史序列和sp历史记录即可回溯异常发生时刻附近的代码执行路径和调用栈信息。该方案虽然定位精度不及硬件触发方式,但能够在无硬件监测支持的平台上提供有价值的越界代码范围参考,进一步拓展了本发明的适用范围。
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com