C中的符号表

来源:互联网 发布:苹果手机端口号 编辑:程序博客网 时间:2024/05/16 14:44

  符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。这些信息一般以表格形式存储于系统中。如常数表、变量名表、数组名表、过程名表、标号表等等,统称为符号表。对于符号表组织、构造和管理方法的好坏会直接影响编译系统的运行效率。


如何查看符号表: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函数的调用约定,如果你是静态链接,只要让函数的调用约定相符就行,如果是冬动态链接,那你可以查一查函数名字修饰符约定,按约定查找函数名即可。