انتقل إلى المحتوى

COM

غير مفحوصة
يرجى مراجعة هذه المقالة وإزالة وسم المقالات غير المراجعة، ووسمها بوسوم الصيانة المناسبة.
من ويكيبيديا، الموسوعة الحرة
كوم
امتداد الملف
.COM
صيغة وسائط الإنترنت
application/x-dosexec[1] عدل القيمة على Wikidata
نوع الصيغة
امتدّ لـ
عدد من ملفات COM في IBM PC DOS 1.0

ملف COM هو نوع من الملفات القابلة للتنفيذ البسيطة. في أنظمة التشغيل VAX الخاصة بشركة Digital Equipment Corporation (DEC) في سبعينيات القرن العشرين، . تم استخدام COM كملحق اسم ملف للملفات النصية التي تحتوي على أوامر سيتم إصدارها لنظام التشغيل (على غرار ملف الدفعة ). استُخدم امتداد اسم الملف COM. كملحق اسم ملف للملفات النصية التي تحتوي على أوامر موجهة لنظام التشغيل (بشكل مشابه ملف الدفعة). ومع ظهور نظام التشغيل سي بي / م من شركة Digital Research (وهو نظام تشغيل للحواسيب الدقيقة صُمم على غرار نظام TOPS-10 لجهاز PDP-10)، تحول نوع الملفات المرتبطة عادةً بامتداد COM. ليصبح ملفات قابلة للتنفيذ. وقد انتقل هذا الاصطلاح لاحقًا إلى نظام التشغيل DOS. وحتى بعد ظهور تنسيق الملفات القابلة للتنفيذ الأكثر عمومية EXE، ظلت ملفات COM. صغيرة الحجم قابلة للاستخدام وشائعة الاستخدام في نظام التشغيل DOS.

لا توجد أي علاقة بين امتداد اسم الملف COM. واسم النطاق الأعلى مستوى على الإنترنت .com (المخصص للاستخدام "التجاري"). ومع ذلك، استغل مطورو البرامج الضارة هذا التشابه اللفظي.

تنسيق DOS الثنائي

[عدل]

تنسيق COM. هو تنسيق الملف التنفيذي الثنائي الأصلي المستخدم في نظام التشغيل سي بي / م (بما في ذلك SCP و MSX-DOS) بالإضافة إلى دوس. يتميز ببساطته الشديدة؛ فهو يفتقر إلى رأس (باستثناء ملفات سي بي / م 3) ولا يتضمن أي بيانات وصفية قياسية، بل يحتوي فقط على الشيفرة والبيانات. هذه البساطة تأتي بتكلفة: الحد الأقصى لحجم الملف الثنائي هو 65280 بايتًا (FF00 وبياناتها)، أي أقل بـ 256 بايتًا من 64 كيلوبايت، ويخزن جميع شيفرته وبياناتها في مقطع واحد.

.

نظرًا لافتقاره إلى معلومات النقل (Relocation Information)، يتم تحميل ملف COM. بواسطة نظام التشغيل في عنوان محدد مسبقًا في الذاكرة، تحديدًا عند الإزاحة 0100h (256 بايتًا) مباشرةً بعد منطقة PSP (برنامج Segment Prefix). ومن هذا العنوان يبدأ تنفيذه، وهو ما يفسر الحد الأقصى لحجم الملف التنفيذي القابل للتحميل والتنفيذ كقطعة واحدة. يتم إصلاح نقطة الدخول عند 0100h. لم تكن هذه مشكلة في الأجهزة ذات 8 بت نظرًا لأنها لا تستطيع معالجة سوى 64 كيلوبايت من الذاكرة، ولكن الأجهزة ذات 16 بت لديها مساحة عنوان أكبر بكثير، وهذا هو السبب في أن هذا التنسيق لم يعد مستخدمًا.

في بنية وحدة المعالجة المركزية انتل 8080، كانت القدرة على عنونة الذاكرة تقتصر على 65,536 بايت فقط (يمتد نطاق العناوين من 0000h إلى FFFFh). وفي ظل نظام التشغيل CP/M، تم تخصيص أول 256 بايت من هذه الذاكرة، تحديدًا من العنوان 0000h إلى 00FFh، لاستخدام النظام فيما يُعرف باسم الصفحة صفر (Zero Page).

