gpt4 book ai didi

linux - 当用户进程被杀死时,硬盘驱动器上的共享库 (.so) 文件会发生变化

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

这是对我之前问题的延续。

hash of libgmp.so changes automatically

我开发了一个库并将其链接到我的流程。每次我将它与我的进程链接时,我的库都必须具有相同的哈希值(从安装时间开始)。我的过程总是在做任何其他事情之前检查库的散列。我的进程是一个守护进程,它通过 initrd 中的脚本启动和停止。我总是通过“kill -9 myproc”命令终止我的进程,该命令发送 SIGKILL 到进程并强行终止进程。

但有时当我停止并重新启动我的进程时,我的共享库文件的哈希值会发生变化。它随机发生,最近发生得更频繁,由于我在其中编码的哈希比较条件,我的进程没有启动。

我已经转储了两个共享库,即在安装和更改版本之后。我使用“objdump -d libmy.so”进行转储。这是两个转储的“差异”屏幕截图(黄色是原始文件,红色是更改后的版本):

enter image description here

我不太了解 elf 文件的内容,但看起来原始文件只有偏移量,而更改后的文件具有指令和函数的完整地址。因此,更改后的库版本比原始库大 2kb。

为什么会这样?它与强制进程关闭的 SIGKILL 信号有什么关系吗?如果不是,可能是什么原因?

如有任何帮助,我们将不胜感激。

最佳答案

Why is this happening?

很可能是因为您使用的是 RedHat、Fedora 或 CentOS 系统,并且 prelink已启用(默认情况下,它每两周将系统上的所有共享库预链接到一个新的随机地址)。当您停止/重新启动您的守护程序时,它会得到一个新版本的库 IF 自您上次启动您的守护程序以来运行的预链接。

参见 these instructions关于如何禁用预链接。

或者,修改您的校验和过程以仅关注有趣 部分,例如.text.data .rodata,忽略其余部分。

关于linux - 当用户进程被杀死时,硬盘驱动器上的共享库 (.so) 文件会发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26546050/

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