ورود

View Full Version : سوال: حجم بالای فایل های اجرایی تولید شده در VISUAL C++



IMANAZADI
شنبه 07 خرداد 1390, 13:56 عصر
با سلام خدمت دوستان عزیز
سوالات گذشته که همچنان بی جواب موندن لااقل این سوال رو جواب بدید
یک سوال فنی
من زیاد شنیدم که میشه با ویژوال C++ ویروس های با قابلیت های زیاد نوشت
سوال اینکه برای اینکه یک برنامه بدون نصب یعنی پرتابل ایجاد کنیم باید گزینه Use MFC in a Static Library را انتخاب کنیم تا تمام فایل های مورد نیاز به فایل ATTACH بشند
حالا با این شرایط اگر در MFC یک برنامه DIALOG با شرایط فوق ایجاد کنیم و هیچ کدی یا ابزاری روی فرم نزاریم و پروژه را در حالت RELEASE کامپایل کنیم حجم فایل EXE موجود 1.6 مگا بایت می شود که از نظر حجمی بالاست در شرایطی که ویروس حجمش خیلی کمه و در نهایت حدود 100 تا 300 کیلو بایت می باشد
لطفا در این خصوص راهنمایی بفرمائید .

alpotkin
شنبه 07 خرداد 1390, 15:35 عصر
سلام
خوب شما از win32 استفاده کن که اکثرن هم از نوع کنسول هستند
چه اصراری بر استفاده از mfc داری

IMANAZADI
یک شنبه 08 خرداد 1390, 21:47 عصر
دوست گرامی شما کلا صورت مسئله رو حذف کردید
اصراری ندارم ولی چه فرقی بین MFC و WIN32 هست از نظر برنامه ایی
در WIN32 هم با کد یک پنجره درست کردم حجمش بازم زیاد هست
کنسول نمیخوام باید برنامه دیالوگ باشه
چه جوری در VB6 یک فرم که کلی هم کد و ابزار داره وقتی کامپایل می کنیم میشه چند کیلو بایت ولی در VISUAL C++ حجم یک پنجره ساده از مگابایت کمتر نمیشه

alpotkin
دوشنبه 09 خرداد 1390, 11:35 صبح
نه دوست عزیز من هم در وین32 بازی نوشتم در حد 40 کیلوبایت
من ندیدم در وین32 پنجره بسازی حجمش اونی که شما میگی بشه! یعنی همه برنامه هام هر چند خیلی کوچیک زیر 200 کیلوبایت هستن
من بیشتر از این اطلاع ندارم ... شرمنده

IMANAZADI
پنج شنبه 12 خرداد 1390, 09:11 صبح
دوست عزیز میشه لطف کنید سورس این بازی رو قرار بدید
شاید از روی اون تونستم یه چیزایی متوجه بشم

alpotkin
پنج شنبه 12 خرداد 1390, 11:37 صبح
سلام

دوست عزیز من قصد گذاشتن کد بازیم رو ندارم ... من بازیم رو با استفاده از رابط گرافیکی دایرکت ایکس نوشتم
شما چیزی رو که میخوایی بگو من جواب میدم ...

مرسی

IMANAZADI
جمعه 13 خرداد 1390, 09:33 صبح
شما دوست عزیز یک سورس برنامه به من بده که تو اون فقط یک پنجره با یک کلید که وقتی روش کلیک میکنه یک پیام رو نشون بده
ببینم حجم برنامه شما چقدر هست و چرا من وقتی یک پنجره ساده به شکل بالا درست میکنم حجم فایل اجرایی از 1 مگ کمتر نمیشه
البته فایل به صورت STATIC LIBRARY باشه که روی هر سیستمی بدون نیاز به فایلی اجرا بشه چون فایل در حالت shared DLL حجمش کمه ولی وقتی روی یک سیستم دیگه اجراش میکنی ERROR میده و یک فایل DLL درخواست میکنه

alpotkin
جمعه 13 خرداد 1390, 11:54 صبح
MFC به این صورت حجمش زیاد میشه ...
ولی حدس میزنم در حالت win32 اگر کتابخونه ای لینک نکنی از کتابخانه های استاندارد خود ویندوز استفاده میکنه (کاش یکی بود این رو تایید میکرد) مطمئن نیستم
به هر من معذرت میخوام که ندانسته در مورد وین 32 جواب دادم

مرسی

