android - core dump addresses not byte aligned -
i examining arm crashes on android , realised memory addresses positions not 2-byte aligned (thumb/arm) are. 1 know why so? here example tombstone:
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
one can see #00, #02 2 byte aligned while #01 , #03 not. explanation of why so? thanks.
i guess odd addresses indicate functions in thumb mode, while addresses in arm mode. when returning function bx lr
, processor switch arm mode thumb or vice versa depending on lowest bit of address, i'd guess end seeing in backtrace well.
Comments
Post a Comment