AVEVA RVM Binary Parse

昨天,Shing Liu要求我帮忙写一个对Aveva Rvm 二进制格式的解析程序。我粗看了下格式还是比较简单的,没有涉及到压缩、加密。下面给出简要分析过程,希望对有需要的朋友有所帮助。这是我第一次写blog,写的不到之处请谅解。

为了便于后面查看,我先在此放出Text与Binary的对照图:

AVEVA RVM Binary Parse_第1张图片

1. 基本格式

基本格式是以节的方式存储,节与节之间紧密相邻。每一节包含节名称(Section Name)、下一个节地址(Next Section Addr)、节内容(Section Content),如下表所示。

Section Name Next Section Addr Section Content Section Name Next Section Addr Section Content ......
16 bytes 4bytes N bytes 16 bytes 4bytes N bytes ......

节与节之际的关系请注意红色箭头(^ ^)

wps9915.tmp

2. 详细分析

2.1 Section Name

所占大小为16字节,如下图所示,左边为十六进制,右边为相应的ASCII编码。

可以看出名称与Rvm Text版本的”HEAD”基本一致,只是其中用了几个0填充了下,当然,这也便于我们区分文件是二进格式的还是文本格式的。

wps9916.tmp

2.2 Next Section Addr

所占大小为4字节(以大端法表示),如下图,其中C4就是下一节开始的地址。

wps9926.tmp

我们可以看一下C4处的内容,如下图,可以看出下一节的名称就是Text中对应的”MODL”。

wps9927.tmp

2.3 Section Content

所占的字节视实际情况而定。

所有节的内容起始的八个字节均为00 00 00 01 00 00 00 01,猜测是用于表明这是一个节,且便于调试等。

类型主要有以下几种

1)字符串

AVEVA RVM Binary Parse_第2张图片

可以看出00000014表示后续字符串大小(4字节为一个单位),所以,这里表示后面紧跟80字节的字符串。

2)整型

整型出现的地方主要包括Next Section Addr、字符串长度、几何信息等等。且都是以大端法表示的。

3)浮点数

浮点数也是以大端法形式表现的,如下图。在intel的cpu上需要位操作处理下。当然,也可以使用ntohl。

wps9939.tmp

3. 解析结果

此解析算法在RvmTranslator程序中实现,经验证有效。转换结果见下图:

AVEVA RVM Binary Parse_第3张图片

 

 

 

程序的使用及下载见:http://www.cppblog.com/eryar/archive/2015/04/22/210424.html

你可能感兴趣的:(AVEVA RVM Binary Parse)