Как я могу прочитать переменные среды на ранних стадиях?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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