Локальный инструмент сравнения для проектов декомпиляции. Вдохновлен decomp.me и asm-differ.
Функции:
Поддерживает:
См. «Использование» для получения дополнительной информации.
Чтобы построить из исходного кода, см. Сборка.
Для Linux и macOS запустите chmod +x objdiff-*
чтобы сделать двоичный файл исполняемым.
Бинарные файлы CLI можно найти на странице релизов.
objdiff работает путем сравнения двух перемещаемых объектных файлов ( .o
). Ожидается, что объекты будут иметь одинаковый относительный путь из «целевого» и «базового» каталогов.
Например, если целевой («ожидаемый») объект расположен по адресу build/asm/MetroTRK/mslsupp.o
, а базовый («фактический») объект расположен по адресу build/src/MetroTRK/mslsupp.o
, следующая конфигурация будет использоваться:
build/asm
build/src
MetroTRK/mslsupp.o
Затем objdiff запустит систему сборки из каталога проекта для сборки обоих объектов:
$ make build/asm/MetroTRK/mslsupp.o # Only if "Build target object" is enabled
$ make build/src/MetroTRK/mslsupp.o
Затем объекты будут сравниваться, и результаты будут отображаться в пользовательском интерфейсе.
См. Конфигурацию для получения дополнительной информации.
Хотя это и не обязательно (большинство настроек можно указать в пользовательском интерфейсе), проекты могут добавить файл objdiff.json
для автоматической настройки инструмента. Файл конфигурации должен находиться в корневом каталоге проекта.
Если в вашем проекте есть скрипт-генератор (например, configure.py
), рекомендуется также сгенерировать файл конфигурации objdiff. Затем вы можете добавить objdiff.json
в свой .gitignore
чтобы предотвратить его фиксацию.
{
"$schema" : " https://raw.githubusercontent.com/encounter/objdiff/main/config.schema.json " ,
"custom_make" : " ninja " ,
"custom_args" : [
" -d " ,
" keeprsp "
],
"build_target" : false ,
"build_base" : true ,
"watch_patterns" : [
" *.c " ,
" *.cp " ,
" *.cpp " ,
" *.cxx " ,
" *.h " ,
" *.hp " ,
" *.hpp " ,
" *.hxx " ,
" *.s " ,
" *.S " ,
" *.asm " ,
" *.inc " ,
" *.py " ,
" *.yml " ,
" *.txt " ,
" *.json "
],
"units" : [
{
"name" : " main/MetroTRK/mslsupp " ,
"target_path" : " build/asm/MetroTRK/mslsupp.o " ,
"base_path" : " build/src/MetroTRK/mslsupp.o " ,
"metadata" : {}
}
]
}
Просмотрите config.schema.json, чтобы увидеть все доступные параметры. Список ниже представляет собой краткое изложение наиболее важных опций.
custom_make
(необязательно) : по умолчанию objdiff будет использовать make
для сборки проекта.
Если в проекте используется другая система сборки (например, ninja
), укажите ее здесь.
Команда сборки будет [custom_make] [custom_args] path/to/object.o
.
custom_args
(необязательно) : дополнительные аргументы для передачи команде сборки перед путем к объекту.
build_target
: если true, objdiff сообщит системе сборки, что нужно построить целевые объекты перед сравнением (например, make path/to/target.o
).
Это полезно, если целевые объекты не создаются по умолчанию или могут меняться в зависимости от конфигурации проекта или изменений в файлах сборки.
Требуется правильно настроить систему сборки.
build_base
: если true, objdiff сообщит системе сборки, что нужно построить базовые объекты перед сравнением (например, make path/to/base.o
).
Маловероятно, что вы захотите отключить это, если только вы не используете внешний инструмент для перестройки базового объекта при изменении исходного файла.
watch_patterns
(необязательно) : список шаблонов glob, за которыми следует следить за изменениями. (Поддерживаемый синтаксис)
Если какой-либо из этих файлов изменится, objdiff автоматически перестроит объекты и повторно сравнит их.
Если не указано иное, objdiff будет использовать шаблоны по умолчанию, перечисленные выше.
units
(необязательно) : если указано, objdiff отобразит список объектов на боковой панели для удобства навигации.
name
(необязательно) : имя объекта в пользовательском интерфейсе. Если не указано, будет использоватьсяpath
объекту.
target_path
: путь к «целевому» или «ожидаемому» объекту из корня проекта.
Этот объект является предполагаемым результатом матча.
base_path
: путь к «базовому» или «фактическому» объекту из корня проекта.
Этот объект построен из текущего исходного кода .
metadata.auto_generated
(необязательно) : скрывает объект из списка объектов, но по-прежнему включает его в отчеты.
metadata.complete
(необязательно) : помечает объект как «завершенный» (или «связанный») в списке объектов.
Это полезно для маркировки объектов, которые полностью декомпилированы. Значениеfalse
пометит объект как «неполный».
Установите Rust через Rustup.
$ git clone https://github.com/encounter/objdiff.git
$ cd objdiff
$ cargo run --release
Или с помощью cargo install
.
$ cargo install --locked --git https://github.com/encounter/objdiff.git objdiff-gui objdiff-cli
Двоичные файлы будут установлены в ~/.cargo/bin
как objdiff
и objdiff-cli
.
Лицензировано по любому из
по вашему выбору.
Если вы явно не указали иное, любой вклад, намеренно представленный вами для включения в работу, как это определено в лицензии Apache-2.0, должен иметь двойную лицензию, как указано выше, без каких-либо дополнительных условий.