欺骗 /proc/bus/pci/devices

欺骗 /proc/bus/pci/devices

我有一个程序需要系统中存在特定设备(据我所知,它会根据硬编码的供应商 ID:设备 ID 对列表检查 /proc/bus/pci/devices )。我怎样才能欺骗这个软件,让它认为该设备存在而没有物理连接?有没有办法向 /proc/bus/pci/devices 添加一行或拦截特定程序的系统调用并更改它?

答案1

您应该运行strace您的程序来弄清楚“特定设备的存在”意味着什么,确切地

如果它真的只是将该“文件”作为普通文件读取:好吧,简单,那么就不要向该程序显示正确的文件!

这就是文件系统命名空间的用途:隔离文件系统的程序视图。 (这是容器引擎(比如 docker)运行的一部分。)

因此,这unshare -m可能会有所帮助,之后您可以随心所欲地摆弄 /proc 挂载(提示:将其挂载到其他地方,将其用作 overlayfs 中的较低层来伪造“更好”的 /proc/bus/pci/设备,配有警告)。

另外:这听起来像是在运行时修补程序的相当简单的事情。运行到启动, open() 包含所需行的文本文件,为您提供一个新的文件描述符,在“open()”系统调用上观察点,在它打开 /proc/bus/pci/devices 时捕获,并且如果也就是说,不是返回文件描述符,而是将文件描述符赋予文本文件。

相关内容