如何手动确定哪个链接器与给定的 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'”?
在linux下安装matlab时由于提示 ln: 无法创建符号链接"./libc.so.6": 只读文件系统,怎么解决