سؤال

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

[عدل] التوضيح:

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

يمكنني أن أقوم بتجميع التعليمات البرمجية في (windows) c\c++، asm ولكن لا يوجد .net من فضلك.

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

المحلول

سيكون من الأسهل أن تقوم بتنفيذ هذا البرنامج بنفسك بدلاً من كتابة الغلاف؛يبدو الأمر تافهًا - فقط افتح الملف، وابحث عن الموقع الصحيح، واكتب البتات الخاصة بك، وأغلق الملف، وبذلك تكون قد انتهيت.

نصائح أخرى

أسهل طريقة هي تضمين ملف exe هذا في ملفك الشخصي وكتابته على القرص لتشغيله.

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

يعتمد الكود الدقيق الذي تحتاجه للقيام بذلك على ما إذا كنت تكتب كود .Net أو C++.

اجابة قصيرة:لا.

إجابة قصيرة أقل:ليس إلا إذا كان برنامج تثبيت أو أرشيفًا ذاتيًا قابلاً للتنفيذ.

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

يمكنك إلحاق الملف القابل للتنفيذ بنهاية الآخر وكتابة بعض التعليمات البرمجية لفك ضغطه في مجلد مؤقت.

لقد فعلت شيئًا مشابهًا من قبل ولكن مع ملف تكوين وبعض الصور النقطية الملحقة بملف EXE في نظام التشغيل Windows.كانت الطريقة التي قمت بها هي إلحاق أشيائي أولاً بنهاية EXE ثم كتابة بنية صغيرة بعد ذلك تحتوي على إزاحة ملف البيانات والتي ستكون في حالتك إزاحة exe الثاني.

عند تشغيل التطبيق الخاص بك، انتقل إلى نهاية الملف مطروحًا منه حجم البنية، واستخرج إزاحة الملف وانسخ ملف exe الثاني إلى مجلد مؤقت، ثم قم بتشغيله.

حسنًا، إليك المزيد من التفاصيل حسب الطلب.هذه بعض التعليمات البرمجية الزائفة لإنشاء ملف EXE المدمج.هذه أداة مساعدة صغيرة تقوم بتشغيلها بعد تجميع ملف EXE الرئيسي الخاص بك:

Open destination file
Open main exe as a binary file
Copy main exe to destination file
offset = size of main exe
Open 2nd exe as a binary file
Copy 2nd exe to the output file
Write the offset to the output file

الآن لإجراء الاستخراج.هذا ينطبق على EXE الرئيسي الخاص بك:

Find the location of our own EXE file (GetModuleFileName() under Windows)
Open the file in binary mode
Seek to the end minus sizeof(offset) (typically 4 bytes)
Read the offset value
Seek to the offset position
Open a temporary file in binary mode
Read bytes from the main EXE and write to the temporary file
Launch the temporary file

أعتقد أن أسهل طريقة للقيام بذلك لأغراضك هي على الأرجح استخدام حزمة قابلة للتنفيذ ذاتية الاستخراج.على سبيل المثال، استخدم أداة مثل منشئ الحزم والتي ستحزم ملف exe (وأي ملفات أخرى تريدها) ويمكن تهيئتها لاستدعاء ملف exe أو ملف دفعي أو أي شيء آخر تريده عندما يقوم المستخدم بفك ضغط ملف الاستخراج الذاتي القابل للتنفيذ.

إذا تم إنشاء ملف exe ليكون قابلاً للنقل (علامة رابط أساسية /ثابت: لا)، فيمكنك بالفعل إنشاء LoadLibrary عليه، والحصول على العنوان الأساسي، وإعداد سلسلة اتصال والاتصال (الانتقال) إليه.لن يكون الأمر يستحق كل هذا الجهد، وعدد قليل جدًا من ملفات exe تم إنشاؤها بهذه الطريقة، لذلك يجب أن يكون لديك الكود لإعادة بنائها، وعند هذه النقطة لن تكون في هذا التمرين.

لذا...لا.

أنا أكثر اهتمامًا بالمطور الذي لا يمانع في الكتابة بلغة C/C++/asm، لكن "ليس .net" - ولكن من الواضح أن fopen/fseek/fwrite يعوقه - نظرًا لأن هذا يتعلق بكل البرامج التي تصفها يبدو وكأنه كذلك عمل.

أعتقد أن هذا ممكن أيضًا باستخدام وظيفة FileInstall AutoIt.لهذا سيتعين عليك إعداد AutoIt، وإنشاء برنامج نصي باستخدام وظيفة FileInstall لتضمين ملفات exe ثم استخدام f.i.ال وظيفة RunWait لتنفيذها.ترجمة إلى إكس ويجب أن يتم ذلك.

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