TGViewer
ReverseEngineering ReverseEngineering @reverseengine · 1.33K subscribers
Post #1896 37
PE
در حافظه و تفاوتش با فایل روی دیسک

تا اینجا درباره‌ ی Private Memory Image-backed Memory و VAD صحبت کردیم

حالا میخوایم ببینیم وقتی یک فایل اجرایی ویندوز وارد حافظه میشه چه اتفاقی براش میوفته و چرا نسخه‌ی داخل Memory معمولا با نسخه‌ی روی دیسک یکی نیست

اول ببینیم PE چیه

فرمت اجرایی اصلی بسیاری از برنامه‌های ویندوز PE یا Portable Executable هست

فایل‌هایی مثل اینها رو در نظر بگیرید:

program.exe
library.dll

ساختار کلی یک فایل PE تقریبا به این شکله:

PE File
│
├── DOS Header
├── PE Signature
├── COFF File Header
├── Optional Header
├── Section Headers
│
├── .text
├── .rdata
├── .data
├── .pdata
└── Other Sections

همه‌ ی فایل‌ها لزوما تمام این Section ها رو ندارن و ترتیب و جزئیاتشون هم ممکنه متفاوت باشه

هر بخش اطلاعات مشخصی داره و Windows از ساختار PE برای شناخت و بارگذاری فایل اجرایی استفاده میکنه

وقتی PE وارد Memory میشه چه اتفاقی میوفته؟

فرض کنید این فایل روی دیسک وجود داره:


C:\Program Files\App\program.exe

وقتی Windows اون رو اجرا میکنه Loader سیستم‌ عامل فرایند اپلود رو انجام میده

نمای ساده‌ :

PE File on Disk
|
v
Windows Loader
|
v
Virtual Address Space
|
v
Program Execution

اما نکته اینجاست که Windows معمولا فایل رو به شکل یک تیکه ی خام و بدون تغییر داخل Memory کپی نمیکنه
Loader باید ساختارهای فایل رو پردازش کنه و بخش‌های مختلف رو در جای مناسب قرار بده

تفاوت Raw Offset و RVA

اینجا به یکی از مفاهیم پایه‌ای میرسیم

Raw Offset
آدرسیه که برای پیدا کردن اطلاعات داخل خود فایل روی دیسک استفاده میشه

مثلا:
File Offset = 0x600

یعنی اطلاعات موردنظر از Offset برابر با 0x600 در فایل شروع میشه

RVA
مخفف این عبارته:

RVA = Relative Virtual Address

یعنی آدرس یک بخش نسبت به ImageBase در فضای آدرس مجازی

مثلا:

ImageBase = 0x140000000
RVA = 0x2000

در این مثال:

VA = ImageBase + RVA

پس:

VA = 0x140002000

این محاسبه آدرس مجازی موردنظر رو به دست میاره به شرطی که از
ImageBase
واقعی Image بارگذاری‌ شده استفاده کنیم

تفاوت اصلی

Raw Offset
|
+--> موقعیت در فایل روی دیسک

RVA
|
+--> موقعیت نسبت به
ImageBase
در فضای آدرس مجازی

Raw Offset و RVA
لزوما برابر نیستن

برای تبدیل بین اونها باید اطلاعات Section مربوطه مثل
PointerToRawData و VirtualAddress
رو هم در نظر بگیریم

ضمن اینکه همه‌ ی آدرس‌ های مجازی
لزوما معادل یک بخش از داده‌های موجود در فایل نیستن برای مثال ممکنه یک بخش در حافظه بزرگتر از داده‌ی خام متناظر با خودش باشه

ImageBase

هر Image در حالت اپلود شده یک Base Address داره که بهش ImageBase میگیم

برای مثال:

Preferred ImageBase:
0x140000000

این آدرس محل ترجیحی تعریف‌ شده برای بارگذاری Image در فایل PE هست
ولی Windows همیشه مجبور نیست Image رو دقیقا همون‌جا قرار بده

چرا؟

چون ممکنه اون محدوده از فضای آدرس مجازی در دسترس نباشه یا شرایط دیگه‌ای وجود داشته باشه

در این شرایط Image ممکنه در آدرس دیگری بارگذاری بشه

اینجا میریم سراغ مفهوم بعدی

Base Relocation

فرض کنید برنامه انتظار داره Image در این آدرس قرار بگیره:


Preferred Base = 0x140000000

اما در عمل در آدرس دیگه ای اپلود میشه:

Actual Base = 0x180000000

اختلاف این دو آدرس:

Delta = Actual Base - Preferred Base

در صورتی که Image به Relocation نیاز داشته باشه و اطلاعات لازم موجود باشه Loader از اطلاعات Relocation برای اصلاح آدرس‌های وابسته به محل بارگذاری استفاده میکنه

به این فرایند Base Relocation میگیم
نکته‌ی مهم اینه که تمام آدرس‌ های داخل فایل نیازمند Relocation نیستن فقط مواردی که طبق ساختار PE به محل بارگذاری وابسته هستن و اطلاعات Relocation مناسب براشون وجود داره باید درست بشن

Import Table
چه کاری انجام میده؟

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

برای مثال یک برنامه ممکنه به توابعی از این Moduleها نیاز داشته باشه:

KERNEL32.dll
USER32.dll
ADVAPI32.dll

اطلاعات مربوط به وابستگی‌های خارجی در ساختارهای Import فایل PE قرار میگیره

Loader
این وابستگی‌ ها رو پردازش میکنه و آدرس توابع موردنیاز رو در ساختار های مرتبط قرار میده
  • ❤ 1
More from @reverseengine
  1. Oct 15, 2026Reverse Engineer Anything v6.5.0 A tool for reverse engineering that allows AI agents to a…
  2. Oct 15, 2026Someone Used AI to Reverse-Engineer PS5 Security in Weeks: What Is REA? https://pub.toward…
  3. Oct 15, 2026How Dangerous Is REA (Reverse Engineer Anything) for Your App? https://21zerixpm.medium.co…
  4. Oct 15, 2026REA Is Impressive. But Reverse Engineering Was Never the New Part https://crizantlai.mediu…
  5. Oct 15, 2026QuarkslaB Dynamic binary Instrumentation https://qbdi.quarkslab.com/introduction @reversee…
  6. Oct 15, 2026angr’s documentation https://docs.angr.io/en/latest/search.html?q=Document&check_keywords=…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →