· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› CR0

Посл.отвђт Сообщенiе


Дата: Июл 28, 2003 06:52:46

Такой вопросик.
Как известно, если мы попробуем выполнить нечто вроде
mov eax,cr0 на 3-м кольце, то винда пошлет прямо к Биллу Гейтсу. Регистр cr0 как бы закрыт на чтение (и уж тем более на запись). Но вот что интересно: можно прочитать младшие 16 бит регистра коммандой smsw ax. Оно так и должно быть или это бага?


Дата: Июл 28, 2003 07:04:36

Можно прочитать все 32 бита из 3го кольца.


Дата: Июл 29, 2003 02:38:11

И як же, если не секрет?


Дата: Июл 29, 2003 04:21:25

с помощью того же smsw.
Только указать 32 регистр в качестве операнда.
(Если используешь MASM в 32 битном режиме он
будет сообщать об ошибке если ты напишешь
smsw eax
Но смешно что если ты напишешь
smsw ax
то он на самом деле сгенирирует опкод для smsw eax.
0F01E0
smsw ax будет с префиксом и не меняет старшие биты reg32
660F01E0
Я об этом писал ещё на Win32asmcommunity.
Написан код драйвера и пользовательский
который выполнял mov eax,cr0 и smsw eax и показывал результаты.
Там активно это обсудили,
Томаш подкорректировал FASM по такому случаю.
И код протестировала куча людей на разных машинах.
От Pplain до P4 и аналоги их включая экзотические.
Если у тебя NT подобная система (NT,2000,XP)
то можешь проверить это у себя.
Посылаю тест.
Можно и просто набрать в дебагере код для smsw eax
посмотреть результат, перейти в SoftIce набрать там CPU,
посмотреть на значение CR0.





_324751327__scl.zip


Дата: Июл 29, 2003 13:38:32

В аттаче DumpXDT.zip by EliCZ. Может до сих пор у него лежит...http://www.anticracking.sk/EliCZ/ ->Раздел Exports

Запустить с ключиком \r.


The Svin, копаться в этом мне лень, но у мя все эти способы выдают значение cr0 с установленным 17-м битом, хотя айс всегда кажет со сброшенным. Т.е.:

Програмно:
CR0=8001003B

Айс:
CR0=8000003B


476583848__DumpXDT.zip


Дата: Июл 29, 2003 15:01:27

на MessageBox что у тебя?
2 значения одинаковые?
Похоже бит система сбрасывает в определённых нитях.


Дата: Июл 29, 2003 16:24:43 · Поправил: Four-F

[ The Svin: на MessageBox что у тебя? ]

Перед вызовом MessageBox айс говорит , что cr0=8000003B.
А MessageBox - "mov eax,cr0=8001003B; smsw eax = 8001003B"


Дата: Июл 29, 2003 16:49:40

Т.е. в одном процессе smsw reg32 и mov reg32,cr0 одно показывают. А то я испугался :)


Дата: Июл 30, 2003 04:43:57

Интересно, сам Sice меняет CR0 или система/оба.
Sice в NT конкретно использует модификацию CR0
в модуле siwvid.sys (как то с видео связано?)


Дата: Июл 30, 2003 05:40:39

Вот кусочек из siwvid.sys

.0001449B: 50 push eax
.0001449C: 25FFFFFEFF and eax,0FFFEFFFF
.000144A1: 0F22C0 mov cr0,eax
.000144A4: BFA0020100 mov edi,0000102A0
.000144A9: E8EA000000 call .000014598
.000144AE: 58 pop eax
.000144AF: 0F22C0 mov cr0,eax
.000144B2: 58 pop eax

Сам модуль siwvid.sys в памяти.
Снимает этот кусок как раз 16ый бит - WP.

И вот маленький справочник-програмку я написал,
она показывает текущее состояние CR0, и если
щелкнуть мышкой по имени флага - внизу появляется
описание этого флага.


_68431540__CR0.ZIP


Дата: Июл 30, 2003 14:07:27

А вспомнил я эту фичу. Разумеется айс манипулирует cr0 для получения права писать в защищенные от записи страницы.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.066