为什么 ulimit -v 在 Clang 的地址清理器下不起作用?
why does ulimit -v not work under clang's address sanitizer?
我正在使用libFuzzer来模糊API。
API 正在反序列化一个位数组(由 libFuzzer 给出(
并将它们转换为 c++ 类实例化。
由于序列化格式,libFuzer 能够构造一个序列化对象,告诉反序列化程序保留大量数据(无法满足(。
这是通过调用std::vector::resize()
来完成的。 向量抛出一个std::bad_alloc
,尽管问题被捕获并安全缓解,但它会导致模糊器极度滞后(如以下有关 OOM 问题的文档中所述(。
为了降低模糊器运行时使用的内存量,我希望设置ulimit -v
并调整进程的可用虚拟内存。 但是,这样做会导致
==27609==ERROR: AddressSanitizer failed to allocate 0xdfff0001000 (15392894357504) bytes at address 2008fff7000 (errno: 12)
==27609==ReserveShadowMemoryRange failed while trying to map 0xdfff0001000 bytes. Perhaps you're using ulimit -v
为什么地址清理器不能在 ulmit -v 下工作?
我希望它可以,然后我也许能够更有效地模糊。
其他信息:我的构建标志是:
copts = [
"-fsanitize=address,fuzzer",
"-fsanitize-trap=undefined,integer",
"-fsanitize-coverage=trace-pc,trace-cmp,trace-pc-guard",
"-g",
"-O0",
"-fno-omit-frame-pointer",
"-fno-sanitize=vptr",
],
linkopts = [
"-fsanitize=address,fuzzer",
"-fsanitize-trap=undefined,integer",
"-fno-sanitize=vptr",
"-fsanitize-link-c++-runtime",
],
我尝试关闭标志,以便我可以设置ulimit
并运行模糊器:
copts = [
"-fsanitize=fuzzer",
"-g",
"-O0",
"-fno-omit-frame-pointer",
],
linkopts = [
"-fsanitize=fuzzer",
],
但这会导致立即的段错误。
Asan 在启动时为影子内存保留 1/8 的进程地址空间,以保存用户数据的状态(已分配、释放等(。这是设计使然,对此无能为力。
请注意,您通常不关心虚拟内存,而是物理内存(这也会导致new
在您的情况下失败(。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 为什么 ulimit -v 在 Clang 的地址清理器下不起作用?
- 禁用地址共享注册表不起作用
- 赋值不起作用,但带有取消引用运算符的地址起作用?
- 指针不起作用,返回地址不是值
- 获取基本地址不起作用
- 从存储在 CTreeCtrl 的 LPARAM 中的结构中检索地址/指针 (IXMLDOMNode*) - 不起作用
- C++ 获取处理地址不起作用
- QHost地址集地址不起作用
- <<运算符重载不起作用;仍在打印对象地址