是否可以在没有源代码的情况下更改libc for cpp程序? 我已经从源代码构建并安装了另一个GLUBC,我希望用C++编写的现有的可执行文件与自定义的GLYBC一起运行,用于实验目的。为此,我尝试更改可执行文件的加载程序。首先,在/lib64下创建了一个名为ld_linux-x86-64.so.2的链接,其路径指向新的加载程序 sudo ln /home/ubuntu/glibc-2.27-amd64/lib/ld-2.27.so /lib64/ld_linux-x86-64.so.2

是否可以在没有源代码的情况下更改libc for cpp程序? 我已经从源代码构建并安装了另一个GLUBC,我希望用C++编写的现有的可执行文件与自定义的GLYBC一起运行,用于实验目的。为此,我尝试更改可执行文件的加载程序。首先,在/lib64下创建了一个名为ld_linux-x86-64.so.2的链接,其路径指向新的加载程序 sudo ln /home/ubuntu/glibc-2.27-amd64/lib/ld-2.27.so /lib64/ld_linux-x86-64.so.2,c++,linux,patch,glibc,libstdc++,C++,Linux,Patch,Glibc,Libstdc++,其次,通过文本编辑器修改可执行文件中的加载程序路径,将“/lib64/ld-linux-x86-64.so.2”更改为“/lib64/ld_-linux-x86-64.so.2”。我启动了可执行文件,并出现以下错误: ./demo_cpp: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory 修补的CPP程序运行失败,并且似

其次,通过文本编辑器修改可执行文件中的加载程序路径,将“/lib64/ld-linux-x86-64.so.2”更改为“/lib64/ld_-linux-x86-64.so.2”。我启动了可执行文件,并出现以下错误:

./demo_cpp: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

修补的CPP程序运行失败,并且似乎C++的STD LIB丢失了。然而,这种方法确实适用于纯C编写的程序。使用上面提到的方法,我尝试了以下命令并得到了完全相同的错误:

patchelf--set解释器/home/ubuntu/glibc-2.27-amd64/lib/ld-linux-x86-64.so.2--set rpath/home/ubuntu/glibc-2.27-amd64/lib demo\u cpp
因此,我想知道是否有可能将glibc更改为cpp计划?我是否也需要从源代码构建cpp std库?

您需要阅读有关操作系统、编译器和链接器的书籍。 我推荐阅读

  • ,一本关于操作系统的好教科书
  • 这本书是一本关于编译器的好教材
  • 莱文的书
  • 文件
  • 文件
  • 文件

一旦你阅读了以上所有的书籍,考虑阅读一些Linux的代码>代码> man >代码>页面,例如:

  • ,
  • ,
  • ,
  • ,
还要学习Linux的文档和源代码 既然他们是

因此,我想知道是否有可能将glibc更改为cpp计划

是的,这是可能的,不,这不容易


另请参见和

加载备用共享库不需要安装整个系统加载程序。这是完全不相关的。@SamVarshavchik这是否意味着我可以加载修改后的glibc而不更改可执行文件的加载程序?如何做到这一点?这在
ld.so
手册页面中有说明。可执行文件不太可能在其
DT_RPATH
中明确包含默认库目录(
/lib
/usr/lib
)。因此,共享库的搜索路径是可重写的,如手册页面中所述。唯一的例外是一个suid程序,您没有提到。请阅读文档并使用
g++-Wall-Wextra-g-H demo.cpp-o demo_cpp
编译,然后运行
ldd./demo_cpp
我猜您想劫持一些库函数。这就是LD_预加载的好处。这是一个非常常见的话题,尤其是劫持malloc/calloc/realloc/free