آخرین اخبار و مقالات و مطالب پیرامون زبان اسمبلی در ایران آی سی تی نیوز ، پایگاه فناوری اطلاعات و ارتباطات ایران

بر روی این دامنه اینترنتی

سیستم مدیریت محتوا

پارس

سی ام اس

نصب شده است که نرم افزاری قوی جهت

طراحی سایت

می باشد.

طراحی وب

با استفاده از

پرتال

(

پورتال

) پارس منجر به

طراحی وب سایت

شما می شود.

طراحی وب سایت

کپی رایت

پورتال

پارس

برنامه نویسی به سبک پترس

یکی از مشکلات امنیتی که در بعضی از نرم افزارها مشاهده می شود، سرریزی بافر یا buffer overflow است. سرریزی بافر عموما در زمان اجرا و بسته به ورودی های مختلف برنامه رخ می دهد و حتی می تواند به هکرها کمک کند تا برنامه را تغییر داده و کدهای مخرب در آن وارد کنند. در این مقاله قصد داریم این موضوع را بررسی کنیم و ببینیم سرریزی بافر چیست و چه زمانی اتفاق می افتد.
بافر چیست؟ بافر، حافظه موقتی است که به صورت نرم افزاری و سخت افزاری پیاده سازی می شود، در روش سخت افزاری مثل بافر کیبورد، اطلاعات کلیدهایی که شما روی صفحه کلید فشار داده اید در جایی ذخیره می شود و سیستم عامل آنها را می خواند و پردازش می کند. بافر نرم افزاری به دو صورت قابل پیاده سازی است. 1 در سطح سیستم عامل: سیستم عامل مقداری از حافظه را جهت بافرکردن به خود اختصاص می دهد. این حافظه برای یکسان سازی سرعت دیسک سخت و پردازشگر استفاده می شود. 2 در سطح نرم افزار کاربردی: این حافظه را ما به عنوان برنامه نویس تعریف می کنیم تا امور مختلفی را انجام دهیم. قطعه کد زیر را در نظر بگیرید: void overflow_function (char *str){ char buffer[10]; strcpy(buffer, str); } int main(){ char big_string[14]; strcpy(big_string,"bufferoverflow"); overflow_function(big_string); return 0; } از لحاظ قواعد گرامری این قطعه کد درست است و باید بدون اشکال کار کند اما در زمان اجرا، خطای در حال اجرا صادر خواهد شد با این مضمون: stack around the variable ‘buffer’ was corrupted بسیار خب، این خطا به ما می گوید که متغیر بافر خراب شده است. بیایید ببینیم این کد دقیقا چه کار می کند: ابتدا یک متغیر از نوع رشته به طول 14کاراکتر تعریف کرده و مقدار bufferoverflow را با استفاده از دستور strcpy در آن کپی می کنیم. تا اینجا مشکل خاصی نیست و کد درست است. حال مقدار big_string به تابع overflow_function پاس داده می شود. این تابع سعی دارد مقدار big_string که به آن داده شده است را درbuffer کپی کند اما این عمل ناموفق می ماند و در نتیجه برنامه خطا می دهد. چرا خطا می دهد؟ این تابع می خواهد مقدار 14کاراکتر را در یک رشته 10کاراکتری کپی کند، طبیعی است که این کار را نمی تواند درست انجام دهد، برای همین خطا صادر می شود. کمی دقیق تر به مساله نگاه می کنیم: وقتی تابع overflow_function فراخوانی می شود آدرس برگشت به تابع فراخواننده در ثبات sp قرار می گیرد. سپس این تابع سعی می کند مقدار 14کاراکتر را در 10کاراکتر کپی کند و این عمل با موفقیت انجام می شود. فرض کنید بافر در 10خانه اول بعد از آدرس 100h قرار داد و ثبات sp مقدار خانه 10dh را به عنوان آدرس برگشتی تابع overflow_function در خود دارد. حال مقدار 14کاراکتر در متغیر بافر، کپی می شود و در نتیجه خانه های 100h تا 10eh بازنویسی می شوند و سپس کار تابع به پایان می رسد و سیستم عامل قصد دارد با استفاده از آدرس ذخیره شده در sp به فراخواننده تابع overflow_function بر گردد اما از آن جایی که آدرس 10dh بازنویسی شده است، پردازشگر نمی تواند دستوری را اجرا کند و خطای bufferoverflow صادر می شود. خب، هکرها با استفاده از همین خطا به سیستم های دیگران حمله می کنند. آنها یکسری دستورات به زبان اسمبلی می نویسند که در اصطلاح به آنها shellcode یا exploit گفته می شود. به مثال بالا برمی گردیم، فرض کنید به جای مقدار “bufferoverflow” یک شل کد به تابع overflow_function داده شود. وقتی کار تابع تمام شد، پردازشگر به آدرس 10dh می رود. مقدار این آدرس دیگر یک مقدار نامعتبر نیست بلکه به یک قطعه کد اشاره دارد و پردازشگر، آن قطعه کد را اجرا می کند و سبب می شود برنامه اصلی، کار خودش را درست انجام ندهد . این یک روش برای سوءاستفاده از سرریزی است. روش دیگر دسترسی به بخش های محرمانه حافظه است که اطلاعات اساسی سیستم در آن قرار دارد. هکر با تزریق کد خود به برنامه می تواند به بخش های محرمانه حافظه دسترسی پیدا کند و اطلاعات حیاتی سیستم را مورد سو ءاستفاده قرار دهد.
چگونه جلوی سرریزی را بگیریم؟ تنها کاری که لازم است انجام دهیم، بررسی مقادیر ورودی برنامه است تا دقیقا مطابق با اندازه متغیر داده ها درون آن ریخته شوند. به طور مثال؛ کد بالا را با تغییر کوچکی اصلاح می کنیم و از سرریزی بافر جلوگیری می کنیم. کد بازنویسی شده به صورت زیر خواهد بود: void overflow_function (char *str){ char buffer[10]; strncpy(buffer, str,10); } int main(){ char big_string[14]; strncpy(big_string,"bufferoverflow",14); overflow_function(big_string); return 0; }
امیربهاالدین سبط الشیخ


