Datei soll eiegenen Inhalt lesen/schreiben können

Anfängerfragen zum Programmieren mit PureBasic.
Chef Wiggum
Beiträge: 10
Registriert: 23.08.2008 10:11

Datei soll eiegenen Inhalt lesen/schreiben können

Beitrag von Chef Wiggum »

Guten Morgen,
Ich würde gerne wissen ob es möglich ist, dass sich eine Datei selber zur Laufzeit für Lese- bzw. Schreibzugriff öffnen lässt.
Denn

Code: Alles auswählen

OpenFile(0,GetCurrentDirectory() + "\Testdatei.exe")
gibt leider einen Wert <> 1 .
Extern auf diese Weise geöffnet, klappt alles wunderbar.


Danke
MFG
Little John

Beitrag von Little John »

Du musst nicht GetCurrentDirectory() benutzen, sondern ProgramFilename().
Bei Schreib-Zugriffen sollte man sehr genau wissen, was man macht.

Gruß, Little John
Chef Wiggum
Beiträge: 10
Registriert: 23.08.2008 10:11

Beitrag von Chef Wiggum »

Huch - Das geht ja rasch mit den Antworten hier.
Danke - Mit ReadFile() klappt es wunderbar :)

MFG
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Ja, schreiben geht auch.

Brauchst nur ein Tool mit dem du den PE-Header entsprechend anpassen kannst, oder du machst es selbst.

Du musst dem Characteristics-Feld im PE-Header #IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP hinzufügen. Dann solltest du die Datei nach dem starten bearbeiten und sogar löschen können.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Sorry sieht so aus als währe das Feature in Windows gestrichen worden. Habs grad mal ausprobiert mit XP Pro, funktioniert nicht. :? :(

How ever. Hier mal der Testcode:
Modifiziert eine exe so das sie sich bearbeiten lassen sollte, wenn sie läuft. Funktioniert aber leider nicht.

Code: Alles auswählen

;/-------------------\
;| Make PE Writable  |
;|                   |
;| Version 1.00      |
;| by Thorium        |
;|                   |
;| PureBasic 4.20    |
;\-------------------/

EnableExplicit

#IMAGE_DOS_SIGNATURE                = $5A4D
#IMAGE_NT_SIGNATURE                 = $00004550
#IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = $0400

Define.l hFile,HeaderOffset
Define.w Characteristics

;open the file
hFile = OpenFile(#PB_Any,"c:\your.exe")
If hFile = 0
  MessageRequester("Error","Can't open file!",16)
  End
EndIf

;check if file is a executable
If ReadWord(hFile) <> #IMAGE_DOS_SIGNATURE
    MessageRequester("Error","File is not a executable!",16)
  End
EndIf

;read offset of PE header
FileSeek(hFile,$3C)
HeaderOffset = ReadLong(hFile)
If HeaderOffset = 0
  MessageRequester("Error","File is not a PE!",16)
  End
EndIf

;check if file is a PE
FileSeek(hFile,HeaderOffset)
If ReadLong(hFile) <> #IMAGE_NT_SIGNATURE
  MessageRequester("Error","File is not a PE!",16)
  End
EndIf

;read characteristics from PE header
FileSeek(hFile,HeaderOffset + $16)
Characteristics = ReadWord(hFile)

;add IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP to characteristics
Characteristics = Characteristics | #IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP

;write characteristics to PE header
FileSeek(hFile,HeaderOffset + $16)
WriteWord(hFile,Characteristics)

;close file
CloseFile(hFile)

MessageRequester("Make PE Writable","Done!")
End
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Antworten