symbol table

1 链接器是被符号表表所驱动的,换句话说,是被部分符号表所驱动的

这部分的符号表单独放在.dynsym段中,strip elf的符号表的时候,这个段是不会被strip的,因为动态链接的时候会用到。

.dynsym中有的符号在.symtab中都有。

2 .symtab符号表

2.1 .symtab符号表的创建

是编译器在分析阶段,即词法分析、语法分析和语义分析阶段生成的符号表。

2.2 gdb视角

当没有.debugxxx symbol table的时候,在gdb看来这个.symtab是minimal symbol。

虽然它提供的调试信息不多,但是,至少它可以帮助定位一个函数的起始位置,帮助设置断点。因为提供的信息有限,源码调试是肯定不行的,但是可以进行汇编级别的跟踪。

gdb读取.symtab之后,会按照address排序,这样由address到symbol就很方便了,另外,还会创建一个 hash table,这样用symbol找address就方便了。

3 dwarf debug info

gdb在读取了.symtab之后,如果有dwarf debug info的话,还会去读取该信息,然后创建file symbol table,这样的话,就可以进行源码调试了。

时间: 2024-10-09 11:37:05

symbol table的相关文章

Symbol Table(符号表)

一.定义 符号表是一种存储键值对的数据结构并且支持两种操作:将新的键值对插入符号表中(insert):根据给定的键值查找对应的值(search). 二.API 1.无序符号表 几个设计决策: A.泛型 在设计方法时没有指定处理对象,而是使用了泛型. 并且将键(Key)和值(Value)区分开来. B.重复键的处理 规则: 每个值(Value)都只对应一个键(Key)(即不允许存在重复的键). 当用例代码向表中存入的键值对和表中的已有的键(以及关联的值)冲突时,新的值替代旧的值. C.Null 键

Eclipse下用NDK调试C/C++代码碰到 No Symbol table is loaded

被这个问题卡了我3天,终于搞清楚了原因.网上对这个问题也有各种解决方案:有的说需要增加编译参数-g:有的说写个test方法,先调用一下:有的说修改gdb.setup文件,确保是unix回车符.基本都属于胡扯的.先说说环境:Windows 7.Eclipse Juno 4.2.2.CDT 8.1.2.ADT 23.NDK r10d.Python 3.4.不要提什么cygwin,NDK r10d已经不需要它了,改用Python了.搞定这些环境真不易啊,还得FQ才行. 错误描述:整个编译运行没问题的前

解决GDB调试时“ No symbol table is loaded. Use the "file" command”问题

1.解决的办法 : GDB调试时使用list命令时出现 “No symbol table is loaded. Use the "file" command”提示,其实是C编译器的选项CFLAGS没有设置好,gcc -o进行编译时不用不用写“-g”选项,只需在makefile文件开头写上“CFLAGS = -g”在编译时编译器就会自动使用CFLAGS的设置了. 2.探索的过程: 我的makefile文件是这样编写的: “make clear”.“make main”.“gdb main

objdump的使用方法和 symbol table的每列的含义

一.objdump的用法 objdump命令的man手册 objdump     [-a] [-b bfname|     --target=bfdname] [-C] [--debugging]     [-d] [-D]     [--disassemble-zeroes]     [-EB|-EL|--endian={big|little}] [-f]     [-h] [-i|--info]     [-j section | --section=section]     [-l] [-

eclipse+minGW 调试ffmpeg错误:No symbol table is loaded. Use the "file" command.

转载地址:http://www.blogjava.net/fancydeepin/archive/2012/11/19/391520.html 数据结构第二篇:  eclipse SDK 安装和配置 GDB 为 C/C++ 开发环境提供 debug 调试背景:  debug 的时候出现 Error while launching command: gdb.exe --version 异常原因:  没有安装 gdb 调试工具.听说,最新的 MinGW 已集成 GDB 调试工具,本人安装的 MinG

A C compiler that parses this code will contain at least the following symbol table entries

Consider the following program written in C: // Declare an external function extern double bar(double x); // Define a public function double foo(int count) { double sum = 0.0; // Sum all the values bar(1) to bar(count) for (int i = 1; i <= count; i++

No symbol table is loaded. Use the &quot;file&quot; command.

No symbol table is loaded.  Use the "file" command. gdb 1. 首先使用gcc   -g    .c文件   -o  可执行文件名  进行编译,再使用gdb + 可执行文件名进入gdb环境,进行调试. 命令如下如: (1)   gcc -g test.c -o test (2)   gdb  test (3)  list等gdb命令: 2.出现问题的可能性: (1)当编译时,未加 - g 选项,则进入gdb环境中执行命令会出现No

符号表实现(Symbol Table Implementations)

符号表的实现有很多方式,下面介绍其中的几种. 乱序(未排序)数组实现 这种情况,不需要改变数组,操作就在这个数组上执行.在最坏的情况下插入,搜索,删除时间复杂度为O(n). 有序(已排序)数组实现 这种情况我们就有了排序好的关键字和相应的值. 通过关键字在数组中存储 keys[i]为第i位大的key(关键字) values[i]就是第i位大key对应的值 由于元素是按顺序存储在数组中的,找某个元素就可以用简单的二分搜索.最差的情况,搜索时间复杂度为O(log n),插入和删除时间复杂度为O(n)

msg=&quot;No symbol table is loaded. Use the \&quot;file\&quot; command.&quot;

用Eclipse调试的时候,下断点的unresolved breakpoint,报的是标题上的错误.原因显然是没有加载符号表,需要用gdb的file命令加载符号表. (gdb) file [exec_file] 这样用以上命令就可以了. reference: http://stackoverflow.com/questions/9245685/gdb-no-symbol-table-is-loaded http://www.cypress.com/?app=forum&id=167&rID