微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 afl-g++ 不能编译 ImageMagick?

如何解决为什么 afl-g++ 不能编译 ImageMagick?

我正在尝试使用工具 afl (link) 进行一些模糊测试。我下载了 ImageMagick as described in the docs 的源代码,但是当我尝试使用 afl 编译器运行 ./configure 时出现错误

$ CC=/usr/local/bin/afl-gcc CXX=/usr/local/bin/afl-g++ ./configure --disable-shared
[...]
checking whether we are using the GNU C++ compiler... no
checking whether /usr/local/bin/afl-g++ accepts -g... no
checking dependency style of /usr/local/bin/afl-g++... none
checking how to run the C++ preprocessor... /lib/cpp
configure: error: in `/home/ubuntu/ImageMagick-7.0.10':
configure: error: C++ preprocessor "/lib/cpp" fails sanity check
See `config.log' for more details

如果我尝试使用认的 C++ 编译器,一切似乎都很好:

$ CC=/usr/local/bin/afl-gcc ./configure --disable-shared #this works

如何让编译器运行?

更新

查看 config.log 内部,问题似乎与 ImageMagick 无法检查 afl-g++ 版本有关:

configure:15015: checking for C++ compiler version
configure:15024: /usr/local/bin/afl-g++ --version >&5
)B[?25h[0m[1;91m
[-] PROGRAM ABORT : [1;97mOops,Failed to execute 'g++' - check your PATH[1;91m
         Location : [0mmain(),afl-gcc.c:334

configure:15035: $? = 1

无论如何,afl-g++ 似乎有效:

$ afl-g++
afl-cc 2.52b by <lcamtuf@google.com>

This is a helper application for afl-fuzz. It serves as a drop-in replacement
for gcc or clang,letting you recompile third-party code with the required
runtime instrumentation. A common use pattern would be one of the following:

  CC=/usr/local/bin/afl-gcc ./configure
  CXX=/usr/local/bin/afl-g++ ./configure

You can specify custom next-stage toolchain via AFL_CC,AFL_CXX,and AFL_AS.
Setting AFL_HARDEN enables hardening optimizations in the compiled code.

但是 afl-g++ -v 报告错误

$ afl-g++ -v
afl-cc 2.52b by <lcamtuf@google.com>

[-] PROGRAM ABORT : Oops,Failed to execute 'g++' - check your PATH
         Location : main(),afl-gcc.c:334

解决方法

您是否仅限于使用 afl 的 gcc?如果没有,请使用他们的 clang 包装器:

我可以这样开始 AFL:

git clone https://github.com/ImageMagick/ImageMagick.git ImageMagick-7.0.10
cd ImageMagick-7.0.10

CC=afl-clang CXX=afl-clang++ ./configure --disable-shared
make

#prepare AFL environment
AFL_SKIP_CPU_FREQ=1 AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1 afl-fuzz -i ./in -o ./out -- ./utilities/magick @@ /dev/null

显然,像这样开始 AFL 很少有意义 - 我只是说我能够以这种方式快速开始。

,

事实证明,问题是我的系统中没有 g++。可能是因为我安装了最小版本的 Ubuntu 20.04LTS。我用

安装了g++
sudo apt install g++

现在似乎一切正常。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。