Nm (Unix)
nm命令存在于多数后出版本的Unix及类似的操作系统中。nm被用来检查二进制文件(包括库,编译后的目标模块,共享目标文件,和独立可执行文件)并显示这些文件的内容,或存储在其中的元信息,特别是符号表。来自nm的输出区分各种符号类型。例如,在一个目标文件所提供的函数和它所需要的函数之间是有区别的。nm被用作调试的辅助工具,帮助解决名字冲突和C++名称修饰引起的问题,和验证工具链的其他部分。 GNU计划在GNU Binutils包中提供了一个nm的实现。 nm输出样例下面的例子展示了变量和函数在全局、局部、外部、静态、自动和初始化的不同情况下的不同符号类型。 /*
* 文件名: test.c
* 对于C代码如下编译:
* gcc -c test.c
*
* 文件名:test.cpp
* 对于C++代码如下编译:
* 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
}
#ifdef __cplusplus
}
#endif
int main(void)
{
global_var = 1;
static_var = 2;
return 0;
}
如果上述代码使用了gcc C编译器来编译, $ nm -n test.o
0000000000000000 B global_var
0000000000000000 D global_var_init
0000000000000000 t static_function
0000000000000004 b static_var
0000000000000004 d static_var_init
0000000000000008 b local_static_var.1
0000000000000008 d local_static_var_init.0
000000000000000f T global_function
0000000000000033 T global_function2
0000000000000045 T non_mangled_function
0000000000000050 T main
在使用了C++编译器时,输出是不同的: $nm -n test.o
0000000000000000 B global_var
0000000000000000 D global_var_init
0000000000000000 t _ZL15static_functionv
0000000000000004 b _ZL10static_var
0000000000000004 d _ZL15static_var_init
0000000000000008 b _ZZ15global_functioniE16local_static_var
0000000000000008 d _ZZ15global_functioniE21local_static_var_init
000000000000000f T _Z15global_functioni
0000000000000033 T _Z16global_function2v
0000000000000045 T non_mangled_function
0000000000000050 T main
在二者输出之间的不同还展示了通过在C++代码中使用
参见外部链接 |
Index:
pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve
Portal di Ensiklopedia Dunia