vxworks memory overflow debug

2024-04-09 02:58
文章标签 debug memory overflow vxworks

本文主要是介绍vxworks memory overflow debug,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

现象vxworks 日志中出现如下打印:

A:tmd_check  curr_buff 0x2d26ee50 len 14224 extra 0x0 {stack.c:667}

A:tmd_check      0xdeadbeef app 0x2e89e660 {stack.c:641}

A:tmd_check   {stack.c:651}

A:tmd_check  OVERWRITTEN buffer {stack.c:661}

表明内存被改写

1.lkAddr 0x2d26ee50 查看地址附近的内存结构,可知道是数据段内存(存放初始化的全局变量),且靠近gifa_pbLaserExpPwr全局变量

% lkAddr 0x2d26ee50
0x2d26db60 gOACurrentState           abs
0x2d26ee60 gifa_pbLaserExpPwr        data
0x2d26ee68 gRecord_TP_Info           data
0x2d26ee6c gIfaLogModuleInfo         data
0x2d27038c gIfaDbgInfo               data
0x2d2725f0 neConfigTable.0           bss      (local)
0x2d272610 neConfigTable.1           bss      (local)
0x2d272630 timeDefects.2             bss      (local)
0x2d272638 portDefects.3             bss      (local)
0x2d272684 autuDefects.4             bss      (local)
0x2d2726a0 timeDefects.5             bss      (local)
0x2d2726a8 neConfigTable.6           bss      (local)
value = 0 = 0x0

2.打印该越界地址内存

% d 0x  0x2d26ee50
2d26ee50:  2d27 25e0 2d26 db50 0000 1bc8 0000 0000   *-'%.-&.P........*
2d26ee60:  0000 0000 0000 0000 0000 0001 0000 0000   *................*
2d26ee70:  0000 0000 0000 0000 0000 0000 0000 0000   *................*
2d26ee80:  0000 0000 0000 0000 0000 0000 0000 0000   *................*
2d26ee90:  0000 0000 0000 0000 0000 0000 0000 0000   *................*
2d26eea0:  0000 0000 0000 0000 0000 0000 0000 0000   *................*
2d26eeb0:  0000 0000 0000 0000 0000 0000 0000 0000   *................*
2d26eec0:  0000 0000 0000 0000 0000 0000 0000 0000   *................*
2d26eed0:  0000 0000 0000 0000 0000 0000 0000 0000   *................*
2d26eee0:  0000 0000 0000 0000 0000 0000 0000 0000   *................*
2d26eef0:  0000 0000 0000 0000 0000 0000 0000 0000   *................*
2d26ef00:  0000 0000 0000 0000 0000 0000 0000 0000   *................*
2d26ef10:  0000 0000 0000 0000 0000 0000 0000 0000   *................*
2d26ef20:  0000 0000 0000 0000 0000 0000 0000 0000   *................*
2d26ef30:  0000 0000 0000 0000 0000 0000 0000 0000   *................*
2d26ef40:  0000 0000 0000 0000 0000 0000 0000 0000   *................*
value = 21 = 0x15

2d27 25e0:后一块内存块的首地址
2d26 db5:前一块内存块的首地址
0000 1bc8:内存块总长度(0x1bc8 *2= 14224字节)
00头结构中的free字节,取值为下面三种,已被破坏。

#define BUFFER_USED         0xE8  // wierd numbers to decreaselikelyhood of hitting on accident

#define BUFFER_CACHE        0x7E

#define BUFFER_FREE         0xC6



3.查看尾部调试信息

lptr  = (unsigned int *)((char *)hdr + 2*hdr->nWords - hdr->extra * 4 - 8);
lptr = 0x2d26ee50 +0x3790 -0 -8 = 0x2d2725d8


0x2d2725d8 -----------content
2d2725d0:                      dead beef 2e89 e660   *          .....`*
2d2725e0:  2d4b c060 2d26 ee50 0012 4d40 e800 0000   *-K.`-&.P..M@....*
2d2725f0:  0100 0000 0000 0000 0000 0000 0000 0000   *................*
2d272600:  0000 0000 0000 0000 0000 0000 0000 0000   *................*
2d272610:  0000 0000 0000 0000 0000 0000 0000 0000   *................*
2d272620:  0000 0000 0000 0000 0000 0000 0000 0000   *................*
 
dead beef 溢出检测标志 
2e89 e660 调试信息(appid)
% ti 0x2e89e660 查看出其任务ID(所属任务为 TM_daemon(所有任务的main_task) 所属内存----无意义,只是说明全局变量(全部由它代为创建内存)
% ti 0x2e89e660NAME        ENTRY       TID    PRI   STATUS      PC       SP     ERRNO  DELAY
---------- ------------ -------- --- ---------- -------- -------- ------- -----
TM_daemon  5c7f8        2e89e660 179 PEND+T       2ac978 2e89e338  3d0004  2586stack: base 0x2e89e660  end 0x2e89abc0  size 14992  high 4736   margin 10256options: 0xc
VX_DEALLOC_STACK    VX_FP_TASK          VxWorks Events
--------------
Events Pended on    : Not Pended
Received Events     : 0x0
Options             : N/Ar0     =    71728   sp     = 2e89e338   r2     =        0   r3     =        0
r4     =     1770   r5     = 2e89e660   r6     =  2029230   r7     =       b3
r8     =  12958dc   r9     =        4   r10    = 2e89e660   r11    =        8
r12    =   2ac7fc   r13    =        0   r14    =        0   r15    =   420000
r16    =    30000   r17

4.打硬件断点
bh 0x2d26ee50, 0x3, 0, 0, 0

挂起了相应任务导致crash,可以判断出是ifa 任务导致crash.

Ifa_init函数

828           ifx_saveEndTime_moveToNext(&gIfaHandleMsgData);

出问题时的堆栈

task 0x7f95980 ifa stack

  [0]0x2d1cb9f0 IfaEpgSllHead+0

  [1]0x27e7e58 Ifa_Init+1448

  [2]0x5f7bc tmd_TaskEnd+992

  [3] 0x3fe09c vxTaskEntry+84                                      

  [4]0x0 (UNKNOWN)+0

5.重新打断点并查看相应任务状态,表明是ifa 进行写内存操作。

% i ifa

NAME        ENTRY       TID    PRI   STATUS      PC       SP     ERRNO  DELAY
-
--------- ------------ -------- --- ---------- -------- -------- ------- -----
ifa        5f62c         7f95980 228 SUSPEND     27ec3ec  7f937a8  3d0002     0

6.由于第1步就得到相应的符号表,检查相关代码,最后得到 gifa_pbLaserExpPwr 下标取值可能有-1情况。

int gifa_pbLaserExpPwr[2];

/* ***********code **************/

gifa_pbLaserExpPwr [uiFuncPortNo-1]=pPortCfg->sPortCfg.pbLaserExpPwr;

/* ***********code **************/

7.修复后问题正常内存打印

% d 0x2d26ee502d26ee50:  2d27 25e0 2d26 db50 0000 1bc8 e800 0000   *-'%.-&.P........*
2d26ee60:  ffff ffce 0000 0000 0000 0001 4946 4100   *............IFA.*2d26ee70:  0000 0000 0000 0000 0000 0000 0000 0000   *................*2d26ee80:  0000 0000 0000 0000 0000 0000 4552 524f   *............ERRO*2d26ee90:  5200 0000 0000 0000 0000 0000 0000 0000   *R...............*2d26eea0:  0000 0000 0000 0000 0000 0000 0000 0003   *................*2d26eeb0:  00c8 4572 726f 7220 696e 666f 2e00 0000   *..Error info....*
2d26eec0:  0000 0000 0000 0000 0000 0000 0000 0000   *................*2d26eed0:  0000 0000 0000 0000 0000 0000 0000 0000   *................*2d26eee0:  0000 0000 0000 0000 0000 0000 0000 0000   *................*2d26eef0:  0000 0000 0000 0000 0000 0000 0000 0000   *................*2d26ef00:  0000 0000 0000 0000 0000 0000 0000 0000   *................*2d26ef10:  0000 0000 0000 0000 0000 0000 0000 0000   *................*2d26ef20:  0000 0000 0000 0000 0000 0000 0000 0000   *................*2d26ef30:  0000 0000 4d53 4700 0000 0000 0000 0000   *....MSG.........*2d26ef40:  0000 0000 0000 0000 0000 0000 0000 0000   *................*value = 21 = 0x15
e800 0000 被改写过。
全局变量由tm_task 统一分配(编译时已经指定),1块内存可能包含多个全局变量。

相关知识

-> bh   address, access, task, count, quiet
access: 0 - instruction,
1 - read/write data,
2 - read data,
3 - write data

内存块的基本结构如下:





Big Endian

0x12345678   低地址                                            高地址   ----------------------------------------->   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   |     12     |      34    |     56      |     78    |   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+



这篇关于vxworks memory overflow debug的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/887025

相关文章

Nn criterions don’t compute the gradient w.r.t. targets error「pytorch」 (debug笔记)

Nn criterions don’t compute the gradient w.r.t. targets error「pytorch」 ##一、 缘由及解决方法 把这个pytorch-ddpg|github搬到jupyter notebook上运行时,出现错误Nn criterions don’t compute the gradient w.r.t. targets error。注:我用

idea 怎么调试debug

1、这里以一个web工程为例,点击图中按钮开始运行web工程。 2、设置断点 3、使用postman发送http请求 4、请求发送之后会自动跳到断点处,并且在断点之前会有数据结果显示 5、按F8 在 Debug 模式下,进入下一步,如果当前行断点是一个方法,则不进入当前方法体内,跳到下一条执行语句。 6、按F7在 Debug 模式下,进入下一步,如果当

02 Shell Script注释和debug

Shell Script注释和debug 一、ShellScript注释 ​ # 代表不解释不执行 ​ 语法:# # 创建myshell.sh文件[root@localhost ~]# vi myshell.sh # 写入内容#!/bin/bash# 打印hello world(正确)echo "hello world"echo "hello 2" # 注释2(正确)echo

Tomcat怎样用Debug模式启动

在加装了Tomcat插件的Eclipse中可以设置用Debug模式启动Tomcat,此时Tomcat以及Web应用中的日志都以最详细的级别输出。 但如果直接从命令行用“starup.sh”启动,则只有INFO和更高级别的日志被输出,其他的都过滤掉了。 怎样才能在命令行里以Debug模式启动Tomcat?         你可以用配置Tomcat支持

WebStorm用Debug模式调试Vue等前端项目

问题说明 开发前端时,一直很苦恼调试前端代码的麻烦。 简单的内容可以通过console.log()在控制台打印变量值,来验证预期结果。 涉及到稍复杂的逻辑,就需要在代码中侵入增加debugger,或者在浏览器中找到js文件,再手动添加断点。 非常的麻烦,而且浏览器中对变量的追踪功能也有限,同时我也一直好奇WebStorm中Debug启动方式的作用,今天研究了一下,果然WebStorm提供了更简

The `XXXUITests [Debug]` target overrides the `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build......

出现的警告: [!] The `ColorInHeartUITests [Debug]` target overrides the `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build setting defined in `Pods/Target Support Files/Pods-ColorInHeart-ColorInHeartUITests/Po

Learning Memory-guided Normality for Anomaly Detection——学习记忆引导的常态异常检测

又是一篇在自编码器框架中研究使用记忆模块的论文,可以看做19年的iccv的论文的衍生,在我的博客中对19年iccv这篇论文也做了简单介绍。韩国人写的,应该是吧,这名字听起来就像。 摘要abstract 我们解决异常检测的问题,即检测视频序列中的异常事件。基于卷积神经网络的异常检测方法通常利用代理任务(如重建输入视频帧)来学习描述正常情况的模型,而在训练时看不到异常样本,并在测试时使用重建误

Debug跟Release区别

Debug和Release区别 Debug和Release区别  2011年10月17日   Debug和Release区别VC下Debug和Release区别   最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到问题所在处,才发现原来是给定的一个数组未初

Codewarrior中利用PE multilink下载程序debug时不能连接问题

现象:PC连接PE multilink然后连接单片机,mutilink上的与单片机的连接接口是正确的,但点击codewarrior中debug按钮,则会出现连接失败,如下图: 电脑端口也能识别 但就是不能连接。 解决方案:如下图点击[FAQ#29]然后进入, 按照这个界面给的解决方案去解决即可,重装一下驱动(此页面下面会给出相应的BDM驱动)

【论文分享】GPU Memory Exploitation for Fun and Profit 24‘USENIX

目录 AbstractIntroductionResponsible disclosure BackgroundGPU BasicsGPU architectureGPU virtual memory management GPU Programming and ExecutionGPU programming modelGPU kernelDevice function NVIDIA