MSPnbspCnbsp语言编程的程序堆栈溢出分析.pdf

MSPnbspCnbsp语言编程的程序堆栈溢出分析.pdf

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
EXPERIENCEEXCHANGE 经验交流 语言编程的程序堆栈溢出分析 MSP430 C ■ 沈阳军区疾病预防控制中心 刘宏斌 TI 的M SP430 系列单片机以其低功耗和高性能,越 main(v oid) { 来越多的受到众多开发人员的青睐。许多熟悉5 1 单片 fu n(); 机并使用 K EI L C5 1 编译器的工程师由此转而使用 } M SP4 30 的IA R C 编译器。但在实际调试工作中,由其 程序中定义了一个全局整型变量globe ,在fun ()函 是占用内存较多的C语言程序,有时会出现程序异常跑 数中定义了一个局部变量数组bu f[ 10],在主函数中调用 飞现象。排除硬件的干扰因素,其中有不少是堆栈的溢 fun ()函数。分别在KEIL C5 1 与M SP4 30 的IA R C 环境下 出所至。 为此文件建立工程并编译、连接(重建) 。 众所周知, 堆栈是一块独立于数据区的内存空间。单 KEIL C51生成连接列表文件的方法是:在集成开发 片机程序在执行过程中,若发生中断或执行CA LL 语句 环境下打开Proj ect->option for target->Li stin g 项,并选中 时,要将下一条语句的地址指针压入堆栈。在某些子程 linker Listin g 。重建工程后,可在工程所在目录下产生以 序中还要作现场保护,即将子程序中使用过的寄存器也 M 51 为扩展名的连接列表文件。 压入堆栈,子程序执行结束并返回前,要将堆栈中这些 IA R C 生成连接列表文件的方法是:在集成开发环 寄存器的原始值按后入先出的顺序恢复,最后再将程序 境下打开Proj ect->option ->xlink ->list 并选中gen erate linker 地址指针出栈,以便程序能继续向下执行。 List。重建工程后,可在工程所在目录的deb u g->li st 子 对于汇编语言来说,现场保护与恢复都由手工完 目录下产生以m a p 为扩展名的列表文件。这里以 成,堆栈的操作相对透明,而对于C 语言来说,以上操 msp430F147 为例,在包含选项里选msp430F147C.xcl 。 作均由编译器自动完成。由于单片机系统资源相对有 2 分 析 限,若程序设计不当而使数据区与堆栈指针重叠或堆栈 首先以文本编辑工具打开KEIL C51 产生的M 5 1 文 指针超出内存空间,则会导致堆栈溢出。程序返回时的 件,其中一段为: 地址被破坏,进而程序跑飞。 …… 遗憾的是还没有那种编译器能给出堆栈可能溢出的 REG 0000H 0008H ABSOLU TE “REG BA N K 0 ” 警告,这往往会形成一个潜在的BUG。单片机系统总体 DA TA 0008H 000AH UN IT _DA TA_GROUP_ 的内存需求是在选型时考虑的问题,本文不做讨论。在 DA TA 00 12H 0002H UN IT ?DT?43 0TEST 设计调试阶段,KEIL C51工程师一般是通过查看连接时 IDA TA 00 14H 000 1H UN IT ?STA CK 产生的列表文件,再综合考虑预留多少空间给堆栈使 …… 用。但是由于M SP4 30 的IA R C 的不同,对堆栈的使用

文档评论(0)

asd3366 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档