标签: symbol-table

对象如何访问当前包的符号表?

我如何访问对象被实例化的当前包的符号表?例如,我有这样的事情:

my $object = MyModule->new;
# this looks in the current package, to see if there's a function named run_me
# I'd like to know how to do this without passing a sub reference
$object->do_your_job;
Run Code Online (Sandbox Code Playgroud)

如果在do_your_job我使用的实现中__PACKAGE__,它将在MyModule包中搜索.我怎么能让它看起来正确的包装?

编辑:我会尽量让这个更清楚.假设我有以下代码:

package MyMod;

sub new {
    return bless {},$_[0]
}

sub do_your_job {
    my $self = shift;
    # of course find_package_of is fictional here
    # just for this example's sake, $pkg should be main
    my $pkg = find_package_of($self); …
Run Code Online (Sandbox Code Playgroud)

perl symbol-table

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

重用语义分析阶段的符号表来生成代码

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

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

compiler-construction code-reuse code-generation semantic-analysis symbol-table

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

我们可以在 ELF 可执行目标文件的符号表中隐藏/模糊符号名称吗?

根据ELF 规范:ELF 目标文件包含各种部分,其中之一是符号表部分 .symtab,其中包含所有符号(文件、函数、对象等)的信息。

ELF 包含符号表中每个符号的名称、属性标志、类型、值和绑定等信息。

文件、函数或对象(数组、变量、字符串)等的对象名称实际上暴露了代码的内部信息。这样,任何人都可以分析ELF(使用stringsobjdumpreadelf工具),看到此信息,并获得对事物的内部,其应当保密的代码的想法。

为了可读性和可维护性,我们编写了开发人员可以理解的代码。所以,我们需要继续使用正确的文件名和变量名等。我们不能使用代码混淆来掩盖它们,因为它会导致难以维护。

问题(已编辑):有什么方法可以在可执行 ELF 的符号表中隐藏或删除符号“名称”,以便没有人可以了解代码并且可执行文件仍然可以运行?

unix elf object-files symbol-table

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

C全局静态变量初始化是由链接器完成的吗?

假设我们有:

在f1.c

#include <stdio.h>
static int x = 10;

void f1() {
  printf("f1.c : %d\n", x);
}
Run Code Online (Sandbox Code Playgroud)

main.c中

extern void f1();
int main(int argc, char **argv) {
  f1();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我们将编译和读取两个ELF文件符号表(rel.ELF和exec ELF):

$> gcc -c *.c
$> readelf -s f1.o | grep x
      Num:    Value          Size Type    Bind   Vis      Ndx Name
        5: 0000000000000000     4 OBJECT  LOCAL  DEFAULT    3 x
$> gcc *.o
$> readelf -s a.out | grep x
      Num:    Value          Size Type    Bind   Vis      Ndx Name
       38: 0000000000601038 …
Run Code Online (Sandbox Code Playgroud)

c linker gcc symbol-table

0
推荐指数
1
解决办法
800
查看次数

在java中按值排序符号表

符号表给出按键排序的结果,但我们如何按值对符号表进行排序.我用了Arrays.sort(st,st.get(key))但是给了我一个错误:

找不到符号:方法排序(ST,java.lang.Integer)


我的程序看起来像这样.仍然有错误:

import java.util.Comparator;
import java.util.Arrays;

public class DictionaryCounter {

    private final String key;

    public DictionaryCounter (String key){
            this.key = key;
        }

    public static class Frequency implements Comparator<DictionaryCounter>{
        public int compare(DictionaryCounter x, DictionaryCounter y){
            return x.get(key).compareTo(y.get(key));
        }
    }

    public static void main(String[] args) {

        ST<String, Integer> st = new ST<String, Integer>();
        //String key;

        while (!StdIn.isEmpty()) {
            key = StdIn.readString();
            if (!st.contains(key))
            { st.put(key, 1); }
            else
            { st.put(key,st.get(key) + 1 ); }
        }

        Arrays.sort(st,new Frequency (key));
        for …
Run Code Online (Sandbox Code Playgroud)

java symbol-table

-1
推荐指数
1
解决办法
1528
查看次数

动态类型检查编译语言中的符号表

我正在尝试创建一种动态类型检查编译语言,现在我对此有点困惑:

- 编译语言总是有静态类型检查
- 任何编译器的阶段必须具有相同的顺序 -
例如,符号表必须在词法分析阶段创建,并且必须与每个阶段连接,如下图所示。

在此处输入图片说明

上述条款是否属实?
真正的问题是什么时候(哪个阶段)必须为这种语言创建符号表?

compiler-construction typechecking symbol-table compile-time-type-checking

-1
推荐指数
1
解决办法
170
查看次数