【问题标题】:Clang showing compiler error with fuzzer argumentClang 使用 fuzzer 参数显示编译器错误
【发布时间】:2019-08-31 04:08:29
【问题描述】:

我正在尝试使用 libFuzzer 库并通过玩具示例 [1]。

keep-learnings-MacBook-Pro:Ccodeanalysis keep_learning$ cat Fuzzme.cpp 
#include <stdint.h>
#include <stddef.h>

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  if (size > 0 && data[0] == 'H')
    if (size > 1 && data[1] == 'I')
       if (size > 2 && data[2] == '!')
       __builtin_trap();
  return 0;
}

keep-learnings-MacBook-Pro:Ccodeanalysis keep_learning$ clang++ -fsanitize=address,fuzzer Fuzzme.cpp 
ld: file not found: /Library/Developer/CommandLineTools/usr/lib/clang/10.0.1/lib/darwin/libclang_rt.fuzzer_osx.a
clang: error: linker command failed with exit code 1 (use -v to see invocation)

keep-learnings-MacBook-Pro:Ccodeanalysis keep_learning$ clang++ --version
Apple LLVM version 10.0.1 (clang-1001.0.46.4)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

快速的 Google 搜索向我展示了这个 [2],但除此之外我找不到任何有意义的信息来解决它,因此在此处发布。有人可以告诉我如何解决这个问题吗?提前致谢。

[1]http://llvm.org/docs/LibFuzzer.html#toy-example
[2]https://bugs.llvm.org/show_bug.cgi?id=39794

【问题讨论】:

    标签: clang llvm fuzzing


    【解决方案1】:

    正如您所注意到的,Apple 开发人员工具没有附带 fuzzer 运行时。因此,您要么向 Apple 人员报告此问题,要么自己从源代码构建运行时库(或两者兼而有之)。

    【讨论】:

    • 感谢@Anton 的回答。我会报告 Apple 的问题。
    【解决方案2】:

    正如 Anton 所说,Apple Developer Tools 不包含 fuzzer 库,让您从源代码编译或询问 Apple。

    事实证明,LLVM 还托管了 their downloads page 上某些版本的预编译二进制文件:

    https://releases.llvm.org/download.html.

    在该页面上,找到您的 LLVM 版本(例如 "Download LLVM 10.0.0"),然后再往前走一点,直到看到 Pre-Built Binaries。看不到您的 LLVM 版本的二进制文件?选择最近的较低版本。 OP 和我都有 clang++ 10.0.1,所以我们会选择 10.0.0

    单击 macOS 链接下载,弹出终端解压缩并复制库,您就完成了。我使用了一些环境变量(这些路径是杀手!)和cp -n 来保存现有文件。

    export CLANG_ROOT=clang+llvm-10.0.0-x86_64-apple-darwin/lib/clang/10.0.0
    export XCODE_ROOT=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.1
    
    tar xvf clang+llvm-10.0.0-x86_64-apple-darwin.tar.xz  $CLANG_ROOT/include/fuzzer $CLANG_ROOT/lib/darwin
    
    sudo cp -rn $CLANG_ROOT/include/fuzzer $XCODE_ROOT/include
    sudo cp -n $CLANG_ROOT/lib/darwin/* $XCODE_ROOT/lib/darwin
    

    我完全按照上面的方法做了,我的代码立即编译和链接。

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    猜你喜欢
    • 1970-01-01
    • 2017-10-17
    • 2014-12-31
    • 2021-12-07
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 2017-09-22
    • 2014-06-29
    相关资源
    最近更新 更多