discord icon
سرور دیسکورد گاردایران
Reza.Black

ساخت برنامه ی ساده !Hello, world با اسمبلی در لینوکس

پست های پیشنهاد شده

به نام خدای بزرگ

با سلام خدمت اساتید

ما در کنار دستورات اسمبلی یکسری تابع تحت عنوان فراخوانی سیستمی یا system call داریم که توسط این دو می تونیم با اسمبلی کد بزنیم.

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

usr/include/asm-generic/unistd.h/

ما قصد داریم عبارت !Hello, world رو بر روی صفحه چاپ کنیم.

پس به دو تابع از فراخوان های سیستمی یعنی ()write برای نوشتن و ()exit برای خروج از برنامه احتیاج داریم.

با سه آرگومان کار داریم اولی که یک توصیفگر فایل هست که دارای مقدار صحیح 1 هست برای چاپ پیام بر روی صفحه که همون خروجی استاندارد هست.

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

از ثبات های EAX, EBX, ECX, EDX می تونیم برای تعیین تابع و آرگومان های مورد نظرمون استفاده کنیم.

و برای فراخوانی تابع هم از وقفه ها کمک می گیریم مثل وقفه ی int 0x80 برای فراخوانی هسته مربوط به کرنل.

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

فراخوان سیستم تابع ()write شماره ی 4 هست پس این مقدار رو در ثبات EAX قرار میدیم و بعد مقدار 1 رو در EBX چون اولین آرگومان یک عدد صحیح بود.

آدرس رشته در ثبات ECX و در نهایت طول رشته که 14 بایت هست در ثبات EDX قرار میدیم.

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

اما برای خروج صحیح از برنامه باید به تابع ()exit رجوع کنیم فراخوان سیستم این تابع برابر با 1 هست و این مقدار رو در ثبات EAX قرار میدیم.

این تابع یک آرگومان مخصوص برابر با صفر رو قبول می کنه به معنای موفقیت و این مقدار رو در ثبات EBX قرار می دیم و بعد وقفه بار دیگه تابع دوم ما رو اجرا می کنه.

برای ایجاد یک فایل باینری قابل اجرا در لینوکس باید کد رو اسمبل و بعد لینک کنیم که به صورت برنامه ی باینری تحت عنوان ELF کافی هستش.

فایل های مربوطه رو هم قرار دادم.

 

Capture.PNG.a0dc238d9635eccbc3b6fbcad29c18cd.PNG

 

help.PNG.bd136c43258214f4c144eaf4fb0ed275.PNG

 

 

files.rar

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری