.tbc到.tcl文件

时间:2013-01-31 18:58:09

标签: tcl

这是一个奇怪的问题,我搜索但找不到任何满意的答案。

我有一个已编译的tcl文件,即.tbc个文件。那么有没有办法将此.tbc文件转换回.tcl文件。

我看了here,有人提到了::tcl_traceCompile,并说这可以用来反汇编.tbc文件。但作为新手tcl用户,我不确定这是否可行,或者说更多,如何使用它。

虽然我知道tcl编译器没有编译所有语句,因此可以在.tbc文件中轻松看到这些语句但我们可以从tcl文件中获取整个.tbc

任何评论都会很棒。

2 个答案:

答案 0 :(得分:5)

不,或者至少没有大量的工作;你正在做一些相当多的努力来防止(TBC格式旨在保护商业代码不被窥探)。


TBC文件格式是Tcl字节码的编码,通常不会保存; TBC代表 T cl B yte C ode。 TBC格式数据仅由一个工具生成,商业“Tcl编译器”(最初由Sun或Scriptics编写;该工具可以追溯到转换时),这实际上是内置编译器的利用。每个Tcl系统都有一些序列化代码。它还尽可能多地删除原始源代码。使用的编码令人不快;如果可以的话,你想避免编写自己的加载器,而是使用tbcload扩展来完成工作。

然后,您需要将其与Tcl的自定义构建一起使用,以禁用一些防御性检查,以便您可以使用tcl::unsupported::disassemble命令(通常拒绝接收来自{的任何内容)来反汇编加载的代码。 {1}});该命令存在于Tcl 8.5以后。在那之后,你将不得不从字节码拼凑代码所做的事情;我根本不知道有任何工具可以做到这一点,但是字节码大部分都是相当高的水平,所以对于小块代码来说,它不是

tbcload没有手册页;毕竟它正式得不到支持!但是,我链接到的wiki页面应该涵盖了开始所需的大部分内容。

答案 1 :(得分:0)

我可以部分地说“是”和条件。这种情况是,如果原始tcl代码是在命名空间中编写的,并且procs是在命名空间花括号中定义的。然后在tkcon / wish中获取tbc文件,并使用info procs和namespace命令查看代码。在Offcourse你需要知道名称空间名称。然而,也可以找到。