核心转储地址不是字节对齐(core dump addresses not byte aligned)

2019-10-22 11:34发布

我正在研究Android上的一些ARM崩溃和实现一些内存地址位置不是2字节对齐(拇指/ ARM)但也有一些。 是否有任何人知道为什么会这样呢? 下面是一个例子墓碑:

Stack frame #00 pc 00072c9a /system/lib/libdvm.so (dvmAbort+170)
Stack frame #01 pc 00050f6b /system/lib/libdvm.so (ScopedCheck::checkInstanceFieldID(_jobject*, _jfieldID*)+379)
Stack frame #02 pc 0005db56 /system/lib/libdvm.so (Check_SetBooleanField(_JNIEnv*, _jobject*, _jfieldID*, unsigned char)+150)
Stack frame #03 pc 00003a93 /system/lib/libmytestt.so (Java_com_test_jni_MyLibWrapper_getMonitorSample+259)
Stack frame #04 pc 0002d850 /system/lib/libdvm.so (dvmPlatformInvoke+80)
Stack frame #05 pc 00085b48 /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+648)
Stack frame #06 pc 000505db /system/lib/libdvm.so (dvmCheckCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+59)
Stack frame #07 pc 0008b96d /system/lib/libdvm.so (dvmResolveNativeMethod(unsigned int const*, JValue*, Method const*, Thread*)+317)
Stack frame #08 pc 00170ff1 /system/lib/libdvm.so

可以看到,#00,#02,同时是01#和#03是不是2字节对齐。 为什么任何的解释是这样吗? 谢谢。

Answer 1:

我猜想,奇地址表示这些功能在Thumb模式,而偶数地址是ARM模式。 当从一个函数返回bx lr ,处理器从ARM模式切换到拇指或反之亦然根据地址的最低位,所以我想这是你最终在回溯看为好。



文章来源: core dump addresses not byte aligned