Skip to content

Commit a7dcffa

Browse files
committed
docs: Update README and add workflow diagram for FUTAG
1 parent dacd450 commit a7dcffa

File tree

3 files changed

+163
-3
lines changed

3 files changed

+163
-3
lines changed

README.en.md

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,61 @@ The collected information is stored as a knowledge base about the tested library
3232
When usage contexts are available, FUTAG searches for function calls, builds dependencies between the discovered calls, and constructs call contexts.
3333

3434
The workflow of FUTAG is illustrated in the following figure:
35-
![](futag-work.png)
35+
36+
```mermaid
37+
graph TD
38+
subgraph Inputs
39+
A["Library Source Code C/C++"]
40+
B["Consumer Source Code - optional"]
41+
C["Natch JSON - optional"]
42+
end
43+
44+
subgraph "Layer 3: Build Infrastructure"
45+
D["custom-llvm / build.sh — Download and patch LLVM 14/18/19"]
46+
end
47+
48+
D -->|"futag-llvm toolchain"| E
49+
50+
subgraph "Layer 1: C++ Clang Checkers"
51+
E["scan-build + FutagAnalyzer — Extract functions, types, call contexts, includes"]
52+
F["scan-build + FutagConsumerAnalyzer — Extract usage contexts from consumer programs"]
53+
end
54+
55+
A --> E
56+
B --> F
57+
E -->|"JSON analysis files"| G
58+
F -->|"JSON context files"| H
59+
60+
subgraph "Layer 2: Python Orchestration"
61+
G["Builder.analyze — futag-analysis-result.json"]
62+
H["ConsumerBuilder.analyze — futag-contexts.json"]
63+
64+
G --> I
65+
H --> I
66+
C --> I
67+
68+
subgraph "Generator Backends"
69+
I{"Choose Generator"}
70+
I --> J1["Generator - memcpy from buffer"]
71+
I --> J2["FuzzDataProviderGenerator - type-safe FDP API"]
72+
I --> J3["BlobStamperGenerator"]
73+
I --> J4["ContextGenerator - consumer contexts"]
74+
I --> J5["NatchGenerator - crash traces"]
75+
end
76+
77+
J1 & J2 & J3 & J4 & J5 --> K["gen_targets and compile_targets"]
78+
K --> L["Fuzzer / NatchFuzzer"]
79+
end
80+
81+
subgraph Outputs
82+
M["Fuzz Drivers"]
83+
N["Crash Logs"]
84+
O["Coverage Reports"]
85+
P["SVRES XML"]
86+
end
87+
88+
L --> M & N & O & P
89+
```
3690

3791
This project is built on LLVM with Clang static analysis and is distributed under the "GPL v3" license (see: https://llvm.org/docs/DeveloperPolicy.html#new-llvm-project-license-framework).
3892

README.md

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,62 @@ FUTAG использует, в качестве внешнего интерф
3232

3333
В Futag так же реализована возможность получения контекстов использования тестируемой библиотеки от инструмента для определения поверхности атаки [Natch](https://github.com/ispras/natch).
3434

35-
Работа Futag иллюстрируется на следующем рисунке:
36-
![](futag-work.png)
35+
Работа Futag иллюстрируется на следующей диаграмме:
36+
37+
```mermaid
38+
graph TD
39+
subgraph "Входные данные"
40+
A["Исходный код библиотеки C/C++"]
41+
B["Исходный код потребителя - опционально"]
42+
C["JSON от Natch - опционально"]
43+
end
44+
45+
subgraph "Уровень 3: Инфраструктура сборки"
46+
D["custom-llvm / build.sh — Загрузка и патч LLVM 14/18/19"]
47+
end
48+
49+
D -->|"инструментарий futag-llvm"| E
50+
51+
subgraph "Уровень 1: C++ Clang чекеры"
52+
E["scan-build + FutagAnalyzer — Извлечение функций, типов, контекстов вызовов"]
53+
F["scan-build + FutagConsumerAnalyzer — Извлечение контекстов использования"]
54+
end
55+
56+
A --> E
57+
B --> F
58+
E -->|"JSON файлы анализа"| G
59+
F -->|"JSON файлы контекстов"| H
60+
61+
subgraph "Уровень 2: Python оркестрация"
62+
G["Builder.analyze — futag-analysis-result.json"]
63+
H["ConsumerBuilder.analyze — futag-contexts.json"]
64+
65+
G --> I
66+
H --> I
67+
C --> I
68+
69+
subgraph "Бэкенды генераторов"
70+
I{"Выбор генератора"}
71+
I --> J1["Generator - memcpy из буфера"]
72+
I --> J2["FuzzDataProviderGenerator - типобезопасный FDP API"]
73+
I --> J3["BlobStamperGenerator"]
74+
I --> J4["ContextGenerator - контексты потребителя"]
75+
I --> J5["NatchGenerator - трассы крашей"]
76+
end
77+
78+
J1 & J2 & J3 & J4 & J5 --> K["gen_targets и compile_targets"]
79+
K --> L["Fuzzer / NatchFuzzer"]
80+
end
81+
82+
subgraph "Результаты"
83+
M["Фаззинг-обёртки"]
84+
N["Логи крашей"]
85+
O["Отчёты покрытия"]
86+
P["SVRES XML"]
87+
end
88+
89+
L --> M & N & O & P
90+
```
3791

3892
Данный проект основан на LLVM со статическим анализом Clang и распространяется под лицензией ["GPL v3 license"](https://llvm.org/docs/DeveloperPolicy.html#new-llvm-project-license-framework)
3993

futag-work.mmd

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
graph TD
2+
subgraph Inputs
3+
A["Library Source Code C/C++"]
4+
B["Consumer Source Code - optional"]
5+
C["Natch JSON - optional"]
6+
end
7+
8+
subgraph "Layer 3: Build Infrastructure"
9+
D["custom-llvm / build.sh — Download and patch LLVM 14/18/19"]
10+
end
11+
12+
D -->|"futag-llvm toolchain"| E
13+
14+
subgraph "Layer 1: C++ Clang Checkers"
15+
E["scan-build + FutagAnalyzer — Extract functions, types, call contexts, includes"]
16+
F["scan-build + FutagConsumerAnalyzer — Extract usage contexts from consumer programs"]
17+
end
18+
19+
A --> E
20+
B --> F
21+
E -->|"JSON analysis files"| G
22+
F -->|"JSON context files"| H
23+
24+
subgraph "Layer 2: Python Orchestration"
25+
G["Builder.analyze — futag-analysis-result.json"]
26+
H["ConsumerBuilder.analyze — futag-contexts.json"]
27+
28+
G --> I
29+
H --> I
30+
C --> I
31+
32+
subgraph "Generator Backends"
33+
I{"Choose Generator"}
34+
I --> J1["Generator - memcpy from buffer"]
35+
I --> J2["FuzzDataProviderGenerator - type-safe FDP API"]
36+
I --> J3["BlobStamperGenerator"]
37+
I --> J4["ContextGenerator - consumer contexts"]
38+
I --> J5["NatchGenerator - crash traces"]
39+
end
40+
41+
J1 & J2 & J3 & J4 & J5 --> K["gen_targets and compile_targets"]
42+
K --> L["Fuzzer / NatchFuzzer"]
43+
end
44+
45+
subgraph Outputs
46+
M["Fuzz Drivers"]
47+
N["Crash Logs"]
48+
O["Coverage Reports"]
49+
P["SVRES XML"]
50+
end
51+
52+
L --> M & N & O & P

0 commit comments

Comments
 (0)