Perl - 操作码的操作码?

时间:2014-12-23 22:51:13

标签: perl opcode reversing

如果我有操作码,有没有办法创建perl源代码?

例如

perl -MO=Concise -e "print 123"

将输出操作码:

6  <@> leave[1 ref] vKP/REFC ->(end)
1     <0> enter ->2
2     <;> nextstate(main 1 -e:1) v:{ ->3
5     <@> print vK ->6
3        <0> pushmark s ->4
4        <$> const[IV 123] s ->5

我想以某种方式扭转这种局面。

1 个答案:

答案 0 :(得分:3)

如果通过“拥有操作码”,则表示“拥有操作码树”

当B :: Concise尝试准确表示操作码树时,B :: Deparse会获取操作码树并从中生成源代码。

$ perl -MO=Deparse -e'$x && print'
print $_ if $x;
-e syntax OK

虽然有一些限制,但还是相当不错的。

如果通过“拥有操作码”,则表示“具有B :: Concise的输出”

鉴于B :: Concise试图非常完整,它可能是可能的,但我认为缺少一些信息。我很确定没有什么可以尝试在CPAN上做到这一点,因为我从来没有听说过它会破坏它(你会期望经常发生的事情)。