问题标签 [symbol-table]

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 投票
0 回答
118 浏览

c - 使用包含正确标头的编译时,带有后缀“$UNIX2003”的符号损坏

我想知道当我的代码运行“系统”函数时调用了哪个符号。

在我的示例代码中,当特别包含标头 stdlib.h 时,该符号称为 _system$UNIX2003,当不包含标头时,(可能)默认符号名为 _system(没有后缀 $UNIX2003)

下图显示了我的实验结果: 在此处输入图像描述 为什么我们有不同的系统符号?无论如何在运行时检测正确的符号(我尝试使用 dlsym,但我需要包含动态库的句柄,但无法弄清楚我是否应该使用 dlopen 加载库)?

编辑:只有在 32 位拱形下编译时,我才会出现这种奇怪的符号修饰。

EDIT2:有人建议我使用隐式函数指针来获取正确符号的地址。但除非我在我的代码中专门调用该函数,否则它将不起作用。否则,我会收到使用未声明的标识符“系统”的编译错误

0 投票
1 回答
68 浏览

linux - 如何从 OS X 上的目标文件中删除单个名称

我正在遵循 OS X 上的一些 Linux 指令,但我被困在一条线上:

OS X 版本strip没有-N选项,我已经阅读了两次手册页,但我不确定如何执行此操作。

那么如何从 OS X 上的符号表中去除单个名称呢?

0 投票
1 回答
391 浏览

c - 使用符号表的 C 程序的错误输出

我现在有这段代码,并且得到了一个我无法理解的输出。

这是我的 symTable 模块,它具有操作符号表所需的所有功能。

我有一个头文件和一个C客户端文件来运行程序。

主要客户文件是:

头文件还包括结构:

我目前的输出是这样的,正如你所看到的,这些值是完全错误的,我不确定为什么。我认为问题出在关于内存的插入函数中,但我不确定:

我的输出:

正确的输出应该是这样的:

任何帮助,将不胜感激。

0 投票
1 回答
1758 浏览

gcc - 使用 `nm` 命令列出局部变量

我正在尝试使用nm命令从目标文件中提取信息以进行某种静态代码分析,其中我必须计算 C 代码中声明的变量和函数的数量。我已经阅读了 GNU Binutils 的文档。我可以在返回的符号表中找到在全局范围内声明的变量,nm但我找不到在本地范围内声明的变量。这是为什么?我怎样才能访问它?

nm除了我可以提取我想要的信息之外,还有其他方法吗?作为编译器,gcc 应该生成一个符号表供其使用。我可以通过任何 gcc 命令访问它吗?

0 投票
2 回答
1246 浏览

compiler-construction - 重用语义分析阶段的符号表进行代码生成

我目前正在为具有全局变量和嵌套子例程功能的语言构建编译器。以前,我只为只有局部变量而没有嵌套子例程的语言构建了一个编译器。

我有一个关于如何在代码生成阶段重用语义分析阶段填充的符号表的问题。我将符号表作为一个链表堆栈,其中每个链表代表在特定范围内声明的标识符。每次进入范围时,都会创建一个新列表并将其推送到堆栈并成为当前范围。同样,每次离开作用域时,堆栈顶部的列表都会弹出。最后,语义分析完成后,我实际上有一个空的符号表,就像它开始时一样。但是,代码生成器需要一个完全填充的符号表才能正确生成代码。如何在不重新执行语义分析期间完成的操作(即,将标识符输入符号表)的情况下做到这一点?

0 投票
0 回答
120 浏览

module - 在内核模块中导出任务?

我有两个内核模块,它们都使用 EXPORT_SYMBOL() 导出一些符号。其中一个导出基本功能(sv1<-sv2),它可以工作,但另一个(sv1->sv2)有问题。

我想要的是导出TASKLET。我在某个可能的地方读到,并且没有禁止这样做。模块 nr 1(称为sv1)由BH 函数和 tasklet 声明组成:

在第二个模块中,在初始化模块 nr 2 (称为sv2 )时使用了全局引用和task_schedule()函数:

问题是当我得到:

在我的代码中,我没有在列表中看到我的两个模块modprobe -l),但是当我在sv2上评论这一行时- 它们神奇地出现了。

这种行为的原因可能是什么?这个初始化是否正确?


编辑

这个问题的原因是模块sv2在sv1之前加载并且不知道 tasklet(行:extern struct tasklet_struct sv_takslet)。当我将sv2导出TASKLET的目的地更改为sv1时,问题就消失了。

但现在我面临两个模块必须相互导出符号的问题。我不知道如何解决这个问题......

两个 *.c 文件都在同一个目录中,我的 Makefile 有以下行:

有没有人有一些提示如何去做?

0 投票
0 回答
278 浏览

php - 在 php 7 中从 symbol_table 中查找失败

我有几个问题。我写过这样的测试用例。

从 for 循环我迭代每一行并调用执行。bind_param 将记住所有值,并在使用变量名“name”和“picture”执行时,它会尝试从 symbol_table 中获取值。但它失败了。我已将代码从 php 5 修改为 php 7。在 php5 中它通过了这个测试用例,但在 php7 中它失败了。

1)我错过了什么吗?

2)在 PHP5 中,我使用的是 active_symbol_table,但在这里(php7)我将其修改为 symbol_table(在谷歌的某个地方,我发现它可以将 active_symbol_table 修改为 symbol_table)。这是对的吗?

0 投票
1 回答
129 浏览

java - 在 Java 中创建符号表时在编译时考虑未知变量值

我正在为我自己的编程语言创建一个编译器,用于在 Minecraft 中创建机器人作为我大学的学期项目。到目前为止,我已经成功地创建了一个带有 ANTLR 的解析器,创建了我自己的抽象语法树结构,并使用 ANTLR 访问者创建了 AST。我处于上下文分析阶段,我目前正在创建符号表并控制结构。我的 SymbolTable 类如下所示:

将变量和函数放入符号表是没有问题的;为此,我使用我的访问者方法,如下所示:

但是,据我了解,符号表中的符号值(例如变量的值或函数的返回值)也需要存在于符号表中。这也没有问题,这是我已经可以做到的。

不过,我的问题是:

程序员可能使用的一些值在编译时是未知的。它们仅在给定程序的运行时才知道。例如:玩家的当前位置,库存槽中的特定物品等。我的语言有事件,所以例如,如果程序员希望机器人在检测到特定块之前进行挖掘,他们可以这样写:

这个特定的事件,块事件,包含块位置等变量。但是,这在编译时是未知的。在将值插入符号表时,如何考虑这样的事情?

0 投票
0 回答
38 浏览

java - 在运行时替换文件数据

我有一个包含以下数据的文本文件

其中 a,b,c 是变量,它可以是任何字母 (az),具体取决于用户输入。在保存文件操作时,我想将变量名 c=_x+y 更改为 c=a+b 并将 d=_x+_y+_z 更改为 d= z+y+x.....

如何在运行时更改值?如何使用符号表?

0 投票
2 回答
717 浏览

java - 符号表的等级

我将如何返回小于给定键的键数?我只是不知道从哪里开始。我有基础开始,但除此之外我不知道从哪里开始

编辑:这是我到目前为止所拥有的,但我的 for 循环是错误的并且给了我错误