16-03-2013, 07:02 PM
بالطبع يا أخي ستكون الدالة بطيئة لسببين
السبب الأول أنك تستخدم مصفوفة ذات بعد ثنائي
السبب الثاني الحلقة التي تستخدمها لقراءة الذاكرة
-------------------------------------
ليس هناك داعي لمصفوفة ثنائية طالما قيمة Value ثابة !!
+ القراءة من الذاكرة باستخدام حلقة سيبطأ الدالة
-----------------------------------
هذا مثال سريع :
السبب الأول أنك تستخدم مصفوفة ذات بعد ثنائي
السبب الثاني الحلقة التي تستخدمها لقراءة الذاكرة
-------------------------------------
ليس هناك داعي لمصفوفة ثنائية طالما قيمة 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;

