импорт имен и masm32

Тема в разделе "WASM.BEGINNERS", создана пользователем Stonebearer, 6 окт 2005.

  1. Stonebearer

    Stonebearer New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2005
    Сообщения:
    2
    Так получилось, что я давно уже не работаю с асмом ia-32. Однако в данный момент есть срочная необходимость написать на нем некоторую dll. Здесь возник небольшой вопрос. Возможно ли расшарить регион секции .data (например, dword-переменную) путем импорта отдельного имени таким образом, чтобы стало валидным такое с данной переменной обращение:

    mov eax,dword ptr [shared_var] (прямое обращение к элементу секции импорта внешних имен)?



    Как не пытался, MASM версии 6.14 формирует указатель на регион импорта таким образом:

    mov eax,dword ptr [xxxxxxxx]

    xxxxxxxx: jmp shared_var



    Соответственно при выборке я получу не прямой указатель на регион, ассоциированный с внешним именем, настроенный системным загрузчиком, а фрагмент опкода jmp и смещения в соответствующей секции. Может кто-нибудь подскажет, каким образом я должен задекларировать имя переменной, чтобы не получить указатель на jmp-редиректор?
     
  2. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    mov eax,[MessageBoxA+2]

    mov eax,[eax]

    вроде то что тебе нужно?
     
  3. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Stonebearer

    Нужно использовать другие либы, которые не генерят переход на jmp. Находятся на этом сайте или же можно самому объявить необходимые функции для импорта.
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
  5. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    вообщето надо в DLL объявить переменную как Public varname и включить ее имя в def файл, т.о. переменная будет экспортироваться как и какие-нибудь процедуры.

    Можно расшарить всю секцию, например data?

    \masm32\bin\link.exe /SECTION:.bss,S /DLL /DEF:mydll.def /SUBSYSTEM:WINDOWS /LIBPATH:\masm32\lib mydll.obj