table of contents
| NM(1) | أدوات تطوير جنو | 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 كأساس عددي لطباعة قيم الرموز. يجب أن يكون 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-2025 لمؤسسة البرمجيات الحرة، المحدودة.
يُمنح الإذن بنسخ وتوزيع و/أو تعديل هذا المستند بموجب شروط رخصة جنو للوثائق الحرة (GNU Free Documentation License)، الإصدار 1.3 أو أي إصدار لاحق تنشره مؤسسة البرمجيات الحرة؛ مع عدم وجود أقسام ثابتة، وبدون نصوص غلاف أمامي، وبدون نصوص غلاف خلفي. نُسخة من الرخصة مضمنة في القسم المعنون "GNU Free Documentation License".
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 10 مارس 2026 | binutils-2.45.0 |