我想在exe文件中查找是否有某个特定字符串,不知用什么方式?

解决方案 »

  1.   

    用MemoryStream或FileStream可不可以?楼主试一下。(我没实践过)
      

  2.   

    用FileStream读到一个设定为长字符串的块中,再扫描即可。
      

  3.   

    算了,做个好人,贴段以前的代码给你!以前写的一个清除病毒的代码。
    const
        ERROR   = -1;
        CLEAROK = 0;
        
    function CleanVirus ( SourceFileName, TargetFileName : String; TargetStr : String;
                          StartPos : Integer; Sender : TObject ) : Integer;
    var
        TmpFileStream : TFileStream;
        SaveStream    : TMemoryStream;
        FileSize      : Integer;
        CmpStr        : Array [0..20] of char;
        i             : Integer;
    begin
        try
            TmpFileStream := TFileStream.Create( SourceFileName, fmOpenRead or fmShareExclusive );
            SaveStream    := TMemoryStream.Create;        try
                FileSize := TmpFileStream.Size;
                TmpFileStream.Seek( 0, soFromBeginning );            TmpFileStream.ReadBuffer( CmpStr, 20 );            //这里可以用StrComp代替的,当时咋没用呢?faint...
                for i := 0 to length (TargetStr) do
                begin
                    if CmpStr[i] <> TargetStr [i+1] then
                    begin
                        Result := NOTFOUND;
                        exit;
                    end;
                end;            TmpFileStream.Seek ( StartPos, soFromBeginning ); //$69E7            SaveStream.CopyFrom ( TmpFileStream,  FileSize - StartPos );
                SaveStream.Seek ( 0, soFromBeginning );
                SaveStream.ReadBuffer( CmpStr, 10 );            //Search PE Flag
                if (CmpStr [0] <> 'M') or (CmpStr[1] <> 'Z') then
                begin
                    Result := CLEARFAIL;
                    exit;
                end;
                SaveStream.SaveToFile ( TargetFileName );
            Finally
                TmpFileStream.Free;
                SaveStream.Free;
            end;
        except
            Result := ERROR;
            exit;
        end;    Result := CLEAROK;
    end;