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 |
פקודות בסביבת Unix ובמערכות הפעלה דמויות יוניקס | ||
---|---|---|
מערכת קבצים | ||
תהליכים | ||
סביבת משתמש | ||
עיבוד טקסט | ||
מעטפת | ||
רשת | ||
חיפוש | ||
שונות |