5

deparseでバイトコードを逆コンパイルしたいのですが、失敗しました。次のテストを行います:(perl 5.8.9)

1) t.pl という名前のファイルを 1 行で作成します。

    print 1;

2) コンパイルして plc ファイルを取得する

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

3) 逆コンパイルを試みる

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

4) Concise モジュールを使用 $ perl -MO=Concise,-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.

ソースコードを取得できません。Web を検索したところ、Deparse モジュールは生成されたファイルを逆解析できるようです。perlcc -B

何か案が?ありがとう

参照:

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

4

1 に答える 1

1

これが明らかな方法で機能しない理由は、バイトコードの保存方法にあります。Deparse には OP のツリーが必要ですが、ツリーB::Bytecodeを構築せずに op を実行順に格納するだけです。Bytecode.pm が op ツリーを構築した後で、PL_main_rootおよびPL_main_startポインターをいじってから呼び出すことで、op ツリーをスレッド化することnewPROGができます。

要するに、それは可能ですが、標準ツールではできません。それを行うには何かを書く必要があり、そのためには Perl の根性に関する知識が少し必要になります。

于 2013-02-27T11:46:39.643 に答える