Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi BIOS-Daten aus Speicher in ByteArray (https://www.delphipraxis.net/115388-bios-daten-aus-speicher-bytearray.html)

_BlackDragon_ 11. Jun 2008 12:46


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:
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;
Ich habe auch mal mit den Pointer-Adressen etwas rumgespielt. Allerdings ohne Erfolg
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_

Ghostwalker 11. Jun 2008 13:22

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.

nicodex 11. Jun 2008 13:39

Re: BIOS-Daten aus Speicher in ByteArray
 
Zitat:

Zitat von _BlackDragon_
Ich versuche nun schon geraume Zeit, die BIOS-Daten aus dem RAM in einem ByteArray abzulegen.

Der entscheidende Punkt ist, dass der entsprechende Speicherbereich unter Windows NT gar nicht im Adressraum deines Prozesses abgebildet wird. Unter aktuellen Versionen von Windows NT hat man selbst als Administrator nicht mehr die Berechtigung den physikalischen Speicherbereich im Prozess abzubilden... Dafür wurde eine neue API eingeführt.

http://www.michael-puff.de/Developer...osHelp-3.0.zip

_BlackDragon_ 11. Jun 2008 13:42

Re: BIOS-Daten aus Speicher in ByteArray
 
Hi.

Erstmal danke für die rasche Antwort.

Zitat:

Schau dir mal genau Nico's Art und Weise an, wie er einen Bios-Dump erstellt. Smile
Habe ich, leider blicke ich nicht ganz durch. Habe es allerdings auch nicht bis ins Detail gelesen,
da ich dachte, es würde auch so gehen wie oben beschrieben.

Zitat:

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.
Hey, das hört sich gut an. Wo finde ich Einzelheiten darüber. MSDN ???

Danke.

_BlackDragon_

_BlackDragon_ 11. Jun 2008 13:46

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_

nicodex 11. Jun 2008 14:21

Re: BIOS-Daten aus Speicher in ByteArray
 
Zitat:

Zitat von _BlackDragon_
Ok, dann werde ich mich noch einmal durch die Source wühlen.

Wühlen wäre zuviel des Guten. Die Unit exportiert im Interface nur ein paar Funktionen...

Delphi-Quellcode:
var
  Dump: TRomBiosDump;
begin
  if DumpRomBios(Dump) then
  begin
    //...
  end;
end;
Das war’s schon.

_BlackDragon_ 11. Jun 2008 16:50

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_

Ghostwalker 11. Jun 2008 19:17

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. :)

_BlackDragon_ 11. Jun 2008 21:07

Re: BIOS-Daten aus Speicher in ByteArray
 
Zitat:

Nein. Die einzelnen Strukturen können sonstwo im Speicher (physikalisch) Stehen.
Aha... :shock:

Zitat:

Das ist auch ein Problem bei meinem
SMBIOS-Explorer (siehe Freeware-Sparte).
Auf welche Art und Weise durchsuchst du denn den Dump? Nach bestimmten Strukturen?
Nach der Entry-Table (wie in der Spec beschrieben) ???

Ghostwalker 11. Jun 2008 21:41

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 23:16 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz