nm

מתוך ויקיפדיה, האנציקלופדיה החופשית

nm הוא פקודה בחלק מגרסאות יוניקס ומערכות הפעלה דומות אשר בודקת קבצים בינאריים (בפרט ספריות, קובצי אובייקט וקובצי הרצה) ומציגה את תוכנם או מטא-דאטה המאוחסן בהם כדוגמת טבלת סמלים (symbol table). הפלט מאפשר לבחון את סוגי הסמלים השונים - למשל פונקציות הממומשות בקבצים ופונקציות הדרושות עבורם. nm משמש כאמצעי עזר בניפוי שגיאות כדי לפתור בעיות הנובעות מהתנגשות שמות וכדי לבדוק חלקים ב-Toolchain.

פלט[עריכת קוד מקור | עריכה]

nm מציג עבור כל סימול פרטים שונים למשל:

  • A - הערך של הסימול ידוע ולא ישתנה בקישור נוסף
  • U - הסימול אינו מוגדר
  • N הסימול משמש לניפוי שגיאות
  • B - הסימול מופיע בחטיבת BSS, לרוב סימולים לא מאותחלים או מאותחלים באפס
  • T - הסימול מופיע בחטיבת ה-text (חטיבת code)

דוגמה[עריכת קוד מקור | עריכה]

קוד דוגמה הפלט של nm
(הודר במהדר C של gcc)
הפלט של nm
(הודר במהדר C++ של gcc)
/*
 * 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;
}
# 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.1255
00000008 d local_static_var_init.1256
0000003b T main
00000036 T non_mangled_function
00000000 t static_function
00000000 b static_var
00000004 d static_var_init
# 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