الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تصغير حجم الملف التنفيذي

مغلق
بدأه neoo في 15 أغسطس 2001 · 9 رد · 1,243 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

وااااااااااااااااااااااو ...

لم اصدق عيني !!! وجدت في MSDN مقال يتكلم عن امكانية جعل البرنامج النهائي اصغر بإستبدال WinMain بـ WinMainCRTStartup .. المهم استبدلتها في احد البرامج و بعد معاناه من التغيير في الكود لكي يترجم الكود بدون اخطاء ... اندهشت !! كان برنامجي حوالي 856 كيلو بايت .... تخيل صار بعد التعديل 425 يعني فرق النص !!!! عموما و اجهتني مشكلة أن البرنامج لم يعد يعمل إلا من تشغيله داخل الفيجوال سي ++ ، سأحاول هذه الايام من معرفة المزيد حول هذه التابع .... عموما أتمنى ان اللي يعرف عن هذا التابع يعطينا اللي عنده ....

تقبلوا تحياتي ،،،

#2

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

ياريت توافينا بمعلومات أكثر لأنه صراحة الحركة مره حلوة و مثييره

شكرا لك

#3

أخي نيو ال WinMainCRTStartup وال WinMain هما الاثنين موجودين في كود ال Visual C حيث تعتبر الأولى هي الstartup وفيها تتم عملية تهيئة لاستخدام مكتبات السي القياسية وهي التي تستدعي التابع WinMain الذي عندك ..

وعلى فكرو إذا أردت أن تجعل تطبيقك UNICODE فيجب أن تجعل نقطة بدأ البرنامج wWinMainCRTStartup بدلا من الأولى ..

في المقالة التي في MSDN قام المؤلف بكتابة تابع startup جديد مع الغاء الذي تعطيه الفيجوال سي ..

يالنسبة إلى حالتك أنا أعتقد أن البرنامج الأساسي تبعك يستخدم مكتبة ال MFC بشكل Static وبالتالي سوف يتم ربط مكتبة السي القياسية LIBCMT.LIB مع برنامجك بشكل ستاتيكي وأنت أعتقد أنك غيرت في الخيارات بشكل غير مباشر من أجل أن تستخدم MSVCRT.DLL . أي أنك قمت بعملية الربط الديناميكي ولذلك صغر حجم الملف ولكن على كل أنت تحتاج إلى توزيع تلك المكتبة مع برنامجك على كل الأحوال ..

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

Coding on the Cloud and for the Cloud!

My Blog

#4

السلام عليكم ،،،

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

extern "C" void WinMainCRTStartup()

عموما جالس العب فيه الان و كذلك اربطه مع مكتبات مختلفة ... خليني انتهي منها و اعطيكم اللي يصير معي ...

تقبل تحياتي ...

#5

السلام عليكم

موضوع تصغير حجم الملف التنفيذي مثير بالفعل

ياليت لو احد الخبراء بهيئة الملفات التفيذية ( وما يهمنا هنا هو بالتحديد الـ PE ) يحدثنا عن الطريقة التي تتبعها برامج ضغط الملفات التنفيذية Packers والتي تقوم بضغط الـ Resources الموجودة داخل الملف التنفيذي

أنا أستخدم عادة برنامج upx وهو برنامج رائع تصل نسبة ضغطه للملفات الى 50% وهو يعمل بالاتجاهين (ضغط وفك ضغط) ويعمل على عدة هيئات للملفات التنفيذية الخاصة بأنظمة تشغيل مختلفة ، لكن أحياناً تحصل بعض المشاكل عند فك ضغط ملف تم ضغطه بواسطة برنامج ضغط آخر . المشكلة تكون في مستكشف ويندوز حيث يتجمد عند محاولة عرض هذا الملف - أعتقد أنه لا يستطيع استخلاص الأيقونة الخاصة بالملف.

