Ошибки в пользовательском режиме

Тема в разделе "WASM.WIN32", создана пользователем Clerk, 10 апр 2009.

  1. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    je_
    Сколько "тик" в микросекундах ?
     
  2. je_

    je_ New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    143
    600 mhz CEL
     
  3. je_

    je_ New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    143
    вот прожка тестовая. покажи результы на твоих
     
  4. catwalk_mission

    catwalk_mission New Member

    Публикаций:
    0
    Регистрация:
    23 май 2009
    Сообщения:
    19
    Clerk
    нет, всё-таки это недоразумение =)
    вообще говоря, весьма неосмотрительно со стороны MS вызывать пользовательские хендлеры при захваченной КС. и в висте это очень просто исправили: каждый элемент списка хендлеров содержит UsageCount, который увеличивается перед вызовом хендлера и уменьшается после. такие операции, как чтение указателя на новый элемент списка, уменьшение и увеличение UsageCount – выполняются при эксклюзивно захваченном SRWLock, охраняющем список. а если после уменьшения UsageCount достигает нуля (кто-то вызвал RemoveVectored*Handler() во время выполнения хендлера), то элемент списка удалеятся (тоже при захваченном SRWLock). хендлер выполняется вне блокировки, да и вообще блокировка применяется лишь на время выполнения нескольких инструкций =)
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    je_
    Код (Text):
    1. Counter = 00010000
    2.  
    3. Imm SEH-RETURN restoring Regs : 00002A95
    4.  
    5. Full SEH-RETURN Context86 flags 00010003: 00003A11
    6. (Full - Imm) : 00000F7C
    7.  
    8. Full SEH-RETURN Context86 flags 00010007: 000039C3
    9. (Full - Imm) : 00000F2E
    10.  
    11. Full SEH-RETURN Context86 flags 0001000F: 00003DEA
    12. (Full - Imm) : 00001355
    13.  
    14. Full SEH-RETURN Context86 flags 0001001F: 00003F13
    15. (Full - Imm) : 0000147E
    16.  
    17. Full SEH-RETURN Context86 flags 0001003F: 000040AE
    18. (Full - Imm) : 00001619
    19.  
    20. IRETD Ring3>Ring3 times: 0000019C
     
  6. je_

    je_ New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    143
    ого, тройной расход!
    и какой процессор? 2 или 4 ядра?
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    P4, 3014MHz, XPSP3, шлюзы никем не перехвачены.
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Следует учесть есчо то, что замер посредством тск, а он очень не стабилен.
     
  9. je_

    je_ New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    143
    ладно, довай другой замер с Ring0. (ZwSystemDebugControl). но е тебя одноядерный p4?
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    je_
    Код (Text):
    1. INT-gate Ring3 times: 00000151
    2. INT-IRETD Ring3>>Ring3 times: 0000030E
    Не понятно что за цифры. В процессоре два ядра. Следует повышать приоритет и устанавливать аффинитет в 1 перед началом измерений. Вобщем смысла нет это мерить, результаты очевидны #36, 37.
    Если нормально измерять, то следует использовать таймер апик, измерения проводить с замаскированными прерываниями(следует залочить память к которой будет происходить в юзермоде обращение, страничное нарушение приведёт к краху, чтобы избежать его придётся патчить ядро), дабы тред исполнился в юзермоде без прерываний(планирования), иначе результаты описывают задержки с учётом планирования и других прерываний.
     
  11. je_

    je_ New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    143
    вторая программа так и написана.
    это полный отчет??
     
  12. reader323

    reader323 New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2009
    Сообщения:
    134
    Поправили бы что-ли орфографию аффтара в его первом посте :)
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    reader323
    Не вижу ничего, что требует поправки.
     
  14. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    [оффтоп]Просмотры скоро int переполнят))
     
  15. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    точнее уже(
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Пусть изучают, должно знать всем базовые принципы.
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Вобщем у толпы одни и теже вопросы.
    Есть два типа ошибок. Первый нэйтивный, или ядерный, имеет префикс STATUS_*. Второй тип пользовательский. Оба кода ошибки находятся в TEB по разным смещениям. Функция RtlGetLastNtStatus() возвращает статус(точнее именно статус, это не обязательно ошибка, код формируется определённым образом), тоесть нэйтивный код ошибки. Функция RtlNtStatusToDosErrorNoTeb() конвертирует статус в пользовательский код ошибки, который и возвращает функция GetLastError(), без загрузки этого кода в TEB. Функция RtlNtStatusToDosError() юзает предыдущую функцию, в добавок она загружает статус в TEB, откуда он может быть считан посредством RtlGetLastNtStatus(). Конвертируются коды особым образом. Соответствия обоиму типу кодов можно увидеть в файле generr.c тут http://indy-vx.narod.ru/Temp/nterr.zip
    Описания соответственно в файлах ntstatus.h и winerr.h
    Теперь почему не следует юзать пользовательские коды ошибкок. Они причина заблуждений. Например смотрим соответствие:
    RtlNtStatusToDosError(STATUS_INVALID_CID) = ERROR_INVALID_PARAMETER, после чего GetLastError() = ERROR_INVALID_PARAMETER.
    Тоесть статус чётко определяет что CID передан не валидный, но винапишный код это не возвращает, а указывает что какойто параметр инвалидный. Для различных ошибок будет возвращаться один и тотже винапишный код:
    Распространённая ошибка - ERROR_ACCESS_DENIED. Причины:
    Например не можите вы с описателем потока чтото сделать, мб это STATUS_THREAD_IS_TERMINATING, тоесть он уже завершился..
    Или например распространённая ошибка ERROR_NOACCESS - соответственно статус:
    Это может быть не выравненные данные, либо исключение по доступу к данным изза инвалидного указателя. Теперь вы юзаете нэйтивные коды ошибок. Вопросы ?
     
  18. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    На коленке писал
    Прога делает лог NT_STATUS и переводит все на русский язык, все ошибки и тп в системе, делалось на коленке как POC для себя. Бинарь.
    https://www.sendspace.com/file/49yjgr
    Password: 2VdXz0cBQJ
    Сорцы
    https://www.sendspace.com/file/s0pqy5
    Password: WRzDr4uJB
     
    yashechka нравится это.
  19. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    RET,

    Можно запилить годный логгер, но вы понимаете суть данной темы и почему это не нужно ?

    - если ньюби использует какой то такой метод, это не даст ему понять суть. Тогда без инструментов решение задачи будет невозможно. Поэтому никакой инструмент в данной теме не приемлем. Годится только отладка и изучение механизмов.
     
  20. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Согласен