0xe7f001f0!?NDK调试过程,无故抛出SIGSEGV。
Posted bbqz007
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0xe7f001f0!?NDK调试过程,无故抛出SIGSEGV。相关的知识,希望对你有一定的参考价值。
arm调试过程,如果抛一个SIGSEGV,地址在 0xe7f001f0 附近,原因居然是因为我在调试。当我使用n指令跳到下一行代码时,往往变成了continue指令一样地执行。还不确定地抛出SIGSEGV(addr:0xe7f00XXX),使用程序直接崩溃不能继续调试下去。查看寄存器发现的确有某个rN的寄存器被诡异地修改了。多次归纳后发现,都在调用虚函数时抛出SIGSEGV(addr:0xe7f00XXX),不论何处何种逻辑下,这个被神修改的寄存器的值都是0xe7f00XXX,在反编译逻辑中是要在这里取出虚函数表的虚函数指针。这个寄存器原本是从对象中读取出虚函数表地址,然后偏移取出虚函数指针,却无端被写0xe7f001f0。最后google这个地址,才发现,这是arm下调试中断,.inst 0xe7f001f0。
参考https://github.com/scottt/debugbreak。
Behavior on Different Architectures
Architecture | debug_break() |
---|---|
x86/x86-64 | int3 |
ARM mode, 32-bit | .inst 0xe7f001f0 |
Thumb mode, 32-bit | .inst 0xde01 |
AArch64, ARMv8 | .inst 0xd4200000 |
MSVC compiler | __debugbreak |
Otherwise | raise(SIGTRAP) |
不得不喷google的android studio,lldb做得如此强差人意。它的lldb强差人意的地方还多着。
以上是关于0xe7f001f0!?NDK调试过程,无故抛出SIGSEGV。的主要内容,如果未能解决你的问题,请参考以下文章
没有为片段 OneFragment92c0220 #1 id=0x7f0e00d5 android:switcher:2131624149:0 找到 id 0x7f0e00d5 (com.exampl
未找到片段 SettingsFragment 的 id 0x7f0a000e 的视图
无法克隆对象 <keras.wrappers.scikit_learn.KerasClassifier object at 0x7f9d95dd50f0>,因为构造函数要么未设置