delphi4arab منتديات دلفي للعرب

نسخة كاملة : ما هي اسرع الطرق لبحث عن بايتات في الذاكرة ؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2 3
بالنسبة لسرعة الدالة فهي اسرع من دالتي بعشرات المرات Smile

لكن لدي سؤال خارجي Smile .... عندما ابحث داخل النطاق 00000000 إلى 7FFFFFFF تظهر رسالة تخبر ان هناك
خطأ بالنطاق ... اي اني ابحث في نطاق غير موجود غالباً ... نص الرسالة :
Range check error.

كيف اتخطاء هذه المشكلة
وكيف اعرف نطاق ذاكرة البرنامج الهدف ؟
أعتقد أن الاجابة على هذا السؤال ليست صعبة عليك .. كونك كراكر و تستخدم Olly Smile
هل يعني لك هذا الرقم شيئأ 00401000 !!
أصغر قيمة هي ال ImageBase الخاصة بال exe وليست 0
لحل المشكلة قم بالمقارنة بين ال ImageBase

أخي ALmuhhnad ان كنت من المهتمين بالسرعة فــأرجــوا أن تنظم لي في مشروعي FastFunctions
المشروع لم ينشر بعد ..لكن يمكنني أن أرسله لك من أجل المعاينة Smile
اهلاً من جديد اخي المبرمج smp3

إقتباس :أعتقد أن الاجابة على هذا السؤال ليست صعبة عليك .. كونك كراكر و تستخدم olly Smile
نعم صدقت ... اعرف هذه النقطة مسبقاً ...
لكن لدي قاعدة احياناً استعملها ... " عندما تريد ان تسئل اسئل وكأنك جاهل " ...
وهي تفيدني وتفيد غيري ...إلخ ( ربما فلسفه نفسية Smile )

إقتباس : أخي almuhhnad ان كنت من المهتمين بالسرعة فــأرجــوا أن تنظم لي في مشروعي fastfunctions
المشروع لم ينشر بعد ..لكن يمكنني أن أرسله لك من أجل المعاينة Smile

نعم بكل تأكيد ... لكن لا تتوقع مني الكثير ... فما زلت طالباً p:
قبل قليل حصلت على خطا ... وهو في الامر :
PHP كود :
SetLength(aResult,Len); 
حيث إذا اصبح الطول كبير جداً مثلاً : 7F000000
سيحدث خطاء وهو : Out of Memory.
حيث ان طوال المصفووفه خرج عن ذاكرة البرنامج ... وذلك يرجع لسبب اني لم احجز ذلكرة له مسبقاً ...
وعندما استعمل الدالة GetMem فهي لا تعمل إلا مع البيونتر ... جربت إستعمالها هكذا ...:
PHP كود :
var
ByteOfArray = array of byte;
begin
GetMem
(Pointer(aResult),Len);
....
....
....
FreeMem(Pointer(aResult),Len);
end; 
ونفس النتيجة تظهر رسالة : Out of memory.
... وجربت بعض الشياء التي لم اجربها مسبقاً مثل VirtualAlloc ولكن يبدو اني لم افلح بإستعماله او انها لا تصلح للامر ...

ما هي حلولكم لهذا الخطاء ؟
وشكراً لحسن القراءة
بالطبع لا يمكنك استعمال GetMem فهي خاصة فقط بال Pointer
و أيضا لا يمكنك استعمال VirtualAlloc
ال Result الخاصة بالدالة FindVale_Byte من نوع Array ..لذلك استخدم SetLength

هل القيمة 7F000000 موجودة في مجال الذاكرة يعني From ImageBase to the End ?
إقتباس :هل القيمة 7f000000 موجودة في مجال الذاكرة يعني from imagebase to the end ?
لا لا ... فقط وضعت هذا السؤال كحتمال ... انه سيحدث مستقبلاً ... وأعرف ان الرقم كبير بالنسبة لذااكرة برنامج
almuhhnad كتب :لا لا ... فقط وضعت هذا السؤال كحتمال ... انه سيحدث مستقبلاً ... وأعرف ان الرقم كبير بالنسبة لذااكرة برنامج

أعتذر ... لقد فهمت سؤالك بالخطأ
كنت أعتقد أن القيمة خاصة بالعنوان .. لكنها طول أليس كذلك ؟
---------------------------------------------------
القيمة 7f000000 تعني 2 جيجا , يعني هل تريد حقا استعمال 2 جيجا على نظام 32 بت !!
أعتقد أن المستخدم لن يفكر في هذا حتى كون أكبر حد للرام على 32 بت هو 3.6 أو 4 جيجا
يأخذ الوينداوز حوالي 1.4 جيجا + التطبيقات المشتغلة ستأخذ كمية معتبرة من الذاكرة + تطبيق بحجم 2 جيجا .. فكرة مستبعدة !!!
إقتباس :لكنها طول أليس كذلك ؟
نعم ... طوال الـ aResult التي سيتم ملئها بالـبايتات المقروئة
إقتباس :يأخذ الوينداوز حوالي 1.4 جيجا + التطبيقات المشتغلة ستأخذ كمية معتبرة من الذاكرة + تطبيق بحجم 2 جيجا .. فكرة مستبعدة !!!
طيب جيد ... تحليل سليم ومنطقي
كان ذلك الحجم لاأسؤ الحالات ... وايضاً بعتبار ان البرنامج سيكون لـ 32Bit و 64Bit فإن الامر منطقي نوعاً ما
وخصوصاً ان اكثر إستعمالات البرنامج ستتم على الالعاب ... فبعض الالعاب تأخذ 1 قيقاً ... وبعضها اكثر من ذلك ...
almuhhnad كتب :وخصوصاً ان اكثر إستعمالات البرنامج ستتم على الالعاب ... فبعض الالعاب تأخذ 1 قيقاً ... وبعضها اكثر من ذلك ...
أنا أعمل على نظام وينداوز 7 نسخة 32 بت ورام 2 جيجا
أستهلك حوالي 1.4 جيجا .. يعني بقي 0.6 جيجا .. لكن مع هذا فبامكاني تشغيل الألعاب التي تستهلك 1 جيجا أو 2 جيجا .. بسببين :
السبب الأول أغلب الألعاب تتطلب 2 جيجا لتشغيلها لكن في الحقية لن تستهلك هذه الكمية خلال وقت تشغيل اللعبة :
عندما يقوم المبرمج مثلا بحجز مكان في الذاكرة :

PHP كود :
setlength(a,1 or 2 giga) 

يقوم باجراء العمليات ثم بتحريرها

PHP كود :
finalize(a,1 or 2 giga) 

لذلك فاستهلاك الرام مؤقت
السبب الثاني الاعتماد على كرت الشاشة
عذراً ..كنت اعتقد ان الرسالة كانت تظهر بسبب عدم حجزي لذاكرة مسبقاً ... بينما كان سبب ظهور الرسالة
عدم وجود مساحة في الرام اصلا ... لأحتواء طول الـ aResult ... الآن اتضحت الامور @@"

هكذا انحلت اغلبية المشااكل ...

ساعيد ترتيب الدالة واكتبها Smile ...
وسيكون هناك حديث آخر P: ربما في هذا الموضوع او في موضوع آخر Smile
الصفحات : 1 2 3