0xdeadcab1故障地址是什么意思

What is the meaning of 0xdeadcab1 fault address

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

0xdeadcab1 常量是 hardcoded in Android's C++ runtime called GAbi++. This runtime, upon termination (i.e. a call to std::terminate()), dereferences this address to make it stand out in stack traces. cab1 is meant to stand for "C++ ABI". The GAbi++ runtime isn't the default on Android, but it is embedded in STLPort,这是 Android 上很长一段时间的常见 STL 实现(它已在 NDK 18 中删除,取而代之的是 libc++).

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