#!/bin/sh OUTPUT=davro LINKARGS= TARGETELF= TARGETOBJ= while getopts l:L:o: flag do case "$flag" in o) OUTPUT=$OPTARG;; l) LINKARGS="$LINKARGS -l$OPTARG";; L) LINKARGS="$LINKARGS -L$OPTARG";; esac done shift $((OPTIND-1)) TARGETOBJ=$1 # get the unresolved symbols objdump -t $TARGETOBJ | awk ' /\*UND\*/{print $4}' > bdlesymbollist # build asm file with symbols and hashes awk '{print "global "$1}' < bdlesymbollist > bdlesymboldata.asm echo ' global __procedure_list section .bss __procedure_list:' >> bdlesymboldata.asm awk '{print $1": resb 6"}' < bdlesymbollist >> bdlesymboldata.asm echo ' global __hash_list section .data __hash_list:' >> bdlesymboldata.asm bdledjbhashlist < bdlesymbollist | awk '{print "dd "$2" ; "$1}' >> bdlesymboldata.asm echo "dd 0 ; end marker" >> bdlesymboldata.asm nasm -f elf32 bdlesymboldata.asm nasm -f elf32 import.asm ld -r $TARGETOBJ bdlesymboldata.o import.o -o davro.o objcopy --localize-symbols=bdlesymbollist davro.o ld davro.o -dynamic-linker /lib/ld-linux.so.2 -o davro $LINKARGS -T bdlelinkerscript strip --remove-section=.hash --remove-section=.got.plt --remove-section=.dynsym davro bdlemegastrip davro $OUTPUT rm -f davro gzip -n --best $OUTPUT advdef -z -4 $OUTPUT.gz cat stub $OUTPUT.gz > $OUTPUT chmod +x $OUTPUT rm -f $OUTPUT.gz wc -c $OUTPUT