是否有任何Java框架的二进制文件的分析?
-
22-07-2019 - |
题
我的问题是,我想要分析的二进制文件的不同类型与一个通用分析器,这是实现。也许描述的文件格式用配置文件,该文件是读通过分析器或创建Java类分析的文件,根据某种分析的规则。
我已经搜查了相当一位在互联网上,但发现,几乎没有关于这一主题。
我找到了什么都是事处编译器的发电机(杰,Cojen,等等。) 但我不认为我可以用它们来生成的东西,用于分析的二进制文件。但我可能是错误的,假设。
是否有任何框架,处理特别是易分析的二进制文件或任何人都可以给我一个暗示我怎么可能使用parser/compiler发电机要这样做吗?
更新:我在寻找东西在那里我可以写一config-file喜欢
file:
header: FIXED("MAGIC")
body: content(10)
content:
value1: BYTE
value2: LONG
value3: STRING(10)
和它的自动生成的东西,它分析文件,开始与"魔法",随后的十倍的内容包(其本身包含一个字节,长以及一个10-byte string)。
Update2:我发现了一些可比我在寻找什么,"建造"但可悲的是,这是一个巨蟒框架。也许这可以帮助别人得到一个主意,我在寻找什么.
解决方案
给一个尝试 preon
其他提示
使用 Preon:
public class File {
@BoundString(match="MAGIC")
private String header;
@BoundList(size="10", type=Body.class)
private List<Body> body;
private static class Body {
@Bound
byte value1;
@Bound
long value2;
@BoundString(size="10")
String value3;
}
}
解码数据:
Codec<File> codec = Codecs.create(File.class);
File file = codecs.decode(codec, buffer);
让我知道如果你遇到的问题。
我已经使用进阅读的二进制文件和编写规则。;)的二进制文件只能有关的任何格式,因此没有任何一般性规则如何阅读。
框架并不总是让事情简单。在你的情况下,介绍文件长于代码以只读数据的使用进.
public static void parse(DataInput in) throws IOException {
// file:
// header: FIXED("MAGIC")
String header = readAsString(in, 5);
assert header.equals("MAGIC");
// body: content(10)
// ?? not sure what this means
// content:
for(int i=0;i<10;i++) {
// value1: BYTE
byte value1 = in.readByte();
// value2: LONG
long value2 = in.readLong();
// value3: STRING(10)
String value3 = readAsString(in, 10);
}
}
public static String readAsString(DataInput in, int len) throws IOException {
byte[] bytes = new byte[len];
in.readFully(bytes);
return new String(bytes);
}
如果你想有结构的文件可以使用Java配置文件。 http://www.google.co.uk/search?q=java+configuration+file
谷歌的 协议的缓冲区
分析器组合的图书馆是一个选项。 JParsec 工作正常,但是它可以是缓慢的。
我已经开发了一个框架Java其允许的二进制数据分析 https://github.com/raydac/java-binary-block-parser 在这种情况下,你应该只是描述结构你的二进制文件在pseudolanguage
你有没有看到世界的分析程序.一个很好的分析程序 yacc, ,并有可能成为一个港口的java。