Howto Add Hex Numbers via Command Line

August 1, 2013

Recently I needed to calculate the starting and ending memory addresses of an IOS application (in order to dump it). As a result i needed to figure out how to add two hex addresses. Here’s what I discovered.

Basic Example

In this case we are adding 0x4f000 and 0x2000

$ printf "0x%X\n" $(( 0x4f000+0x2000 ))
0x51000

Scripted Example (all hex numbers as input)

Source

#!/bin/bash
#
# Name; hexample.sh
# Author: Steve Stonebraker
# Date: 8-1-2013
# Description: Example of how to add hex values in bash
#

base_address=0x4f000
cryptoff=0x2000
cryptsize=0x2e8000

starting_address=$(( base_address+cryptoff ))
ending_address=$(( base_address+cryptoff+cryptsize ))

printf "\n%s: 0x%X\n%s: 0x%X\n" "starting address" ${starting_address} "ending address" ${ending_address} &&
printf "\n%s:\n%s 0x%X 0x%X\n\n" "Run the following instruction on gdb" "dump memory decrypted2.bin" ${starting_address} ${ending_address}

Output

$ ./hexample.sh

starting address: 0x51000
ending address: 0x339000

Run the following instruction on gdb:
dump memory decrypted2.bin 0x51000 0x339000

Scripted Example (Mixed decimal and hex numbers as input)

Source

#!/bin/bash
#
# Name; hexample.sh
# Date: 8-1-2013
# Description: Example of how to add hex values in bash
#
#

base_address=0x4f000
cryptoff=8192
cryptsize=3047424

starting_address=$(( base_address+cryptoff ))
ending_address=$(( base_address+cryptoff+cryptsize ))

printf "\n%s: 0x%X\n%s: 0x%X\n" "starting address" ${starting_address} "ending address" ${ending_address} &&
printf "\n%s:\n%s 0x%X 0x%X\n\n" "Run the following instruction on gdb" "dump memory decrypted2.bin" ${starting_address} ${ending_address}

Output

$ ./hexample.sh

starting address: 0x51000
ending address: 0x339000

Run the following instruction on gdb:
dump memory decrypted2.bin 0x51000 0x339000