c中的python虚拟机(字节码解释器)

时间:2017-06-06 04:42:11

标签: c virtual-machine bytecode cpython pythoninterpreter

请任何人解释python字节码。我通过linux中的hexdump命令将.pyc文件转换为十六进制代码。但是无法理解十六进制代码是如何排列的。实际上我在C.中构建了一个python虚拟机。我不知道如何读取这些十六进制代码?如何在C?

中执行.pyc文件

这是源代码

def add(a, b):
     return a + b

add(2,3)

这是.pyc文件的hexdump输出

0000000 f303 0a0d 30b2 5936 0063 0000 0000 0000
0000010 0300 0000 4000 0000 7300 001a 0000 0064
0000020 8400 0000 005a 6500 0000 0164 6400 0002
0000030 0283 0100 0364 5300 0428 0000 6300 0002
0000040 0000 0002 0000 0002 0000 0043 0000 0873
0000050 0000 7c00 0000 017c 1700 2853 0001 0000
0000060 284e 0000 0000 0228 0000 7400 0001 0000
0000070 7461 0001 0000 2862 0000 0000 0028 0000
0000080 7300 0007 0000 6574 7473 702e 7479 0003
0000090 0000 6461 0364 0000 7300 0002 0000 0100
00000a0 0269 0000 6900 0003 0000 284e 0001 0000
00000b0 0252 0000 2800 0000 0000 0028 0000 2800
00000c0 0000 0000 0773 0000 7400 7365 2e74 7970
00000d0 0874 0000 3c00 6f6d 7564 656c 033e 0000
00000e0 7300 0002 0000 0309                    
00000e8

我知道.pyc文件中的这个内容包含一个幻数,一个时间戳和伪编译代码。我想要创建的是一个python字节码解释器。我已经尝试使用dis模块和marshal模块解压缩.pyc文件,并获得了很多关于堆栈机器中各种工作方式的信息。

但是有可能通过浏览.pyc内容创建一个纯粹用C语言编写的微解释器,而不使用dis模块吗?

0 个答案:

没有答案