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

Тема в разделе "WASM.BEGINNERS", создана пользователем common_up, 9 янв 2011.

  1. common_up

    common_up New Member

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

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    Код (Text):
    1. sub     esp,sizeof.MyStruct
    2. label   pMyStruct at esp
    не забывайте про выравнивание стека, если адрес не кратен 4:
    Код (Text):
    1. sub     esp,(sizeof.MyStruct shr 2) shl 2 +4
    2. label   pMyStruct at esp
     
  3. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    что за извращения, есть же локалс
    Код (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

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    85
    нормальный example можете оформить ?
     
  5. common_up

    common_up New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    85
    Понял суть. Шикарно!
    Теперь последний вопрос: Как теперь эффективно подтереть то, где нагадил ?:)
    неужели так:
    Код (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

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    можно и так.
    судя по всему, у вас результирующий код получится очень понятным и элегантным. не забудьте комментарии.
     
  7. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    в смысле затирать стек после вызова ??? это достаточно бредово если после вызывается функция использующая стек

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

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

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

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    Код (Text):
    1. mov esp,ebp
    2. pop ebp
    leave не легче ?