إذا كنت أرغب في إعادة بناء DLL الخاص بي، كيف أذهب للقيام بذلك؟

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

  •  22-08-2019
  •  | 
  •  

سؤال

هذا هو استمرار هذا السؤال.

أنا في عملية الاختبار سواء تم إعادة تسمية DLLs .NET DLLs، وسوف يوفرني Ngenning لهم رمزا مشتركا في الذاكرة على الخوادم الطرفية.

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

ما اعتقدت أنه يمكنني فعله كما يلي:

  1. مجرد بناء و ngen كل شيء
  2. بدء البرنامج، ضمان تحميل جميع DLL
  3. يستخدم listDls. / R Programname للحصول على قائمة بالعناوين الحالية قيد الاستخدام للمثيل الجاري
  4. استخدم عناوين تلك DLL التي تم تخصيصها كعنوان أساسي جديد لهؤلاء DLL
  5. Un-Ngen كل شيء، وابدأ مرة أخرى في 1

ومع ذلك، فقد تحول هذا إلى Schrödingner. التمرين لأن فعل إعادة تعيين بعض DLLs على ما يبدو إما تغيير ترتيب الحمل أو كيف ينقل نظام التشغيل DLLs الأخرى.

على سبيل المثال، دعنا نقول أنه بعد التشغيل الأولي لدي قائمة تقول أن DLLS A و B و C يجب أن تكون في العنوان 1000 و 2000 و 3000. لا يوجد ذكر DLL D و E و F، وهو أيضا جزء من نفس النظام. من المفترض أن هذه تم تحميلها في Baseaddress الحالية الخاصة بها، وإلا فسوف أفترض أن ListDLLs سيخبرني بذلك.

لذلك أقوم بتغيير عنوان A، B، C، كرر كل شيء، والآن تم نقل DLL C، D و E. A و B الآن موافق، أصبحت E و F الآن نقل، ولا يزال C قيد التنكيس حولها.

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

نظرا لأن العناوين الأساسية الأساسية لجميع DLLs كانت الافتراضي، مما يعني أنه تم نقل كل DLL (ربما باستثناء أول واحد تحميل)، وبالتالي تم تعيينه إلى ملف الصفحة، وأعتقد أنه سيكون هناك مكسب محتمل فوق 0.

اي نصيحه؟

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

المحلول

يمكنك معرفة عنوان التحميل المفضل DLLS وتداولات ذاكرة باستخدام Dumpbin (يأتي داخل Visual Studio) وقم بتخطيطك بناء على تلك الأرقام.

سوف يعطيك Dumpbin / رؤوس:

 7DC90000 image base (7DC90000 to 7DD5FFFF)

إذا كنت تخطط وفقا لعناوين التحميل المفضلة، فلن يكون لديك أي مشاكل.

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