发现 elpa 的一个 package,其 .elc
的行为和对应 .el
不一致。
我怀疑是作者 release 时候的疏漏。
现在想反编译 .elc
,看看到底哪里和 .el
不同,有没有什么好的反编译工具?
发现 elpa 的一个 package,其 .elc
的行为和对应 .el
不一致。
我怀疑是作者 release 时候的疏漏。
现在想反编译 .elc
,看看到底哪里和 .el
不同,有没有什么好的反编译工具?
这里有,可是对开启 lexical-binding 的字节码不怎么样。函数名不一定会被保留,注释肯定没有,反编译后得到的的控制结构也会与源代码不同,所以不适合和源代码对比。
Emacs 没提供反编译到源代码的方法,只有 disassemble
。
elpa 的包是统一(elpa-packages)构建的,不存在「作者 release」的问题。你可以自己编译一份 .elc,跟下载的 .elc 比较看看是否确实有什么不同。
也有些 bug 很隐蔽,设计时觉察不到,编译成 .elc 才会爆发。
要使用这个工具,需要先把elc
转成lap
,我使用它提供的dedis.el
里的disassemble-file
发现不行,不是对所有elc
都可以转。