может быть это нужно было в Programming спросить, но это очень близко к железу
в списке устройств винда показывает ресурсы устройства - диапазон адресов
правильно ли я понимаю, что по этим адресам регистры устройства отображены в физическую память компа?
т.е. при обращении по этим адресам памяти на самом деле происходит взаимодействие с этим устройством?
если да, то достаточно ли в NT в драйвере напрямую писать по этим адресам, как по обычному указателю?
а в 9x в драйвере?
Re: адрес PCI-устройства14.11.03 11:56 Автор: Den <Денис Т.> Статус: The Elderman
> правильно ли я понимаю, что по этим адресам регистры > устройства отображены в физическую память компа? Регистры отражаются в порты ввода/вывода.
В неиспользуемые оперативной памятью адреса отображается собственная память устройства. Это напоминает работу DMA контроллера с той лишь разницей, что DMA контроллер позволяет каждый раз выделять произвольные адреса для работы устройства (см. свойства контроллера floppy дисков).
> т.е. при обращении по этим адресам памяти на самом деле > происходит взаимодействие с этим устройством? Безусловно происходит взаимодействие, иначе какого рожна они там болтаются...
> если да, то достаточно ли в NT в драйвере напрямую писать > по этим адресам, как по обычному указателю? > а в 9x в драйвере? Только в режиме ядра.
Советую почитать книжку по архитектуре i386.
адрес PCI-устройства14.11.03 10:03 Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman Отредактировано 14.11.03 10:20 Количество правок: 1
> может быть это нужно было в Programming спросить, но это > очень близко к железу
Наверное можно и здесь, в программинге больше как-то алгоритмические языки, системные функции, библиотеки и алгоритмы обсуждают.
> в списке устройств винда показывает ресурсы устройства - > диапазон адресов > правильно ли я понимаю, что по этим адресам регистры > устройства отображены в физическую память компа?
Правильнее сказать "в адресное пространство центрального процессора", но об этом ниже.
> т.е. при обращении по этим адресам памяти на самом деле > происходит взаимодействие с этим устройством? > > если да, то достаточно ли в NT в драйвере напрямую писать > по этим адресам, как по обычному указателю? > а в 9x в драйвере?
Для хакерской программы достаточно стукнуться по тем адресам, что видно.
По-хорошему нужно понять одинаковый ли это ресурс по назначению для всех подобных устройств (например видеопамять видеоадаптера).
Лучше, конечно, программно узнать что это за устройство (найти то, которое нужно) по параметрам DeviceID, VendorID, DeviceTYPE и др. Затем узнать его адреса, поскольку они могут меняться произвольным образом (ПНП). Затем стучаться по этим адресам, руководствуясь техническим описанием. Программа будет заточена только под этот вид устройств.
Причем из-под ДОСа это элементарно, под ВинНТ проблемы гарантированы (либо винда не даст прямой доступ, либо будут коллизии от одновременного доступа нескольких программ, поскольку винда многозадачная).
Разумеется следует различать адреса портов и памяти, хотя чипы могут отображать порты в память.