Трабла с директорией ресурсов

Тема в разделе "WASM.WIN32", создана пользователем n0p, 10 фев 2005.

  1. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Вот столкнулся с оригинальной траблой.



    В целях экономии места, решил я запихать директории импорта и ресурсов в секцию с данными. До определенного момента все работало нормально, но потом стало глючить. Глюки заключались в том, что при добавлении одной определенной записи в директорию импорта директория ресурсов умирала, но прога работала. Только ресурсы очень коряво отображались. Я об этом в ЖЖ писал.



    Проблему решил тем, что поменял местами директорию импорта и директорию ресурсов (ресурсы поставил перед импортами).



    И вдруг, при добавлении новых данных в секцию (перед ресурсами), баг снова вернулся. Наученный горьким опытом, засунул директорию ресурсов перед данными и снова все заработало как в старь.



    Все эти события породили во мне вопросы, на которые я так и не нашел ответа: что с директорией ресурсов не так? Какие тонкости необходимо учесть при работе с ней? Похоже, что она должна быть выровнена, но на какое значение и почему?



    Просвятите, плиз..
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Там кажется одна проблема - в свойствах файла версия не отображается если таблица ресурсов находится не в начале секции, где-то уже обсуждали, поищи, видимо глюк микрософта
     
  3. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Должны быть выровнены по 4х байтной границе некоторые вещи:

    - IMAGE_RESOURCE_DIRECTORY

    - сами данные: иконки, меню, манифест и т.п.

    - некоторые поля структуры VS_VERSIONINFO - см. MSDN

    получено методом научного тыка, поэтому возможно не совсем верно =)
     
  4. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan
    Удивительно, что ресурсы у тебя так долго трепыхались прежде, чем умереть.

    В самой секции есть таблица ресурсов. В ней оффсеты на поддиректории - относительно секции, а оффсеты на данные - относительно имиджа секции в памяти. Если, при добавлении данных в предыдущую секцию, она растёт и "смещает" в памяти ресурсы, а оффсеты остаются на старое расположение в памяти, то они указывают в никуда.
     
  5. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Мало того, что бы offset'ы указывали "куда надо", нужно ещё что бы при этом их младшие 2 бита были равны 0.
     
  6. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Ну, в принципе, я так и думал.. Хотя все-равно странно все это.. Директория импорта вот нормально живет и не пищит, а ресурсы капризничают.