Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Assemler.Работа в защищенном режиме.

48K
11 ноября 2009 года
magava
4 / / 05.05.2009
Следующая программа осуществляет переход из реального режима в защищенный и обратно,при этом на экране должно выводится слово "hello".Однако,слово не выводится.Может ли кто-то помочь?Заранее спасибо.
P.S Отладка программы делается командами:
tasm /m name.asm
tlink /x/3 name.obj

Код:
.386p
data    segment 'data' use16
message db 'H','7','e','7','l','7','l','7','o',7
message_1=$-message
rest_scr=25*80
GDT label byte
    db  8 dup(0)
GDT_flatCS db   0FFh,0FFh,0,0,0,10011010b,11001111b,0
GDT_flatDS db   0FFh,0FFh,0,0,0,10010010b,11001111b,0
GDT_16bitCS db  0FFh,0FFh,0,0,0,10011010b,0,0
GDT_16bitDS db  0FFh,0FFh,0,0,0,10010010b,0,0
GDT_1=$-GDT
gdtr    dw  GDT_1-1
    dd ?
data    ends

RM_seg  segment para public 'code' use16
    assume CS:RM_seg,SS:RM_stack,ds:data
start:
mov ax,data
mov ds,ax
in al,92h
or al,2
out 92h,al
xor eax,eax
mov ax,PM_seg
shl eax,4
add eax,offset PM_entry
mov dword ptr cs:pm_entry_off,eax
xor eax,eax
mov ax,ds
shl eax,4
push eax
mov word ptr GDT_16bitDS+2,ax
shr eax,16
mov byte ptr GDT_16bitDS+4,al
xor eax,eax


mov ax,cs
shl eax,4
mov word ptr GDT_16bitCS+2,ax
shr eax,16
mov byte ptr GDT_16bitCS+4,al
pop eax
add eax,offset GDT
mov dword ptr gdtr+2,eax
lgdt fword ptr gdtr
cli
in al,70h
or al,80h
out 70h,al
mov eax,cr0
or al,1
mov cr0,eax
db 66h
db 0EAh
pm_entry_off dd ?
dw SEL_flatCS
RM_return:
mov eax,cr0
and al,0FEh
mov cr0,eax
db 0EAh
dw $+4
dw RM_seg
in al,70h
and al,07FH
out 70h,al
sti
mov ah,0
int 16h
mov ah,4Ch
int 21h
SEL_flatCS equ 00001000b
SEL_flatDS equ 00010000b
SEL_16bitCS equ 00011000b
SEL_16bitDS equ 00100000b
RM_seg ends

PM_seg  segment public 'CODE' use32
    assume cs:PM_seg
PM_entry:
mov ax,SEL_16bitDS
mov ds,ax
mov ax,SEL_flatDS
mov es,ax
mov edi,0B8000h
mov ecx,rest_scr
mov ax,720h
rep stosw
mov esi,offset message
mov edi,0B8500h
mov ecx,message_1
rep movsb
db  0EAh
dd  offset RM_return
dw  SEL_16bitCS
PM_seg  ends

RM_stack    segment stack 'STACK' use16
    db  100h dup(?)
RM_stack    ends
    end start
10K
11 ноября 2009 года
palevo060
144 / / 05.09.2009
К сожалению у меня нет TASM, а MASM.
Если в программе нет ошибки то приведу цитату из статьи
http://www.xakep.ru/magazine/xs/035/062/1.asp
Цитата:

К чести Microsoft надо заметить, что на NT-based Виновс этот трюк не срабатывает. Но кто сказал, что мы знаем только один трюк ? :)


В самой статье описывается способ перехода в Ring-0 (в незащищенный), но этот трюк работает только на Windows-95? (согласно статье), а NT - это XP и vista и т.д., но говорят, что есть еще трюки. Вот только почему-то никто так и не рассказал нам те другие трюки. Видимо еще не заслужили :(.
Я дружу с асемблером только 2-й или 3-й месяца и до сих пор не запомнил, что Это слово пишется через удвоенную (С), а насчет перехода в ring-0 я так подумал, что отложу ка я его на годик или пол, пока не наберусь хоть чуть-чуть опыта. А там может и сам смогу справить с ring-0 или статью, кто-нить напишет:D.
На счет статьи, люди если кто-то знает способ для XP обязательно выложите.
А тебе (magava) дам ссылку http://wasm.ru/publist.php?list=24.
Я с первого раза не осилил, но со второго... а второго еще не было:D, но на этой нидельке может будет. Если разберешься раньше меня обязательно сообщи.


Кстати, для того чтобы не писать /////////Программа/////////////, есть кнопка в виде решетки #

 
Код:
(CODE)
Твой исходник.
(/CODE)
48K
11 ноября 2009 года
magava
4 / / 05.05.2009
Спасибо за ссылку.Учту все замечания.:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог