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

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

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: 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 байт, скачиваний: 57)
                Не факт. IRQ5 самое распространённое для звуковых карт, и оно не обязательно будет аппаратным. Я встречал эмуляторы SB, вызывающих его программно.
                Одни с годами умнеют, другие становятся старше.
                  Я в настоящее время не могу проверить это со звуковой картой с IRQ5 из-за наличия отсутствия таковой. Возможно контроль исключения 0DH приведет к тормозу работы звуковой карты (компьютера).

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

                  Добавлено
                  Да, кстати для проверки работы режима 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 может быть непустой, и ем самым он разрушит данные, находящиеся где-то далеко?
                      vpmultishiftqb vscatterpf0dps vfmsubadd132pd vgatherpf1dps vpclmulhqlqdq vcmptrue_ussd vaeskeygenassist
                        Мне не ясно зачем вообще трогать для этих целей SS.
                        Сообщение отредактировано: shm -
                        Цитата TheMachine @
                        т.е. в общем случае вы правы конечно, а мне надо спать больше а пить меньше
                          shm, а вообще да. Если в SS ничего не писать, там останется то, что и было раньше (вместе с теневой частью).
                          vpmultishiftqb vscatterpf0dps vfmsubadd132pd vgatherpf1dps vpclmulhqlqdq vcmptrue_ussd vaeskeygenassist
                            Драйвер 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-битная разрядность данных?
                              vpmultishiftqb vscatterpf0dps vfmsubadd132pd vgatherpf1dps vpclmulhqlqdq vcmptrue_ussd vaeskeygenassist
                                Возможно я ошибаюсь. Вычитал где то,что установка ( в DS и ES ) селектора данных в 32-битной разрядности (без установки 32-го кода), влияет только на регистр ESP.
                                Довольно много программ, для собственных нужд, устанавливают именно 32-бит селектор данных (но не всегда сбрасывают). Возможно они и трогают регистр SS.
                                Но, повторяю, когда я на постоянной основе пытаюсь установить 32-бит и лимитом 4-Г.( в DS и ES ), то компьютер начинает иногда глючить.
                                С 16-бит. разрядностью и лимитом 4-Г., пока с глюками не встречался.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (4) 1 2 [3] 4  все


                                Рейтинг@Mail.ru
                                [ Script Execution time: 0,1259 ]   [ 21 queries used ]   [ Generated: 16.10.18, 10:56 GMT ]