loop

Тема в разделе "WASM.BEGINNERS", создана пользователем vg, 21 окт 2007.

  1. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    В ниже приведенном коде при срабатывании je nohandle(ecx=0) цикл повторяется. Какие могут быть причины?
    Код (Text):
    1. @loop:
    2.      invoke CreateFile,addr diskbuf,GENERIC_WRITE,FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL OR FILE_FLAG_NO_BUFFERING,0
    3.      mov    ecx,0
    4.      inc    eax
    5.      je     nohandle
    6.      dec    eax
    7.      mov    hfile,eax
    8.      .
    9.      .
    10.      .
    11.      .
    12.  
    13.      invoke CloseHandle,hfile
    14.      mov    ecx,2
    15. nohandle:
    16.      loop   @loop
     
  2. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
  3. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    :)
    В этом и есть причина, что ecx равен нулю. loop сначала выполняет декремент, а потом сравнивает с нулем. Так что повторяться этому циклу еще 2^32 раз.
    Кстати, почему бы перед тем, как запостить вопрос, не проверить под OllyDbg?
     
  4. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    Сделай mov ecx,1 и все будут счастливы =)
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    если ты заметил, после выполнения loop ecx станет равным -1.
    делай выводы, что сначала идёт декремент, а потом сравнение)
     
  6. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Хм... а я, когда запостил, подумал, что мне это моё
    не оставят за ночь без внимания. Цикл-то бесконечный получается. :)
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ну вообщемто да с учетом наличия mov ecx, 0 внутри него)
     
  8. horpis

    horpis New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2006
    Сообщения:
    154
    мне не понятно с какой целью mov ecx,2 , если сразу же после этого ему присваивается 0??
    наверное ст'оит mov ecx,n перед циклом и постараться не использовать ecx в нем, а если уж используеш то сохраняй.
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    horpis
    Там не просто нуль ему присваивается, а там вызов апи, который с большой вероятностью по своему усмотрению его изменит. А вообще мы же не знаем, что кроется за точками. Может это полиморф, и там самомодифицирующийся код :), который и этот mov ecx,2 тоже во что-то модифицирует. А может стоит перехват на CreateFile, и по состоянию ecx определяется, какой код выполнять в перехвате. :)
    Короче, хочу сказать, что в таких случаях лучше не обращать внимания, на то, как выглядит код, а ответить исключительно на вопрос, причем так, чтобы дать при этом автору подумать.
     
  10. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    l_inc
    Ну тут можно много напридумывать. ИМХО просто код, который в точках обрабатывает файл, который сам же и открыл, и причем бесконечно много раз. Если пишешь полиморф должен знать алгортм работы команды loop =)
     
  11. grinay

    grinay New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2007
    Сообщения:
    19
    афтор жжет.