Посл.ответ |
Сообщение |
Ранг: 4.6 (гость) Активность: 0=0 Статус: Участник
|
Создано: 25 декабря 2007 17:56 · Личное сообщение · #1
Уважаемые друзья!
Может кто-то подскажет. Я пишу прогу транслирую в Masm"е под Виндой.
Когда пытаюсь использовать прерывания БИОСа 10, 16. Выскакивают какие-то ошибки.
Может в прогах под Виндой ХР принципиально невозможно использовать прерывания БИОСа ?
С благодарностью за помощь,
Виктор
| Сообщение посчитали полезным: |
|
Ранг: 107.3 (ветеран), 5thx Активность: 0.2↘0.04 Статус: Участник
|
Создано: 25 декабря 2007 17:59 · Личное сообщение · #2
можно погядеть на сами ошибки?
| Сообщение посчитали полезным: |
Ранг: 51.7 (постоянный) Активность: 0.02↘0 Статус: Участник
|
Создано: 25 декабря 2007 18:44 · Личное сообщение · #3
Да на кусочек кода ещё
| Сообщение посчитали полезным: |
Ранг: 240.5 (наставник) Активность: 0.19↘0 Статус: Участник Author of ACKiller
|
Создано: 25 декабря 2007 19:17 · Личное сообщение · #4
VictorBondarenko пишет:
Может в прогах под Виндой ХР принципиально невозможно использовать прерывания БИОСа ?
Да, для безопасности системы невозможно напрямую обращаться к аппаратуре из юзер-мода.
(Есть одна лазейка, но для ее работы нужно-таки иметь доступ к ринг-0).
| Сообщение посчитали полезным: |
Ранг: 260.2 (наставник) Активность: 0.19↘0 Статус: Участник
|
Создано: 25 декабря 2007 19:29 · Личное сообщение · #5
VictorBondarenko пишет:
Когда пытаюсь использовать прерывания БИОСа 10, 16. Выскакивают какие-то ошибки.
если я не ошибаюсь, под защищеным режимом функции биоса недоступны..
| Сообщение посчитали полезным: |
Ранг: 387.4 (мудрец) Активность: 0.17↘0 Статус: Участник системщик
|
Создано: 25 декабря 2007 21:15 · Личное сообщение · #6
VictorBondarenko, "int X" это привилигированная инструкция. HoBleen написал уже...
| Сообщение посчитали полезным: |
Ранг: 303.7 (мудрец), 4thx Активность: 0.19↘0 Статус: Участник tPORt Manager
|
Создано: 25 декабря 2007 21:18 · Личное сообщение · #7
s0larian пишет:
"int X"
о та ты шо а int 3, а int 1, а ещё многие прерывания? Там просто есть уровень важности прерывания (вроде так) и если он выше порогового значения, то кранты, короче, IDT дампите и курите.
| Сообщение посчитали полезным: |
Ранг: 2014.5 (!!!!), 1278thx Активность: 1.34↘0.25 Статус: Модератор retired
|
Создано: 25 декабря 2007 23:21 · Поправил: Archer · Личное сообщение · #8
На прерываниях повешен уровень привилегий, с которого вызывать их мона, если уровень не меньше, будет вызвано, если меньше-GP будет, покурить на эту тему мона мануал интела, в частности, инструкцию int.
| Сообщение посчитали полезным: |
Ранг: 387.4 (мудрец) Активность: 0.17↘0 Статус: Участник системщик
|
Создано: 26 декабря 2007 10:23 · Личное сообщение · #9
Bit-hack, точняк, вызывать можно.
Archer, в доке ацкий псевдо-код. Как я понял, после всех проверок происходит переключение стека в kernel и прыжок (присвоение EIP) в обработчик. Получается что в IDT для 10h, 21h просто стоит адрес заглушки в ядре? Или там привилегии (в доке упомянут TSS)
| Сообщение посчитали полезным: |
Ранг: 37.1 (посетитель) Активность: 0.01↘0 Статус: Участник
|
Создано: 26 декабря 2007 13:04 · Личное сообщение · #10
s0larian из ring 3 будет GP (из-за привилегий), из ring 0 - BSOD ( заглушка ядра).
| Сообщение посчитали полезным: |
Ранг: 2014.5 (!!!!), 1278thx Активность: 1.34↘0.25 Статус: Модератор retired
|
Создано: 26 декабря 2007 15:34 · Личное сообщение · #11
s0larian
Ну там всё сварганено на аппаратном уровне. Если прав не хватает, выкатиццо GP, а если хватает, то переключение (с сохранением старых флагов, ESP+EIP+ещё кой-чего в стеке) в 0 кольцо, а адрес берёццо из IDT. Поскльку всю идт винда сама заполняет, вполне реально, что там и синячок случится.
| Сообщение посчитали полезным: |
Ранг: 4.6 (гость) Активность: 0=0 Статус: Участник
|
Создано: 27 декабря 2007 13:41 · Личное сообщение · #12
Ребята спасибо всем. Чтобы разговор не был абстрактным
привожу мою детскую прогу полностью.
Если ставлю ";" перед Int 10 все работает.
Как только снимаю ";" , все транслируется и линкуется без ошибок, но
после запуска проги высвечивается стандартное окно
с сообщением, что обнаружена ошибка (какая непонятно), далее извинения
за неудобства и посьба послать в Мелкософт .
Посмотрите, что не так.
С благодарностью за помощь,
Виктор
.386
.model flat, stdcall
option casemap:none
include d:\masm32\include\windows.inc
include d:\masm32\include\kernel32.inc
includelib d:\masm32\lib\kernel32.lib
include d:\masm32\include\user32.inc
includelib d:\masm32\lib\user32.lib
.data
MsgCaption db "Это моя первая программа",0
MsgBoxText db "Win32 Hello World! Привет, Мир!",0
.code
start:
;--------------------------------------------------------------------- ---
MOV AH,09 ;Функция вывода
MOV AL,03H ;Черви (карточная масть)
MOV BH,00 ;Страница 0 (текст. режим)
MOV BL,0F0H ;Мигание, инверсия
MOV CX,05 ;Пять раз
INT 10H ;Вызвать BIOS
;--------------------------------------------------------------------- ------
invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
invoke ExitProcess,NULL
end start
| Сообщение посчитали полезным: |
Ранг: 251.3 (наставник), 81thx Активность: 0.14↘0.11 Статус: Участник
|
Создано: 27 декабря 2007 14:55 · Личное сообщение · #13
Уже ж написали что не так.
В Win32 из UserMode нельзя вызывать прерывания.
А так как ты пишеш даже в KernelMode нельзя - BIOS в ProtectedMode не работает всё равно.
Скрестил две программы - одну под DOS, вторую под Win и спрашиваеш почему не работает
| Сообщение посчитали полезным: |
Ранг: 387.4 (мудрец) Активность: 0.17↘0 Статус: Участник системщик
|
Создано: 27 декабря 2007 20:51 · Личное сообщение · #14
VictorBondarenko, вот, тебе сюда, с первого самого:
win32assembly.online.fr/tutorials.html
| Сообщение посчитали полезным: |
Ранг: 251.3 (наставник), 81thx Активность: 0.14↘0.11 Статус: Участник
|
Создано: 28 декабря 2007 11:22 · Личное сообщение · #15
Не сочтите за рекламу, но вот тоже самое в переводе на русский язык
www.wasm.ru/publist.php?list=1
| Сообщение посчитали полезным: |
Ранг: 516.1 (!), 39thx Активность: 0.28↘0 Статус: Участник
|
Создано: 28 декабря 2007 12:52 · Личное сообщение · #16
для тестирования dos16 программ юзайте dosbox, а не винду
| Сообщение посчитали полезным: |