Linux-Kernel

欺騙 /proc/bus/pci/devices

  • June 23, 2021

我有一個程序需要係統中存在特定設備(afaik 它檢查 /proc/bus/pci/devices 是否針對硬編碼的 vendor_id:device_id 對列表)。我怎麼能愚弄這個軟體以為設備在沒有物理連接的情況下就存在?有沒有辦法向 /proc/bus/pci/devices 添加一行或攔截來自特定程序的系統呼叫並進行更改?

您應該strace在您的程序上執行以弄清楚“特定設備的存在”的確切含義。

如果它真的只是將該“文件”作為普通文件讀取:好吧,簡單,那麼就不要向該程序顯示正確的文件!

這就是文件系統命名空間的用途:隔離程序對文件系統的視圖。(這是容器引擎(想想 docker)打勾的一部分。)

因此,這unshare -m可能會有所幫助,之後您可以隨心所欲地使用 /proc 掛載(提示:將其掛載到其他地方,將其用作 overlayfs 中的較低層來偽造“更好的” /proc/bus/pci/設備,附帶一個警告)。

另外:這聽起來像是在你的程序中執行時修補一個相當簡單的事情。執行到啟動,打開()一個包含所需行的文本文件,為您提供一個新的文件描述符,“open()”系統呼叫上的觀察點,當它打開 /proc/bus/pci/devices 時擷取,如果就是這樣,而不是返回文件描述符,而是將文件描述符提供給文本文件。

引用自:https://unix.stackexchange.com/questions/655448