Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [opgelost] Hoe kan ik een binair bestand patchen ?  (gelezen 2456 keer)

Offline track

  • Lid
[opgelost] Hoe kan ik een binair bestand patchen ?
« Gepost op: 2010/01/28, 14:46:45 »
Op het moment zit ik met het probleem dat ik een binair bestand moet patchen.

In een tekstbestand gebruik je gewoon: sed 's/pattern/replacement/g' bron > doel
en normaal heb je voor binaire bestanden hetzelfde met perl:   perl -pi -e 's/pattern/replacement/g' bestand

Maar, ik heb nu voor [pattern] en [replacement] geen tekst maar binaire "strings" ...

Ik wil  b.v. (hex) 0xC783C000003E vervangen door 0xC783C0000014 en ik weet niet hoe ik dat moet uitdrukken in perl.
Bij awk zou het een "\xC7\x83\xC0..." worden maar met perl ...

Wie kan mij een tip geven, of soms ook een andere aanpak die dit probleem verhelpt ?

Bij voorbaat dank,

track
« Laatst bewerkt op: 2010/01/29, 14:49:36 door track »

Re: Hoe kan ik een binair bestand patchen ?
« Reactie #1 Gepost op: 2010/01/28, 17:02:37 »
Een hex-editor inderdaad, ik kan je Okteta aanraden :)

Offline track

  • Lid
Re: Hoe kan ik een binair bestand patchen ?
« Reactie #2 Gepost op: 2010/01/28, 17:13:08 »
Met de hex-editor, dat had ik al.  =D

Het gaat nu erom dat automatisch te laten doen.

Ik wil dit nu automatiseren:
http://forum.ubuntu-nl.org/software-en-configuratie/pjotr-delay-bij-afsluiten-weghalen/msg529318/#msg529318
Het scriptje ervoor heb ik al, alleen het binaire patchen lukt nog niet.

track
« Laatst bewerkt op: 2010/01/28, 17:16:36 door track »

Offline djurny

  • Lid
Re: Hoe kan ik een binair bestand patchen ?
« Reactie #3 Gepost op: 2010/01/28, 19:23:35 »
misschien een combo met uuencode/diff/patch/uudecode?

# uuencode 'binary' -> 'binary.Z'
cat binary | uuencode binary.Z > binary.U
# doe iets met diff en/of patch
# ..
# uudecode 'binary.Z' -> 'binary'
uudecode -o binary2 binary.U

met uuencode heb je nl het voordeel dat er alleen ascii karakters worden gebruikt en diff/patch dan ineens wel goed werken :)

nb: de syntax vind ik zelf nogal verwarrend, dus lees eerst de manpage van uuencode goed door :)
« Laatst bewerkt op: 2010/01/28, 19:25:31 door djurny »
echo "Ka Me Ha Me Ha Me Ha!" | tr [A-Z] [a-z]

Offline track

  • Lid
Re: Hoe kan ik een binair bestand patchen ?
« Reactie #4 Gepost op: 2010/01/29, 14:48:51 »
Dat idee was heel goed !

Uitgaande daarvan heb ik nog een betere variant gevonden: http://www.mail-archive.com/peterboro@mailman.lug.org.uk/msg00204.html
- de beperking met het wrappen is makkelijk bij te werken door de linefeed's met tr te wissen. Dan heb je maar 1 lange regel ...

Het wordt dus:
xxd -p  <bronbestand>  |  tr -d "\n"  |  sed "s/pattern/replacement/"  |  xxd -r -p -  <doelbestand>
Het voordeel van  xxd  is dat je rechtstreeks naar de hex-getallen converteert, dat patcht makkelijker.
En sed heeft blijkbaar ook geen probleem met een regel van 48 kB lengte ...

Bedankt jongens !

track


p.s.: de perl-variant werkt nog steeds niet.
« Laatst bewerkt op: 2010/01/29, 15:54:49 door track »

Offline djurny

  • Lid
Re: Hoe kan ik een binair bestand patchen ?
« Reactie #5 Gepost op: 2010/01/31, 14:27:04 »
Dat idee was heel goed !

Uitgaande daarvan heb ik nog een betere variant gevonden: http://www.mail-archive.com/peterboro@mailman.lug.org.uk/msg00204.html
- de beperking met het wrappen is makkelijk bij te werken door de linefeed's met tr te wissen. Dan heb je maar 1 lange regel ...

Het wordt dus:
xxd -p  <bronbestand>  |  tr -d "\n"  |  sed "s/pattern/replacement/"  |  xxd -r -p -  <doelbestand>
Het voordeel van  xxd  is dat je rechtstreeks naar de hex-getallen converteert, dat patcht makkelijker.
En sed heeft blijkbaar ook geen probleem met een regel van 48 kB lengte ...

Bedankt jongens !

track


p.s.: de perl-variant werkt nog steeds niet.

pas wel op met te lange regels, heb me laten vertellen dat er ook versies van awk en sed zijn die wel een cap hebben on inputlengte :)
echo "Ka Me Ha Me Ha Me Ha!" | tr [A-Z] [a-z]