.data maska db '*.exe',0 win32_find WIN32_FIND_DATA <?> .code start: pushf ;sub esp,2 invoke FindFirstFile,addr maska,addr win32_find invoke GetLastError ;add esp,2 popf invoke ExitProcess,0 end start FindfirstFile выдаёт ошибку 3е6 - ERROR_NOACCESS. Если раскоментировать sub/add то всё проходит нормально. Это происходит из-за того, что pushf ложит 2 байта? Есть ли аналог изменяющий esp на 4? Должен-ли стек быть выровненным на 4 баита?
FindNextFile работает нормально и с таким esp. .data maska db '*.exe',0 win32_find WIN32_FIND_DATA <?> .code start: invoke FindFirstFile,addr maska,addr win32_find pushf invoke FindNextFile,eax,addr win32_find popf invoke GetLastError invoke ExitProcess,0 end start
Да, должен быть выравнен на 4, юзай pushfd\popfd и sub esp,4\add esp,4 (хотя зачем оно в этом коде, непонятно ...)
bogrus хотя зачем оно в этом коде, непонятно ... Если про pushf\popf то это просто пример демонстрирующий ситуацию; если про sub\add, то для выравнивания.