выравнивание стека и рекурсия

Тема в разделе "WASM.ASSEMBLER", создана пользователем Avoidik, 29 дек 2004.

Статус темы:
Закрыта.
  1. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    появилась проблема с сабжем, рекурсия выполняет поиск файла (даже из под поддиректорий) в любой папке, рекурсия работает отлично (количество вызовов рекурсии известно),

    в некоторый момент времени нужно прервать рекурсию и выйти, в данном случае на ExitProcess (для этого соответственно нужно правильно выровнить стек)



    небольшая схема: (szDir - стартовая папка, szFile - искомый файл)


    Код (Text):
    1.  
    2. start:
    3.    stdcall  _recursion,szDir,szFile
    4.    invoke   ExitProcess,NULL
    5.  
    6. proc _recursion, lpParam1,lpParam2
    7. - если файл найден в этой папке выходим в ExitProcess
    8. - если нет, ищем в следующей папке:
    9.    pushad
    10.    stdcall  _recursion,lpParam3,lpParam2
    11.    popad
    12.    return
    13. endp
    14.  




    ps. lpParam3 - модификация lpParam1 (szPath)



    помогите пожалуйста
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Avoidik

    Выставить какой-нибудь флаг или построить функцию так, чтобы при нахождении файла просто выходить из подпрограммы. Стек раскрутится сам.



    Или самому выравнивать стек на основе счётчика вызовов подпрограммы.
     
  3. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Самый простой способ - заюзать глобальную переменную, куда сохранять ESP при старте программы (хотя, если речь идёт о выходе по ExitProcess, то нужно ли его восстанавливать?)

    Более сложный - положить в стэк "маркер" вроде C001C0DEh и потом его искать.

    Принцип простой - любой указатель, размер массива и т.п. в виндосе < 80000000h, поэтому старший бит можно использовать для других целей. Хотя многут быть и подводные камни...
     
  4. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    тему можно прибить, всё сделал уже около недели назад
     
Статус темы:
Закрыта.