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() переменные аргументы?