Привет всем, собственно вопрос, из-за чего возникает эта ошибка и как предотвратить ACCESS VIOLATION в программе написанной на ассемблере при активной работе с динамическими массивами?
Хм, этим я не закончу операцию которая обработает данные, зная причину ошибки можно её предотвратить и без SEH. Казалось бы простой код: Код (Text): proc CopyMemory dest, src, len cld mov esi, [src] mov edi, [dest] mov ecx, [len] rep movsb ret endp Парой дает сбой, если в цикле (rep movsb) адрес содержащийся в esi = адресу в edi, ведь тот же ACCESS VIOLATION. [add] И вот еще заметил что зачастую, эта гадость присущая Delphi заваливает asm программу в ntdll.dll, интересно ваше мнение по этой проблеме...
Предотвращается просто 1. Устанавливаются права на чтение и запись через VirtualProtect 2. Проверяется память на доступность чтения/записи через IsBadReadPtr/IsBadWritePtr 3. Пользуйся отладчиком!!! Данный код при правильном использовании вообще не должен вызывать ошибок
Если бы делфи умело заливать шелкодесс в нтдлл - ему бы цены не было )))) Учи матчасть. В нтдлл срабатывают хардварные брекпоинты, поэтому твой отладчик сперва останавливается где-то в ее недрах
Проблема выше чем этот код. Нужно анализировать стек трейс (порядок вызовов функций и их параметры) совмесно с исходником. И вообще лучше добавь своей проргамме логи: где выделилась память, сколько и что ты с ней делаешь. С хорошими логами тебе отладчик не понадобиться
Вот это я и хотел узнать. Спасибоint2e. Вчера весь вечер просидел в оли, agrischuk прав, логи правда я как-то не заворачивался из проги, делал dump памяти... Всем огромное спасибо. Тема закрыта.