LD_PRELOAD, bash и printf - PullRequest
       38

LD_PRELOAD, bash и printf

0 голосов
/ 27 октября 2011

У меня есть общий объект, который делает printf() s через атрибут для init; Довольно просто Он просто сообщает мне о некоторых переменных, которые я установил.

Когда я делаю LD_PRELOAD=mylib.so ./program.sh -flags, program.sh выдает ошибки из-за printfs:

./program_run: line 16: cd: mylib.so: Startup
.: File name too long
./program_run: line 18: test: too many arguments

Затем программа обычно запускается. Похоже, что bash-скрипт поврежден с printf() s, когда он проверяет переменные.

Есть ли обходной путь?

Ответы [ 2 ]

0 голосов
/ 09 января 2014

Попробуйте:

LD_PRELOAD=./mylib.so ./program.sh -flags

Обратите внимание на путь перед mylib.so

Мой опыт показывает, что лучше использовать полный путь, например,

LD_PRELOAD=/home/source/mylib/mylib.so ./program.sh -flags

Осторожно используйте экспорт, как упомянуто выше.

Это может вызвать все виды непреднамеренных проблем.

0 голосов
/ 27 октября 2011

Попробуйте с этими изменениями:

export LD_PRELOAD=mylib.so ; ./program.sh -flags

Используете ли вы printf () переменные-аргументы?

...