On Wednesday, May 22, 2002, at 12:59 , Paul Company wrote:

> I want to replace a string "/usr/local" with another
> string "/tmp/local" in a binary file.

cf man patch

what you want is 'patch' - it is not nice to try to
patch binary files on the fly....

> This is what I wrote:
>
> #!/usr/local/bin/perl
>
> $file = "./mybinaryfile.out";
> $s1 = `strings $file | grep -b /usr/local`; # returned 
> 2027:/usr/local/conf/

man strings

that is returning 'string patterns' from a file
not the sequence of actual bytes in the file.

let's have a coffee break moment here...

        vladimir: 56:] wc -c perl
                1175680 perl
        vladimir: 57:] strings perl | head
        $$$$((((,,,,0123336689::::>?@AAAJJJJHIJKLMJ6
        1289:=ABC><;JGF0
         !"#$%&'(),-
        Use of uninitialized value%s%s
        Semicolon seems to be missing
        Unquoted string "%s" may clash with future reserved word
        Unsuccessful %s on filename containing newline
        Can't use %s ref as %s ref
        Can't use string ("%.32s") as %s ref while "strict refs" in use
        Can't use an undefined value as %s reference
        vladimir: 58:] vladimir: 59:] !strings | grep -b "Use of uninitialized"
        strings perl | head | grep -b "Use of uninitialized"
        79:Use of uninitialized value%s%s
        vladimir: 64:]  od -c perl | head -5
        0000000 177   E   L   F 001 002 001  \0  \0  \0  \0  \0  \0  \0  \0  \0
        0000020  \0 002  \0 002  \0  \0  \0 001  \0 002   ~ 220  \0  \0  \0   4
        0000040  \0 021 354      \0  \0  \0  \0  \0   4  \0      \0 005  \0   (
        0000060  \0 034  \0 032  \0  \0  \0 006  \0  \0  \0   4  \0 001  \0   4
        0000100  \0  \0  \0  \0  \0  \0  \0 240  \0  \0  \0 240  \0  \0  \0 005
        vladimir: 65:]

how much are you really willing to bet that the 'string'
is really there in the first 79 bytes....


now what exactly did you think you were getting with using
strings in the first place....

for fun, you might want to try to write the wrapper on od
or hexdump to find the string file.... or you might
want to say use

        sysread/syswrite/sysseek

to walk through your binary file to look for a specific
string....

but clearly you really do not want to abuse standard unix
tools willy nilly....

ciao
drieux

---


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to