أداة فرق محلية لمشاريع فك التجميع. مستوحاة من 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
: إذا كان صحيحًا، فسيخبر objdiff نظام البناء ببناء الكائنات المستهدفة قبل إجراء عملية الاختلاف (على سبيل المثال، make path/to/target.o
).
يعد هذا مفيدًا إذا لم يتم إنشاء الكائنات المستهدفة بشكل افتراضي أو يمكن تغييرها بناءً على تكوين المشروع أو عمليات التحرير على ملفات التجميع.
يتطلب تكوين نظام البناء بشكل صحيح.
build_base
: إذا كان صحيحًا، فسيخبر objdiff نظام البناء ببناء الكائنات الأساسية قبل إجراء عملية الاختلاف (على سبيل المثال، make path/to/base.o
).
من غير المحتمل أن ترغب في تعطيل هذا، إلا إذا كنت تستخدم أداة خارجية لإعادة بناء الكائن الأساسي بناءً على تغييرات الملف المصدر.
watch_patterns
(اختياري) : قائمة بأنماط الكرة الأرضية لمراقبة التغييرات. (بناء الجملة المدعوم)
إذا تغير أي من هذه الملفات، فسيقوم objdiff تلقائيًا بإعادة بناء الكائنات وإعادة مقارنتها.
إذا لم يتم تحديده، فسوف يستخدم objdiff الأنماط الافتراضية المذكورة أعلاه.
units
(اختياري) : إذا تم تحديدها، فسيعرض objdiff قائمة بالكائنات في الشريط الجانبي لسهولة التنقل.
name
(اختياري) : اسم الكائن في واجهة المستخدم. إذا لم يتم تحديده، سيتم استخدامpath
الكائن.
target_path
: المسار إلى الكائن "الهدف" أو "المتوقع" من جذر المشروع.
هذا الكائن هو النتيجة المقصودة من المباراة.
base_path
: المسار إلى الكائن "الأساسي" أو "الفعلي" من جذر المشروع.
تم إنشاء هذا الكائن من كود المصدر الحالي .
metadata.auto_generated
(اختياري) : لإخفاء الكائن من قائمة الكائنات، مع الاستمرار في تضمينه في التقارير.
metadata.complete
(اختياري) : يضع علامة على الكائن على أنه "مكتمل" (أو "مرتبط") في قائمة الكائنات.
يعد هذا مفيدًا لوضع علامات على الكائنات التي تم فك ترجمتها بالكامل. القيمةfalse
ستضع علامة على الكائن على أنه "غير مكتمل".
تثبيت الصدأ عبر الصدأ.
$ 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، يجب أن تكون مرخصة بشكل مزدوج على النحو الوارد أعلاه، دون أي شروط أو أحكام إضافية.