mirror of
https://github.com/qilingframework/qiling.git
synced 2026-10-12 02:21:40 +00:00
3.7 KiB
3.7 KiB
Extensions — optional tooling on top of the core
Goal
House everything that builds on the public Qiling API without being required
by it: fuzzing (AFL), code-coverage and execution-trace writers, a heap
sanitizer, radare2 and IDA Pro integration, fake stdio pipes, and JSON run
reports. Mature released infrastructure; maturity-based status.
Status
done — history/coverage tracker tested in CI; AFL and r2 integrations need
optional extras (fuzz, RE); the IDA plugin needs IDA Pro (untested in CI).
Code Structure
| File | Role |
|---|---|
qiling/extensions/afl/ |
ql_afl_fuzz (unicornafl bridge) + QlFuzzer harness base class |
qiling/extensions/coverage/ |
collect_coverage context manager; writers in formats/ (drcov, drcov_exact, ezcov, history) |
qiling/extensions/tracing/ |
Tenet-style execution trace writers (formats/) |
qiling/extensions/trace.py |
Disassembly tracing: full trace or ring-buffer history |
qiling/extensions/sanitizers/heap.py |
Canary-based heap sanitizer (UAF/OOB detection) |
qiling/extensions/r2/r2.py |
radare2 (r2libr) integration: sections/symbols/functions/xrefs of the loaded target |
qiling/extensions/idaplugin/qilingida.py |
IDA Pro plugin driving Qiling emulation from IDA |
qiling/extensions/pipe.py |
Fake stdio streams for hijacking emulated I/O (fuzzing staple) |
qiling/extensions/report/report.py |
generate_report(ql): JSON summary of a run |
qiling/extensions/multitask.py |
Cooperative-multitask Unicorn wrapper (documented in os-baremetal.md) |
qiling/extensions/mcu/ |
Board/chip definitions (documented in hw.md) |
qiling/extensions/winsdkapi.py |
Windows API signature decorator glue |
Key Types and Entry Points
qiling/extensions/afl/afl.py:21/:87-ql_afl_fuzz/ql_afl_fuzz_custom- hand control to AFL++ via unicornafl; harness baseQlFuzzer(qiling/extensions/afl/qlfuzzer.py:14).qiling/extensions/coverage/utils.py:48-collect_coverage(ql, name, file)- context manager writing e.g. drcov files (used byqltool --coverage-file).qiling/extensions/trace.py:145/:180-enable_full_trace/enable_history_trace- disassembly tracing viahook_code.qiling/extensions/sanitizers/heap.py:16-QlSanitizedMemoryHeap- drop-in replacement forql.os.heapwith canaries and free-list checks.qiling/extensions/r2/r2.py:135-R2(ql)- rzpipe-backed analysis of the loaded image.qiling/extensions/pipe.py-SimpleInStream/SimpleOutStream(:62/:69) - assigned toql.os.stdin/stdout.qiling/extensions/report/report.py:56-generate_report(ql)- JSON report (used byqltool --json).
Interactions
- Everything here consumes only the public API of core.md (hooks, mem, regs) and os-base.md (heap, stdio, syscall/API overrides).
- The heap sanitizer wraps
QlMemoryHeapfrom os-base.md (demo:examples/uefi_sanitized_heap.pywith os-windows.md UEFI). - Fuzzing harnesses live in
examples/fuzzing/and pair AFL withpipe.pyandset_syscallfrom os-posix.md. qltoolwires in coverage and report generation (cli.md).
How to Test
cd tests && python3 test_history.py # pass = unittest "OK", exit 0
- r2 integration (needs
pip install qiling[RE]):cd tests && python3 test_r2.py. - AFL (needs
pip install qiling[fuzz]+ AFL++): run a harness fromexamples/fuzzing/linux_x8664/.
Open Gaps / Roadmap
afl/andr2/depend on optional extras not installed by default; the IDA plugin cannot be CI-tested (requires an IDA Pro license).- Two overlapping trace mechanisms exist (
trace.pyandtracing/); no unified interface.