ما يعادل objcopy لنظام التشغيل Windows؟(اختراق لتعارض رموز lib)

StackOverflow https://stackoverflow.com//questions/20052228

  •  26-12-2019
  •  | 
  •  

سؤال

أنا أبحث عن أداة مكافئة لنظام التشغيل 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();

لاحظ أنني استخدمت هنا اسم الوظيفة العادية كما هو محدد في الرأس لمطابقة الرمز الموجود في الملف الثنائي ولكن قد ترغب في استخدام الاسم المشوه الكامل بدلاً من ذلك لمنع عمليات الاستبدال غير المرغوب فيها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top