اهداف فروشندگان سیگنال غیرمجاز

ساخت وبلاگ

سیگنال های زیر زمانی ایجاد می شوند که یک خطای جدی برنامه توسط سیستم عامل یا خود رایانه تشخیص داده می شود. به طور کلی ، همه این سیگنال ها نشانه هایی هستند که برنامه شما به نوعی به طور جدی شکسته می شود ، و معمولاً راهی برای ادامه محاسبات با خطا وجود ندارد.

برخی از برنامه ها به منظور مرتب کردن قبل از خاتمه ، سیگنال های خطای برنامه را کنترل می کنند. به عنوان مثال ، برنامه هایی که خاموش کردن ورودی ترمینال را خاموش می کنند ، باید سیگنال های خطای برنامه را کنترل کنند تا دوباره به عقب برگردند. کنترل کننده باید با مشخص کردن عملکرد پیش فرض برای سیگنالی که اتفاق افتاده و سپس دوباره آن را انجام دهد ، پایان یابد. این باعث می شود برنامه با آن سیگنال خاتمه یابد ، گویی که یک کنترل کننده نداشته است.(به دستگیرهایی مراجعه کنید که روند را خاتمه می دهند.)

خاتمه نتیجه نهایی معقول از خطای برنامه در اکثر برنامه ها است. با این حال ، سیستم های برنامه نویسی مانند LISP که می توانند برنامه های کاربر کامپایل شده را بارگیری کنند ، حتی اگر یک برنامه کاربر خطایی وارد کند ، ممکن است نیاز به اجرای آن داشته باشد. این برنامه ها دارای دستگیره هایی هستند که از LongJMP برای کنترل کنترل به سطح فرمان استفاده می کنند.

اقدام پیش فرض برای همه این سیگنال ها این است که باعث خاتمه روند شود. اگر این سیگنالها را مسدود یا نادیده بگیرید یا برای آنها که به طور عادی باز می گردند ، دستگیرنده هایی را ایجاد کنید ، برنامه شما احتمالاً در صورت وقوع چنین سیگنالها به طرز وحشتناکی شکسته می شود ، مگر اینکه به جای یک خطای واقعی توسط افزایش یا کشتن ایجاد شوند.

هنگامی که یکی از این سیگنال های خطای برنامه یک فرآیند را خاتمه می دهد ، یک پرونده زباله اصلی را نیز می نویسد که وضعیت فرآیند را در زمان خاتمه ثبت می کند. پرونده هسته زباله Core Core نامگذاری شده است و در هر فهرست نوشته شده است که در آن زمان در این فرآیند جریان دارد.(در سیستم های GNU/HURD ، می توانید نام پرونده برای زباله های اصلی را با متغیر محیط Corefile مشخص کنید.) هدف از پرونده های اصلی زباله به گونه ای است که می توانید آنها را با یک اشکال زدایی بررسی کنید تا بررسی کنید که چه چیزی باعث خطا شده است.

ماکرو: int sigfpe

سیگنال SIGFPE خطای حسابی کشنده را گزارش می کند. اگرچه این نام از "استثناء نقطه شناور" گرفته شده است ، این سیگنال در واقع تمام خطاهای حسابی ، از جمله تقسیم صفر و سرریز را در بر می گیرد. اگر یک برنامه داده های عدد صحیح را در مکانی ذخیره کند که سپس در یک عملیات شناور مورد استفاده قرار می گیرد ، این اغلب باعث یک استثناء "عمل نامعتبر" می شود ، زیرا پردازنده نمی تواند داده ها را به عنوان یک شماره نقطه شناور تشخیص دهد.

استثنائات واقعی شناور یک موضوع پیچیده است زیرا انواع مختلفی از استثنائات با معانی ظریف وجود دارد و سیگنال SIGFPE بین آنها تمایز قائل نیست. استاندارد IEEE برای حسابهای باینری شناور (ANSI/IEEE STD 754-1985 و ANSI/IEEE STD 854-1987) استثنائات مختلف نقطه شناور را تعریف می کند و برای گزارش وقایع خود نیاز به سیستم های رایانه ای دارد. با این حال ، این استاندارد مشخص نمی کند که چگونه استثنائات گزارش شده است ، یا اینکه سیستم عامل می تواند به برنامه نویس ارائه دهد.

سیستم های BSD یک استدلال اضافی را به کنترل کننده SIGFPE ارائه می دهند که دلایل مختلف استثنا را متمایز می کند. برای دسترسی به این استدلال ، شما باید کنترل کننده را برای پذیرش دو آرگومان تعریف کنید ، این بدان معنی است که برای ایجاد کنترل کننده باید آن را به یک نوع عملکرد یک استدلال برسانید. کتابخانه GNU C این استدلال اضافی را ارائه می دهد ، اما این مقدار فقط در سیستم عامل هایی که اطلاعات را ارائه می دهند (سیستم های BSD و سیستم های GNU) معنی دار است.

