Thread Hexcode einer Datei ändern (4 answers)
Opened by gORDon_vdLg at 2006-08-05 22:19

Dubu
 2006-08-07 00:04
#68557 #68557
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
@esskar:
- Der Mode "+>" löscht eine existierende Datei immer. Wahrscheinlich meinst du "+<".
- Der Offset-Parameter von syswrite() gibt den Offset im Skalar an, nicht in der Datei.

@gordon:
1. Versuch's mal hiermit:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/perl
use strict;
use warnings;
use Fcntl qw/:seek/;

my $dateiname = 'dateizupatchen';

my $offset = 0xff;
my $bytes_zu_schreiben = 1;
my $alte_bytes = "\x00";
my $neue_bytes = "\x08";
my $vorhandene_bytes;

# Datei oeffnen
open my $dateihandle, '+<', $dateiname
   or die "Kann $dateiname nicht oeffnen: $!\n";
# Daten binaer lesen und schreiben!
binmode $dateihandle;

# Position aufsuchen
seek $dateihandle, $offset, SEEK_SET
   or die "Kann nicht in Datei $dateiname auf Position $offset setzen: $!\n";

# Alten Inhalt einlesen
my $bytes_gelesen = sysread $dateihandle, $vorhandene_bytes, $bytes_zu_schreiben;

# Fehler aufgetreten?
if (!defined $bytes_gelesen) {
   die "Kann nicht aus Datei $dateiname lesen: $!\n";
} elsif ($bytes_gelesen != $bytes_zu_schreiben) {
   die "Kann nur $bytes_gelesen Bytes aus $dateiname lesen.\n";
}

# Alten Inhalt vergleichen
if ($vorhandene_bytes ne $alte_bytes) {
   die "Voriger Inhalt der Datei stimmt nicht, breche ab!\n";
}

# Alte Position wieder aufsuchen
seek $dateihandle, $offset, SEEK_SET
   or die "Kann nicht in Datei $dateiname nochmals auf Position $offset setzen: $!\n";

# Daten ueberschreiben
my $byteswritten = syswrite $dateihandle, $neue_bytes, $bytes_zu_schreiben;

# Fehler aufgetreten?
if (!defined $byteswritten) {
   die "Kann nicht nach $dateiname schreiben: $!\n";
} elsif ($byteswritten != $bytes_zu_schreiben) {
   die "Kann nur $byteswritten Bytes nach $dateiname schreiben.\n";
}

# Alles okay, Bestaetigung ausgeben
print STDERR "$bytes_zu_schreiben Bytes in $dateiname an Position $offset geaendert.\n"

2. Man kann bei einem neuen Thread ein Datum dazu angeben. Das war bei diesem Thread wohl der Fall.
3. Wiki:Teilweise.

View full thread Hexcode einer Datei ändern