시스템에 특정 장치가 있어야 하는 프로그램이 있습니다(내가 이해한 바에 따르면 이 프로그램은 하드코딩된 공급업체 ID: 장치 ID 쌍 목록과 비교하여 /proc/bus/pci/devices를 확인합니다). 물리적으로 연결되지 않은 상태에서 장치가 존재한다고 생각하도록 이 소프트웨어를 속일 수 있는 방법은 무엇입니까? /proc/bus/pci/devices에 줄을 추가하거나 특정 프로그램에 대한 시스템 호출을 가로채서 변경할 수 있는 방법이 있습니까?
답변1
strace
"특정 장치의 존재"가 무엇을 의미하는지 알아내기 위해 프로그램을 실행해야 합니다 .정확히.
실제로 해당 "파일"을 일반 파일로 읽는다면 간단합니다. 프로그램에 올바른 파일을 표시하지 마십시오!
파일 시스템 네임스페이스의 목적은 바로 파일 시스템에 대한 프로그램의 관점을 분리하는 것입니다. (이는 컨테이너 엔진(예: docker)이 실행되는 방식의 일부입니다.)
따라서 이것이 unshare -m
도움이 될 수 있습니다. 그런 다음 원하는 대로 /proc 마운트를 조작할 수 있습니다(힌트: 다른 곳에 마운트하고 오버레이fs의 하위 레이어로 사용하여 "더 나은" /proc/bus/pci/장치를 가짜로 사용) ~와 함께경고하다).
또한: 이는 런타임에 패치하는 것이 매우 간단한 것처럼 들립니다. 부팅하려면 실행하고, 필요한 줄이 포함된 텍스트 파일을 열고() 새 파일 설명자를 제공하고, "open()" 시스템 호출에 대한 감시점을 제공하고, /proc/bus/pci/devices 가 열릴 때 캡처합니다. , 파일 설명자를 반환하는 대신 파일 설명자를 텍스트 파일에 할당합니다.