وكان لا بد من تحميل أي برنامج مستخدم في تمام الساعة 0100h ليتم تنفيذه. ملفات COM تناسب هذا النموذج تمامًا. قبل تقديم MP/M و Concurrent CP/M ، لم يكن هناك إمكانية لتشغيل أكثر من برنامج أو أمر في وقت واحد: يتم تشغيل البرنامج المحمل في الساعة 0100h، وليس أي برنامج آخر.

على الرغم من تطابق تنسيق الملف في نظامي التشغيل DOS و CP/M، فإن ملفات COM الخاصة بكل نظام غير متوافقة؛ إذ تشتمل ملفات COM الخاصة بنظام DOS على تعليمات معالجات إكس 86 وقد تتضمن استدعاءات لوظائف نظام DOS. بينما تحتوي ملفات COM الخاصة بنظام CP/M على تعليمات 8080 ومكالمات نظام CP/M (قد تحتوي البرامج المقيدة بأجهزة معينة أيضًا على تعليمات إضافية لنظام 8085 أو Z80 ).

تقوم ملفات COM في نظام DOS بتعيين جميع سجلات قطاعات x86 إلى القيمة نفسها، بينما تُعيّن سجل SP (مؤشر المكدس) إلى إزاحة آخر كلمة متاحة في أول 64 كيلوبايت (عادةً FFFEh) أو إلى الحد الأقصى لحجم الذاكرة المتاحة في الكتلة التي تم تحميل البرنامج فيها، وذلك لكلا السجلين.

في واجهة برمجة التطبيقات DOS 1.x الأصلية، المشتقة من واجهة برمجة التطبيقات CP/M، كان إنهاء برنامج ملف COM يتم عن طريق استدعاء الدالة INT 20h (إنهاء البرنامج) أو الدالة INT 21h الوظيفة 0، التي تؤدي الغرض نفسه. وكان على المبرمج أيضًا التأكد من احتواء سجلي قطاع الكود والبيانات على القيمة نفسها عند إنهاء البرنامج لتفادي احتمالية تعطل النظام. وعلى الرغم من إمكانية استخدام هذه الطريقة في أي إصدار من نظام التشغيل DOS،...

فقد أوصت Microsoft باستخدام INT 21h Function 4Ch لإنهاء البرنامج من نظام التشغيل DOS 2.x فصاعدًا، والذي لم يتطلب تعيين شريحة البيانات والرمز إلى نفس القيمة.

من الممكن إنشاء ملف COM واحد يمكن تشغيله تحت نظامي التشغيل DOS و CP/M في شكل ملف ثنائي سميك. ومع ذلك، لا يوجد توافق حقيقي على مستوى التعليمات؛ بل يتم اختيار التعليمات عند نقطة الدخول بحيث تكون متساوية في الوظيفة ولكنها مختلفة في التنفيذ بين النظامين.وتجعل تنفيذ البرنامج ينتقل إلى القسم الخاص بنظام التشغيل المستخدم. إنه في الأساس برنامجين مختلفين لهما نفس الوظيفة في ملف واحد، يسبقهما كود يحدد البرنامج الذي سيتم استخدامه.

في نظام التشغيل CP/M 3، إذا كان البايت الأول من ملف COM. هو C9h، فهذا يشير إلى وجود رأس إضافي مكون من 256 بايت. نظرًا لأن C9h يتوافق مع تعليمة RET (العودة من الإجراء) في معالجات 8080/Z80، فإن هذا الرأس كان بمثابة آلية لتجنب التنفيذ العرضي للرأس على الأنظمة القديمة التي لم تكن تعرف هذا التنسيق الجديد لملفات COM في CP/M 3. ، فهذا يعني أن ملف COM سينتهي فورًا إذا تم تشغيله على إصدار سابق من CP/M لا يدعم هذا الامتداد. (نظرًا لأن مجموعات التعليمات الخاصة بـ 8085 وZ80 عبارة عن مجموعات فرعية لمجموعة التعليمات الخاصة بـ 8080، فإن هذا يعمل على جميع المعالجات الثلاثة.) C9h هو رمز تشغيل غير صالح على 8088/8086، وسيؤدي إلى حدوث استثناء مقاطعة 6 تم إنشاؤه بواسطة المعالج في وضع v86 على شرائح 386 وx86 الأحدث. نظرًا لأن C9h هو الكود التشغيلي لـ LEAVE منذ 80188 / 80186 وبالتالي نظرًا لأنه نادرًا ما يُستخدم كتعليمات أولى في برنامج صالح، فإن مُحمّل الملفات القابلة للتنفيذ في بعض إصدارات DOS يرفض ملفات COM التي تبدأ بالرمز C9h، لتجنب حدوث أعطال محتملة.

