标签: symbol-table

当elf文件包含调试信息时,Eclipse会抱怨"没有加载符号表"

我正在研究STM32处理器.使用readelf -w,可以从我的elf文件中提取大量的调试信息.输出的一小部分如下所示:

 <1><3faf>: Abbrev Number: 30 (DW_TAG_variable)
    <3fb0>   DW_AT_name        : (indirect string, offset: 0x24e): ITM_RxBuffer 
    <3fb4>   DW_AT_decl_file   : 19 
    <3fb5>   DW_AT_decl_line   : 1742   
    <3fb7>   DW_AT_type        : <0x3f48>   
    <3fbb>   DW_AT_external    : 1  
    <3fbc>   DW_AT_declaration : 1
Run Code Online (Sandbox Code Playgroud)

dwarfdump还确认调试信息在elf文件中可用.

我使用以下软件包:Eclipse Juno arm-2011.03/bin/arm-none-eabi-gdb OpenOCD和JTAG密钥

生成elf文件后,将其刻录到STM32处理器中,然后在Eclipse中启动调试会话.JTAG可以启动和停止,所以我猜OpenOCD deamon很好.由于"未加载符号表"这一事实,无法设置断点.一两件事我注意到的是其中"可变/ breakponts /注册/模块"窗口,显示加载的elf文件的模块选项卡包含followiing细节:类型:可执行符号:未加载符号文件:BuildResult.elf

在调试配置 - >启动选项卡中,选中/取消选中"加载图像/加载符号"没有区别.我想知道eclipse如何将elf文件包含符号信息加载到调试过程中?

任何建议,提示,非常感谢.

eclipse gdb stm32 symbol-table

5
推荐指数
1
解决办法
1194
查看次数

打印ELF文件的符号表

我有一个使用mmap系统调用的程序:

map_start = mmap(0, fd_stat.st_size, PROT_READ | PROT_WRITE , MAP_SHARED, fd, 0)
Run Code Online (Sandbox Code Playgroud)

和一个标题变量:

header = (Elf32_Ehdr *) map_start;
Run Code Online (Sandbox Code Playgroud)

如何访问符号表并使用标头变量打印其整个内容?

c mmap elf symbol-table

5
推荐指数
1
解决办法
8335
查看次数

C++代码的符号表是否包含函数名称和类名?

我一直在搜索有关C++代码的符号表是否包含函数名称和类名的各种帖子.我可以在帖子上找到的东西是它取决于编译器的类型,

如果它在一次通过中编译代码,则它不需要在符号表中存储类名和子程序名

但如果它是一个多遍编译器,它可以添加有关它遇到的类及其子例程的信息,以便它可以进行参数类型检查并发出有意义的错误消息.

我无法理解它是否真的依赖于编译器?我假设编译器(对于C++代码)会在表中放置带有类名的函数名,无论它是单通道还是多通道编译器.它如何依赖传球?我没有这么棒的知识.此外,任何人都可以显示一个简单的C++类的示例符号表,它会是什么样的(带有类名的函数名)?

c++ compiler-construction function class-names symbol-table

5
推荐指数
1
解决办法
3784
查看次数

符号表是存储 AST(声明)节点还是“符号”是不同的对象/类?

我有一些关于 AST/符号表关系的事情我不明白。

我目前有一个在 C# 中实现的 AST,它具有用于变量声明的节点(这些包含有关名称、类型、源位置、可能的常量值作为表达式节点等的信息)。

现在我想填充一个符号表(在我的 AST 上使用访问者模式)但我的问题是:“符号”是新类,例如 VariableSymbol 还是符号表直接存储来自 AST 的 VariableDeclarationNode?

如果符号是新类,那么谁来存储常量变量、VariableDeclarationNode 或 VariableSymbol 或其他地方的计算表达式值?

(我看过一些解释器示例,它们将所有变量值(包括常量)存储在一个附加的哈希表中,但我正在研究源到源编译器而不是解释器,所以我不确定您将评估的常量存储在何处这种情况。对不起,我知道这些问题有点多)

c# compiler-construction compilation abstract-syntax-tree symbol-table

5
推荐指数
1
解决办法
1129
查看次数

如何在不禁用严格的“引用”的情况下重命名 perl __ANON__ sub?

我在这里找到了在 Perl 中重命名匿名订阅者的解决方案。它涉及临时修改符号表以插入所需的名称。此解决方案使用要替换的硬编码符号表名称。我的问题是我想在运行时动态选择符号表名称。像这样的东西:

   $pkg = 'MyPkg::ModA::';
   $name = 'subname';
   ...
   no strict 'refs';
   local *{"${pkg}__ANON__"} = "$name [anon]";
   strict refs;
Run Code Online (Sandbox Code Playgroud)

使其工作的唯一方法是禁用严格引用。如果它们未被禁用,脚本将失败并显示以下消息:

