支持arm-none-eabi工具链中的ASAN标志

问题描述 投票:1回答:1

我正在努力将内核地址清理程序(KASan)从linux移植到另一个操作系统(让我们称之为操作系统)。这个操作系统使用arm-none-eabi工具链编译,我将以下asan相关标志传递给编译器:

-fsanitize=kernel-address --param asan-globals=1 --param asan-stack=1 --param asan-instrumentation-with-call-threshold=0

我还实现了不同的__asan_*函数,包括__asan_register_globals__asan_unregister_globals

我的问题是编译器只插入__asan_load*__asan_store*__asan_handle_no_return函数并忽略全局变量和堆栈。

我做了调查,发现在Linux编译器中插入全局和堆栈的检测,但Linux使用arm-linux-gnueabi工具链。

任何人都可以解释为什么--param asan-globals=1--param asan-stack=1不会影响使用arm-none-eabi工具链生成的代码?或者只是为进一步搜索设置方向。

谢谢。

c gcc toolchain address-sanitizer
1个回答
1
投票

您不需要任何特殊函数调用堆栈检测 - 阴影内存在函数序言中通过内联存储中毒(并且在结尾中未被中毒)。

您使用哪个GCC版本?全球化的仪器仅在GCC 5.0(在this patch中)进行,并且没有向后移植到4.9分支。另一种选择是你忘了使用-fno-common这是necessary to instrument common symbols

© www.soinside.com 2019 - 2024. All rights reserved.