最近忙于公司项目上线,Cobra的进度有点慢了,不过今天有了新的成果了,一个展示反编译结果并能高亮显示当前正在执行的GUI部件——pySrcPanel。
下图展示了基于pySrcPanel构建的一个demo。
可以看到,python的源代码和源代码的反汇编结果以大家熟悉的python缩进格式显示出来。每一条反汇编的字节码指令都是作为一条注释出现的,这样的好处是可以通过颜色的对比非常容易地识别字节码指令。这里显示的字节码指令的格式与python标准库dis的反汇编的格式一致。但是在每一条字节码指令的最后,我添加了另外一个神秘的东西——字节码指令的“路径”。
“路径”是我构造的一个概念,表示一种定位一条字节码指令的方式。虽然字节码有一个偏移量,但是这个偏移量是基于一个code object而言的,换句话说,不同code object中的不同的字节码指令可以有相同的偏移量,所以仅仅凭偏移量无法确定一条字节码指令。必须再加上code object,才能唯一定位一条字节码指令。上图中的“$.f.3”就是一条“路径”,开始的“$"符号表示module自身,所以这条路径的含义是”module内的名为f函数中偏移量为3的字节码“。
pySrcPanel在”路径“的基础上实现了对字节码指令的高亮,在演示程序中,我们可以在GUI界面下方的编辑框中输入”路径“,点击”跳转“按钮,就可以看到高亮效果。如下图所示:
有了这个东西,就可以可视化地展示Python虚拟机当前执行流程所到达的位置了。嗯,这也是下一步的工作了~~