使用ruby读取二进制文件时查找字节数组实例的最佳方法是什么?

时间:2015-10-21 20:34:15

标签: ruby reverse-engineering

我正在对一些旧数据库文件进行逆向工程。这很不错。到目前为止,我使用过的所有文件都有固定的宽度记录,宽度在标题中定义。非常直接..我知道标题长度,所以我可以在标题后面开始读取文件然后我知道X字节后来我到达记录的末尾。如果记录是30个字节并且标题是100,我可以这样做:

 file = IO.binread(path + file_name, end_of_header, end_of_file)
 read_file(file[0, 30]) #This calls a function that parses the data..

但是,有几个表具有动态宽度记录。因此,一个记录可以是100个字节,下一个可以是20个字节。记录与用户保存的文本量一样大。似乎没有任何记录记录长度的东西..

每个记录由分隔符(FEFE)分隔。我正在扫描下一个分隔符并以这种方式拉动记录,但是需要永远地逐字节地读取整个文件以查找匹配。有没有比扫描更好的方法来查找下一个匹配项或获取每个字节数组出现的所有索引的列表?

... RUBY

1 个答案:

答案 0 :(得分:0)

您可以为readline

指定分隔符
file.readline(sep="FEFE")

或者如果你的意思是2字符串十六进制字符串:

file.readline(sep="\xFE\xFE")

获取一条记录(包括分隔符)

或者您可以传递给代码块

file.readlines(sep="\xFE\xFE").each{|line|...}