Android进程SEGV_MAPERR错误(LDR指令异常)

好吧我随便改的 2024-05-10 11:07:01

背景是这样的:

    硬件环境:8155

    软件环境:QNX+ Android(运行在Hyperisor中)

    本人负责DDS中间件的维护,封装了JNI和JAR包给上层JAVA使用,最近测试报票,说使用了该JAR包的进程出现crash,并且提供了墓碑文件

signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x1401d65f03f0
    x0  0000006f376782c8  x1  0000000000000081  x2  000000007fffffff  x3  0000000000000000
    x4  0000000000000000  x5  0000000000000000  x6  0000000000000000  x7  ffffffea6989a4db
    x8  b9001401d65f03c0  x9  b2333876f5c4e0a6  x10 0000000000000000  x11 0000000000000002
    x12 00000000fffffffe  x13 00000000fffffffe  x14 00000000fffffffe  x15 0000000000000002
    x16 0000006fda331230  x17 0000006fda261010  x18 0000000000000001  x19 0000006f529d8740
    x20 0000006f529d8800  x21 0000006f3857e700  x22 0000000000000000  x23 0000006f2ee21588
    x24 0000006f3791cc10  x25 0000006f529d8400  x26 0000006f529d8400  x27 0000006f303f3270
    x28 0000006f303f3288  x29 0000006f2ee200a0
    sp  0000006f2ee20060  lr  0000006f378009c8  pc  0000006f378009c0

 发生crash时PC寄存器的地址是0000006f378009c0

然后对发生问题的so进行反编译,获取到地址对应的汇编代码如下:

3899bc:    f9400008     ldr    x8, [x0]
3899c0:    f9401908     ldr    x8, [x8,#48]
3899c4:    d63f0100     blr    x8

根据该行汇编代码,0xb9001401d65f03c0(x8寄存器存放的值) + 0x30应该等于0xb9001401d65f03f0也就是3899c0该行ldr指令应该从0xb9001401d65f03f0对应的内存地址获取其中存放的WORD值但是现在墓碑显示的是ldr指令从0x1401d65f03f0这个内存地址去获取WORD值。

0x1401d65f03f0

0xb9001401d65f03f0 

0xb9001401d65f03f0

从上面这个对比,发现LDR取值的时候,丢失了地址的高2位,这个现象之前也在别的进程发现过,不知道有没有高手大佬给点思路?

 

 

...全文
1238 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

80,449

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