经典游戏资源阅读器简化了对游戏资源文件的分析
cgrr的Python项目详细描述
经典游戏资源阅读器
cgrr保存其他模块用于分析游戏的实用函数 资源文件。
包装内容
目前,cgrr.py提供了三种功能:
验证
,一个简单的函数,用于验证路径中是否存在某些文件文件
,与verify一起使用的一个名为duple的文件
文件读取器
,用于将文件读入词典的类
验证
向此函数传递一个文件列表(名为duple的文件的实例)和
路径,它将验证这些文件是否存在于该路径中。它的目的是
用于验证某个程序是否位于给定路径中,例如
检查程序的主要可执行文件是否在预期位置。
identifying_files=[File("ARCHERY.EXE",31616,"d8fae202edcc48d51a72026cbfbe7fa8"),]path="path/to/archery"verify(identifying_files,path)
上面对verify的调用将返回
true
路径/to/archery/archery.exe
存在,是31616
字节,并且具有md5哈希
d8fae202edcc48d51a72026cbfbe7fa8
。如果识别文件包含多个
文件
namedtuples,列表中描述的所有文件都必须存在。
文件
文件
只是表示文件的namedtuple。namedtuple的字段
分别是路径、大小
和md5
创建新的 路径应该相对于一些基本路径(例如,到
由该文件标识的程序),该程序将被传递到 filereader是为特定文件格式生成读取器的工厂。一
reader提供两种方法, 用 每行的格式为 或 如果未指定计数,则默认为1。 可选地,行可以包含一个字符来描述
文件中数字的结尾,以结构的形式。通过
默认情况下,假定为小尾数('<;')整数。 磅符号("")后面的字符被视为注释和
被忽略。 如果type是struct模块支持的内置类型之一(例如
uint16),它将由struct处理。对于内置类型,count是
作为结构的重复计数处理:uint32[4]表示四个32位
无符号整数(16字节),字符串[4]表示4字节字符串。 否则,类型将被视为用户定义的类型。那么count就是
变量占用的字节数,文件读取器将查找
对于名为parse_type的函数(例如parse_选项),在解压缩
数据。如果找到,将使用bytestring作为
参数和指定为变量值的返回值。
类似地,filereader将把变量传递给名为
unparse_type(例如unparse_options),它应该返回一个bytestring
打包数据时的长度计数。如果这些函数没有定义,
字节将按原样返回。 此模块使用的 上面指定的读取器将从26字节中提取三个变量
文件: 给定所需格式的文件,可以使用以下命令分析该文件: 它将产生 给一本字典ntries, 因为我们没有定义 如果您知道文件中数据的偏移量,但不一定知道
整个文件中,from_offset的 用 每行的格式为 或 格式定义的最后一行可能是: 偏移量和文件长度必须以十六进制指定。号码必须
以"0x"开头,可以使用大写或小写,即0x1a和
0x1A相当。 无需按任何特定顺序指定偏移量。 可选地,行可以包含一个字符来描述
文件中数字的结尾,以结构的形式。通过
默认情况下,假定为小尾数('<;')整数。 有关每条线剩余线段的说明,请参见
如果文件格式包含未知段,
因为 相当于: EOF语句不是必需的,但如果未指定,则变量
指定的最大偏移量也将假定为
文件。 py被cgrr项目中的其他模块使用。例如: CGRR在GPLv3或更高版本下可用。有关详细信息,请参见文件复制。文件
example=File("path/to/example.tle",12345,"0123456789abcdef0123456789abcdef")
verify
分开。size
是以字节为单位的文件大小。md5
是文件的md5哈希值。文件读取器
pack
和unpack
,用于解析和
正在从文件中断开数据。在发动机罩下,它使用结构
模块。
file reader(format)
构造一个文件读取器,其中format是
描述文件格式的字符串,例如:
score_reader=FileReader("""<Uint32 score # Score at index 0x00, before namestring[16] nameoptions[6] game_options # A six byte field with a custom data format""")
TYPE VARIABLE_NAME
TYPE[COUNT] VARIABLE_NAME
结构可以直接访问为
如果需要,score\u reader.struct
。分数
,一个(小尾数)32位无符号整数;名称
,一个
16字节字符串;和游戏选项
,自定义格式的6字节字段。data=scorefile.read(26)scores=score_reader.unpack(data)
分数
,一个有三个词条的字典scores={"name":"SomeName","score":1234,"game_options":b'......'}
pack
可用于生成
原始格式的分数文件。data=score_reader.pack({"name":"Cheater","score":9999,"game_options":b'......'})scorefile.write(data)
parse_options
和unparse_options
函数,
专门用于该变量的6个字节只需直接赋值。它
不过,分析选项可能更有用:defparse_options(b):return{'option'+str(i):b[i]foriinrange(6)}defunparse_options(o):returnbytes([o['option'+str(i)]foriinrange(6)])
文件读取器.from_offset
构造函数可能更有用。
from_offset(format_def)
构造一个文件读取器,其中format_def是
描述文件格式的字符串,例如:
identifying_files=[File("ARCHERY.EXE",31616,"d8fae202edcc48d51a72026cbfbe7fa8"),]path="path/to/archery"verify(identifying_files,path)
0
identifying_files=[File("ARCHERY.EXE",31616,"d8fae202edcc48d51a72026cbfbe7fa8"),]path="path/to/archery"verify(identifying_files,path)
1
identifying_files=[File("ARCHERY.EXE",31616,"d8fae202edcc48d51a72026cbfbe7fa8"),]path="path/to/archery"verify(identifying_files,path)
2
identifying_files=[File("ARCHERY.EXE",31616,"d8fae202edcc48d51a72026cbfbe7fa8"),]path="path/to/archery"verify(identifying_files,path)
3
文件读取器的文档
from_offset
将自动填充未知段
使用虚拟变量。所以:identifying_files=[File("ARCHERY.EXE",31616,"d8fae202edcc48d51a72026cbfbe7fa8"),]path="path/to/archery"verify(identifying_files,path)
4
identifying_files=[File("ARCHERY.EXE",31616,"d8fae202edcc48d51a72026cbfbe7fa8"),]path="path/to/archery"verify(identifying_files,path)
5
示例用法
许可证
推荐PyPI第三方库