Неясность в статье "Об упаковщиках - часть 1"

Тема в разделе "WASM.WIN32", создана пользователем sep, 6 сен 2004.

  1. sep

    sep New Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    51
    Здравствуйте,



    В главе про таблицу импорта есть такая информация:



    "Перед тем, как начинать разбирать структуру, очень важно четко представлять, что в последнее время развелось много всяких наворотов на бедную IAT.



    NTDLL.dll (функция LdrpWalkImportDescriptor) может читать IAT из:





    1) OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT] -

    из IMAGE_IMPORT_DESCRIPTOR.OriginalFirstThunk,

    если удовлетворяются определенные условия.



    2) OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IAT] –

    т.е., из IMAGE_IMPORT_DESCRIPTOR.FirstThunk - это стандарт



    3) OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT]

    - все файлы Windows имеют такую привязку

    "



    Так вот не понятен пунккт 2. Там действительно есть значение (на примере taskmgr.exe из w2k sp4), но оно указывает в секцию .text и совсем не понятно как из этого следует, что грузиться должно из IMAGE_IMPORT_DESCRIPTOR.FirstThunk. Вопрос о том что это за значение в IMAGE_DIRECTORY_ENTRY_IAT и почему оно указывает в секцию кода ?



    Спасибо
     
  2. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    > Вопрос о том что это за значение в

    > IMAGE_DIRECTORY_ENTRY_IAT и почему оно указывает в

    > секцию кода



    Там находится собственно IAT =) А в нем уже заполненные адреса функций, и если версии библиотек совпадут, то теоретически загрузчику не надо связывать импорт - все уже сделано до него.
     
  3. sep

    sep New Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    51
    А в каком формате там все хранится ? И можно ли все это убить ?
     
  4. sep

    sep New Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    51
    Все, понял :) Я что-то думал как же лоадер знает к какой библиотеке какой адрес функции относится... все дошло... Только попутно возник еще один вопрос, как же лоадер проверку версий библиотеки производит ? и эти адреса там и остаются или он их копирует куда-то ? вызов же идет как CALL DWORD PTR [xxxxxxxx], так куда же эти хххххххх указывают ?
     
  5. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    вызов же идет как CALL DWORD PTR [xxxxxxxx], так куда же эти хххххххх указывают ?





    И продолжаем читать статью. И внимательно смотрим на рисунки :)
     
  6. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Прошу прощения, за то что не по теме, но хотелось бы спросить Володю о следующей части, она будет или на этом 2eh?
     
  7. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    > как же лоадер проверку версий библиотеки производит?



    А там в этом BoundImport'e для каждой лиьы записана ее time-date-stamp - вот иго загрузчик и сравнивает с там что имеет в загруженной либе.



    > вызов же идет как CALL DWORD PTR [xxxxxxxx], так куда

    > же эти хххххххх указывают ?



    А указывают они какраз в IAT, читать статью адназначна!
     
  8. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Прошу прощения, за то что не по теме, но хотелось бы спросить Володю о следующей части, она будет или на этом 2eh?





    Да. Будет. Очень интенсивно работаю.
     
  9. sep

    sep New Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    51
    volodya, Dr.Golova

    Спасибо, разобрался что и куда указывает и как вызывается :)