masm - динамические массивы

Тема в разделе "WASM.BEGINNERS", создана пользователем dsoft, 8 июн 2011.

  1. dsoft

    dsoft Евгений

    Публикаций:
    0
    Регистрация:
    20 май 2007
    Сообщения:
    54
    Адрес:
    Омск
    Уважаемые знатоки, использую пример указанный ниже:
    Код (Text):
    1.     mov FileListDate, 0
    2.     mov ebx, 1
    3.     .repeat
    4.       .if !FileListDate
    5.         mov FileListDate, arralloc$(ebx)
    6.         mov acnt, arrcnt$(FileListDate)
    7.       .else        
    8.         mov FileListDate, arrealloc$(FileListDate, ebx) ; здесь отладчик "тухнет"
    9.         mov acnt, arrcnt$(FileListDate)
    10.       .endif
    11.  
    12.       mov str1, ptr$(buf)
    13.       mov str1, cat$(str1, SADD("Пункт "), str$(ebx))
    14.       mov void, arrset$(FileListDate, ebx, str1)
    15.      
    16.       print arrget$(FileListDate, ebx), 13, 10
    17.       inc ebx
    18.     .until ebx > 8
    это всего лишь пример, который должен был мне показать где я ошибаюсь. Но выходит ошибаюсь не я, а не может правильно прошагать команду OLLY. И как теперь выкручиваться? Возможно я вообще подхожу не с того бока, мне требуется просканировать каталог на наличие определённых файлов, и заполнить массив структур содержащих информацию о найденных файлах:
    Код (Text):
    1.   TFileListDate struct
    2.     Date    DATETIME ?
    3.     Level   DWORD    ?
    4.     fName   BYTE     244 dup(?)         ; align struct to 256 byte
    5.   TFileListDate ends
    в дальнейшем мне хотелось бы отсортировать полученный список по алфавиту по полю fName. Подскажите, может имеются другие более подходящие варианты, для решения поставленной задачи?
     
  2. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Что значит тухнет? И с каких пор вопросы задают в коментариях.
    Проследи за ebx. Возможно он портится. Других бяк не вижу.
     
  3. dsoft

    dsoft Евгений

    Публикаций:
    0
    Регистрация:
    20 май 2007
    Сообщения:
    54
    Адрес:
    Омск
    ???,
    ebx не портится,
    пробовал OllyDbg разных версий, результат один и тот же. Дебаггер не может исполнить команду, сама программа отрабатывает исправно.
     
  4. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Там стоит макрокоманда arrealloc$ - это несколько команд, а не просто mov
    Ты наверно прямо по исходнику "топаешь"? Или я торможу из-за праздника
     
  5. dsoft

    dsoft Евгений

    Публикаций:
    0
    Регистрация:
    20 май 2007
    Сообщения:
    54
    Адрес:
    Омск
    Как "топать" по исходнику в OllyDbg, я не знаю. Я пробовал и по F8 проскочить вызов и прошагать по инструкциям, в итоге "сваливание" происходит при вызове GlobalReAlloc в модуле arrextnd.asm. Если имеется пример "\masm32\examples\exampl10\dynarray\realloc\realloc.asm", то попробуйте выполнить инструкцию "mov hArr, arrealloc$(hArr,4)" в строке 62. Может это только у меня такие фокусы.
     
  6. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    dsoft
    Ну кривой макрос. Как и всё в масме :)
    Нет проверки на ошибку при возврате из GlobalReAlloc. А вот почему GlobalReAlloc только под отладчиком возвращает ERROR_NOT_ENOUGH_MEMORY, хз.
     
  7. dsoft

    dsoft Евгений

    Публикаций:
    0
    Регистрация:
    20 май 2007
    Сообщения:
    54
    Адрес:
    Омск
    Кривой? Непонятно, ведь сама по себе программа отрабатывает и только под дебагером сваливается. Наверное придётся использовать crt_realloc, не так удобно но...