2010-01-22 5 views

Répondre

5

Pour WIndows, les arguments de ligne de commande sont conservés dans le bloc d'environnement de processus (PEB), qui est allouée dans l'espace adresse du processus utilisateur lors de la création du processus.

Vous pouvez lire Windows Internals pour plus de détails. Voici un snippet from Chapter 5 - Processes, Threads, and Jobs.

Je suppose que c'est la même chose pour les saveurs Unix. Ces données doivent être dans la mémoire du processus, de sorte qu'il peut être consulté par le processus lui-même.

+0

Notez que les programmes sous Windows reçoivent une chaîne d'argument unique. Il est divisé en 'argv' par le runtime C. – zneak

3

Cela dépend du système d'exploitation et éventuellement de la langue. Une bonne réponse C-centrique est que le système d'exploitation crée l'espace de processus (y compris le chargement du code, la création du tas et de la pile, etc.). Ensuite, il place le vecteur d'argument de la ligne de commande dans un emplacement, puis copie l'adresse du vecteur d'argument dans 'argv' sur la pile, et le nombre de mots dans 'argc'.

Ce n'est que lorsque ces tâches sont terminées que le système d'exploitation autorise l'exécution du processus.

0

Les arguments de ligne de commande sont stockés dans l'espace mémoire de l'application. Exactement où diffère de OS à OS, je suppose qu'il va généralement au fond du tas. Le code qui le met là est dans le code source du noyau pour exec sur les systèmes d'exploitation de type Unix, je ne sais pas où il serait dans Windows (pas que vous pouvez voir la source de toute façon). Le code d'exécution C (d'où provient "crt") prend argv et argc de la pile, puis appelle main. Si vous êtes intéressé à en apprendre davantage comment un exécutable démarre sous Linux, ce document par Ulrich Drepper (de mainteneur glibc) peut être utile: http://people.redhat.com/drepper/dsohowto.pdf

0

sous Linux: Les arguments de ligne de commande seront stockés dans la pile. ne pas confondre variable d'environnement avec arguments de ligne de commande, espace d'adressage de processus avoir une zone de mémoire séparée pour les variables d'environnement

Questions connexes