【发布时间】:2012-03-30 14:06:55
【问题描述】:
我需要为MFT 记录(来自NTFS 文件系统)解析RAM 转储。
我过去做过一些关于读取多个文件的标题的编程(使用 FileSearcher 类等),但我不完全确定如何从大文件的开头开始读取,通读它,当找到某个值时,我需要从找到魔法值的点开始读取 1024 个字节(FILE0,在 MFT 条目的情况下),并使用介于该值和1024 字节范围的结尾。然后需要继续搜索下一条FILE0记录。
到目前为止,我有以下内容 - 我的意图是它读取源文件(这是一个 TFileStream)来寻找“FILE0”。当它找到它时,在这个阶段我只希望它报告它找到了一条记录并输出位置,但在适当的时候我需要它从找到 FILE0 的点开始读取一系列字节:
type
MFTRecordsStore = packed record
FILE0MagicMarker: array[0..4] of byte;
// Lots more follow....
end;
var
MFTHeaderArray : MFTRecordsStore;
FILE0Present : string;
i : integer;
begin
SourceFile.Position := 0;
while (SourceFile.Position < SourceFile.Size) do
begin
SourceFile.ReadBuffer(MFTHeaderArray, SizeOf(MFTHeaderArray));
for i := 0 to 4 do
FILE0Present := FILE0Present + IntToHex(MFTHeaderArray.FILE0MagicMarker[i], 2);
if FILE0Present = 'FILE0' then
begin
Memo1.Lines.Add('FILE0 Entry found at '+ IntToStr(SourceFile.Position));
end;
end;
end;
此代码编译并运行(它开始解析文件),但在 CPU 使用几分钟后,程序崩溃并报告它无法读取流。我感觉这与到达文件末尾有关,并且没有完整的“块”可供读取,所以它崩溃了?
解决办法是什么?
【问题讨论】:
标签: while-loop eof freepascal lazarus