python中的结构解析变得简单。

dissect.cstruct的Python项目详细描述


#python中的dissect.csstruct
结构解析变得简单。使用csstruct,您可以编写类似于c的结构,并使用它们来解析二进制数据,可以将其作为类似于文件的对象或bytestrings。

csstruct解析二进制数据感觉既熟悉又简单。在开始分析数据之前,无需学习新语法或新解析库的特性。语法不是严格的c,但它与大多数常见的结构定义兼容。您可以经常使用开放源码c项目中的结构定义,并在不做任何更改的情况下直接使用它们。需要解析ext4超级块吗?只需从linux内核源代码中复制结构定义。需要分析一些自定义文件格式吗?编写一个简单的结构,然后立即开始分析数据,并在运行时调整结构。


by design cstruct非常简单。没有复杂的语法,过滤器,前或后处理步骤。只需进行结构解析。

之后,您就可以从您的python代码开始使用它们了。


`` python
定义一些常数5


>枚举示例:uint16{
>a,b=0x5,c
};



>构造一些结构{
>uint8域的一个字段;
>char field~u 2[so一些常数];
>char field~u 3[field~1&;1*5];///一些随机表达式来计算数组长度
示例字段>;
<<
<<
<
<<
<
<
<

=B'\x01希腊语x00\x00\x00\x06\x00'
result=cparser.someu struct(data)也接受类似文件的对象
assert result.field\u 1==0x01
assert result.field\u 2==b'hello'
assert result.field\u 3==b'world'
assert result.field\u 4=[cparser.example.a,cparser.example.c]




assert cparser.assert.example.a==0
assert cparser.a==assert cparser.a,cparser.a,cparser示例.c==6
assert cparser.example(5)==cparser.example.b


ance.dumps()==B'\x05loremipsum\x05\x00\x00\x00'
````

>默认情况下,所有结构都编译为提供优化性能的类。可以通过向`.load()`调用传递一个'compiled=false'关键字参数来禁用此功能。您还可以通过访问结构的源属性来检查生成的源代码:`print(cparser.some廑struct.source)`.


可以在"examples"目录中找到更多示例。



例如,下面这些都是支持的:


``python
>from dissect import csstruct
>cs=csstruct.csstruct.csstruct
默认endiannesis le,但可以使用kwarg或设置属性(如csstruct.csstruct.csstruct(endian='>;')或设置属性(如csstruct.csstruct.csstruct(endian='>;'))或cs.endian='>;'
assert cs.uint32断言cs.uint32(b'\x05\x05\x05\x00\x00\x00\x00\x00\x00\x00'=.uint24[2]单元](b'\x01\x00\x00\x02\x00\x00')==[1,2]您还可以使用列表索引分析数组
assert cs.char[none](b'hello world!\ x00')==b"你好,世界!"#无表示以空结尾的列表索引
```

它们与边界正确对齐。

`` python
bitde
结构测试{
uint16 a:1;
uint16 b:1;从uint16中读取2位;下一个字段正确对齐
uint16 d:2;下一个字段正确对齐
uint16 d:2;
uint16 e:3;
};
>"
bitfields=c struct.cstruct()
bitfields.load(bitdef)bitfields.load(bitdef)




d=b'\x03\x00\xff;从uint16中读取2位;下一个字段正确对齐
uint16 d:3;

a=位字段。测试(d)

assert a.a==0b1
assert a.b==0b1
assert a.c==0xff
assert a.d==0b11
assert a.e==0b111
assert a.dumps()==d
````

从功能上讲,它最好与intenum类型相比较。

编写自己的语法分析器!

todo
-嵌套结构定义
-联合

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Maven中的java,为什么要运行“mvn clean”?   java会降低图像质量。OutOfMemory异常Android   在Java8中将函数传递到流的过滤方法   jboss6。x java。lang.NoClassDefFoundError,当我将<listenerclass>包含到web时。xml java   java读取图像像素时,像素Alpha始终为255   java在迭代后跳过一行   java如何创建我自己的单链表   意图上的java空指针异常。getStringExtra.:安卓   具有连接实体的java Hibernate onetoone映射   java需要帮助在自制的仓鼠模拟器上实现启动/恢复/暂停/停止线程操作   如何测试非主方法?[Java,IntelliJ]   java jdbc自动提交(false)不起作用   java在JADE中的同一容器中创建多个代理   java OkHttp获取失败的响应正文   java Webdriver flash按钮