دستور NM

دستور nm با تعدادی از نسخه‌های بعد یونیکس و سیستم عامل‌های مشابه شد. nm برای بررسی فایلهای باینری (از جمله کتابخانه‌ها، آبجکت فایل‌های کامپایل شده، آبجکت فایل‌های به اشتراک گذاشته شده و فایل‌های اجرایی مستقل) و مشاهده محتوای ان فایل‌ها یا متا دیتاهایی که در ان فایل‌ها ذخیره شده‌است (به‌طور خاص جدول نمادها) استفاده می‌شود. خروجی از nm انواع مختلف نماد را تشخیص می‌دهد. به عنوان مثال، آن را بین یک تابع که از طریق یک ماژول شیء و یک تابع که توسط آن مورد نیاز است، تمایز می‌دهد. Nm به عنوان یک کمک برای اشکال زدایی، برای حل مشکلات ناشی از درگیری‌های نام در C ++، و همچنین اعتبار بخشی به بخش‌های دیگر ابزار tool chain استفاده می‌شود.

پروژه GNU اجرای nm را به عنوان بخشی از بسته GNU Binutils پیاده‌سازی کرده‌است.

 مثال برای خروجی nm 
/*
 * File name: test.c
 * For C code compile with:
 * gcc -c test.c
 *
 * For C++ code compile with:
 * g++ -c test.cpp
 */

int global_var;
int global_var_init = 26;

static int static_var;
static int static_var_init = 25;

static int static_function()
{
return 0;
}

int global_function(int p)
{
static int local_static_var;
static int local_static_var_init=5;

local_static_var = p;

return local_static_var_init + local_static_var;
}

int global_function2()
{
int x;
int y;
return x+y;
}
#ifdef __cplusplus
extern "C"
#endif
void non_mangled_function()
{
// I do nothing
}

int main(void)
{
global_var = 1;
static_var = 2;

return 0;
}اگر کد قبلی با کامپایلر gcc C کامپایل شده باشد، خروجی دستور nm مانند پایین است:# nm test.o
0000000a T global_function
00000025 T global_function2
00000004 C global_var
00000000 D global_var_init
00000004 b local_static_var.۱۲۵۵
00000008 d local_static_var_init.۱۲۵۶
0000003b T main
00000036 T non_mangled_function
00000000 t static_function
00000000 b static_var
00000004 d static_var_init هنگامی که کامپایلر C ++ استفاده می‌شود، خروجی متفاوت است: # nm test.o
0000000a T _Z15global_functioni
00000025 T _Z16global_function2v
00000004 b _ZL10static_var
00000000 t _ZL15static_functionv
00000004 d _ZL15static_var_init
00000008 b _ZZ15global_functioniE16local_static_var
00000008 d _ZZ15global_functioniE21local_static_var_init
  U __gxx_personality_v0
00000000 B global_var
00000000 D global_var_init
0000003b T main
00000036 T non_mangled_functionتفاوت بین خروجی نیز نشان می‌دهد که یک مثال از حل مشکل نام منجلینگ با استفاده از extern C در کد C ++ است.

 همچنین نگاه کنید 
 ابج دمپ

 پیوند به بیرون 


رده:ابزارهای اس یو اس ۲۰۰۸ یونیکس
رده:ابزارهای برنامه‌نویسی یونیکس
رده:صفحات با ترجمه بازبینی‌نشده
رده:مقاله‌های دارای کد نمونه به زبان سی