استخراج مكتبات مرتبطة قانونيا من قابل للتنفيذ

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

سؤال

لست متأكدا مما إذا كان ذلك ممكنا، ولكن بالنظر إلى ملف قابل للتنفيذ (Foo.exe)، مع وجود العديد من المكتبات التي تم ربطها بشكل ثابت.

هل هناك أي برنامج استخراج من هذا الملف .LIB (أو .A) التي تكمن داخل الملف القابل للتنفيذ؟

شكرًا.

هل كانت مفيدة؟

المحلول

من غير المرجح بشكل لا يصدق منذ ذلك الحين، عادة، لا تحصل على محتويات المكتبة بأكملها حقنها في قابلة للتنفيذ.

تحصل فقط على ما يكفي لإرضاء جميع الرموز غير المحددة. قد يكون هذا في الواقع نسبة صغيرة فقط من المكتبة. تتكون مكتبة عموما من مجموعة من ملفات الكائنات التي يتم ربطها فقط تلك المطلوبة بتنفيذها.

على سبيل المثال، إذا كان الشيء الوحيد الذي اتصلت به مكتبة وقت التشغيل C exit(), ، سيكون من غير المرجح أن يكون لديك printf() عائلة الوظائف في الملف التنفيذي الخاص بك.

إذا كنت مرتبطا بملفات الكائنات مباشرة، فقد تتاح لك فرصة، لأنها سيتم تضمينها سواء كانت تستخدم أم لا (ما لم يكن رابطك واحدا ذكيا).

ولكن حتى ستكون مهمة هائلة لأنها قد لا تكون هناك معلومات في الملف التنفيذي فيما يتعلق بأقسام التعليمات البرمجية التي جاءت من ملفات كائن معين. من المحتمل أن تكون قابلة للتنفيذ ولكن، إذا كانت هناك طريقة أخرى، سأكون أبحث في ذلك أولا.

اسمحوا لي أن أوضح العملية النموذجية:

  1. أربعة ملفات كائن، a.o, b.o, c.o و d.o تحتوي على الوظائف a(), b(), c() و d() على التوالى. هم انهم الكل يضاف إلى abcd.a أرشيف.
  2. إنهم جميعا مستقلون (بدون تبعيات) باستثناء حقيقة أن b() المكالمات c().
  3. لديك برنامج رئيسي يستدعي a() و b() وأنت تجميعها ثم ربطها مع abcd.a مكتبة.
  4. الرابط يسحب a.o و b.o خارج المكتبة وفي قابليتك القابل للتنفيذ، مرضية الحاجة a() و b() ولكن تقديم حاجة ل c(), ، لان b() يحتاجها.
  5. الرابط ثم يسحب c.o خارج المكتبة وفي قابليتك القابل للتنفيذ، مرضية الحاجة c(). وبعد الآن جميع الرموز غير المحددة راضية، يتم التنفيذ والغبار، يمكنك تشغيله عند الاستعداد.

في أي مرحلة كانت في تلك العملية d.o تم سحبها إلى قابلة للتنفيذ حتى يكون لديك أمل صفر في إخراجها.

تحديث: إعادة "إذا كان هناك طريقة أخرى، سأكون أبحث في ذلك أولا" التعليق الذي قمت به أعلاه، لقد ذكرت للتو في تعليق على أحد الإجابات الأخرى التي لديك شفرة المصدر التي جعلت المكتبات التي تريدها استخراجها. أحتاج أن أسأل: لماذا لا يمكنك إعادة بناء المكتبات مع هذا المصدر؟ يبدو لي حلا أسهل بكثير من محاولة إعادة إنشاء المكتبات من مراجضة شفرة القابلة للتنفيذ.

نصائح أخرى

تخيل وجود 10 كتب في اللغة التي لا تفهمها، دون أغطية، صفحات العنوان وأرقام الصفحات والفصول. بعض الكتب لا يمكن أن تكون غير مكتملة. يتم خلط جميع الصفحات معا حتى يكون من المستحيل معرفة أين هي بداية ونهاية كل كتاب. (كل صفحة مكالمة دالة) الآن حاول العثور على صفحة 123 من الكتاب 5 (دعنا نقول أنه مذكور أعلاه وظيفة الخروج () ).

حسنا، فمن الممكن ...

يبدو أنك تسأل عن decompiler. من الصعب استخدام هذه الأدوات (من المستحيل على الأرجح على C + C ++ متطورة بشكل معتدل) وإذا كان هناك أي طريقة أخرى لحل مشكلتك، بما في ذلك أخذ شهرين لإعادة كتابة المكتبات، أوصي بمسار العمل.

مثل Pax أشار، حتى لو كنت تستخدم فك الترصم، فلن تحصل فقط على وظائف المكتبة التي يسمى الملف التنفيذي.

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