На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Для обсуждения создания операционных систем (ОС) используйте раздел Обсуждаем новые идеи.

3. Настоятельно рекомендую обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Перед созданием темы просмотрите FAQ раздела Assembler и Полезные ссылки.
  3.2. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "В чём проблема?" будут отправляться в Корзину для мусора.
  3.3. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).

Не забывайте также про главные ПРАВИЛА ФОРУМА!
Участники форума, нарушающие правила, будут наказываться, а вносящие вклад в развитие форума - награждаться (DigiMoney и прочими радостями).

Приятного вам общения! ;)
Модераторы: Jin X, Qraizer
Страницы: (4) 1 2 [3] 4  все  ( Перейти к последнему сообщению )  
> Переход в нереальный режим, загрузчик
      Довольно долго эксперементировал в DOS c режимом UNREAL(нереальный режим). Столкнулся с многими неприятностями. Основная неприятность, это
      некоторые программы переводят DOS в режим REAL (реальный режим). Спрвится с ними (программами) не сложно. Нужно найти в коде программы,
      с помощью HEX редактора селектор отвечающий за перевод в режим REAL и откоректировать его на перевод в режим UNREAL. Но за всеми программами не
      уследишь, и рано или позно появится что то переводящее среду DOS в режим REAL. Выйти из этого положения можно несколькими способами.

      1. Контролировать исключение 0DH, путем установки драйвера и при его появление, устанавливать режим UNREAL.
      2. В каждой программе ввести код, который при обращение за пределы сегмента, устанавливает режим UNREAL.

      Я так и не выяснил, что лутше. Установить драйвер на своем коммъютере, (можно попасть в просак на чужом компъютере),или вписывать код перехода
      в UNREAL в каждой программе (что иногда накладно). Пока, для себя я разработал драйвер KEY_R8.SYS (аналог KEYRUS), и в его тело включил
      обработчик исключения 0DH, переводящий в режим UNREAL. Если кому интересно, могу поделится алгоритмом перехвата исключения 0DH и установки UNREAL.
        2-ой вариант будет сильно напрягать всех, начиная с антивирусов. 1-ый проблематичен в связи с необходимостью отделять исключение от IRQ.
        Я бы упомянул 3-ий вариант: т.к. подавляющее большинство "нехороших" программ используют protect mode, а тот в свою очередь реализован в них через стандартизированные интерфейсы DPMI (или VCPI, но тут я затрудняюсь дать оценку трудоёмкости решения, скорее, оно будет гораздо проще... но я уже плоховато помню нюансы), то имеет смысл универсально решить проблему посредством собственного DPMI-хоста. И это не так сложно как может показаться. В составе QEMM есть готовый qdpmi.sys, который теоретически несложно отреверсить. К нему там прилагаются ещё управляющая консоль qdpmi.com и менеджер виртуальной памяти qdpmivm.ovl, но без них реверсинга, почти уверен, можно обойтись. Правда, боюсь, qdpmi.sys может быть завязан на сервисы самого QEMM...
        Одни с годами умнеют, другие становятся старше.
          Зачем все это?
          Цитата TheMachine @
          т.е. в общем случае вы правы конечно, а мне надо спать больше а пить меньше
            Та ради фана, почему нет. А зачем в современном мире вообще ассемблер?
            Одни с годами умнеют, другие становятся старше.
              Отделить исключение от IRQ не так уж сложно. Это показано в прикрепленном файле. Я в последнее время не веду контроль над IRQ. Ничего страшного если вместо исключения сработает IRQ, да и не нашел я прерываний 0DH в своем программном обеспечение.
              Прикреплённый файлПрикреплённый файлmasm.txt (743 байт, скачиваний: 17)
                Не факт. IRQ5 самое распространённое для звуковых карт, и оно не обязательно будет аппаратным. Я встречал эмуляторы SB, вызывающих его программно.
                Одни с годами умнеют, другие становятся старше.
                  Я в настоящее время не могу проверить это со звуковой картой с IRQ5 из-за наличия отсутствия таковой. Возможно контроль исключения 0DH приведет к тормозу работы звуковой карты (компьютера).

                  P.S. совсем забыл. В предыдущем фрегменте использовал макросы.
                  Прикрепляю их.
                  Прикреплённый файлПрикреплённый файлMACRO0.MAC (2,56 Кбайт, скачиваний: 8)

                  Добавлено
                  Да, кстати для проверки работы режима UNREAL на виртуальной машине, нужно удостоверится, что сама среда не находится в режиме REAL.
                  Я однажды накололся на этом. Установил режим UNREAL, все прекрасно работает. Но на реальной машине зависает. Проверил.
                  Оказывается, что VMware (не все версии) изначально запускается уже в режиме UNREAL.
                    Обнаружил небольшую ошибку в большинстве программ, которые применяют тежим UNREAL.
                    Эта ошибка присутствует да же в таких мощных программах как драйвер HIMEM.SYS
                    Это дескриптор данных (загужается в сегменты данных DS ES ...).

                    GDT_DS dd 00000FFFFh,000CF9300h ;4-GB data segment.

                    Ошибка заключается в том, что бит разрядности данных = 32.
                    Но при 16-битном коде, это влияет только на регист стека.
                    Программа начинает использовать вместо регистра SP, регистр ESP .
                    Обычно программы DOS не использую регистр ESP, но если оставить
                    мусор в старших битах ESP (биты 16...31), то дальнейшая судьба DOS, это крах.
                    Например программа HIEW.EXE делает это иногда (HIMEM.SYS не использует ESP).
                    Я по возможности исправляю это и сам использую дескриптор

                    GDT_DS dd 00000FFFFh,0008F9200h ;4-GB data segment.

                    Проблем на порядок становится меньше.
                      andr00, хочешь сказать, что когда HIMEM выходит в PM (для предоставления блока памяти проге), он использует текущий программный стек, в котором старшая половина ESP может быть непустой, и ем самым он разрушит данные, находящиеся где-то далеко?
                      Tell me would you kill to save a life?
                      Tell me would you kill to prove you're right?
                      Crash, crash, burn, let it all burn
                      This hurricane's chasing us all underground...
                        Мне не ясно зачем вообще трогать для этих целей SS.
                        Сообщение отредактировано: shm -
                        Цитата TheMachine @
                        т.е. в общем случае вы правы конечно, а мне надо спать больше а пить меньше
                          shm, а вообще да. Если в SS ничего не писать, там останется то, что и было раньше (вместе с теневой частью).
                          Tell me would you kill to save a life?
                          Tell me would you kill to prove you're right?
                          Crash, crash, burn, let it all burn
                          This hurricane's chasing us all underground...
                            Драйвер HIMEM.SYS после предоставления блока памяти в области XMS, оставляет в сегментах DS, ES (скрытая часть) 4-гигабайтный лимит и 32-битную разрядность данных. 32-битная разрядность может сыграть плохую шутку, и компъютер зависнет. Я с помощью hex-редактора (HIEW.EXE) нашел дескриптор, отвечающий за перевод в 4-гиг. режим 32-бит. разрядности по сигнатуре

                            0ffh,0ffh,000h,00h,000h,093h,0сfh,00h

                            и заменяю его на 4-гиг. режим 16-бит. разрядности.

                            0ffh,0ffh,000h,00h,000h,093h,08fh,00h

                            К стати, именно программа HIEW.EXE иногда глючит на 32-битной разрядности.
                              Цитата andr00 @
                              32-битная разрядность может сыграть плохую шутку, и компъютер зависнет.
                              Ты же говорил про стек.
                              Какую плохую шутку может сыграть 32-битная разрядность данных?
                              Tell me would you kill to save a life?
                              Tell me would you kill to prove you're right?
                              Crash, crash, burn, let it all burn
                              This hurricane's chasing us all underground...
                                Возможно я ошибаюсь. Вычитал где то,что установка ( в DS и ES ) селектора данных в 32-битной разрядности (без установки 32-го кода), влияет только на регистр ESP.
                                Довольно много программ, для собственных нужд, устанавливают именно 32-бит селектор данных (но не всегда сбрасывают). Возможно они и трогают регистр SS.
                                Но, повторяю, когда я на постоянной основе пытаюсь установить 32-бит и лимитом 4-Г.( в DS и ES ), то компьютер начинает иногда глючить.
                                С 16-бит. разрядностью и лимитом 4-Г., пока с глюками не встречался.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (4) 1 2 [3] 4  все


                                Рейтинг@Mail.ru
                                [ Script Execution time: 0,1182 ]   [ 18 queries used ]   [ Generated: 18.10.17, 16:42 GMT ]