Alat pembeda lokal untuk proyek dekompilasi. Terinspirasi oleh decomp.me dan asm-differ.
Fitur:
Mendukung:
Lihat Penggunaan untuk informasi lebih lanjut.
Untuk membangun dari sumber, lihat Membangun.
Untuk Linux dan macOS, jalankan chmod +x objdiff-*
agar biner dapat dieksekusi.
Biner CLI dapat ditemukan di halaman rilis.
objdiff bekerja dengan membandingkan dua file objek yang dapat direlokasi ( .o
). Objek diharapkan memiliki jalur relatif yang sama dari direktori "target" dan "base".
Misalnya, jika objek target ("yang diharapkan") terletak di build/asm/MetroTRK/mslsupp.o
dan objek dasar ("aktual") terletak di build/src/MetroTRK/mslsupp.o
, konfigurasi berikut akan digunakan:
build/asm
build/src
MetroTRK/mslsupp.o
objdiff kemudian akan menjalankan sistem build dari direktori proyek untuk membangun kedua objek:
$ make build/asm/MetroTRK/mslsupp.o # Only if "Build target object" is enabled
$ make build/src/MetroTRK/mslsupp.o
Objek-objek tersebut kemudian akan dibandingkan dan hasilnya akan ditampilkan di UI.
Lihat Konfigurasi untuk informasi lebih lanjut.
Meskipun tidak diperlukan (sebagian besar pengaturan dapat ditentukan di UI), proyek dapat menambahkan file objdiff.json
untuk mengonfigurasi alat secara otomatis. File konfigurasi harus ditempatkan di direktori root proyek.
Jika proyek Anda memiliki skrip generator ( configure.py
), disarankan untuk membuat file konfigurasi objdiff juga. Anda kemudian dapat menambahkan objdiff.json
ke .gitignore
Anda untuk mencegahnya dikomit.
{
"$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" : {}
}
]
}
Lihat config.schema.json untuk semua opsi yang tersedia. Daftar di bawah ini adalah ringkasan opsi yang paling penting.
custom_make
(opsional) : Secara default, objdiff akan menggunakan make
untuk membangun proyek.
Jika proyek menggunakan sistem pembangunan yang berbeda (misalnya ninja
), tentukan di sini.
Perintah build adalah [custom_make] [custom_args] path/to/object.o
.
custom_args
(opsional) : Argumen tambahan untuk diteruskan ke perintah build sebelum jalur objek.
build_target
: Jika benar, objdiff akan memberitahu sistem build untuk membangun objek target sebelum melakukan diffing (misalnya make path/to/target.o
).
Ini berguna jika objek target tidak dibuat secara default atau dapat berubah berdasarkan konfigurasi proyek atau pengeditan pada file perakitan.
Memerlukan sistem build untuk dikonfigurasi dengan benar.
build_base
: Jika benar, objdiff akan memberitahu sistem build untuk membangun objek dasar sebelum melakukan diffing (misalnya make path/to/base.o
).
Kecil kemungkinan Anda ingin menonaktifkan ini, kecuali Anda menggunakan alat eksternal untuk membangun kembali objek dasar berdasarkan perubahan file sumber.
watch_patterns
(opsional) : Daftar pola glob yang harus diperhatikan perubahannya. (Sintaks yang didukung)
Jika salah satu file ini berubah, objdiff akan secara otomatis membangun kembali objek dan membandingkannya kembali.
Jika tidak ditentukan, objdiff akan menggunakan pola default yang tercantum di atas.
units
(opsional) : Jika ditentukan, objdiff akan menampilkan daftar objek di sidebar untuk memudahkan navigasi.
name
(opsional) : Nama objek di UI. Jika tidak ditentukan,path
objek akan digunakan.
target_path
: Jalur ke objek "target" atau "yang diharapkan" dari root proyek.
Objek inilah yang menjadi hasil pertandingan yang diharapkan .
base_path
: Jalur ke objek "dasar" atau "aktual" dari root proyek.
Objek ini dibangun dari kode sumber saat ini .
metadata.auto_generated
(opsional) : Menyembunyikan objek dari daftar objek, namun tetap menyertakannya dalam laporan.
metadata.complete
(opsional) : Menandai objek sebagai "lengkap" (atau "tertaut") dalam daftar objek.
Ini berguna untuk menandai objek yang telah didekompilasi sepenuhnya. Nilaifalse
akan menandai objek sebagai "tidak lengkap".
Instal Rust melalui Rustup.
$ git clone https://github.com/encounter/objdiff.git
$ cd objdiff
$ cargo run --release
Atau menggunakan cargo install
.
$ cargo install --locked --git https://github.com/encounter/objdiff.git objdiff-gui objdiff-cli
Biner akan diinstal ke ~/.cargo/bin
sebagai objdiff
dan objdiff-cli
.
Berlisensi di bawah salah satu dari
sesuai pilihan Anda.
Kecuali jika Anda secara eksplisit menyatakan sebaliknya, setiap kontribusi yang dengan sengaja Anda kirimkan untuk dimasukkan ke dalam karya Anda, sebagaimana didefinisikan dalam lisensi Apache-2.0, akan memiliki lisensi ganda seperti di atas, tanpa syarat atau ketentuan tambahan apa pun.