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

محتوای حذف‌شده محتوای افزوده‌شده
LetsDoItBot (بحث | مشارکت‌ها)
تمیزکاری، + ویرایش با ماژول ابرابزار با استفاده از AWB
خط ۹:
 
== مشکلات جداسازی قطعه‌ها ==
نوشتن یک دی اسمبلر که به تولید کد که زمانی که جمع شده است تولید دقیق باینری اصلی را امکان‌پذیر می‌کند؛ با این حال، اغلب تفاوت وجود دارد. این امر خواسته‌های در بازنمونگری از اسمبلر است. به عنوان مثال در اسمبلرهای x۸۶ یک انتخاب دلخواه بین دو کد دودویی برای چیزی به عنوان مثال "AX MOV, BX" طول می‌کشد. اگر کد اصلی از انتخاب‌های دیگر استفاده کند، کد اصلی به سادگی نمی‌تواند در هر نقطه داده شده در زمان تکثیر شود. با این حال، حتی زمانی که جداسازی قطعات کاملاً درست است تولید می‌شود، مشکلات باقی می‌ماند در صورتی که برنامه نیاز به اصلاح داشته باشد. به عنوان مثال همان دستور پرش زبان ماشین را می‌توان با کد اسمبلی تولید کرد برای پرش به یک محل مشخص (برای مثال برای اجرای کد خاص)، یا برای مثال به جست و خیز یا پرش بر روی یک شاخه نا خواسته یعنی بدون شرط. دی اسمبلر نمی‌تواند بفهمد که چه چیزی در نظر گرفته شده است و ممکن است از سینتکس استفاده کند، و ایجاد کند یک جداسازی قطعات یعنی دیس اسمبلی که باینری اصلی را بازتولید کند. با این حال، اگر یک برنامه‌نویس می‌خواهد برای اضافه کردن دستورات بین دستور پرش و مقصد آن، لازم است به درک عملیات این برنامه برای تعیین اینکه آیا پرش باید مطلق یا نسبی، یعنی، چه آن قسمت را باید در یک مکان ثابت باقی می‌ماند، و یا می‌شود است نقل مکان کرد تا به عنوان پرش به هر دو دستورالعمل اصلی و اضافه شده است.
 
== نمونه‌هایی از دیس اسمبلرها ==
اسمبلر ممکن است به تنهایی و یا تعاملی باشد. یک دی اسمبلر مستقل به هنگام اجرا یک فایل زبان اسمبلی تولید می‌کند که می‌تواند مورد بررسی قرار گیرد. یک تعاملی نشان می‌دهد تأثیر دو گونه تغییر کاربر را فوراً. به عنوان مثال، اسمبلر ممکن است در ابتدا نمی‌دانند که یک بخش از برنامه است که در واقع کد و درمان آن را به عنوان داده. در صورتی که کاربر مشخص می‌کند که در آن فعال است، در نتیجه کد جدا شده است، بلافاصله نشان داده شده است، اجازه می‌دهد تا کاربر را به بررسی آن و برداشتن گام‌های بیشتر در همان اجرا. هر دیباگر تعاملی برخی از راه دیدن جداسازی قطعات از برنامه در حال debugged باشد. اغلب، ابزار جداسازی قطعات همان خواهد شد که به عنوان یک اسمبلر مستقل توزیع همراه با دیباگر [[بسته‌بندی]] شده. به عنوان مثال، objdump، بخشی از GNU Binutils هستند، به GDB دیباگر تعاملی مرتبط.
IDA