[UOS] 请教与ld.so.preload有关的问题 Resolved
Tofloor
poster avatar
神经蛙
deepin
2024-04-28 23:00
Author

我做了一个包含hook 函数的so,主要hook了x11库、xcb库的一些函数,还有一个Qt函数,一个gtk函数,用来实现防截图、防止访问剪贴板、检测另存为对话框、检测打印对话框等功能。

然后放了一个ld.so.preload文件在etc目录里,内容是这样的:

/opt/dss/dsshook.so

现在有一个问题:如果这个配置文件存在,系统就无法启动,会卡在LOGO那里。如果重启前手动删掉这个preload文件,等登录进去后再放进去,那就没有问题

引起错误的原因在哪里呢?是so文件本身有问题,还是preload生效的时机不对。

怎么解决呢

Reply Favorite View the author
All Replies
神经蛙
deepin
2024-04-29 00:13
#1

我在别的系统上是这样做的:在etc/profile.d里放一个脚本文件,用这个脚本文件删除/etc/ld.so.preload,这样就不至于影响系统程序的运行了。等进入桌面后再利用一个自启动程序把ld.so.preload文件放到/etc里去。初步测试能达到我的目的

到了UOS里,这个办法不管用了。

删除动作应该进行得越早越好

Reply View the author
Ziggy
deepin
2024-04-29 01:54
#2

preload意思是预加载(优先加载),在/usr/lib顺序之上

Reply View the author
👀偷偷观察
deepin
2024-04-29 08:43
#3

不知道是不是可以查看dmesg 日志发现更多问题呢

Reply View the author
神经蛙
deepin
2024-04-29 12:40
#4
It has been deleted!
神经蛙
deepin
2024-04-29 13:56
#5
It has been deleted!
神经蛙
deepin
2024-04-30 11:21
#6

我在/etc/profile里加了一个环境变量:

export LD_PRELOAD=$LD_PRELOAD:/opt/dss/dsshook.so

解决了。不会影响系统启动了。经多次验证,不是so的问题,可能启动时就是不能有任何的preload,某个地方过不去

Reply View the author