首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从perlcc -B反编译perl字节码?

如何从perlcc -B反编译perl字节码?
EN

Stack Overflow用户
提问于 2013-02-26 15:39:51
回答 1查看 3K关注 0票数 5

我想用deparse反编译字节码,但是失败了。我执行以下测试:(perl 5.8.9)

1)创建一个名为t.pl的单行文件

代码语言:javascript
运行
复制
    print 1;

2)编译得到plc文件

代码语言:javascript
运行
复制
    $ perl -MO=Bytecode,-H,-ot.plc t.pl

3)尝试反编译

代码语言:javascript
运行
复制
    $ perl -MO=Deparse t.plc
    use ByteLoader 0.06;
    t.plc syntax OK

4)使用简明模块$ perl -MO=Concise,-exec t.plc

代码语言:javascript
运行
复制
1  <0> enter 
2  <;> nextstate(main 174 y.pl:1) v
3  <0> pushmark s
4  <$> const(IV 1) s
5  <@> print vK
6  <@> leave[1 ref] vKP/REFC
y.plc syntax OK

with this method, we can got some valuable info, but it is hard to read.

我拿不到源代码。我在网上搜索了一下,发现解析器模块可以从perlcc -B生成的文件中提取出来。

有什么想法吗?谢谢

参考:

http://ask.slashdot.org/story/05/11/11/0129250/protecting-perl-code

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-27 19:46:40

这种方法不起作用的原因是字节码的存储方式。解析器需要有一棵操作树,但B::Bytecode只按执行顺序存储操作,而不构造树。在Bytecode.pm构造op树之后,可以通过处理PL_main_rootPL_main_start指针,然后在它们上调用newPROG来线程化op树。

简而言之,这是可以做到的,但不能使用标准工具。要做到这一点,您必须编写一些代码,而这需要一些Perl内部的知识。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15083825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档