AnyPS5 unused-filter0/1/2 区别详解PS5 移植工具的三级未用符号过滤终极对比【免费下载链接】AnyPS5Tool for automatic PS5 executables porting to Linux and Windows项目地址: https://gitcode.com/GitHub_Trending/an/AnyPS5AnyPS5是一款能把 PS5 可执行文件ELF自动移植到 Linux 和 Windows 的原生重链接工具无需模拟器或额外运行时。它的核心组件 relinker 负责重写动态符号表而unused-filter0|1|2正是控制未用符号NID过滤强度的关键参数。本文带你一次搞懂三档策略的取舍帮你选出最合适的级别。一句话理解NID是 PS5 用来标识系统库符号的 64 位哈希值。重链接时relinker 会为每个导入符号建立动态表和 PLT 槽位。过滤掉从未被真正调用的 NID就能让输出的.so/.dll更小、加载更快。unused-filter决定过滤得有多狠。三级策略速览先给结论一张表看懂区别级别过滤行为处理范围输出日志特征适用场景unused-filter0完全不过滤保留全部导入 NIDUnused NID filtering: disabled默认、最兼容、排错unused-filter1智能过滤只过滤非 PLT未用导入PLT 全保留PLT preservation/CFG/GOT filtering兼顾体积与稳定性unused-filter2严格可达性 PLT 压缩过滤全部导入并压缩 PLT 槽位Strict reachability/PLT compaction追求最小输出参数解析入口在 CliArgs.cpp只接受0/1/2默认值为0见 Cli.hpp。unused-filter0全量保留最稳最兼容 ️这是默认档。relinker 保留所有导入的 NID 引用一个都不删。行为直接进入禁用过滤分支日志打印Unused NID filtering: disabled; filtered0。优点符号最完整兼容性最强一旦游戏跑不起来用它排除是不是过滤删错了符号是最快的思路。代价动态段和 PLT 槽位更多二进制略大、加载略慢。建议拿不准时先用它验证功能再逐步提高档位。对应逻辑RelinkerPipeline.cppunused-filter1CFG/GOT 智能过滤平衡之选 ⚖️这是大多数场景的甜点位。它只做一次控制流图CFG GOT 访问分析从程序入口构建可达代码的控制流图建立 GOT 槽位访问索引只剔除那些 GOT 槽位从未被真正访问的非 PLT 导入PLT 导入全部原样保留因为函数调用链较难静态证明未用保守保留。日志会打印PLT preservationPLT 保留数和CFG/GOT filtering非 PLT 过滤数两行直观看到省了多少。优点在不牺牲函数调用稳定性的前提下明显瘦身二进制。限制若可执行段不止一个会跳过 CFG/GOT 过滤并打印multiple executable segments are not modeled此时行为退化为仅保留 PLT。实现CFG/GOT 过滤见 UnusedNidFilter.cpp。对应逻辑RelinkerPipeline.cppunused-filter2严格可达性 PLT 压缩最激进 这是洁癖档目标是最小化输出。相比 1 档它多了两步严格可达性分析解析异常展开函数、函数图活跃区域、取地址根节点等判定每个导入符号是否真的可达剔除全部未用导入含 PLT。日志会打印指令数、活跃区域数、间接转移数等。PLT 压缩Compaction把 PLT 槽位压缩到实际使用数量进一步缩小.plt和重定位表。优点输出体积最小、加载最快。代价与限制分析能力有限遇到不支持的结构如 IFUNC 解析器、多个可执行段会直接报错终止而非静默降级对输入镜像做了大量合法性校验如 little-endian ELF64、单一不可变代码段。适用你已经用 0/1 档验证功能正常再切到 2 档榨取体积收益。严格可达性见 StrictNidFilter.cppPLT 压缩见 PltCompactor.cpp两者由 main.cpp 根据档位选择装配。对应逻辑RelinkerPipeline.cpp如何选择三步决策法 ✅先跑unused-filter0确认游戏/程序功能正常、没有缺符号报错。切到unused-filter1获得体积收益同时保留 PLT 的调用稳定性多数情况到此即可。最后试unused-filter2若日志顺利打印Strict reachability与PLT compaction且程序正常就锁定它享受最小输出若报严格过滤错误退回 1 档。参数用法示例unused-filter使用等号形式、不带--前缀且最多出现一次格式校验见 CliArgs.cpp。# Linux 目标默认 0 档 relinker input.elf output.elf # 智能过滤推荐起点 relinker unused-filter1 input.elf output.elf # Windows 目标 严格压缩 relinker --windows unused-filter2 input.elf output.elf完整参数说明见 USAGE.md。快速上手本地没有构建环境时可先克隆仓库查看源码与文档git clone https://gitcode.com/GitHub_Trending/an/AnyPS5总结0全保留最稳用来验证基线1CFG/GOT 过滤非 PLT 未用符号PLT 保留平衡之选2严格可达性 PLT 压缩体积最小但对输入要求最严。从0起步逐级上调遇到报错就回退是 AnyPS5 移植工作流中最稳妥的姿势。更多兼容性与游戏清单可参考 COMPATIBILITY.md。【免费下载链接】AnyPS5Tool for automatic PS5 executables porting to Linux and Windows项目地址: https://gitcode.com/GitHub_Trending/an/AnyPS5创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考