符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。这些信息一般以表格形式存储于系统中。如常数表、变量名表、数组名表、过程名表、标号表等等,统称为符号表。对于符号表组织、构造和管理方法的好坏会直接影响编译系统的运行效率。
如何查看符号表:http://bbs.csdn.net/topics/330265940
链接库文件的时候,经常会报链接错误,提示某某函数找不到定义
这时候如果想看一下这个库的符号表,确认一下这个库中是不是定义了这个函数(或者是不是定义了函数,但是命名规则不一样),有什么方法?
我记得有个什么命令可以查看二进制代码的符号表的,但是忘了!
如果是在linux下,又有什么方法呢?应该跟windows下是不同的命令吧?
1#
http://sourceware.org/binutils/docs/binutils/nm.html
nm [-a|--debug-syms]
[-g|--extern-only][--plugin name]
[-B] [-C|--demangle[=style]] [-D|--dynamic]
[-S|--print-size] [-s|--print-armap]
[-A|-o|--print-file-name][--special-syms]
[-n|-v|--numeric-sort] [-p|--no-sort]
[-r|--reverse-sort] [--size-sort] [-u|--undefined-only]
[-t radix|--radix=radix] [-P|--portability]
[--target=bfdname] [-fformat|--format=format]
[--defined-only] [-l|--line-numbers] [--no-demangle]
[-V|--version] [-X 32_64] [--help] [objfile...]
2#
nm, objdump
3#
补充一个 readelf
4#
windows下是dumpbin.exe
5#
你如果知道DLL函数的调用约定,如果你是静态链接,只要让函数的调用约定相符就行,如果是冬动态链接,那你可以查一查函数名字修饰符约定,按约定查找函数名即可。