www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Disassemble binary.

reply vital.fadeev <vital.fadeev gmail.com> writes:
Just share.
Script for disassemble binary.
And script for bash completion. Complete symbol names.


Files:
./dasm
/etc/bash_completion.d/dasm


file <./dasm>






         sstrg="^[[:xdigit:]]{2,}+.*<$2>:$"
         objdump -d $1 | awk -F"\n" -v RS="\n\n" '$1 ~ /'$2'/'

         objdump -d $1 | awk -F"\n" -v RS="\n\n" '{ print $1 }'
else
     echo "You have to add argument(s)"
     echo "Usage:   "$0 " arg1 arg2"
     echo "Description: print disassembled label to std-out"
     echo "             arg1: name of object file"
     echo "             arg2: name of function to be disassembled"
     echo "         "$0 " arg1    ... print labels and their rel. 
addresses"
fi


file </etc/bash_completion.d/dasm>


_dasm()
{
     local cur=${COMP_WORDS[COMP_CWORD]}

     if [[ $COMP_CWORD -eq 1 ]] ; then

	COMPREPLY=( $( command ls *.o -F 2>/dev/null | grep "^$cur" ) )

     elif [[ $COMP_CWORD -eq 2 ]] ; then

	OBJFILE=${COMP_WORDS[COMP_CWORD-1]}

	COMPREPLY=( $( command nm --demangle=dlang $OBJFILE | grep " W " 
| cut -d " " -f 3 | tr "()" "  " | grep "$cur" ) )

     else
	COMPREPLY=($(compgen -W "" -- "$cur"));
     fi


}

complete -F _dasm dasm
May 08 2018
parent reply vital.fadeev <vital.fadeev gmail.com> writes:
example:

./dasm opcode.o opcode.op_eq_s

Disassembly of section .text._D6opcode7op_eq_sFZi:
0000000000000000 <_D6opcode7op_eq_sFZi>:
    0:   55                      push   %rbp
    1:   48 8b ec                mov    %rsp,%rbp
    4:   48 39 d1                cmp    %rdx,%rcx
    7:   75 0a                   jne    13 
<_D6opcode7op_eq_sFZi+0x13>
    9:   48 85 c9                test   %rcx,%rcx
    c:   74 0c                   je     1a 
<_D6opcode7op_eq_sFZi+0x1a>
    e:   fc                      cld
    f:   f3 a6                   repz cmpsb %es:(%rdi),%ds:(%rsi)
   11:   74 07                   je     1a 
<_D6opcode7op_eq_sFZi+0x1a>
   13:   b8 00 00 00 00          mov    $0x0,%eax
   18:   eb 05                   jmp    1f 
<_D6opcode7op_eq_sFZi+0x1f>
   1a:   b8 01 00 00 00          mov    $0x1,%eax
   1f:   90                      nop
   20:   5d                      pop    %rbp
   21:   c3                      retq
         ...
May 08 2018
parent vital.fadeev <vital.fadeev gmail.com> writes:
Source code: https://github.com/vitalfadeev/dasm
May 08 2018