как найти ошибку? команды std и cld

Тема в разделе "WASM.BEGINNERS", создана пользователем test896, 25 июл 2009.

  1. test896

    test896 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2009
    Сообщения:
    132
    Привет всем!
    Или это FASM, или API, либо я глючу.
    В моей программе использую в основном строковые функции свои, там стоит cld и std.
    Если после строковых функций не поставить cld то прога вылетает ни говоря ничего и винда тоже молчит.
    МОЯ прога работает нормально, думаю может это баги в API, как найти ошибку?
    что посоветуете?
    У меня прога написана в больших символах, может переписать на маленькие? уже баг был у FASM с этим сталкивался недавно (было ret и RET ) совсем по разному транслировал
     
  2. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    товарищ крелк уже писал об этом на форуме. как узнать причину исключения в юзермоде
    тему даже закрепили. ищи.
     
  3. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    WASM.WIN32 ветка
    где-то сверху
     
  4. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    попробуй cli
     
  5. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Если ты где-то устанавливаешь флаг направления, то перед использованием любой строковой апи обязательно надо его сбросить.
     
  6. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Насколько я помню, винде нужно возвращать флаг направления, в том состоянии в котором он был до ...
    А по дефолту он сброшен, вот и вылетает если была команда std.
     
  7. test896

    test896 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2009
    Сообщения:
    132
    спасибо, понятно

    буду дальше изучать азы программирования
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Нельзя взводить флажёк направления перед передачей управления за пределы своего кода(это также касается сервисов, например может быть доставлена апк и это станет причиной краха, ибо там флажёк будет взведён). Виндоз требует DF = 0, иначе копирование памяти будет выполняться вниз(функции не сбрасывают этот флажёк). Также диспетчер исключений в более ранних версиях виндоз не очищал этот флажёк, потом этот баг закрыли. Копирование памяти вниз это зло ибо нарушает нормальную работу потока, следует использовать копирование памяти вверх, даже если это замедляет код. Вылетает без ошибок в случае не валидного стека(ядро завершает процесс при не доступном стеке).
     
  9. test896

    test896 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2009
    Сообщения:
    132
    Clerk
    Б Спасибо, не знал что такие простые баги есть, вот только прошел олькой, уткнулся в ntdll
    repe scas