LD _PRELOAD и динамический компоновщик

У меня в зш работает:

$ zsh --version
zsh 5.7.1 (x86_64-pc-linux-gnu)
$ myFunc() {
    echo 11
}
$ for (( i=1; i<=$(myFunc); i++ )); do
    echo "$i"
done
1
2
3
4
5
6
7
8
9
10
11
$ 

Возможно, это просто ошибка.

2
09.11.2020, 14:48
1 ответ

is it, that the linker just loads the specified library in the env variable without checking if the app is even needing it ?

Да, в том-то и дело, чтоLD_PRELOAD:перечисленные там библиотеки загружаются перед программой. LD_PRELOAD— это способ изменить поведение программы.

why the function from my fake shared library is called when that function is not needed within find ?

_initзапускается очень рано при запуске программы. Динамический загрузчик вызывает его. Он не вызывается явно из исходного кода find. См., например,Общий обзор того, что происходит перед main()илиЗапуск программы Linux x86илиКак выполняется main ()в Linux.

Если бы вы предварительно загрузили определение функции, которая никогда не вызывается, ваше определение не имело бы значения.

I'm wondering why isn't there any sort of control of what the application is trying to load ?

Обычно пользователи могут запускать все, что хотят. Весь код, запускаемый пользователем, выполняется с привилегиями этого пользователя. Элементы управления необходимы только там, где есть повышение привилегий.

Sudo позволяет повышать привилегии. Потому что,обычно он запрещает функции, которые позволяют пользователю делать то, что администратор мог бы не захотеть, когда администратор настраивал правила sudo. В частности, sudo запрещает большинство переменных окружения, особенно LD_LIBRARY_PATHи LD_PRELOAD. Вы работаете в системе с уязвимой конфигурацией sudo. Это для демонстрационных целей.

2
18.03.2021, 22:51

Теги

Похожие вопросы