不能使用字符串 ("MyPkg::ModA::__ANON__") 作为符号引用,而在 /path/to/source/File.pm 行 xx 处使用“严格引用”

请注意,可以使用等效语句

   local ${$pkg}{__ANON__} = "$name [anon]";
Run Code Online (Sandbox Code Playgroud)

带有类似的错误消息:

不能使用字符串 ("MyPkg::ModA::") 作为 HASH 引用,而在 /path/to/source/File.pm 行 xx 处使用“严格引用”

是否可以在不禁用严格引用的情况下做同样的事情?

TMI/DNR:
如果您感兴趣,这里有一个完整的示例。具有讽刺意味的是,我的解决方案使用匿名子重命名给定的匿名子。

ModA.pm

package MyPkg::ModA;

use strict;
use warnings;
use MyPkg::Util;

# Create a new instance.
sub new
{
   my ($type, $class, $self);

   # allow for both ModA::new and $moda->new
   $type = shift; …
Run Code Online (Sandbox Code Playgroud)

perl reference strict anonymous-function symbol-table

5
推荐指数
1
解决办法
105
查看次数

GDB Objective-c调试(无符号表)

我有一个可执行文件,我正在使用gdb进行调试.这是我第一次使用gdb,请耐心等待.

我想在函数中设置断点,我知道使用类转储的函数的名称.现在它不会让我为该函数添加断点,因为它说没有符号表.我尝试添加符号表但它仍然抱怨没有加载符号表.

那么,无论如何我可以在这种方法中设置一个断点吗?这是一个客观的c方法,而不是c(如果这有所不同).我需要做的就是检查这个方法的论点.

debugging gdb objective-c symbol-table

4
推荐指数
1
解决办法
2865
查看次数

C中的符号表

我目前正在开发一种执行模式匹配的静态分析工具.我正在使用Flex生成词法分析器,我编写了代码来管理符号表.我对C不太熟悉,所以我决定将符号表实现为线性链表.

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

struct symtab {
   int id;
   char *name;
   int type;
   struct symtab *next;
};

enum types {
   KEYWORD = 1,
   CONSTANT,
   IDENTIFIER,
   OPERATOR,
   DELIMITER,
   WHITESPACE
};

struct symtab *last_entry(struct symtab *start)
{
   struct symtab *p;
   p = start;
   while(p -> next != NULL) {
      p = p -> next;
   }
   return p;
}

void add_entry(char* name, int type, struct symtab *start)
{
   struct symtab *new;
   new = last_entry(start);
   int id; …
Run Code Online (Sandbox Code Playgroud)

c linux symbol-table

4
推荐指数
1
解决办法
7117
查看次数

为什么剥离的二进制文件在反汇编的文件中仍然可以包含库调用信息?

测试平台为32位Linux。

我编译ac程序时没有去除符号信息,并使用objdump反汇编elf可执行文件。

这是结果的一部分。

804831c:  e8 8c fe ff ff     call 8048360 <printf@plt>
Run Code Online (Sandbox Code Playgroud)

如果我使用:

strip binary 
Run Code Online (Sandbox Code Playgroud)

删除符号信息并使用 objdump 再次反汇编 elf 可执行文件,我仍然可以看到如下结果:

804831c:  e8 8c fe ff ff     call 8048360 <printf@plt>
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

在我剥离了所有符号信息后,像 objdump 这样的反汇编工具如何知道某些库函数的名称?

谢谢你!

linux linker compilation strip symbol-table

4
推荐指数
1
解决办法
2121
查看次数

GDB - 如何处理“无符号表”

我有一个想要检查的应用程序,但没有源代码来重建它并创建符号表,如下所示( ) gcc -g my_app.c

当我调用时,info locals出现以下错误“没有可用的符号表信息

当我使用 Eclipse 时,即使我没有库的源代码,它也可以将当前函数的参数解析为arg0、arg1...argN,如果我没记错的话,还可以解析对象的成员。

有没有办法生成一个自定义/通用/默认符号表,满足 GDB 的要求并允许我查看局部变量和参数的值?

c gdb symbols debug-symbols symbol-table

4
推荐指数
1
解决办法
3708
查看次数

如何解释elf符号表部分的st_info字段

手册有这样的内容:

st_info   This  member  specifies  the  symbol's   type   and   binding
             attributes:

             STT_NOTYPE  The symbol's type is not defined.

             STT_OBJECT  The symbol is associated with a data object.

             STT_FUNC    The symbol is associated with a function or other
                         executable code.

             STT_SECTION The symbol is associated with a section.   Symbol
                         table  entries  of  this type exist primarily for
                         relocation and normally have STB_LOCAL bindings.

             STT_FILE    By convention, the symbol's name gives  the  name
                         of  the  source  file  associated with the …
Run Code Online (Sandbox Code Playgroud)

elf symbol-table

4
推荐指数
1
解决办法
2669
查看次数