NM(1) GNU Development Tools 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...].SH "توضیحات (DESCRIPTION)" ابزار GNU nm نمادها را از فایل‌های هدف objfile... فهرست می‌کند. اگر هیچ فایل هدفی به عنوان آرگومان مشخص نشده باشد، nm فایل a.out را در نظر می‌گیرد.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

گزینه‌ها در file با نویسه‌های فاصله خالی (whitespace) از یکدیگر جدا می‌شوند. یک نویسه فاصله خالی می‌تواند با قرار دادن کل گزینه درون علامت نقل‌قول تکی یا دوتایی، درون گزینه گنجانده شود. هر نویسه‌ای (از جمله بک‌اسلش) می‌تواند با افزودن یک بک‌اسلش به‌عنوان پیشوند به آن نویسه گنجانده شود. خود file ممکن است شامل گزینه‌های @file بیشتری باشد؛ هرکدام از این گزینه‌ها به‌صورت بازگشتی پردازش خواهند شد..SH "همچنین ببینید (SEE ALSO)" ar(1)، objdump(1)، ranlib(1) و مدخل‌های Info برای binutils.

کپی‌رایت (c) 1991-2025 متعلق به Free Software Foundation, Inc.

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

2026-01-23 binutils-2.45.1