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

Discussion in 'WASM.ASSEMBLER' started by Avoidik, Dec 29, 2004.

Thread Status:
Not open for further replies.
  1. Avoidik

    Avoidik New Member

    Blog Posts:
    0
    Joined:
    Dec 29, 2004
    Messages:
    288
    Location:
    Russia
    появилась проблема с сабжем, рекурсия выполняет поиск файла (даже из под поддиректорий) в любой папке, рекурсия работает отлично (количество вызовов рекурсии известно),

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



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


    Code (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

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    Avoidik

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



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

    S_T_A_S_ New Member

    Blog Posts:
    0
    Joined:
    Oct 27, 2003
    Messages:
    1,754
    Самый простой способ - заюзать глобальную переменную, куда сохранять ESP при старте программы (хотя, если речь идёт о выходе по ExitProcess, то нужно ли его восстанавливать?)

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

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

    Avoidik New Member

    Blog Posts:
    0
    Joined:
    Dec 29, 2004
    Messages:
    288
    Location:
    Russia
    тему можно прибить, всё сделал уже около недели назад
     
Thread Status:
Not open for further replies.