
Глубокая интеграция декомпилятора Ghidra и дизассемблера Sleigh для rizin
Это интеграция декомпилятора Ghidra и дизассемблера Sleigh для Rizin. Она основана исключительно на части декомпилятора Ghidra, которая написана полностью на C++, поэтому сама Ghidra не требуется, и плагин может быть собран автономно. Этот проект был представлен (изначально для radare2) на r2con 2019 в рамках доклада о Cutter: https://youtu.be/eHtMiezr7l8?t=950
Usage: pdg # Native Ghidra decompiler plugin
| pdg # Decompile current function with the Ghidra decompiler
| pdgd # Dump the debug XML Dump
| pdgx # Dump the XML of the current decompiled function
| pdgj # Dump the current decompiled function as JSON
| pdgo # Decompile current function side by side with offsets
| pdgs # Display loaded Sleigh Languages
| pdg* # Decompiled code is returned to rizin as comment
Следующие конфигурационные переменные (для команды e) можно использовать для настройки поведения rz-ghidra:
ghidra.cmt.cpp: Стиль комментариев C++
ghidra.cmt.indent: Отступ комментария
ghidra.indent: Величина отступа
ghidra.lang: Пользовательский идентификатор Sleigh для переопределения автоматического определения (например, x86:LE:32:default)
ghidra.linelen: Максимальная длина строки
ghidra.nl.brace: Новая строка перед открывающей '{'
ghidra.nl.else: Новая строка перед else
ghidra.sleighhome: SLEIGHHOME
Здесь ghidra.sleighhome должен указывать на каталог, содержащий файлы *.sla, *.lspec, ... для
архитектур, которые должны поддерживаться декомпилятором. Однако это настраивается автоматически при использовании
пакета rz-pm или установке, как показано ниже.
Сначала убедитесь, что подмодуль, содержащийся в этом репозитории, получен и обновлён:
git submodule init
git submodule update
Затем плагин Rizin можно собрать и установить следующим образом:
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
make
make install
Здесь задайте CMAKE_INSTALL_PREFIX в каталог, из которого Rizin может загрузить плагин.
Шаг установки необходим для работы плагина, поскольку он включает установку необходимых файлов Sleigh.
Если вы используете Rizin из git, также задайте CMAKE_PREFIX_PATH для каталога установки Rizin.
Чтобы также собрать плагин Cutter, у вас должен быть установлен Cutter из исходников в некоторый префикс,
который можно опционально указать с помощью -DCMAKE_PREFIX_PATH=<путь>, затем передайте -DBUILD_CUTTER_PLUGIN=ON в cmake
для включения плагина:
/my/path/rz-ghidra> mkdir build && cd build
/my/path/rz-ghidra/build> cmake -DBUILD_CUTTER_PLUGIN=ON -DCMAKE_PREFIX_PATH=/path/to/cutter/prefix -DCMAKE_INSTALL_PREFIX=~/.local ..
/my/path/rz-ghidra/build> make && make install
По умолчанию плагин Cutter устанавливается в автоматически выбранный путь в домашнем каталоге текущего пользователя.
Этот путь можно переопределить с помощью -DCUTTER_INSTALL_PLUGDIR.
Rizin имеет быстро развивающийся C API, поэтому необходимо явно указывать, какие версии rz-ghidra совместимы с какими версиями Rizin:
При использовании Rizin и rz-ghidra из git:
dev следует за веткой Rizin dev.stable следует за веткой Rizin stable.Что касается релизов, rz-ghidra обычно выпускается одновременно с Rizin и
часто использует те же номера версий (но это не гарантируется, не полагайтесь на эти номера!).
Кроме того, вместе с каждым релизом Rizin создаётся тег вида rz-0.1.2 в rz-ghidra, который точно
указывает на релиз rz-ghidra и подтверждает, что этот релиз совместим с указанной версией Rizin.
Эти теги могут использоваться сопровождающими дистрибутивов для поиска способов настройки зависимостей.
Обратите внимание, что этот плагин доступен под лицензией LGPLv3, которая является более строгой, чем лицензия Ghidra!
Эта программа является свободным программным обеспечением: вы можете распространять её и/или изменять её в соответствии с условиями GNU Lesser General Public License, опубликованной Free Software Foundation, либо версии 3 этой лицензии, либо (по вашему выбору) любой более поздней версии.
Эта программа распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии КОММЕРЧЕСКОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ. Подробнее см. GNU Lesser General Public License.
Вы должны были получить копию GNU Lesser General Public License вместе с этой программой. Если нет, см. https://www.gnu.org/licenses/.