Научная статья на тему 'Автоматический поиск локальных переменных и аргументов процедуры в исполняемом коде программы при верификации вычислительных процессов'

Автоматический поиск локальных переменных и аргументов процедуры в исполняемом коде программы при верификации вычислительных процессов Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
151
54
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ВЫЧИСЛИТЕЛЬНЫЙ ПРОЦЕСС / COMPUTATIONAL PROCESS / ВЕРИФИКАЦИЯ / VERIFICATION / ИСПОЛНИМЫЙ МОДУЛЬ / EXECUTABLE MODULE / ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ И АРГУМЕНТЫ ПРОЦЕДУР / LOCAL VARIABLES AND ARGUMENTS OF PROCEDURES

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Гедич Андрей Алексеевич, Зыков Анатолий Геннадьевич, Лаздин Артур Вячеславович

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Гедич Андрей Алексеевич, Зыков Анатолий Геннадьевич, Лаздин Артур Вячеславович

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

AUTOMATIC SEARCH OF LOCAL VARIABLES AND ARGUMENTS OF PROCEDURES IN EXECUTABLE CODE DURING COMPUTATIONAL PROCESS VERIFICATION STAGE

General diagram of computational process engineering and analysis based on semi-graphical model is presented. Analysis of executable code is studied. Brief review of existing algorithms for restoring information about objects on stack is given. Some features, advantages and disadvantages of these algorithms are listed. Alternative approach that combines basic concepts described earlier, new solutions of existing problems and simplicity is described.

Текст научной работы на тему «Автоматический поиск локальных переменных и аргументов процедуры в исполняемом коде программы при верификации вычислительных процессов»

Работа выполнена в рамках программы стратегического развития государственных образовательных учреждений высшего профессионального образования, заявка № 2011-ПР-054, по теме «Методы теории категорий и алгебраической топологии для исследования параллельных систем».

Литература

1. Husainov A.A. On the homology of small categories and asynchronous transition systems // Homology Homotopy Appl. - 2004. -V. 6. - № 1. - P. 439-471 [Электронный ресурс]. - Режим доступа: http://projecteuclid.org/euclid.hha/1139839561, свободный. Яз. англ. (дата обращения 11.07.2013).

2. Goubault E. The Geometry of Concurrency: Thesis Doct. Phylosophy (Mathematics). - Ecole Normale Supérieure, 1995. - 349 p.

3. Gaucher P. About the globular homology of higher dimensional automata // Topol. Geom. Differ. - 2002. -V. 43. - № 2. - P. 107-156.

4. Goubault E., Haucourt E., Krishnan S. Covering space theory for directed topology // Theory Appl. Categ. -2009. - V. 22. - № 9. - P. 252-268.

5. Husainov A.A. The Homology of Partial Monoid Actions and Petri Nets // Appl. Categor. Struct. - 2012. -P. 1-29. DOI: 10. 1007/s 10485-012-9280-9 [Электронный ресурс]. - Режим доступа: https://www.springer.com/pay+per+view?SGWID=0-1740713-3131-0-0, платный. Яз. англ. (дата обращения 11.07.2013).

6. Тришина Т.А. Программное обеспечение для исследования групп гомологий сетей Петри. Магистерская диссертация. - Комсомольск-на-Амуре: ФГБ ОУ ВПО «КнАГТУ», 2013. - 91 с.

7. Хусаинов А.А. Математическая модель задачи о читателях и писателях. Информационные технологии и высокопроизводительные вычисления. Материалы международной науч. практ. конф., Хабаровск, 4-6 октября 2011 г. - Хабаровск: Изд-во Тихоокеан. гос. ун-та, 2011. - C. 327-332.

8. Хусаинов А.А., Бушмелева Е.С. Гомологии асинхронных систем // Актуальные проблемы математики, физики, информатики в вузе и школе: материалы Всероссийской региональной научно-практической конференции, Комсомольск-на-Амуре, 2012. - Комсомольск-на-Амуре: Изд-во АмГП-ГУ, 2012. - С. 24-31.

9. Хусаинов А.А., Бушмелева Е.С., Тришина Т.А. Группы гомологий сети Петри конвейера // Моделирование и анализ информационных систем. - 2013. - № 2. - С. 92-103.

Тришина Таисия Александровна - Комсомольский-на-Амуре государственный технический университет,

магистр, стажер-исследователь, taisafin3@mail.ru

УДК 681.142.2

АВТОМАТИЧЕСКИЙ ПОИСК ЛОКАЛЬНЫХ ПЕРЕМЕННЫХ И АРГУМЕНТОВ ПРОЦЕДУРЫ В ИСПОЛНЯЕМОМ КОДЕ ПРОГРАММЫ ПРИ ВЕРИФИКАЦИИ ВЫЧИСЛИТЕЛЬНЫХ ПРОЦЕССОВ А.А. Гедич, А.Г. Зыков, А.В. Лаздин

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

Ключевые слова: вычислительный процесс, верификация, исполнимый модуль, локальные переменные и аргументы процедур.

Введение

На рис. 1 представлена общая схема проектирования и анализа вычислительного процесса (ВП), реализуемого на основе графо-аналитической модели (ГАМ), являющейся концентрированным описанием технического задания (ТЗ). Анализ и верификация ВП по исполнимому коду программы, написанной на языке высокого уровня, является актуальной и сложной задачей. Главной целью исследования является восстановление исходного кода из исполнимых файлов архитектуры Intel x86. Одним из наиболее важных шагов, без которых невозможно восстановление исходного кода программы на языке высокого уровня, является поиск локальных переменных и аргументов процедур (.ПА). Информация, полученная на данном этапе, также может быть использована для комментирования ассемблерного листинга. Ее наличие способствует повышению точности анализа потока данных, например, при поиске адресов назначения косвенных вызовов процедур. Анализ стековых операций может использоваться в других задачах. Например, в [1] стековые операции анализируются для верификации программ с целью гарантировать безопасность стека.

Рис. 1. Схема проектирования и анализа вычислительного процесса (T - True и F - False соответственно)

Мотивацией данного исследования послужило наличие малого числа работ, описывающих полный процесс восстановления информации о ЛПА. Кроме того, на данный момент существует лишь несколько инструментов, способных работать с реальными приложениями и находить ЛПА. Данные инструменты не являются публично доступными.

Практически все современные компиляторы, решая задачи передачи аргументов в процедуры и выделения места в памяти для локальных переменных, используют сегмент стека. В работах [2, 3] на основе описания механизмов хранения локальных переменных и передачи аргументов на стеке был разработан декомпилятор, способный осуществлять поиск ЛПА. Следует отметить важность рассмотрения такого вопроса, как возможность отсутствия эпилога у процедур, что может быть связано с применением оптимизирующих компиляторов. Отсутствие эпилога процедуры в явном виде может затруднять поиск ЛПА.

В работе [3] не учитываются косвенные вызовы процедур, поскольку это усложняет процедуру поиска. Кроме того, не рассматривается такой важный вопрос, как нарушение баланса стека. Под нарушением баланса стека понимается несовпадение значений регистра указателя стека при входе в процедуру и выходе из нее. Наличие такого явления связано с присутствием в исполняемом файле кода встроенных процедур, производящих явные манипуляции со стеком, или кода, вручную написанного на ассемблере.

В работе [1] используется частичное моделирование состояния микроконтроллера и интерпретация подмножества его ассемблерных инструкций. Данное решение используется для получения информации о состоянии стека, например, о его возможном переполнении.

