CN111090417A - 二进制文件解析方法、装置、设备及介质 - Google Patents
二进制文件解析方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN111090417A CN111090417A CN201911110650.0A CN201911110650A CN111090417A CN 111090417 A CN111090417 A CN 111090417A CN 201911110650 A CN201911110650 A CN 201911110650A CN 111090417 A CN111090417 A CN 111090417A
- Authority
- CN
- China
- Prior art keywords
- binary
- file
- tree structure
- binary file
- members
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种二进制文件解析方法,涉及嵌入式软件开发技术领域,用于解决现有设备二进制值转换繁琐的问题,该方法包括以下步骤:获取解析规则描述文件,根据所述解析规则描述文件,调用递归函数构建结构体树状结构;接收二进制文件,将所述二进制文件转换为若干个二进制结构体;通过所述若干二进制结构体依次递归调用所述结构体树状结构,得到所述二进制文件的解析文本。本发明还公开了一种二进制文件解析装置、电子设备和计算机存储介质。本发明通过递归调用的方法构建树状结构,进而以该树状结构为递归函数的解析规则对二进制文件进行解析。
Description
技术领域
本发明涉及嵌入式软件开发技术领域,尤其涉及一种二进制文件解析方法、装置、设备及介质。
背景技术
嵌入式产品的状态信息和运行日志是设备在日常使用和维护过程中的常用数据,这类数据具有数据量庞大、存储频次高等特点。由于嵌入式设备存储资源有限,且计算力能力较低,难以高频次地读写大量文本数据,因此目前普遍的做法是将产品的状态信息和运行日志通过二进制结构体的方式存放在文件中,需要时通过特定的解析软件将其转化成具备可读性的文本文件。
目前嵌入式产品的种类繁多,不同嵌入式产品存储的二进制含义各不相同,需要不同的解析算法,导致产生了大量重复编程工作,例如“当成员1的值为0x01时,成员2的0x01值应翻译为‘电压’,当成员1的值为0x02时,成员2的0x01值应翻译为‘电流’”;因此一些嵌入式产品开始使用通用解析算法来避免重复编程工作。但是现有的通用解析算法只能做到简单的一对一本文转换,即一个二进制值只能对应一个文本字段;也有依托于固定的协议的通用解析算法,但是需要限制每个数据块的长度和顺序。现有的通用解析算法难以满足复杂的日志解析需求,无法适用于多种二进制文件的解析场合。
发明内容
为了克服现有技术的不足,本发明的目的之一在于提供一种二进制文件解析方法,其通过建立结构体的树状结构,进而根据该树状结构解析二进制文件。
本发明的目的之一采用以下技术方案实现:
一种二进制文件解析方法,包括以下步骤:
获取解析规则描述文件,根据所述解析规则描述文件,调用递归函数构建结构体树状结构;
接收二进制文件,将所述二进制文件转换为若干个二进制结构体;
通过所述若干二进制结构体依次递归调用所述结构体树状结构,得到所述二进制文件的解析文本。
进一步地,所述解析规则描述文件包括成员、成员关系、所述成员的二进制值翻译表,其中所述成员包括成员标签和成员ID,所述成员标签分为替换标签和追加标签,所述替换标签根据所述成员的二进制值确定翻译文本,所述追加标签在所述成员的二进制值后添加额外文本;所述成员ID为所述成员的编号。
进一步地,所述成员关系根据所述成员ID形成从属关系,包括父成员及子成员,其中,成员标签为所述追加标签的成员为子成员。
进一步地,根据所述解析规则描述文件构建结构体树状结构,具体包括如下步骤:
预设虚拟成员为所述结构体树状结构的根节点,递归遍历所述解析规则描述文件:
将未指定父成员的所述成员作为父节点,所述父节点为所述根节点的子节点;
根据所述成员关系,将指定父成员的所述成员作为相应父成员的子节点;
当所述解析规则描述文件中的所有成员均加入所述结构体树状结构,停止递归遍历。
进一步地,所述树状结构中的节点存储所述成员的结构体,所述成员的结构体包括所述成员的成员ID、所述成员的成员标签以及所述成员的二进制值翻译表。
进一步地,通过所述若干二进制结构体依次递归调用所述结构体树状结构,得到所述二进制文件的解析文本,包括以下步骤:
通过所述二进制结构体递归遍历所述树状结构,即根据所述二进制结构体中的二进制成员的取值,确定相应的成员ID,根据所述相应的成员ID依次将所述二进制结构体中的二进制成员与所述结构体树状结构中的成员进行匹配;
将匹配成功的二进制成员根据相应的成员标签进行二进制值翻译,得到每个二进制值的翻译文本;
合并所述每个二进制值的翻译文本,得到所述二进制结构体的解析文本;
合并所述若干个二进制结构体的解析文本,得到所述二进制文件的解析文本。
进一步地,合并所述每个二进制值的翻译文本,包括以下步骤:
根据预设顺序对所述二进制值的翻译文本进行排序。
本发明的目的之二在于提供一种二进制文件解析装置,其通过建立树状结构体模型,进而根据该模型解析二进制文件。
本发明的目的之二采用以下技术方案实现:
一种二进制文件解析装置,其包括:
构建模块,用于获取解析规则描述文件,根据所述解析规则描述文件,调用递归函数构建结构体树状结构;
接收模块,用于接收二进制文件,将所述二进制文件转换为若干个二进制结构体;
解析模块,用于所述若干二进制结构体依次递归调用所述结构体树状结构,得到所述二进制文件的解析文本。
本发明的目的之三在于提供执行发明目的之一的电子设备,其包括处理器、存储介质以及计算机程序,所述计算机程序存储于存储介质中,所述计算机程序被处理器执行时实现上述的二进制文件解析方法。
本发明的目的之四在于提供存储发明目的之一的计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的二进制文件解析方法。
相比现有技术,本发明的有益效果在于:
通过根据解析规则描述文件建立树状结构,并将该树状结构作为解析规则用于解析二进制文件,结合递归调用的方法,使该解析方法可以适用于各种不同的嵌入式产品,无需重复编程;并且通过递归调用的方法保证了该解析方法在分析结构体关系时不会受限于结构体的长度和成员关系的深度,保证了灵活性。本发明不仅减少了开发时的重复工作,还有效地降低了由于产品种类多,导致配套解析软件过多而带来的维护成本。
附图说明
图1是实施例一的二进制文件解析方法的流程图;
图2是实施例一的构建树状结构的流程图;
图3是实施例一的二进制文件解析方法的流程图;
图4是实施例二的二进制文件解析装置的结构框图;
图5是实施例三的电子设备的结构框图。
具体实施方式
以下将结合附图,对本发明进行更为详细的描述,需要说明的是,以下参照附图对本发明进行的描述仅是示意性的,而非限制性的。各个不同实施例之间可以进行相互组合,以构成未在以下描述中示出的其他实施例。
实施例一
实施例一提供了一种二进制文件解析方法,旨在通过建立结构体的树状结构,从而显示出二进制成员间的关系,二进制文件解析时,通过递归算法得到解析文本。通过这种方式,能够适应各种深度的二进制成员关系及各种长度二进制的结构体,无需重复编程。
递归函数指的是函数中调用函数本身的函数,关于递归函数的定义如下:对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值X0,其函数值f(x0)由f(f(x0))决定,那么就称f(x)为递归函数。递归函数当达到终止条件时会停止递归调用,终止条件通常为无元素可调用,递归函数会返回递归调用结束后的链表,返回的链表即组成了本实施例中的树状结构。
本实施例中树状结构的构建以及二进制文件的解析都通过递归调用(递归函数)的方法来完成。请参照图1所示,一种二进制文件解析方法,包括以下步骤:
S110、获取解析规则描述文件,根据所述解析规则描述文件,调用递归函数构建结构体树状结构;
上述的解析规则描述文件包括成员、成员关系、所述成员的二进制值翻译表,其中所述成员包括成员标签和成员ID,所述成员标签分为替换标签和追加标签,所述替换标签根据所述成员的二进制值确定翻译文本,所述追加标签在所述成员的二进制值后添加额外文本;所述成员ID为所述成员的编号。
其中,所述成员关系根据所述成员ID形成从属关系,包括父成员及子成员,其中,成员标签为所述追加标签的成员为子成员。成员关系显示了各成员的父成员或子成员,例如故障状态的实际取值需要参考具体故障类型,则故障状态为故障类型的子成员。
解析规则描述文件中的成员通常指和设备状态及功能相关的名称,例如设备号、故障类型、故障状态等,并通过成员ID对成员进行编号,以便于解析时通过成员ID识别对应的成员;解析规则描述文件中会存有每个成员的数据类型,以便于解析时根据数据类型对应的数据长度确定每个成员的二进制值。
描述文件的具体格式此实施例不做限定,可以为EXCEL表格、XML标记性语言等。
请参照图2所示,根据所述解析规则描述文件,调用递归函数,构建结构体树状结构,具体包括如下步骤:
S1101、预设虚拟成员为所述结构体树状结构的根节点,递归遍历所述解析规则描述文件:
S1102、将未指定父成员的所述成员作为父节点,所述父节点为所述根节点的子节点;
S1103、根据所述成员关系,将指定父成员的所述成员作为相应父成员的子节点;
S1104、当所述解析规则描述文件中的所有成员均加入结构体树状结构,停止递归遍历。
上述树状结构中的节点存储成员结构体,所述成员结构体包括成员ID、成员的二进制值翻译表。
根据成员标签的不同,上述的成员结构体也会不同,对于成员标签为追加标签的成员,因为该成员一定是子成员,所以其成员结构体只需包括成员ID及其二进制值翻译表;对于成员标签为替换标签的成员,可作为父成员或子成员,当为父成员时,其成员结构体包括自身的成员ID及二进制翻译表、其子成员的成员ID及子成员的二进制翻译表,当为子成员时,其成员结构体包括自身的成员ID及二进制翻译表。在树状结构中,每一条由父节点起始至其最后一个子节点形成的链组成一个成员结构体链表,即上述树状结构即由多个成员结构体链表组成。
在上述构建树状结构时,首先遍历解析规则描述文件,将未指定父成员的成员加入到树状结构中,构建时,递归调用的函数为“查询并记录当前结构体成员的子成员”,当前结构体成员指的是已加入树状结构的成员,调用规则是以虚拟成员“root”为起点,首先对所有未记录在树状结构中的且无父成员的成员调用“查询并记录当前结构体成员的子成员”的函数,并对其所有的子成员继续调用“查询并记录当前结构体成员的子成员”的函数,直到当前成员不存在子成员后(即递归函数的终止条件),函数返回,返回结果即为所需的树状结构。通过此方法,可以生成一个以虚拟成员“root”为起点的,嵌套形式的描述性树状结构体,由于无父成员的成员可能有多个,如果都将其作为树状结构的根节点,则需要多个树状结构来描述成员关系,因此选用一个虚拟成员为起点(根节点),无父成员的成员作为父节点,这样,通过一个树状结构就可以显示出所有的成员关系。
S120、接收二进制文件,将所述二进制文件转换为若干个二进制结构体;
本实施例中不对S120中具体二进制结构体的转换方法进行限定,具体转换方法需要根据实际编程语言进行确定,例如GO语言为编程语言时,可以通过Gob库或者encoding等把二进制字节转换为二进制结构体。
S130、通过所述若干二进制结构体依次递归调用所述结构体树状结构,得到所述二进制文件的解析文本。
请参照图3所示,S130具体包括以下步骤:
S1301、通过所述二进制结构体递归遍历所述结构体树状结构,即根据所述二进制结构体中的二进制成员的二进制取值,确定相应的成员ID,根据所述相应的成员ID依次将所述二进制结构体中的二进制值成员与所述结构体树状结构中的成员进行匹配;
S1302、将匹配成功的二进制成员根据相应的成员标签进行二进制值翻译,得到每个二进制值的翻译文本;
S1303、合并所述每个二进制的翻译文本,得到所述二进制结构体的解析文本;
S1304、合并所述若干二进制结构体的解析文本得到所述二进制文件的解析文本。
S1304中,通常还需要根据预设顺序对所述二进制值的翻译文本进行排序。
其中,二进制文件中会按成员的数据类型以及ID的顺序排列二进制值,所以在解析二进制文件时,根据成员ID和数据类型依次匹配对应的二进制值。例如,成员ID为0、1,数据类型分别为char和float,二进制文件中有五个二进制值,排列顺序为“0x02 0x00 0x000x02 0x04”,则“0x02”为成员0的二进制值,“0x00 0x00 0x02 0x04”为成员1的二进制值。
上述二进制成员与所述结构体树状结构的成员进行匹配,即根据ID查询ID对应的成员的结构体,如查询到相应的结构体(结构体树状结构的节点),二进制成员会根据匹配成功的结构体的成员标签进行二进制值的翻译,即进行替换或添加文本。
通常预设顺序会在描述文件显示,在构建树状结构时会记录该预设顺序。
本实施例以表1.1为例对二进制文件的解析过程进行说明。表1.1为一个EXCEL格式解析规则描述文件的示例,表中的LOG表示成员标签为替换标签,FIELD表示成员标签为追加标签。
LOG标签:替换标签,定义为该种标签的结构体成员,可以作为其他LOG或FIELD成员的父成员,或其他LOG的子成员,子LOG的翻译表根据父LOG取值的不同而不同,而具体的翻译内容根据表中的值与本身的二进制值匹配决定,LOG的翻译规则为“根据父LOG的取值选择对应的翻译表,并根据自身的二进制取值与翻译表匹配,将文件中的LOG二进制值替换成翻译表中匹配到的文本”。
FIELD标签:追加标签,定义为该种标签的结构体成员,可以作为其他LOG的子成员,子FIELD的翻译内容根据父LOG的取值不同而不同,FIELD的翻译规则为“根据父LOG的取值与翻译表匹配,在文件中FIELD的二进制值后追加匹配到的文本”。
上述的翻译表指解析规则描述文件,即本实施例中的表1.1。
表1.1
在表1.1中,第一行决定了二进制文件解析完成后,翻译后的成员文本的显示顺序,即本实施例中描述的预设顺序,表中的显示顺序为“故障时间-设备号-故障类型-故障名称-故障状态-故障数据”;
第二行为每个二进制成员赋予的物理含义,即二进制成员实际名称及成员ID号;
第三行的格式为:一列属性描述及一列标签描述;以“故障类型”为例,第一列中的u8表示二进制成员1的数据类型是u8(unsigned char)型,base:NULL表示为其指定父成员,NULL表示无父成员;第二列中的LOG表示将该二进制成员定义为LOG标签;再例如“故障名称”,第一列表示该二进制成员的数据类型是u16(unsigned short)型,base:0表示其父成员的成员ID为0,即“故障类型”这一二进制成员,同理“设备号”列中,第一列表示“设备号”的数据类型是u16(unsigned short),第二列表示其父成员的成员ID是3,即“故障名称”这一二进制成员。
表1.1中,前三列为表头,从第四列开始为表格内容:
对于定义为LOG标签(替换标签)的二进制成员而言,表格内容为二进制值和对应的翻译字段,以成员3“故障名称”为例,因为故障名称以成员0“故障类型”作为父类,所以其取值翻译需要参考父成员的取值,例如成员0取值为1,成员3取值为2时,成员3被翻译为“防雷1故障”,成员0取值为2,成员3取值为2时,成员3被翻译为“输出过压”。而没有父成员的结构体成员,不需要参考父类的值,其翻译字段和二进制值一一对应,只有唯一的解析文本。
对于定义为FIELD标签(追加标签)的二进制成员而言,表格内容为需要追加的字段,通过行数对应其父类的翻译结果,以成员5“故障数据”为例,其父类为成员3“故障名称”,所以成员5的翻译处理取决于成员3的翻译结果,而成员3的翻译结果取决于成员1的取值和成员3自身的取值,以表1.1为例,当成员1翻译为模块、成员3翻译为输出过压时,成员5在其具体数值的后方追加字段“V”,当成员1翻译为模块,成员3翻译为过温时,成员5在其具体数值后方追加字段“℃”。
以表1.1为例,对树状结构的构建过程进行说明,首先遍历表头,找到没有指定父类的结构体成员,该解析规则描述文件(表1.1)中只有二进制成员0“故障类型”,此时将其作为虚拟成员“root”的子成员,用一个替换标签(LOG)的成员结构体来记录其ID号为0,二进制值为1时,翻译文本为“系统”,二进制值为2时,翻译文本为“模块”,二进制值为3时,翻译文本为“”,二进制值为“5”时,翻译文本为“未知故障”,记录完成后。依次为“系统”、“模块”、“”、“未知故障”记录其子成员,首先“系统”包含的子成员有LOG成员3和LOG成员4以及FIELD成员1,再依次对这三个成员的“属于‘系统’的”二进制值和字段的对应关系进行装填,装填完成后,再分别对其中的两个LOG成员继续装填子成员,如此递归,直到再无子成员时,函数返回,再对“模块”包含的成员3、成员4和成员1所对应的“属于‘模块’的”二进制值和字段的对应关系进行装填,如此递归,直到将“系统”、“模块”、“”、“未知故障”全部装填完毕后,函数返回,得到该解析规则描述文件的树状结构。
在得到树状结构后就可以以该树状结构为递归函数的解析规则,对二进制文件进行解析,解析过程以两个的二进制结构体为例,进行说明。
结构体1:
成员0值为2,成员1值为0,成员2值为2,成员3值为2,成员4值为1,成员5值为0。
结构体2:
成员0值为2,成员1值为0,成员2值为3,成员3值为4,成员4值为1,成员5值为2。
首先对结构体1进行翻译,通用递归函数从虚拟的root成员为起点,遍历其子成员(子节点),在本实施例中,只有一个父节点,即成员0“故障类型”,因此,通过递归函数计算该成员0“故障类型”的深度,返回的值即为解析文本。具体地,根据成员0的实际二进制值2,匹配其对应的文本字段“模块”,之后,再对“模块”的子成员进行遍历,其中包含LOG成员3和成员4以及FIEDL成员1,我们对成员1进行直接追加字段“”(空字段),并根据其数据类型(时间)将其翻译为“1970年1月1日零时1分0秒”,对成员3和成员4分别根据其二进制实际值匹配为“输出过压”和“发生”,并分别对“输出过压”和“发生”所包含的子成员继续进行匹配,直到二进制结构体所有的成员都完成匹配后,返回解析结果。
通过这种递归匹配的方式,两个结构体的解析文本分别为:
“模块”“1970年1月1日零时1分0秒”“2号”“输出过压”“发生”“0V”
“模块”“1970年1月1日零时1分3秒”“3号”“过温”“发生”“0℃”
根据预设顺序排序后分别为:
“1970年1月1日零时1分0秒2号模块输出过压发生0V”
“1970年1月1日零时1分3秒3号模块过温发生0℃”。
实施例二
实施例二公开了一种对应上述实施例的二进制文件解析方法对应的装置,为上述实施例的虚拟装置结构,请参照图4所示,包括:
构建模块210,用于获取解析规则描述文件,根据所述解析规则描述文件,调用递归函数构建树状结构;
接收模块220,用于接收二进制文件,将所述二进制文件转换为若干个二进制结构体;
解析模块230,用于所述若干二进制结构体依次递归调用所述结构体树状结构,得到所述二进制文件的解析文本。
优选地,所述解析规则描述文件包括成员、成员关系、所述成员的二进制值翻译表,其中所述成员包括成员标签和成员ID,所述成员标签分为替换标签和追加标签,所述替换标签根据所述成员的二进制值确定翻译文本,所述追加标签在所述成员的二进制值后添加额外文本;所述成员ID为所述成员的编号。
优选地,所述成员关系根据所述成员ID形成从属关系,包括父成员及子成员,其中,成员标签为所述追加标签的成员为子成员。
优选地,根据所述解析规则描述文件,调用递归函数构建结构体树状结构,具体包括如下步骤:
预设虚拟成员为所述结构体树状结构的根节点,递归遍历所述解析规则描述文件:
将未指定父成员的成员作为父节点,所述父节点为所述根节点的子节点;
根据所述成员关系,将指定父成员的成员作为相应父成员的子节点;
当所述解析规则描述文件中的所有成员均加入所述结构体树状结构,停止递归遍历。
所述树状结构中的节点存储所述成员的结构体,所述成员的结构体包括所述成员的成员ID、所述成员的成员标签以及所述成员的二进制值翻译表。
优选地,通过所述若干二进制结构体依次递归调用所述结构体树状结构,得到所述二进制文件的解析文本,包括以下步骤:
通过所述二进制结构体递归遍历所述树状结构,即根据所述二进制结构体中的二进制成员的取值,确定相应的成员ID,根据所述相应的成员ID依次将所述二进制结构体中的二进制成员与所述结构体树状结构中的成员进行匹配;
将匹配成功的二进制成员根据相应的成员标签进行二进制值翻译,得到每个二进制值的翻译文本;
合并所述每个二进制值的翻译文本,得到所述二进制结构体的解析文本;
合并所述若干个二进制结构体的解析文本,得到所述二进制文件的解析文本。
优选地,合并所述每个二进制值的翻译文本,包括以下步骤:
根据预设顺序对所述二进制值的翻译文本进行排序。
实施例三
图5为本发明实施例三提供的一种电子设备的结构示意图,如图5所示,该电子设备包括处理器310、存储器320、输入装置330和输出装置340;计算机设备中处理器310的数量可以是一个或多个,图5中以一个处理器310为例;电子设备中的处理器310、存储器320、输入装置330和输出装置340可以通过总线或其他方式连接,图5中以通过总线连接为例。
存储器320作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的继电器衔铁运动状态检测方法对应的程序指令/模块(例如,二进制文件解析装置中的构建模块210、接收模块220和解析模块230)。处理器310通过运行存储在存储器320中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现上述实施例一的二进制文件解析方法。
存储器320可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器320可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器320可进一步包括相对于处理器310远程设置的存储器,这些远程存储器可以通过网络连接至电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置330可用于接收输入的描述文件等。输出装置340可包括显示屏等显示设备。
实施例四
本发明实施例四还提供一种包含计算机可执行指令的存储介质,该存储介质可用于计算机执行二进制文件解析方法,该方法包括:
获取解析规则描述文件,根据所述解析规则描述文件,调用递归函数构建树状结构;
接收二进制文件,将所述二进制文件转换为若干个二进制结构体;
对所述若干二进制结构体依次递归调用所述结构体树状结构,得到所述二进制文件的解析文本。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明实施例所提供的基于二进制文件解析方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台电子设备(可以是手机,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述基于二进制文件解析方法装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
对本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及形变,而所有的这些改变以及形变都应该属于本发明权利要求的保护范围之内。
Claims (10)
1.一种二进制文件解析方法,其特征在于,包括以下步骤:
获取解析规则描述文件,根据所述解析规则描述文件,调用递归函数构建结构体树状结构;
接收二进制文件,将所述二进制文件转换为若干个二进制结构体;
通过所述若干二进制结构体依次递归调用所述结构体树状结构,得到所述二进制文件的解析文本。
2.如权利要求1所述的二进制文件解析方法,其特征在于,所述解析规则描述文件包括成员、成员关系、所述成员的二进制值翻译表,其中所述成员包括成员标签和成员ID,所述成员标签分为替换标签和追加标签,所述替换标签根据所述成员的二进制值确定翻译文本,所述追加标签在所述成员的二进制值后添加额外文本;所述成员ID为所述成员的编号。
3.如权利要求2所述的二进制文件解析方法,其特征在于,所述成员关系根据所述成员ID形成从属关系,包括父成员及子成员,其中,成员标签为所述追加标签的成员为子成员。
4.如权利要求2所述的二进制文件解析方法,其特征在于,根据所述解析规则描述文件,调用递归函数构建结构体树状结构,具体包括如下步骤:
预设虚拟成员为所述结构体树状结构的根节点,递归遍历所述解析规则描述文件:
将未指定父成员的成员作为父节点,所述父节点为所述根节点的子节点;
根据所述成员关系,将指定父成员的成员作为相应父成员的子节点;
当所述解析规则描述文件中的所有成员均加入所述结构体树状结构,停止递归遍历。
5.如权利要求4所述的二进制文件解析方法,其特征在于,所述树状结构中的节点存储所述成员的结构体,所述成员的结构体包括所述成员的成员ID、所述成员的成员标签以及所述成员的二进制值翻译表。
6.如权利要求1所述的二进制文件解析方法,其特征在于,通过所述若干二进制结构体依次递归调用所述结构体树状结构,得到所述二进制文件的解析文本,包括以下步骤:
通过所述二进制结构体递归遍历所述树状结构,即根据所述二进制结构体中的二进制成员的取值,确定相应的成员ID,根据所述相应的成员ID依次将所述二进制结构体中的二进制成员与所述结构体树状结构中的成员进行匹配;
将匹配成功的二进制成员根据相应的成员标签进行二进制值翻译,得到每个二进制值的翻译文本;
合并所述每个二进制值的翻译文本,得到所述二进制结构体的解析文本;
合并所述若干个二进制结构体的解析文本,得到所述二进制文件的解析文本。
7.如权利要求6所述的二进制文件解析方法,其特征在于,合并所述每个二进制值的翻译文本,包括以下步骤:
根据预设顺序对所述二进制值的翻译文本进行排序。
8.一种二进制文件解析装置,其特征在于,其包括:
构建模块,用于获取解析规则描述文件,根据所述解析规则描述文件,调用递归函数构建结构体树状结构;
接收模块,用于接收二进制文件,将所述二进制文件转换为若干个二进制结构体;
解析模块,用于通过所述若干二进制结构体依次递归调用所述结构体树状结构,得到所述二进制文件的解析文本。
9.一种电子设备,其包括处理器、存储介质以及计算机程序,所述计算机程序存储于存储介质中,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7任一项所述的二进制文件解析方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7任一项所述的二进制文件解析方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911110650.0A CN111090417B (zh) | 2019-11-14 | 2019-11-14 | 二进制文件解析方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911110650.0A CN111090417B (zh) | 2019-11-14 | 2019-11-14 | 二进制文件解析方法、装置、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111090417A true CN111090417A (zh) | 2020-05-01 |
CN111090417B CN111090417B (zh) | 2023-11-28 |
Family
ID=70393508
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911110650.0A Active CN111090417B (zh) | 2019-11-14 | 2019-11-14 | 二进制文件解析方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111090417B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112148673A (zh) * | 2020-09-22 | 2020-12-29 | 北京中房智宝科技有限公司 | 一种多二进制合并成一个二进制文件读写错误的解决方法 |
CN113791769A (zh) * | 2021-09-23 | 2021-12-14 | 上海淇玥信息技术有限公司 | 一种复杂结构的数据取值方法、装置和电子设备 |
CN113807076A (zh) * | 2021-09-22 | 2021-12-17 | 上海大学 | 一种航海矢量文件的解析、生成方法及系统 |
CN114938397A (zh) * | 2022-05-17 | 2022-08-23 | 浙江木链物联网科技有限公司 | 一种基于kaitai的高效率协议解包组包方法、系统和可读存储介质 |
CN116932149A (zh) * | 2023-09-18 | 2023-10-24 | 北京中电华大电子设计有限责任公司 | 数据处理方法和装置 |
CN116932626A (zh) * | 2023-07-27 | 2023-10-24 | 北京和德宇航技术有限公司 | 一种数据解析方法、装置、设备及存储介质 |
CN116955209A (zh) * | 2023-09-18 | 2023-10-27 | 北京中电华大电子设计有限责任公司 | WebAssembly虚拟机的测试方法和装置 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6138272A (en) * | 1997-09-25 | 2000-10-24 | Nec Corporation | GDMO translator, method of GDMO translation, and recording medium containing program for GDMO translator |
WO2001027754A2 (en) * | 1999-10-13 | 2001-04-19 | Conexant Systems, Inc. | Compressed storage and transmission of high-level computer languages |
US20040123277A1 (en) * | 2002-12-18 | 2004-06-24 | Schrader Stuart Lyle | Method, system and computer product for parsing binary data |
US20080120608A1 (en) * | 2006-11-17 | 2008-05-22 | Rohit Shetty | Generating a statistical tree for encoding/decoding an xml document |
CN103150471A (zh) * | 2013-02-22 | 2013-06-12 | 深圳市共进电子股份有限公司 | 一种拨号规则匹配方法和装置 |
CN103631772A (zh) * | 2012-08-29 | 2014-03-12 | 阿里巴巴集团控股有限公司 | 机器翻译方法及装置 |
CN103645986A (zh) * | 2013-11-29 | 2014-03-19 | 北京广利核系统工程有限公司 | 一种编译器的可视化语法树的生成方法和重构方法 |
CN103677952A (zh) * | 2013-12-18 | 2014-03-26 | 华为技术有限公司 | 编解码器生成装置及方法 |
CN104375879A (zh) * | 2014-11-26 | 2015-02-25 | 康烁 | 基于执行树深度的二进制翻译方法和装置 |
CN109189393A (zh) * | 2018-07-24 | 2019-01-11 | 中国联合网络通信集团有限公司 | 业务处理方法及装置 |
CN109542664A (zh) * | 2018-12-13 | 2019-03-29 | 平安科技(深圳)有限公司 | 基于人工智能的文件校验方法、装置及计算机设备 |
CN110377291A (zh) * | 2019-06-19 | 2019-10-25 | 深圳壹账通智能科技有限公司 | 结构化数据转换方法、装置、计算机设备和存储介质 |
-
2019
- 2019-11-14 CN CN201911110650.0A patent/CN111090417B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6138272A (en) * | 1997-09-25 | 2000-10-24 | Nec Corporation | GDMO translator, method of GDMO translation, and recording medium containing program for GDMO translator |
WO2001027754A2 (en) * | 1999-10-13 | 2001-04-19 | Conexant Systems, Inc. | Compressed storage and transmission of high-level computer languages |
US20040123277A1 (en) * | 2002-12-18 | 2004-06-24 | Schrader Stuart Lyle | Method, system and computer product for parsing binary data |
CN1509007A (zh) * | 2002-12-18 | 2004-06-30 | GEҽ��ϵͳ��Ϣ������˾ | 用于解析二进制数据的方法、系统及计算机产品 |
US20080120608A1 (en) * | 2006-11-17 | 2008-05-22 | Rohit Shetty | Generating a statistical tree for encoding/decoding an xml document |
CN103631772A (zh) * | 2012-08-29 | 2014-03-12 | 阿里巴巴集团控股有限公司 | 机器翻译方法及装置 |
CN103150471A (zh) * | 2013-02-22 | 2013-06-12 | 深圳市共进电子股份有限公司 | 一种拨号规则匹配方法和装置 |
CN103645986A (zh) * | 2013-11-29 | 2014-03-19 | 北京广利核系统工程有限公司 | 一种编译器的可视化语法树的生成方法和重构方法 |
CN103677952A (zh) * | 2013-12-18 | 2014-03-26 | 华为技术有限公司 | 编解码器生成装置及方法 |
CN104375879A (zh) * | 2014-11-26 | 2015-02-25 | 康烁 | 基于执行树深度的二进制翻译方法和装置 |
CN109189393A (zh) * | 2018-07-24 | 2019-01-11 | 中国联合网络通信集团有限公司 | 业务处理方法及装置 |
CN109542664A (zh) * | 2018-12-13 | 2019-03-29 | 平安科技(深圳)有限公司 | 基于人工智能的文件校验方法、装置及计算机设备 |
CN110377291A (zh) * | 2019-06-19 | 2019-10-25 | 深圳壹账通智能科技有限公司 | 结构化数据转换方法、装置、计算机设备和存储介质 |
Non-Patent Citations (1)
Title |
---|
魏纪东;王昭顺;戴桂兰;戴军;: "树形结构数据帧解析和处理", 小型微型计算机系统, no. 12 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112148673A (zh) * | 2020-09-22 | 2020-12-29 | 北京中房智宝科技有限公司 | 一种多二进制合并成一个二进制文件读写错误的解决方法 |
CN113807076A (zh) * | 2021-09-22 | 2021-12-17 | 上海大学 | 一种航海矢量文件的解析、生成方法及系统 |
CN113807076B (zh) * | 2021-09-22 | 2024-06-04 | 上海大学 | 一种航海矢量文件的解析、生成方法及系统 |
CN113791769A (zh) * | 2021-09-23 | 2021-12-14 | 上海淇玥信息技术有限公司 | 一种复杂结构的数据取值方法、装置和电子设备 |
CN114938397A (zh) * | 2022-05-17 | 2022-08-23 | 浙江木链物联网科技有限公司 | 一种基于kaitai的高效率协议解包组包方法、系统和可读存储介质 |
CN116932626A (zh) * | 2023-07-27 | 2023-10-24 | 北京和德宇航技术有限公司 | 一种数据解析方法、装置、设备及存储介质 |
CN116932626B (zh) * | 2023-07-27 | 2024-04-02 | 北京和德宇航技术有限公司 | 一种数据解析方法、装置、设备及存储介质 |
CN116932149A (zh) * | 2023-09-18 | 2023-10-24 | 北京中电华大电子设计有限责任公司 | 数据处理方法和装置 |
CN116955209A (zh) * | 2023-09-18 | 2023-10-27 | 北京中电华大电子设计有限责任公司 | WebAssembly虚拟机的测试方法和装置 |
CN116955209B (zh) * | 2023-09-18 | 2024-02-06 | 北京中电华大电子设计有限责任公司 | WebAssembly虚拟机的测试方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111090417B (zh) | 2023-11-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111090417B (zh) | 二进制文件解析方法、装置、设备及介质 | |
CN109104405B (zh) | 二进制协议编码、解码方法和装置 | |
CN108196880A (zh) | 软件项目知识图谱自动构造方法与系统 | |
CN109657121A (zh) | 一种基于网络爬虫的Web页面信息采集方法及装置 | |
CN107135429B (zh) | 弹幕消息解析方法、装置、电子设备及计算机可读储存介质 | |
CN108038212B (zh) | 一种数据交互方法、装置、系统、设备和存储介质 | |
CN108664546B (zh) | Xml数据结构转换方法和装置 | |
CN112835901A (zh) | 文件存储方法及装置、计算机设备、计算机可读存储介质 | |
CN118506901B (zh) | 一种基于属性值的条件分子生成方法及装置 | |
CN115567607A (zh) | 调用链路的处理方法、装置、系统、电子设备及存储介质 | |
CN113238740A (zh) | 代码生成方法、代码生成装置、存储介质及电子设备 | |
CN113792008A (zh) | 网络拓扑结构的获取方法、装置、电子设备及存储介质 | |
CN102929596A (zh) | 代码排查方法和相关装置 | |
CN105721451A (zh) | 一种可拓展的Modbus协议解析方法及装置 | |
CN114489594B (zh) | 一种命令解析处理方法及装置 | |
CN110806973A (zh) | 一种接口报文的自动生成方法及装置 | |
CN112230933B (zh) | 流程引擎自动转换方法、装置、电子介质及存储介质 | |
CN111026972B (zh) | 物联网中的订阅数据推送方法、装置、设备及存储介质 | |
CN114443656A (zh) | 一种可定制的自动化数据模型分析工具及其使用方法 | |
CN102486731A (zh) | 增强软件的软件调用栈的可视化的方法、设备和系统 | |
CN113886482B (zh) | 面向图数据库的数据自动入库方法、装置和设备 | |
CN115048913B (zh) | 一种命令处理方法、装置和电子设备 | |
CN109992293B (zh) | Android系统组件版本信息的组装方法及装置 | |
CN113761121B (zh) | 一种结构化数据的知识抽取方法 | |
CN113760271B (zh) | 一种生成用于描述页面的代码的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |