فراخوان های سیستمی (System Calls) در زبان اسمبلی – آموزش Assembly

  • یکشنبه ۱۶ دی ۱۳۹۷
  • بازدید ۸۰ نفر

assembly system calls 4596 تصویر

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

System Calls در اسمبلی API هایی هستند که به منظور برقرار رابطه بین کاربر و هسته استفاده می شوند. ما قبلا از این API ها استفاده کرده ایم (مانند  sys_write و sys_exit).

فراخوان های سیستمی در لینوکس

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

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

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

مثال زیر  نحوه استفاده از فراخوان سیستمی sys_exit در اسمبلی را نشان می دهد:

مثال زیر  نحوه استفاده از فراخوان سیستمی sys_write در اسمبلی را نشان می دهد:

در جدول زیر برخی از System Call های مورد استفاده در این آموزش را مشاهده می کنید:

%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

مثال

مثال زیر یک عدد از ورودی خوانده و آن را نمایش می دهد:

امتحان کنید

زمانی که کد بالا توسط کامپایلر اسمبلی و اجرا شود، نتیجه زیر را تولید خواهد کرد:

ثبت نظر
ریفریش کنید!
نظرات کاربران (۰ مورد)

هیچ نظری ثبت نشده است