77 lines
1.7 KiB
Bash
77 lines
1.7 KiB
Bash
# This is a Bash script to be included.
|
|
|
|
# Idx Name Size VMA LMA File off Algn
|
|
# =================
|
|
# 2 .text 00004a40 080010f0 080010f0 000110f0 2**4
|
|
# 08006550 l O .text 00000012 device_desc
|
|
# =================
|
|
# VMA =0x080010f0
|
|
# FOFF=0x000110f0
|
|
# ADDR=0x08005ad0
|
|
# file_off_ADDR = ADDR - VMA + FOFF
|
|
# = 0x08005ad0 - 0x080010f0 + 0x000110f0 = 0x00015ad0
|
|
|
|
function calc_addr () {
|
|
local line_sym="" VMA FOFF ADDR
|
|
|
|
arm-none-eabi-objdump -h -t -j .text $FILE | \
|
|
egrep -e '(^ +[0-9] +\.text +|device_desc)' | \
|
|
while read -r F0 F1 F2 F3 F4 F5 F6; do
|
|
if [ -z "$line_sym" ]; then
|
|
VMA=$F3
|
|
FOFF=$F5
|
|
line_sym="next is a line for the symbol"
|
|
else
|
|
ADDR=$F0
|
|
echo "$((0x$ADDR - 0x$VMA + 0x$FOFF))"
|
|
fi
|
|
done
|
|
}
|
|
|
|
declare -a OFFSETS
|
|
OFFSETS=($(calc_addr))
|
|
file_off_ADDR=${OFFSETS[0]}
|
|
file_off_fraucheky_ADDR=${OFFSETS[1]}
|
|
|
|
echo "Offset is $file_off_ADDR"
|
|
if [ -n "$file_off_fraucheky_ADDR" ]; then
|
|
echo "Offset is $file_off_fraucheky_ADDR"
|
|
fi
|
|
|
|
function replace_file_byte_at () {
|
|
printf "\x$1" | dd of=$FILE bs=1 seek=$2 conv=notrunc >& /dev/null
|
|
}
|
|
|
|
#
|
|
# vid_lsb: 8
|
|
# vid_msb: 9
|
|
# pid_lsb: 10
|
|
# pid_msb: 11
|
|
# bcd_device_lsb: 12
|
|
# bcd_device_msb: 13
|
|
#
|
|
|
|
function replace_vid_lsb () {
|
|
replace_file_byte_at $1 $((addr + 8))
|
|
}
|
|
|
|
function replace_vid_msb () {
|
|
replace_file_byte_at $1 $((addr + 9))
|
|
}
|
|
|
|
function replace_pid_lsb () {
|
|
replace_file_byte_at $1 $((addr + 10))
|
|
}
|
|
|
|
function replace_pid_msb () {
|
|
replace_file_byte_at $1 $((addr + 11))
|
|
}
|
|
|
|
function replace_bcd_device_lsb () {
|
|
replace_file_byte_at $1 $((addr + 12))
|
|
}
|
|
|
|
function replace_bcd_device_msb () {
|
|
replace_file_byte_at $1 $((addr + 13))
|
|
}
|