Приветствую всех кто зашёл в темку! Вопрос по поиску. Есть 2 файла (прикрепляю). Первый (find1.txt) с поиском файла скачанный отсюда с форума. В нём мне (как новичку) не понравилось выделение памяти в стеке. Очень непривычно видеть обращение к WIN32_FIND_DATA как Код (Text): lea eax,[ebp-144h] . Переделка с переменными падает после нахождения первого экзешника. Оля вообще падает на строке Код (Text): je found до нахождения экзе(в моей поделке) 1)объясните пожалуйста в чём ошибка у меня. 2)в чём фишка пергого исходника?Почему выделяется в стеке место?Разница работы с переменными или стеком в данной задаче. Заранее огромное спасибо!
find_files - это рекурсивная процедура (сама себя вызывает), поэтому без выделения WIN32_FIND_DATA в стеке не обойтись. А [ebp-144h] - стандартное обращение к локальным переменным. Почему это вызывает сомнения?
1) можете подробнее объяснить почему не обойтись? Пример: функция поиска файлов у Bill / TPOC : http://www.wasm.ru/article.php?article=green2red02 Но в ней почемуто не проверяются папки. Не разбирался ещё. 2) стандартное обращение? после Калашникова и после Iczelion'а я сомневаюсь. Ну не видел я там такого! Почему немогу стандарт этот изменить и поставить [ebp-150h] например? Из тогоже примера хэндл поиска записывается в [ebp-6h].Почему именно туда? Пожалуйста объясните. Или ткните носом где могу научиться. Заранее очень благодарен!
сорри забыл добавить: [ebp-118h]-cFileName из структуры WIN32_FIND_DATA. Это как вычислили? Вручную высчитано что именно там находится?
В той самой статье (от зелёного к красному...) функция FindEXE устроена точно так как и эта функция (где [ebp-114h]). Там есть и локальные переменные, указанные через директиву LOCAL. И проверка на папку: Код (Text): .IF (ebx==FILE_ATTRIBUTE_DIRECTORY) && (byte ptr [ecx]!='.') И рекурсия там есть. Всё как надо. А код который [ebp-114h] - это просто кто-то разработал кому нравится "чистый" ассемблер: без LOCAL. Если посмотреть в отладчике, то LOCAL превратится в Код (Text): sub esp,<local size> mov ebp, esp а обращение к переменной - превратится в [ebp-<то, что вычислено ассемблером>]. то есть, ваша мысль верна - всё вычислено вручную.