binary
我们在世界各地分布有不同的嵌入式盒子,运行 TI Arago Linux,每个盒子上都运行一个特定的应用程序(我们称之为)。binary
服务器中有几个编译版本,因为盒子里总是只有一个/app/binary
。
问题是,虽然我们可以设法通过binary
安装在盒子中的 md5 哈希来识别,但我们无法确定当前正在执行哪个版本。
14407 root 2880 S /app/binary
有没有一个通用的方法确定哪个版本binary
目前跑步例如,基于二进制文件的 md5 哈希值?
答案1
在 Linux 上,您始终可以通过探索来找到当前正在运行的可执行文件的内容它的目录在/proc
(只要您有适当的许可)。该文件/proc/14407/exe
是一个“神奇”的符号链接;即使链接看起来悬而未决(例如,因为可执行文件已被删除),您始终可以阅读其内容。因此md5sum /proc/14407/exe
,如果 MD5 校验和允许您识别版本,您可以使用 识别当前运行的二进制文件。
答案2
可能有很多方法可以解决这个问题。但是,如果您有正在运行的进程的 PID,我会使用lsof
.
在您的示例中,对于 root 用户拥有的 PID 14407,您可以执行以下操作来显示该进程的所有打开文件:
lsof -p 14407
这将显示所有打开的文件。这些文件之一应该是二进制文件本身。如果您知道二进制文件集合应驻留的路径以简化lsof
.
一旦您知道打开了哪个二进制文件,当进程启动时,您可以对该文件进行 MD5 并获取运行时加载的实际二进制文件的哈希值。
但是,如果您的二进制文件正在树中重建,并且该原始文件在执行后被覆盖(我正在考虑一个像守护进程一样长时间运行的进程),并且原始二进制文件可能由于新构建而发生变化,那么这个方法将不可靠。