Preview

Труды Института системного программирования РАН

Расширенный поиск

Применение статической инструментации байт-кода языка Java для динамического анализа программ

https://doi.org/10.15514/ISPRAS-2015-27(1)-2

Аннотация

В статье рассматривается задача проведения динамического анализа программ на языке Java при условии, что исходный код программы отсутствует, а запуск программы может происходить на виртуальных машинах, которые интерпретируют байт-код формата, отличного от формата Java Virtual Machine. Приводится обзор методов инструментации и особенностей инструментации байт-кода языка Java для проведения итеративного динамического анализа с целью покрытия наибольшего числа путей выполнения программы. Для такого рода анализа используется построение входных данных для покрытия ранее не пройденных базовых блоков при помощи отслеживания потока помеченных данных, построения ограничений пути и проверки их выполнимости. В качестве метода решения поставленной задачи рассматривается применение статической инструментации байт-кода. Основными достоинствами подобного подхода являются увеличение скорости анализа (за счёт того, что инструментация проводится один раз, до начала работы итеративного механизма) и возможность конвертировать инструментированный байт-код в другие форматы для запуска на нестандартных виртуальных машинах (например, DEX для виртуальной машины Dalvik). В статье также рассматривается реализация предложенных методов в инструменте Coffee Machine. Инструментация осуществляется с помощью BCEL (библиотеки для манипулирования байт-кодом) и разделяется на три этапа: определение классов и методов для инструментации, инструментация на уровне классов и методов, инструментация на уровне отдельных инструкций. На основе Coffee Machine показано, как статическая инструментация может быть применена для печати информации о выполнившихся инструкциях, отслеживания помеченных данных, построения ограничений пути выполнения, а также для построения трассы синхронизационных событий. В качестве одного из ограничений предложенного подхода рассматривается невозможность доступа к динамическим данным в ходе выполнения программы и некоторым методам системных классов. Эти ограничения могут быть сняты за счёт увеличения накладных расходов на повторную инструментацию анализируемой программы и написание методов, симулирующих работу требуемых системных методов. Для использования методов-симуляторов используется специальный механизм, который сопоставляет их имена и имена реальных методов в процессе работы программы и производит дублирование вершины стека для передачи фактических параметров методу-симулятору.

Об авторах

С. П. Вартанов
Институт системного программирования РАН, г. Москва
Россия
Институт системного программирования РАН, 109004, Россия, г. Москва, ул. А. Солженицына, дом 25


М. К. Ермаков
Институт системного программирования РАН, г. Москва
Россия
Институт системного программирования РАН, 109004, Россия, г. Москва, ул. А. Солженицына, дом 25


Список литературы

1. И. К. Исаев, Д. В. Сидоров. Применение динамического анализа для генерации входных данных, демонстрирующих критические ошибки и уязвимости в программах. Программирование, 2010, № 4, с. 1–16

2. С. П. Вартанов, А. Ю. Герасимов. Применение динамического анализа для поиска дефектов в программах на языке Java. Стр. 9–28. Труды Института системного программирования РАН, том 25, 2013 г. ISSN 2220 6426 (Online), ISSN 2079-8156 (Print)

3. С. П. Вартанов, А. Ю. Герасимов. Динамический анализ программ с целью поиска ошибок и уязвимостей при помощи целенаправленной генерации входных данных. Стр. 375–394. Труды Института системного программирования РАН, том 26, 2014 г. Выпуск 1. ISSN 2220 6426 (Online), ISSN 2079 8156 (Print)

4. N. Nethercote, J. Seward. Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation

5. E. Bruneton ASM 4.0. A Java bytecode engineering library, 2011 [PDF] (http://download.forge.objectweb.org/asm/asm4-guide.pdf)

6. Apache Commons Byte Code Engineering Library [HTML] (http://commons.apache.org/bcel)

7. V. Ganesh, D. L. Dill, A Decision Procedure for Bit-Vectors and Arrays // In Proceeding of Computer Aided Verification. 2007. P. 524–536.

8. K. Serebryany, T. Iskhodzhanov. ThreadSanitizer-data race detection in practice


Рецензия

Для цитирования:


Вартанов С.П., Ермаков М.К. Применение статической инструментации байт-кода языка Java для динамического анализа программ. Труды Института системного программирования РАН. 2015;27(1):25-38. https://doi.org/10.15514/ISPRAS-2015-27(1)-2

For citation:


Vartanov S.P., Ermakov M.K. Applying Java bytecode static instrumentation for software dynamic analysis. Proceedings of the Institute for System Programming of the RAS (Proceedings of ISP RAS). 2015;27(1):25-38. (In Russ.) https://doi.org/10.15514/ISPRAS-2015-27(1)-2



Creative Commons License
Контент доступен под лицензией Creative Commons Attribution 4.0 License.


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