
digraph G {
  graph [
    bgcolor="white", pad="0.28", nodesep="0.38", ranksep="0.58",
    fontname="WenQuanYi Zen Hei", fontcolor="#17212B", fontsize=24,
    labelloc="t", labeljust="l"
  ];
  node [
    shape=box, style="rounded,filled", margin="0.18,0.12",
    fontname="WenQuanYi Zen Hei", fontcolor="#17212B", fontsize=12,
    color="#CBD5E1", penwidth=1.3, fillcolor="#F8FAFC"
  ];
  edge [
    fontname="WenQuanYi Zen Hei", fontcolor="#64748B", fontsize=10,
    color="#64748B", penwidth=1.5, arrowsize=0.75
  ];

  label="图 2-3  同一源码的二进制变体与技术作用域";
  rankdir=LR;

  src [label="同一份目标源码", fillcolor="#FEF3C7", color="#D97706"];
  concolic [label="*_symcc / *_symsan\nsymcc -O2 / ko-clang -O1", fillcolor="#CCFBF1", color="#0F766E"];
  afl [label="*_afl\nAFL PCGUARD", fillcolor="#DBEAFE", color="#2563EB"];
  laf [label="*_afl_laf\nAFL_LLVM_LAF_ALL=1", fillcolor="#DBEAFE", color="#2563EB"];
  ctx [label="*_afl_ctx / *_ngram4\nCTX / NGRAM", fillcolor="#DBEAFE", color="#2563EB"];
  cmplog [label="*-cmplog\nAFL_LLVM_CMPLOG=1", fillcolor="#DBEAFE", color="#2563EB"];
  cov [label="*-cov\ngcc --coverage", fillcolor="#F1F5F9"];
  solver [label="SymCC/SymSan 约束形态\n由该二进制的 LLVM 优化结果决定", fillcolor="#CCFBF1", color="#0F766E"];
  fuzzer [label="AFL 反馈与比较引导\n随机变异侧", fillcolor="#DBEAFE", color="#2563EB"];
  measure [label="离线覆盖率测量", fillcolor="#F1F5F9"];

  src -> {concolic afl laf ctx cmplog cov};
  concolic -> solver [penwidth=2.4, color="#0F766E"];
  {afl laf ctx cmplog} -> fuzzer [color="#2563EB"];
  cov -> measure;
  orth [shape=note, label="正交关系\nLAF / CmpLog / CTX / NGRAM\n不改变 concolic 看到的约束", fillcolor="#FEE2E2", color="#B91C1C"];
  fuzzer -> orth [style=dotted, arrowhead=none];
  solver -> orth [style=dotted, arrowhead=none];

}
