码迷,mamicode.com
首页 > 其他好文 > 详细

0xe7f001f0!?NDK调试过程,无故抛出SIGSEGV。

时间:2017-08-30 17:13:44      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:ima   otherwise   logs   body   ddr   地方   x86   sig   continue   

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

Architecturedebug_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。

标签:ima   otherwise   logs   body   ddr   地方   x86   sig   continue   

原文地址:http://www.cnblogs.com/bbqzsl/p/7453943.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!