码迷,mamicode.com
首页 > 其他好文 > 详细

AVEVA RVM Binary Parse

时间:2015-04-25 22:46:13      阅读:1393      评论:0      收藏:0      [点我收藏+]

标签:

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

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

技术分享

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 ......

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

技术分享

2. 详细分析

2.1 Section Name

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

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

技术分享

2.2 Next Section Addr

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

技术分享

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

技术分享

2.3 Section Content

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

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

类型主要有以下几种

1)字符串

技术分享

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

2)整型

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

3)浮点数

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

技术分享

3. 解析结果

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

技术分享

 

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

AVEVA RVM Binary Parse

标签:

原文地址:http://www.cnblogs.com/SudoSky/p/4456806.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!