Научные публикации

Анализатор исходного текста, основанный на обработке отладочной информации

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

В рамках исследований безопасности архитектуры достаточно использовать лишь часть функций компилятора, отвечающих за детальный разбор исходных текстов. Существенное количество информации содержится в файлах отладочной информации, создаваемых непосредственно компилятором. В частности, такие файлы, генерируемые компилятором MS Visual C++, содержат следующего рода основную информацию обо всех глобальных ресурсах, всех экземплярах модулей, классах, членах экземпляра класса, экземплярах содержащихся в модуле, ссылках экземпляров ресурсов, ресурсах, которые используются определенным экземпляром, о ресурсах, которые используют полученный экземпляр. Для того, чтобы эту использовать информацию возможно использовать специальную библиотеку, которая позволяет получить такую дополнительную информацию как: индекс модуля по его имени, статистику по модулям, описание атрибутов и др. полезную информацию. Таким образом, получается, что основную работу по формированию архитектуры можно возложить на компилятор, и написав дополнительную утилиту – получать сведения о программе в удобном для обработки виде.

Не все форматы отладочной информации могут быть также полезны, как вышеописанный формат фирмы Microsoft. Это связано не только с отсутствием в них информации, но и с особенностями получения имеющихся сведений.. В связи с этим наиболее целесообразным может оказаться поиск другого пути к анализу программ, написанных на С/С++ для отличных от Visual С++ компиляторов, либо найти такой способ, который бы позволил получать отладочную информацию в компиляторе фирмы Microsoft. Первый путь, возможно реализовать с помощью создания анализатора занимающегося самостоятельным разбором текста, например на основе упрощенной грамматики. Это должно занять много ресурсов и для быстрого решения вряд ли может быть использовано. Второй путь – это создание проекта в Visual Studio c исходными текстами, предназначенными для другого компилятора (например, gcc). Компиляция не будет отрабатываться полностью, так как компоновщик (linker) не сможет связать код с библиотечными программами. При этом все-таки будет сформирован файл с отладочной информацией, при условии, что подключены системные файлы исходного компилятора.

К недостаткам такого подхода стоит отнести следующее: компиляция проводится некорректно, что может приводить к искажению отладочной информации, необходимость переопределения типов данных, структур и пр. в независимом заголовочном файле, отсутствие подходов к развитию автоматизации процесса. Среди достоинств стоит выделить следующее: быстрота обработки средних и малых проектов, быстрота разработки анализатора и универсальность в обработке всех программ написанных на C/C++.