Reverse Code Engineering

逆向工程代码 обратная код машиностроения

Reverse Code Engineering

逆向工程代码 обратная код машиностроения

Reverse Code Engineering

Share what I know............... learn what I don’t

آخرین نظرات

۱ مطلب با کلمه‌ی کلیدی «آنالیز پشته» ثبت شده است

قبل از اینکه بخوایم انواع فراخوانی رو بررسی کنیم یه توضیح اجمالی در مورد حافظه و stack میدم تا پیش زمینه لازم رو داشته باشید.

حافظه اصلی یا همون رم سیستم برای یک برنامه به 4 قسمت اصلی زیر تقسیم میشه

قسمتی که برای ما در اینجا مهمه Stack هستش.
پشته به عبارت کلی قطعه ای از حافظه هستش که برای نگهداری اطلاعات تابع از جمله متغیرهای محلی , کنترل جریان و... استفاده میشه. با push میتوان عنصری داخل پشته قرار داد و با pop میتوان عنصری از داخل پشته برداشت کرد یا باصطلاح بازیابی کرد.
همونطور که میدونید ساختار پشته بصورت LIFO است یعنی اگه ما 1 , 2 و 3 رو به ترتیب درون پشته قرار دهیم (push) , اولین عنصری که میتونیم برداشت کنیم pop) 3) خواهد بود پس هر عنصری جدید روی عنصر ماقبل خودش قرار میگیره.
در معماری x86 پشته built-in پشتیانی میشه و رجیسترهایی هم که برای این کار هستند ESP و EBP هستند.
رجیستر ESP به بالای پشته اشاره میکنه یعنی آخرین عنصر, و با push یا pop کردن مقدار این رجیستر تغییر می کند.
از EBP هم بعنوان آدرس مبنا مورد استفاده قرار میگیره , تا از این طریق بشه متغیرهای محلی و پارامترها رو پیدا کرد.
پشته از آدرس های بالا به پایین تخصیص داده میشود به این صورت که آخرین عنصر آدرسش کوچکتر از اولین عنصر هستش.