دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۱۵
  • اردیبهشت

جلسه ۰۶ : فراخوان های سیستمی (System Calls) – زبان اسمبلی (Assembly)

  • دسته‌بندی‌ها :
جلسه ۰۶ : فراخوان های سیستمی (System Calls) – زبان اسمبلی (Assembly)
    • جزئیات
    • نوع محتواآموزشی

      همراهان عزیز وب سایت آموزشی پی وی لرن وقتتون بخیر و شادی، با آموزش زبان برنامه نویسی اسمبلی (Assembly) در خدمتتون خواهیم بود. فراخوان های سیستمی (System Calls) در لینوکس مبحث این بخش ماست.

      فراخوان های سیستمی (System Calls)

      فراخوان های سیستمی API هایی برای برقرار رابطه بین فضای کاربر و فضای هسته هستند. قبلاً از system call ها استفاده کرده ایم. sys_write و sys_exit ، به ترتیب برای نوشتن روی صفحه و خروج از برنامه.

      فراخوان های سیستمی (System Calls) در لینوکس

      می توانید در برنامه های اسمبلی خود از فراخوان های سیستمی لینوکس استفاده کنید. برای استفاده از فراخوان های سیستمی لینوکس در برنامه خود باید مراحل زیر را انجام دهید.

      • شماره System Call را در رجیستری EAX قرار دهید.
      • آرگومان های System Call را در رجیسترهای EBX ، ECX و غیره ذخیره کنید.
      • وقفه مربوطه را فراخوانی کنید (۸۰h).
      • نتیجه معمولاً در ثبات EAX برمی گردد.

      شش ثبات وجود دارد که آرگومان های مورد استفاده System Call را ذخیره می کند. این ها EBX ، ECX ، EDX ، ESI ، EDI و EBP هستند. این رجیسترها آرگومان های متوالی را دریافت می کنند، با ثبات EBX شروع می شود. اگر بیش از شش آرگومان وجود داشته باشد ، مکان حافظه اولین آرگومان در ثبات EBX ذخیره می شود.

      قطعه کد زیر استفاده از فراخوان سیستمی sys_exit را نشان می دهد.

       

      مثال : 

      قطعه کد زیر استفاده از فراخوان سیستمی sys_write را نشان می دهد.

      مثال : 

      همه syscall ها در /usr/include/asm/unistd.h به همراه شماره آن ها ذکر شده است.

      در جدول زیر برخی از فراخوان های سیستمی مورد استفاده در این آموزش را می بینید.

      %eaxName%ebx%ecx%edx%esx%edi
      ۱sys_exitint
      ۲sys_forkstruct pt_regs
      ۳sys_readunsigned intchar *size_t
      ۴sys_writeunsigned intconst char *size_t
      ۵sys_openconst char *intint
      ۶sys_closeunsigned int

      مثال

      مثال زیر عددی را از صفحه کلید می خواند و آن را روی صفحه نمایش می دهد.

      مثال : 

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

      مثال : 

      کلام پایانی

      با فراخوان های سیستمی (System Calls) در لینوکس آشنا شدیم. در جلسه آینده حالتهای آدرس دهی را مورد بررسی قرار خواهیم داد. با  آموزش زبان اسمبلی (Assembly) همراه باشید.

      QR:  جلسه ۰۶ : فراخوان های سیستمی (System Calls) – زبان اسمبلی (Assembly)
      به اشتراک بگذارید


      دیدگاه کاربران
      1. تصویر کاربر