fasm dll & отсутствие релоков

Тема в разделе "WASM.WIN32", создана пользователем QuAzI, 13 дек 2005.

  1. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    "The newest registered user is leo"



    Я все жду когда этот новый "user" что-нибудь запостит в топ :derisive:
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    leo Допустим мы захотели сделать себе dll с базонезависимым кодом и данными, релоцировать там нечего (у нас ведь нигде, даже в PE хидере нет абсолютных адресов) и мы фиксапы не юзаем, NT нормально грузит такую dll и она работает по любому адресу!



    Короче да, я готов согласится, что это особенность\баг 9x, и поскольку в практике такие dll единичны, то можно не тормошить по пустякам Привалова (иначе стоит основательно протестировать и на всех виндах)
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Asterix

    Хотел было, да после регистрации какие-то тормоза пошли страшные с загрузкой - так и не дождался входа :dntknw:

    А тут bogrus стал тени сомнения сеять в стиле "найдите сперва куда тыкать" и "не тормошить по пустякам" ;)



    В связи с этим вот какая мысля появилась: а может win 95, а вместе с ней и 98 не поддерживают флаг IMAGE_FILE_RELOCS_STRIPPED ? В спецификации про него сказано "Image only, Windows CE, Windows NT and above". В виндовой иерархии я не очень разбираюсь, но если к 9х это не относится, то получается достаточно логичное объяснение. Вопрос: если релоков нет, то как отличить ситуацию, когда их просто нет и dll можно грузить по любому адресу, от ситуации когда они должны быть, но stripped и dll может работать только при ImageBase, указанном в PE-хидере ? В NT просто проверяется указанный флаг - если он сброшен, то dll позволяет изменять ImageBase даже если размер таблицы релоков = 0. Ну а если предположить, что 9х про этот флаг ничего не знают, то остается единственная возможность различить эти ситуации - по размеру таблицы релоков: если 0, то изменять ImageBase нельзя
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Нацарапал все же Томашу телегу - посмотрим как отреагирует ;)
     
  5. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    уже отреагировал и почти согласился :derisive:
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Да, похоже 98SE игнорирует флаг RELOCS_STRIPPED

    Но интересно, что XP SP2 его тоже игнорирует если размер таблицы релоков > 0. А вот если таблицы нет (размер = 0), тогда при сброшенном флаге XP считает что релоков нет и можно грузить dll по другому адресу, а при установленном флаге - на выход с песнями



    PS: Томаш согласился, что проблема есть, но как и следовало ожидать предлагает решать ее yourself. Спорить и предлагать хотя бы хинты\варнинги выводить - думаю бесполезно