- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅析vxWorks系统中如何抓取任务的函数调用轨迹
这几天连续查了几个关于死机、网口死的问题,情况基本上都是任务吊死了,包括大家有时看到的串口和网口都不响应,也往往都是由于任务停止切换而造成的。对于这类问题,我们一般感觉比较棘手,因为一旦网口串口全都拒绝响应之后,整个系统对于我们来说就是一个黑盒了,
程序员坐在显示器前边,只能束手无策望洋兴叹。这里结合我自己的一些经验和所知,试图为大家寻找到一种处理类似问题的思路,希望能够对大家有所帮助。
其实大家都曾经看到过操作系统模块里边os_exc.c这个文件,但许多人并不知道它能够完成的真正功能和工作原理,要弄清楚这些,我们必须先初步了解一下vxWorks系统在函数调用过程中的一些底层实现机制,看看我们如何抓到指定任务的函数调用轨迹的,因为吃透了这些,我们就可以在必要的时候,抓取指定任务的函数调用栈,从而基本可以定位处任务吊死在哪个函数内部了。
首先,PPC有32个通用寄存器(GPRS)和7个专用寄存器(SPRS),这里,作为上层软件的开发人员,大家并不需要去深入了解过多的操作系统细节,也无需对CPU的每个寄存器每根线都了如指掌,而只需将注意力集中在我们所关心的通用寄存器gpr1、gpr3以及专用寄存器lr、pc。它们的重要性是因为:在函数调用过程中,gpr1就是sp,也就是函数的堆栈指针,gpr3是函数调用过程中传参的第一个寄存器(函数实参从gpr3开始顺序存放,如果寄存器放不下了,就会压入堆栈,然后执行跳转指令进入被调用函数,被调用函数再从这些事先约定的寄存器中取出实参进行后续处理,同样,函数的返回值也是存放在r3中的),lr是函数调用过程中的返回指令地址(也就是函数调用点的下一条指令地址),而pc是当前指令地址。
上边的说法可能比较抽象,有些不便于理解,那么我们看下边这个例子代码的汇编结果:
int myfunc2(int i)
{
int j;
j = 0;
j += i;
return j;
}
int myfunc1()
{
int i;
int j;
i = 4 *5;
j = myfunc2(i);
return j;
}
相应的汇编代码如下,莫为乱花迷了眼,我们只需关注红色部分即可:
int myfunc1()
{
0x167b4 myfunc1: stwu r1, 0xffe8(r1)
0x167b8 +0x004: mfspr r0, LR
0x167bc +0x008: stw r31, 0x14(r1)
0x167c0 +0x00c: stw r0, 0x1c(r1)
0x167c4 +0x010: or r31, r1, r1
int i;
int j;
i = 4 *5;
0x167c8 +0x014: li r0, 0x14 (20)
0x167cc +0x018: stw r0, 0x8(r31)
j = myfunc2(i);
0x167d0 +0x01c: lwz r3, 0x8(r31)
0x167d4 +0x020: bl myfunc2
0x167d8 +0x024: or r0, r3, r3
0x167dc +0x028: stw r0, 0xc(r31)
return j;
0x167e0 +0x02c: lwz r3, 0xc(r31)
0x167e4 +0x030: b myfunc1 + 0x34
}
0x167e8 +0x034: lwz r11, 0x0(r1)
0x167ec +0x038: lwz r0, 0x4(r11)
0x167f0 +0x03c: mtspr LR, r0
0x167f4 +0x040: lwz r31, 0xfffc(r11)
0x167f8 +0
您可能关注的文档
- 新闻写作培训内容.doc
- 新闻史 考研复习资料.docx
- 提升小学生思维能力的探案游戏.doc
- 无限极营销策划.doc
- 无印良品企业分析大纲.doc
- 改性沥青流变性能的研究.doc
- 明末清初的思想活跃局面教案设计.doc
- 时空思维能力.doc
- 星巴克的目标市场营销报告.doc
- 时势与政策论文.doc
- 基于人工智能教育平台的移动应用开发,探讨跨平台兼容性影响因素及优化策略教学研究课题报告.docx
- 高中生物实验:城市热岛效应对城市生态系统服务功能的影响机制教学研究课题报告.docx
- 信息技术行业信息安全法律法规研究及政策建议教学研究课题报告.docx
- 人工智能视角下区域教育评价改革:利益相关者互动与政策支持研究教学研究课题报告.docx
- 6 《垃圾填埋场渗滤液处理与土地资源化利用研究》教学研究课题报告.docx
- 小学音乐与美术教师跨学科协作模式构建:人工智能技术助力教学创新教学研究课题报告.docx
- 《航空航天3D打印技术对航空器装配工艺的创新与效率提升》教学研究课题报告.docx
- 教育扶贫精准化策略研究:人工智能技术在区域教育中的应用与创新教学研究课题报告.docx
- 《区块链技术在电子政务电子档案管理中的数据完整性保障与优化》教学研究课题报告.docx
- 《中医护理情志疗法对癌症患者心理状态和生活质量提升的长期追踪研究》教学研究课题报告.docx
文档评论(0)