Seite 1 von 2

Bioswerte auslesen. Wie gehts mit PB?

Verfasst: 18.01.2005 10:04
von gonimaus
Hallo,
ich möchte einen bestimmten Adressbereich (String) auslesen und finde irgendwie keinen Einstieg. Unter C/DOS gings mit:

Code: Alles auswählen

char far * pString = (char far *) _MK_FP(0xf000,0xdb8e);
...
Den Stringpointer pString konnte ich dann weiterverarbeiten. Könnte das irgendwie mit PEEK und POKE funktionieren?

Wer kann mir helfen?

Gruß Gonimaus

Verfasst: 18.01.2005 13:54
von MVXA
ich glaub, dafür sollte man die inout32.dll verwenden. Mit der konnte man diese Werte auslesen. Bin mir aber nicht wirklich sicher :(.

Verfasst: 18.01.2005 22:15
von gonimaus
Hallo LittleFurz,

ich hab mir die DLL heruntergeladen, komme aber irgendwie nicht so richtig weiter. Ich möchte z. B. das F-Segment auslesen und den Inhalt mit bestimmten Inhalten vergleichen.

Hast Du noch weitere Tipps?

Wäre sehr dankbar.

Gruß Gonimaus

Verfasst: 19.01.2005 10:28
von MVXA
Ich habe damals ein Tipp in VB gesehn. In Errinerung hatte ich, dass dazu die InOut32.dll verwendet wurde. Ich kann gerne Zuhause nochmal nachsehen. Bin grad im Praktikum (auf der Arbeit) und genieße meine Frühstücks Pause.

Verfasst: 21.01.2005 14:44
von gonimaus
Ich habe auch unter VB gestöbert. Aber ich komme nicht weiter. Hat noch jemand einen Tip?

Gruß Gonimaus

Verfasst: 21.01.2005 16:48
von Stefan
Hallo

Hab gerade einen alten Code von mir gefunden, der das Video-BIOS ausliest:

Code: Alles auswählen

;Benutzung auf eigene Gefahr !

Procedure GetVideoBios(Addr);Reads 32736 bytes from the Video-BIOS.
  Path$=Space(#MAX_PATH)
  If GetTempPath_(#MAX_PATH,@Path$)=0:ProcedureReturn 0:EndIf
  
  Handle=CreateFile_(Path$+"VBIOS173.COM",#GENERIC_WRITE,#FILE_SHARE_WRITE,0,#CREATE_ALWAYS,#FILE_ATTRIBUTE_TEMPORARY,0)
  If Handle
    WriteFile_(Handle,?StartCOM,?EndCOM-?StartCOM,@dummy,0)
    CloseHandle_(Handle)
  Else
    ProcedureReturn 0
  EndIf
  
  If RunProgram(Path$+"VBIOS173.COM","",Path$,1|2)=0
    DeleteFile(Path$+"VBIOS173.COM")
    ProcedureReturn 0
  EndIf
  
  If OpenFile(1,Path$+"OVBIOS91.DAT")
    ReadData(Addr,$7FE0)
    CloseFile(1)
    DeleteFile(Path$+"VBIOS173.com")
    DeleteFile(Path$+"OVBIOS91.DAT")
    ProcedureReturn -1
  EndIf
  
  ProcedureReturn 0
  StartCOM:;DOS-Programm
  !MOV Eax,CS
  !MOV DS,Eax
  
  !MOV AH,3Ch
  !MOV DL,42
  !MOV DH,1
  !XOR Ecx,Ecx
  !INT 21h
  
  !MOV EBX,Eax
  
  !MOV CL,224
  !MOV CH,7Fh
  
  !XOR Eax,Eax
  !MOV AL,0
  !MOV AH,192
  !MOV DS,Eax
  !MOV AH,40h
  
  !XOR EDX,EDX
  !INT 21h
  
  !MOV AH,3Eh
  !INT 21h
  
  !MOV AH,4Ch
  !INT 21h
  
  !DB "OVBIOS91.DAT",0
  EndCOM:
EndProcedure






;Example:

Addr=AllocateMemory($F7E0)
If GetVideoBios(Addr)=0:MessageRequester("ERROR","Sorry, can't read Video BIOS."):End:EndIf


For C=0 To $F7E0-1
  Byte=PeekB(Addr+C)
  If Byte=13 Or Byte=10 Or Byte=0:PokeB(Addr+C,Asc(".")):EndIf
Next


For  C=0 To $F7E0-1 Step 24
  Debug PeekS(Addr+C,24)
Next

Gruß
Stefan

Verfasst: 21.01.2005 20:55
von GPI
Das mit den DOS-PRG-Trick halte ich für sehr problematisch...

Ansonsten: Geht sowas unter XP überhaupt noch. Sehe ich als Sicherheitsriskio...

Verfasst: 21.01.2005 22:30
von 125
@GPI
Sogar Bios-Flashes unter Windoof sind möglich....

Verfasst: 21.01.2005 22:35
von Falko
Wenn man zur Sicherheit einen Eprombrenner hat, dann ja.
Hab meine Erfahrung mit Winflash unter XP gemacht und die war nicht
so berauschend.

:mrgreen:

Verfasst: 22.01.2005 09:18
von real
Der direkte Zugriff auf das BIOS unter WinXP funktioniert meiner Erfahrung nach nur über einen LowLevel-Treiber (der von den Flash-Programmen genutzt wird).