2013-02-26 3 views
5

Я хочу декомпилировать байт-код с deparse, тогда я потерпел неудачу. я следующий тест: (Perl 5.8.9)как декомпилировать perl bytecode из perlcc -B?

1) создайте файл с именем t.pl с одной строкой

print 1; 

2) скомпилировать, чтобы получить файл плс

$ perl -MO=Bytecode,-H,-ot.plc t.pl 

3) пытаться декомпилировать

$ perl -MO=Deparse t.plc 
    use ByteLoader 0.06; 
    t.plc syntax OK 

4) использовать Краткий модуль $ Perl -MO = Con cise, -exec t.plc

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. 

Я не могу получить исходный код. Я искал в Интернете, seems, что модуль Deparse может отфильтровать полученный файл perlcc -B.

Любая идея? Благодаря

относится:

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

+0

Ответы на связанный вопрос не говорят, что вы можете использовать Deparse; он говорит: «вы могли бы рассортировать его так же, как B :: Deparse». – ikegami

+0

О, я думал, что Deparse может это сделать. Тогда, есть ли инструмент, который может сделать deparse perl bytecode? – deperl

+0

Я не знаю, может ли это или нет. Если вы не знаете, есть ли инструмент или нет. – ikegami

ответ

1

Причина этого не работает очевидный путь из-за того, как хранится Bytecode. Deparse нуждается в том, чтобы существовало дерево OP, но B::Bytecode просто хранит ops в порядке exec без построения дерева. Можно повернуть дерево op после того, как Bytecode.pm создаст его, запускаясь с помощью указателей PL_main_root и PL_main_start, а затем набрав newPROG.

Короче говоря, это можно сделать, но не со стандартными инструментами. Вам нужно будет написать что-то, чтобы это сделать, и это потребует немного знаний о китах Perl.

+0

Думаю, что это снова, я думаю, что у меня это не так. 'newPROG' (или, скорее,' op_linklist') принимает дерево op и определяет порядок exec; он не может превратить список ops в порядке exec в дерево. Это делает его еще более сложным. –

Смежные вопросы