NM(1) GNU Development Tools NM(1)

ppc64le-elf-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...]

ابزار nm گنو نمادهای موجود در فایل‌های شیء objfile... را فهرست می‌کند. اگر هیچ فایل شیئی به عنوان آرگومان مشخص نشده باشد، nm فایل پیش‌فرض a.out را در نظر می‌گیرد.

برای هر نماد، nm موارد زیر را نمایش می‌دهد:

  • مقدار نماد بر مبنای عددی انتخاب‌شده با گزینه‌ها (به زیر مراجعه کنید)، یا به صورت پیش‌فرض در مبنای شانزده‌شانزدهی (هگزادسیمال).
  • نوع نماد. دست‌کم انواع زیر استفاده می‌شوند؛ انواع دیگری نیز ممکن است بر اساس قالب فایل شیء وجود داشته باشند. اگر با حروف کوچک باشد، نماد معمولاً محلی (local) است؛ اگر با حروف بزرگ باشد، نماد سراسری یا خارجی (global) است. با این حال، چند نماد با حروف کوچک برای نمادهای سراسری ویژه نمایش داده می‌شوند ("u"، "v" و "w").
"A"
مقدار نماد مطلق (absolute) است و با پیوندزدن (linking) بیشتر تغییر نخواهد کرد.
"B"
"b"
نماد در بخش داده‌ای BSS قرار دارد. این بخش معمولاً شامل داده‌های مقداردهی‌نشده یا مقداردهی‌شده با صفر است، هرچند رفتار دقیق آن به سیستم وابسته است.
"C"
"c"
نماد مشترک (common) است. نمادهای مشترک داده‌های مقداردهی‌نشده هستند. هنگام پیوندزدن، ممکن است چندین نماد مشترک با یک نام ظاهر شوند. اگر نماد در جای دیگری تعریف شده باشد، نمادهای مشترک به عنوان ارجاعات تعریف‌نشده در نظر گرفته می‌شوند. کاراکتر کوچک c زمانی استفاده می‌شود که نماد در یک بخش ویژه برای متغیرهای مشترک کوچک باشد.
"D"
"d"
نماد در بخش داده‌های مقداردهی‌شده (initialized data) قرار دارد.
"G"
"g"
نماد در بخش داده‌های مقداردهی‌شده برای اشیاء کوچک قرار دارد. برخی از قالب‌های فایل شیء دسترسی کارآمدتری را به اشیاء داده‌ای کوچک فراهم می‌کنند، مانند یک متغیر سراسری از نوع int در مقایسه با یک آرایه بزرگ سراسری.
"i"
برای فایل‌های قالب PE، این نشان می‌دهد که نماد در بخشی اختصاصی برای پیاده‌سازی DLLها قرار دارد.

برای فایل‌های قالب ELF، این نشان می‌دهد که نماد یک تابع غیرمستقیم (indirect function) است. این یک افزونه گنو بر مجموعه استاندارد انواع نمادهای ELF است. این نماد نشان‌دهنده تابعی است که در صورت ارجاع توسط یک بازنشانی (relocation)، به آدرس خود ارزیابی نمی‌شود، بلکه باید در زمان اجرا فراخوانی گردد. اجرای زمان اجرا مقداری را برمی‌گرداند که باید در بازنشانی استفاده شود.

توجه - نمادهای واقعی نمایش‌داده‌شده برای نمادهای غیرمستقیم گنو توسط گزینه خط فرمان --ifunc-chars کنترل می‌شوند. اگر این گزینه ارائه شده باشد، کاراکتر اول رشته برای نمادهای توابع غیرمستقیم سراسری استفاده خواهد شد. اگر رشته دارای کاراکتر دومی باشد، از آن برای نمادهای توابع غیرمستقیم محلی استفاده می‌شود.

