title-icon
Яндекс.Метрика

DynInst


DynInst — мультиплатформенная библиотека патчинга исполнимого кода, разработанная в Университете Висконсина-Мэдисона и Университете Мэриленда, Колледж-Парк. Она может быть весьма полезной при разработке инструментов измерения производительности, отладчиков и симуляторов.

История

Работа над API началась в первой половине 90-х, а версия 1.0 вышла 23 сентября 1997 года. Затем выходили регулярные обновления, и последним на данный момент релизом является версия 6.0, выпущенная 2 июля 2009 года. На данный момент реализована поддержка двух основных операционных систем — Linux и Microsoft Windows, а также поддержка нескольких наиболее распространенных микроархитектур процессоров: Power/PowerPC (AIX), SPARC (Solaris), x86 (Linux и Windows NT/2K/XP), а также IA-64 (Linux)

Обзор

По своей сути, DynInst — это интерфейс программирования приложений (API), реализованный в виде библиотеки. API был разработан в рамках проекта Paradyn, целью которого являлось создание эффективного метода динамической инструментации без сильной модификации исполнимых файлов. Помимо самого DynInst API, в комплекте поставляются ещё несколько наборов API: SymtabAPI, StackwalkerAPI, InstructionAPI и DepgraphAPI (они также реализованы в виде библиотеки).

Обычный цикл разработки программы состоит из создания (правки) исходного кода, компиляции и запуска получившегося бинарного файла (двоичного кода). Иногда бывает гораздо удобнее влиять на исполнение программы без внесения изменений в исходный код, и тем самым обходясь без его перекомпиляции. Собственно, данный API и решает такую задачу. Он обеспечивает поддержку вставки кода в уже работающую программу. Целью данного API было обеспечение машинно-независимого интерфейса, позволявшего инструментам для разработки кода вносить изменения в код вне зависимости от платформы или архитектуры процессора.

Поддержка и дальнейшее развитие

В рамках поддержки и развития данного проекта в Университете Мэриленда регулярно проходят различные форумы, собрания, объявляются недели, посвященные проекту (например, в апреле 2009 года проходила Dyninst/Paradyn Week 2009). Кроме того, постоянно ведется тестирование API на предмет нахождения ошибок, а результаты публикуются на официальном сайте проекта.