From 9dd2406c6615d9ef988f8449a0c64c67fab6ad4c Mon Sep 17 00:00:00 2001 From: Pierre Habouzit Date: Fri, 9 Oct 2009 14:40:31 +0200 Subject: [PATCH 1/1] add objdump-sym Signed-off-by: Pierre Habouzit --- +bin/objdump-sym | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100755 +bin/objdump-sym diff --git a/+bin/objdump-sym b/+bin/objdump-sym new file mode 100755 index 0000000..89e0331 --- /dev/null +++ b/+bin/objdump-sym @@ -0,0 +1,37 @@ +#!/bin/bash + +exe="$1" +sym="$2" + +die() { + echo "$@" >&2 + exit 1 +} + +get_sym() { + objdump -j .text -tT "$1" | grep " $2\$" || die "symbol not found" +} + +hex_to_d() { printf "%d" "$1"; } +sum_hex() { expr $(hex_to_d "$1") + $(hex_to_d "$2"); } + +do_dump() { + local addr=0x$1 + local size=0x$2 + objdump -dS --start-address=$addr --stop-address=$(printf "0x%016x" $(sum_hex $addr $size)) "$exe" +} + +render_it() { + local esc=$(printf "\033") + + sed -e "/^ [a-f0-9]\+:/{s/^.*$/$esc[34m&$esc[0m/}" +} + +get_sym "$exe" "$sym" | while read addr flags1 flags2 sect size rest; do + pager= + if test -n "$TERM" -a "$TERM" != "dumb"; then + do_dump "$addr" "$size" | render_it | env LESS=FRSX less + else + do_dump "$addr" "$size" | render_it + fi +done -- 2.20.1