Есть желание засунуть некоторые структуры в стек(как это делают сишный компилятор). Вообще такое реализуемо ? Нет, ну я понимаю, что можно выделить переменную типа loval_variable dp 0 и в нее засовывать все, что душе пожелается, но по синтаксису нет такого типа: local struct dd? dd? dd? dd? endl
Код (Text): sub esp,sizeof.MyStruct label pMyStruct at esp не забывайте про выравнивание стека, если адрес не кратен 4: Код (Text): sub esp,(sizeof.MyStruct shr 2) shl 2 +4 label pMyStruct at esp
что за извращения, есть же локалс Код (Text): proc someFunc some_par1,some_par2 locals hFile dd ? fInfo BY_HANDLE_FILE_INFORMATION res dd ? filetime FILETIME endl lea eax, [fInfo] ;eax=pointer to fInfo mov eax,[hFIle] ;eax=hFile ret endp
Понял суть. Шикарно! Теперь последний вопрос: Как теперь эффективно подтереть то, где нагадил ? неужели так: Код (Text): mov eax,[variables1] mov ecx,(sizeof.sructure shr 2) shl 2+4 .while ecx <> 0 mov byte [eax],0 inc eax dec ecx .endw Кстати я не делал лейблом, я просто адрес esp кидал в локальную переменную (думаю так проще будет)
можно и так. судя по всему, у вас результирующий код получится очень понятным и элегантным. не забудьте комментарии.
в смысле затирать стек после вызова ??? это достаточно бредово если после вызывается функция использующая стек вообще достаточно стандартного восстановления esp Код (Text): mov esp,ebp pop ebp по основному вопросу непосредственный вариант Код (Text): sub esp,sizeof(yourstruc) ... mov eax,(yourstruc ptr [BP-sizeof(yourstruc)]).yourstruc_field если вы любитель высокоуровнеых извратов в стиле изелиона, то подойдет вариант фримена