You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用afl-gcc编译后仍提示No instrumentation detected的问题排查

解决AFL No instrumentation detected 错误的排查步骤

这个问题我之前帮不少开发者排查过,Ubuntu 18.04仓库里的AFL 2.52b版本确实容易碰到这个 instrumentation 检测失败的问题,咱们一步步来定位解决:

  • 先确认测试程序有可检测的分支逻辑
    如果你的main.c是一个空的或者完全没有分支判断的程序(比如只是打印一句话就退出),AFL可能无法识别到 instrumentation。建议换成一个带输入处理和分支逻辑的简单程序,比如:

    #include <stdio.h>
    #include <string.h>
    
    int main() {
        char buf[100];
        fread(buf, 1, sizeof(buf), stdin);
        if (strstr(buf, "foobar")) {
            printf("Found the magic string!\n");
        }
        return 0;
    }
    

    这类程序有明确的分支,能让AFL的 instrumentation 发挥作用。

  • 检查afl-gcc的编译过程是否正常
    编译时加上-v参数查看详细输出:afl-gcc -v main.c -o main,看看输出中是否包含AFL相关的编译选项(比如-instrumentation=trace-pc或者提到AFL的插桩步骤)。如果没有,说明afl-gcc没有正确调用,你可以先运行which afl-gcc确认路径是否为/usr/bin/afl-gcc,如果不是,可能需要手动指定路径或者检查环境变量。

  • 禁用PIE编译选项
    Ubuntu 18.04默认开启了PIE(位置独立可执行文件)编译,而AFL 2.52b版本对PIE的支持有问题,这是最常见的诱因。编译时显式加上-no-pie参数:

    afl-gcc main.c -o main -no-pie
    

    之后再运行afl-analyze -i foo.txt ./main试试,大概率能解决问题。

  • 检查是否存在干扰环境变量
    运行echo $AFL_SKIP_INSTRUMENTATION,如果输出非空字符串,说明这个环境变量导致AFL跳过了插桩操作,执行unset AFL_SKIP_INSTRUMENTATION取消该变量即可。

  • 验证编译后的程序是否包含AFL插桩
    用反汇编工具检查:objdump -d main | grep afl,如果能看到__afl_maybe_log、__afl_setup这类AFL相关的函数,说明插桩成功;如果没有,就得回到前面的步骤排查afl-gcc的安装或调用问题。

内容的提问来源于stack exchange,提问作者user1273684

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:37:25