PE файлы

Тема в разделе "WASM.WIN32", создана пользователем DAIM, 22 мар 2011.

  1. DAIM

    DAIM New Member

    Публикаций:
    0
    Регистрация:
    29 авг 2010
    Сообщения:
    49
    Здрайствуйте! прочел, несколько статей Iczelion'а,начал читать переведенный путеводитель..от Billy Belcebu,откопал статейку мэта питрека(ну все как наставляет Iczelion), достал winhex, принялся изучать этот злосчастный ПЕ...через некотрое время меня начали посещать некотрые недопонимания:
    вопрос первый- можно ли изучать PE-формат открывая hex-редактором файлов с диска,
    все ли RVA будут считаться валидными(ну всмысле относительно pe заголовка или там начала файла, не суть важно)
    почему этот вопрос возник, потому что смотрю значение "BaseOfCode" который обычно равен 0х1000, спускаюсь вниз(в хекс редакторе), и внезапно обнаруживаю конец файла.
    Или мне надо именно промэпировать файл(всмысле средствами винапи).
    зы.Пардон канечно за явный нубизм, и ламеризм, но я взамешательстве=)
     
  2. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    это RVA а не RAW смещение
     
  3. DAIM

    DAIM New Member

    Публикаций:
    0
    Регистрация:
    29 авг 2010
    Сообщения:
    49
    а raw смещение както можно получить?
     
  4. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    посмотреть к какой секции относится rva
    raw = rva - (rva секции) + (raw адрес секции)
     
  5. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    DAIM
    lordPE - обзаведитесь, поможет малость разобраться...
     
  6. DAIM

    DAIM New Member

    Публикаций:
    0
    Регистрация:
    29 авг 2010
    Сообщения:
    49
    toASMatic:пасиб!но, пока пользуюсь PE Explorer(лимит запусков еще есть:))
    toohne:покачто медитирую над этой формулой.
    мои непонятки:
    этой статейке, где идет описание IMAGE_FILE_HEADER,
    [​IMG]
    есть поле "размер дополнительного заголовка"
    а здесь в IMAGE_OPTIONAL_HEADER
    [​IMG]
    в конце написано размер от PE заголовка.
    вот я не понимаю, где
    должны начаться заголовки секций?
    и что за "размер дополнительного заголовка"?
     
  7. DAIM

    DAIM New Member

    Публикаций:
    0
    Регистрация:
    29 авг 2010
    Сообщения:
    49
    предыдущий пост с повестки дня снимаю, и с гордостью заявляю - я, допенькал!=D
    понеопытности, IMAGE_FILE_HEADER тоже включил в этот "размер дополнительного заголовка", и ни как не мог понять что за 0x18h лишние остаються
     
  8. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    Код (Text):
    1. PIMAGE_NT_HEADERS32     ImageNtHeader;
    2. PIMAGE_SECTION_HEADER   SectionHeader;
    3.  
    4. hModule = GetModuleHandle( NULL );
    5. ImageNtHeader = (PIMAGE_NT_HEADERS32)( ((PIMAGE_DOS_HEADER)hModule)->e_lfanew + (ULONG_PTR)hModule );
    6. SectionHeader = IMAGE_FIRST_SECTION( ImageNtHeader );
    7.  
    8. #define IMAGE_FIRST_SECTION( ntheader ) ((PIMAGE_SECTION_HEADER)        \
    9.     ((ULONG_PTR)ntheader +                                              \
    10.      FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) +                 \
    11.      ((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader   \
    12.     ))
     
  9. 0dh

    0dh New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2011
    Сообщения:
    31
    Таблица заголовков секций идёт сразу после PE-заголовка:

    Код (Text):
    1. IMAGE_NT_HEADERS* ImageNTHeaders(PBYTE pBase)
    2. {
    3.     IMAGE_DOS_HEADER *my_IMAGE_DOS_HEADER = (IMAGE_DOS_HEADER*) pBase;     
    4.     IMAGE_NT_HEADERS *my_IMAGE_NT_HEADERS = (IMAGE_NT_HEADERS*) (pBase + my_IMAGE_DOS_HEADER -> e_lfanew);
    5.     return my_IMAGE_NT_HEADERS;
    6. }
    7.  
    8. WORD NumberOfSections(PBYTE pBase)
    9. {
    10.     IMAGE_NT_HEADERS* NTHeaders = ImageNTHeaders(pBase);
    11.     return NTHeaders -> FileHeader . NumberOfSections;
    12. }
    13.  
    14. IMAGE_SECTION_HEADER* ImageSectionHeaderFirst(PBYTE pBase)
    15. {
    16.     return (IMAGE_SECTION_HEADER*)((DWORD)ImageNTHeaders(pBase) + sizeof(IMAGE_NT_HEADERS));
    17. }
     
  10. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Неправильный подход.Поставь перед собой задачу написать хотя бы PE лоадер для DLL.И вот тогда в процессе воплощения задачи поймешь из чего ,и как PE файл состоит.
     
  11. DAIM

    DAIM New Member

    Публикаций:
    0
    Регистрация:
    29 авг 2010
    Сообщения:
    49
    не совсем понимаю...мож есть линки?(былбы признателен)))
    пока цель: самому наити(всмысле хекс редактором), все заголовки и погулять по RVA