gpt4 book ai didi

c++ - 有没有办法使dlopen故意失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:52 25 4
gpt4 key购买 nike

如果允许加载或不允许加载,而不使用异常,我希望能够从库中进行控制,这意味着在某些情况下,我希望dlopen(“mylib.so”)返回null,并且只有在所有条件都正确的情况下,它才会成功。
很多人都问过我的动机,在我的库中,我多次使用dlopen,我想确保在加载库之前,已经加载了所有需要的组件。
请记住,我必须使用标准解决方案,这意味着我不能使用外部插件或做诸如重写dlopen之类的事情。

最佳答案

据我所知,不,你不能,至少以正常的方式。如果库存在给定的路径,它将被加载。它不是为您自行设计的任何“业务检查”。最多,它将遵守任何文件系统权限/etc,如果进程没有访问该文件的权限,则返回错误,仅此而已。
如果您对将加载库的代码拥有完全控制权,那么像atterson建议的那样包装它并使用dlopen就完成了。
如果您没有完全控制,那么dlopen2仍然不会阻止任何人使用原始dlopen2并绕过检查。您可以尝试使它更智能,例如,让您的dlopen执行一些可检测的操作,这样,如果库是由dlopen2而不是dlopen打开的,则它可以拒绝工作,但是……有人可以伪造“可检测的东西”,然后使用“完成”。然后它归结为使得攻击者很难复制“可检测的东西”。
简单地说,它并不是要做这些事情。如果操作系统允许(~文件系统权限等),它将加载库。
对于任何其他“访问检查”,比如“你有许可证吗?”不?然后走开“你必须在图书馆里实现它。让他们通过dlopen2加载它,然后让库检查权限,例如,在每次调用它的函数时。请使用异常,或者不执行任何操作并返回空值。或者更好的方法是,您可以使用dlopen函数(参见https://stackoverflow.com/a/1602459/717732+http://tldp.org/HOWTO/Program-Library-HOWTO/miscellaneous.html#INIT-AND-CLEANUP)并在加载lib时执行一次检查。注意,这个函数接受并返回dlopen,所以仍然没有办法使initialization失败,但至少库可以有时间禁用它的函数。

关于c++ - 有没有办法使dlopen故意失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50851613/

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