我编写了一个共享对象,它修改了FreeType FT_Load_Glyph和FT_Render_Glyph函数的参数,目前通过插入它LD_PRELOAD和dlsym.
这很好,但我很想知道是否有办法进行这些更改:
LD_PRELOAD主机上的所有程序;我能够提出的唯一两个"解决方案"是难看的黑客:
LD_PRELOAD所有的节目,似乎既缓慢又脆弱; 要么libfreetype.so.6.12.3到例如libxxxxtype.so.6.12.3; 然后
libxxxxtype.so.6.12.3到libxxxxtype.so.6;libxxxxtype.so.6; 和libfreetype.so.6.999.我本质上喜欢透明地修补共享对象中的几个函数,同时让其余的函数通过,而不必访问共享对象的源或使用它的程序,但是如果我制作一个假的共享对象与soname libfreetype.so.6,我看不到一个干净的方式将它链接到(或dlopen)真实的libfreetype.so.6.
这是我对共享库的第一个真正的实验,所以如果这个问题做出一些不正确的假设,或者只是没有意义,请耐心等待.