gpt4 book ai didi

c++ - 使用 dlopen 加载 GNU ld 脚本

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:33:56 25 4
gpt4 key购买 nike

我有一个 C++14 代码,它应该使用 dlopen 加载任意共享对象文件。不幸的是,在某些系统上(例如我的 archlinux,据报道也适用于 ubuntu 和 gentoo 上的某些 .so),这些 so 文件可以是“GNU ld 脚本”而不是实际的二进制文件。

作为引用,这里是我的/usr/lib/libm.so的内容:

/* GNU ld script
*/
OUTPUT_FORMAT(elf64-x86-64)
GROUP ( /usr/lib/libm.so.6 AS_NEEDED ( /usr/lib/libmvec.so.1 ) )

我在 ghc 中找到了几个处理这个问题的代码片段或 ruby .我想避免诉诸基于解析 dlerror 文本和文件的手动解析文本文件。我觉得那是非常邪恶的,我将无法实现和维护这种格式的极端情况。

有没有一种干净的方法来实现处理这种情况?坦率地说,我很困惑为什么 dlopen 实际上没有直接处理这些。

注意:考虑到上述补丁,我认为这不仅仅是我的系统配置/版本的问题。如果这应该与 dlopen 开箱即用(错误而不是缺少功能),请告诉我。

最佳答案

链接器脚本旨在供链接器使用,而不是运行时链接器。

GNU ld script评论应该是赠品:这是给 ld 的, 不适用于 ld.so . ;-)

例如:http://www.math.utah.edu/docs/info/ld_3.html

所以我想将它与 dlopen() 一起使用将意味着模仿/导入 ld 的一部分的魔力,这将证实您对诉诸手动解析文本和维护极其邪恶的代码的恐惧。

编辑:似乎有一件事可以帮助您:

https://www.sourceware.org/ml/libc-alpha/2011-07/msg00152.html

<gnu/lib-names.h>应该包含一个定义 LIBM_SO,它应该指向您实际上可以 dlopen() 的正确文件。

这意味着通常不需要恶意代码。

关于c++ - 使用 dlopen 加载 GNU ld 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34879686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com