Локальный инструмент сравнения для проектов декомпиляции. Вдохновлен decomp.me и asm-differ.
Функции:
Поддерживает:
См. «Использование» для получения дополнительной информации.
Чтобы построить из исходного кода, см. Сборка.
Для Linux и macOS запустите chmod +x objdiff-* чтобы сделать двоичный файл исполняемым.
Бинарные файлы CLI можно найти на странице релизов.


objdiff работает путем сравнения двух перемещаемых объектных файлов ( .o ). Ожидается, что объекты будут иметь одинаковый относительный путь из «целевого» и «базового» каталогов.
Например, если целевой («ожидаемый») объект расположен по адресу build/asm/MetroTRK/mslsupp.o , а базовый («фактический») объект расположен по адресу build/src/MetroTRK/mslsupp.o , следующая конфигурация будет использоваться:
build/asmbuild/srcMetroTRK/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, должен иметь двойную лицензию, как указано выше, без каких-либо дополнительных условий.