Как я могу прочитать переменные среды на ранних стадиях?Linux

Anonymous
Как я могу прочитать переменные среды на ранних стадиях?

Сообщение Anonymous »

Используйте ld_preload для загрузки общих объектов с помощью флага initfirst . Вызов функции getenv () из функции с __attribute __ ((конструктор)) возвращает null . Я думаю, что это, вероятно, потому, что функция вызывается перед кем-то (Libc?)

Код: Выделить всё

// foo.c
#include 
#include 

void setup(void) __attribute__((constructor));

void
setup(void)
{
fprintf(stderr, "FOO=\"%s\"\n", getenv("FOO"));
}
< /code>
$ cc -o foo.so -fPIC -shared foo.c -Wl,-z,initfirst
$ LD_PRELOAD=./foo.so FOO=123 ./hello
FOO="(null)"
< /code>
Removing the initfirst< /code> флаг дал ожидаемый результат. < /p>
Вопросы: < /p>

[*] Есть ли способ прочитать переменные среды в этих условиях? (Это нормально, если он работает только на Linux, AMD64, GCC и Glibc)
 Кто инициализирует __environ 
? Погрузчик, LIBC, CRT0 или ядро?>

Подробнее здесь: https://stackoverflow.com/questions/797 ... rly-stages

Вернуться в «Linux»