![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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][ ] зачем?