重庆生活网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 生活 重庆
查看: 1107|回复: 1
打印 上一主题 下一主题

[解决]ARM Data abort 异常的疑问

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-13 16:48:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为了测试arm的 data abort 異常,寫了如下代码,故意访问1M意外沒有被映射的區域:
00000000     ldr sp, =0x100000
00000004     add sp, sp, #8
00000008     push {r0}     /* access un-mapped area, cause Data abort exception */
0000000C     push {r1}
00000010     ............

復制代碼
异常响應代碼如下:
dabort_handler:
    sub lr, lr, 8
    ldr r0, =str_dabort
    mov r1, lr
    bl  printf
      .....

str_dabort:
    .string   "Data abort exception, LR = 0x%x\r\n"

复制代碼
测试得到的打印信息:
Data abort exception, LR = 0x100000

按照书上讲的,LR_abt 应该保存导致data abort异常的那条指令地址才对,但这里为什么是 0x100000 而不是 0x0000008 呢?



--------------------------
其实LR是没有问题的,最后发现是自定义函数printf里面有bug導致的。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
回复

使用道具 举报

沙发
发表于 2020-3-13 16:48:43 | 只看该作者
指令的寻數據地址,即0x100000 。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|联系我们|重庆生活网

GMT+8, 2024-5-7 00:26 , Processed in 0.218750 second(s), 16 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表