PDA

View Full Version : اسمبلی ها چيستند ؟



Xcalivorse
سه شنبه 18 تیر 1387, 21:32 عصر
با سلام.
دوستان می خواستم بپرسم حکایت این اسمبلی ها در #C چیست و به چه کاری می آیند.
اگر منبع در دست دارید ممنون میشم معرفیش کنین.
با تشکر از تمامی شما عزیزان.

hdv212
سه شنبه 18 تیر 1387, 22:54 عصر
تمام فایلهای دات نت اعم از اجرایی و یا dll همگی اسمبلی هستند، برای اطلاعات بیشتر میتونید به کتاب Pro C# 2005 and the .NET 2.0 Platform (http://www.apress.com/book/view/1590594193)از انتشارات Apress مراجعه کنید.

jeus
چهارشنبه 19 تیر 1387, 00:52 صبح
دوست من اسمبلی ها فایلهای هایی هستند که بریا پلت فرم.net آماده شده اند
وقتی شما برنامه را با C++ مینویسید برنامه 1:تفسیر میشه 2 : زبان ماشین در می آد و بعد اجرا میشه
اما در تنکولوژی .Net به این صورت است که برنامه تفسیر میشه به زبان اسمبلی در می آد و بعد توسط .net کامپایل شده و به زبان ماشین در می آید و بعد اجرا میشه
این پروسه اگر چه کند تر است اما در عوض کنترل کاملی بر عملکرد متغیرها دارد
در اصل اسمبلی زبان پلتفرم .net است
امیدوارم متوجه شدی باشی

sinpin
چهارشنبه 19 تیر 1387, 08:31 صبح
هرگونه خروجي باينري حاصل از managed code ها را اسمبلي گويند.


In the Microsoft .NET (http://en.wikipedia.org/wiki/Microsoft_.NET) framework (http://en.wikipedia.org/wiki/Software_framework), an assembly is a partially compiled (http://en.wikipedia.org/wiki/Compiler) code library for use in deployment, versioning and security. In the Microsoft Windows (http://en.wikipedia.org/wiki/Microsoft_Windows) implementation of .NET, an assembly is a PE (portable executable (http://en.wikipedia.org/wiki/Portable_executable)) file. There are two types: process assemblies (EXE) and library assemblies (DLL). A process assembly represents a process which will use classes (http://en.wikipedia.org/wiki/Class_%28computer_science%29) defined in library assemblies. In version 1.1 of the CLR (http://en.wikipedia.org/wiki/Common_Language_Runtime), classes can only be exported from library assemblies; in version 2.0 this restriction is relaxed. The compiler will have a switch to determine if the assembly is a process or library and will set a flag in the PE file. .NET does not use the extension to determine if the file is a process or library. This means that a library may have either .dll or .exe as its extension. .NET assemblies contain code in CIL (http://en.wikipedia.org/wiki/Common_Intermediate_Language), which is generated from .NET languages (http://en.wikipedia.org/wiki/.NET_languages), which is then compiled into machine language (http://en.wikipedia.org/wiki/Machine_language) at runtime (http://en.wikipedia.org/wiki/Runtime) by the CLR just-in-time compiler (http://en.wikipedia.org/wiki/Just-in-time_compiler).
An assembly can consist of one or more files. Code files are called modules. An assembly can contain more than one code module and since it is possible to use different languages (http://en.wikipedia.org/wiki/Computer_language) to create code modules this means that it is technically possible to use several different languages to create an assembly. In practice this rarely happens, principally because Visual Studio (http://en.wikipedia.org/wiki/Visual_Studio) only allows developers to create assemblies that consist of a single code module.


منبع : http://en.wikipedia.org/wiki/.NET_assembly

Xcalivorse
چهارشنبه 19 تیر 1387, 12:15 عصر
منظورم استفاده از اسمبلی ها در برنامه نویسی است.

hdv212
چهارشنبه 19 تیر 1387, 13:17 عصر
کافیه Assembly مورد نظر رو به پروژه ات اضافه کنی، در Solution Explorer روی قسمت References راست کلیک کن و Add Reference رو بزن، در پنجره ی ظاهر شده اسمبلی مورد نظر رو از لیست انتخاب کن و یا به وسیله ی Browse کردن، از کامپیوترت به پروژه ات اضافه کن.

Xcalivorse
چهارشنبه 19 تیر 1387, 13:20 عصر
مثلا میگن دسترسی به عکسهای درون فایل Exe برنامه از طریق اسمبلی ها یا دسترسی به کنترلها در زمان اجرا با استفاده از نام رشته ای آنها و ...
می خواستم بدونم در کل در برنامه نویسی دات نت استفاده از اسمبلی ها چه امکاناتی رو به برنامه نویس میده و چه جوری باید استفاده بشن ؟
با تشکر از همه شم عزیزان.

jeus
چهارشنبه 19 تیر 1387, 16:11 عصر
دوست من OOP را یاد بگیر این ها در حقیقت همان کلاسها هستند که کپسوله و کامپایل شده اند و تو میتونی از interface انها استفاده کنی

Mahdi.Kiani
چهارشنبه 19 تیر 1387, 20:51 عصر
می خواستم بدونم در کل در برنامه نویسی دات نت استفاده از اسمبلی ها چه امکاناتی رو به برنامه نویس میده و چه جوری باید استفاده بشن ؟



به عنوان نمونه (http://barnamenevis.org/forum/showpost.php?p=538061&postcount=88)

Xcalivorse
پنج شنبه 20 تیر 1387, 14:18 عصر
منظور من در حقیقت اینه که در برنامه ها مختلف دیدم که از کلاسهایی مثل
System.Reflection.Assembly
System.Reflection.AssemblyFlagsAttribute
System.Reflection.AssemblyName
و ...
استفاده میشه اما من نمی دونستم که این کلاسها برای چه کاری هستند و به چه دردی می خورند و یا طرز استفاده از اونها چه شکلیه. این شد که پرسیدم حکایت این اسمبلی ها چیه.
حالا هم اگر دوستان منبعی برای آموزش دارن که آدم حداقل بتونه سر از کار این کلاسها در بیاره ممنون میشم معرفی کنن.

با سپاس و تشکر از تمامی دوستان و عزیزانی که وقت گذشتن و کمک کردن.

hdv212
پنج شنبه 20 تیر 1387, 16:07 عصر
منظور من در حقیقت اینه که در برنامه ها مختلف دیدم که از کلاسهایی مثل
System.Reflection.Assembly
System.Reflection.AssemblyFlagsAttribute
System.Reflection.AssemblyName
و ...
استفاده میشه اما من نمی دونستم که این کلاسها برای چه کاری هستند و به چه دردی می خورند و یا طرز استفاده از اونها چه شکلیه. این شد که پرسیدم حکایت این اسمبلی ها چیه.
با توجه به مواردی که شما گفتید، باید بگم که فضای نام System.Reflection برای استفاده از اسمبلیهای خارجی (فایل های dll یا exe که قبلا توسط برنامه ی تحت دات نت دیگری ایجاد شده باشند) به کار میره، کاربرد دیگه ی این فضای نام، بررسی سورس موجود در اسمبلی مورد نظر هست، به عبارت دیگه دات نت این قابلیت رو داره که به سورس یک فایل dll یا exe (که دات نتی هست)، دسترسی داشته باشید.

Xcalivorse
پنج شنبه 20 تیر 1387, 16:57 عصر
این شد یک سوال و جواب حسابی.
hdv212 عزیز از شما کمال تشکر و قدردانی را دارم.
دوستان عزیز اگر کسی منبع یا راهنمایی برای کار با کلاسهای ذکر شده داره لطفا معرفی کنه.

راستی با توجه به اینکه گفتید بوسیله فضای نام System.Reflection میشه به سورس کدهای فایلهای دات نتی دسترسی داشت 1.میشه تو اونها تغییر هم ایجاد کرد ؟ 2.به فایلهای (فایلهای تصویری و ...) موجود در فایلهای دات نتی میشه دسترسی داشت ؟ 3. روشهایی وجود داره که اجازه ندی دیگران سورس فایلهای دات نتی تو توسط این قابلیت ببینن ؟

hdv212
پنج شنبه 20 تیر 1387, 17:14 عصر
خب برای آشنایی بیشتر میتونید به مستندات MSDN (http://msdn.microsoft.com/en-us/library/system.reflection.aspx) مراجعه کنید.

میشه به سورس کدهای فایلهای دات نتی دسترسی داشت
البته که میشه دسترسی داشت، حتی شما خودتم میتونی برنامه ای بنویسی که سورس اسمبلی های دات نت رو استخراج کنه و نشون بده، یکی از ابزارهای معروف و البته رایگان در این زمینه Reflector هست که میتونید از این لینک (http://www.aisto.com/roeder/dotnet/) دریافت کنید.

1.میشه تو اونها تغییر هم ایجاد کرد ؟
تغییر که نه، لا اقل با ابزارهای رایگان نه، ولی ابزارهای تجاری دیگه ای هستند که سورس فایلهای دات نت رو در میارن و به صورت پروژه به شما تحویل میدن، ابزارها به نام Decompiler های دات نت شناخته میشن.

2.به فایلهای (فایلهای تصویری و ...) موجود در فایلهای دات نتی میشه دسترسی داشت ؟
بله، میشه، فایلهای تصویری و صدا و ... به صورت Resource به اسمبلی های دات نت میچسبند یا اصطلاحا Embedd میشن، یه مقاله ی خوب در این زمینه به همراه سورس کد رو میتونید در این قسمت (http://www.codeproject.com/KB/dotnet/asmex.aspx) مشاهده نمایید.

. روشهایی وجود داره که اجازه ندی دیگران سورس فایلهای دات نتی تو توسط این قابلیت ببینن ؟
بله، همانطور که ابزارهایی برای بررسی سورس کدها وجود داره، برای محافظتشون هم موجود هست، یکی از ابزارهایی که به صورت رایگان در خود Visual Studio موجود هست، Dotfuscator است. ابزارهای تجاری زیادی هم مثل XenoCode (http://www.xenocode.com/Products/Postbuild/) وجود داره که نتیجه ی بهتری رو به شما میدن.