文章《群晖中文未按拼音排序问题排查》找到 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 指的是 lea
  • 3D 指的是 lea 第一个参数,是寄存器 rdi
  • 8E A8 00 00 指的是 lea 第二个参数,是偏移量

因此,只要修改偏移量指向为其准备好的 zh 字符串就行。

libsynocore.so.6 中有大量为错误处理准备的字符串,我们完全可以修改这些字符串来用。

具体操作:

  1. 48 8D 3D 8E A8 00 00 替换成 48 8D 3D 91 AE 00 00
  2. 查找字符串 string_join.c,并替换成 string_joinzh。

替换好后保存,再 SSH 到群晖系统,以管理员身份替换掉原有的 libsynocore.so.6 再重启就可以了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注