ما هي اسرع الطرق لبحث عن بايتات في الذاكرة ؟
#2
بالطبع يا أخي ستكون الدالة بطيئة لسببين
السبب الأول أنك تستخدم مصفوفة ذات بعد ثنائي
السبب الثاني الحلقة التي تستخدمها لقراءة الذاكرة
-------------------------------------
ليس هناك داعي لمصفوفة ثنائية طالما قيمة Value ثابة !!
+ القراءة من الذاكرة باستخدام حلقة سيبطأ الدالة
-----------------------------------
هذا مثال سريع :
PHP كود :
type dwArray2= array of Cardinal;
function 
FindValueDWORD2(hProcess : Cardinal;
dwStartAddress, dwEndAddress : Cardinal;
Value : Integer): dwArray2 ;
type PCardinalArray = ^TCardinalArray;
  
TCardinalArray    = array[0..16383] of Cardinal ;
  var 
nCount,i,Len:Integer;
     
dwResult:PCardinalArray;
     
TempAddress:Cardinal;
     
nb:Cardinal;

begin
  nCount
:=0;
  
SetLength(Result,nCount+1);
  
Result[nCount]:=0;
if   
hProcess = 0 then Exit;
  if ( 
dwStartAddress > dwEndAddress ) then
  begin
    TempAddress 
:= dwEndAddress;
    
dwEndAddress := dwStartAddress;
    
dwStartAddress := TempAddress;
  
end;
  
Len:=dwEndAddress -dwStartAddress;

  
GetMem(dwResult,Len);
  
ReadProcessMemory(hProcess, Pointer(dwStartAddress), dwResult,Len, nb);
  for 
i:=0 to nb do begin
    
if (dwResult[i] = Value) then
     begin
      Inc
(nCount);
      
SetLength(Result,nCount);
      
Result[nCount-1]:=dwStartAddress+i;
     
end;
  
end;
  
FreeMem(dwResult,Len);
end; 
الرد


الردود في هذا الموضوع
ما هي اسرع الطرق لبحث عن بايتات في الذاكرة ؟ - بواسطة SMP3 - 16-03-2013, 07:02 PM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم