Один из подходов состоит в том, чтобы виртуализировать процесс, аналогично тому, как это делает wine
, и заново интерпретировать пути к файлам.Это довольно тяжелая задача для реализации.
Более элегантный подход заключается в использовании системного вызова chroot()
, который устанавливает поддерево файловой системы в качестве корневого каталога процесса.Создайте виртуальное поддерево, включая / bin, / tmp, / usr, / etc, так как вы хотите, чтобы процесс их видел, вызовите chroot с виртуальным деревом, а затем выполните целевой исполняемый файл.Я не могу вспомнить, возможно ли иметь символьные ссылки внутри дерева ссылочных файлов снаружи, но я так не думаю.Но, безусловно, все необходимое можно скопировать в песочницу, а затем, когда это будет сделано, проверить наличие изменений на оригиналах.