"I"
نماد یک ارجاع غیرمستقیم به نمادی دیگر است.
"N"
نماد یک نماد اشکال‌زدایی (debugging) است.
"n"
نماد در یک بخش فقط‌خواندنی غیرداده‌ای، غیرکدی و غیراشکال‌زدایی قرار دارد.
"p"
نماد در یک بخش بازپیچی پشته (stack unwind) قرار دارد.
"R"
"r"
نماد در یک بخش داده‌ای فقط‌خواندنی قرار دارد.
"S"
"s"
نماد در یک بخش داده‌ای مقداردهی‌نشده یا مقداردهی‌شده با صفر برای اشیاء کوچک قرار دارد.
"T"
"t"
نماد در بخش متن یا کد (text/code) قرار دارد.
"U"
نماد تعریف‌نشده (undefined) است.
"u"
نماد یک نماد سراسری یکتا (unique global) است. این یک افزونه گنو بر مجموعه‌پیوندهای استاندارد نمادهای ELF است. برای چنین نمادی، پیونددهنده پویا تضمین می‌کند که در کل فرآیند فقط یک نماد با این نام و نوع در حال استفاده باشد.
"V"
"v"
نماد یک شیء ضعیف (weak object) است. هنگامی که یک نماد تعریف‌شده ضعیف با یک نماد تعریف‌شده عادی پیوند داده می‌شود، نماد تعریف‌شده عادی بدون هیچ خطایی استفاده می‌شود. هنگامی که یک نماد تعریف‌نشده ضعیف پیوند داده شده و نماد تعریف نشده باشد، مقدار نماد ضعیف بدون خطا برابر با صفر می‌شود. در برخی سیستم‌ها، حروف بزرگ نشان‌دهنده مشخص شدن یک مقدار پیش‌فرض است.
"W"
"w"
نماد یک نماد ضعیف است که به‌طور خاص به عنوان شیء ضعیف برچسب‌گذاری نشده است. هنگامی که یک نماد تعریف‌شده ضعیف با یک نماد تعریف‌شده عادی پیوند داده می‌شود، نماد تعریف‌شده عادی بدون خطا استفاده می‌شود. هنگامی که یک نماد تعریف‌نشده ضعیف پیوند داده شود و نماد تعریف نشده باشد، مقدار نماد به شیوه‌ای وابسته به سیستم و بدون خطا تعیین می‌گردد. در برخی سیستم‌ها، حروف بزرگ نشان‌دهنده مشخص شدن یک مقدار پیش‌فرض است.
"-"
نماد یک نماد stabs در فایل شیء a.out است. در این حالت، مقادیر بعدی چاپ‌شده فیلد stabs other، فیلد stabs desc و نوع stab هستند. نمادهای stabs برای نگهداری اطلاعات اشکال‌زدایی استفاده می‌شوند.
"?"
نوع نماد ناشناخته است، یا به قالب فایل شیء اختصاص دارد.
•
نام نماد. اگر نماد اطلاعات نسخه مرتبط با خود داشته باشد، اطلاعات نسخه نیز نمایش داده می‌شود. اگر نماد نسخه‌دار تعریف‌نشده باشد یا از دید پیونددهنده پنهان باشد، رشته نسخه به عنوان پسوند نام نماد و پس از یک نویسه @ نمایش داده می‌شود؛ به عنوان مثال foo@VER_1. اگر نسخه، نسخه پیش‌فرض برای حل ارجاعات بدون نسخه به نماد باشد، به عنوان پسوند پس از دو نویسه @ نمایش داده می‌شود؛ به عنوان مثال foo@@VER_2.

شکل‌های کوتاه و بلند گزینه‌ها که در اینجا به عنوان جایگزین یکدیگر آورده شده‌اند، معادل هستند.

درج نام فایل ورودی (یا عضو آرشیو) که نماد در آن یافت شده است قبل از هر نماد، به‌جای مشخص کردن نام فایل ورودی تنها یک بار پیش از نمایش تمام نمادهای آن.
نمایش تمامی نمادها، حتی نمادهای ویژه اشکال‌زدایی؛ این نمادها در حالت عادی فهرست نمی‌شوند.
مشابه --format=bsd (جهت سازگاری با nm در سیستم MIPS).
رمزگشایی یا نام‌گشایی (demangle) نام نمادهای سطح پایین به نام‌های سطح کاربر. علاوه بر حذف خط زیرین ابتدایی که توسط سیستم افزوده شده، این کار نام توابع ++C را خوانا می‌سازد. کامپایلرهای مختلف شیوه‌های نام‌گذاری (mangling) متفاوتی دارند. آرگومان اختیاری سبک نام‌گشایی می‌تواند برای انتخاب سبک مناسب با کامپایلر شما استفاده شود.
نام‌گشایی نکردن نام‌های سطح پایین نمادها. این حالت پیش‌فرض است.
فعال یا غیرفعال کردن محدودیت بر میزان بازگشت (recursion) انجام‌شده هنگام نام‌گشایی رشته‌ها. از آنجا که قالب‌های درهم‌سازی نام‌ها اجازه سطوح بازگشت نامحدود را می‌دهند، این امکان وجود دارد که رشته‌هایی ایجاد شوند که رمزگشایی آنها تمام فضای پشته در دسترس در ماشین میزبان را مصرف کرده و موجب خطای حافظه شود. این محدودیت با تحدید بازگشت به ۲۰۴۸ سطح تودرتو تلاش می‌کند از این رخداد جلوگیری کند.

حالت پیش‌فرض فعال بودن این محدودیت است، اما غیرفعال کردن آن ممکن است برای نام‌گشایی نام‌های واقعاً پیچیده لازم باشد. با این حال توجه داشته باشید که اگر محدودیت بازگشت غیرفعال شود، احتمال اتمام فضای پشته وجود دارد و هرگونه گزارش باگ در مورد چنین رویدادی رد خواهد شد.

نمایش نمادهای پویا به‌جای نمادهای عادی. این گزینه فقط برای اشیاء پویا، مانند انواع خاصی از کتابخانه‌های اشتراکی معنا دارد.
استفاده از قالب خروجی format که می‌تواند "bsd"، "sysv"، "posix" یا "just-symbols" باشد. مقدار پیش‌فرض "bsd" است. فقط اولین کاراکتر format موثر است؛ که می‌تواند حروف کوچک یا بزرگ باشد.
نمایش نمادهای خارجی (external) به‌تنهایی.
نمایش خلاصه گزینه‌های nm و خروج.
هنگام نمایش نمادهای تابع غیرمستقیم گنو (GNU ifunc)، nm به صورت پیش‌فرض از کاراکتر "i" هم برای توابع غیرمستقیم محلی و هم سراسری استفاده می‌کند. گزینه --ifunc-chars به کاربر امکان می‌دهد رشته‌ای حاوی یک یا دو کاراکتر را تعیین کند. اولین کاراکتر برای نمادهای تابع غیرمستقیم سراسری استفاده می‌شود و دومین کاراکتر (در صورت وجود) برای نمادهای تابع غیرمستقیم محلی به کار می‌رود.
مشابه --format=just-symbols.
برای هر نماد، استفاده از اطلاعات اشکال‌زدایی برای یافتن نام فایل و شماره خط. برای نمادهای تعریف‌شده، جستجوی شماره خط آدرس نماد. برای نمادهای تعریف‌نشده، جستجوی شماره خط مدخل بازنشانی که به نماد ارجاع می‌دهد. اگر اطلاعات شماره خط یافت شود، پس از سایر اطلاعات نماد چاپ می‌شود.
هنگامی که گزینه -l فعال باشد، اگر آدرس متعلق به تابعی باشد که درون‌خطی (inlined) شده است، این گزینه باعث می‌شود اطلاعات منبع برای تمام دامنه‌های دربرگیرنده تا اولین تابع غیردرون‌خطی نیز چاپ شود. به عنوان مثال، اگر "main" تابع "callee1" را درون‌خطی کرده باشد و آن هم "callee2" را درون‌خطی کرده باشد و آدرس از "callee2" باشد، اطلاعات منبع برای "callee1" و "main" نیز چاپ خواهند شد.
مرتب‌سازی عددی نمادها بر اساس آدرس آنها، به‌جای مرتب‌سازی الفبایی بر اساس نام‌هایشان.
مرتب نکردن نمادها به هر ترتیبی؛ چاپ آنها به همان ترتیبی که خوانده شده‌اند.
استفاده از قالب خروجی استاندارد POSIX.2 به‌جای قالب پیش‌فرض. معادل با -f posix.
معکوس کردن ترتیب مرتب‌سازی (چه عددی و چه الفبایی)؛ قرار گرفتن آخرین مورد در ابتدا.
چاپ هم مقدار و هم اندازه نمادهای تعریف‌شده برای سبک خروجی "bsd". این گزینه برای قالب‌های شیئی که اندازه نمادها را ثبت نمی‌کنند هیچ اثری ندارد، مگر اینکه --size-sort نیز استفاده شود که در این حالت اندازه‌ای محاسبه‌شده نمایش داده می‌شود.
هنگام فهرست کردن نمادها از اعضای آرشیو، گنجاندن فهرست (index): نگاشتی (ذخیره‌شده در آرشیو توسط ar یا ranlib) از اینکه کدام ماژول‌ها شامل تعاریف چه نام‌هایی هستند.
استفاده از radix به عنوان مبنای عددی برای چاپ مقادیر نمادها. این مقدار باید d برای ده‌دهی (دسیمال)، o برای هشت‌هشتی (اکتال) یا x برای شانزده‌شانزدهی (هگزادسیمال) باشد.
نمایش نمادهای تعریف‌نشده به‌تنهایی (آنهایی که خارج از هر فایل شیء هستند). به طور پیش‌فرض، هر دو نمادهای تعریف‌شده و تعریف‌نشده نمایش داده می‌شوند.
نمایش نمادهای تعریف‌شده به‌تنهایی برای هر فایل شیء. به طور پیش‌فرض، هر دو نمادهای تعریف‌شده و تعریف‌نشده نمایش داده می‌شوند.
نمایش شماره نسخه nm و خروج.
این گزینه جهت سازگاری با نسخه AIX برنامه nm نادیده گرفته می‌شود. این گزینه یک پارامتر می‌گیرد که باید رشته 32_64 باشد. حالت پیش‌فرض در AIX nm متناظر با -X 32 است که توسط nm گنو پشتیبانی نمی‌شود.
بارگذاری افزونه‌ای با نام name برای افزودن پشتیبانی از انواع مقصدهای اضافی. این گزینه فقط زمانی در دسترس است که زنجیره ابزار با پشتیبانی از افزونه‌ها ساخته شده باشد.

اگر --plugin ارائه نشده باشد اما پشتیبانی از افزونه‌ها فعال باشد، nm روی فایل‌های موجود در ${libdir}/bfd-plugins به ترتیب الفبایی پیمایش می‌کند و اولین افزونه‌ای که مدعی پشتیبانی از شیء مورد نظر شود، استفاده خواهد شد.

لطفاً توجه داشته باشید که این دایرکتوری جستجوی افزونه، همان دایرکتوری مورد استفاده توسط گزینه -plugin در ld نیست. برای اینکه nm از افزونه پیونددهنده استفاده کند، باید به دایرکتوری ${libdir}/bfd-plugins کپی شود. برای کامپایل‌های مبتنی بر GCC، افزونه پیونددهنده liblto_plugin.so.0.0.0 نام دارد. برای کامپایل‌های مبتنی بر Clang، نام آن LLVMgold.so است. افزونه GCC همیشه با نسخه‌های قبلی سازگار است، بنابراین کپی کردن جدیدترین نسخه کافی خواهد بود.

مرتب‌سازی نمادها بر اساس اندازه. برای اشیاء ELF، اندازه نمادها از ELF خوانده می‌شود؛ برای سایر انواع اشیاء، اندازه نمادها به عنوان تفاضل بین مقدار نماد و مقدار نماد با مقدار بالاتر بعدی محاسبه می‌شود. اگر از قالب خروجی "bsd" استفاده شود، به‌جای مقدار، اندازه نماد چاپ می‌شود و برای چاپ هم اندازه و هم مقدار باید از گزینه -S استفاده شود.

توجه - در صورت فعال بودن گزینه --undefined-only، این گزینه کار نمی‌کند زیرا نمادهای تعریف‌نشده اندازه‌ای ندارند.