Задача поиска ЛПА в общем виде, как это показано в [4], может быть определена в терминах поиска инструкций, совершающих доступ к сегменту стека. В [4] для этого вводится понятие анализа наборов значений. Под анализом наборов значений понимается абстрактная интерпретация ассемблерного кода с целью найти приближенный набор значений для каждого объекта данных в каждой точке программы. Под объектом данных понимается абстрактное хранилище а-loc. а-loc - это набор диапазонов адресов на участке памяти, представляющий собой хранилище одного или нескольких скалярных значений, структуры, массива или части одного из них. Согласно [5], разработанный алгоритм способен восстанавливать информацию о глобальных и локальных переменных, указателях, структурах, массивах, объектах, выделенных на куче, косвенных переходах и вызовах процедур.

Еще одной проблемой, затрудняющей поиск ЛПА, являются алиасы [6]. Под алиасом понимается обращение к разным частям участка памяти, соответствующего одному объекту. Наличие алиасов может свидетельствовать, например, об использовании механизма приведения типов, которыми обладают многие современные языки программирования.

В [7] описан алгоритм, применяемый для нахождения максимального размера стекфрейма. Каждому базовому блоку управляющего графа процедуры (УГ) сопоставляется информация о текущем балансе стека. В рамках настоящей работы под УГ понимается упорядоченный ориентированный граф, вершинами которого являются инструкции. УГ включает в себя непустое множество начальных вершин и множество конечных вершин, которое может быть пустым. Вершины УГ могут объединяться, образуя базовые блоки. Алгоритм в [7] учитывает возможные изменения регистров ESP и EBP, а также поведение вызываемой функции в части нарушения баланса стека при встрече инструкции CALL. Проблема косвенных вызовов игнорируется, и используются данные секции перемещаемых элементов, секция очень часто отсутствует в реальных приложениях.

В работе [8] использован метод идентификации структур агрегатов для восстановления информации о структурах. В [9] осуществлен переход от контекстно-независимого к контекстно-зависимому анализу путем введения GMOD-функции слияния объектов a-loc. Контекстно--зависимый анализ позволяет получать более точное приближение значений для a-loc, поскольку учитываются объекты, передаваемые в анализируемую процедуру извне, например, переменные, выделенные на куче. Не менее важной при анализе стековых объектов является проблема восстановления типов, которая подробно описана в [10, 11].

Цель работы

Необходимость разработки нового решения обусловлена практически полным отсутствием инструментов, позволяющих точно восстанавливать информацию о локальных переменных и аргументах процедур. Из описанных работ, единственным публично доступным решением является [4, 8, 9]. В [9] подчеркивается, что контекстно-независимая версия алгоритма [4] обладает очень низкой точностью. Кроме того, ни в одной из работ не приведено реальных примеров восстановления ЛПА и достаточной информации о проценте восстановленных ЛПА.

Целью исследования являлась разработка алгоритма, совмещающего в себе представленные ранее идеи и восстанавливающего именно информацию о ЛПА. Алгоритм должен был быть контекстно-независимым, учитывать изменения регистров ESP и EBP, игнорировать анализ косвенных вызовов, предлагая альтернативное решение, игнорировать понятие прологов и эпилогов функций. При поставленных ограничениях алгоритм должен обеспечивать высокую точность и, самое главное, работать с реальными приложениями.

Обобщенный алгоритм восстановления локальных переменных и аргументов процедуры

Разработанный алгоритм является частью программной системы для восстановления исходного кода из исполнимых файлов архитектуры Intel x86. В качестве входных данных алгоритму требуется УГ процедуры. Минимальные данные, необходимые для восстановления УГ получаются на этапе дизас-семблирования и первичного анализа исполнимого файла и сохраняются в xml-файл. Результатом работы алгоритма является список всех переменных процедуры. Кроме того, каждая инструкция, использующая локальную переменную или аргумент, должна быть промаркирована содержательным комментарием с именем переменной и информацией о специфичном доступе к алиасу, если он присутствует.

Шаг 1. Последовательно просматривается список вершин УГ анализируемой процедуры. К каждой вершине применяется функция F1, распознающая наличие операнда в сегменте стека. Если операнд обнаружен, в список результатов шага 1 помещается запись RawStackVariable следующего вида:

