From: Pierre Habouzit Date: Fri, 9 Oct 2009 12:40:31 +0000 (+0200) Subject: add objdump-sym X-Git-Url: http://git.madism.org/?a=commitdiff_plain;h=9dd2406c6615d9ef988f8449a0c64c67fab6ad4c;hp=995588c56847b7aeaeee665e5468eaa18da73fd5;p=~madcoder%2Fdotfiles.git add objdump-sym Signed-off-by: Pierre Habouzit --- 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