Где строка среды фактическая сохраненный?

Можно смотреть на контрольную подсистему (и auditd). Существует однако некоторый код для записи, чтобы иметь включенную систему dbus, чтобы иметь всплывающее окно на рабочем столе. Можно смотреть на mandi программное обеспечение от mandriva (http://wiki.mandriva.com/en/Projects/Interactive_Firewall).

6
17.05.2013, 05:08
3 ответа

Переменные среды хранятся вместе с параметрами командной строки наверху расположения памяти процесса выше стека.

enter image description here

7
27.01.2020, 20:22

Переменные среды являются проявлением оболочки, которую Вы используете. Я предположил бы, что среда в целом является структурой данных, которая является частью компонент того, что составляет процесс.

Я не ожидал бы, что они будут держаться вместе в любом исключительном месте для всех процессов, скорее каждый процесс более вероятно сохраняет переменные среды вместе с данным процессом наряду с другой информацией связанными с данным процессом.

Можно отчасти видеть это, если Вы вводите по абсолютному адресу вокруг /proc файловая система, которая поддерживает информацию о процессах, поскольку они работают на Вашем ядре.

Пример

Если мы ищем один из моего bash процессы:

$ ps -eaf| grep bash | tail -1
saml     12095  3211  0 May10 pts/53   00:00:04 bash

Рассмотрение этого обрабатывает /proc область (перечисляют первые 5):

$ sudo cat /proc/12095/environ | tr '\0' '\n' | head -5
rvm_log_path=/home/saml/.rvm/log
rvm_ruby_string=ruby-1.9.2-p180
TERM=xterm
SHLVL=1
KDEDIRS=/usr

Это показывает, по крайней мере, начальную среду что этот процесс, начатый с. Я верю /proc/PID/environ не отражает, что активное представление этого обрабатывает среду, поскольку это добирается, увеличился.

3
27.01.2020, 20:22

Среда (пары имя/значение) живет к вершине стека. Рисунок 2 и Раздел 3 из состояния Запуска двоичного файла Linux/i386 ELF показывают о том, где среда. Тот документ несколько устарел как ELF, вспомогательный вектор также живет на стеке.

Можно проверить это с маленькой программой C:

#include <stdio.h>
int main(int argc, char **argv, char **env)
{
        printf("argv holds %p\n", argv);
        printf("argv[0] holds %p\n", argv[0]);
        printf("env holds %p\n", env);
        printf("env[0] holds %p\n", env[0]);
        return 0;
}

Это не отвечает на другой подобный вопрос: когда Вы делаете export SOME_VAR в оболочке, где это окружает, помещает новую переменную среды? Оболочка должна сохранить свою среду в структуре данных, которая может быть расширена по желанию, и затем (преобразованный в массив и) используемый в качестве envp (3-й) аргумент в execve(2) системные вызовы.

5
27.01.2020, 20:22

Теги

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