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

时间:2017-07-19 13:52:23

标签: c gcc toolchain address-sanitizer

我正在努力将内核地址清理程序(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工具链生成的代码吗? 或者只是为进一步搜索设置方向。

感谢。

1 个答案:

答案 0 :(得分:1)

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

您使用哪种GCC版本?全局变量的检测仅在GCC 5.0中进行(在this patch中)并且没有向后移植到4.9分支。另一个选项是忘记使用> 3,2,1 1 > "abc", "bca", "cba" 'cba' > [1], [2], [3] [ 3 ] -fno-common。{/ p>