قد تحمل بعض الملفات امتداد .COM، لكنها لا تتبع التنسيق البسيط الموصوف سابقًا؛ بل يتم تحديد تنسيقها الحقيقي بواسطة رقم سحري في بدايتها. على سبيل المثال الأمر. ملف COM في DR DOS 6.0 هو في الواقع بتنسيق قابل للتنفيذ في نظام DOS ، وهو ما يشير إلى أن أول بايتين هما MZ (4Dh 5Ah)، الأحرف الأولى من اسم Mark Zbikowski .

البرامج الكبيرة

[عدل]

في نظام التشغيل DOS ، لا يتم توفير إدارة الذاكرة لملفات COM بواسطة المحمل أو بيئة التنفيذ. الذاكرة كلها متاحة ببساطة لملف COM. بعد التنفيذ، يتم تشغيل أمر نظام التشغيل COMMAND. تم إعادة تحميل COM . ونتيجة لذلك، يحتمل أن يكون ملف COM إما بسيطًا للغاية، باستخدام مقطع واحد للذاكرة، أو معقدًا بشكل تعسفي، حيث يوفر نظام إدارة الذاكرة الخاص به. مثال على النوع المعقد هو الأمر COMMAND.COM، وهو غلاف نظام التشغيل DOS. الذي يوفر أداة تحميل لتحميل برامج COM أو EXE الأخرى. في . في نظام COM، يمكن تحميل وتشغيل البرامج الأكبر حجمًا (حتى سعة الذاكرة المتاحة)، لكن مُحمّل النظام يفترض وجود جميع التعليمات البرمجية والبيانات في الجزء الأول من الذاكرة، ولا يوفر تنسيق ملف COM أي آلية تنظيمية أخرى. أما البرامج التي تتجاوز حجم الذاكرة المتاحة، فيمكن التعامل معها أو أجزاء البيانات الكبيرة، عن طريق الارتباط الديناميكي ، إذا تم تضمين الكود اللازم في الملف. برنامج COM. تتمثل ميزة استخدام تنسيق .COM بدلاً من تنسيق .EXE في أن الصورة الثنائية الناتجة تكون عادةً أصغر حجمًا وأكثر سهولة في البرمجة باستخدام المجمع . بمجرد توفر المجمِّعين والمرتبطين بالقدرة الكافية، لم يعد من المفيد استخدام . تنسيق COM للبرامج المعقدة.

دعم المنصة

[عدل]

لا يزال تنسيق COM. قابلاً للتنفيذ على العديد من أنظمة ويندوز ان تي الحديثة، ولكنه يعمل ضمن نظام فرعي يحاكيMS-DOSيُعرف باسم NTVDM، وهو غير متوفر في الإصدارات ذات 64 بت. بالإضافة إلى ذلك، يمكن تشغيل ملفات COM. على محاكيات DOS مثل DOSBox، على أي منصة تدعمها هذه المحاكيات.

استخدم لأسباب التوافق

[عدل]

تستخدم أنظمة التشغيل المستندة إلى ويندوز ان تي امتداد .com لعدد محدود من الأوامر التي تم ترحيلها من حقبة MS-DOS، على الرغم من أن هذه الأوامر تُنفذ حاليًا كملفات .إي اكس إي صيغه ملفات فعلية. يتعرف نظام التشغيل على رأس ملف .إ] اكس إي ويقوم بتنفيذه بشكل صحيح بغض النظر عن امتداده .com الذي يعتبر غير دقيق تقنيًا. (في الواقع، يمكن إعادة تسمية أي ملف .exe إلى .com وسيظل قابلاً للتنفيذ بشكل سليم.) يضمن استخدام ملحقات .com الأصلية لهذه الأوامر التوافق مع ملفات الدفعات القديمة لنظام التشغيل DOS والتي قد تشير إليها باستخدام أسماء الملفات الأصلية الكاملة. هذه الأوامر هي CHCP و DISKCOMP و DISKCOPY و FORMAT و MODE و MORE و TREE .[2]

تفضيل التنفيذ

[عدل]

في نظام التشغيل DOS، عند وجود ملف COM. وملف EXE. بنفس الاسم في نفس الدليل وعدم تحديد الامتداد عند التشغيل، تُعطى الأولوية لملف COM. للتنفيذ. على سبيل المثال، إذا احتوى دليل مُدرج في مسار النظام على الملفين foo.com و foo.exe، فإن الأمر foo سيؤدي إلى تنفيذ foo.com.

C:\>foo

يمكن للمستخدم الذي يرغب في تشغيل الملف foo.exe أن يستخدم اسم الملف الكامل بشكل صريح كما يلي:

C:\>foo.exe

استغل مؤلفو الفيروساتوغيرهم من المبرمجين الضارين هذا السلوك الافتراضي في نظام Windows، حيث يفضل تشغيل ملفات .com على ملفات .exe بنفس الاسم عند عدم تحديد الامتداد. لقد استخدموا أسماء ملفات خبيثة مثل "notepad.com" لبرامجهم الضارة، على أمل أنه إذا تم وضع هذا الملف في نفس المجلد الذي يحتوي على ملف محرر النصوص الشرعي "المفكرة ويندوز"، فإن أمرًا أو ملف دُفعة (batch file) قد يقوم عن طريق الخطأ بتشغيل برنامجهم الضار بدلاً من محرر النصوص الأصلي.

مرة أخرى، قد تحتوي ملفات .com هذه في الواقع على ملف قابل للتنفيذ بتنسيق .exe.

في أنظمة وندوز ان تي ومشتقاتها (مثل ويندوز 2000 , ويندوز اكس بي ، ويندوز فستا، و ويندوز 7 )، يُستخدم متغير البيئة PATHEXT لتحديد ترتيب تفضيلات (والامتدادات المقبولة) استدعاء الملفات التنفيذية دون الحاجة إلى تحديد الامتداد الكامل من سطر الأوامر. الجدير بالذكر أن القيمة الافتراضية لهذا المتغير لا تزال تضع امتداد الملفات .com قبل امتداد الملفات .exe في ترتيب البحث والتنفيذ. يُشبه هذا السلوك إلى حد كبير ميزة كانت موجودة سابقًا في معالجات سطر الأوامر المُوسّعة من شركة JP Software، وهي 4DOS و 4OS2 و 4NT.

الاستخدام الضار لامتداد .com

[عدل]

.سعى بعض مؤلفي فيروسات الحاسوب إلى استغلال نقص معرفة مستخدمي الحاسوب المعاصرين المحتمل بامتداد الملف .com والتنسيق الثنائي المرتبط به، مقابل معرفتهم الأرجح باسم نطاق الإنترنت .com.تم إرسال رسائل بريد إلكتروني تحتوي على أسماء مرفقات مشابهة لـ "www.example.com.exe" . كان من المتوقع أن يبدأ المستخدمون مايكروسفت ويندوز غير الحذرين عند النقر على مثل هذا المرفق في تصفح موقع يسمى http://www.example.com/ ، ولكن بدلاً من ذلك يقومون بتشغيل ملف الأوامر الثنائية المرفق المسمى www.example ، مما يمنحه الإذن الكامل للقيام بجهازهم بكل ما كان في ذهن مؤلفه.[بحاجة لمصدر][ بحاجة لمصدر ]

لا يحمل تنسيق ملف COM. أي طبيعة خبيثة في حد ذاته؛ بل إن الأمر يتعلق باستغلال التشابه العرضي في الأسماء بين ملفات أوامر .com ومواقع الويب التجارية .com.

ملحوظات

[عدل]
المرجع "NB_ORG" المذكور في <references> غير مستخدم في نص الصفحة.

مراجع

[عدل]

.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}

روابط خارجية

[عدل]

قالب:Executables

  1. ^ وصلة مرجع: https://github.com/file/file/blob/FILE5_37/magic/Magdir/msdos#L556. تاريخ النشر: 19 أبريل 2019. الوصول: 27 يوليو 2019.
  2. ^ "Windows Commands". Microsoft. 26 أبريل 2023. مؤرشف من الأصل في 2025-05-29.