ما يعادل objcopy لنظام التشغيل Windows؟(اختراق لتعارض رموز lib)
سؤال
أنا أبحث عن أداة مكافئة لنظام التشغيل Windows لأداة GNU objcopy.أنا أتطلع إلى تنفيذ اقتراح نشر هنا لمشكلتي، ومع ذلك أحتاج إلى القيام بذلك عبر الأنظمة الأساسية (Windows وLinux وMac).لم أتمكن من العثور على الإجابة على صديقي جوجل، لذلك ربما يحتاج الحل إلى تنفيذ مختلف.شكرًا لك!
المحلول
جزء من أدوات MSVC الافتراضية: LIB /EXTRACT
يستخرج نسخة من كائن؛ LIB /REMOVE
ثم يقوم بإزالته من المكتبة.
أظن LIB /DEF /EXPORT:externalName=internalName
سيكون مفيدًا لك أيضًا، عند إعادة ملف الكائن مرة أخرى.
نصائح أخرى
إذا كنت لا تمانع في الاختراق، فإن استبدال جميع مثيلات الاسم المتعارض باسم مختلف بنفس الطول في أحد ملفات سلة المكتبة يمكن أن ينجح.افعل هذا على مسؤوليتك الخاصة.
مثال
// a.h
void doSomething();
// b.h
void doSomething();
يمكننا أن نستبدل doSomething
بواسطة doSomethink
في بيثون سيكون شيء من هذا القبيل:
f = open('b.lib',"rb")
s = f.read()
f.close()
s = s.replace(b'doSomething',b'doSomethink')
f = open('b.lib',"wb")
f.write(s)
f.close()
وقم بتعديل رأس b وفقًا لذلك
// b.h
void doSomethink();
لاحظ أنني استخدمت هنا اسم الوظيفة العادية كما هو محدد في الرأس لمطابقة الرمز الموجود في الملف الثنائي ولكن قد ترغب في استخدام الاسم المشوه الكامل بدلاً من ذلك لمنع عمليات الاستبدال غير المرغوب فيها.