![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
jungle |
|
|||
![]() Аппаратный кодер Профиль Группа: Участник Сообщений: 40 Регистрация: 17.1.2006 Где: Беларусь Репутация: нет Всего: нет |
Хэллоу, друзья!
Помогите корректно перевести сишный сорсис для доступа в привилегированный режим ядра Windows 9x – Ring0. Мой перевод, увы, пока не работает. Может быть кто-то силён в Си и Delphi (паскаль) одновременно? Исходный cpp код в прикреплении.
Присоединённый файл ( Кол-во скачиваний: 12 ) ![]() |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Имхо так ![]() вроде не ошибся -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
jungle |
|
|||
![]() Аппаратный кодер Профиль Группа: Участник Сообщений: 40 Регистрация: 17.1.2006 Где: Беларусь Репутация: нет Всего: нет |
Romikgy,
Пишет Incompatible types для строчки pCallgate:=CALLGATE_DESCRIPTOR(pGDTDescriptor); ![]() О! Надо просто было объявить переменную pCallgate : CALLGATE_DESCRIPTOR; Сейчас заценим под Windows 9x на другой машине… Добавлено @ 11:51 Romikgy, Неа, не катит - исключение "ошибка доступа... Запись данных по адресу". Код обновил.
Это сообщение отредактировал(а) jungle - 26.6.2006, 11:44 |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Это где? И я не понял , ты делаешь прогу не под 98, а запускаешь под 98? Добавлено @ 12:34 И вопрос который меня мучает в этой теме : НА КОЙ ТЕБЕ ПОД 98 НУЖНО НУЛЕВОЕ КОЛЬЦО????? Имхо в 98 проблем с асмом нет, нулевое кольцо нужно для планки виндов НТ -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
jungle |
|
|||
![]() Аппаратный кодер Профиль Группа: Участник Сообщений: 40 Регистрация: 17.1.2006 Где: Беларусь Репутация: нет Всего: нет |
Romikgy,
Исходный код компилируется отлично. Как самый простейший пример – вызов функции CallRing0 я передаю в обработчике нажатия кнопки. Так вот после нажатия кнопки вываливается ошибка «Access violation at address XXXXX in module Project1.exe.Write of address XXXXX» Нулевое кольцо под Windows 98 мне нужно для чтения привилегированных MSR-регистров процессора, в частности, для вызова инструкции rdmsr. Конечно, это цивилизованно делается через vxd-драйвер, который ещё нужно грамотно написать, но, увы, нет желания постигать устаревшую «грамоту». |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
jungle, покажи как используешь
![]() Я дома проверю на 98 -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
jungle |
|
|||
![]() Аппаратный кодер Профиль Группа: Участник Сообщений: 40 Регистрация: 17.1.2006 Где: Беларусь Репутация: нет Всего: нет |
Romikgy,
Испоьзую очень просто: CallRing0(@Ring0ReadMSR,$10,0,0); MSR $00000010 - счетчик тактов процессора TSC. Я б Delphi на ту машину с Win98 поставил бы да в отладчике прозвонил бы, да вот места на харде нет. |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
jungle |
|
|||
![]() Аппаратный кодер Профиль Группа: Участник Сообщений: 40 Регистрация: 17.1.2006 Где: Беларусь Репутация: нет Всего: нет |
Ring0ReadMSR - это процедура чтения MSR регистра, адрес которой должен передаваться в функцию CallRing0 для выполнения Ring0ReadMSR в нулевом кольце.
|
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Что должно быть после выполнения этой функции?
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
jungle |
|
|||
![]() Аппаратный кодер Профиль Группа: Участник Сообщений: 40 Регистрация: 17.1.2006 Где: Беларусь Репутация: нет Всего: нет |
Число, которое, увеличивается при каждом повторном считывании TSC регистра (адрес $10).
Добавлено @ 16:49 Хотя не принципиально, какая функция должна быть выполнена в нулевом кольце. Можно, например, написать функцию чтения портов или любую другую и передать ее адрес в функцию CallRing0 в качестве первого параметра. Просто процедура чтения MSR регистров Ring0ReadMSR как раз та, которая мне нужна. |
|||
|
||||
Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: нет Всего: 29 |
Я конечно не очень разбираюсь в Delphi, но моё мнение: структуры TGDT_DESCRIPTOR, TCALLGATE_DESCRIPTOR, TGDTR описаны не верно.
|
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
хмммм..... jungle, тогда хедерный файл в студию, а то в твоем архиве оба сишных, по внутреностям -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Damarus |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: нет Всего: 29 |
Romikgy, думаю хедерный файл не поможет. Мне кожется они и в нём описаны не верно. Моё мнение основано на этом:
IA-32 Intel® Architecture Software Developer’s Manual Volume 3: System Programming Guide
|
||||||||
|
|||||||||
jungle |
|
|||
![]() Аппаратный кодер Профиль Группа: Участник Сообщений: 40 Регистрация: 17.1.2006 Где: Беларусь Репутация: нет Всего: нет |
Romikgy,
Вот хедер:
|
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Так попробуй -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
jungle |
|
|||
![]() Аппаратный кодер Профиль Группа: Участник Сообщений: 40 Регистрация: 17.1.2006 Где: Беларусь Репутация: нет Всего: нет |
Нет, не катит. Пишет "Access violation at address.... Read of address....".
|
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
jungle, после какой команды это?
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 1 Всего: 124 |
Что касается RDTSC (MSR#10h), то он читается и без перехода в 0 кольцо...
В DOS-овской программе, работающей в Win9x-окне, правда не проходит... Это сообщение отредактировал(а) SergeCpp - 27.6.2006, 15:58 |
|||
|
||||
jungle |
|
||||
![]() Аппаратный кодер Профиль Группа: Участник Сообщений: 40 Регистрация: 17.1.2006 Где: Беларусь Репутация: нет Всего: нет |
Romikgy,
Откуда ж мне знать? ![]()
Мне не нужна инструкция RDTSC, хотя и ее тоже можно сделать привилегированной через установку единственного бита CR-регистр процессора. TSC регистр взят в качестве совместимого как для всех AMD, так и Intel процессоров. Добавлено @ 16:04
RDTSC - типичная инструкция процессора, а MSR 10h - регистр процессора, т.е. это абсолютно разные вещи. |
||||
|
|||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
jungle, дай весь исходник , что компилируешь, я дома проверю
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
jungle |
|
|||
![]() Аппаратный кодер Профиль Группа: Участник Сообщений: 40 Регистрация: 17.1.2006 Где: Беларусь Репутация: нет Всего: нет |
Romikgy, наиболее корректный: http://forum.vingrad.ru/index.php?showtopic=101839&st=0# (моё второе сообщение в этой ветке)
Код, с учетом твоих последних поправок, также не рабочий. Поэтому код надо юзать тот, что указан по ссылке выше. Это сообщение отредактировал(а) jungle - 27.6.2006, 17:00 |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
jungle, нда , трудно было свой проект сжать и сюда закинуть ?
Или ты считаешь , что у меня этого кода нет? Странный ты , тебе помочь , хочу, а ты не шивелишься ![]() Как знаешь , сегодня я уже домой иду, буду в нете (нормальном) только послезавтра) бывай ![]() -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
jungle |
|
|||
![]() Аппаратный кодер Профиль Группа: Участник Сообщений: 40 Регистрация: 17.1.2006 Где: Беларусь Репутация: нет Всего: нет |
Лови!
Добавлено @ 17:14 Надеюсь успел ![]() Это сообщение отредактировал(а) jungle - 27.6.2006, 17:21 Присоединённый файл ( Кол-во скачиваний: 7 ) ![]() |
|||
|
||||
jungle |
|
|||
![]() Аппаратный кодер Профиль Группа: Участник Сообщений: 40 Регистрация: 17.1.2006 Где: Беларусь Репутация: нет Всего: нет |
Здарова!
Заново переписал аналогичный сишный код, позаимствованный из книжки «Программирование аппаратных средств в Windows». Код отличается тем, что функция вызывает в нулевом кольце процедуры не чтения MSR-регистров, а чтения-записи портов. Сама суть поиска свободных дескрипторов та же самая. Прилагаемый архив содержит 4 страницы подробного сишного кода из вышеназванной книги и почти завершенный Delphi проект. Однако полагаю, что проблема как раз с передачей адреса вызываемой процедуры: call fword ptr [CallgateAddr] В Delphi типа fword не существует. Т.е. проблема с переводом кода на Delphi уже решена, остаётся только найти конкретную ошибку. Присоединённый файл ( Кол-во скачиваний: 9 ) ![]() |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
нет У меня все работает, кроме: эти асм команды не воспринимаются , немного помучился с SGDT , и его заюать получилось ![]() но в ХР он ссылается на реальный участок памяти , в 98 в никуда ![]() Что должно возращать эта команда? и что за команды , которые не воспринимаются? с какого проца они есть ? у меня дома Атлон и или он не видит , или компилятор дельфей ![]() Пробовал даже исходник на си запустить в си билдере, тоже не работает ![]() отсель вопрос откуда код взят? и почему ты решил что он рабочий? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
jungle |
|
|||
![]() Аппаратный кодер Профиль Группа: Участник Сообщений: 40 Регистрация: 17.1.2006 Где: Беларусь Репутация: нет Всего: нет |
Romikgy,
Замени инструкции следующими эквивалентами в ассемблерной вставке rdmsr – dw $320F wrmsr – dw $300F Инструкции rdmsr и wrmsr понимаются компилятором Delphi 6 и выше, иначе заменяй их опкодами, приведенными выше. Сорсис я нашел в инете – Гуглой по запросу Ring0+Delphi+Windows9x. Очень много ссылок приводилось на китайские сайты. С одного из них я и слил cpp и h-файл, ссылку, увы, не запомнил. Но сейчас я больше доверяю коду, который перевёл с книги, название которой я уже приводил. Сейчас у меня проблема одна: компилятор Delphi 6 спотыкается на строчке call fword ptr [CallgateAddr] в ассемблерной вставке. |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
jungle |
|
|||
![]() Аппаратный кодер Профиль Группа: Участник Сообщений: 40 Регистрация: 17.1.2006 Где: Беларусь Репутация: нет Всего: нет |
Похоже Паскальный аналог Int64 - 4 слова.
|
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
не, не похоже
![]() 48 бит. селектор+оффсет примерно так, чтобы не париться с компилером:
если что, заменить "call fword ptr [esp]" на "dd 90241cffh" |
|||
|
||||
Girder |
|
|||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 25 Всего: 155 |
-------------------- Как слышим, так и пишим. Истина где-то там... |
|||
|
||||
jungle |
|
||||
![]() Аппаратный кодер Профиль Группа: Участник Сообщений: 40 Регистрация: 17.1.2006 Где: Беларусь Репутация: нет Всего: нет |
Вот в чем фигня:
Процедура showmessage вызовет исключение, т.к. переменная pGDTHandle будет содержать только адрес gdt.dwGDTBase дескриптора, но не заполненную структуру GDT_HANDLE. А значит, при попытке обратиться к полям записи pGDTHandle будет всегда генерироваться ошибка чтения. Т.е. строчка
Не заполняет поля переменной pGDTHandle содержанием полей дескриптора! |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |