دیس‌اسمبلر: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
ابرابزار، اصلاح املا، برچسب ویکی‌سازی
MahdiBot (بحث | مشارکت‌ها)
خط ۲:
 
'''دیس اسمبلر''' {{به انگلیسی|Disassembler}} برنامه‌ای کامپیوتری است که زبان ماشین را به [[زبان اسمبلی]] ترجمه می‌کند، عملیات معکوس آن از یک اسمبلر است.
یک دیس اسمبلر با دی کامپایلر تفاوت‌هایی دارد که هدف یک زبان سطح بالا به جای زبان اسمبلی است. جداسازی قطعات، خروجی از یک اسمبلر اغلب برای انسان فرمت بندی شده است_قابلیت خواندن به جای مناسب بودن برای ورودی به اسمبلر، آن را عمدتاعمدتاً یک ابزار مهندسی معکوس می‌سازد.
 
کد منبع زبان اسمبلی به طور کلی مجاز به استفاده از ثابت‌ها و نظرات برنامه نویس است. که اینها معمولامعمولاً از کد زبان ماشین گردآوری شده توسط اسمبلر حذف می‌شود. در اینصورت، عامل دیس اسمبلر در کد ماشین، قطعات جداسازی تولید شده فاقد این ثبات‌ها و نظرات می‌گردد؛ خروجی دیس اسمبل شده جدا دشوارتر می‌شود برای انسان که آن را به کد منبع تفسیر شده اصل ترجمه کند. برخی دیس اسمبلرها امکان استفاده از اطلاعات اشکال زدایی نمادین را در فایلهای شی(object file) مانندELF را می‌دهد. محاوره اسمبلر اجازه می‌دهد به کاربر انسان تا کاراکتر حافظه‌ای برای ارزشها یا مناطقی از کد در یک قسمت تعاملی تشکیل دهد. بینش انسان اعمال شده به فرایند جداسازی قطعات، اغلب به موازات خلاقیت انسان در روند نوشتن کد است.
 
جداسازی قطعات یک علم دقیق نیست:در سیستم عامل هایCISC با دستور العمل متغیر عرض، ویا در صورت وجود کد خود متغیر، ممکن است برای یک برنامه واحد به دو یا تعداد بیشتری جداسازی قطعات معقول تر نیاز پیدا کنیم. تعیین دستورالعمل که در واقع مواجه شده است در طی یک اجرا از این برنامه ثبات قابل حل را به مشکل توقف شده کاهش می‌دهد.
خط ۱۰:
== مشکلات جداسازی قطعه‌ها ==
 
نوشتن یک دی اسمبلر که به تولید کد که زمانی که جمع شده است تولید دقیق باینری اصلی را امکان‌پذیر می‌کند؛ با این حال، اغلب تفاوت وجود دارد. این امر خواسته‌های در بازنمونگری از اسمبلر است. به عنوان مثال در اسمبلرهای x۸۶ یک انتخاب دلخواه بین دو کد دودویی برای چیزی به عنوان مثال "AX MOV، BX" طول می‌کشد. اگر کد اصلی از انتخاب‌های دیگر استفاده کند، کد اصلی به سادگی نمی‌تواند در هر نقطه داده شده در زمان تکثیر شود. با این حال، حتی زمانی که جداسازی قطعات کاملاکاملاً درست است تولید می‌شود، مشکلات باقی می‌ماند در صورتی که برنامه نیاز به اصلاح داشته باشد. به عنوان مثال همان دستور پرش زبان ماشین را می‌توان با کد اسمبلی تولید کرد برای پرش به یک محل مشخص (برای مثال برای اجرای کد خاص)، یا برای مثال به جست و خیز یا پرش بر روی یک شاخه نا خواسته یعنی بدون شرط. دی اسمبلر نمی‌تواند بفهمد که چه چیزی در نظر گرفته شده است و ممکن است از سینتکس استفاده کند، و ایجاد کند یک جداسازی قطعات یعنی دیس اسمبلی که باینری اصلی را بازتولید کند. با این حال، اگر یک برنامه نویس می‌خواهد برای اضافه کردن دستورات بین دستور پرش و مقصد آن، لازم است به درک عملیات این برنامه برای تعیین اینکه آیا پرش باید مطلق یا نسبی، یعنی، چه آن قسمت را باید در یک مکان ثابت باقی می‌ماند، و یا می‌شود است نقل مکان کرد تا به عنوان پرش به هر دو دستورالعمل اصلی و اضافه شده است.
 
== نمونه‌هایی از دیس اسمبلرها ==
 
اسمبلر ممکن است به تنهایی و یا تعاملی باشد. یک دی اسمبلر مستقل به هنگام اجرا یک فایل زبان اسمبلی تولید می‌کند که می‌تواند مورد بررسی قرار گیرد. یک تعاملی نشان می‌دهد تاثیر دو گونه تغییر کاربر را فورافوراً. به عنوان مثال، اسمبلر ممکن است در ابتدا نمی دانندنمی‌دانند که یک بخش از برنامه است که در واقع کد و درمان آن را به عنوان داده. در صورتی که کاربر مشخص می‌کند که در آن فعال است، در نتیجه کد جدا شده است، بلافاصله نشان داده شده است، اجازه می‌دهد تا کاربر را به بررسی آن و برداشتن گام‌های بیشتر در همان اجرا. هر دیباگر تعاملی برخی از راه دیدن جداسازی قطعات از برنامه در حال debugged باشد. اغلب، ابزار جداسازی قطعات همان خواهد شد که به عنوان یک اسمبلر مستقل توزیع همراه با دیباگر بسته بندی شده. به عنوان مثال، objdump، بخشی از GNU Binutils هستند، به GDB دیباگر تعاملی مرتبط.
IDA
 
خط ۲۴:
http://en.wikipedia.org/wiki/Disassembler
 
[[رده:اشکال‌زدایی]]
[[رده:مقاله‌های ایجاد شده توسط ایجادگر]]