我试图解析一个文件,遇到了以下问题:当从文件中读取DWORD时,我遇到了一个点,它只读取1个字节而不是4个字节,而EOF是而不是命中的。在
address_of_functions = []
DWORD = "<I"
size_dword = struct.calcsize(DWORD)
f.seek(rva2fa(export_directory.AddressOfFunctions, section_header,nt_header.FileHeader.NumberOfSections), 0)
for i in range(export_directory.NumberOfFunctions/2):
buffer = f.read(size_dword)
buffer1 = f.read(size_dword)
print i, len(buffer)
print i, len(buffer1)
address_of_functions.append(struct.unpack(DWORD, buffer))
为什么会出现长度为1的字符串?我知道一个事实,我可以阅读整个名单。在
编辑
NumberOfFunctions是1364,所以它不是。
我试图解析的文件是kernel32.dll
,因此不应该存在不需要的EOF。在
如果一个文件是二进制的,它可以包含任何值的字节,而不仅仅是可以打印的字符,你必须以二进制模式“rb”打开它。在
在Windows上尤其如此,因为如果以文本模式打开文件,如果底层系统库读取函数看到值为26(十六进制0x1A)的字节(对应于Ctrl-Z),则会报告EOF
以二进制模式打开文件可以避免这种和其他不便。在
相关问题 更多 >
编程相关推荐