#!/bin/sh
#
# $Id: elfsummary,v 0.8 2009/07/20 20:45:01 stef Exp $
#
# Dumps file headers, section headers, disassembly of code sections,
# hexdumps of .data, .rodata and .bss sections and some other stuff.
# Useful as a first-step when reversing an ELF binary.
#
# Copyright (c) 2008-2009, stef, http://www.bigpointyteeth.se/
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#

PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
me=$(basename $0)

separator() {
    echo -e "\n---------------------------------------------------------------------------\n"
}

if test -z $1; then
    echo "Print headers, disassemblies and hexdumps from ELF binary to stdout."
    echo "Usage: $me <binary> [> outfile]"
    exit 1
fi

echo "Dump created @ $(date +"%Y-%m-%d %H:%M:%S"):"
echo "$(ls -l $1)"
file $1
separator
echo -e "ELF FILE HEADER:\n"
readelf -h $1
separator
echo -e "ELF PROGRAM HEADER:\n"
readelf -l $1
separator
echo -e "ELF SECTION HEADER:\n"
readelf -S $1
separator
echo -e "SYMBOLS IN .TEXT SECTION:\n"
nm -C $1 | grep " [Tt] "
separator
echo -e "DISASSEMBLY OF CODE SECTIONS:\n"
objdump -d -M intel $1
separator
echo -e "SYMBOLS IN .DATA, .RODATA and .BSS SECTIONS:\n"
nm -C $1 | grep " [BbDdRr] "
separator
echo -e "HEXDUMP OF .DATA SECTION:\n"
objdump -s -j .data $1
separator
echo -e "HEXDUMP OF .RODATA SECTION:\n"
objdump -s -j .rodata $1
separator
echo -e "HEXDUMP OF .BSS SECTION:\n"
objdump -s -j .bss $1
separator
echo "EOF"
exit 0
# eof
