Spec-Zone.ru › OCaml
☰Инструменты OCaml
  • Партиционная компиляция (ocamlc)
  • Система верхнего уровня или REPL (ocaml)
  • Система выполнения (ocamlrun)
  • Компиляция в машинный код (ocamlopt)
  • Генераторы лексического и синтаксического анализа (ocamllex, ocamlyacc)
  • Генератор зависимостей (ocamldep)
  • Генератор документации (ocamldoc)
  • Отладчик (ocamldebug)
  • Профилирование (ocamlprof)
  • Интерфейс C с OCaml
  • Оптимизация с использованием Flambda
  • Мультирование с помощью afl-fuzz
  • Отслеживание выполнения с помощью событий выполнения
  • Преобразование программы «Хвост Модуль Конструктор»
  • Выявление гонок данных во время выполнения с помощью ThreadSanitizer

Глава 24 Мультирование с помощью afl-fuzz

1 Обзор

American fuzzy lop («afl-fuzz») — это мультирователь, инструмент для тестирования программ, предоставляя случайные входные данные, ища те входные данные, которые приводят к аварийному завершению программы.

В отличие от большинства мультирователей, afl-fuzz наблюдает за внутренним поведением тестируемой программы и корректирует генерируемые тестовые примеры для запуска неисследованных путей выполнения. В результате тестовые примеры, генерируемые afl-fuzz, охватывают больше возможных состояний тестируемой программы, чем другие мультирователи.

Для этого необходимо инструментировать тестируемые программы для взаимодействия с afl-fuzz. Компилятор машинного кода «ocamlopt» может генерировать такую ​​инструментацию, позволяя использовать afl-fuzz с программами, написанными на OCaml.

Дополнительную информацию об afl-fuzz см. на веб-сайте по адресу http://lcamtuf.coredump.cx/afl/.

2 Генерация инструментации

Инструментация, необходимая для afl-fuzz, не генерируется по умолчанию и должна быть явно включена, передав параметр -afl-instrument инструменту ocamlopt.

Для мультации большой системы без изменения средств сборки скрипт конфигурации OCaml также принимает параметр afl-instrument. Если OCaml сконфигурирован с afl-instrument, все программы, скомпилированные с помощью ocamlopt, будут инструментированы.

2.1 Расширенные параметры

В редких случаях бывает полезно контролировать количество генерируемой инструментации. Передавая аргумент -afl-inst-ratio N инструменту ocamlopt со значением N меньше 100, инструментация может быть сгенерирована только для N% ветвей. (См. документацию afl-fuzz по параметру AFL_INST_RATIO для точного эффекта этого параметра).

3 Пример

В качестве примера мы используем мультирование следующей программы, readline.ml:

let _ =
  let s = read_line () in
  match Array.to_list (Array.init (String.length s) (String.get s)) with
    ['s'; 'e'; 'c'; 'r'; 'e'; 't'; ' '; 'c'; 'o'; 'd'; 'e'] -> failwith "uh oh"
  | _ -> ()

Существует один вход (строка «секретный код»), который вызывает сбой этой программы, но найти его с помощью случайного поиска невозможно.

Вместо этого мы компилируем с включенной инструментацией afl-fuzz:

ocamlopt -afl-instrument readline.ml -o readline

Затем мы запускаем программу с помощью afl-fuzz:

mkdir input
echo asdf > input/testcase
mkdir output
afl-fuzz -m none -i input -o output ./readline

Просматривая вывод инструментации, мультирователь быстро находит входные данные, вызывающие сбой.

Примечание. Для мультирования программы OCaml с помощью afl-fuzz требуется передать параметр -m none для отключения стандартного ограничения виртуальной памяти afl-fuzz в 50 МБ.

« Оптимизация с использованием FlambdaОтслеживание выполнения с помощью событий выполнения »
Авторское право © 2024 Institut National de Recherche en Informatique et en Automatique

© 1995-2024 INRIA.
https://ocaml.org/manual/5.2/afl-fuzz.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API