1

请任何人解释一下python字节码。我通过linux中的hexdump命令将.pyc文件转换为十六进制代码。但是无法理解十六进制代码的排列方式。实际上我在CI中构建了一个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 模块?

4

0 回答 0