Выравнивание стека?

Тема в разделе "WASM.BEGINNERS", создана пользователем asd, 8 дек 2005.

  1. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    .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 баита?
     
  2. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    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
     
  3. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Да, должен быть выравнен на 4, юзай pushfd\popfd и sub esp,4\add esp,4 (хотя зачем оно в этом коде, непонятно ...)
     
  4. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    bogrus

    хотя зачем оно в этом коде, непонятно ...

    Если про pushf\popf то это просто пример демонстрирующий ситуацию; если про sub\add, то для выравнивания.