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

Discussion in 'WASM.BEGINNERS' started by Stonebearer, Oct 6, 2005.

  1. Stonebearer

    Stonebearer New Member

    Blog Posts:
    0
    Joined:
    Jul 12, 2005
    Messages:
    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

    Blog Posts:
    0
    Joined:
    Jul 2, 2005
    Messages:
    271
    Location:
    Russia
    mov eax,[MessageBoxA+2]

    mov eax,[eax]

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

    IceStudent Active Member

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    Stonebearer

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

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
  5. yureckor

    yureckor New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2004
    Messages:
    494
    Location:
    Russia
    вообщето надо в DLL объявить переменную как Public varname и включить ее имя в def файл, т.о. переменная будет экспортироваться как и какие-нибудь процедуры.

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

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