有没有办法直接更改二进制的SONAME?

我的程序依赖于libcurl.so.3 ,但是在RHEL6中,并没有像这样的软件libcurl.so.3 ->libcurl.so.4 (当我创build这个链接时,我的程序可以顺利运行)。 但有一个像这样的软链接: libcurl.so->libcurl.so.4

我想直接从libcurl.so.3libcurl.so修改libcurl.so.3.0.0.0SONAME 。 然后,我可以在RHEL 6上运行我的程序,而无需自己创build软链接。

也许我的解决scheme是愚蠢的,但我想学习如何直接修改二进制文件是一件有趣的事情。

大家给你评论,devnull。 也许我没有说清楚。

$ readelf -d libcurl.so.3.0.0

偏移量为0x303cc的dynamic段包含25个条目:

标签types名称/值

0x00000001(需要)共享库:[libssl.so.2]

0x0000000e(SONAME)库soname:[ libcurl.so.3 ] —>我想把它改成libcurl.so

Solutions Collecting From Web of "有没有办法直接更改二进制的SONAME?"

您应该避免删除SO对象的版本,例如,当您的应用程序依赖于特定的libc(libc.so.6)时。

如果要使用其他库,正确的方法是在调用应用程序之前使用LD_PRELOAD变量

如果将LD_PRELOAD设置为新文件的路径,则该文件将在任何其他库(甚至包括C运行时,libc.so)之前加载。