问题标签 [symbol-tables]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1295 浏览

perl - Perl:如何遍历符号表以查找 Foo::Bar 的所有已加载子类?

我有一个模块,它为它所属的包定义异常。异常是用 声明的Exception::Class::Nested

出于讨论的目的,假设该模块名为Foo::Bar::Exception,并且它定义的所有异常都是该模块的第一级子类(例如Foo::Bar::Exception:DoNotDoThat)。我关心的所有异常都在这个模块文件中定义;我对任何其他模块对我所做的任何额外的子类化都不感兴趣。

对于我的import方法,我想构建一个所有正在定义的异常的列表,并且我想通过以某种方式遍历符号表来做到这一点,而不是保持一个可能与定义不同步并且具有需要人工维护。

那么,如何Foo::Bar::Exception->import遍历Foo::Bar::Exception的符号表,找到模块中已经声明的所有异常(一级子类)呢?这只是我感兴趣的活动加载符号表;没有文件系统搜索等。

谢谢!

[附录]

由于我所有的异常子类名称都以Exceptionor结尾Error,这看起来越来越接近我想要的:

一些括号是不必要的,但我添加它是为了清楚地了解数组上下文。

0 投票
1 回答
803 浏览

c++ - 调试已发布软件的 c++ 核心文件

我正在尝试找到一种方法来调试从我的软件的已发布版本(使用 gcc 编译的 c++ 代码)发送给我的核心文件。理想情况下,我希望能够部署发布版本,并保留调试版本以用于调试,所以我有符号表等。

我的问题是(据我了解)调试和发布版本不能保证是相同的 - 所以当我启动 gdb 并指向我的调试可执行文件时,来自该领域的核心文件可能看起来像垃圾。

有没有办法在不影响我发布的软件的大小或性能的情况下解决这个问题(这就是问题所在)?这是一个大型应用程序,调试版本的性能可能无法为客户所接受。我已经查看了构建一次(调试)的建议,然后剥离符号表并将其作为发布构建发布,但我会看到这种方法的性能受到影响,不是吗?

是否有人对他们已经尝试或当前使用的解决此问题的方法有建议?谢谢!

0 投票
1 回答
100 浏览

windows - Visual Studio 生成的二进制文件真的没有任何符号吗?

所有输出都相同:

这是我经过几次实验后发现的objdump,这是真的吗?

如果是这样的话,我想进一步说明一下:真的所有 Windows 下的二进制文件都没有符号吗?

0 投票
1 回答
58 浏览

symbol-tables - SymtabAPI 不会隐式更改二进制文件

我正在使用 DyninstAPI(即 SymtabAPI 组件)来重写二进制文件中的符号表。我正在使用以下方法来做到这一点:

该方法成功返回,我检查了我的错误代码,甚至重新读取了已成功替换的数据部分。问题是原始二进制文件没有用新的原始.data部分重写,原始原始.data部分仍然存在。

我已经浏览了手册以查看是否有某种提交功能,但没有记录,示例中也没有提到任何类型的提交功能。 编辑:我刚刚通读了Region该类的一些源代码,看起来我基本上正在做patchData的事情(如果那是我应该使用的方法)。

建议?

编程手册可从http://www.paradyn.org/html/manuals.html获得。

PS 希望更有信誉的用户可以为我添加DyninstAPI标签SymtabAPI

0 投票
1 回答
431 浏览

perl - 当它们在另一个包中被调用时,如何最好地覆盖/包装像 sysread 这样的核心函数

我正在开发一个用 Perl 编写的相当复杂的应用程序。我对这种语言相当有经验,但我只是对此感到困惑。

我正在使用一个模块 Foo,它使用 sysread 和 syswrite 对我传递给其构造函数的文件句柄(在本例中为双向套接字)进行各种操作。

我想做以下事情:从我正在编写的另一个模块(我们称之为 Bar),我想更改 sysread/write 的行为方式,仅在从属于 Foo 的方法中调用时

Sysread 等人需要在其他任何地方正常工作。可以安全地假设 sysread 的使用在 Foo 中不会改变。

我想这样做的原因是我需要跟踪从上述文件句柄读取/写入的字节数。在这一点上,这似乎是我可以获得此信息的唯一方法 - 基本上保存来自 sysread/write 的返回值。

只要质量好,我使用 CPAN 中的任何东西都没有问题。


更新:我为我的具体问题找到了更好的解决方案,并在此处发布了代码:

https://github.com/Hercynium/Tie-Handle-CountChars

它似乎在我的应用程序中运行良好,但在我对其进行更彻底的测试之前,我不会将它发布到 CPAN,并编写了一些实际的单元测试 :)

0 投票
1 回答
6576 浏览

linux-kernel - 确定剥离的 Linux 内核映像的加载地址和入口点

我的 x86 Linux 上有一个用于嵌入式系统 (mipsel) 的交叉编译工具链。我知道如何为它构建一个自定义内核(让我们称之为“vmlinux”)以及如何通过

为了进一步处理,我还需要图像的加载地址和入口点。scripts/mksysmap剥离之前,通过或更明确地确定它们是没有问题的

然后我可以通过

现在的挑战是,有时我不自己构建内核,而是在通过objcopy剥离其符号获得一个预构建的内核。谁能告诉我该怎么做?我对内核构建和工具链的使用不是很精通。nm和objdump都不喜欢剥离的图像,说

0 投票
3 回答
706 浏览

ruby - Ruby中的符号表设计与实现

我正在用 Ruby 构建一个词法分析器,并且即将开始在符号表中收集和存储符号。我的主要问题是关于符号的设计以及它是否应该是静态表(意味着所有数据都将保存在类级别)或者它是否应该基于实例。

选项 1:类级数据结构

使用这种方案,SymbolTable 类具有某种“静态”功能,这意味着我实际上并没有创建 SymbolTable 的实例,唯一存在的对象是类级别的对象。

(假设这SymbolTableEntry是一个有效的对象,即使我没有在这里定义它)

前任:

选项 2:实例级数据结构

使用这种方案,我实际上需要实例化 SymbolTable 类的实例,以便将值添加到符号表中。

我很想听听关于您将使用或更喜欢使用哪种设计的任何和所有意见,以及对 ruby​​ 代码的一般评论。

谢谢

0 投票
4 回答
2748 浏览

java - Java 方法的内部标识是什么?

众所周知,在Java中,方法名不足以区分不同的方法。

我认为(可能是错误的),要区分一个方法,它需要以下信息:

更远,

  • 如何在内部更有效地识别方法?
  • 我听说过“方法ID”。是不是意味着上面的三元组和一个整数之间存在映射关系,所以JVM解析后只使用方法id?
  • 如果是这样,它是否位于符号表中?

谢谢!

0 投票
3 回答
8499 浏览

c - 正在运行的 C 程序可以访问自己的符号表吗?

我有一个 linux C 程序来处理发送到 TCP 套接字(绑定到特定端口)的请求。我希望能够通过对该端口的请求来查询 C 程序的内部状态,但我不想硬编码可以查询哪些全局变量。因此,我希望查询包含全局的字符串名称和 C 代码以在符号表中查找该字符串以找到其地址,然后通过 TCP 套接字将其值发送回。当然,符号表一定不能被剥离。那么 C 程序甚至可以找到自己的符号表,并且是否有一个库接口用于查找给定名称的符号?这是一个使用 gcc 构建的 ELF 可执行 C 程序。

0 投票
1 回答
163 浏览

compiler-construction - 从类型表到符号表的引用

我们都知道从符号表到类型表总是有一个引用,但也可能发生反例。意味着可以将类型表引用返回到符号表吗?如果是,请举例说明。