A kernel hack to try to get realtime in Windows (NT/XP)

Тема в разделе "WASM.NT.KERNEL", создана пользователем diombre, 1 июн 2009.

  1. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    не порт 0x0c а регистр т.е. Верните редактирование!
     
  2. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    да и вообще конечно у вас код странный какой-то. почему вы вдруг решили весь драйвер перенести сделать в приложении? у вас ваши isr могут выполняться на любом irql а что если их выгрузят в своп будет бсод. те как практическая реализация хоть какой идеи это все не годится если только по треннироваться на кошках
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Откуда инфа? Помойму вы спутали. Дело в том что у IOAPIC и PIC выходы подключенны по разному.

    У IOAPIC
    контакт 0 подключен каскадно к первому PIC
    контакт 2 подключен к PIT.
    контакт 8 подключен к RTC

    У PIC

    контакт 0 подключен к PIT
    контакт 2 подключен каскадно второй PIC.
    контакт 8(0 второго PIC) подключен к RTC


    Но с учетом редиректа они могут быть раставленны как угодно.
     
  4. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    См. первый пост в исходниках там это есть в комментариях. Сам я этим занимался давно и мне помнится что так оно и есть на самом деле
     
  5. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    какая разница что куда подключено-то
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    bugaga
    Дятел сдесь ты.)
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    /offtop
    Заюзал поиск. Оказывается дятел есчо и недалёкий извращенец, жесть:
    ?
    !
    Теперь понятно.
     
  8. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    да уш...

    SashaTalakin, да! сенькс за, пункты 3) 4) не знал.. думал apic в отрубался, и не на что не реагировал. а вообще хохма, прост иногда бывает что S-ICE (хз почему) не рендерит буковки в full-screen... юзаю 4.05.. а тут "повисло", жму ctrl-d, эффекта ноль, думаю опять приплыли..

    и тока на ctrl-alt-del до меня кой как дошло... RTC значит.. хм.. а так кодец простой я внем порты вообще не юзал http://pastebin.com/f63f64dc6
    да вот.. удобство и оперативность превыше! код запустил - отработал.. как protected-mode приложение в dos. и назад.

    (за что я и называю свои работы - скриптами, да)
    вот ни разу не сталкивался с таким эффектом (ибо все скриптом всё зохвачено).. а тестирую жестко,(бывает на всю ночь да). прога отработала - венда как ни вчем не бывало опять поет))


    Clerk, чьябы корова мычала, а чьябы -сосала...
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    bugaga
    Код (Text):
    1.     for i := 0 to $10000000 do begin
    2.       sti();  
    3.         inc(num);
    4.     end;
    Это ппц, ужос Оо.. Ладно дрочите дальше, не буду мешать.)
     
  10. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    да.. RTC поганец.. и венда не удосуживала его востановить!!1
    не ну хоть, таперчиа не виснит..
    http://pastebin.com/f4054779e
    при выходе из цикла со sti() =)
    терь можно покурить маны интеля... че они там про апик пишут..
     
  11. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    млина, вот навертели делов с этим апиком (как гриццо ип***лись на отличненько, да)..

    хм.. предпологал (по логике вещей) что если LocalAPIC (физ адресом FEE00000), в венде замаплен на FFFE0000, то IoAPIC (физ адр FEC00000) будет торчать на FFFC0000 , а фигу - там GPF ночевал (хорошо хоть с перехаченым idt синьки нет)

    вот, тупо перебрутфорсил практически весь kernel space, на предмет полученых данных с тогоже MmMapIoSpace ($FEC00000, и чет не нашел искомой горсти жалких байтов IRQ редиректа..

    мож всётоке замаплен по нормальным адресам ioapic? (ато религия не позволяет юзать всякую х из ntoskrnl, ну)

    а! и вот еще.. сделал либу подставного HAL.dll с тупым редиректом на HALA.dll
    (ну типа нормального)... вот.. а штото нифига с ним не стартует...

    хачил и Image base 80010000, на несколько другие значения. ( и entry point оказываеться нафик там не нужен.. ).. вот.. и странно то синяк то ресетит, нифига не инититься... блэк мэджик чтоль какойто?
     
  12. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    хотя еле вспомнеть приколы в PIC-овых HAL (файлы hal.dll,halacpi.dll) то от мсявок можно всяково ожидать... да

    какогото лешево там присутствует 1-2 инструкции wrmsr, из за чего на apic машинах, оно просто тупо виснит!!1 9090 vs 0F30 хорошо решает эту проблему, да. (удавалось стартовать таким "леченым" HAL-ом, XP на Amd64... ну)
     
  13. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    а фсё.. (у матросов нет вопросов.) хорошая дока попалась http://codeidol.com/other/inside-windows-2000/System-Mechanisms/Trap-Dispatching/
    (гуглинг на запрос "windows local apic FFFE0000 ioapic")
    там вобщем
    ffd02000 хм.. да я там глубину вроде не проверял...
     
  14. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    промерил...
    на hal-apic таблица irq редиректа ffd01000, а на hal-apic-acpi ffd06000 =\

    вобщем болото :dntknw:
     
  15. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    bugaga
    1. Раз уж используешь дефолт физ. адрес то что мешает не париться и тупо промапить его самостоятельно: это лучше с любой точки зрения, как простоты так и переносимости
    2. У меня напр. реализованы алгоритмы и по поиску физического адреса как лапик так и иоапик, не говоря уже о том что я его маплю самостоятельно. Вместо того чтобы ковыряться в кернеле с непонятной целью лучше реализовать универсальный алгоритм который будет работать везде. По трудозатратам это даже проще
     
  16. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    Да ни чего не мешает.. (да и потом в чуть модифицированом dpl3 джампере возможно передавать адреса, на любые ф-кции... http://pastebin.com/f795f423d )

    но во первых.. это немношка не труЪ... так как во многом ухудшает "engine" BugagOS-скрипта.. сводит на нет независимость и кроссплатформеность, (а то же планируеццо запуск и под линупсом... там вроде как тоже LAPIC на FFFE000).

    во вторых.. в венде все уже замаплено за нас - так нафига париться? вот скажем дампы тех же областей памяти:
    http://pastebin.com/f351d575c

    дебугеры как то узнают по какому адреску торчит IOAPIC, причем по FFD0x000 !!1 а не по какомуто левому мапу ED739000 (который возвращает MmMapIoSpace), причем еще лет десять назад блин..
    по этому задача всетоке вбить в Одну константу всю эту хрень. вот :)

    аа.. ну пейджинг я под-забросил, но думаю, вот заняться по-вспоминать...

    цель - ничто, процесс - всё)) (с)

    та какие там трудозатраты.. не тяжелее чем собирать детский конструктор...

    разве что запар с HAL вышел.. http://pastebin.com/f3e70279f - и то весь текст скриптом писан)..
    зы
    перебил тут ntice.sys на эту подставу смотрю - пашет. (хреново как сервис-дров не стопаеться.. ) вот щас замутить думаю фэйк hal+ntoskrnl в одном флаконе
     
  17. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    хм.. а вообще да... логичней сканер пэйджинга забацать. выуживая готовые мапы нужных физ. адресков. чем думать и гадать где там оно в недрах виндозных болот. (да и линупсовых тоже).
     
  18. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    я не про это. я про то что физ адрес тоже не есть константа в общем случае
     
  19. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Ура. Наконецто что-то у меня работает. Сижу на 2003 винде. Сканирую 0С0000000h - почти вся понулям зато
    0С0300000h тут есть данные делаю вывод что страницы по 4мгбайта. Можно брать свободный и мапить что надо.
    Только вот пока не нашел куда апик замапин но точно не на FFC00000. Так что я наверно его сам замаплю.
     
  20. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    Решил таки разобраться как ntice.sys узнает адресок IOAPIC-а...
    скормил idapro, получив 12 метровый асмЪ сорец, туда сюда полистал, поискал текст строк "apic" вышел на искомое:
    Код (Text):
    1.  mov eax, dword_9E455
    2.  push esi
    3.  mov esi, offset aNticeUsingIOAp ; "NTICE: Using I/O Apic at linear address"...
    4.  call sub_4E58E
    ага! и чуть выше:
    Код (Text):
    1.  push esi
    2.  mov eax, 0FEC00000h
    3.  mov esi, offset sub_2BD8F
    4.  call sub_3DF23
    5.  pop  esi
    да знакомый, адресок... не мене интересной оказалоась и следущая ф-кция

    Код (Text):
    1. sub_3DF23 proc near  ; CODE XREF: sub_2BC50+63p
    2.  pusha
    3.  mov  ebp, esp
    4.  sub  esp, 4
    5.  and  eax, 0FFFh
    6.  mov  [ebp-4], eax
    7.  call sub_3E00A
    8.  mov  eax, [ebp+1Ch]
    9.  and  eax, 0FFFFF000h
    10.  mov  edx, eax
    11.  mov  eax, cr3
    12.  mov  edi, eax
    13.  add  edi, dword_9BA02
    явно какойто фронт-енд, для работы со страницами. правда попытки скопипастить решение обламывало большое количество зависимостей от кучи других процедур и данных (к томуже - инициализированых)..

    подумал и решил заюзать скриптец, для горячего-callbacka, этой няшки - благо дров ntice экспортировал кучку сишного/winapi хлама, остановилсо на qsort - представлявший собой тупо редиректовый джамп:

    Код (Text):
    1.   ntice.sys        FRO --------     a32  PE.00
    2.  000546BC| FF25BC030100   jmp   qsort ;ntoskrnl
    с которого можно смещаться на нужный функционал кода

    вбил импорт qsort-а из ntice.sys в интерфейс minidrv.dll, рестартил..

    тема довольнотаки удачно заколбачилась
    Код (Text):
    1. {$apptype console}
    2. program si; uses drvobj, sysutils;
    3.  
    4. const qsort = $546BC;
    5.  
    6. var r:integer;
    7.     proc:integer;
    8.  
    9.     sub_3DF23:integer;
    10.     sub_2BD8F:integer;
    11.     dword_9BA02:integer;
    12.  
    13. procedure asmfunc;
    14. asm   int 1
    15.       push esi
    16.       mov  eax, 0FEC00000h
    17.       mov  esi, sub_2BD8F
    18.       call [sub_3DF23]
    19.       pop esi
    20. end;
    21.  
    22. procedure R0(Drv:PDRV);
    23. begin
    24.   proc:=integer(@Drv.qsort);
    25.  
    26.   if word(pInteger(Proc)^) = $25FF
    27.     then
    28.        begin
    29.           proc := pInteger(pInteger(Proc+2)^)^;
    30.           sub_3DF23 := proc-( qsort - $3DF23 );
    31.           sub_2BD8F := proc-( qsort - $2BD8F );
    32.         dword_9BA02 := proc-( qsort - $3DF45 -2);
    33.     end;
    34.           asmfunc();
    35. end;
    36.  
    37. begin
    38.     callR0(@R0);
    39.     writeln(IntToHex(dword_9BA02, 8));
    40. end.
    прикололся с самоотладкой функции айса...

    ну да - он использовал, выше высказаную тему с трюком по выуживанию адресов из старничных каталогов таблицц.

    вобщем ниче нового это не дало..
    разве что адресок брать который складываеться с CR3 и выводит на директорию страниц..

    волшебный? нет..
    все оказалось какойто банальной сутью всё тогоже мапинга.
    Код (Text):
    1. mov eax, BaseAddress
    2. mov dword_9BA02, eax
    ну логично вроде да. мапим 0 и прибавляем к нему CR3 получая в итоге линейные адреса.
    хотя не труЪ както.. видимо hal.dll ворошить надо по поводу нужных мапов.