跳到主要内容

地址越界事件介绍

概述

地址越界问题是指访问了不合法的地址,导致程序运行出现异常,通常表现为应用崩溃。

开发者可通过HiAppEvent接口订阅地址越界事件,请参考以下文档。目前提供ArkTS和C/C++两种接口,按需选择。

地址越界事件支持在应用分身场景下使用 HiAppEvent 进行订阅,从 API version 22 开始支持在输入法应用场景下使用 HiAppEvent 进行订阅。不支持在元服务场景下使用 HiAppEvent 进行订阅。

检测原理

详见地址越界类问题检测

事件字段说明

params字段说明

地址越界事件信息中params属性的详细描述如下:

名称类型说明
timenumber事件触发时间,单位:ms。
bundle_versionstring应用版本。
bundle_namestring应用名称。
pidnumber应用的进程id。
uidnumber应用的用户id。
typestring地址越界错误类型,取值范围详见type属性。
external_logstring[]故障日志文件路径。为避免目录空间超限(限制参考log_over_limit),导致新生成的日志文件写入失败,日志文件处理完后请及时删除。
log_over_limitboolean生成的故障日志文件与已存在的日志文件总大小是否超过5M上限。true表示超过上限,日志写入失败;false表示未超过上限。

type字段说明

地址越界事件信息中type的详细描述如下:

取值说明
GWP-ASANGWP-ASan触发的错误类型。
UBSANUBSan触发的错误类型。
TSANTSan触发的错误类型。
FDSAN从API version 20开始,可以支持订阅由fdsan触发的错误类型。
stack tag-mismatchHWASan检测堆栈标记不匹配,可能是因为堆栈返回后使用、堆栈范围外使用或出界。
alloc-dealloc-mismatch内存分配和释放方式不匹配。
allocation-size-too-big分配过大的堆内存。
calloc-overflowcalloc分配内存错误。
container-overflow容器溢出。
double-free重复释放的内存。
dynamic-stack-buffer-overflow缓冲区访问超出堆栈分配对象的边界。
global-buffer-overflow全局缓冲区溢出。
heap-buffer-overflow堆缓冲区溢出。
heap-use-after-free使用已释放的堆内存。
invalid-allocation-alignment无效的内存分配对齐方式。
memcpy-param-overlapmemcpy不支持重叠内存。
new-delete-type-mismatch内存释放大小与分配大小不一致。
stack-buffer-overflow堆栈缓冲区溢出。
stack-buffer-underflow堆栈缓冲区下溢。
stack-use-after-return在返回后使用堆栈内存。
stack-use-after-scope使用超出范围的堆栈内存。
strcat-param-overlap在重叠缓冲区中移动内存导致的错误。
use-after-poison对内存地址投毒后被使用。