Привет всем! Или это FASM, или API, либо я глючу. В моей программе использую в основном строковые функции свои, там стоит cld и std. Если после строковых функций не поставить cld то прога вылетает ни говоря ничего и винда тоже молчит. МОЯ прога работает нормально, думаю может это баги в API, как найти ошибку? что посоветуете? У меня прога написана в больших символах, может переписать на маленькие? уже баг был у FASM с этим сталкивался недавно (было ret и RET ) совсем по разному транслировал
товарищ крелк уже писал об этом на форуме. как узнать причину исключения в юзермоде тему даже закрепили. ищи.
Если ты где-то устанавливаешь флаг направления, то перед использованием любой строковой апи обязательно надо его сбросить.
Насколько я помню, винде нужно возвращать флаг направления, в том состоянии в котором он был до ... А по дефолту он сброшен, вот и вылетает если была команда std.
Нельзя взводить флажёк направления перед передачей управления за пределы своего кода(это также касается сервисов, например может быть доставлена апк и это станет причиной краха, ибо там флажёк будет взведён). Виндоз требует DF = 0, иначе копирование памяти будет выполняться вниз(функции не сбрасывают этот флажёк). Также диспетчер исключений в более ранних версиях виндоз не очищал этот флажёк, потом этот баг закрыли. Копирование памяти вниз это зло ибо нарушает нормальную работу потока, следует использовать копирование памяти вверх, даже если это замедляет код. Вылетает без ошибок в случае не валидного стека(ядро завершает процесс при не доступном стеке).
Clerk Б Спасибо, не знал что такие простые баги есть, вот только прошел олькой, уткнулся в ntdll repe scas