Archie-это основа на основе QEMU для независимой от архитектуры оценки разломов. Это позволяет пользователю определять кампании неисправности с помощью файла конфигурации JSON и автоматически запускать всю кампанию без дополнительного пользовательского ввода. Арчи способен имитировать постоянные и временные недостатки в инструкциях, памяти и регистрах. Поведенческие данные цели собираются и хранятся в файле журнала HDF5 для последующего анализа.
Чтобы использовать эту программу Python, необходим QEMU с плагином неисправности (QEMU можно найти в QEMU, плагин разлома можно найти в папке BullPlugin).
Пример проекта, который внедряет ошибки в встроенную прошивку Tinyaes, можно найти Unter https://github.com/tibersam/archie-aes-example
[[ TOC ]]
Для инструментов QEMU и плагина разлома должны быть скомпилированы. Это может быть сделано автоматически с помощью сценария build.sh . Пожалуйста, убедитесь, что необходимые библиотеки для QEMU и библиотеки Python для Арчи установлены. Для Ubuntu сценарий сборки может установить недостающие зависимости для QEMU и Python. Он спросит вас, должен ли он установить зависимости.
./build.sh
В качестве альтернативы, инструкции по сборке приведены в следующих разделах.
Арчи был протестирован с помощью QEMU 6.0, который доступен в Archie-Qemu. Сначала убедитесь, что основные требования к QEMU установлены. См. Вики для необходимых библиотек (https://wiki.qemu.org/hosts/linux). В системах Ubuntu вы можете установить минимальные необходимые пакеты с:
sudo apt install git build-essential ninja-build libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev
Оформление GIT Submodule QEMU, которая должна оформить TCG_PLUGIN_DEV GIT. См. Сегмент кода ниже.
git submodule update --init
mkdir -p qemu/build/debug
cd qemu/build/debug
./../../configure --target-list=arm-softmmu --enable-debug --enable-plugins --disable-sdl --disable-gtk --disable-curses --disable-vnc
make -j {CPUCORENUMBER}
cd ../../../faultplugin/
make
При этом Archie-Qemu строится в Qemu/ Build/ Debug/ и плагин строится в Bullplugin/ Если вы измените каталог сборки для Archie-Qemu , измените путь в Makefile в BullPlugin/ папке для построения плагина.
Для программы Python3 необходимы следующие библиотеки
pandas (tested 0.25.3)
tables (tested 3.6.1)
python-prctl (tested 1.6.1)
numpy (tested 1.17.4)
json (tested 2.0.9), or json5 (tested 0.9.6)
Эти библиотеки Python3 могут быть установлены либо с помощью метода установки Linux-распределения, либо с помощью PIP3. JSON5 настоятельно рекомендуется, поскольку он позволяет представленным целым числам в виде шестнадцатеричных чисел.
Для PIP3 можно использовать требования. Если вы используете PIP3, убедитесь, что установите Libcap-Dev . Это требуется для Python-Prctl. См. Также https://pythonhosted.org/python-prctl/#downloading-and-nstalling
Чтобы использовать программу Python3 (controller.py), необходимы два файла конфигурации. Эти файлы в формате JSON. См. Https://www.json.org/json-en.html для получения подробной информации.
Qemuconf.json содержит объект с путем к исполняемому файлу QEMU, библиотеке плагинов, BIOS и ядру, который должен управлять QEMU. Дополнительные аргументы, которые должны быть переданы в QEMU, могут быть указаны с помощью additional_qemu_args . См. "Qemuconf.json" для действительного файла JSON с Paths. Пожалуйста, отрегулируйте пути к вашей системе. Миниблинг папки содержит демо -бинар для первоначальных экспериментов. Чтобы проверить его, измените путь ядра на "kernel" : "miniblink/miniblink.bin ». Если следует использовать другую архитектуру, измените линию "machine" : "stm32f0discovery" , заменив STM32F0Discovery с соответствующим именем в QEMU -M ?
Bull.json содержит описание ошибок. Он содержит объект, который влечет за собой объект начальной точки, объект конечной точки, объект Memdump и массив ошибок. Пожалуйста, посмотрите описания в ошибке-readme.md, чтобы увидеть, как построить этот объект JSON. Пример настройки для нескольких экспериментов можно найти в bull.json
Вывод программы будет храниться в файле HDF5. Описание того, как интерпретировать содержимое файла, см. HDF5-readme.md .
Чтобы запустить программу Python3, тип:
python3 controller.py --debug --fault fault.json --qemu qemuconf.json output.hdf5
Замените Bull.json и Qemuconf.json на соответствующие файлы.
Флаг -debug создает файл журнала для каждого эксперимента. Имя файла журнала имеет следующий формат: log_experiment-id.txt , например, log_4.txt для эксперимента с ID 4.
Чтобы получить дополнительную информацию о входных параметрах, тип:
python3 controller.py --help
Можно подключиться к запущению экземпляра QEMU с GDB. Чтобы использовать эту функцию в рамках и наблюдать заведенные недостатки, можно установить флаг -gdb . Арчи запустит внутренний процесс QEMU с включенного GDB и остановится при запуске моделируемой системы. Чтобы подключиться к QEMU из GDB, используйте порт 1234. Он также заставит структуру появляться только один работник, и он пройдет все недостатки, настроенные в Bull.json . Если требуется одна конкретная ошибка, файл JSON должен быть отредактирован, чтобы содержать эту конкретную ошибку.
python3 controller.py --gdb --fault fault.json --qemu qemuconf.json output.hdf5
Для подключения от GDB к использованию сеанса QEMU
targ rem:localhost:1234
Qemu будет ждать Unil, сессия GDB прилагается. Режим отладки подходит только для анализа низкого количества неисправностей. Пройти через большое количество разломов громоздко. Это следует учитывать при настройке файлов JSON.