سرریز عدد صحیح (در یک برنامه C غیرممکن است ، مگر اینکه شما به دام انداختن سرریز به روشی خاص سخت افزاری امکان پذیر باشید).

تقسیم عدد صحیح توسط صفر.

دامنه زیر (چیزی که برنامه های C هرگز آن را بررسی نمی کنند).

تله سرریز شناور.

تقسیم شناور/اعشاری توسط صفر.

تله زیر جریان شناور.(به دام انداختن در زیر جریان شناور معمولاً فعال نیست.)

تله سرریز اعشاری.(فقط چند دستگاه دارای حسابی اعشاری هستند و C هرگز از آن استفاده نمی کند.)

کلان: int sigill ¶

نام این سیگنال از "دستورالعمل غیرقانونی" گرفته شده است. این بدان معناست که برنامه شما در تلاش است تا زباله یا یک دستورالعمل ممتاز را اجرا کند. از آنجا که کامپایلر C فقط دستورالعمل های معتبری ایجاد می کند ، سیگیل به طور معمول نشان می دهد که پرونده اجرایی خراب است ، یا اینکه شما در حال تلاش برای اجرای داده ها هستید. برخی از روشهای متداول ورود به وضعیت دوم با عبور از یک شیء نامعتبر است که در آن یک اشاره گر به یک عملکرد انتظار می رود ، یا با نوشتن گذشته از یک آرایه اتوماتیک (یا مشکلات مشابه با نشانگرها به متغیرهای اتوماتیک) و فاسد کردن داده های دیگر در موردپشته مانند آدرس بازگشت یک قاب پشته.

همچنین می توان سیگیل را هنگام سرریز پشته ایجاد کرد ، یا وقتی سیستم در اجرای کنترل کننده برای سیگنال مشکل دارد.

ماکرو: int sigsegv

این سیگنال زمانی ایجاد می شود که یک برنامه سعی در خواندن یا نوشتن خارج از حافظه ای که برای آن اختصاص داده شده است ، یا نوشتن حافظه ای که فقط قابل خواندن است.(در واقع ، سیگنال ها فقط زمانی اتفاق می افتند که برنامه به اندازه کافی در خارج از کشور پیش برود تا توسط مکانیسم محافظت از حافظه سیستم تشخیص داده شود.) این نام مخفف "نقض تقسیم بندی" است.

روشهای متداول برای به دست آوردن یک وضعیت SIGSEGV شامل تنظیم یک نشانگر تهی یا نامعلوم ، یا هنگامی که از یک نشانگر برای قدم زدن در یک آرایه استفاده می کنید ، اما در بررسی پایان آرایه ناکام است. در بین سیستم ها متفاوت است که آیا در حال مشاهده یک نشانگر تهی ، SIGSEGV یا SIGBUS را تولید می کند.

ماکرو: int sigbus

این سیگنال هنگامی تولید می شود که یک نشانگر نامعتبر از آن جدا شود. مانند SIGSEGV ، این سیگنال به طور معمول نتیجه عدم همبستگی یک نشانگر غیرقانونی است. تفاوت بین این دو در این است که SIGSEGV نشانگر دسترسی نامعتبر به حافظه معتبر است ، در حالی که Sigbus نشانگر دسترسی به یک آدرس نامعتبر است. به طور خاص ، سیگنال های سیگبوس اغلب ناشی از عدم استفاده از یک نشانگر نادرست است ، مانند مراجعه به یک عدد صحیح چهار کلمه در آدرس که توسط چهار قابل تقسیم نیست.(هر نوع رایانه نیازهای خاص خود را برای تراز آدرس دارد.)

نام این سیگنال مخفف "خطای اتوبوس" است.

ماکرو: int sigabrt

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

کلان: Int Sigiot

تولید شده توسط دستورالعمل PDP-11 "IoT". در بیشتر دستگاه ها ، این فقط نام دیگری برای Sigabrt است.

ماکرو: int sigtrap

تولید شده توسط دستورالعمل نقطه شکست دستگاه و احتمالاً سایر دستورالعمل های تله. این سیگنال توسط اشکال زدایی استفاده می شود. برنامه شما احتمالاً فقط در صورت اجرای دستورالعمل های بد فقط Sigtrap را می بیند.

ماکرو: int sigemt

دام شبیه ساز ؛این نتیجه از برخی دستورالعمل های غیر قابل اجرا است که ممکن است در نرم افزار تقلید شود ، یا عدم موفقیت سیستم عامل در تقلید صحیح آنها.

کلان: int sigsys

تماس سیستم بد ؛یعنی دستورالعمل تله به سیستم عامل اجرا شد ، اما شماره کد برای تماس با سیستم نامعتبر بود.

استراتژی‌های اسکالپ...
ما را در سایت استراتژی‌های اسکالپ دنبال می کنید

برچسب : نویسنده : ناصر تقوایی بازدید : 59 تاريخ : شنبه 6 خرداد 1402 ساعت: 0:42