2013-02-26 8 views
5

バイトコードをdeparseで逆コンパイルしたい場合、失敗しました。perlcc -Bからperlバイトコードを逆コンパイルする方法は?

print 1; 

2)PLCがファイルを取得するためにコンパイル(perlの5.8.9)

1)単一のラインでt.plという名前のファイルを作る

$ 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 =コンを使用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バイトコードを実行できるツールはありますか? – deperl

+0

私はそれができるかどうかわからない。ツールがあるかどうかわからない場合。 – ikegami

答えて

1

理由は、バイトコードが格納されている方法です。 DeparseにはOPのツリーが必要ですが、B::Bytecodeはツリーを構築することなくexecの順序でopsを保存します。 Bytecode.pmがそれを構築した後に、PL_main_rootPL_main_startポインタをつぶしてからnewPROGを呼び出して、opツリーをスレッドすることが可能です。

つまり、となりますが、標準ツールでは行われません。あなたはそれをするために何かを書く必要があり、それはPerlの腸の知識のビットを必要とするでしょう。

+0

これについてもう一度考えてみると、 'newPROG'(あるいは、むしろ' op_linklist')はopツリーをとり、execの順序を決定します。 exec命令のopsのリストをツリーにすることはできません。そうすれば、それはさらに困難になります。 –

関連する問題