نرم افزار proteus professional v7.6

... این ابزار قدرتمند قادر است خود را با زبان های برنامه نویسی اسمبلی هماهنگ کرده تا مدارات مجتمع را همراه با زبان برنامه نویسی و همچنین ریز پردازنده مورد آزمایش قرار داد ... 6- سازگاری با انواع زبان های اسمبلی- سازگاری کامل با انواع میکروکنترولر ها- شناسایی و به روز رسانی آخرین قطعات و مدارات روز دنیا- هماهنگی کامل نرم افزار برای آزمایش کدهای نوشته شده در زبان اسمبلی - وجود بیش از 8000 قطعه الکترونیکی در نرم افزار- استفاده آسان از نرم افزار - امکان پرینت مدارات- قابلیت ذخیره سازی به صورت عکس- خطایاب بسیار کامل نرم افزار- سازگار با بیشتر کامپایلر ها و اسمبلرها ...

منبع : بازیاب    تاریخ : 2   دی   1388   شاخه : نرم افزار   


پیتر نورتون peter norton

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

منبع : جام جم آنلاین    تاریخ : 18   مرداد   1388   شاخه : اشخاص   


معماری مجموعه دستورات پردازنده

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

منبع : جام جم آنلاین    تاریخ : 29   دی   1387   شاخه : سخت افزار   


انتخابی به دور از تعصب

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

منبع : جام جم آنلاین    تاریخ : 28   مهر   1387   شاخه : برنامه نویسی   


گام های نهایی برای یک ترجمه موفق

... همان طور که زبان های معمول از قواعد و اصول مشخصی پیروی می کنند، زبان های برنامه سازی نیز گرامر خاص خود را دارند که تنها در صورتی معنی و مفهوم آنها توسط رایانه درک می شود که از آن قواعد پیروی کرده باشیم ... البته زبان انسان ها به دلیل آن که مخاطب آن یک موجود هوشمند است، انعطاف پذیری بیشتری نسبت به زبان های برنامه نویسی رایانه دارند ... در زبان انسان ها ممکن است گاهی کلمه ای اشتباه گفته شود و یا فعلی بیان نشود ... اما در زبان رایانه باید کلمات و عبارات به ترتیب مشخص و تعیین شده توسط آن زبان کنار هم چیده شوند تا توسط رایانه درک شوند و کوچک ترین اشتباه و جابجایی در آنها غیرقابل چشم پوشی است و منجر به عدم درک مفهوم توسط رایانه خواهد شد ... مگر این که طراح زبان یک سری انعطاف پذیری های بخصوص، تعیین شده و محدودی را برای آن زبان در نظر گرفته و در کامپایلر آن بگنجاند ... در صورتی که این جمله به صورت «او صیب را خورده است» نوشته شود پیش از هر چیز تحلیلگر لغوی زبان فارسی پس از برخورد به کلمه «صیب» یک خطا اعلام می کند ... زیرا چنین کلمه ای در زبان فارسی وجود ندارد و باید به شکل «سیب» نوشته شود ... اما نحو زبان فاربسی به ما می گوید که برای فاعل «او» نباید از فعل «خورده ام» استفاده شود ... بنابراین تحلیلگر نحوی زبان فارسی از این جمله ایراد خواهد گرفت و ما ناچاریم یا کلمه «او» را به «من» و یا فعل «خورده ام» را به «خورده است» تغییر دهیم تا این جمله از نظر نحوی درست باشد، اما حالتی را در نظر بگیرید که جمله به «او میز را خورده است» تغییر کند ...

منبع : جام جم آنلاین    تاریخ : 21   مهر   1387   شاخه : برنامه نویسی   


دلفی، تجمع سادگی و توانایی

