首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM组件回溯PC偏移量

ARM组件回溯PC偏移量
EN

Stack Overflow用户
提问于 2017-07-06 10:20:10
回答 1查看 881关注 0票数 7

“反歧视公约”手册提到:

在执行过程中,PC不包含当前正在执行的指令的地址。当前执行指令的地址通常是ARM的PC-8或拇指的PC-4 .

这也适用于崩溃回溯中的PC值吗?

例如,如果我有以下回溯(来自使用ARM指令的Android armv7设备):

代码语言:javascript
复制
libSomeLib.so!SomeClass::someMethod [someFile.cpp : 638 + 0x4]
    r0 = 0x00000001    r1 = 0xffffffff    r2 = 0x00000000    r3 = 0xd4fcd71c
    r4 = 0xd39b9284    r5 = 0xd39b927c    r6 = 0xd39b9278    r7 = 0xc7025520
    r8 = 0xc5e1d7b0    r9 = 0xe01136a8   r10 = 0x00000012   r12 = 0xd39b9268
    fp = 0xd39b92d4    sp = 0xd39b9268    lr = 0xd4ea1f24    pc = 0xd4ea1f24
...
0xd47cb000 - 0xd5079fff  libSomeLib.so  ???

我应该在libSomeLib.so内寻找0xd4ea1f24-0xd47cb000=0x006D6F240xd4ea1f24-0xd47cb000-8=0x006D6F1C的崩溃指令吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-16 15:42:13

我故意撞车去调查。源代码:

代码语言:javascript
复制
int* crashPointer = nullptr;
*crashPointer = 7;

生成的程序集:

代码语言:javascript
复制
11feb8: e3005007    movw    r5, #7
11febc: e3006000    movw    r6, #0 <--- r6 is #0
11fec0: e50b0014    str r0, [fp, #-20]  ; 0xffffffec
11fec4: e50b1018    str r1, [fp, #-24]  ; 0xffffffe8
11fec8: e51b0014    ldr r0, [fp, #-20]  ; 0xffffffec
    int* crashPointer = nullptr;
11fecc: e50b601c    str r6, [fp, #-28]  ; 0xffffffe4 <--- Stores #0 to [fp, #-28] from r6
    *crashPointer = 7;
11fed0: e51b101c    ldr r1, [fp, #-28]  ; 0xffffffe4 <--- Loads #0 from [fp, #-28] to r1
11fed4: e5815000    str r5, [r1] <--- This should crash since it's trying to dereference r1 which is #0

预测的崩溃地址是11fed4

实际坠机转储:

代码语言:javascript
复制
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
    r0 ea408800  r1 00000000  r2 00000006  r3 ea6ccfa0
    r4 ea6d1b2a  r5 00000007  r6 00000000  r7 ea3ff904
    r8 00000001  r9 e8b22ec0  sl ea6b5be9  fp ea3ff5c0
    ip ea6d1af8  sp ea3ff550  lr ea6d09aa  pc ea696ed4  cpsr 600f0010
...
ea577000-ea6d7000 r-xp 00000000 fe:01 1556782   libSomeLib.so

结论:ea696ed4-ea577000=11fed4与预测地址相等。

总之:没有必要在崩溃转储中为PC值添加偏移量(至少对Android armv7来说是这样)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44946209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档