问题标签 [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.
c++ - 使用 dlsym 访问类符号
我想从我的共享库(.so)中访问一个类符号这是我需要做的正确方法吗?
如果这是正确的方法,那么我应该有我的 MyClass 标头进行转换。我想知道是否有其他方法可以在不包括标题的情况下做到这一点?
谢谢
c++ - 如何使用 LD_PRELOAD 拦截 dlsym 调用?
我想拦截应用程序对 dlsym 的调用。我曾尝试在 .so 中声明我正在预加载 dlsym ,并使用 dlsym 本身来获取它的真实地址,但由于非常明显的原因,这不起作用。
有没有比获取进程的内存映射并使用 libelf 在加载的 libdl.so 中找到 dlsym 的真实位置更容易的方法?
mysql - dlopen 加载库正确,但运行程序,结果不正确
我使用dlopen、dlsym 加载库函数。运行程序时遇到了这个问题:</p>
- 使用dlopen加载函数,调用函数正确但结果不正确
- 不要用dlopen直接调用函数,结果是正确的
我怎样才能找到问题?
例子:</p>
linux - 如何使用 Cython 从 dlfcn.h 加载 dlsym 函数
我很困惑如何加载共享对象库函数并将其与 Cython 一起使用。我创建了一个 dlfnc.pxd 文件,如下所示:
和一个测试文件如下
这导致以下屏幕输出错误 test.pyx:29:9: Calling non-function type 'void'
如果有人能就如何继续进行建议,我已经为此困惑了整整一个星期。
谢谢
c++ - 使用 dlsym 导入的函数中的参数位置错误
我有奇怪的问题。当我使用共享库中的参数调用导入的方法时,在这些方法中我有错误的参数。就像是:
在方法中我有:
在这里我如何导入:
我以这种方式解决了这个问题:
但我认为这不是一种手段。
ios - 这是否允许在 iOS 上将 dlopen() 和 dlsym() 用于系统库(例如:libresolv)?
这是否允许在 iOS 上将 dlopen() 和 dlsym() 用于系统库(例如:libresolv)?
感谢您提前回答!
c++ - 使用 LD_PRELOAD 和 dlsym() 覆盖“免费”或“删除”
如何LD_PRELOAD
设置ptr
为 NULL 或任何其他内存地址以避免悬空指针攻击。
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?
谢谢
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:对不起,我没有发布任何代码,但我现在不在家,我希望对我尝试做的事情的描述足够清楚,如果没有,我明天可以发布一些代码。
c++ - 将 const char* 传递给采用 char* 的外部库中的函数
考虑我在动态外部库中具有以下功能libExternal.dylib
:
接下来,我有一个可执行文件来加载这个外部库并调用该函数(省略了错误检查):
如您所见,库中定义的函数采用char*
as 参数。使用时dlsym
,我让它得到一个函数,它需要一个const char*
. 它有效!
我的问题是,这怎么可能?动态加载器忽略 const 类型?我真的无法在任何地方找到答案,所以请帮助我!:)
编辑: 我知道这段代码是错误的,我只是想了解这怎么可能。