_asm {in/out } в NT подобной ОС?
От: Аноним  
Дата: 29.12.10 07:46
Оценка:
можно ли использовать в nt подобной ОС в частности xp инструкции in/out ?

к примеру вот этот вот кусочек кода

   __asm {
        push edx
            mov dx, io_Port
            mov eax, val
            out dx, eax
            pop edx
    }

падает на
out dx, eax

с ексепшеном 0xC0000096: Privileged instruction.

06.01.11 11:19: Перенесено модератором из 'C/C++' — Odi$$ey
Re: _asm {in/out } в NT подобной ОС?
От: magl Россия  
Дата: 29.12.10 08:15
Оценка:
Здравствуйте, Аноним, Вы писали:

А>можно ли использовать в nt подобной ОС в частности xp инструкции in/out ?


А>к примеру вот этот вот кусочек кода


А>
А>   __asm {
А>        push edx
А>            mov dx, io_Port
А>            mov eax, val
А>            out dx, eax
А>            pop edx
А>    }
А>

А> падает на
А>
А>out dx, eax
А>

А>с ексепшеном 0xC0000096: Privileged instruction.

В прямую так делать нельзя. Надо писать драйвер по правилам Папы Гейтса — WinDDK и иже с ним.
В кривую — есть два три с половиной обходных пути:
1. Попросить кого-нибудь кто знает как это делать (я знаю...).
2. Поискать в ИНЕТЕ что-то вроде Jungo kernel drivers (название могу перепутать)
Смысл в том, что ставится в систему драйвер, который дает замену функциям С outport, inport.
Цена вопроса -50 мкс на одиночное обращение к порту на машинах с 2-3 ГГц процессорами.
Заранее предупреждаю-прерывания от самопальных устройств обычно этим драйвером не поддерживаются.
3. Поискать в ИНЕТЕ драйвер (забыл название) который перестраивает IOPM процессора в результате чего
открывается доступ КО ВСЕМ портам. Ставить это на общедоступную машину не советую-может рухнуть Ось.
Последний раз играл в эти игры на Win2000. На Хр были какие-то мелкие проблемы, но решать их не стал, а стал честно писать драйвера.

3 с половиной. Реанимировать Win95-98. Там такие игры с прямым доступом к портам ненаказуемы — IOPM в "правильном" состоянии.


Удачи!
To err is human... (C)
Re[2]: _asm {in/out } в NT подобной ОС?
От: wolfwood1010  
Дата: 29.12.10 08:43
Оценка:
M>В прямую так делать нельзя. Надо писать драйвер по правилам Папы Гейтса — WinDDK и иже с ним.
M>В кривую — есть два три с половиной обходных пути:
M>1. Попросить кого-нибудь кто знает как это делать (я знаю...).
M>2. Поискать в ИНЕТЕ что-то вроде Jungo kernel drivers (название могу перепутать)
M>Смысл в том, что ставится в систему драйвер, который дает замену функциям С outport, inport.
M>Цена вопроса -50 мкс на одиночное обращение к порту на машинах с 2-3 ГГц процессорами.
M>Заранее предупреждаю-прерывания от самопальных устройств обычно этим драйвером не поддерживаются.
M>3. Поискать в ИНЕТЕ драйвер (забыл название) который перестраивает IOPM процессора в результате чего
M>открывается доступ КО ВСЕМ портам. Ставить это на общедоступную машину не советую-может рухнуть Ось.
M>Последний раз играл в эти игры на Win2000. На Хр были какие-то мелкие проблемы, но решать их не стал, а стал честно писать драйвера.

M>3 с половиной. Реанимировать Win95-98. Там такие игры с прямым доступом к портам ненаказуемы — IOPM в "правильном" состоянии.



M>Удачи!



спасибо за подсказку, попробую пока пункт 2, машина не общедоступная правда довольно специфическая Vortex86DX.
Re[3]: _asm {in/out } в NT подобной ОС?
От: fdn721  
Дата: 29.12.10 10:13
Оценка:
Здравствуйте, wolfwood1010, Вы писали:

W>спасибо за подсказку, попробую пока пункт 2, машина не общедоступная правда довольно специфическая Vortex86DX.


А ты на Убунту забил что ли?

Ну в смысле поставь туда Linux по проще, и напиши свой модуль ядра. Это на порядок проще, чем мучиться с драйверами Windows.
Re[4]: _asm {in/out } в NT подобной ОС?
От: wolfwood1010  
Дата: 29.12.10 10:20
Оценка:
Здравствуйте, fdn721, Вы писали:

F>Здравствуйте, wolfwood1010, Вы писали:


W>>спасибо за подсказку, попробую пока пункт 2, машина не общедоступная правда довольно специфическая Vortex86DX.


F>А ты на Убунту забил что ли?


F>Ну в смысле поставь туда Linux по проще, и напиши свой модуль ядра. Это на порядок проще, чем мучиться с драйверами Windows.


да я бы с радостью, под линух есть пример хотя бы в доках, но начальство в сверху требует XP.
Re[4]: _asm {in/out } в NT подобной ОС?
От: Roman Odaisky Украина  
Дата: 29.12.10 18:57
Оценка:
F>поставь туда Linux попроще, и напиши свой модуль ядра.

Там и без модулей /dev/port есть (требует root, разумеется).
До последнего не верил в пирамиду Лебедева.
Re: _asm {in/out } в NT подобной ОС?
От: roman313  
Дата: 05.01.11 18:50
Оценка:
Есть драйвер с DLL и исходниками, наз. WinIo
Работает и на x64, но только в test mode, т.к. нет цифровой подписи.

Скачивай на http://www.internals.com/



Здравствуйте, Аноним, Вы писали:

А>можно ли использовать в nt подобной ОС в частности xp инструкции in/out ?


А>к примеру вот этот вот кусочек кода


А>
А>   __asm {
А>        push edx
А>            mov dx, io_Port
А>            mov eax, val
А>            out dx, eax
А>            pop edx
А>    }
А>

А> падает на
А>
А>out dx, eax
А>

А>с ексепшеном 0xC0000096: Privileged instruction.
Re[2]: _asm {in/out } в NT подобной ОС?
От: Аноним  
Дата: 06.01.11 08:48
Оценка:
M>3. Поискать в ИНЕТЕ драйвер (забыл название) который перестраивает IOPM процессора в результате чего
M>открывается доступ КО ВСЕМ портам. Ставить это на общедоступную машину не советую-может рухнуть Ось.
M>Последний раз играл в эти игры на Win2000. На Хр были какие-то мелкие проблемы, но решать их не стал, а стал честно писать драйвера.

Драйвер не нужен, есть апишка, позволяющая из user mode для указанного процесса изменить привилегии в карте портов. Все что нужно — админские привилегии у целевого процесса.
Re: _asm {in/out } в NT подобной ОС?
От: CyberDemon Россия  
Дата: 09.02.11 19:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>можно ли использовать в nt подобной ОС в частности xp инструкции in/out ?


Вроде как WinRing0 драйвер умеет так делать. Он фриварный, подписанный для 32/64 битных систем.
Re[5]: _asm {in/out } в NT подобной ОС?
От: Аноним  
Дата: 10.02.11 19:44
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

F>>поставь туда Linux попроще, и напиши свой модуль ядра.


RO>Там и без модулей /dev/port есть (требует root, разумеется).


Есть ioperm()/iopl()
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.