DP-S-Script/lib/strip_other_funcs_unix.sh

60 lines
1.3 KiB
Bash
Raw Normal View History

2025-03-27 20:21:11 +08:00
#!/bin/bash
# save as strip_other_funcs.sh
# 输入参数检查
if [ $# -ne 1 ]; then
echo "Usage: $0 <binary_file>"
exit 1
fi
TARGET_BIN="$1"
BACKUP_BIN="${TARGET_BIN}.bak"
# 定义要保留的函数列表
TARGET_FUNCTIONS=(
"Lenheart()"
"_Inter_LoadGeolocation_dispatch_sig(void*, void*, char*)"
"SocketThread_function(void*)"
"PrintAuroraTag()"
"InitSquirrel()"
"ReloadingScript(SQVM*, std::string)"
"ReqSquirrelScript(SQVM*)"
"Cutecode(char*, int*, int)"
)
# 创建备份
cp "$TARGET_BIN" "$BACKUP_BIN"
# 获取保留符号列表
KEEP_SYMBOLS=()
while read -r symbol; do
demangled=$(c++filt "$symbol" 2>/dev/null)
for target in "${TARGET_FUNCTIONS[@]}"; do
if [[ "$demangled" == "$target" ]]; then
KEEP_SYMBOLS+=("$symbol")
break
fi
done
done < <(nm --defined-only "$BACKUP_BIN" | awk '/ [TtWw] /{print $3}')
if [ ${#KEEP_SYMBOLS[@]} -eq 0 ]; then
echo "Error: No target symbols found!"
exit 2
fi
# 生成保留符号文件
KEEP_FILE=$(mktemp)
printf "%s\n" "${KEEP_SYMBOLS[@]}" > "$KEEP_FILE"
# 执行符号清理
echo "Stripping symbols..."
objcopy --strip-all \
--keep-symbols="$KEEP_FILE" \
"$BACKUP_BIN" \
"$TARGET_BIN"
# 清理临时文件
rm -f "$KEEP_FILE"
echo "Done. Original backup at: $BACKUP_BIN"