问题标签 [dlsym]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2551 浏览

c++ - 使用 dlsym 访问类符号

我想从我的共享库(.so)中访问一个类符号这是我需要做的正确方法吗?

如果这是正确的方法,那么我应该有我的 MyClass 标头进行转换。我想知道是否有其他方法可以在不包括标题的情况下做到这一点?

谢谢

0 投票
2 回答
4508 浏览

c++ - 如何使用 LD_PRELOAD 拦截 dlsym 调用?

我想拦截应用程序对 dlsym 的调用。我曾尝试在 .so 中声明我正在预加载 dlsym ,并使用 dlsym 本身来获取它的真实地址,但由于非常明显的原因,这不起作用。

有没有比获取进程的内存映射并使用 libelf 在加载的 libdl.so 中找到 dlsym 的真实位置更容易的方法?

0 投票
0 回答
165 浏览

mysql - dlopen 加载库正确,但运行程序,结果不正确

我使用dlopen、dlsym 加载库函数。运行程序时遇到了这个问题:</p>

  1. 使用dlopen加载函数,调用函数正确但结果不正确
  2. 不要用d​​lopen直接调用函数,结果是正确的

我怎样才能找到问题?

例子:</p>

0 投票
1 回答
755 浏览

linux - 如何使用 Cython 从 dlfcn.h 加载 dlsym 函数

我很困惑如何加载共享对象库函数并将其与 Cython 一起使用。我创建了一个 dlfnc.pxd 文件,如下所示:

和一个测试文件如下

这导致以下屏幕输出错误 test.pyx:29:9: Calling non-function type 'void'

如果有人能就如何继续进行建议,我已经为此困惑了整整一个星期。

谢谢

0 投票
1 回答
371 浏览

c++ - 使用 dlsym 导入的函数中的参数位置错误

我有奇怪的问题。当我使用共享库中的参数调用导入的方法时,在这些方法中我有错误的参数。就像是:

在方法中我有:

在这里我如何导入:

我以这种方式解决了这个问题:

但我认为这不是一种手段。

0 投票
1 回答
409 浏览

ios - 这是否允许在 iOS 上将 dlopen() 和 dlsym() 用于系统库(例如:libresolv)?

这是否允许在 iOS 上将 dlopen() 和 dlsym() 用于系统库(例如:libresolv)?

感谢您提前回答!

0 投票
1 回答
498 浏览

c++ - 使用 LD_PRELOAD 和 dlsym() 覆盖“免费”或“删除”

使用 LD_PRELOAD 机制覆盖“malloc”

如何LD_PRELOAD设置ptr为 NULL 或任何其他内存地址以避免悬空指针攻击。

0 投票
1 回答
501 浏览

android - Android4.2 libdvm.so 找不到dexFileParse的函数

Android2.3内部的libdvm.so,我可以使用代码调用dexFileParse代码: void * handle=dlopen("/system/lib/libdvm.so",RTDL_LAZY); 无效*pFunc=dlsym(句柄,“dexFileParse”);


但是libdvm.so导出_Z16dexFileParseXXX,我不会从dlsym(handle,"dexFileParse")中得到dexFileParse的地址。你说:你可以dlsym(handle,"_Z16dexFileParseXXX"),是的,可以,但是_Z16* * **XXX是cplusplus的编译器重命名的,不知道编译器的时候不能用cplusplus 的


我怎样才能调用 dexFileParse?

谢谢

0 投票
1 回答
1359 浏览

c++ - 当您有重复的符号时如何可靠地使用 dlsym?

晚上好,我目前正在开发基于Plux.net模型的 C++/Linux 插件系统。

为了简单起见,我基本上用 extern C 声明了一个符号(我们称之为 pluginInformation)(以解开),我的插件管理器在预配置的导入 (.so) 中查找该符号。

问题是主应用程序声明了相同的符号,不仅如此,它所具有的任何依赖项也可能具有该符号。(因为在这个插件信息中,模块可以发布插件和/或插槽)。

因此,当我的 PluginManager 启动时,它首先尝试在主程序中查找符号(将 NULL 传递给dlopen),然后尝试在其任何依赖项中查找符号(使用dl_iterate_phdr)。最后它将dlopen一组配置导入(它将读取 .so 的路径,以便用户配置,dlopen它们,最后dlsym插件信息符号)。

然后使用在所有模块中找到的 pluginInformation 集合来构建扩展 3。

如果我在主程序中声明符号并使用dlopen加载导入,它就可以工作(只要我在 dlopen 导入时传递标志 RTLD_DEEPBIND )。

但是对于应用程序依赖项,我没有传递标志的选项(我可以但它不做任何事情),因为这个 .sos 是在应用程序启动时加载的。

现在,当我尝试使用从依赖项(启动时加载的那些)中获得的任何符号时,我会遇到分段错误。我认为问题是我在符号表中有几个同名的符号,奇怪的是它似乎正确地识别出有几个符号,它甚至给了我正确的 .so 路径,符号在哪里声明,但是一旦我访问该符号,就会发生分段错误。如果我只在主程序或依赖项之一中声明该符号,则一切正常。

如何使用 dlsym 管理主程序和strat up 导入之间的重复符号?

我一直在考虑保持修改然后只是尝试找到我的符号来解析符号表,但我不确定这是否可能(以编程方式列出模块中的所有符号)。

PD:对不起,我没有发布任何代码,但我现在不在家,我希望对我尝试做的事情的描述足够清楚,如果没有,我明天可以发布一些代码。

0 投票
3 回答
1820 浏览

c++ - 将 const char* 传递给采用 char* 的外部库中的函数

考虑我在动态外部库中具有以下功能libExternal.dylib

接下来,我有一个可执行文件来加载这个外部库并调用该函数(省略了错误检查):

如您所见,库中定义的函数采用char*as 参数。使用时dlsym,我让它得到一个函数,它需要一个const char*. 它有效!

我的问题是,这怎么可能?动态加载器忽略 const 类型?我真的无法在任何地方找到答案,所以请帮助我!:)

编辑: 我知道这段代码是错误的,我只是想了解这怎么可能。