我在Android上的本机代码崩溃时,在r3或x8寄存器(在ARM上)中观察到了这个值。崩溃始终由signal 11 (SIGSEGV), code 1 (SEGV_MAPERR)
引起。我想知道具体值0xdeadcab1
是否提供了任何其他信息(例如0xdeadbaad
表示存在堆损坏),还是与SIGSEGV
/ SEGV_MAPERR
同义?
答案 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 ++下生成段错误)。我不排除其他情况也会导致相同的段错误。