وجدت في أرشيف هذا القسم موضوع يتحدث عن طريقة عمل برنامج مشفر وهو من أجمل المواضيع في هذا القسم التي تم التطرق فيها إلى هيئات الملفات التنفيذية ويدل على أنه يوجد من سيجيب على هذه التساؤلات البسيطة :

* ما هي خوارزمية الضغط المستخدمة في هذه البرامج مع العلم أنها أفضل من برنامج Winzip

* كيف يتم استخراج الـ Resources أثناء تشغيل الملف المضغوط

* هل ما تقوم به هذه البرامج هو فقط ضغط الـ Resources أم تقوم بأشياء أخرى

بانتظار الاجابة

#6

السلام عليكم ،،

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

#progma comment(linker,"-merge:.rdata=.text)

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

تقبل تحياتي ...

#7

:rolleyes:

حتى الآن ما أحد رد على أسئلتي .. لأن هذا الموضوع حيرني كثيراً ولم أجد شرحاً كافياً عنه في الشبكة - ولا أتوقع أن أجد - طيب ، عندي سؤال أبسط كثير ما هو أفضل Packer موجود حالياً وهل تنصحون باستخدام هذه البرامج دائماً ؟

هذه المرة اذا لم تجيبوا سوف ... أزعل ;)

#8

مرحبا أخي فيصل ...

أنا أبدا مابيرضاني زعلك ... :)

ياصاحبي بالنسبة إلى ضغط ال Resource فالعملية سهلة وممكن برمجتها ولكن يجب أن تبرمج أيضا روتنات ضغظ وفك ضغط في برنامجك أو تستعين بمكتبة جاهزة .

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

وعلى كل يمكن معرفة منطقة ال Resource من معرفة ال sections في ملف ال PE وsection على الأغلب اسمه .rsrc .. ويمكن ضغطه بخوارزمية معينة ومن ثم عند تنفيذ البرنامج يتم فك ضغطه في الذاكرة ... :)

هذا بشكل عام وإذا بدك تفاصيل أكثر فأنا جاهز .. :)

Coding on the Cloud and for the Cloud!

My Blog

#9

:) شكراً عزيزي هاني

واذا كان لديك وقت فبالتأكيد نرغب بالمزيد وخاصة عن كيفية اضافة كود للملف التنفيذي ( ليس كود مصدري !!! ) يقوم بفك ضغط الـ Resources في الذاكرة ولكن هل هذه البرامج تستخدم خوارزميات الضغط المعروفة ( مثل خوارزمية Lempel-Ziv algorithm أو غيرها )

شكراً لتجاوبك مرة أخرى :)

أما بالنسبة لأفضل برامج الـ Packers فقد وجدت قبل قليل هذه الصفحة التي تقوم بعمل مقارنة بين هذه البرامج

http://compression.ca/act-exepack.html

#10

السلام عليكم ،

وجدت أجوبة لبعض أسئلتي

يستخدم upx مكتبة اسمها UCL تستخدم لضغط الـ Resouces وبعد ضغطها يتم اضافة روتين فك الضغط الى نقطة بداية البرنامج وبعد تنفيذه يتم الانتقال الى نقطة بداية البرنامج الأصلي والتي تكون محفوظة مسبقاً ، الموضوع (لذيذ :) ) أليس كذلك

يمكن انزال الشفرة المصدرية ( بلغة هذا المنتدى ;) ) من هذه الوصلة

http://wildsau.idv.uni-linz.ac.at/mfx/down...1.20-src.tar.gz

لم أكن أعلم أنهم نشروا الشفرة المصدرية الا الآن ولكن عندما حاولت ترجمته ضهر لي عدة أخطاء مع أنهم ذكروأ أنه يمكن ترجمته بـ VC++ 6 (بالاضافة الى ترجمته في لينكس )

هذا ما أردت ذكره ومع السلامة

هذا الموضوع مغلق.

مواضيع مشابهة