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++ 下生成段错误)。我不排除其他情况也会导致相同的段错误。
我在 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++ 下生成段错误)。我不排除其他情况也会导致相同的段错误。