File: bitflip

package info (click to toggle)
dar 2.8.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 12,024 kB
  • sloc: cpp: 86,219; sh: 6,978; ansic: 895; makefile: 489; python: 242; csh: 115; perl: 43; sed: 16
file content (19 lines) | stat: -rwxr-xr-x 460 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash

if [ -z "$1" -o -z "$2" ] ; then
   echo "usage: $0 <offset in bit> <file>"
   echo "flip the bit of the file located at the provided offset"
   exit 1
fi

offbit=$1
file="$2"

offbyte=$(( $offbit / 8 ))
bitinbyte=$(( $offbit - ($offbyte * 8) ))
readbyte=`xxd -s $offbyte -p -l 1 "$file"`
mask=$(( 1 << $bitinbyte ))
newbyte=$(( 0x$readbyte ^ $mask ))
hexanewbyte=`printf "%.2x" $newbyte`

echo $hexanewbyte | xxd -p -l 1 -s $offbyte -r - "$file"