| NM(1) | GNU Development Tools | NM(1) |
نام (NAME)
nm - فهرست کردن نمادها از فایلهای شیء
خلاصه دستور (SYNOPSIS)
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...]
توضیحات (DESCRIPTION)
ابزار GNU nm نمادهای موجود در فایلهای شیء objfile... را فهرست میکند. اگر هیچ فایل شیئی به عنوان آرگومان مشخص نشود، nm فایل a.out را پیشفرض در نظر میگیرد.
برای هر نماد، nm موارد زیر را نمایش میدهد:
- مقدار نماد، در مبنای عددیِ انتخابشده توسط گزینهها (به زیر مراجعه کنید)، یا به صورت پیشفرض در مبنای شانزده (هگزادسیمال).
- نوع نماد. حداقل انواع زیر استفاده میشوند؛ انواع دیگری نیز بسته به قالب فایل شیء ممکن است وجود داشته باشند. اگر حرف کوچک باشد، نماد معمولاً محلی (local) است؛ اگر حرف بزرگ باشد، نماد سراسری یا خارجی (global/external) است. با این حال چند نماد با حروف کوچک وجود دارند که برای نمادهای سراسری خاص نمایش داده میشوند ("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 extension) برای مجموعه استاندارد انواع نماد ELF است. این مورد نشاندهنده نمادی است که در صورت ارجاع توسط یک بازنشانی (relocation)، به آدرس آن ارزیابی نمیشود، بلکه باید در زمان اجرا فراخوانی گردد. سپس اجرای زمان اجرا مقداری را برمیگرداند که در بازنشانی استفاده خواهد شد.
نکته - نمایش واقعی نمادها برای نمادهای غیرمستقیم گنو توسط گزینه خط فرمان --ifunc-chars کنترل میشود. اگر این گزینه مشخص شده باشد، اولین نویسه در رشته برای نمادهای تابع غیرمستقیم سراسری استفاده خواهد شد. اگر رشته حاوی نویسه دومی باشد، از آن برای نمادهای تابع غیرمستقیم محلی استفاده میشود.
- "I"
- نماد یک ارجاع غیرمستقیم به نماد دیگری است.
- "N"
- نماد یک نماد اشکالزدایی (debugging symbol) است.
- "n"
- نماد در یک بخش فقطخواندنیِ غیردادهای، غیرکدی و غیراشکالزدایی قرار دارد.
- "p"
- نماد در یک بخش بازپیچی پشته (stack unwind) قرار دارد.
- "R"
- "r"
- نماد در بخش دادههای فقطخواندنی (read-only data) قرار دارد.
- "S"
- "s"
- نماد در یک بخش دادههای مقداردهینشده یا مقداردهیشده با صفر برای اشیاء کوچک قرار دارد.
- "T"
- "t"
- نماد در بخش متن یا کد (text) قرار دارد.
- "U"
- نماد تعریفنشده (undefined) است.
- "u"
- نماد یک نماد سراسری یکتا (unique global symbol) است. این یک گسترش گنو بر مجموعه استاندارد پیوندهای نماد ELF است. برای چنین نمادی، پیونددهنده پویا اطمینان حاصل خواهد کرد که در کل فرایند فقط یک نماد با این نام و نوع مورد استفاده قرار میگیرد.
- "V"
- "v"
- نماد یک شیء ضعیف (weak object) است. هنگامی که یک نمادِ تعریفشدهٔ ضعیف با یک نمادِ تعریفشدهٔ عادی پیوند داده میشود، نماد عادی بدون هیچ خطایی استفاده میشود. هنگامی که یک نمادِ تعریفنشدهٔ ضعیف پیوند داده شود و نماد تعریف نشده باشد، مقدار نماد ضعیف بدون هیچ خطایی برابر صفر میشود. در برخی سیستمها، حرف بزرگ نشان میدهد که یک مقدار پیشفرض مشخص شده است.
- "W"
- "w"
- نماد یک نماد ضعیف است که بهطور خاص به عنوان نماد شیء ضعیف برچسبگذاری نشده است. هنگامی که یک نمادِ تعریفشدهٔ ضعیف با یک نمادِ تعریفشدهٔ عادی پیوند داده میشود، نماد عادی بدون هیچ خطایی استفاده میشود. هنگامی که یک نمادِ تعریفنشدهٔ ضعیف پیوند داده شود و نماد تعریف نشده باشد، مقدار نماد بدون بروز خطا به شیوهای وابسته به سیستم تعیین میگردد. در برخی سیستمها، حرف بزرگ نشان میدهد که یک مقدار پیشفرض مشخص شده است.
- "-"
- نماد یک نماد stabs در یک فایل شیء a.out است. در این حالت، مقادیر بعدی چاپشده شامل فیلد other در stabs، فیلد desc در stabs، و نوع stab هستند. نمادهای stabs برای نگهداری اطلاعات اشکالزدایی به کار میروند.
- "?"
- نوع نماد ناشناخته یا مختص قالب فایل شیء است.
- •
- نام نماد. اگر نمادی دارای اطلاعات نسخه مرتبط باشد، اطلاعات نسخه نیز نمایش داده میشود. اگر نماد دارای نسخه، تعریفنشده یا از پیونددهنده پنهان باشد، رشته نسخه بهصورت پسوندی برای نام نماد نمایش مییابد که پیش از آن یک نویسه @ قرار دارد؛ برای مثال foo@VER_1. اگر نسخه، نسخه پیشفرض مورد استفاده برای حل ارجاعات بدون نسخه به این نماد باشد، بهصورت پسوندی نمایش داده میشود که پیش از آن دو نویسه @ قرار دارد؛ برای مثال foo@@VER_2.
گزینهها (OPTIONS)
شکلهای کوتاه و بلند گزینهها که در اینجا بهصورت جایگزین نشان داده شدهاند، معادل یکدیگرند.
- -A
- -o
- --print-file-name
- نام فایل ورودی (یا عضو آرشیو) را که نماد در آن پیدا شده است، پیش از هر نماد درج میکند، به جای اینکه فایل ورودی تنها یک بار، پیش از تمام نمادهایش مشخص شود.
- -a
- --debug-syms
- نمایش تمامی نمادها، حتی نمادهای ویژهٔ اشکالزدا؛ بهطور معمول این نمادها فهرست نمیشوند.
- -B
- همانند --format=bsd (جهت سازگاری با nm در MIPS).
- -C
- --demangle[=style]
- رمزگشایی (demangle) نامهای سطح پایین نمادها به نامهای سطح کاربر. این گزینه علاوه بر حذف هرگونه زیرخط ابتدایی اضافهشده توسط سیستم، نام توابع C++ را خوانا میکند. کامپایلرهای مختلف شیوههای متفاوتی برای دستکاری نام دارند. آرگومان اختیاری شیوه رمزگشایی را میتوان برای انتخاب شیوه مناسب برای کامپایلر شما به کار برد.
- --no-demangle
- نامهای سطح پایین نمادها رمزگشایی نشوند. این حالت پیشفرض است.
- --recurse-limit
- --no-recurse-limit
- --recursion-limit
- --no-recursion-limit
- محدودیت
میزان
بازگشت
انجامشده
هنگام
رمزگشایی
رشتهها را
فعال یا
غیرفعال
میکند. از
آنجا که
قالبهای
دستکاری
نام امکان
سطوح
بازگشت
نامحدود را
میدهند،
این امکان
وجود دارد
که
رشتههایی
ایجاد شوند
که
رمزگشایی
آنها تمام
فضای پشتهٔ
موجود در
ماشین
میزبان را
مصرف کرده و
باعث بروز
خطای حافظه
شود. این
محدودیت با
محدود کردن
بازگشت به
۲۰۴۸ سطح
تودرتو،
تلاش
میکند از
رخ دادن این
اتفاق
جلوگیری
کند.
حالت پیشفرض فعال بودن این محدودیت است، اما غیرفعال کردن آن ممکن است برای رمزگشایی نامهای واقعاً پیچیده لازم باشد. با این حال توجه داشته باشید که در صورت غیرفعال بودن محدودیت بازگشت، اتمام فضای پشته محتمل است و هرگونه گزارش باگ در مورد چنین رویدادی رد خواهد شد.
- -D
- --dynamic
- نمایش نمادهای پویا به جای نمادهای معمولی. این گزینه تنها برای اشیاء پویا، مانند انواع خاصی از کتابخانههای اشتراکی، معنادار است.
- -f format
- --format=format
- استفاده از قالب خروجی format که میتواند "bsd"، "sysv"، "posix" یا "just-symbols" باشد. پیشفرض "bsd" است. تنها نویسه اول format دارای اهمیت است؛ این نویسه میتواند بزرگ یا کوچک باشد.
- -g
- --extern-only
- تنها نمادهای خارجی نمایش داده شوند.
- -h
- --help
- نمایش خلاصهای از گزینههای nm و خروج.
- --ifunc-chars=CHARS
- هنگام نمایش نمادهای توابع غیرمستقیم گنو، دستور nm بهطور پیشفرض از نویسهٔ "i" هم برای توابع غیرمستقیم محلی و هم سراسری استفاده میکند. گزینهٔ --ifunc-chars به کاربر اجازه میدهد رشتهای حاوی یک یا دو نویسه را مشخص کند. نویسه نخست برای نمادهای تابع غیرمستقیم سراسری استفاده خواهد شد و نویسه دوم، در صورت وجود، برای نمادهای تابع غیرمستقیم محلی به کار میرود.
- -j
- همانند --format=just-symbols.
- -l
- --line-numbers
- برای هر نماد، با استفاده از اطلاعات اشکالزدایی تلاش شود نام فایل و شماره خط پیدا شود. برای یک نماد تعریفشده، به دنبال شماره خطِ آدرسِ نماد میگردد. برای یک نماد تعریفنشده، به دنبال شماره خطِ مدخل بازنشانی مرتبط با نماد میگردد. اگر اطلاعات شماره خط پیدا شود، پس از دیگر اطلاعات نماد چاپ میشود.
- --inlines
- هنگامی که گزینهٔ -l فعال باشد، اگر آدرس متعلق به تابعی باشد که درونخطی شده است، این گزینه سبب میشود اطلاعات کد مبدأ برای تمامی حوزههای دربرگیرنده تا نخستین تابعِ غیردرونخطی نیز چاپ شود. برای مثال، اگر "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 باشد. حالت پیشفرض nm در AIX با -X 32 مطابقت دارد که توسط GNU nm پشتیبانی نمیشود.
- --plugin name
- بارگذاری
افزونهای
به نام name
جهت افزودن
پشتیبانی
از انواع
هدفهای
اضافی. این
گزینه فقط
در صورتی در
دسترس است
که زنجیره
ابزار با
پشتیبانی
از افزونه
ساخته شده
باشد.
اگر --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=bfdname
- مشخص کردن یک قالب کد شیء به غیر از قالب پیشفرض سیستم شما.
- @file
- خواندن
گزینههای
خط فرمان از
file.
گزینههای
خواندهشده
در محل
گزینهٔ
اصلی @file
جایگزین
میشوند.
اگر file وجود
نداشته
باشد یا
قابل
خواندن
نباشد، با
این گزینه
به صورت
تحتاللفظی
رفتار شده و
حذف نخواهد
شد.
گزینهها در file با نویسهٔ فاصله جدا میشوند. یک نویسهٔ فاصله میتواند با قرار دادن کل گزینه درون علامت نقلقول تکی یا جفتی، در یک گزینه گنجانده شود. هر نویسهای (شامل بکاسلش) را میتوان با پیشوند کردن یک بکاسلش به آن نویسه در گزینه گنجاند. خود file میتواند شامل گزینههای @file دیگری نیز باشد؛ هر یک از این گزینهها بهصورت بازگشتی پردازش خواهند شد.
همچنین ببینید (SEE ALSO)
ar(1)، objdump(1)، ranlib(1) و مدخلهای Info برای binutils.
حق نشر (COPYRIGHT)
Copyright (c) 1991-2026 Free Software Foundation, Inc.
اجازهٔ کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نسخه ۱.۳ یا هر نسخهٔ متأخرتر منتشرشده توسط بنیاد نرمافزار آزاد اعطا میشود؛ بدون بخشهای ناوردا، بدون متون روی جلد، و بدون متون پشت جلد. نسخهای از این مجوز در بخشی با عنوان «GNU Free Documentation License» گنجانده شده است.
| 2026-08-03 | binutils-2.47 |