bit banging bash

Rick Hohensee <[email protected]> Mon, 28 Aug 2023 19:47:40 -0700 (PDT)
Newsgroups alt.comp.lang.shell.unix.bourne-bash
Message-ID <[email protected]>
The Bash/dd/od code after the #### produces this from an Android .dex file I had laying 
around.


dex magic present. Feel it?
API version     035
0x3076b1f2     Adler32 checksum
0xfec24ca94c6da7e5a218946a98f885c887dd67cb   sha1 hash
0x002fe7d0	file size 
0x00000070	header size (0x70)
0x12345678	endianness constant
0x00000000	links size (0)
0x00000000	links offset 
0x002fe6f4	map offset
0x000066f7	string IDs size
0x00000070	string IDs offset 
0x00000c54	type IDs size
0x00019c4c	type IDs index
0x00001346	proto IDs size
0x0001cd9c	proto IDs index
0x0000500e	field IDs size
0x0002b4e4	field IDs offset
0x00006383	method IDs size
0x00053554	method IDs offset
0x0000090e	class defs size
0x0008516c	class defs offset
0x002674a4	data size
0x0009732c	data offset



#####  view a .dex header


lop () {
dd if=$1 of=tmp bs=112 count=1 > tmp
}

hexbytes () {
od -An -w1 -v -t x1  tmp > tmp2
}





dexhead () { #  < tmp2
let i=0
while read 
do
	b[$i]=$REPLY
	let i+=1
done

if test ${b[0]} = 64 -a ${b[1]} = 65 -a ${b[2]} = 78
then 
	echo "dex magic present. Feel it?"
else
	echo "No .dex magic tag. GAME OVER"
	return
fi

echo -n "API version     "
dd if=tmp bs=1 skip=4 count=3 of=version status=none
cat version
echo
printf "0x%s%s%s%s     Adler32 checksum\n"  ${b[11]} ${b[10]} ${b[9]} ${b[8]}
printf "0x%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s   sha1 hash\n" ${b[31]} ${b[30]} ${b[29]} ${b[28]}${b[27]} ${b[26]} ${b[25]} ${b[24]}${b[23]} ${b[22]} ${b[21]} ${b[20]}${b[19]} ${b[18]} ${b[17]} ${b[16]}${b[15]} ${b[14]} ${b[13]} ${b[12]}
printf "0x%s%s%s%s	file size \n"${b[35]} ${b[34]} ${b[33]} ${b[32]}
printf "0x%s%s%s%s	header size (0x70)\n" ${b[39]} ${b[38]} ${b[37]} ${b[36]}
printf "0x%s%s%s%s	endianness constant\n" ${b[43]} ${b[42]}${b[41]} ${b[40]} 
printf "0x%s%s%s%s	links size (0)\n" ${b[47]} ${b[46]}${b[45]} ${b[44]} 
printf "0x%s%s%s%s	links offset \n" ${b[51]} ${b[50]}${b[49]} ${b[48]} 
printf "0x%s%s%s%s	map offset\n" ${b[55]} ${b[54]}${b[53]} ${b[52]} 
printf "0x%s%s%s%s  	string IDs size\n"  ${b[59]} ${b[58]} ${b[57]} ${b[56]} 
printf "0x%s%s%s%s	string IDs offset \n" ${b[63]} ${b[62]}${b[61]} ${b[60]} 
printf "0x%s%s%s%s	type IDs size\n" ${b[67]} ${b[66]}${b[65]} ${b[64]} 
printf "0x%s%s%s%s	type IDs index\n"	${b[71]} ${b[70]} ${b[69]} ${b[68]} 
printf "0x%s%s%s%s	proto IDs size\n"	${b[75]} ${b[74]} ${b[73]} ${b[72]} 
printf "0x%s%s%s%s	proto IDs index\n"	${b[79]} ${b[78]} ${b[77]} ${b[76]} 
printf "0x%s%s%s%s	field IDs size\n"	 ${b[83]} ${b[82]} ${b[81]} ${b[80]} 
printf "0x%s%s%s%s	field IDs offset\n"	${b[87]} ${b[86]}  ${b[85]} ${b[84]}
printf "0x%s%s%s%s	method IDs size\n"	${b[91]} ${b[90]} ${b[89]} ${b[88]} 
printf "0x%s%s%s%s	method IDs offset\n"	${b[95]} ${b[94]} ${b[93]} ${b[92]} 
printf "0x%s%s%s%s	class defs size\n"	${b[99]} ${b[98]} ${b[97]} ${b[96]} 
printf "0x%s%s%s%s	class defs offset\n"	${b[103]} ${b[102]} ${b[101]} ${b[100]} 
printf "0x%s%s%s%s	data size\n"	${b[107]} ${b[106]} ${b[105]} ${b[104]}
printf "0x%s%s%s%s	data offset\n"	${b[111]} ${b[110]} ${b[109]} ${b[108]}

}


##### Rick rickfordictator.com Hohensee    Aug. 2023