⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cehook.dpr.svn-base

📁 这是一段游戏修改工具的源代码.ring3功能由dephi开发,驱动是C开发.希望对大家有帮助
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
                inc(found);

                if found=number then
                begin
                  blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                  blockwrite(Memoryfile,pointer(foundvalue2)^,number*2,actualwrite);
                  found:=0;
                end;
              end;
              asm
                inc wordp;
              end;
            end;
          end;
        except

        end;

        postmessage(scansettings^.formscanningHandle,ESSetProgressbarPos,position,0);
      end;

      blockwrite(Addressfile,pointer(foundaddress)^,4*found,actualwrite);
      blockwrite(Memoryfile,pointer(foundvalue2)^,found*2,actualwrite);
      result:=filesize(Memoryfile) div 2;
    end;


    if scantype=valuebetween then
    begin
      for i:=0 to memoryregions do
      begin
        if not scansettings^.scanning then break;

        inc(position,memoryregion[i].MemorySize);
        wordp:=pointer(memoryregion[i].BaseAddress);

        try
          if scansettings^.FastScan then
          begin
            for j:=0 to (memoryregion[i].MemorySize div 2)-1 do
            begin
              if (wordp^>=wordvalue) and (wordp^<=wordvalue2) then
              begin
                foundaddress[found]:=dword(wordp);
                foundvalue2[found]:=wordp^;
                inc(found);

                if found=number then
                begin
                  blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                  blockwrite(Memoryfile,pointer(foundvalue2)^,number*2,actualwrite);
                  found:=0;
                end;
              end;
              inc(wordp);
            end;
          end
          else
          begin
            for j:=0 to memoryregion[i].MemorySize-2 do
            begin
              if (wordp^>=wordvalue) and (wordp^<=wordvalue2) then
              begin
                foundaddress[found]:=dword(wordp);
                foundvalue2[found]:=wordp^;
                inc(found);

                if found=number then
                begin
                  blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                  blockwrite(Memoryfile,pointer(foundvalue2)^,number*2,actualwrite);
                  found:=0;
                end;
              end;
              asm
                inc wordp;
              end;
            end;
          end;
        except

        end;

        postmessage(scansettings^.formscanningHandle,ESSetProgressbarPos,position,0);
      end;

      blockwrite(Addressfile,pointer(foundaddress)^,4*found,actualwrite);
      blockwrite(Memoryfile,pointer(foundvalue2)^,found*2,actualwrite);
      result:=filesize(Memoryfile) div 2;
    end;

  end else
  if vartype=2 then //dword
  begin
    //no need to bother with fastscan routines
    setlength(foundvalue3,number);
    if scantype=exact_value then
    begin
      for i:=0 to memoryregions do
      begin
        if not scansettings^.scanning then break;

        inc(position,memoryregion[i].MemorySize);
        dwordp:=pointer(memoryregion[i].BaseAddress);

        try
          if scansettings^.FastScan then
          begin
            for j:=0 to (memoryregion[i].MemorySize div 4)-1 do
            begin
              if dwordp^=dwordvalue then
              begin
                foundaddress[found]:=dword(dwordp);
                inc(found);

                if found=number then
                begin
                  if not FoundIsFilled then
                  begin
                    for k:=0 to number-1 do foundvalue3[k]:=dwordvalue;
                    FoundIsFilled:=true;
                  end;

                  blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                  blockwrite(Memoryfile,pointer(foundvalue3)^,number*4,actualwrite);
                  found:=0;
                end;
              end;
              inc(dwordp);
            end;
          end
          else
          begin
            for j:=0 to memoryregion[i].MemorySize-4 do
            begin
              if dwordp^=dwordvalue then
              begin
                foundaddress[found]:=dword(dwordp);
                inc(found);

                if found=number then
                begin
                  if not FoundIsFilled then
                  begin
                    for k:=0 to number-1 do foundvalue3[k]:=dwordvalue;
                    FoundIsFilled:=true;
                  end;

                  blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                  blockwrite(Memoryfile,pointer(foundvalue3)^,number*4,actualwrite);
                  found:=0;
                end;
              end;
              asm
                inc dwordp;
              end;
            end;
          end;
        except

        end;

        postmessage(scansettings^.formscanningHandle,ESSetProgressbarPos,position,0);
      end;

      if not foundisfilled then
        for i:=0 to found-1 do foundvalue3[i]:=dwordvalue;

      blockwrite(Addressfile,pointer(foundaddress)^,4*found,actualwrite);
      blockwrite(Memoryfile,pointer(foundvalue3)^,found*4,actualwrite);
      result:=filesize(Memoryfile) div 4;
    end;

    if scantype=BiggerThan then
    begin
      for i:=0 to memoryregions do
      begin
        if not scansettings^.scanning then break;

        inc(position,memoryregion[i].MemorySize);
        dwordp:=pointer(memoryregion[i].BaseAddress);

        try
          if scansettings^.FastScan then
          begin
            for j:=0 to (memoryregion[i].MemorySize-1 div 4)-1 do
            begin
              if dwordp^>dwordvalue then
              begin
                foundaddress[found]:=dword(dwordp);
                foundvalue3[found]:=dwordp^;
                inc(found);

                if found=number then
                begin
                  blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                  blockwrite(Memoryfile,pointer(foundvalue3)^,number*4,actualwrite);
                  found:=0;
                end;
              end;
              inc(dwordp);
            end;
          end
          else
          begin
            for j:=0 to memoryregion[i].MemorySize-4 do
            begin
              if dwordp^>dwordvalue then
              begin
                foundaddress[found]:=dword(dwordp);
                foundvalue3[found]:=dwordp^;
                inc(found);

                if found=number then
                begin
                  blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                  blockwrite(Memoryfile,pointer(foundvalue3)^,number*4,actualwrite);
                  found:=0;
                end;
              end;
              asm
                inc dwordp;
              end;
            end;
          end;
        except

        end;

        postmessage(scansettings^.formscanningHandle,ESSetProgressbarPos,position,0);
      end;

      blockwrite(Addressfile,pointer(foundaddress)^,4*found,actualwrite);
      blockwrite(Memoryfile,pointer(foundvalue3)^,found*4,actualwrite);
      result:=filesize(Memoryfile) div 4;
    end;

    if scantype=SmallerThan then
    begin
      for i:=0 to memoryregions do
      begin
        if not scansettings^.scanning then break;

        inc(position,memoryregion[i].MemorySize);
        dwordp:=pointer(memoryregion[i].BaseAddress);

        try
          if scansettings^.FastScan then
          begin
            for j:=0 to (memoryregion[i].MemorySize div 4)-1 do
            begin
              if dwordp^<dwordvalue then
              begin
                foundaddress[found]:=dword(wordp);
                foundvalue3[found]:=dwordp^;
                inc(found);

                if found=number then
                begin
                  blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                  blockwrite(Memoryfile,pointer(foundvalue3)^,number*4,actualwrite);
                  found:=0;
                end;
              end;
              inc(dwordp);
            end;
          end
          else
          begin
            for j:=0 to memoryregion[i].MemorySize-4 do
            begin
              if dwordp^<dwordvalue then
              begin
                foundaddress[found]:=dword(dwordp);
                foundvalue3[found]:=dwordp^;
                inc(found);

                if found=number then
                begin
                  blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                  blockwrite(Memoryfile,pointer(foundvalue3)^,number*4,actualwrite);
                  found:=0;
                end;
              end;
              asm
                inc dwordp;
              end;
            end;
          end;
        except

        end;

        postmessage(scansettings^.formscanningHandle,ESSetProgressbarPos,position,0);
      end;

      blockwrite(Addressfile,pointer(foundaddress)^,4*found,actualwrite);
      blockwrite(Memoryfile,pointer(foundvalue3)^,found*4,actualwrite);
      result:=filesize(Memoryfile) div 4;
    end;

    if scantype=ValueBetween then
    begin
      for i:=0 to memoryregions do
      begin
        if not scansettings^.scanning then break;

        inc(position,memoryregion[i].MemorySize);
        dwordp:=pointer(memoryregion[i].BaseAddress);

        try
          if scansettings^.FastScan then
          begin
            for j:=0 to (memoryregion[i].MemorySize div 4)-1 do
            begin
              if (dwordp^>=dwordvalue) and (dwordp^<=dwordvalue2) then
              begin
                foundaddress[found]:=dword(wordp);
                foundvalue3[found]:=dwordp^;
                inc(found);

                if found=number then
                begin
                  blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                  blockwrite(Memoryfile,pointer(foundvalue3)^,number*4,actualwrite);
                  found:=0;
                end;
              end;
              inc(dwordp);
            end;
          end
          else
          begin
            for j:=0 to memoryregion[i].MemorySize-4 do
            begin
              if (dwordp^>=dwordvalue) and (dwordp^<=dwordvalue2) then
              begin
                foundaddress[found]:=dword(dwordp);
                foundvalue3[found]:=dwordp^;
                inc(found);

                if found=number then
                begin
                  blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                  blockwrite(Memoryfile,pointer(foundvalue3)^,number*4,actualwrite);
                  found:=0;
                end;
              end;
              asm
                inc dwordp;
              end;
            end;
          end;
        except

        end;

        postmessage(scansettings^.formscanningHandle,ESSetProgressbarPos,position,0);
      end;

      blockwrite(Addressfile,pointer(foundaddress)^,4*found,actualwrite);
      blockwrite(Memoryfile,pointer(foundvalue3)^,found*4,actualwrite);
      result:=filesize(Memoryfile) div 4;
    end;
  end else
  if vartype=3 then //float
  begin
    //no need to bother with fastscan routines
    setlength(foundvalue4,number);
    if scantype=exact_value then
    begin
      for i:=0 to memoryregions do
      begin
        if not scansettings^.scanning then break;

        inc(position,memoryregion[i].MemorySize);
        singlep:=pointer(memoryregion[i].BaseAddress);

        if decim=0 then helpsingle3:=1 else
          helpsingle3:=1/((decim)*10);  //the range for extremerounded scans


        try
          if scansettings^.FastScan then
          begin
            for j:=0 to (memoryregion[i].MemorySize div 4)-1 do
            begin
              check:=(not (isnan(singlep^) or isinfinite(singlep^)));

              if check then
              case roundingtype of
                rounded:
                begin
                  helpsingle:=RoundTo(SingleP^,-decim);
                  check:=(helpsingle=SingleValue);
                end;

                extremerounded:
                begin
                  //if a scan for 1 it scans for    0<x<2
                  //if a scan for 1.0 it scans for  9.9<x<1.10
                  check:=((SingleP^<(singlevalue+helpsingle3)) and (SingleP^>(singlevalue-helpsingle3)) );
                end;

                truncated:
                begin
                  //if a scan for 1 it scans for    1>=x<2
                  //if a scan for 1.0 it scans for 1.0>=x<1.10
                  check:=((SingleP^<(singlevalue+helpsingle3)) and (singlep^>=singlevalue));
                end;

                else check:=false;
              end;


              if check then
              begin
                foundaddress[found]:=dword(singlep);
                foundvalue4[found]:=singlep^;
                inc(found);

                if found=number then
                begin
                  blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                  blockwrite(Memoryfile,pointer(foundvalue4)^,number*4,actualwrite);
                  found:=0;
                end;
              end;
              inc(singlep);
            end;
          end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -