Skip to content

Instantly share code, notes, and snippets.

@kenjiuno
Last active May 6, 2021 15:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kenjiuno/bdbd6c3311f4abc94e6ad1b3ac74bdbf to your computer and use it in GitHub Desktop.
Save kenjiuno/bdbd6c3311f4abc94e6ad1b3ac74bdbf to your computer and use it in GitHub Desktop.
Create re-director to a static link library for xxx.dll.a
#!/bin/bash
if [[ $# -eq 0 ]] ; then
echo "Usage: $0 /lib/*.dll.a"
exit 1
fi
for path_dll_a; do
path_notdll_a="${path_dll_a/\.dll\.a/\.notdll\.a}"
if [[ "$path_dll_a" != "$path_notdll_a" ]]; then
echo "Making notdll.a for $path_dll_a"
filename_dll_a="${path_dll_a##*/}"
path_tmp_asm="/tmp/${filename_dll_a}.asm"
path_tmp_obj="/tmp/${filename_dll_a}.obj"
symbols=`objdump -t $path_dll_a | grep -o "__imp_\S\+"`
echo "" > $path_tmp_asm
echo "section .text" >> $path_tmp_asm
for imp in $symbols; do
name=${imp:6}
name_without_at=${name/@*/}
echo "" >> $path_tmp_asm
echo "; $name" >> $path_tmp_asm
echo "extern $name_without_at" >> $path_tmp_asm
echo "global $imp" >> $path_tmp_asm
echo "$imp:" >> $path_tmp_asm
echo " dd $name_without_at" >> $path_tmp_asm
done
nasm -fwin32 $path_tmp_asm && ar -rc $path_notdll_a $path_tmp_obj && echo "OK" || echo "NG ($?)"
fi
done
#!/bin/bash
if [[ $# -eq 0 ]] ; then
echo "Usage: $0 /lib/*.dll.a"
exit 1
fi
for path_dll_a; do
path_notdll_a="${path_dll_a/\.dll\.a/\.notdll\.a}"
if [[ "$path_dll_a" != "$path_notdll_a" ]]; then
echo "Making notdll.a for $path_dll_a"
filename_dll_a="${path_dll_a##*/}"
path_tmp_asm="/tmp/${filename_dll_a}.asm"
path_tmp_obj="/tmp/${filename_dll_a}.obj"
symbols=`objdump -t $path_dll_a | grep -o "__imp_\S\+"`
echo "" > $path_tmp_asm
echo "section .text" >> $path_tmp_asm
for imp in $symbols; do
name=${imp:6}
name_without_at=${name/@*/}
echo "" >> $path_tmp_asm
echo "; $name" >> $path_tmp_asm
echo "extern $name_without_at" >> $path_tmp_asm
echo "global $imp" >> $path_tmp_asm
echo "$imp:" >> $path_tmp_asm
echo " dq $name_without_at" >> $path_tmp_asm
done
nasm -fwin64 $path_tmp_asm && ar -rc $path_notdll_a $path_tmp_obj && echo "OK" || echo "NG ($?)"
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment