PE файл.Обработка импорта.

Тема в разделе "WASM.BEGINNERS", создана пользователем _nic, 25 ноя 2010.

  1. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Может ,цитирую
    http://www.rsdn.ru/article/baseserv/pe_coff.xml
    "Автор: Мэтт Питрек
    Секреты системного программирования в Windows 95. Глава 8."
     
  2. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Кому мне верить? Файлу http://www.microsoft.com/whdc/system/platform/firmware/pecoff.mspx или файлу WinNT.h из VS2008 ?Структура данных описанная в них почему то отличается =/
     
  3. tonyStark

    tonyStark New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2010
    Сообщения:
    16
    winnt.h конечно ты же на нее будешь ссылаться

    почитай статьи "От зеленого к красному" и статью Питрека "Форматы РЕ и COFF объектных файлов" там довольно просто описано
     
  4. tonyStark

    tonyStark New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2010
    Сообщения:
    16
    1. если IMAGE_IMPORT_DESCRIPTOR.TimeDateStamp==0 то патчим адреса в FirstThunk, а имена/ординалы берем из OriginalFirstThunk

    2. если IMAGE_IMPORT_DESCRIPTOR.TimeDateStamp==-1 то это так называемый новый стиль привязки и используется BOUND_IMPORT


    И из какого места дллки вытаскивать этот TimeDateStamp?
    посмотри PE редактором FileHeader, посмотри при помощи CFFexplorer на мой взгляд он удобен

    и будет полезно почитать http://www.rsdn.ru/article/baseserv/peloader.xml
     
  5. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Подскажите какие есть ограничения по базе загрузки ПЕ файла в виртуальное АП?
    ЗЫ:можно линкеру VS 2008 как то указать какая имидж база должна быть?
     
  6. tonyStark

    tonyStark New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2010
    Сообщения:
    16
    дык
    1. Project Properties->Linker->Advanced->Base Address
    2. в коде: #pragma comment( linker, "/BASE:0x77777777" )
     
  7. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Надеюсь понятно на что намекает цитата?

    Если оставить релоки — похоже никаких. XP SP2 грузит PE .Exe с нулевой базой по виртуальному адресу 0x10000; туда же грузит, судя по результатам экспериментов, в случае нестыковки: к примеру, с базой 0x7FFF0000 или 0xBFFF0000 (хотя при базе 0x7FFF0000 могла бы и по родному адресу). Естественно, для нормальных баз релоки не используются.
     
  8. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Ещё такой вопрос.Допустим есть секция,и несколько связанных с ней блоков релоков.Первый из этих блоков будет всегда указывать в начало секции(имею ввиду IMAGE_BASE_RELOCATION.VirtualAddress)? Или необязательно?
     
  9. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    _nic,

    Судя по LdrProcessRelocationBlockLongLong(), упорядоченность фиксапов безразлична. Могу ошибаться. Возьми себе WRK и не дури людям голову. :derisive:
     
  10. tonyStark

    tonyStark New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2010
    Сообщения:
    16
    нет, не обьязательно.. релоки можно засунуть в любую секцию по любому разумному адресу, и в DataDirectory указать RVA и size релоков
     
  11. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Подскажите отладочную софтинку в которой видно что из себя представляет PE файл,в загруженном виде в памяти.
     
  12. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    _nic

    OllyDebugger
    или другой отладчик
     
  13. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    _nic
    LordPE поюзайте. Там и структура, и hex-dump можно глянуть.
     
  14. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    В FirstThunk адреса ф-ций должны быть по тому же индексу в массиве, что и их имена в OriginalFirstThunk ?
     
  15. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    Да. Это два массива параллельных и идентичных до загрузки. В процессе загрузки один из них (FirstThunk) заполняется значениями.
     
  16. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Зона в АП процесса в которую проецируются дллки ,зависит от базы загрузки этого процесса?
     
  17. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    Есть DLL со статическим адресом загрузки, есть те, для которых адрес меняется динамически. Смотрите, например, ASLR.
     
  18. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    http://ru.wikipedia.org/wiki/Address_Space_Layout_Randomization
    и что надо линкеру сказать что бы он поставил флаг от этой каки?
     
  19. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    /DYNAMICBASE, /DYNAMICBASE:NO -- в зависимости от того, что нужно. В VS тут: Linker -> Advanced -> Randomized Base Address.
     
  20. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Как в конченной7ке эту хрень вообще полностью вырубить? Ключ в рееестре HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\MoveImages с нулем нефига непомагает :dntknw: