NM(1)

الاسم
nm - يسرد الرموز من ملفات الكائنات

موجز
nm [-A|-o|--print-file-name]
   [-a|--debug-syms]
   [-B|--format=bsd]
   [-C|--demangle[=style]]
   [-D|--dynamic]
   [-fformat|--format=format]
   [-g|--extern-only]
   [-h|--help]
   [--ifunc-chars=CHARS]
   [-j|--format=just-symbols]
   [-l|--line-numbers] [--inlines]
   [-n|-v|--numeric-sort]
   [-P|--portability]
   [-p|--no-sort]
   [-r|--reverse-sort]
   [-S|--print-size]
   [-s|--print-armap]
   [-t radix|--radix=radix]
   [-u|--undefined-only]
   [-U|--defined-only]
   [-V|--version]
   [-W|--no-weak]
   [-X 32_64]
   [--no-demangle]
   [--no-recurse-limit|--recurse-limit]]
   [--plugin name]
   [--size-sort]
   [--special-syms]
   [--synthetic]
   [--target=bfdname]
   [--unicode=method]
   [--with-symbol-versions]
   [--without-symbol-versions]
   [objfile...]

الوصف
يسرد GNU nm الرموز من ملفات الكائنات objfile.... إذا لم تُسرد أي ملفات كائنات كوسائط، يفترض nm الملف a.out.

يعرض nm لكل رمز ما يلي:

•   قيمة الرمز، بالأساس العددي المختار بواسطة الخيارات (انظر أدناه)، أو بالنظام الست عشري مبدئيًا.

•   نوع الرمز. تُستخدم الأنواع التالية على الأقل؛ وتوجد أنواع أخرى أيضًا اعتمادًا على تنسيق ملف الكائن. إذا كان الحرف صغيرًا، فعادةً ما يكون الرمز محليًا؛ وإذا كان كبيرًا، يكون الرمز عامًا (خارجيًا). ومع ذلك، هناك بعض الرموز الصغيرة التي تُعرض لرموز عامة خاصة ("u"، و "v"، و "w").

    "A" قيمة الرمز مطلقة، ولن تُغير بواسطة أي ربط إضافي.

    "B"
    "b" الرمز موجود في قسم بيانات BSS. يحتوي هذا القسم عادةً على بيانات مصفّرة أو غير مهيأة، رغم أن السلوك الدقيق يعتمد على النظام.

    "C"
    "c" الرمز مشترك (common). الرموز المشتركة هي بيانات غير مهيأة. عند الربط، قد تظهر رموز مشتركة متعددة بنفس الاسم. إذا عُرّف الرمز في أي مكان، تُعامل الرموز المشتركة كمراجع غير معرفة. يُستخدم حرف c الصغير عندما يكون الرمز في قسم خاص للمشتركات الصغيرة.

    "D"
    "d" الرمز موجود في قسم البيانات المهيأة.

    "G"
    "g" الرمز موجود في قسم بيانات مهيأة للكائنات الصغيرة. تسمح بعض تنسيقات ملفات الكائنات بوصول أكثر كفاءة إلى كائنات البيانات الصغيرة، مثل متغير int عام مقابل مصفوفة عامة كبيرة.

    "i" بالنسبة لملفات تنسيق PE، يشير هذا إلى أن الرمز موجود في قسم خاص بتنفيذ ملفات DLL.

        بالنسبة لملفات تنسيق ELF، يشير هذا إلى أن الرمز دالة غير مباشرة. هذا امتداد GNU لمجموعة أنواع رموز ELF القياسية. إنه يشير إلى رمز لا يؤدي الرجوع إليه بواسطة إعادة التوطين (relocation) إلى عنوانه، بل يجب استدعاؤه بدلاً من ذلك وقت التشغيل. سيعيد التنفيذ وقت التشغيل القيمة التي ستُستخدم في إعادة التوطين.

        ملاحظة - يُتحكم في عرض الرموز الفعلي لرموز GNU غير المباشرة بواسطة خيار سطر الأوامر --ifunc-chars. إذا قُدّم هذا الخيار، فسيُستخدم الحرف الأول في السلسلة لرموز الدوال العامة غير المباشرة. وإذا احتوت السلسلة على حرف ثانٍ، فسيُستخدم لرموز الدوال المحلية غير المباشرة.

    "I" الرمز مرجع غير مباشر لرمز آخر.

    "N" الرمز رمز تنقيح.

    "n" الرمز موجود في قسم للقراءة فقط ليس للبيانات ولا للشيفرة ولا للتنقيح.

    "p" الرمز موجود في قسم فك المكدس (stack unwind).

    "R"
    "r" الرمز موجود في قسم بيانات للقراءة فقط.

    "S"
    "s" الرمز موجود في قسم بيانات غير مهيأة أو مصفّرة للكائنات الصغيرة.

    "T"
    "t" الرمز موجود في قسم النص (الشيفرة).

    "U" الرمز غير معرف.

    "u" الرمز رمز عام فريد. هذا امتداد GNU للمجموعة القياسية لارتباطات رموز ELF. بالنسبة لهذا الرمز، سيتأكد الرابط الديناميكي من وجود رمز واحد فقط بهذا الاسم والنوع قيد الاستخدام في العملية برمتها.

    "V"
    "v" الرمز كائن ضعيف. عندما يُربط رمز معرف ضعيف مع رمز معرف عادي، يُستخدم الرمز المعرف العادي دون خطأ. وعندما يُربط رمز ضعيف غير معرف ولا يكون الرمز معرفًا، تصبح قيمة الرمز الضعيف صفرًا دون خطأ. في بعض الأنظمة، يشير الحرف الكبير إلى أنه حُددت قيمة مبدئية.

    "W"
    "w" الرمز رمز ضعيف لم يُوسم تحديدًا كرمز كائن ضعيف. عندما يُربط رمز معرف ضعيف مع رمز معرف عادي، يُستخدم الرمز المعرف العادي دون خطأ. وعندما يُربط رمز ضعيف غير معرف ولا يكون الرمز معرفًا، تُحدد قيمة الرمز بطريقة تعتمد على النظام دون خطأ. في بعض الأنظمة، يشير الحرف الكبير إلى أنه حُددت قيمة مبدئية.

    "-" الرمز رمز stabs في ملف كائن a.out. في هذه الحالة، القيم التالية المطبوعة هي حقل stabs other، وحقل stabs desc، ونوع stab. تُستخدم رموز Stabs للاحتفاظ بمعلومات التنقيح.

    "?" نوع الرمز مجهول، أو خاص بتنسيق ملف الكائن.

•   اسم الرمز. إذا كان الرمز مرتبطًا بمعلومات إصدار، تُعرض معلومات الإصدار أيضًا. إذا كان الرمز ذو الإصدار غير معرف أو مخفيًا عن الرابط، تُعرض سلسلة الإصدار كلاحقة لاسم الرمز، مسبوقة بحرف @. على سبيل المثال foo@VER_1. إذا كان الإصدار هو الإصدار المبدئي الذي سيُستخدم عند حل المراجع غير المزودة بإصدار للرمز، فسيُعرض كلاحقة مسبوقة بحرفي @. على سبيل المثال foo@@VER_2.

الخيارات
الصيغتان الطويلة والقصيرة للخيارات، المعروضة هنا كبدائل، متكافئتان.

-A
-o
--print-file-name
    اسبق كل رمز باسم ملف الإدخال (أو عضو الأرشيف) الذي وُجد فيه، بدلاً من تحديد ملف الإدخال مرة واحدة فقط قبل كل رموزه.

-a
--debug-syms
    اعرض كافة الرموز، حتى الرموز الخاصة بالمنقّح فقط؛ عادةً لا تُسرد هذه الرموز.

-B  نفس --format=bsd (للتوافق مع nm الخاص بـ MIPS).

-C
--demangle[=style]
    فك ترميز (demangle) أسماء الرموز منخفضة المستوى إلى أسماء بمستوى المستخدم. بالإضافة إلى إزالة أي شرطة سفلية بادئة يضيفها النظام، فإن هذا يجعل أسماء دوال C++‎ مقروءة. تختلف أساليب التشفير (mangling) باختلاف المترجمات. يمكن استخدام وسيط أسلوب فك الترميز الاختياري لاختيار أسلوب فك ترميز مناسب لمترجمك.

--no-demangle
    لا تفك ترميز (demangle) أسماء الرموز منخفضة المستوى. هذا هو الوضع المبدئي.

--recurse-limit
--no-recurse-limit
--recursion-limit
--no-recursion-limit
    يمكن أو يعطل حداً لمقدار التكرار المنفذ أثناء فك تشويه السلاسل النصية. بما أن تنسيقات تشويه الأسماء تسمح بمستوى غير محدود من التكرار، فمن الممكن إنشاء سلاسل سيؤدي فك تشفيرها إلى استنفاد مساحة المكدس المتاحة على الجهاز المضيف، مما يتسبب في خطأ في الذاكرة. يحاول هذا الحد منع حدوث ذلك عن طريق تقييد التكرار بـ 2048 مستوى من التداخل.

    المبدئي هو تفعيل هذا الحد، لكن تعطيله قد يكون ضروريًا من أجل حل (demangle) الأسماء المعقدة حقًا. لاحظ مع ذلك أنه إذا عُطل حد العودية، فإن استنفاد المكدس وارد وأي تقارير عن أخطاء بشأن مثل هذا الحدث ستُرفض.

-D
--dynamic
    اعرض الرموز الديناميكية بدلاً من الرموز العادية. يكون هذا ذا معنى فقط للكائنات الديناميكية، مثل أنواع معينة من المكتبات المشتركة.

-f format
--format=التنسيق
    استخدم تنسيق المخرج format، والذي يمكن أن يكون "bsd"، أو "sysv"، أو "posix" أو "just-symbols". التنسيق المبدئي هو "bsd". الحرف الأول فقط من format هو المهم؛ ويمكن أن يكون حرفًا كبيرًا أو صغيرًا.

-g
--extern-only
    اعرض الرموز الخارجية فقط.

-h
--help
    اعرض ملخصًا لخيارات nm ثم اخرج.

--ifunc-chars=CHARS
    عند عرض رموز دوال GNU غير المباشرة، سيستخدم nm مبدئيًا حرف "i" لكل من الدوال غير المباشرة المحلية والعامة. يسمح خيار --ifunc-chars للمستخدم بتحديد سلسلة تحتوي على حرف واحد أو حرفين. سيُستخدم الحرف الأول لرموز الدوال العامة غير المباشرة والحرف الثاني، إن وُجد، لرموز الدوال المحلية غير المباشرة.

j   نفس --format=just-symbols.

-l
--line-numbers
    استخدم معلومات التنقيح لكل رمز لمحاولة العثور على اسم ملف ورقم سطر. بالنسبة للرمز المعرف، ابحث عن رقم سطر عنوان الرمز. بالنسبة للرمز غير المعرف، ابحث عن رقم سطر مدخلة إعادة توطين تشير إلى الرمز. إذا أمكن العثور على معلومات رقم السطر، فاطبعها بعد معلومات الرمز الأخرى.

--inlines
    عندما يكون الخيار -l نشطًا، إذا كان العنوان ينتمي إلى دالة ضمنية (inlined)، فإن هذا الخيار يتسبب في طباعة معلومات المصدر لجميع النطاقات المحيطة وصولاً إلى أول دالة غير ضمنية أيضًا. على سبيل المثال، إذا كانت "main" تتضمن "callee1" ضمنيًا والتي تتضمن "callee2" ضمنيًا، وكان العنوان من "callee2"، فستُطبع معلومات المصدر لـ "callee1" و "main" أيضًا.

-n
-v
--numeric-sort
    فرز الرموز عدديًا حسب عناوينها، بدلاً من فرزها أبجديًا حسب أسمائها.

-p
--no-sort
    لا تفرز الرموز بأي ترتيب؛ اطبعها حسب ترتيب ورودها.

-P
--portability
    استخدم تنسيق المخرج القياسي POSIX.2 بدلاً من التنسيق المبدئي. يعادل -f posix.

-r
--reverse-sort
    اعكس ترتيب الفرز (سواء كان عدديًا أم أبجديًا)؛ اجعل الأخير يأتي أولاً.

-S
--print-size
    اطبع كلاً من القيمة والحجم للرموز المعرفة لأسلوب مخرج "bsd". ليس لهذا الخيار أي تأثير على تنسيقات الكائنات التي لا تسجل أحجام الرموز، ما لم يُستخدم --size-sort أيضًا، وفي هذه الحالة يُعرض الحجم المحسوب.

-s
--print-armap
    عند سرد الرموز من أعضاء الأرشيف، قم بتضمين الفهرس: وهو مخطط (يُخزن في الأرشيف بواسطة ar أو ranlib) يوضح الوحدات التي تحتوي على تعريفات لكل اسم.

-t radix
--radix=radix
    استخدم radix كأساس عددي لطباعة قيم الرموز. يجب أن يكون d للعشري، أو o للثماني، أو x للست عشري.

-u
--undefined-only
    اعرض الرموز غير المعرفة فقط (تلك الخارجية لكل ملف كائن). تُعرض الرموز المعرفة وغير المعرفة معًا مبدئيًا.

-U
--defined-only
    اعرض الرموز المعرفة فقط لكل ملف كائن. تُعرض الرموز المعرفة وغير المعرفة معًا مبدئيًا.

-V
--version
    اعرض رقم إصدار nm ثم اخرج.

-X  يُتجاهل هذا الخيار من أجل التوافق مع نسخة AIX من nm. يأخذ وسيطًا واحدًا يجب أن يكون السلسلة 32_64. يقابل الوضع المبدئي لـ AIX nm الخيار -X 32، وهو غير مدعوم في GNU nm.

--plugin اسم
    تحميل الملحق المسمى name لإضافة دعم لأنواع أهداف إضافية. يتوفر هذا الخيار فقط إذا بُنيت مجموعة الأدوات (toolchain) مع تمكين دعم الملحقات.

    إذا لم يُقدّم --plugin، ولكن دعم الملحقات مفعل، فإن nm يمر عبر الملفات في ${libdir}/bfd-plugins بترتيب أبجدي ويُستخدم أول ملحق يدعي ملكية الكائن المعني.

    يرجى ملاحظة أن دليل البحث عن الملحقات هذا ليس هو الدليل المستخدم بواسطة خيار -plugin الخاص بـ ld. لكي يستخدم nm ملحق الرابط، يجب نسخه إلى دليل ${libdir}/bfd-plugins. بالنسبة لعمليات التجميع المستندة إلى GCC، يسمى ملحق الرابط liblto_plugin.so.0.0.0. أما بالنسبة لعمليات التجميع المستندة إلى Clang، فيسمى LLVMgold.so. ملحق GCC متوافق دائمًا مع الإصدارات السابقة، لذا يكفي نسخ أحدث إصدار فقط.

--size-sort
    فرز الرموز حسب الحجم. بالنسبة لكائنات ELF، تُقرأ أحجام الرموز من ELF، وبالنسبة لأنواع الكائنات الأخرى، تُحسب أحجام الرموز على أنها الفرق بين قيمة الرمز وقيمة الرمز التالي ذي القيمة الأعلى. إذا استُخدم تنسيق مخرج "bsd"، فسيُطبع حجم الرمز بدلاً من القيمة، ويجب استخدام -S لطباعة الحجم والقيمة معًا.

    ملاحظة - لا يعمل هذا الخيار إذا فُعل --undefined-only لأن الرموز غير المعرفة ليس لها حجم.

--special-syms
    اعرض الرموز التي لها معنى خاص محدد للهدف. تُستخدم هذه الرموز عادةً بواسطة الهدف لبعض المعالجة الخاصة ولا تكون مفيدة عادةً عند تضمينها في قوائم الرموز العادية. على سبيل المثال، بالنسبة لأهداف ARM، سيتخطى هذا الخيار رموز التخطيط المستخدمة لتمييز التحولات بين شيفرة ARM، وشيفرة THUMB، والبيانات.

--synthetic
    ضمّن الرموز الاصطناعية في المخرج. هذه رموز خاصة أنشأها الرابط لأغراض مختلفة. لا تُعرض مبدئيًا لأنها ليست جزءًا من الشيفرة المصدرية الأصلية للملف الثنائي.

--unicode=[default|invalid|locale|escape|hex|highlight]
    يتحكم في عرض محارف UTF-8 متعددة البايتات في السلاسل النصية. المبدئي (--unicode=default) هو عدم معاملتها معاملة خاصة. يعرض الخيار --unicode=locale التسلسل في المحلية الحالية، والتي قد تدعمها أو لا. تعرض الخيارات --unicode=hex و --unicode=invalid هذه المحارف كتسلسلات بايتات ست عشرية محاطة بأقواس زاوية أو متعرجة.

    يعرضهم الخيار --unicode=escape كتسلسلات هروب (\uxxxx) ويعرضهم الخيار --unicode=highlight كتسلسلات هروب مبرزة باللون الأحمر (إذا كان جهاز المخرجات يدعم ذلك). يهدف التلوين إلى لفت الانتباه إلى وجود تسلسلات يونيكود حيث قد لا تكون متوقعة.

-W
--no-weak
    لا تعرض الرموز الضعيفة.

--with-symbol-versions
--without-symbol-versions
    يفعل أو يعطل عرض معلومات إصدار الرمز. تُعرض سلسلة الإصدار كلاحقة لاسم الرمز مسبوقة بحرف @. على سبيل المثال foo@VER_1. إذا كان الإصدار هو الإصدار المبدئي الذي سيُستخدم عند حل المراجع غير المزودة بإصدار للرمز، فسيُعرض كلاحقة مسبوقة بحرفي @. على سبيل المثال foo@@VER_2. تُعرض معلومات إصدار الرموز مبدئيًا.

--target=اسم_bfd
    تحديد تنسيق كود كائن (object code) غير التنسيق المبدئي لنظامك.

@الملف
    اقرأ خيارات سطر الأوامر من file. تُدرج الخيارات المقروءة مكان خيار @file الأصلي. إذا كان file غير موجود، أو لا يمكن قراءته، فسيُعامل الخيار حرفيًا ولن يُزال.

    تُفصل الخيارات في file بمسافات فارغة. يمكن تضمين حرف مسافة فارغة في خيار ما عن طريق إحاطة الخيار بالكامل إما بعلامات اقتباس مفردة أو مزدوجة. يمكن تضمين أي حرف (بما في ذلك الشرطة المائلة العكسية) عن طريق سبق الحرف المراد تضمينه بشرطة مائلة عكسية. يمكن لـ file نفسه أن يحتوي على خيارات @file إضافية؛ وتُعالج أي خيارات من هذا القبيل بشكل متكرر (recursively).

انظر أيضًا
ar(1)، و objdump(1)، و ranlib(1)، ومدخلات Info لـ binutils.

حقوق النسخ
حقوق الطبع والنشر (c) لعام 1991-2026 لمؤسسة البرمجيات الحرة، المحدودة.

يُمنح الإذن بنسخ وتوزيع و/أو تعديل هذا المستند بموجب شروط رخصة جنو للوثائق الحرة (GNU Free Documentation License)، الإصدار 1.3 أو أي إصدار لاحق تنشره مؤسسة البرمجيات الحرة؛ مع عدم وجود أقسام ثابتة، وبدون نصوص غلاف أمامي، وبدون نصوص غلاف خلفي. نُسخة من الرخصة مضمنة في القسم المعنون "GNU Free Documentation License".

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.