如何手动确定哪个链接器与给定的 libc 文件和给定的二进制文件一起使用?

Posted

技术标签:

【中文标题】如何手动确定哪个链接器与给定的 libc 文件和给定的二进制文件一起使用?【英文标题】:How to manually figure out which linker to use with a given libc file and given binary? 【发布时间】:2021-08-11 13:08:48 【问题描述】:

背景是我正在查看来自 pico-CTF 的旧 CTF 挑战。您确实有 Makefile、二进制文件本身和对应的 libc 文件可用。但是,二进制文件不会在我的机器上运行,而是会因分段错误而中止。根据我提供的一篇文章,这是由于本地机器上的链接器(ld-linux-xxxxx.x.so)不匹配造成的。然后在写作中,他使用了不同的 ld 文件,一切都很好。 所以我想知道你怎么知道你需要使用哪个ld文件。我知道您可以使用带有 --set-interpreter 选项的 patchelf 来正常运行该二进制文件,但是如何知道要使用哪个链接器让我大吃一惊。 如果有人可以让我对此有所了解,或者至少将我指向一些我可以阅读的链接,那就太好了。到目前为止,我还没有发现任何有用的东西。

提前致谢。

【问题讨论】:

【参考方案1】:

好的,所以我只是在朋友的帮助下才弄明白的。您可以先检查确切的 libc 版本,因为它是通过 libc 文件名给出的,或者使用

strings libc.so.6 | grep -i libc

在我的例子中,libc 文件就是这样命名的。结果会给你类似的东西

libc-2.27.so

相应的链接器应该是ld-linux-2.27.so.2 之类的东西,您可以轻松地用谷歌搜索和下载。或者通过 'linker 2.27' 或类似的 google。

最好的

【讨论】:

以上是关于如何手动确定哪个链接器与给定的 libc 文件和给定的二进制文件一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何摆脱VS 13中的错误“链接:致命错误LNK1104:无法打开文件'LIBC.lib'”?

每次加载libc地址都不相同

在linux下安装matlab时由于提示 ln: 无法创建符号链接"./libc.so.6": 只读文件系统,怎么解决

libc中的错误?如何读取转储文件?

Android NDK编译如何强制使用libc++.a的静态链接库

如何使用 clang++/libc++ 编译/链接 Boost?