كيف يمكنني قراءة الرؤوس من ملف قابل للتنفيذ محمول باستخدام Perl؟

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

  •  07-07-2019
  •  | 
  •  

سؤال

أرغب في العمل مع ملفات PE في Perl ولم أجد وحدة نمطية ، لذلك أعتقد أنني سأكتب بلدي (فعلت ذلك بالفعل في Delphi مرة واحدة).

لقد حصلت على مشكلة واحدة فقط ، عند تعيين القابل للتنفيذ إلى المخزن المؤقت ، كيف يمكنني البحث عن أوكتات مثل 0x00004550 (Image_nt_signature) ، وتحويلها إلى السلاسل القابلة للكتابة وما إلى ذلك؟

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

المحلول

هناك هو وحدة بيرل لمعالجة التنفيذيين المحمولة: Win32::Exe.

ليس لدي أدنى فكرة عن سؤالك الدقيق ، ولكن إذا كنت لا تزال ترغب في كتابة مكتبتك الخاصة ، Win32::Exe قد يكون مرجعا جيدا.

نصائح أخرى

لتحويل هذه القيمة إلى تمثيل بايت ، استخدم pack. الثابت الذي تتعامل معه هو قيمة 32 بت صغيرة ، لذلك "V" في القالب.

$ perl -e 'print pack q[V], 0x00004550' | hd
00000000  50 45 00 00                                       |PE..|
00000004

نرى perldoc -f pack للتفاصيل.

ربما لن تحتاج إلى البحث عن سلاسل مثل "pe 0 0" ، فقط استخدمها للتحقق مما إذا كان الملف الذي تقرأه هو في الواقع ملف PE. عادةً ما يأتي قسم "PE" مباشرة بعد قسم DOS ('MZ') الذي يحتوي على حقل الطول الخاص به.

(أوافق على ذلك Win32::Exe قد يستحق نظرة ، اعتمادًا على ما تريد القيام به.)

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