Как сщитать таблицу релоков

Тема в разделе "WASM.BEGINNERS", создана пользователем 2FED, 25 июн 2009.

  1. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Подкиньте пример как сщитать таблицу релоков
     
  2. Clear__Energy

    Clear__Energy New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2009
    Сообщения:
    432
    быдло детектед?
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Так же как и любую другую директрию PE-файла. Ицзелион в помощь.
     
  4. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    как всегда помогли, спасибо.
     
  5. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    2FED

    А что означает слово "сщитать"?
     
  6. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Ну варианта два:
    1) посчитать - дать правило, по которому вычисляются сами релоки
    2) прочитать из файла

    оба вопроса непонятны, т.к. все это есть и у мета питрека, и у ицзелиона
     
  7. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    Clear__Energy
    +=1
     
  8. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Вы тут такие все грамотеи собрались я посмотрю.

    У ицзелиона про релоки ничо нету, там только импорт и экспорт. Мне нужно просто прочитать все смещения по которым расположены релоки, некогда разбиратся с пе форматом - вот и попросил пример. Вместо того чтобы умничать можно просто промолчать.
     
  9. Clear__Energy

    Clear__Energy New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2009
    Сообщения:
    432
    Между прочим, вместо того, чтобы спрашивать, можно использовать гугл.
    Няк няк =^.^=
     
  10. pr0mix

    pr0mix New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    107
    #define RVATOVA(Base,Rva) ((DWORD)Base + (DWORD)Rva)

    void CorrectRelocs(LPVOID pExe,DWORD Delta)
    {
    IMAGE_DOS_HEADER *imDh=(IMAGE_DOS_HEADER*)pExe;
    IMAGE_NT_HEADERS *imNTh=(IMAGE_NT_HEADERS*)((DWORD)pExe+imDh->e_lfanew);
    //VA
    IMAGE_BASE_RELOCATION *imBr=(IMAGE_BASE_RELOCATION*)RVATOVA(pExe,
    imNTh->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress);
    DWORD *pRelAddr;
    DWORD ii=0;

    printf("Delta=%X\n",Delta);
    printf("%-10s %-12s %-12s\n","Fixup #","Type","VirtAddr");

    while(imBr->VirtualAddress)
    {
    DWORD BlockSize=(imBr->SizeOfBlock-sizeof(IMAGE_BASE_RELOCATION))>>1;
    WORD *pRelBlock=(WORD*)((DWORD)imBr+sizeof(IMAGE_BASE_RELOCATION));
    for(DWORD i=0;i<BlockSize;i++,ii++)
    {
    if(((pRelBlock & 0xF000)>>12)==IMAGE_REL_BASED_HIGHLOW)
    {
    pRelAddr=(DWORD*)((DWORD)pExe+imBr->VirtualAddress+(pRelBlock & 0x0FFF));
    printf("%-10X %08X %08X\n",ii+1,IMAGE_REL_BASED_HIGHLOW,(DWORD)pRelAddr);
    *pRelAddr=*pRelAddr+Delta;
    }
    else
    printf("%-10X %08X %08s\n",ii+1,IMAGE_REL_BASED_HIGHLOW,((pRelBlock & 0xF000)>>12),"-");
    }
    imBr=(IMAGE_BASE_RELOCATION*)((DWORD)imBr+imBr->SizeOfBlock);
    }
    }

    //вырвал со своего простого лоадера
     
  11. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    2FED
    на rsdn.ru, x64 приводил код
    лучше заюзать его, либо взять из исходников винды/реактоса
     
  12. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    непонятки вот сдесь возникли

    Код (Text):
    1.  pRelAddr=(DWORD*)((DWORD)pExe+imBr->VirtualAddress+(pRelBlock[i] & 0x0FFF));
    в поле VirtualAddress получается 6000h, а PE tools показывает 1000h, если вместо imBr->VirtualAddress подставить 1000h то всё работает. Помогите разобратся.
     
  13. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    это я затупил. всё верно...