VA Address - виртуальный адрес инструкции;

bool UseStackFrame - индикатор использования регистра ESP или регистра EBP;

AbsoluteStackVariableTypes Type - тип указателя: BYTE, WORD, DWORD;

int Offset - смещение, прибавляемое к базовому регистру.

Последовательно просматривается список результатов поиска. При наличии хотя бы одной записи, у которой значение UseStackFrame истинно, производится переход к шагу 2. В противном случае переход к шагу 3.

Шаг 2. Последовательно просматривается список вершин УГ анализируемой процедуры. К каждой вершине применяется функция F2, распознающая инструкции, изменяющие значение указателя стекфрейма EBP. Если инструкция идентифицирована как изменяющая, в список результатов шага 2 помещается запись ChangeTrack следующего вида:

VA Address - виртуальный адрес инструкции;

GPInstructions Instruction - мнемоника инструкции общего назначения;

Operand Operand - второй операнд инструкции, может отсутствовать.

Шаг 3. Шаг состоит из трех этапов, которые выполняются последовательно в цикле до тех пор, пока список результатов шага 3 не перестанет изменяться. При выходе из цикла осуществляется переход к шагу 4.

1. На этом этапе осуществляется проход по УГ процедуры в прямом направлении передачи управления между инструкциями, начиная с точки входа. К каждой вершине применяется функция F3,

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

Для последующих проходов по УГ в случае, если возвращаемое значение - это NULL, делается проверка наличия в списке результатов пары значений для следующей инструкции. Если пара присутствует, возможно вычисление баланса стека текущей инструкции через пропорцию. Пара значений помещается в список результатов шага 3, где ключом является адрес инструкции, а значением - сама пара. Для вычисления баланса стека текущей инструкции используется запись из списка результатов для предыдущей инструкции. Баланс первой инструкции полагается равным нулю.

Если встречается инструкция CALL, делается попытка проанализировать вызываемую процедуру, чтобы вычислить величину изменения указателя стека ESP. В случае косвенного вызова вычисление баланса на текущей ветке графа прекращается. В случае прямого вызова в собственный код делается предположение о том, что процедура не нарушает баланс стека, и используется параметр инструкции RET. В случае прямого вызова API используется метаинформация, генерируемая модифицированным компилятором gccxml на основе заголовочных файлов.

2. На следующем этапе осуществляется проход по УГ процедуры в обратном направлении передачи управления между инструкциями, начиная с точек выхода или последних инструкций. Делаются предположения о том, что процедура не нарушает баланс стека и он равен нулю для ее последних инструкций. На данном этапе вычисляются пары значений и помещаются в список результатов аналогично предыдущему этапу.

3. На заключительном этапе осуществляется поиск в УГ вершин, недостижимых одновременно на этапах 2, 3 в силу ограничений инструкции CALL, но для которых известен баланс стека и возможно его вычисление для дальнейших инструкций. Если указанные вершины присутствуют, к ним применяется этап 1 или 2.

Шаг 4. Данный шаг выполняется, только если выполнялся шаг 2. Список результатов шага 2 сортируется по возрастанию адреса. К каждой записи применяется функция F4, которая вычисляет значение регистра EBP для соответствующей инструкции, используя информацию из операнда и дополнительно - из списка результатов шага 3. В случае невозможности вычислить значение регистра EBP функция возвращает NULL. Значение сохраняется в список результатов шага 4, где ключом является адрес инструкции, а значением - результат функции F4.

Далее вычисленное значение транспортируется по вершинам УГ до тех пор, пока не будет встречена вершина, которой соответствует следующая запись ChangeTrack или вершина с инструкцией CALL. На этапе транспортировки запись о каждой пройденной вершине заносится в список результатов с соответствующим значением регистра EBP.

Шаг 5. На данном шаге последовательно просматривается список результатов шага 1. Для каждой записи RawStackVariable вычисляется полное относительное смещение путем сложения значения Offset и значения регистра ESP или EBP, полученного на шаге 3 или 4, в зависимости от значения UseStackFrame. На основе полного смещения вычисляется область переменной. Результаты заносятся в список результатов шага 5 в виде записей AbsoluteStackVariable:

VA Address - виртуальный адрес инструкции;

bool UseStackFrame - индикатор использования регистра ESP или регистра EBP; AbsoluteStackVariableTypes Type - тип указателя: BYTE, WORD, DWORD; int AbsoluteStackOffset - полное смещение;.

StackVariableScope Scope - область переменной: local, argument, return.

Шаг 6. Результатом работы данного шага являются два списка: список доступов и список переменных. Запись о переменной представлена в виде StackVariable, а запись о доступе в виде StackVariab-leAccessor. На данном шаге из списка результатов шага 5 формируется список диапазонов из смещений, после чего список группируется по признаку пересечения. В группу входят пересекающиеся диапазоны, но группы не пересекаются между собой.

Последовательно просматривается каждая группа. Если группа содержит один диапазон, в список переменных и в список доступов заносится по одной записи. Если группа содержит несколько диапазонов, то: если это одинаковые диапазоны, в список переменных заносится одна запись, а в список доступов - количество записей, соответствующее количеству диапазонов. Если это разные диапазоны, к ним применяется операция объединения, после чего в список переменных заносится одна запись, а в список доступов - количество записей, соответствующее количеству диапазонов. Далее диапазоны сортируются по значению полного смещения и индексируются, чтобы дать уникальные имена переменным. StackVariable:

IFORange range - диапазон адресов.

int Variableindex - индекс переменной, часть уникального имени.

StackVariableAccessor:

AbsoluteStackVariableTypes Type - тип указателя BYTE, WORD, DWORD. int RelativeOffset - относительное смещение (для нестандартных типов). string Varld - уникальный идентификатор переменной.

Выводы

В ходе исследования было просканировано 8 реальных приложений, содержащих в общем 450 000 инструкций. В качестве исследуемых приложений выбраны игры, поскольку такие исполнимые файлы трудно анализировать. Это обусловлено большим размером исполнимых файлов, разнообразием API, высоким уровнем оптимизации и другими факторами. Каждый исполнимый модуль исследовался лишь частично, поскольку информация о процедурах была получена на этапе предварительного анализа методом рекурсивного спуска, что не гарантирует 100%-ного покрытия кода.

8000 7000 6000 5000 4000 3000 2000 1000 0

П всего процедур

□ процедуры с доступом к стеку

□ полный баланс

□ без переменных

□ неполный баланс

□ ошибка расчета

100 90 80 70 60 50 40 30 20 10 0

L

□ полный баланс

□ неполный баланс

□ ошибка расчета

б

Рис. 2. Результаты расчета баланса стека: полное распределение (а), нормированное распределение (б)

50000 45000 40000 35000 30000 25000 20000 15000 10000 5000 0

7000 6000 5000 4000 3000 2000 1000 0

□ все переменные EBP

□ распознано EBP

□ нераспознано EBP

а

□ все процедуры

□ все переменные распознаны

□ некоторые переменные распознаны

□ ни одна переменная не распознана в ошибка анализа

б

30000

25000

20000

15000

10000

5000

0

□ все переменные ESP

□ распознано ESP

□ нераспознано ESP

в

Рис. 3. Результаты вычисления полного смещения: количество доступов через регистр ESP (а); количество доступов через регистр EBP (б); степень распознавания ЛПА по отношению к содержащим их

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

процедурам (в)

а

Важность представляют только процедуры, имеющие ЛПА. Для 91,2% из них удалось полностью рассчитать баланс стека. Частично удалось произвести расчеты для 7,1%. Оставшаяся часть 1,7% вызвана ошибками, привнесенными на этапе дизассемблирования. Результаты приведены на рис. 2.

На рис. 3 приведены результаты восстановления информации о локальных переменных и аргументах. Рис. 3, а, б, отражают количество распознанных ЛПА. Видно, что для доступов через регистр ESP процент намного выше. Это объясняется более простыми зависимостями значений и изменениями регистра ESP в сравнении с регистром EBP. Рис. 3, в, показывает степень распознавания ЛПА по отношению к содержащим их процедурам. Пренебрегая ошибками, внесенными на этапе дизассемблирования, которые составляют 1,7%, можно утверждать, что расчет баланса стека работает эффективно, поскольку полностью нераспознанные процедуры составляют 6,6%. Частично распознанные ЛПА составляют 25%. Данный факт объясняется сложными зависимостями изменения значений регистра EBP, что отражено на рис. 3, а. Поскольку полностью распознанные ЛПА составляют 66,7%, можно сделать вывод, что при улучшении шага 4 обобщенного алгоритма можно достигнуть результата распознавания 90%.

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

Инструкция Переменная Доступ

MOV DWORD PTR SS:[EBP-10h],EAX Custom Local4:6 (DWORD)Local4

CMP WORD PTR SS:[EBP+8h],0h DWORD Argument1:4 (WORD)Argument1

TEST BYTE PTR SS:[EBP-5h],80h DWORD Local2:4 (BYTE)Local2:3

CMP DWORD PTR SS: [EBP-0Eh],0FFh Custom Local4:6 (DWORD)Local4:2

Таблица. Результаты работы алгоритма

Заключение

В ходе исследования рассмотрен ряд наиболее важных работ, посвященных проблеме восстановления локальных переменных и аргументов процедур. Коротко описаны основные особенности предложенных ранее алгоритмов, их достоинства и недостатки. Предложено собственное оригинальное решение, важными достоинствами которого являются контекстно-независимый анализ, решение проблемы косвенных вызовов процедур и распознавание алиасов. Разработанный алгоритм был применен к реальным программам и доказал свою эффективность. Программная реализация включена в состав учебно-исследовательской САПР верификации вычислительных процессов [12-14]. Работа выполнена при поддержке РФФИ (грант 12-07-00376-а).

Литература

1. Regehr J., Reid A., Webb K. Eliminating stack overflow by abstract interpretation // Transactions on Embedded Computer Systems. - 2005. - № 4. - P. 751-778.

2. Cifuentes C., Gough K.J. Decompilation of binary programs // Software-Practice and Experience. - 1995. -V. 25. - № 7. - P. 811-829.

3. Cifuentes C., Simon D. Procedure abstraction recovery from binary code // In Proceedings of the Conference on Software Maintenance and Reengineering. - 2000. - P. 55-64.

4. Balakrishnan G., Reps T. Analyzing memory accesses in x86 executables // Compiler Construction. - 2004.

- P. 5-23.

5. Cifuentes C., Fraboulet A. Intraprocedural static slicing of binary executables // International Conference on Software Maintenance. - 1997. - P. 188-195.

6. Debray S.K., Muth R., Weippert M. Alias analysis of executable code // Principles of Programming Languages. - 1998. - P. 12-24.

7. Debray S.K., Linn C., Andrews G.R., Schwarz B. Stack analysis of x86 executables. - 2004 [Электронный ресурс]. - Режим доступа: www.cs.arizona.edu/~ debray/Publications/stack-analysis.pdf, свободный. - Яз. англ. (дата обращения 20.08.2013).

8. Balakrishnan G., Reps T. Divine: Discovering variables in executables // Verification, Model Checking, and Abstract Interpretation. - 2007. - P. 1-28.

9. Balakrishnan G., Reps T. Improved memoryaccesses analysis for x86 executables // Compiler Construction.

- 2008. - P. 16-35.

10. Dolgova K., Chernov A. Automatic type reconstruction in disassembled c programs // In Proceedings of the WCRE. - 2008. - P. 202-206.

11. Troshina K., Chernov A. High-Level Composite Type Reconstruction During Decompilation from Assembly Programs // In Proceedings of 7th Perspectives of System Informatics. - 2009. - P. 292-299.

12. Немолочнов О.Ф., Зыков А.Г., Поляков В.И., Петров К.В. Учебно-исследовательская САПР верификации и тестирования вычислительных процессов программ // Научно-технический вестник СПбГУ ИТМО. - 2006. - № 9 (32). - С. 127-128.

13. Зыков А.Г., Безруков А.В., Немолочнов О.Ф., Поляков В.И., Андронов А.В. Графо-аналитические модели вычислительных процессов в САПР // Научно-технический вестник СПбГУ ИТМО. - 2011. -№ 4 (74). - С. 116-120.

14. Немолочнов О.Ф., Зыков А.Г., Поляков В.И., Македонский А.А. Параллельные структуры управления вычислительными процессами в САПР / Научно-технический вестник СПбГУ ИТМО. - 2011. -№ 4 (74). - С. 121-124.

Гедич Андрей Алексеевич - Санкт-Петербургский национальный исследовательский университет инфор-

мационных технологий, механики и оптики, аспирант, muzhedgehog@list.ru

Зыков Анатолий Геннадьевич - Санкт-Петербургский национальный исследовательский университет информационных технологий, механики и оптики, кандидат технических наук, доцент, zykov_a_g@mail.ru

Лаздин Артур Вячеславович - Санкт-Петербургский национальный исследовательский университет информационных технологий, механики и оптики, кандидат технических наук, доцент, lazdin@yandex.ru

УДК 004.42

ИНТЕГРАЦИЯ ИНФОРМАЦИОННЫХ СИСТЕМ НА ОСНОВЕ ТЕХНОЛОГИИ

СВЯЗАННЫХ ДАННЫХ И.А. Семерханов, Д.И. Муромцев

Рассматривается способ интеграции компьютерных систем, использующих традиционные реляционные хранилища данных, на основе технологии связанных данных, затрагивается вопрос интероперабельности таких систем и проблемы ее обеспечения. Для реализации семантической интероперабельности предлагается использовать семантические технологии, в частности, модели данных RDF и RDF Schema, язык описания онтологий OWL, язык запросов SPARQL и общий подход открытых связанных данных. Рассматривается разрабатываемый авторами программный инструмент R2RMapper, предназначенный для извлечения информации, хранящейся в реляционных базах данных, в семантические форматы. Представлен алгоритм, позволяющий преобразовать такую информацию в единое информационное поле, доступное всем интегрируемым системам.

Ключевые слова: интеграция реляционных баз данных, интероперабельность, RDF, OWL, RDFS, связанные данные.

Введение

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

В решении задачи интеграции ключевым элементом является обеспечение интероперабельности -способности информационной системы к взаимодействию с другими системами [1]. Такое взаимодействие может выражаться в виде обмена данными, распределенного выполнения поисковых запросов и согласованного изменения базы данных (БД). Проблема обеспечения интероперабельности информационных систем имеет фундаментальный характер. Она актуальна как для унаследованных систем, которые требуется связывать с вновь создаваемыми, так и для вновь проектируемых хранилищ данных, в которых необходимо предусмотреть возможности для реализации будущего взаимодействия с другими системами.

Можно выделить два вида интероперабельности - структурный и семантический. Структурный вид предполагает согласование внутренних структур сущностей систем. Семантический вид означает возможность установления соответствия между смысловыми единицами информационных систем. Существующие методы решения проблемы интеграции в основном направлены на решениеи проблемы структурной интероперабельности. Такие методы чаще всего основаны на ручном построении связей и правил обмена данными между системами, однако они не отвечают современным потребностям и уровню развития технологий [2].

К сожалению, на данный момент также отсутствуют четко сформулированные методы решения проблемы семантической интероперабельности, но есть некоторые проекты, которые так или иначе пытаются реализовать такой подход, например, eCulture, IPISAR, SWHi, AMA и др. [3].

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

i Надоели баннеры? Вы всегда можете отключить рекламу.