assume в FASM

Тема в разделе "WASM.BEGINNERS", создана пользователем Necromancer13, 11 май 2008.

  1. Necromancer13

    Necromancer13 Виталий

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    202
    Адрес:
    Украина, Берегово
    пробую получить адреса нужных функций в экспорте kernel32.dll

    Код (Text):
    1.         mov     esi,[ebp+kernel32_base]
    2.         mov     ebx,esi
    3.         assume  esi:IMAGE_DOS_HEADER
    4.         add     esi,[esi.e_lfanew]
    5.         assume  esi:IMAGE_NT_HEADERS
    6.         lea     esi,[esi.OptionalHeader]
    7.         assume  esi:IMAGE_OPTIONAL_HEADER
    8.         mov     esi,[esi.DataDirectoryExport]
    9.         add     esi,[ebp+kernel32_base]
    10.         assume  esi:IMAGE_EXPORT_DIRECTORY
    11.         mov     eax,[esi.AddressOfNames]
    12.         add     eax,ebx
    13.         mov     [ebp+NameTableVA],eax
    14.         mov     eax,[esi.AddressOfFunctions]
    15.         add     eax,ebx
    16.         mov     [ebp+AddressTableVA],eax
    17.         mov     eax,[esi.AddressOfNameOrdinals]
    18.         add     eax,ebx
    19.         mov     [ebp+OrdinalTableVA],eax
    20.         mov     esi,[ebp+NameTableVA]
    21.         mov     [ebp+Counter],0
    ФАСМ ругается на "assume esi:IMAGE_OPTIONAL_HEADER"
    но ведь вроде все правильно? :dntknw:что не так?

    P.S. assume макрос с %fasminc%\macro\masm.inc

    можно использовать virtual, но с assume как-то проще, потму хочется разобраться..
    помогите, пожалуйста ;)
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    assume esi, SOME_STRUCT
     
  3. Necromancer13

    Necromancer13 Виталий

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    202
    Адрес:
    Украина, Берегово
    ну так IMAGE_OPTIONAL_HEADER это ведь и есть somestruct :)

    Код (Text):
    1. struct IMAGE_OPTIONAL_HEADER
    2.   ; { Standard fields }
    3.   Magic                       dw ?  ; IMAGE_NT_OPTIONAL_HDR_MAGIC
    4.   MajorLinkerVersion          db ?
    5.   MinorLinkerVersion          db ?
    6.   SizeOfCode                  dd ?
    7.   SizeOfInitializedData       dd ?
    8.   SizeOfUninitializedData     dd ?
    9.   ..................
    10. ends
     
  4. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    раз assume - это макрос, то ИМХО надо указывать парамы через запятую, а не через двоеточие
     
  5. TerraIncognita

    TerraIncognita New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2008
    Сообщения:
    22
    в ФАСМе все возможно O:)
    даже через двоеточие


    Код (Text):
    1. macro assume params
    2.  {
    3.    match reg:struct, params
    4.    \{
    5.       match assumed, reg\#@assumed \\{ irp name, assumed \\\{ restore name \\\} \\}
    6.       macro label . \\{ \\}
    7.       struc db [val] \\{ \common def@assumed reg,.,db val \\}
    8.       struc dw [val] \\{ \common def@assumed reg,.,dw val \\}
    9.       struc dp [val] \\{ \common def@assumed reg,.,dp val \\}
    10.       struc dd [val] \\{ \common def@assumed reg,.,dd val \\}
    11.       struc dt [val] \\{ \common def@assumed reg,.,dt val \\}
    12.       struc dq [val] \\{ \common def@assumed reg,.,dq val \\}
    13.       struc rb cnt \\{ def@assumed reg,.,rb cnt \\}
    14.       struc rw cnt \\{ def@assumed reg,.,rw cnt \\}
    15.       struc rp cnt \\{ def@assumed reg,.,rp cnt \\}
    16.       struc rd cnt \\{ def@assumed reg,.,rd cnt \\}
    17.       struc rt cnt \\{ def@assumed reg,.,rt cnt \\}
    18.       struc rq cnt \\{ def@assumed reg,.,rq cnt \\}
    19.       reg#@assumed equ
    20.       virtual at reg
    21.        reg struct
    22.       end virtual
    23.       purge label
    24.       restruc db,dw,dp,dd,dt,dq
    25.       restruc rb,rw,rp,rd,rt,rq \} }
    26.  
    27. macro def@assumed reg,name,def
    28.  { match vars, reg#@assumed \{ reg#@assumed equ reg#@assumed, \}
    29.    reg#@assumed equ reg#@assumed name
    30.    local ..label
    31.    name equ ..label
    32.    ..label def }
    33.  
    34. struc none { label . }