фасм локальные структуры(стек)

Discussion in 'WASM.BEGINNERS' started by common_up, Jan 9, 2011.

  1. common_up

    common_up New Member

    Blog Posts:
    0
    Есть желание засунуть некоторые структуры в стек(как это делают сишный компилятор). Вообще такое реализуемо ? Нет, ну я понимаю, что можно выделить переменную типа loval_variable dp 0 и в нее засовывать все, что душе пожелается, но по синтаксису нет такого типа:
    local struct
    dd?
    dd?
    dd?
    dd?
    endl
    :)
     
  2. edemko

    edemko New Member

    Blog Posts:
    0
    Code (Text):
    1. sub     esp,sizeof.MyStruct
    2. label   pMyStruct at esp
    не забывайте про выравнивание стека, если адрес не кратен 4:
    Code (Text):
    1. sub     esp,(sizeof.MyStruct shr 2) shl 2 +4
    2. label   pMyStruct at esp
     
  3. Freeman

    Freeman New Member

    Blog Posts:
    0
    что за извращения, есть же локалс
    Code (Text):
    1. proc someFunc some_par1,some_par2
    2.       locals
    3.         hFile   dd ?
    4.         fInfo   BY_HANDLE_FILE_INFORMATION
    5.         res     dd ?
    6.         filetime FILETIME
    7.       endl
    8.       lea      eax, [fInfo]      ;eax=pointer to fInfo
    9.       mov      eax,[hFIle]      ;eax=hFile
    10.       ret
    11. endp
     
  4. common_up

    common_up New Member

    Blog Posts:
    0
    нормальный example можете оформить ?
     
  5. common_up

    common_up New Member

    Blog Posts:
    0
    Понял суть. Шикарно!
    Теперь последний вопрос: Как теперь эффективно подтереть то, где нагадил ?:)
    неужели так:
    Code (Text):
    1. mov eax,[variables1]
    2. mov ecx,(sizeof.sructure shr 2) shl 2+4
    3. .while ecx <> 0
    4.     mov byte [eax],0
    5.     inc eax
    6.     dec ecx
    7. .endw
    Кстати я не делал лейблом, я просто адрес esp кидал в локальную переменную (думаю так проще будет)
     
  6. Freeman

    Freeman New Member

    Blog Posts:
    0
    можно и так.
    судя по всему, у вас результирующий код получится очень понятным и элегантным. не забудьте комментарии.
     
  7. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    в смысле затирать стек после вызова ??? это достаточно бредово если после вызывается функция использующая стек

    вообще достаточно стандартного восстановления esp

    Code (Text):
    1. mov esp,ebp
    2. pop ebp
    по основному вопросу непосредственный вариант

    Code (Text):
    1. sub esp,sizeof(yourstruc)
    2.  
    3. ...
    4.  mov eax,(yourstruc ptr [BP-sizeof(yourstruc)]).yourstruc_field
    если вы любитель высокоуровнеых извратов в стиле изелиона, то подойдет вариант фримена
     
  8. Sunzer

    Sunzer Member

    Blog Posts:
    0
    Code (Text):
    1. mov esp,ebp
    2. pop ebp
    leave не легче ?