25-10-2018, 06:50 PM
افتباس من Coldzer0
إقتباس :عندى سؤال بخصوص الجزئيه المتعلقه بال Delphi unit
لما يتم مسح ال program واضافه unit و {$E exe} تحدث مشكله وهى عدم تمكن البرنامج من التعرف على المتغيرات النصيه
مثلا
command := 'Helo '; فى هذه الحاله لا يعمل بسبب عدم معرفه المتغيرات واماكنها ف الذاكره على حسب تحليلى من داخل olly
لان الكومبيلر لا يعمل اضافه لل _InitExe الى فى ملف الجديد الناتج من ال unit
حاولت باكثر من طريقه لكن للاسف لم ينجح الامر
اقتباس من STRELiZIA
إقتباس :نعم عند دفع الكومبايلر اهمال دوال الــ Initialization فانه يجب استبدالها بتغيير طريقة التفكير برمجيا...
مثلا، عند الاعتماد على الــ Affectation كما هو في العادة في البرمجة بدلفي الرمز ( :=: )
command := 'hello';
فإن نجاح عملية البناء تحتاج الى دوال اضافية يدمجها الكومبايلر مثل:
UStrClr@4 HandleFinally@0 UStrAsg@8
عند اهمالها قد تسبب اخطاء خلال التنفيذ او فشل عملية البناء...//{$DEFINE StandardBuild} {$E exe} {$IFDEF StandardBuild} program TabulaRasa32; {$ENDIF} {$IFNDEF StandardBuild} unit TabulaRasa32; interface implementation {$ENDIF} uses Windows; var str: string; begin str := 'AT4RE'; MessageBoxA(0, 'Try to build sample like me!', PAnsiChar(str), MB_ICONINFORMATION); end.
هذه الأوامر مع اضافة متغير نصي يتم استدعائه يعمل عندي بدون مشاكل، لكن الملف الناتج كبير الحجم اكثر من 10 كب... بعد دمج الكومبايلر لكل ما يحتاجه لمعالجة النصوص...
//{$DEFINE StandardBuild} {$E exe} {$IFDEF StandardBuild} program TabulaRasa32; {$ENDIF} {$IFNDEF StandardBuild} unit TabulaRasa32; interface implementation {$ENDIF} uses Windows, SysUtils; var str: PAnsiChar; begin SysUtils.StrCopy(str, 'AT4RE'); MessageBoxA(0, 'Try to build sample like me!', PAnsiChar(str), MB_ICONINFORMATION); end.
لذا يجب تغيير طريقة التفكير و عدم الاعتماد على تغليفات دلفي و الاعتماد الكلي على البرمجة بــ Pure API و العمل بالــ Pointers على طريقة السي بلص بلص... يصبح الناتج صغير الحجم... 3.5 كب
مع عدم نسيان Initialization و تصفير المتغيرات المحجوزة التابعة للمؤشرات اولا... (في تغليفات دلفي يتم عملها بدون تدخل المبرمج) و بطريقة المقالة فالتفكير يجب ان يكون بعقلية التعامل مع المتغيرات على طريقة السي بلص بلص.
implicit conversion (think forward)