نمایش نمادهایی که معنای خاص وابسته به معماری مقصد دارند. این نمادها معمولاً توسط مقصد برای برخی پردازش‌های ویژه استفاده می‌شوند و معمولاً در فهرست‌های عادی نمادها مفید نیستند. به عنوان مثال در معماری‌های ARM، این گزینه از نمادهای نگاشت که برای علامت‌گذاری گذار بین کد ARM، کد THUMB و داده‌ها استفاده می‌شوند صرف‌نظر می‌کند.
گنجاندن نمادهای مصنوعی (synthetic) در خروجی. این نمادها نمادهای ویژه‌ای هستند که توسط پیونددهنده برای اهداف گوناگون ایجاد شده‌اند. این نمادها به طور پیش‌فرض نمایش داده نمی‌شوند زیرا بخشی از کد منبع اصلی باینری نیستند.
کنترل نمایش نویسه‌های چندبایتی کدگذاری‌شده با UTF-8 در رشته‌ها. حالت پیش‌فرض (--unicode=default) هیچ برخورد ویژه‌ای با آنها ندارد. گزینه --unicode=locale توالی را در زبان محلی جاری نمایش می‌دهد که ممکن است از آنها پشتیبانی کند یا نکند. گزینه‌های --unicode=hex و --unicode=invalid آنها را به صورت توالی بایت‌های هگزادسیمال محصور در قلاب‌ها یا آکولادها نمایش می‌دهند.

گزینه --unicode=escape آنها را به صورت توالی‌های گریز (\uxxxx) نمایش می‌دهد و گزینه --unicode=highlight آنها را به صورت توالی‌های گریز که به رنگ قرمز برجسته شده‌اند (در صورت پشتیبانی دستگاه خروجی) نمایش می‌دهد. رنگ‌آمیزی به منظور جلب توجه به وجود توالی‌های یونیکد در جاهایی که ممکن است انتظار نرود طراحی شده است.

عدم نمایش نمادهای ضعیف (weak).
فعال یا غیرفعال کردن نمایش اطلاعات نسخه نمادها. رشته نسخه به عنوان یک پسوند برای نام نماد و پس از یک نویسه @ نمایش داده می‌شود؛ به عنوان مثال foo@VER_1. اگر نسخه، نسخه پیش‌فرضی باشد که هنگام حل ارجاعات بدون نسخه به نماد استفاده می‌شود، پس از دو نویسه @ نمایش می‌یابد؛ به عنوان مثال foo@@VER_2. به طور پیش‌فرض، اطلاعات نسخه نماد نمایش داده می‌شود.
مشخص کردن قالب کدهای شیء غیر از قالب پیش‌فرض سیستم شما.
@file
خواندن گزینه‌های خط فرمان از file. گزینه‌های خوانده‌شده به جای گزینه اصلی @file درج می‌شوند. اگر file وجود نداشته باشد یا خوانده نشود، گزینه به صورت تحت‌اللفظی تلقی شده و حذف نمی‌شود.

گزینه‌ها در file با نویسه‌های فاصله سفید از هم جدا می‌شوند. یک نویسه فاصله سفید می‌تواند با محصور کردن کل گزینه در گیومه تکی یا دوتایی درون گزینه گنجانده شود. هر کاراکتری (شامل بک‌اسلش) می‌تواند با پیشوند کردن کاراکتر مورد نظر با یک بک‌اسلش گنجانده شود. فایل file خود ممکن است شامل گزینه‌های بیشتری به شکل @file باشد؛ چنین گزینه‌هایی به صورت بازگشتی پردازش خواهند شد.

ar(1)، objdump(1)، ranlib(1) و مدخل‌های Info برای binutils.

حق نشر © ۱۹۹۱-۲۰۲۵ بنیاد نرم‌افزار آزاد (Free Software Foundation, Inc.)

مجوز کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز اسناد آزاد گنو (GNU Free Documentation License)، نسخه ۱.۳ یا هر نسخه بعدی منتشرشده توسط بنیاد نرم‌افزار آزاد اعطا می‌شود؛ بدون بخش‌های تغییرناپذیر، بدون متون روی جلد، و بدون متون پشت جلد. یک نسخه از مجوز در بخش تحت عنوان «GNU Free Documentation License» گنجانده شده است.

2026-01-23 binutils-2.45.1