ACCESS VIOLATION

Тема в разделе "WASM.BEGINNERS", создана пользователем dgs, 6 фев 2009.

  1. dgs

    dgs New Member

    Публикаций:
    0
    Привет всем, собственно вопрос, из-за чего возникает эта ошибка и как предотвратить ACCESS VIOLATION в программе написанной на ассемблере при активной работе с динамическими массивами?
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    dgs
    Предотвратить можно просто поставив обработчик этого исключения. :)
     
  3. dgs

    dgs New Member

    Публикаций:
    0
    Хм, этим я не закончу операцию которая обработает данные, зная причину ошибки можно её предотвратить и без SEH.
    Казалось бы простой код:
    Код (Text):
    1. proc CopyMemory dest, src, len
    2.    cld
    3.    mov   esi, [src]
    4.    mov   edi, [dest]
    5.    mov   ecx, [len]
    6.    rep    movsb
    7.    ret
    8. endp
    Парой дает сбой, если в цикле (rep movsb) адрес содержащийся в esi = адресу в edi, ведь тот же ACCESS VIOLATION.

    [add]
    И вот еще заметил что зачастую, эта гадость присущая Delphi заваливает asm программу в ntdll.dll, интересно ваше мнение по этой проблеме...
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    нужно установить права на чтение/запись на всю страницу))))
     
  5. int2e

    int2e New Member

    Публикаций:
    0
    Предотвращается просто
    1. Устанавливаются права на чтение и запись через VirtualProtect
    2. Проверяется память на доступность чтения/записи через IsBadReadPtr/IsBadWritePtr
    3. Пользуйся отладчиком!!! Данный код при правильном использовании вообще не должен вызывать ошибок
     
  6. int2e

    int2e New Member

    Публикаций:
    0
    Если бы делфи умело заливать шелкодесс в нтдлл - ему бы цены не было ))))

    Учи матчасть. В нтдлл срабатывают хардварные брекпоинты, поэтому твой отладчик сперва останавливается где-то в ее недрах
     
  7. agrischuk

    agrischuk New Member

    Публикаций:
    0
    Проблема выше чем этот код. Нужно анализировать стек трейс (порядок вызовов функций и их параметры) совмесно с исходником. И вообще лучше добавь своей проргамме логи: где выделилась память, сколько и что ты с ней делаешь. С хорошими логами тебе отладчик не понадобиться :)
     
  8. dgs

    dgs New Member

    Публикаций:
    0
    Вот это я и хотел узнать. Спасибоint2e.

    Вчера весь вечер просидел в оли, agrischuk прав, логи правда я как-то не заворачивался из проги, делал dump памяти...

    Всем огромное спасибо. Тема закрыта.