... علاقه مندان به زبان پاسکال امروزه کمتر با این زبان و کامپایلری چون turbo pascal برنامه نویسی می کنند ... می توان گفت که زبان پاسکال و ابزارهای کوچک مربوط به آن تنها محدود به آموزشگاه ها و واحدهای درسی شده است و کمتر جنبه کاربردی و تجاری دارند ... زیرا اولا سیستم عامل مربوط به پاسکال قدیمی، dos است که درحال حاضر دیگر کاربرد چندانی ندارد، ثانیا با امکانات امروز و انتظارات موجود از یک زبان برنامه نویسی، پاسکال قدیمی، دیگر نیازها را برآورده نمی سازد ... اشخاصی که با زبان پاسکال برنامه می نوشتند یا در حال حاضر قصد دارند از توانایی های این زبان بهره ببرند هم اکنون زبانی مثل دلفی را انتخاب می کنند که اولا بر پایه پاسکال طراحی شده است و ثانیا قابلیت های بسیاری دارد که زبان قدیمی پاسکال فاقد آنها است ... دلفی در سال 1995، شرک بورلند زبانی را تحت عنوان پاسکال شی ءگرا (object pascal) طراحی کرد و آن را در ابزاری به نام دلفی (delphi) به کار گرفت که بعدها به دلیل محبوبیت و معروفیت این ابزار، پاسکال شیء گرا نیز به زبان دلفی معروف شد و امروزه از دلفی به عنوان یک زبان یاد می شود ... دلفی یک زبان بصری(visual) است که در محیط ویندوز اجرا می شود و این قابلیت را دارد که برای ویندوز و dos برنامه تولید کند ... کاری که با زبان پاسکال نیاز به صرف ساعت ها و بلکه روزها زمان بود، دلفی تنها با چند کلیک آن را انجام می دهد ...

منبع : جام جم آنلاین    تاریخ : 31   شهریور   1387   شاخه : برنامه نویسی   


دوست مشترک شما و رایانه

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

منبع : جام جم آنلاین    تاریخ : 31   شهریور   1387   شاخه : برنامه نویسی   


یک کامپایلر برای پاسکال

... اگر تصمیم دارید برنامه نویسی را با زبان پاسکال شروع کنید یک کامپایلر مناسب برای آن turbo pascal است که نسخه های قدیمی آن تحت سیستم عامل dos اجرا می شوند که البته به دلیل آن که این سیستم عامل امروزه کاربرد چندانی ندارد توصیه می شود از نسخه تحت ویندوز این کامپایلر استفاده کنید ... علاوه بر توربو پاسکال، کامپایلرهای جدید و قدیمی بسیاری برای این زبان وجود دارند که هر یک از جانب یک شرکت یا گروه پشتیبانی می شوند، اما یکی از جدیدترین، محبوب ترین و قدرتمندترین کامپایلرها برای پاسکال و پاسکال شیء گرا، free pascal است که در ادامه به معرفی برخی خصوصیات آن می پردازیم ... این نرم افزار نیز همانند توربور پاسکال و دلفی، پشتیبانی و سازگاری خوبی با زبان اسمبلی دارد ... به این معنی که برنامه نویس می تواند در بین کدهای برنامه خود به زبان پاسکال، به نوشتن قطعه برنامه ای به زبان اسمبلی کند ...

منبع : جام جم آنلاین    تاریخ : 24   شهریور   1387   شاخه : برنامه نویسی   


واسط های ما و رایانه ها

... به منظور اجرای برنامه های نوشته شده توسط برنامه نویس روی رایانه، یا باید مستقیما به زبان ماشین برنامه نوشت کاری که پیش از ابداع زبان ها در نخستین رایانه ها انجام می شد یا باید به وسیله یک نرم افزار، برنامه نوشته شده را به زبان قابل فهم رایانه تبدیل کرد ... با توجه به زبان برنامه نویسی و طریقه عملکرد برنامه مبدل، نام های مختلفی برای آنها در نظر گرفته شده است ... همان طور که پیش از این نیز گفتیم، اگر زبان برنامه نویسی، اسمبلی باشد، نرم افزاری که برای تبدیل متن برنامه به زبان ماشین به کار می رود، اسمبلر نام دارد ... اسمبلر از ابتدای برنامه شروع به خواندن می کند و پس از خواندن یک خط و تشخیص دستور مورد نظر، آن را به یک دستور زبان ماشین تبدیل می کند ... هر خط و دستور زبان اسمبلی، دقیقا معادل یک دستور زبان ماشین است ... البته ممکن است اسمبلر برای تبدیل کل برنامه به نمونه معادل زبان ماشین مجبور باشد دو بار برنامه را از ابتدا تا انتها مرور کند ... مفسر و کامپایلر مفسر یا interpreter در اصطلاح رایانه به نرم افزاری گفته می شود که برنامه نوشته شده به یک زبان برنامه نویسی را خط به خط خوانده و در همان لحظه اجرا می کند ... زبان هایی چون matlab, python, perl و ruby از جمله زبان هایی هستند که به روش دوم عمل می کنند ... زبان هایی مثل جاوا از این روش استفاده می کنند ...

منبع : جام جم آنلاین    تاریخ : 24   شهریور   1387   شاخه : برنامه نویسی   

صفحه 1
2 3


طراحی وب سایت

Content on this page requires a newer version of Adobe Flash Player.

Get Adobe Flash player