где хранятся аргументы командной строки?
-
22-09-2019 - |
Вопрос
У меня есть сомнения @ относительно хранения аргументов командной строки.
myprog.exe -cfgфайл myconfig.cfg
Аргументы командной строки передаются при создании процесса, поэтому они сохраняются вне процесса?
где ОС хранит его?
Решение
Для WIndows аргументы командной строки хранятся в блоке среды процесса (PEB
), который выделяется в адресном пространстве пользовательского процесса при его создании.
Вы можете прочитать «Внутренности Windows» для получения более подробной информации.Вот фрагмент из главы 5 — Процессы, потоки и задания.
Я предполагаю, что то же самое касается и версий Unix.Эти данные должны находиться в памяти процесса, чтобы сам процесс мог получить к ним доступ.
Другие советы
Это зависит от ОС и, возможно, языка.Хороший ответ, ориентированный на C, заключается в том, что ОС создает пространство процесса (включая загрузку кода, создание кучи и стека и т. д.).Затем он помещает вектор аргументов командной строки в определенное место, а затем копирует адрес вектора аргументов в «argv» в стеке, а количество слов в «argc».
Только после выполнения этих задач ОС разрешает выполнение процесса.
Аргументы командной строки хранятся в памяти приложения.Что именно отличается от ОС к ОС, я предполагаю, что обычно оно находится в самом низу кучи.Код, который помещает его туда, находится в исходном коде ядра для exec в Unix-подобных ОС, но не уверен, где он будет находиться в Windows (в любом случае вы не можете увидеть исходный код).Код среды выполнения C (отсюда и происходит «crt») берет argv и argc из стека, а затем вызывает main.Если вы хотите узнать больше о том, как запускается исполняемый файл в Linux, эта статья Ульриха Дреппера (сопровождающего glibc) может оказаться полезной: http://people.redhat.com/drepper/dsohowto.pdf
в Linux:Аргументы командной строки будут сохранены в стеке.не путайте переменную среды с аргументами командной строки, в адресном пространстве процесса есть отдельная область памяти для переменных среды