问题标签 [sanitizer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1377 浏览

ffmpeg - 使用 Android NDK r17 构建 C 库 (FFmpeg):未定义对“__mulodi4”的引用

我的问题恰好出在 FFmpeg 上,但我怀疑几乎所有 C 库都会发生这种情况。

问题描述

我的应用程序使用使用 NDK r10e 编译的 FFmpeg。我正在尝试将所有内容更新到 NDK r17,同时也切换到 clang,因为 Google 更喜欢我们使用它而不是 gcc。

我的第一步是构建 FFmpeg。

为此,我使用该make_standalone_toolchain.py脚本为 x86 架构创建了一个独立的工具链,如下所示:

然后我配置FFmpeg构建如下:

然后我按如下方式构建它:

一切似乎都编译得很好,但我得到了几个链接器错误,它们都说同样的话:

未定义对“__mulodi4”的引用

我尝试过的解决方案

1. 链接 libclang_rt.builtins*

我在网上发现了一些地方,这表明这是由于 libgcc 不提供__mulodi4. 一个名为 sitsofe 的 github 用户非常好,可以在这里发布一个解决方法。但是,我确定在哪里可以找到这个libclang_rt.builtins-i686.a库。这是我在独立工具链目录中找到的内容:

./lib64/clang/6.0.2/lib/linux/libclang_rt.builtins-x86_64.a ./lib64/clang/6.0.2/lib/linux/libclang_rt.builtins-i386.a ./lib64/clang/6.0. 2/lib/linux/libclang_rt.builtins-aarch64-android.a ./lib64/clang/6.0.2/lib/linux/libclang_rt.builtins-mips64-android.a ./lib64/clang/6.0.2/lib/ linux/libclang_rt.builtins-x86_64-android.a ./lib64/clang/6.0.2/lib/linux/libclang_rt.builtins-i686-android.a ./lib64/clang/6.0.2/lib/linux/libclang_rt。 builtins-arm-android.a ./lib64/clang/6.0.2/lib/linux/libclang_rt.builtins-mips-android.a

图书馆libclang_rt.builtins-i686-android.a看起来很近,但(我认为)没有雪茄。当我尝试链接到它时,我得到了同样的错误:

未定义对“__mulodi4”的引用

这是我的新 FFmpeg 构建配置命令:

我检查-v以确保该行已添加到链接器标志中,并且确实如此。但是,我不知道这个库是否应该工作,更不用说我是否正确地将它添加到链接器标志中。无论如何,我在这里做的事情是行不通的。

2.切换到不同的消毒剂

我没有使用未定义的清理程序,而是尝试切换到地址清理程序。(坦率地说)这是一次彻头彻尾的暗中尝试,基于在本周 Google I/O 的 r17 中模糊地提到了 asan。

在这种情况下,FFmpeg 构建得很好!

但是,当我尝试将 FFmpeg 拉入我的测试项目(一个简单的带有 C++ 支持的 AAR,它只有一个调用 的 jni 方法时av_gettime(),我得到了大量的链接器错误:

错误:错误:未定义引用“__asan_option_detect_stack_use_after_return”
错误:错误:未定义引用“__asan_stack_malloc_0”
错误:错误:未定义引用“__asan_report_load4”
错误:错误:未定义引用“__asan_report_load4”
错误:错误:未定义引用“__asan_shadow_memory_dynamic_address”
错误:错误:未定义引用“__asan_option_detect_stack_use_after_return”
错误:错误:未定义引用“__asan_stack_malloc_0”
错误:错误:未定义引用“__asan_report_load4”
错误:错误:未定义引用“__asan_report_load4”
错误:错误:未定义引用“__asan_shadow_memory_dynamic_address'
错误:错误:未定义引用“__asan_option_detect_stack_use_after_return”
错误:错误:未定义引用“__asan_stack_malloc_0”
错误:错误:未定义引用“__asan_report_store4”
错误:错误:未定义引用“__asan_report_store4”
错误:错误:未定义引用“__asan_init”
错误:错误:未定义对“__asan_version_mismatch_check_v9”的引用

所以似乎找到了FFmpeg库就好了,说明我的CMake文件的那部分是正确的,但是它找不到这些asan引用中的任何一个。

这似乎是人们遇到的一个常见问题,但我找不到真正适合我的解决方法。

0 投票
1 回答
1042 浏览

clang - 我应该默认使用三种互斥的 Clang 消毒剂中的哪一种?

Clang 有许多清理程序,可以在运行时检查可疑行为。不幸的是,它们不能一次全部启用。

不能在同一程序中组合多个-fsanitize=address, -fsanitize=thread, 和检查器。-fsanitize=memory

更糟糕的是,这三个似乎都太有用了,不能忽略。AddressSanitizer 检查内存错误,ThreadSanitizer 检查竞争条件,MemorySanitizer 检查未初始化的读取。 我担心所有这些事情!

显然,如果我预知虫子在哪里,我可以据此选择消毒剂。但如果我不这样做呢?更进一步,如果我想将消毒剂用作预防工具而不是诊断工具,以指出我什至不知道的错误怎么办?

换句话说,鉴于我没有特别寻找任何东西,默认情况下我应该使用哪种 sanitizer 进行编译? 我是否只希望编译和测试整个程序三次,每种消毒剂一次?

0 投票
1 回答
157 浏览

angular - html 电子邮件内容中的 angular sanitizer 和孤立尖括号

在我的 Angular 应用程序中,我应用了 Angular 清理,因此无效的 html 被剥离(使用 getTrustedHtml mathod)和有效的 html 去(HttpPost)到 web api。由于其他原因,不推荐使用 web api 中的 HtmlSanitizer;所以只有客户端我必须做。

在我的 Angular 应用程序中发送 html 电子邮件时,我在 QA 测试期间遇到了 HTML 场景中的孤立尖括号:并且孤立尖括号导致错误为“错误:[$sanitize:badparse] http://errors.angularjs.org /1.4.8/ $sanitize/badparse?p0=%3C%2Fh"

要删除孤立的尖括号(“<”或“<<..”或“>”或“...>>>>>....”或 />)我开始搜索正则表达式但找不到工作例子。

如果有人知道任何想法/工作,请提供帮助。

0 投票
1 回答
1419 浏览

gcc - Address Sanitizer 可以在检测到错误后立即中止吗?

我正在结合使用系统调用检查器,-fsanitize=address当 ASAN 发现错误时,它会在打印出报告时调用一些系统调用(ioctl(ISATTY)等)。系统调用检查器会中断 ASAN 的 ioctl,并且错误报告未正确收集。

我希望 ASAN 在不打印报告或失败的情况下简单地中止,这是一种确定(可能使用 libasan4 API 调用)ASAN 发现错误的方法,因此我可以阻止系统调用检查器拦截系统调用。

不幸的是__asan_error_report,从 libasan4 开始,在 ASAN 收集报告之后:__sanitizer_set_death_callback__asan_set_error_report_callback

并且系统调用检查器没有ioctl()正确处理 ASAN 的调用,所以它正常退出()s,而我希望保持 ASAN 的行为abort()

0 投票
2 回答
6579 浏览

gcc - AddressSanitizer 抑制

我正在尝试禁止来自 clang/gcc 中的地址清理程序的警告

我的源文件如下所示:

显然第 3 行有溢出。

抑制文件 (myasan.supp) 包含:

编译(clang 也会产生警告)并运行:

但是地址清理程序仍然抱怨溢出。

编译器是clang7。我也测试了clang6、gcc7。

知道如何进行这项工作吗?

0 投票
0 回答
211 浏览

java - 有没有 vmlens 的替代品来帮助检测竞争条件?

我正在寻找用于 java 代码的竞争检测器。

到目前为止,我只找到了 vmlens ( http://vmlens.com/ )。

我还有其他选择吗?

0 投票
1 回答
2127 浏览

c++ - C ++中的AddressSanitizer黑名单不起作用

我正在尝试让地址清洁剂黑名单在 C++ 项目中工作,但它没有按预期工作。我在他们的网站上试过这个例子,如果我用 编译clang,它工作正常。

但是一旦我使用clang++它,它就会被忽略。

我正在使用来自 release.llvm.org 的 clang-7

这在 C++ 下不支持吗?

0 投票
2 回答
5736 浏览

c - 1 << 31不能用'int'类型表示?

为什么会-fsanitize=undefined

运行时错误:不能以“int”类型表示 1 到 31 个位置的左移

在这段代码上

?

0 投票
1 回答
102 浏览

fortran - gfortran -fcheck=bounds,pointer错误报告怎么出来的

我正在尝试使用该gfortran选项-fcheck=bounds,pointer在某些代码中查找运行时错误。错误报告是什么样的,它们出现在哪里/何时?它们是写入标准错误、输出还是某个文件?它们是在发生时写入并刷新,还是在执行结束时?错误报告是否会终止执行?

0 投票
1 回答
187 浏览

c++ - 未定义的行为或误报

我有一些 C++ 代码,当在 Xcode 上运行时,未定义的行为清理器打开了报告:“ runtime error: store to misaligned address 0x7f8bcc403771 for type 'int', which requires 4 byte alignment”。

所以我创建了一个小的 Catch2 测试用例来重现我必须检查 windows/x64 (MSVC) 和 Mac(Xcode 11/clang) 上的运行时行为的代码,但即使使用不同类型的优化编译,一切都按预期运行( -O2、-O3、-Ofast 等)。

有问题的代码是(Catch2 测试用例):

所以我的问题是:这是一个未定义的行为误报,还是由于默认编译器标志的一些更改,代码中的某些内容将来可能会中断?