文献|eTPL
1.摘要
为了弥补TPL(TLS Presentation Language),文章提出了增强的TPL语言(eTPL)。文章首先定义了一个二进制数据解析的生成模型。基于此,文章为TPL提供了一组可以捕获重要信息的语言结构。如果没有这些结构,TPL中的重要信息只能由人工“手动”获取。最后,文章提出两种软件工具:gmt-c++和etpl-tool。
2.创新点
2.1通用解析模型
受TLS固有的解析范式启发,开发此通用模型来解析TLS的复杂的二进制编码。
解析范式见tls不同版本的规范文档。例如RFC5246
2.1.1专用名词与概念解释
- 解析(parsing):指二进制数据流转换成一种结构(树)表示的过程,在输入流解析时不能有任何跳变。
- 序列化(serialization):相反的过程,从树表示转换为二进制流,通过深度优先的树遍历。
- 类型(type):类型是解析数据的方法。类型可以是“原子的”,没有解析相关的子结构(例如整型或者不透明的原始数据an opaque blob of raw data);类型也可以是复合的(类似结构体,例如由不同字段组成的网络数据包)。
- 字段(filed):类型的实例,通常由复合的类型定义。
- 解析器(parser/dissector):类型解析方法的实现。复合类型的解析器将输入数据流交给子解析器。如果字段依赖于前面字段的解析结果,则相应的子解析器将被实时实例化。要解析的输入流可以以任意碎片的形式提供,即流中的中间不连续性不影响解析结果。
- 长度(length):解析器在某个时间点上消耗的数据量。
- 大小(size):解析器或者类型的目标值(可选)。
- 溢出(overflow situation):所有解析器的子解析器已经满了,但是还有数据流要输入。
- underflow situation:父解析器已满,但是不是所有的子解析器都满了。
2.1.2通用消息树(Generic Message Trees)
GMT是由解析器实现的消息的树形表示。
叶子节点与不能再解析的“元消息”有关。
除了静态和不可变的类型,GMT还拥有动态类型组件,可以由GMT在运行时解析的具体数据来确定。(select/case)
此外,GMT节点还有可扩展的元信息。
2.1.3 TPL & eTPL
TPL的定义不明确,可读性差。于是提出了加强型TPL(etpl),部分增强功能如下:
- 类型和字段的显示大小(Explicit size of types and fields)**:定义类型与字段的大小。
- 类型参数化(Type parametrization):允许类型具有参数,并定义一个语言构造来在实例化类型时设置这些参数。整数类型的可接受数值限制(最小值/最大值)。
- 动态解析上下文(Dynamic parsing context):引入了允许使用GMT提供的动态解析上下文的语言结构。解析上下文由嵌入了一个解析器的(部分增长的)GMT给出。具体元素(即GMT节点或与GMT节点相关联的元信息)使用相对于解析器在GMT中的位置的路径来引用。
3.复现
3.1 gmt-cpp
通用消息树(GMT)的c++实现。
-
下载库
git clone https://github.com/phantax/gmt-cpp.git
-
下载 bitbuffers-cpp 库并创建软链接至gmt-cpp的目录。这里建议用绝对路径,否则会出现“链接层数过多”的问题。
git clone https://github.com/phantax/bitbuffers-cpp.git
ln -s home/mkh/bitbuffers-cpp home/mkh/gmt-cpp/bitbuffers-cpp -
下载propertynode-cpp 库并创建软链接;与2同理
git clone https://github.com/phantax/propertynode-cpp.git
ln -s home/mkh/propertynode-cpp home/mkh/gmt-cpp/propertynode-cpp -
build
cd gmt-cpp
make deps
make
gmt-cpp是一个在C++中实现gmt概念的库。为了使用这些代码,需要一个针对gmt-cpp链接的应用程序。
test/子目录中有一个测试应用程序,可以将其用作起点。为了构建和运行测试应用程序(在构建gmt-cpp库之后),键入
make test |
test.cpp源代码如下
|
运行结果
3.2 etpl-tool
用etpl作为派生解析例程的描述语言。
we brieflfly presented a software tool that automatically generates C++ message parsers from eTPL defifinitions.