怎么反编译 Emacs 字节码 到 源代码 ?

发现 elpa 的一个 package,其 .elc 的行为和对应 .el 不一致。

我怀疑是作者 release 时候的疏漏。

现在想反编译 .elc,看看到底哪里和 .el不同,有没有什么好的反编译工具?

这里有,可是对开启 lexical-binding 的字节码不怎么样。函数名不一定会被保留,注释肯定没有,反编译后得到的的控制结构也会与源代码不同,所以不适合和源代码对比。

Emacs 没提供反编译到源代码的方法,只有 disassemble

elpa 的包是统一(:link:elpa-packages)构建的,不存在「作者 release」的问题。你可以自己编译一份 .elc,跟下载的 .elc 比较看看是否确实有什么不同。

也有些 bug 很隐蔽,设计时觉察不到,编译成 .elc 才会爆发。

1 个赞

要使用这个工具,需要先把elc转成lap,我使用它提供的dedis.el里的disassemble-file发现不行,不是对所有elc都可以转。