破解群晖File Station中文未按拼音排序问题
文章《群晖中文未按拼音排序问题排查》找到 File Station 中文未按拼音排序问题的原因。
在这里提供一个破解的方法,把 libsynocore.so.6 中 ucol_open 的 locale 参数改成 zh,以支持按拼音排序。
我的 DSM 版本是 DSM 6.1.7-15284,以下都是针对这个版本的修改。
ucol_open 涉及到以下代码:
LOAD:00000000000164D1 lea rsi, [rsp+28h+var_1C] LOAD:00000000000164D6 lea rdi, aPStartAddress+12h ; "" LOAD:00000000000164DD call _ucol_open
0x164D6 行代码就是加载 locale 参数的,对应的操作码是:
48 8D 3D 8E A8 00 00
48 8D
指的是 lea3D
指的是 lea 第一个参数,是寄存器 rdi8E A8 00 00
指的是 lea 第二个参数,是偏移量
因此,只要修改偏移量指向为其准备好的 zh 字符串就行。
libsynocore.so.6 中有大量为错误处理准备的字符串,我们完全可以修改这些字符串来用。
具体操作:
- 将
48 8D 3D 8E A8 00 00
替换成48 8D 3D 91 AE 00 00
。 - 查找字符串 string_join.c,并替换成 string_joinzh。
替换好后保存,再 SSH 到群晖系统,以管理员身份替换掉原有的 libsynocore.so.6 再重启就可以了。