read(n)函数返回小于n个字节且未达到EOF

2024-10-02 14:16:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解析一个文件,遇到了以下问题:当从文件中读取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)) 

下面是我遇到问题的输出照片: enter image description here

为什么会出现长度为1的字符串?我知道一个事实,我可以阅读整个名单。在

编辑 NumberOfFunctions是1364,所以它不是。 我试图解析的文件是kernel32.dll,因此不应该存在不需要的EOF。在


Tags: 文件ofsize字节addressbufferexportfunctions
1条回答
网友
1楼 · 发布于 2024-10-02 14:16:59

如果一个文件是二进制的,它可以包含任何值的字节,而不仅仅是可以打印的字符,你必须以二进制模式“rb”打开它。在

在Windows上尤其如此,因为如果以文本模式打开文件,如果底层系统库读取函数看到值为26(十六进制0x1A)的字节(对应于Ctrl-Z),则会报告EOF

以二进制模式打开文件可以避免这种和其他不便。在

相关问题 更多 >

    热门问题