Институт системного программирования им. В.П. Иванникова РАН


Инструмент для статической инструментации кода программ для платформы ARM

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

Принимая в качестве входных данных исполняемую программу или библиотеку и файл с описанием точек инструментации (ближайший аналог — срез в аспектно-ориентированном программирования) и библиотеку с инструментирующим кодом, который может быть написан как на языках высокого уровня, так и на ассемблере ARM, инструмент проводит внедрение инструментирующего кода в точках инструментации, предоставляя возможности сохранения целостности формата ARM ELF и исходного поведения программы.

Таким образом предоставляется возможность исполнения инструментирующего кода в процессе исполнения целевой программы. Варьируя содержание инструментирующего кода и спецификации точек инструментации можно получать различную информацию об исполняемой программе, такую как:

  • состояние регистров, стека и оперативной памяти.
  • параметры отдельных инструкций программы.
  • состояние потоков исполняемой программы.
  • записывать журнал работы программы с целью профилирования производительности.

Применение техники статической инструментации позволяет значительно снизить накладные расходы на производительность инструментированной программы в процессе её анализа по сравнению с средами динамической инструментации программ. Ближайшие аналоги PEBIL и Dyninst, реализованы для платформ x86/x86_64 и, соответственно, не могут быть применены для платформы ARM. Большая группа инструментов (Valgrind, DynamoRIO, Dyninst и Pin) предоставляют возможности динамической инструментации, требующей большего объёма ресурсов в процессе анализа программы, таких как виртуальная память и накладные расходы по времени.

Инструмент был применен для нескольких частных задач по исследованию производительности подсистем, ответственных за отображение пользовательского интерфейса и производительности компонента Binder, ответственного за межпроцессное взаимодействие, в рамках системы Android.

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

Разработчик/участник

Системное программирование

Перейти к списку всех технологий