用於反編譯專案的本地差異工具。受到 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
然後將對物件進行比較,結果將顯示在 UI 中。
請參閱配置以取得更多資訊。
雖然不是必需的(大多數設定可以在 UI 中指定),但專案可以添加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
(可選) :用於監視變更的全域模式清單。 (支援的語法)
如果這些文件中的任何一個發生更改,objdiff 將自動重建物件並重新比較它們。
如果未指定,objdiff 將使用上面列出的預設模式。
units
(選用) :如果指定,objdiff 將在側邊欄中顯示物件清單以便於導覽。
name
(可選) :UI 中物件的名稱。如果未指定,將使用物件的path
。
target_path
:從專案根目錄到「目標」或「預期」物件的路徑。
該對像是比賽的預期結果。
base_path
:從專案根目錄到「基礎」或「實際」物件的路徑。
該物件是根據當前原始程式碼建構的。
metadata.auto_generated
(可選) :從對象清單中隱藏對象,但仍將其包含在報告中。
metadata.complete
(可選) :在物件清單中將物件標記為「完整」(或「連結」)。
這對於標記完全反編譯的物件很有用。false
值會將物件標記為「不完整」。
透過 rustup 安裝 Rust。
$ 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
二進位檔案將會作為objdiff
和objdiff-cli
安裝到~/.cargo/bin
。
已獲得以下任一許可
由您選擇。
除非您另有明確說明,否則您有意提交的包含在作品中的任何貢獻(如 Apache-2.0 許可證中所定義)應如上所述獲得雙重許可,沒有任何附加條款或條件。