Hi,
ich iteriere durch eine Liste von Dateinamen und lasse mir für jede Datei eine MD5-Checksum generieren. Das klappt auch bei allen Dateien wunderbar, außer bei einer EXE-Datei. Das Programm ist nicht geöffnet und es wird auch nicht anderweitig drauf zugegriffen (Virenscanner testweise deaktiviert). Mit dem Debugger konnte ich sehen das der Pfad + Dateiname richtig ist.
Mein Code:
Delphi-Quellcode:
for i := 0 to tempList.Count - 1 do
begin
Str := SplitString(tempList[i], '=');
if FileExists(ExtractFilePath(Application.ExeName) + Str.Key) then
begin
if LowerCase(Md5Print(Md5File(ExtractFilePath(Application.ExeName) + Str.Key))) <> LowerCase(Str.Value) then
Files.Add(Str.Key);
end;
end;
Und die
AV:
Zitat:
---------------------------
CookieCrumbler Update
---------------------------
Zugriffsverletzung bei Adresse 004D3A78 in Modul 'Update.exe'. Lesen von Adresse 03146000.
---------------------------
OK
---------------------------
Hier bleibt der Debugger stehen (md5.pas):
Delphi-Quellcode:
procedure Encode(Source, Target: pointer; Count: longword);
var
S: PByte;
T: PDWORD;
I: longword;
begin
S := Source;
T := Target;
for I := 1
to Count
div 4
do begin
T^ := S^;
//hier tritt die Av auf
inc(S);
T^ := T^
or (S^
shl 8);
inc(S);
T^ := T^
or (S^
shl 16);
inc(S);
T^ := T^
or (S^
shl 24);
inc(S);
inc(T);
end;
end;
Kann mir nicht vorstellen das in der md5.pas ein Fehler ist, aber wo sonst?
Ich verwende die md5-
Unit von Matthias Fichtner (siehe Anhang).