Проблема замены системных вызовов Linux с использованием LD_PRELOAD - PullRequest
0 голосов
/ 29 мая 2009

Я пытаюсь написать программу, которая позволяет запускать двоичный файл, заменяя определенный файл при запросе другим. Это библиотека с простыми заменами функций системного вызова, которая используется с LD_PRELOAD. Проблема в том, что он ловит открытия для чтения (вместо этого читается замещающий файл), но записи всегда возвращаются к фактическому указанному файлу. Есть ли другие "открытые" системные вызовы, о которых я должен знать?

Ответы [ 4 ]

4 голосов
/ 29 мая 2009

Nevermind - глупая ошибка.

Не проверял ни абсолютные, ни относительные пути ...

2 голосов
/ 29 мая 2009

Если он открыт для записи, он, скорее всего, проходит через функцию creat (я думаю, fopen перенаправит вас туда). Проверьте свой fcntl.h для получения полного списка.

2 голосов
/ 29 мая 2009

Я не уверен, в чем причина вашей проблемы, но использование strace в вашей программе может дать некоторое представление Он должен быть частью любого нормального дистрибутива Linux.

1 голос
/ 29 мая 2009

замена определенного файла при запросе другим

Звучит так, будто вы проверяете только входной файл (вы проверяете по имени файла?). Вам нужно проверить и заменить выходной файл тоже.

Если вы выводите данные на один из стандартных выходов, то вам нужно закрыть и снова открыть их с помощью заменителя вывода), прежде чем переходить в исполняемый файл.

Чтобы найти все системные вызовы, которые выполняет ваш исполняемый файл, вы можете использовать strace .
Чтобы найти все вызовы библиотеки, которые делает ваш исполняемый файл, вы можете использовать ltrace .

...