NM(1) GNU Development Tools NM(1)

sh2-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...]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Copyright (c) 1991-2025 Free Software Foundation, Inc.

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

2026-01-23 binutils-2.45.1