замена определенного файла при запросе другим
Звучит так, будто вы проверяете только входной файл (вы проверяете по имени файла?). Вам нужно проверить и заменить выходной файл тоже.
Если вы выводите данные на один из стандартных выходов, то вам нужно закрыть и снова открыть их с помощью заменителя вывода), прежде чем переходить в исполняемый файл.
Чтобы найти все системные вызовы, которые выполняет ваш исполняемый файл, вы можете использовать strace .
Чтобы найти все вызовы библиотеки, которые делает ваш исполняемый файл, вы можете использовать ltrace .