Плохие новости - переключить режим ни в какую не получается на GTX 260 Просто ничего нет - no signal ((( Подскажите что нибудь пожалуйста на 2 компах уже работает, а на этом никак ЗЫ: в реальном режиме переключил - переключился - написал put_pixel - вывел линию... так легко а с портами ужс ЗЗЫ начал дизассемблировать прошивку от GTX 260 - начало практически одинаковое.
Treant возможна, проще будет не дизассемблировать а логгировать обращения к портам? Вызвал функцию переключения режимов и смотри что в логах...
Ужас. Treant may not root there. Во-первых про порт 3С3h. Зачем эти танцы с бубном? Это стандартный VGA порт, документации полно - осталось только прочитать. По поводу выставления высоких разрешений. То что ты делаешь - это путь в никуда. Судя по датам постов - ты потратил уже больше двух недель. А результат нулевой. При том что это одна карта, а их десятки, если не сотни. Ты с каждой так извращаться будешь? Есть два нормальных варианта, которые будут работать везде (точнее он один в двух ипостасях). Первый - использовать Vesa Bios Extension, точку входа для работы в 32-битном защищённом режиме. Если она есть (обычно есть). Второй - использовать Vesa Bios Extension в режиме V86. За то время что ты ерундой страдаешь можно было уже написать и отладить поддержку V86 и потом вызывать кучу сервисов BIOS, а не только видео. Если есть 32-битная точка входя для PM - делать вообще ничего не надо практически.
cppasm Да я по документации и делаю и не работает, всмысле не везде работает И еще документация расходится - везде описан порт 3c3h а у intel он reserved. Насчет VESA есть максимум разрешение 1600x1200 и нету таких нестандартных разрешений, как 1024x600 А у меня как назло как раз мониторы 1920x1200, и 1024x600 Да, можно поставить стандартное разрешение, делал уже через VESA, но хочу чтобы без выхода в реальный переключаться, хотя бы на паре карт А что за точка входа для работы в 32 битном режиме?
Treant Логгирование обращений к портам может быть с использованием следующих аппаратных фич: 0) Регистры DRx (DR7). Нормально работают в реальном режиме или в защищенном (про винду далее) но требуют установки своего отладочного прерывания; можно использовать в win98 (vxd), но вообще получается несовместимость с отладчиком типа Sice - отлаживать придеццо через многие reboot'ы; 1) Битовая карта ввода-вывода. Не используется виндой потому и нет ни сервисов под это, и ломать существующую схему этой оси наверное очень сложно (карта на самом деле есть - одна - но она только для третьего кольца или V86 - для виртуализации - так что может если логгировать BIOS то может и прокатит). В не-win защищенном режиме (например для dos с extender'ами) возможно пользовать следующий сервис: ; ; Check Windows present ; mov ax,1600h int 2Fh or al,al jz @@Nowin cmp al,80h jz @@Nowin ... exit @@Nowin: ; Check Int 67h vector - emm push ds push 0 pop ds mov ax,ds:[019Ch] or ax,ds:[019Eh] pop ds jz @@NoEMM ; Check EMM mov ax,0FFA5h int 67h cmp ax,845Ah jz @@EMMExist ; If EMM no present... @@EMMExist: ; Set protected mode ports handler mov ax,4A15h mov bx,0000h ; 0-function mov dx,ds:Port add dx,(PortArea - 1) shl edx,16 mov dx,ds:Port ; port low, port hi mov cx,PortArea ; PortArea ; ports number mov si,offset Table02815 mov ds:[si],dx ; base port number to structure ... mov di,offset @@InitWatcher ;; - offset begin int 2Fh jnc @@EMMOK jmp @@NoEMM @@EMMOK: ; Set new int 28h handler ... 2) У обработчика прерывания #SMI (System Managment Mode) есть фича траппинга портов (в невозбранном количестве в отличии от DRx), причем ему абсолютно пофигу на Ring0 и на все остальное - мониторит все подряд. Единственная проблема - нужно знать для конкретного чипсета как попасть (и поменять) в этот обработчик. На старых моделях не было защиты [SMI] так что можно рекомендовать какой-то старый комп с тестируемой картой. Ну и программные. Возможно перехватывать виндовые stub'ы типа ReadPortUshort (HAL), но гарантии что твои обращения к портам идут через них нет никакой (я бы сказал вероятность почти нулевая... хотя если драйвер от производителя то может он и работает через них). Можно также (если есть возможность запускать потом) тупа патчить изучаемый код - все in/out подпрограммы - на логгирование, но вот не уверен что там будет с BIOS.
Вообще-то можно просто установить обработчик #DB, установить флаг TF, вызвать прерывание 10h и в обработчике уже смотреть на следующую инструкцию, и если это in или out, запоминать произошедшую операцию. Нужно, впрочем, помнить, что int сбрасывает флаг TF, так что вызывать прерывание по pushf / call far [13h*4] (с ds=0), но даже с учётом этого вроде получается проще возни с i/o permission map. Можно с этого момента поподробнее? В мануалах Intel вроде ничего такого нет.
Поищи на форуме, _BC_ 2-3 года назад об этом писАл. Фича заключается в настройке чипсета таким образом, чтобы запись-чтение по определенным адресам I/O space вызывала SMI#, причем SMI# обрабатывается ДО выполнения in/out, в отличие от брекпойнтов по DRx. В общем то влезть в обработчик SMI# нет ничего сложного, для этого даже мануалы по чипсету не нужны (атака, описанная Рутковской). Сложней настроить конкретные девайсы на генерацию SMI# по in/out. _BC_ тогда писАл, что это его ноу-хау
Ага, спасибо, тему нашёл (если кому тоже интересно, вот она: http://www.wasm.ru/forum/viewtopic.php?id=8842&p=2). Впрочем, это чипсетозависимо и далеко не факт, что вообще существует на не-Intel'овских чипсетах, но всё равно интересно.
все гораздо проще. берется дос, отладчик, и трейсится прервывание биоса, которое несомненно полезет в биос видеокарты
Про устанофку лофушки на порт в SMM: Код (Text): Set_IOtrap_I810 proc mov cx,PIIX_ID shl cx , 8 mov PIIX_ID, cx mov cx,PIIX_ID add cx,0c6h mov al,078h ;set port 378h to be call X_Set_Ct ;I/O trap2 mov cx,PIIX_ID add cx,0c7h mov al,03h ;set port 378h to be Call X_Set_Ct ;I/O trap2 mov cx,PIIX_ID; add cx,0cch Call X_Get_Ct and al,0fh ;set I/O trap2 mask Call X_Set_Ct mov cl,41h call X_Get_PMIO or al,00000010b ;enable I/O trap2 call X_Set_PMIO ret Set_IOtrap_I810 endp Это, конечно, проще только сколько инструкций трейсить? 1000h? Больше? BIOS отличаеццо тем что он не отличаеццо оптимизацией. Ты так пробовал делать хоть раз? Я раз сделал и больше не буду. К тому же трейс руками отличается от реального экзекьюшена и устройство в реальном времени может вести себя по-другому нежели когда команды поступают с частотой в 5-10 секунд а то и больше.
PSR1257 Пробовал, в институте. Были проблемы с int3, а пошагово все работало, помоему даже в Turbo Debugger