![]() |
BIOS-Daten aus Speicher in ByteArray
Hallo Leute.
Ich versuche nun schon geraume Zeit, die BIOS-Daten aus dem RAM in einem ByteArray abzulegen. Leider klappt das nicht so wie ich es gerne hätte. Orientiert habe ich mich am BiosHelper von NicoDe und auch an der SMBIOS-Spezifikation von DMTF. Die Forensuche und auch Google habe mich bis jetzt nicht weiter gebracht. Ich weiß leider nicht wo mein Fehler liegt...
Delphi-Quellcode:
Ich habe auch mal mit den Pointer-Adressen etwas rumgespielt. Allerdings ohne Erfolg
const
SIZE_256K = $3FFFF; RomBiosDumpBase = Cardinal($000C0000); RomBiosDumpBasePtr = Pointer(RomBiosDumpBase); RomBiosDumpEnd = Cardinal($000FFFFF); RomBiosDumpEndPtr = Pointer(RomBiosDumpEnd); RomBiosDumpSize = Cardinal(RomBiosDumpEnd - RomBiosDumpBase + 1); type {PByteArray in SysUtils.pas kann nur max. 32767 Bytes fassen, deshalb die "Eigenkreation"} TBigByteArray = array [0 .. SIZE_256K] of Byte; PBigByteArray = ^TBigByteArray; ... var pba: PBigByteArray; begin pba := RomBiosDumpBasePtr; fs := TFileStream.Create('G:\DUMP.BIOS', fmCreate); try for iIndex := 0 to SizeOf(pba^) do begin fs.Write(pba^[iIndex], SizeOf(Byte)); end; finally FreeAndNil(fs); end; In der Datei, wenn denn mal was reingeschrieben wird, steht nur kauderwelsch, unter anderem auch Ordnernamen. Ich vermute mal, dass ich falsch auf den Speicher zugreife. Vielleicht kann mir mal jemand den Zaun um die Ohren hauen. :-D Danke _BlackDragon_ |
Re: BIOS-Daten aus Speicher in ByteArray
Du kannst nicht einfach auf einen Physicalischen Speicherbereich zugreifen (zumindest nicht unter Windows). Schau dir mal genau Nico's Art und Weise an, wie er einen Bios-Dump erstellt. :) Dort findest du für die unterschiedlichen Windows-Versionen unter-
schiedliche Routinen. Unter NT-basierten System (WinNT, W2K, WinXP, Vista usw.) z.B. muß der gewünschte physikalische Speicherbereich erst in den logischen Speicherbereich gemappet werden, damit du drauf zugreifen kannst. |
Re: BIOS-Daten aus Speicher in ByteArray
Zitat:
![]() |
Re: BIOS-Daten aus Speicher in ByteArray
Hi.
Erstmal danke für die rasche Antwort. Zitat:
da ich dachte, es würde auch so gehen wie oben beschrieben. Zitat:
Danke. _BlackDragon_ |
Re: BIOS-Daten aus Speicher in ByteArray
Uuppps...
Crosspost... Dann kommt direkt auch noch eine Antwort vom "Meister" persönlich. :wink: Jo, soweit war ich ja schon, zum mindest ansatzweise. :P Ok, dann werde ich mich noch einmal durch die Source wühlen. Danke euch beiden schonmal. Gruss _BlackDragon_ |
Re: BIOS-Daten aus Speicher in ByteArray
Zitat:
Delphi-Quellcode:
Das war’s schon.
var
Dump: TRomBiosDump; begin if DumpRomBios(Dump) then begin //... end; end; |
Re: BIOS-Daten aus Speicher in ByteArray
Hi.
Das benutzen der Unit bzw. der Funktionen ist mir schon klar. Allerdings würde ich gerne verstehen was "dahinter" passiert. Deshalb "wühlen". :wink: Aber Danke erstmal, den Record mit den Daten (ByteArray) hab ich ja jetzt. :thumb: Ist es denn sicher, dass hier alle Daten, die auch in der SMBIOS-Spezifikation beschrieben sind, drin stehen? Der gelesene Speicherbereich ist ja derselbe wie in den Dokumenten... Werde mich auf jedenfall nochmal mit dem Quellcode und der Spec auseinander setzen. Gruss _BlackDragon_ |
Re: BIOS-Daten aus Speicher in ByteArray
Nein. Die einzelnen Strukturen können sonstwo im Speicher (physikalisch) Stehen. Das ist auch ein Problem bei meinem
SMBIOS-Explorer (siehe Freeware-Sparte). In den meisten Fällen stehen die Angaben jedoch in dem Dump. :) |
Re: BIOS-Daten aus Speicher in ByteArray
Zitat:
Zitat:
Nach der Entry-Table (wie in der Spec beschrieben) ??? |
Re: BIOS-Daten aus Speicher in ByteArray
Ich gehe nach der Spezifikation. Zuerst den Entriepoint und dort ist hinterlegt, wo die einzelnen Strukturen Anfangen. Eine andere Möglichkeit wäre mir nicht bekannt :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz