Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

mov eax, [$ffff5] [D6, WinXP]


Xia ©   (2002-10-29 16:39:00) 

раньше в winxp проходило сл.:

var
BD:dword;
.....
asm
mov eax,[$FFFF5] {- error}
mov bd,eax
end;

сейчас error компилятора.систему и дельфи не менял.что не так?


Digitman   (2002-10-31 17:21:00) [1]

>han_malign

>>For Win95/98 you can do this...
>> BIOSDate := string(pchar(ptr($FFFF5)));

Те же ..., но вид сбоку)
Не будет это работать.


han_malign   (2002-10-31 16:39:00) [2]

Я просто сделал поиск в Google по ключу FFFF5 Delphi

Title: Read from BIOS
From: n_pelov
Date: 03/29/2001 01:05PM PST
Answer Grade: A Points: 5
Hi!
I want to read 8 bytes from address $F000:$FFF5 in BIOS. When I make it with pascal for DOS I have no problems, but if I try it in delphi ot Borland pascal for windows (16 bit) it dosn"t work. Do any one can tell me how to do it?
...............................................................
Accepted Answer from Hamlet 03/29/2001 05:43PM PST
Okay, I"ve checked this out a bit more and you can ignore most of my previous comments!

For Win95/98 you can do this...
BIOSDate := string(pchar(ptr($FFFF5)));

For WinNT you should read from the registry...
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\SystemBiosDate


Digitman   (2002-10-31 15:08:00) [3]

>Странник

Вот в "Потрепаться", сударь, и уместен треп. А здесь - "Система". Малясь промахнулся ты)

Ну а насчет "мапить" ФАП BIOS - оно вполне реализуемо. Только BIOS - как ни крути - здесь ни при чем)


Странник   (2002-10-31 14:56:00) [4]

да ПРИКАЛЫВАЮСЬ Я, неужели не понятно.
ессно, под NT только из нулевого кольца можно напрямую добраться до нижних адресов, а тем более к BIOS.
BIOS не использует ни GDT ни LDT, оно ему на фиг не нужно, а тем более виртуальные адресные пространства каких-то там процессов.

Зри в корень © Козьма Прутков
жуткую смесь паскаля и С и веселого настроения ты принял за чистую монету. :((
Нельзя быть постоянно таким серьезным, да еще в "Потрепаться". ;)))


Digitman   (2002-10-31 14:29:00) [5]

>Странник

Ты это к чему вообще ?

Я, кажется, задал вполне конкретные вопросы :

1. Каким образом исп.код BIOS"а может чего-то там на что-то "мапить", если ему ничего не известно о местоположении GDT/LDT ?

2. Где ты нашел такую декларацию ?

Теперь еще и 3-й вопрос к тебе :
При чем здесь threadvar ? Какое это имеет отношение к сабжу, когда речь идет конкретно о селекторах сегментов, каковые находятся исключительно в ведении protected mode ОС , а не BIOS ?



Странник   (2002-10-31 14:11:00) [6]

ну, уважаемый Digitman и Вы попались...
присмотритесь повнимательней :))
DWORD* AllocateBIOSMemoryPointer(adr:WORD) ;);
ведь правильно будет так:
threadvar ponter* AllocateBIOSMemoryPointer(volatile unsigned pointer BIOSadr); ;^)))


Digitman   (2002-10-31 12:15:00) [7]


> а в BIOS есть недокументированная функция
> DWORD* AllocateBIOSMemoryPointer(adr:WORD););
> которая мапит ROM в адресное пространство вызывающего потока.
> так что все путем...


У потока нет АП. Оно есть у процесса.

Ну и ? Какое отношение ф-ции BIOS (пусть даже и недокументированные) имеет к модели виртуальнй памяти, используемой конкретно в Win32 ? А если работает ОС, отличающаяся от Win32 ? И там нет вообще понятия "процесс" ?

Если же таки речь все же идет не от ф-ции BIOS, а о недок.вызове Win32-ядра, то где, в каком модуле ядра реализована эта ф-ция ?


Странник   (2002-10-31 11:46:00) [8]

забыл добавить, доступна только если RAS/CAS=2 и установлено Shadow BIOS Memory на нужный сегмент.


Странник   (2002-10-31 11:40:00) [9]

> Digitman © (31.10.02 08:32)
а в BIOS есть недокументированная функция
DWORD* AllocateBIOSMemoryPointer(adr:WORD););
которая мапит ROM в адресное пространство вызывающего потока.
так что все путем...


Digitman   (2002-10-31 08:32:00) [10]


> Пока не выделишь себе в программе эту память


Любопытно, как же ты это себе мыслишь ?)


Tano   (2002-10-31 03:56:00) [11]

sorry, не QWORD, а DWORD
и еще - попробуй отключить в опциях компилятора Range Check (можно диективой {$R-})


Tano   (2002-10-31 03:53:00) [12]

Пока не выделишь себе в программе эту память - EXEшник будет писать Access violation, даже если компилятор пропустит. Вообще не знаю, как такую конструкцию пропускал компил - у меня такое вроде не работало. Используй вместо этого
mov ebx,$fff???????
mov eax,[ebx] //или mov eax,QWORD PTR ebx


soware   (2002-10-30 09:30:00) [13]

А под администратором не пробовал логиниться в XP ?


Digitman   (2002-10-30 08:26:00) [14]

>Xia

Если ты даже скомпилировать не можешь, откуда "exe"шник"-то взялся ?)

А насчет AV - правильно "пишет". Адресное пространство BIOS недоступно для обращения через вирт.адр.пространство пользовательского процесса в Win32


Xia   (2002-10-29 19:03:00) [15]

2Digitman
Invalid combination of opcode and operands
А exe"шник пишет ошибку доступа- что там acsess v...
2Наезжалкин
информацию о бивасе знать хочу..
вообщето прогу к компу надо привязать...- кто-нить может подсказать.


Digitman   (2002-10-29 16:46:00) [16]

Какая {- error} ? Конкретно ?


Наезжалкин   (2002-10-29 16:44:00) [17]

[ ] зачем?


Наверх

Титульная страница Поиск, карта сайта Написать письмо