小编naa*_*aab的帖子

通过soname插入共享对象的一部分

我编写了一个共享对象,它修改了FreeType FT_Load_GlyphFT_Render_Glyph函数的参数,目前通过插入它LD_PRELOADdlsym.

这很好,但我很想知道是否有办法进行这些更改:

  • 所有在给定主机上使用FreeType的程序(运行例如Debian);
  • 没有破坏任何实际上没有链接到FreeType的程序;
  • 而不是简单地应用于LD_PRELOAD主机上的所有程序;
  • 除非更改FreeType的soname,否则无需任何维护; 和
  • 不修改FreeType的任何文件,也不修改主机上任何程序的文件.

我能够提出的唯一两个"解决方案"是难看的黑客:

  • 一直到LD_PRELOAD所有的节目,似乎既缓慢又脆弱; 要么
  • 复制libfreetype.so.6.12.3到例如libxxxxtype.so.6.12.3; 然后
    • 修补在的soname libxxxxtype.so.6.12.3libxxxxtype.so.6;
    • 链接插入共享对象libxxxxtype.so.6; 和
    • 安装共享对象,例如libfreetype.so.6.999.

我本质上喜欢透明地修补共享对象中的几个函数,同时让其余的函数通过,而不必访问共享对象的源或使用它的程序,但是如果我制作一个假的共享对象与soname libfreetype.so.6,我看不到一个干净的方式将它链接到(或dlopen)真实的libfreetype.so.6.

这是我对共享库的第一个真正的实验,所以如果这个问题做出一些不正确的假设,或者只是没有意义,请耐心等待.

linux shared-libraries function-interposition

8
推荐指数
1
解决办法
284
查看次数