未验证 提交 b1622a77 编写于 作者: O openharmony_ci 提交者: Gitee

!9781 Sanitizer选项使能说明

Merge pull request !9781 from lihehe/integer
...@@ -337,6 +337,7 @@ optional arguments: ...@@ -337,6 +337,7 @@ optional arguments:
## 参考信息 ## 参考信息
- [关于deps、external_deps的使用](subsys-build-reference.md#关于deps、external_deps的使用) - [关于deps、external_deps的使用](subsys-build-reference.md#关于deps、external_deps的使用)
- [Sanitizer使用说明](subsys-build-reference.md#Sanitizer使用说明)
- [开源软件Notice收集策略说明](subsys-build-reference.md#开源软件notice收集策略说明) - [开源软件Notice收集策略说明](subsys-build-reference.md#开源软件notice收集策略说明)
- [加快本地编译的一些参数](subsys-build-reference.md#加快本地编译的一些参数) - [加快本地编译的一些参数](subsys-build-reference.md#加快本地编译的一些参数)
- [查看NinjaTrace](subsys-build-reference.md#查看ninjatrace) - [查看NinjaTrace](subsys-build-reference.md#查看ninjatrace)
......
...@@ -63,13 +63,16 @@ ohos_shared_library("helloworld") { ...@@ -63,13 +63,16 @@ ohos_shared_library("helloworld") {
part_name = [string] # 必选,所属部件名称 part_name = [string] # 必选,所属部件名称
output_dir output_dir
# Sanitizer variables # Sanitizer配置,每项都是可选的,默认为false/空
sanitize = {
# 各个Sanitizer开关
cfi = [boolean] cfi = [boolean]
scs = [boolean] integer_overflow = [boolean]
scudo = [] ...
ubsan = []
boundary_sanitize = [] debug = [boolean] # 调测模式
integer_overflow_sanitize = [] blocklist = [string] # 屏蔽名单路径
}
testonly = [boolean] testonly = [boolean]
license_as_sources = [] license_as_sources = []
...@@ -104,13 +107,16 @@ ohos_static_library("helloworld") { ...@@ -104,13 +107,16 @@ ohos_static_library("helloworld") {
lib_dirs = [] lib_dirs = []
public_configs = [] public_configs = []
# Sanitizer variables # Sanitizer配置,每项都是可选的,默认为false/空
sanitize = {
# 各个Sanitizer开关
cfi = [boolean] cfi = [boolean]
scs = [boolean] integer_overflow = [boolean]
scudo = [] ...
ubsan = []
boundary_sanitize = [] debug = [boolean] # 调测模式
integer_overflow_sanitize = [] blocklist = [string] # 屏蔽名单路径
}
remove_configs = [] remove_configs = []
no_default_deps = [] no_default_deps = []
...@@ -136,13 +142,16 @@ ohos_executable("helloworld") { ...@@ -136,13 +142,16 @@ ohos_executable("helloworld") {
ohos_test = [] ohos_test = []
test_output_dir = [] test_output_dir = []
# Sanitizer variables # Sanitizer配置,每项都是可选的,默认为false/空
sanitize = {
# 各个Sanitizer开关
cfi = [boolean] cfi = [boolean]
scs = [boolean] integer_overflow = [boolean]
scudo = [] ...
ubsan = []
boundary_sanitize = [] debug = [boolean] # 调测模式
integer_overflow_sanitize = [] blocklist = [string] # 屏蔽名单路径
}
testonly = [boolean] testonly = [boolean]
license_as_sources = [] license_as_sources = []
...@@ -179,13 +188,16 @@ ohos_source_set("helloworld") { ...@@ -179,13 +188,16 @@ ohos_source_set("helloworld") {
"part_name:module_name", # 定义格式为 "部件名:模块名称" "part_name:module_name", # 定义格式为 "部件名:模块名称"
] # 这里依赖的模块必须是依赖的部件声明在inner_kits中的模块 ] # 这里依赖的模块必须是依赖的部件声明在inner_kits中的模块
# Sanitizer variables # Sanitizer配置,每项都是可选的,默认为false/空
sanitize = {
# 各个Sanitizer开关
cfi = [boolean] cfi = [boolean]
scs = [boolean] integer_overflow = [boolean]
scudo = [] ...
ubsan = []
boundary_sanitize = [] debug = [boolean] # 调测模式
integer_overflow_sanitize = [] blocklist = [string] # 屏蔽名单路径
}
testonly = [boolean] testonly = [boolean]
license_as_sources = [] license_as_sources = []
...@@ -198,7 +210,9 @@ ohos_source_set("helloworld") { ...@@ -198,7 +210,9 @@ ohos_source_set("helloworld") {
} }
``` ```
![icon-note.gif](public_sys-resources/icon-note.gif)**注意**:只有sources和part_name是必选,其他都是可选的。 ![icon-note.gif](public_sys-resources/icon-note.gif)**注意**
- 只有sources和part_name是必选,其他都是可选的;
- Sanitizer配置详见:[Sanitizer使用说明](subsys-build-reference.md#Sanitizer使用说明)
### 预编译模板示例 ### 预编译模板示例
......
...@@ -62,6 +62,50 @@ ...@@ -62,6 +62,50 @@
![icon-note.gif](public_sys-resources/icon-note.gif)**注意**:部件间依赖要写在external_deps里面,格式为”部件名:模块名"的形式,并且依赖的模块必须是依赖的部件声明在inner_kits中的模块。 ![icon-note.gif](public_sys-resources/icon-note.gif)**注意**:部件间依赖要写在external_deps里面,格式为”部件名:模块名"的形式,并且依赖的模块必须是依赖的部件声明在inner_kits中的模块。
## Sanitizer使用说明
在添加模块时,可选地对该模块开启编译器提供的Sanitizer功能,包括整数溢出排错、控制流完整性检查等。配置的每一项都是可选的,如不指定默认为false或者空。Sanitizer配置示例如下所示:
``` shell
ohos_shared_library("example") {
sanitize = {
cfi = true
integer_overflow = true
debug = true # 可选,调测模式,默认是不开启
blocklist = "./blocklist.txt" # 可选,屏蔽名单路径
}
...
}
```
**支持的Sanitizer选项**
目前支持开启的Sanitizer:
- 整数溢出排错:unsigned_integer_overflow/signed_integer_overflow/integer_overflow(同时包括无符号和有符号整数溢出两种检查)
- 控制流完整性:cfi
**发布、调测模式**
通过`debug`选项控制使用发布模式还是调测模式,默认为发布模式,使用`debug = true`显式声明开启调测模式,在发布版本的编译中不带此选项。
- 调试模式:使用Sanitizer在开发时排查问题,与编译的debug版本无关。该模式下会输出产生错误相关的丰富信息来辅助定位错误,并且在发生错误后并不会直接中断程序运行,而是会恢复程序运行进一步识别后续的错误。
- 发布模式:保护程序发生错误或被恶意攻击,在产生错误后直接中断程序不会继续执行。
**屏蔽名单**
指定该模块中不受Sanitizer选项影响的函数或源程序文件名单,用于避免良性行为被识别为错误、热点函数产生了不合理、不可接受的开销;该名单需谨慎使用。名单示例如下所示:
```
[cfi]
fun:*([Tt]est|TEST)*
fun: main
[integer]
src:example/*.cpp
```
## 开源软件Notice收集策略说明 ## 开源软件Notice收集策略说明
开源软件Notice是与项目开源相关的文件,收集这些文件的目的是为了符合开源的规范。 开源软件Notice是与项目开源相关的文件,收集这些文件的目的是为了符合开源的规范。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册