نمایش نتایج 1 تا 4 از 4

نام تاپیک: سوال در مورد فایلهای pe

  1. #1
    کاربر تازه وارد آواتار شبیر کریمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    شیراز
    پست
    32

    سوال در مورد فایلهای pe

    سلام کسی میدونه چرا باید بعد از map کردن فایلهای pe با وجود اینکه با استفاده از RVA میتونیم به داده های درون فایل مثلا ImportDirectory دسترسی داشته باشیم باید این RVA رو تبدیل به Offset کنیم؟

    مثلا بعد از بدست آوردن RVA زیر باید اونو تبدیل به File Offset کنیم؟

        DWORD dwImportDirectory= RVA2Offset(pImageBase, pimage_nt_headers->

    OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].

    VirtualAddress);


  2. #2

    نقل قول: سوال در مورد فایلهای pe

    چون فایل pe اولا از ادرس ایمیج بیس لود میشه و اینکه هرسکشن در مکان خاصی از حافظه لود میشن بر مبنای alignment خاص و RVAها هم بر همین اساس هستن که در فایل PEبرمبنای fileAlignmentبوده برای همین صرف map کردن کافی نیست

  3. #3
    کاربر تازه وارد آواتار شبیر کریمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    شیراز
    پست
    32

    نقل قول: سوال در مورد فایلهای pe

    حالا فرض كنيد كه بخوام توابع Import شده ماژول خودم رو بدست بيارم و چون توسط خود لودر ويندوز لود شده(بطور دستي مپ نشده) پس آدرس هاي rva درونش بايد درست باشه و ديگه نيازي به تبديل به آفست فايل نداشته باشيم(البته مطمئن نيستم كه اينطوري باشه) و اين كد رو نوشتم ولي جواب نميده:

    var
    PDOS:PImageDosHeader;
    pnt:PImageNtHeaders;
    base:dword;
    PImportDescriptor:PIMAGE_IMPORT_DESCRIPTOR;
    PThunk:PIMAGE_THUNK_DATA;
    PImportByName:PIMAGE_IMPORT_BYNAME;
    begin
    base:=GetModuleHandle(0);
    pdos:=PImageDosHeader(base);
    pnt:=PImageNtHeaders(base+pdos._lfanew);
    datadirectory:=pnt.OptionalHeader.datadirectory[1].VirtualAddress;
    PImportDescriptor:=PIMAGE_IMPORT_DESCRIPTOR(base+d atadirectory);
    PThunk:=PIMAGE_THUNK_DATA(Base+PImportDescriptor.F irstThunk);
    Name:=Pchar(Dword(Pthunk.IMportByName.name[0])+Base);

    end;

    و انتظار داشتم كه نام اولين تابع از اولين dll درون name قرار بگيره اما خطا ميده و برنامه متوقف ميشه .
    ميشه بگين كجاها اشباه كردم؟
    آخرین ویرایش به وسیله شبیر کریمی : شنبه 06 شهریور 1389 در 09:52 صبح

  4. #4

    نقل قول: سوال در مورد فایلهای pe

    شما باید چک کنین اولین ایتم valid هست یا نه
    مقادیر باید مخالف nilباشه

    PThunk:=PIMAGE_THUNK_DATA(Base+PImportDescriptor.F irstThunk);
    if PThunk<>nil then
    Name:=Pchar(Dword(Pthunk.IMportByName.name[0])+Base);

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •