ввод кольца 0 из режима пользователя - PullRequest
1 голос
/ 08 января 2011

Большинство современных операционных систем работают в защищенном режиме. Теперь пользовательские программы могут вводить «кольцо 0», непосредственно устанавливая соответствующие биты в некоторых управляющих регистрах. Или это должно пройти какой-то системный вызов.

Я считаю, что для доступа к аппаратному обеспечению нам нужно пройти через операционную систему. Но если мы знаем адрес аппаратного устройства, мы можем просто написать код на ассемблере со ссылкой на местоположение устройства и получить к нему доступ. Что происходит, когда мы даем адрес некоторого аппаратного устройства в коде языка ассемблера.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 08 января 2011

Вы можете попросить операционную систему отобразить память аппаратного устройства в область памяти вашей программы. После того, как это будет сделано, вы можете просто прочитать и записать эту память из кольца 3. То, что это можно сделать или как это сделать, зависит от операционной системы или устройства.

2 голосов
/ 03 июля 2011
; set PE bit
mov cr0, eax
or eax, 1
mov eax, cr0
; far jump (cs = selector of code segment)
jmp cs:@pm

@pm:
; Now we are in PM

Взято из Википедии.

Основная идея - установить (в 1) 0-й бит в cr0 регистре управления.

Но если вы уже находитесь в защищенном режиме (т.е.вы находитесь в windows / linux), безопасность ограничивает вас в этом (вы в кольце 3 - самое низкое доверие).

Так что первым войдите в защищенный режим.

2 голосов
/ 08 января 2011

Чтобы войти в кольцо 0, вы должны выполнить системный вызов, и по своей природе система контролирует, куда вы идете, потому что для вызова вы просто задаете индекс для ЦП, а ЦП заглядывает в таблицу, чтобы узнать, чтозвонить.Вы не можете действительно обойти аспект безопасности (очевидно), чтобы сделать что-то еще, но, возможно, эта ссылка поможет.

...