دیساسمبلر
دیس اسمبلر (به انگلیسی: Disassembler) برنامهای کامپیوتری است که زبان ماشین را به زبان اسمبلی ترجمه میکند، عملیات معکوس آن از یک اسمبلر است. یک دیس اسمبلر با دی کامپایلر تفاوتهایی دارد؛ که هدف یک زبان سطح بالا به جای زبان اسمبلی است. جداسازی قطعات، خروجی از یک اسمبلر اغلب برای انسان فرمت بندی شدهاست_قابلیت خواندن به جای مناسب بودن برای ورودی به اسمبلر، آن را عمدتاً یک ابزار مهندسی معکوس میسازد.
کد منبع زبان اسمبلی بهطور کلی مجاز به استفاده از ثابتها و نظرات برنامهنویس است؛ که اینها معمولاً از کد زبان ماشین گردآوری شده توسط اسمبلر حذف میشود. در این صورت، عامل دیس اسمبلر در کد ماشین، قطعات جداسازی تولید شده فاقد این ثباتها و نظرات میشود؛ خروجی دیس اسمبل شده جدا دشوارتر میشود برای انسان که آن را به کد منبع تفسیر شده اصل ترجمه کند. برخی دیس اسمبلرها امکان استفاده از اطلاعات اشکال زدایی نمادین را در فایلهای شی(object file) مانندELF را میدهد. محاوره اسمبلر اجازه میدهد به کاربر انسان تا کاراکتر حافظهای برای ارزشها یا مناطقی از کد در یک قسمت تعاملی تشکیل دهد. بینش انسان اعمال شده به فرایند جداسازی قطعات، اغلب به موازات خلاقیت انسان در روند نوشتن کد است.
جداسازی قطعات یک علم دقیق نیست:در سیستم عامل هایCISC با دستورالعمل متغیر عرض، ویا در صورت وجود کد خود متغیر، ممکن است برای یک برنامه واحد به دو یا تعداد بیشتری جداسازی قطعات معقول تر نیاز پیدا کنیم. تعیین دستورالعمل که در واقع مواجه شدهاست در طی یک اجرا از این برنامه ثبات قابل حل را به مشکل توقف شده کاهش میدهد.
مشکلات جداسازی قطعهها
[ویرایش]نوشتن یک دی اسمبلر که به تولید کد که زمانی که جمع شدهاست تولید دقیق باینری اصلی را امکانپذیر میکند؛ با این حال، اغلب تفاوت وجود دارد. این امر خواستههای در بازنمونگری از اسمبلر است. به عنوان مثال در اسمبلرهای x۸۶ یک انتخاب دلخواه بین دو کد دودویی برای چیزی به عنوان مثال "AX MOV, BX" طول میکشد. اگر کد اصلی از انتخابهای دیگر استفاده کند، کد اصلی به سادگی نمیتواند در هر نقطه داده شده در زمان تکثیر شود. با این حال، حتی زمانی که جداسازی قطعات کاملاً درست است تولید میشود، مشکلات باقی میماند در صورتی که برنامه نیاز به اصلاح داشته باشد. به عنوان مثال همان دستور پرش زبان ماشین را میتوان با کد اسمبلی تولید کرد برای پرش به یک محل مشخص (برای مثال برای اجرای کد خاص)، یا برای مثال به جست و خیز یا پرش بر روی یک شاخه ناخواسته یعنی بدون شرط. دی اسمبلر نمیتواند بفهمد که چه چیزی در نظر گرفته شدهاست و ممکن است از سینتکس استفاده کند، و ایجاد کند یک جداسازی قطعات یعنی دیس اسمبلی که باینری اصلی را بازتولید کند. با این حال، اگر یک برنامهنویس میخواهد برای اضافه کردن دستورات بین دستور پرش و مقصد آن، لازم است به درک عملیات این برنامه برای تعیین اینکه آیا پرش باید مطلق یا نسبی، یعنی، چه آن قسمت را باید در یک مکان ثابت باقی میماند، یا میشود است نقل مکان کرد تا به عنوان پرش به هر دو دستورالعمل اصلی و اضافه شدهاست.
نمونههایی از دیس اسمبلرها
[ویرایش]اسمبلر ممکن است به تنهایی یا تعاملی باشد. یک دی اسمبلر مستقل به هنگام اجرا یک فایل زبان اسمبلی تولید میکند که میتواند مورد بررسی قرار گیرد. یک تعاملی نشان میدهد تأثیر دو گونه تغییر کاربر را فوراً. به عنوان مثال، اسمبلر ممکن است در ابتدا نمیدانند که یک بخش از برنامه است که در واقع کد و درمان آن را به عنوان داده. در صورتی که کاربر مشخص میکند که در آن فعال است، در نتیجه کد جدا شدهاست، بلافاصله نشان داده شدهاست، اجازه میدهد تا کاربر را به بررسی آن و برداشتن گامهای بیشتر در همان اجرا. هر دیباگر تعاملی برخی از راه دیدن جداسازی قطعات از برنامه در حال debugged باشد. اغلب، ابزار جداسازی قطعات همان خواهد شد که به عنوان یک اسمبلر مستقل توزیع همراه با دیباگر بستهبندی شده. به عنوان مثال، objdump، بخشی از GNU Binutils هستند، به GDB دیباگر تعاملی مرتبط. IDA
OllyDbg سطح اسمبلر ۳۲ بیتی اشکالزدا تجزیه و تحلیل OLIVER و SIMON شامل Disassemblerها برای اسمبلر، گرفتند، کوبول، و PL / ۱
منابع
[ویرایش]Text is available under the CC BY-SA 4.0 license; additional terms may apply.
Images, videos and audio are available under their respective licenses.