Сборники трудов ИСП РАН


Применение статической бинарной инструментации с целью проведения динамического анализа программ для платформы ARM

М.К. Ермаков (ИСП РАН, Москва)
С.П. Вартанов (ИСП РАН, Москва)

Аннотация

В настоящее время динамический анализ программ активно используется для контроля качества программных продуктов, задач профилирования и поиска уязвимостей. В данной работе рассматриваются особенности одного из методов обработки кода программы в рамках динамического анализа — статической инструментации ис-полняемого кода, подразумевающей предварительное изменение исполняемых файлов или файлов динамических библиотек. Предлагается метод статической инструментации, позволяющий обрабатывать файлы исполняемого кода в формате ELF для архитектуры ARM.
Предлагаемый метод включает возможности настройки инструментации с помощью пользовательских спецификаций, задающих точки внедрения кода и необходимый внедряемый код. В статье описываются основные шаги метода: обработка пользова-тельских спецификаций, разбор кода программы и создание блоков инструментацион-ного кода по числу точек инструментации, внедрение блоков инструментационного кода в программу, модификация кода программы с целью осуществления передачи управления на инструментационный код во время выполнения программы.
Модификация файлов исполняемого кода программы проводится в рамках ограничений, накладываемых спецификациями формата ARM ELF — распределение кода, данных и управляющей информации по секциям и сегментам, обрабатываемым динамическим загрузчиком операционной системы, и дополнительными внешними и внутренними зависимостями между секциями, порождаемыми во время генерации исполняемого кода. Непосредственный метод инструментации включает замену блоков инструкций в точках инструментации на инструкции безусловного перехода на соответствующий блок инструментационного кода и перенос заменённых инструкций в блок инструментационного кода для сохранения исходной функциональности программы. Для поддержания корректности работы в блок инструментационного кода также добавляются инструкции сохранения и восстановления состояния и инструкция безусловного перехода для возврата управления после выполнения инструментационного кода. Дополнительно в статье описываются модификации, направленные на добавление информации о внешних символах, используемых в инструментационном коде. Данные модификации необходимы для поддержания корректности работы динамического загрузчика на этапе разрешения внешних зависимостей.
В статье приведены результаты практических экспериментов по применению разрабо-танной программной системы, реализующей предлагаемый метод. На примере задачи подсчёта базовых блоков разработанная система показала более высокую производи-тельность по сравнению с распространённым средством инструментации Valgrind.

Ключевые слова

статическая бинарная инструментация; динамический анализ; архитектура ARM; формат ELF; Android

Издание

Труды Института системного программирования РАН, том 27, вып. 1, 2015, стр. 5-24.

ISSN 2220-6426 (Online), ISSN 2079-8156 (Print).

DOI: 10.15514/ISPRAS-2015-27(1)-1

Полный текст статьи в формате pdf Вернуться к содержанию тома