迭代的方式对于大型二进制库改名字的功能脚本
会将源文件中的函数? add_(...) 修改成 nubia_add_(...) 的方式来调用
此脚本分配来修改,可以避免突破资源限制? ulimit -a;
#!/bin/bash
apitxt="./funclist.txt"
prefix_name="nubia_"
api_symbols=( )
#1. 将 库文件的符号导出到本地文本文件
rm -rf ${apitxt}
nm $1 > ${apitxt}
#文本文件总行数
N=$(sed -n '$=' $apitxt)
#sed -n "300, 400" filename 注意p;读出文件的 第300行到第400行
for ((i=1; i<=$N; i+=1000))
do
j=$[i + 999]
#debug
#seg=($(sed -n "${i}, ${j}p" ${apitxt}))
#echo -e ${seg[@]}
#echo $i $j
#取出i行到j行,只保留T类型后面的文本,即库中源代码实现的函数名字,保存进internal_symbols中
internal_symbols=($(
sed -n "${i}, ${j}p" $apitxt | sed '/^[0-9]\+ T /!d; s///' |
sort | comm -13 <(printf "%s\n" "${api_symbols[@]}" | sort) -
))
#将 internal_symbols中的变量名字进一步修改成 --redefine-sym 原函数名=修改后的函数名 的方式,待后面丢给 objcopy 来调用
objcopy_args=($(
printf "%s\n" "${internal_symbols[@]}" |
while IFS= read -r sym; do
new="${prefix_name}${sym}"
# replace the symbol with a prefix
echo --redefine-sym "$sym=$new"
# make the symbol local, future
# echo -L "$new"
done
))
#执行更换名字动作
objcopy "${objcopy_args[@]}" $1
done