Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ports-kde
Path: blob/main/benchmarks/linux-gputest/files/apply-binary-patch.pl
16461 views
1
#!/usr/bin/env perl
2
3
use strict;
4
use warnings;
5
use Sys::Mmap;
6
7
my $fh;
8
my $flen;
9
my $fdata;
10
11
sub commit {
12
return unless $fh;
13
munmap $fdata or die "munmap: $!";
14
close $fh or die "close: $!";
15
}
16
17
while (<>) {
18
chomp;
19
if (/^([0-9A-F]{8}):? ([0-9A-F]{2}) ([0-9A-F]{2})$/i) {
20
my ($offset, $old, $new) = map hex, $1, $2, $3;
21
next unless $fdata;
22
next unless $offset < $flen;
23
next if ord substr($fdata, $offset, 1) != $old;
24
substr($fdata, $offset, 1) = chr $new;
25
} elsif (-e) {
26
commit;
27
open $fh, '+<', $_ or die "open: $!";
28
mmap $fdata, 0, PROT_READ | PROT_WRITE, MAP_SHARED, $fh
29
or die "mmap: $!";
30
$flen = -s;
31
}
32
}
33
commit;
34
35