LD_PRELOAD, bash и printf

У меня есть общий объект, который делает некоторые 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 ответа

Попробуй это:

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам