( 原文地址:https://0xffff.one/d/504 )

关于C语言程序的换库很久以前在编译带debug_info的glibc中也提到过一下,首先是用vim把程序的ld连接库更换掉,然后用LD_LIBRARY_PATH设置好libc的路径就可以了,但直到今天做了CAOV这道C++题后才发现直接这样搞好像行不通。

然后在打算重新编一个stdlibc++时发现,这个库在本地就有了,而且还是不受ld-linux的版本影响的,通过find命令可以找到,通常都在usr目录中可以找到。

同样的方法也可以找到另一个缺的库libgcc_s.so.1,据说stdlibc是跟gcc版本有关的(好像是gcc自带的),不同版本的gcc要用对应的stdlibc库。

然后重新组织一下启动命令就可以运行起来了

如果要运行题目给的libc库的话可以在重新组织一下启动命令,把题目给的库的路径(库名要跟ldd出来的名字一样)放在LD_LIBRARY_PATH的最前面,因为LD_LIBRARY_PATH的调用顺序是从前到后、从左到右的,因为程序还需要一个libm库,所以要把自己系统的libm路径也加上。

(据说用apt也可以下载到带debug_info的stdlibc++的🤔)