Как в fasm узнать адрес локальной переменной?

Тема в разделе "WASM.BEGINNERS", создана пользователем Phuntik, 19 апр 2009.

  1. Phuntik

    Phuntik New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2008
    Сообщения:
    318
    Есть процедура с таким заголовком:
    Код (Text):
    1. proc ValidPE uses eax ebx esi, addrFile
    2. local idh:IMAGE_DOS_HEADER
    В процедуру MemCopy нужно передать через стек адрес idh:
    Код (Text):
    1. stdcall MemCopy, [b]addr[idh][/b], esi, sizeof.IMAGE_DOS_HEADER
    Как это сделать?
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    lea eax,[idx]
    stdcall MemCopy, eax, esi, sizeof.IMAGE_DOS_HEADER

    или
    include 'win32ax.inc'
    stdcall MemCopy, addr idx, esi, sizeof.IMAGE_DOS_HEADER
     
  3. Phuntik

    Phuntik New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2008
    Сообщения:
    318
    Спасибо) Когда-то я решил эту проблему, но, к сожалению, редко за fasm сажусь, забывается)
     
  4. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    всегда можно почитать pdf со справкой к фасму, в нем все есть
     
  5. Phuntik

    Phuntik New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2008
    Сообщения:
    318
    GoldFinch
    Конечно. Так и делаю обычно, прежде чем вопросы задавать.

    Однако вот следующий вопрос, с которым провозился порядочно времени:
    Вот описание структуры на masm:
    Код (Text):
    1. IMAGE_OPTIONAL_HEADER32 STRUCT
    2.   ...
    3.   NumberOfRvaAndSizes           DWORD      ?
    4.   DataDirectory                 IMAGE_DATA_DIRECTORY IMAGE_NUMBEROF_DIRECTORY_ENTRIES dup(<>)
    5. IMAGE_OPTIONAL_HEADER32 ENDS
    Вот я переделал её под fasm:
    Код (Text):
    1. struct IMAGE_DATA_DIRECTORY
    2.   VirtualAddress    dd ?
    3.   isize             dd ?
    4. ends
    5.  
    6. IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16  
    7.  
    8. struct IMAGE_OPTIONAL_HEADER32
    9. ...
    10.   NumberOfRvaAndSizes           dd ?
    11.   DataDirectory                 IMAGE_DATA_DIRECTORY IMAGE_NUMBEROF_DIRECTORY_ENTRIES dup <?>
    12. ends
    Не компилирует. Пишет "invalid argument". Выручайте, братцы.
     
  6. bendme

    bendme New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    179
    DataDirectory IMAGE_NUMBEROF_DIRECTORY_ENTRIES IMAGE_DATA_DIRECTORY dup <?>

    Может так?
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Phuntik
    Подозреваю, что только так (с возможными вариациями :) ):
    Код (Text):
    1. struct IMAGE_OPTIONAL_HEADER32
    2.   ...
    3.   NumberOfRvaAndSizes           dd ?
    4.   DataDirectory                 rb IMAGE_NUMBEROF_DIRECTORY_ENTRIES*sizeof.IMAGE_DATA_DIRECTORY
    5. ends
     
  8. Phuntik

    Phuntik New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2008
    Сообщения:
    318
    bendme
    Не, так не работает.

    l_inc
    Спасибо, буду пробовать.

    Однако назрел следующий вопрос:
    Есть вот такое:
    Код (Text):
    1.    SEHHandler proc uses edx pExcept:DWORD, pFrame:DWORD, pContext:DWORD, pDispatch:DWORD
    2.        mov edx,pFrame
    3.        assume edx:ptr SEH
    4.        mov eax,pContext
    5.        assume eax:ptr CONTEXT
    6.        push [edx].SafeOffset
    7.        pop [eax].regEip
    Пытаюсь преобразовать:
    Код (Text):
    1. proc SEHHandler uses edx, pExcept, pFrame, pContext, pDispatch
    2.     mov edx, [pFrame]
    3.     assume edx SEH
    4.     mov eax, [pContext]
    5.     assume eax CONTEXT
    6.     push [edx.safeOffset]
    7.     pop  [eax.regEip]
    Однако, конечно же, не работает. Подозреваю, здесь assume обозначает нечто другое, хотя и определено в MASM.INC. Подскажите, как быть?
     
  9. Phuntik

    Phuntik New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2008
    Сообщения:
    318
    Через двоеточие нужно было указывать. Вроде компилируется.

    П.С. Догадался по форуму поискать) Тут таких тем, оказывается, хватает.
     
  10. bendme

    bendme New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    179
    приключения поросенка Фунтика )
     
  11. Phuntik

    Phuntik New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2008
    Сообщения:
    318
    Грубовато. Но по сути верно)