Nima_NF
شنبه 14 خرداد 1390, 04:00 صبح
شاید در ظاهر فرقی بین MFC و Win32 نباشه اما از لحاظ حجمی و کارایی با هم متفاوتند.
MFC مخصوصا در نسخه های اخیر امکاناتی فراتر از win32 به شکل کتابخانه های جانبی دارد مانند (MFC Feature Pack library) که حجم برنامه در حالت static linking را به شدت بالا می برد.

همان طوری که alpotkin اشاره کردند، اگر مستقیم از win32 استفاده کنید می توانید برنامه کوچک با حجم حدود 50k بنویسید. چون در این حالت فقط کتابخانه های CRT به شکل استاتیک لینک می شوند و دیگر کتابخانه های MFC به فایل اجرایی اضافه نمی شوند.
در حالت win32 باید به منوی ++C/C و سپس code generation بروید و در قسمت runtime library حالت MT را انتخاب کنید تا برنامه به شکل static لینک شود و دیگر به dll نیاز نباشد باقی در ویندوز هست.

IMANAZADI
شنبه 14 خرداد 1390, 22:34 عصر
پس یه جورایی دوستان ویروس نویسی در C++ بی فایده است و باید همون VB6 را مد نظر داشته باشیم

Nima_NF
یک شنبه 15 خرداد 1390, 01:46 صبح
پس یه جورایی دوستان ویروس نویسی در C++ بی فایده است و باید همون VB6 را مد نظر داشته باشیم
بعد از این توضیحات، این پاسخ عجیب بود!

همان طور که توضیح دادم شما باید از win32 و ++C برای نوشتن برنامه کم حجم استفاده کنید و از MFC برای Application های بزرگ تر.
MFC همان توابع win32 را در قالب class ارائه می کند و یکسری امکاناتی جانبی هم اضافه می کند.
بسیاری از ویروس ها هم مستقیما با win32 هستند.

IMANAZADI
یک شنبه 15 خرداد 1390, 09:51 صبح
متاسفانه در ایران اکثرا روی MFC متمرکز هستند
دوستان کسی سورس WIN32 کم حجم مرتبط با موضوع نداره

r00tkit
یک شنبه 15 خرداد 1390, 10:18 صبح
دقیقا می خوای چی کار کنی ؟

IMANAZADI
یک شنبه 15 خرداد 1390, 10:32 صبح
کار خاصی نمیخوام کنم
دنبال نوشتن یک برنامه ساده پرتابل چند کیلو بایتی قابل اجرا روی تمامی سیستم ها به زبان C++ بودم که با MFC نوشتم ولی حجمش از مگ کمتر نمیشه
میخواستم بدونم چرا حجم یک برنامه ساده MFC از ویژوال C++ با یک برنامه VB6 اینقدر زیاد هست در صورتیکه C++ میشه گفت مادر تمام زبان هاست

r00tkit
یک شنبه 15 خرداد 1390, 10:45 صبح
مقایسه های تو اصلا درست نیست ساختار c++ MFC با چرتی مثل VB قابل مقایسه نیست معماری هاشون فرق داره نوع LINK شدن و...... مثلا یه برنامه خیلی سنگین با C# حجمش خلی کم تر از یه برنامه در C++ هستش انجا DLL ها reference می شن اینجا لینک می شن و.....

Nima_NF
یک شنبه 15 خرداد 1390, 21:51 عصر
متاسفانه در ایران اکثرا روی MFC متمرکز هستند
دوستان کسی سورس WIN32 کم حجم مرتبط با موضوع نداره

این یک برنامه کوچک Mouse هست با win32 :
http://barnamenevis.org/showthread.php?122363-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF%DB%8C-%D9%86%D9%88%D8%B4%D8%AA%D9%87-%D8%B4%D8%AF%D9%87-%D8%A8%D8%A7-vc&p=600604&viewfull=1#post600604

سورس فوق را تغییر دادم تا به شکل static کامپایل شود و فایل اجرایی هم بدون نیازمندی به dll هست. کامپایلر هم VC++2010 هست، اما می توانید آن را در نسخه های قبلی نیز کامپایل کنید ( در این صورت فایل ها را در یک پروژه جدید win32 باید کپی کنید)

دوستان خیلی زیادی در ایران با win32 آشنا هستند، تقریبا همه افرادی که با DirectX و برنامه های گرافیکی و سه بعدی و بازی آشنا هستند.

ضمنا اگر هم تعداد کمی از ایرانی ها فرضا چیزی را خوب بلد باشند دلیل بر این نمی شود که نتیجه گیری کنیم پس "بی فایده" هست!