Метод декомпиляции AMD GCN ядер в OpenCL
Ключевые слова:
декомпилятор, дизассемблер, OpenCL, AMD GCN, GPGPU, граф потока управления, обратная разработкаАннотация
Введение: декомпиляторы являются удобным инструментом для анализа и поддержки программ при отсутствии исходного кода. Существуют декомпиляторы для многих архитектур и языков программирования, но для графических процессоров семейств AMD GCN и RDNA такого инструмента в настоящее время нет. Цель: разработать декомпилятор ассемблерного кода AMD GPU в язык программирования OpenCL, широко используемый для программирования на устройствах класса GPGPU. Результаты: определены алгоритмы первичной обработки ассемблерного кода: выделение названия программы, параметров и тела программы; поиска обращений к данным и к элементам массивов; извлечения системных значений; поиска и декомпиляции некоторых арифметических операций. Также выработан метод восстановления типов и для работы с локальной памятью. Разработаны шаблоны для определения управляющих конструкций. Практическая значимость: предложенные алгоритмы и метод реализованы на языке Python в виде инструмента OpenCLDecompiler, поддерживающего достаточно большое подмножество команд архитек-
туры AMD GCN. Разработанный инструмент производит декомпиляцию ассемблерного кода, полученного в результате дизассемблирования исполняемого файла, в код на языке OpenCL, что позволяет сократить трудозатраты на анализ ассемблерного кода.