做个笔记:
linux 下查看符号表工具:nm
操作如下:
linux的nm命令可以一个文件中的符号列表,列出以上代码Gcc -c编译出的a.o(a.a a.so)可以通过nm命令来查看其中的符号信息:
其中左边第一列是符号的地址值,对应源码可以看出递增的规律。第二列是该符号的类型,第三列是符号的名称(比如函数名,变量名):
符号类型:介绍几个最常用的,其他的如果遇到了直接Google:
B --- 全局非初始化数据段(BBS段)的符号,其值表示该符号在bss段中的偏移,如g1
b --- 全局static的符号,如g3
r --- const型只读的变量(readonly)
N --- debug用的符号
T --- 位于代码区的符号,比如本文件里的函数main foo
t --- 位于代码区的符号,一般是static函数
U --- 位于本文件外的调用函数或变量符号,比如系统的printf()函数
这里要注意的是,本人使用g++编译的,所以是按c++的支持重载的函数风格编译的,可以看到所有函数均带了前缀和后缀,前缀代表属于类的名字,后缀代表参数列表的类型缩写,因为重载必须是区分参数类型,这里也可以看出,为什么返回值不同的函数不是重载,因为符号表里没有返回值的记录。
例如两个overload函数的后缀分别是f和i代表一个是float型一个是int型(上面还有v ->void型)。
windows 下查看符号表工具:dumpbin
操作如下:
看到处符号表
C:\Program Files\Microsoft Visual Studio\VC98\Lib>dumpbin /symbols msimg32.lib
Microsoft (R) COFF/PE Dumper Version 8.00.50727.762
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file msimg32.lib
File Type: LIBRARY
COFF SYMBOL TABLE
000 00131F62 ABS notype Static | @comp.id
001 00000000 SECT2 notype External | __IMPORT_DESCRIPTOR_MSIMG32
002 C0000040 SECT2 notype Section | .idata$2
003 00000000 SECT3 notype Static | .idata$6
004 C0000040 UNDEF notype Section | .idata$4
005 C0000040 UNDEF notype Section | .idata$5
006 00000000 UNDEF notype External | __NULL_IMPORT_DESCRIPTOR
007 00000000 UNDEF notype External | MSIMG32_NULL_THUNK_DATA
String Table Size = 0x52 bytes
COFF SYMBOL TABLE
000 00131F62 ABS notype Static | @comp.id
001 00000000 SECT2 notype External | __NULL_IMPORT_DESCRIPTOR
String Table Size = 0x1D bytes
COFF SYMBOL TABLE
000 00131F62 ABS notype Static | @comp.id
001 00000000 SECT2 notype External | MSIMG32_NULL_THUNK_DATA
String Table Size = 0x1D bytes
Summary
AE .debug$S
14 .idata$2
14 .idata$3
4 .idata$4
4 .idata$5
C .idata$6
看到处函数
C:\Program Files\Microsoft Visual Studio\VC98\Lib>dumpbin /exports msimg32.lib
Microsoft (R) COFF/PE Dumper Version 8.00.50727.762
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file msimg32.lib
File Type: LIBRARY
Exports
ordinal name
_AlphaBlend@44
_GradientFill@24
_TransparentBlt@44
Summary
AE .debug$S
14 .idata$2
14 .idata$3
4 .idata$4
4 .idata$5
C .idata$6
原文地址:http://blog.csdn.net/yangyihongyangjiying/article/details/44740045