أين يتم تخزين وسيطات سطر الأوامر؟
-
22-09-2019 - |
سؤال
لدي أدنى شك @ تخزين وسيطات سطر الأوامر.
myprog.exe -cfgfile myConfig.cfg
يتم تمرير ARGS لخط الأوامر عند إنشاء العملية ، هل يتم تخزينها خارج العملية؟
أين يخزنها OS؟
المحلول
بالنسبة لنظام التشغيل Windows ، يتم الاحتفاظ بوسائط سطر الأوامر في كتلة بيئة العملية (PEB
) ، والتي يتم تخصيصها في مساحة عنوان عملية المستخدم عند إنشاء العملية.
يمكنك قراءة Windows Internals لمزيد من التفاصيل. ها هو مقتطف من الفصل 5 - العمليات والموضوعات والوظائف.
أفترض أنه هو نفسه بالنسبة لنكهات UNIX. يجب أن تكون هذه البيانات في ذاكرة العملية ، بحيث يمكن الوصول إليها من خلال العملية نفسها.
نصائح أخرى
ذلك يعتمد على نظام التشغيل وربما اللغة. الإجابة الجيدة التي تركز على C هي أن نظام التشغيل يخلق مساحة العملية (بما في ذلك تحميل الكود ، وإنشاء الكومة والمكدس ، إلخ). ثم يضع متجه وسيطة سطر الأوامر في موقع ما ، ثم ينسخ عنوان متجه الوسيطة إلى "Argv" على المكدس ، وعدد الكلمات إلى "Argc".
فقط بعد انتهاء هذه المهام ، يسمح نظام التشغيل بتنفيذ العملية.
يتم تخزين وسيطات سطر الأوامر في مساحة ذاكرة التطبيق. بالضبط حيث يختلف من نظام التشغيل إلى نظام التشغيل ، أعتقد أنه عادة ما يذهب في أسفل الكومة. الكود الذي يضعه في رمز مصدر kernel لـ exec على OSS يشبه UNIX ، لست متأكدًا من مكان وجوده في Windows (لا يمكنك رؤية المصدر على أي حال). رمز وقت التشغيل C (هذا هو المكان الذي يأتي منه "CRT") يأخذ Argv و Argc من المكدس ثم يستدعي Main. إذا كنت مهتمًا بمعرفة المزيد من كيفية بدء التشغيل القابل للتنفيذ في Linux ، فقد تكون هذه الورقة من قبل Ulrich Drepper (GLIBC Punainer) ذات قيمة: http://people.redhat.com/drepper/dsohowto.pdf
في Linux: سيتم تخزين وسيطات سطر الأوامر في Stack. لا تخلط بين المتغير البيئي و args سطر الأوامر ، مساحة عنوان العملية لها مساحة ذاكرة منفصلة للمتغيرات البيئية