0xdeadcab1故障地址是什么意思

时间:2017-09-12 14:27:45

标签: android android-ndk jvm-crash

我在Android上的本机代码崩溃时,在r3或x8寄存器(在ARM上)中观察到了这个值。崩溃始终由signal 11 (SIGSEGV), code 1 (SEGV_MAPERR)引起。我想知道具体值0xdeadcab1是否提供了任何其他信息(例如0xdeadbaad表示存在堆损坏),还是与SIGSEGV / SEGV_MAPERR同义?

1 个答案:

答案 0 :(得分:0)

在Android的名为GAbi ++的C ++运行时中,0xdeadcab1常量为hardcoded。此运行时终止(即调用std::terminate())后,将取消引用该地址,以使其在堆栈跟踪中脱颖而出。 cab1代表“ C ++ ABI”。 GAbi ++运行时不是Android上的默认运行时,但它是embedded in STLPort,这是Android上很长一段时间以来常见的STL实现(在NDK 18中已被libc++删除)。

我在内存不足的情况下观察到了这种明显的段错误,其中抛出了std::bad_alloc,但是如果禁用了异常,它将落在std::terminate()上(它将取消引用该地址在为了在GAbi ++下生成段错误)。我不排除其他情况也会导致相同的段错误。