السلام عليكم و رحمة الله و بركاته
أضططرت لاستخدام مكتبة ZLib في مشروع مبني على Win32 Api فقط (بدون ال Vcl)
لكن للأسف مكتبة ZLib تحتوي على استدعاء لكلاسات دلفي Vcl (حجم كبير للملف الناتج)
لذلك قمت بالتعديل على المكتبة حتى تعمل بدون مكتبة ال VCL => حجم صغير !!
تم تجربتها على دلفي 7 & دلفي XE4
Open Your Source .. Open Your Mind
كل من 2 users say قال شكرا ل SMP3 على المشاركة المفيدة2 users say Thank You to SMP3 for this post • mohamed49, haniid
شكرا أخي virtual على الدالة !!!
لماذا قام صاحبها بكتابتها بال opcode ؟
أمر محير ...
لقد قمت بتجربتها لكني صادفت العديد من المشاكل معها في فك الضغط
تم ضغط ملف بنجاح لكني لم أتمكن من فك ضغطه (لا أعلم السبب !! )
هل يوجد لديك مثال لاستخدامها ؟
إقتباس :صغر الحجم وسرعة التحميل + المحولية! تعمل على Win32 و Linux
ليس هناك دخل للسرعة أو المحمولية ..
أكواد الأسمبلي ستترجم مباشرة الى opCode
كتابته بال OpCode ==> عند الترجمة يتم تجاهل التحويل و يتم تضمينه مباشرة في الملف التنفيذي
لو فتحته ب Debuger ستجده على هيئة asm
عند عمل compiler للملف يتم تحويل أكواد الأسمبلي الى opcode (ان كانت بالفعل opcode سيتم تضمينها مباشرة => لا وجود لعملية التحويل)
عند فتح الملف exe بالمنقح يتم تحويل ال opcode الى أكواد أسمبلي
يعني كتابة الدالة بال opcode = كتابتها بال asm
هذا مثال بسيط يوضح الفكرة :
PHP كود :
function Sum1(a,b:Integer):Integer; asm Call @End DW 0D001h {ADD EAX,EDX} @End: end; function Sum2(a,b:Integer):Integer; asm ADD EAX,EDX end; procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text:= IntToStr(Sum1(5,10)); Edit2.Text:= IntToStr(Sum2(5,10)); end;
---------------------------------------------
اعتقادي أن صاحب الخوارزمية يريد أن يتفلسف و يمنع المبرمجين من الاطلاع على السورس ..
Open Your Source .. Open Your Mind
كل من 1 user says قال شكرا ل SMP3 على المشاركة المفيدة1 user says Thank You to SMP3 for this post • mohamed49
وجدت الحل .
يجب عليك ان تخزن قيمة حجم الملف الغير مضغوط اولا , داخل الملف المضغوط او في مكان اخر
عند فك الضغط استخرج هذه القيمة و احجز بها ذاكرة ل OutData , ثم استخدم الدالة DecompressData
لم تصدق مبرمجها موجود يمكن ان تساله عبر البريد او بمنتداه بsynopse
إقتباس :أكواد الأسمبلي ستترجم مباشرة الى opCode...
كتابة الدالة بال opcode = كتابتها بال asm
ليس تماما
عندما تكتبها بAsm أو حتى Pascal فان اختلاف الCompiler لا يعطي دائما نفس النتيجة (خواريزمية كاملة وليس فقط جمع Add)
انتبه هنا تعمل على Win32 و Linux وكما تعرف دلفي لا يعمل على Linux فماهو المترجم اذن
عندما تكتب OpCode فانت تحصل على ما تريد/كما تريد/أينما تريد بعد الترجمة وهنا تبتعد عن مفاجئات الOptimization التي يقوم بها المترجم ضف امكانية استخدام Runtime معدل/مختلف !
إقتباس :اعتقادي أن صاحب الخوارزمية يريد أن يتفلسف و يمنع المبرمجين من الاطلاع على السورس ..
غالبا ما نقول يتفلسف عندما لا نفهم الزاوية التي ينظر منها الاخر... اما منع المبرمجين اطلاقا، لان اي مبرمج سبق له وان عمل Debugging لبرامجه ويكفي فتح الملف بمنقح ليراها بالAssembly أو يفتحها بIDA Pro ليشاهد مخطط للخواريزيمة والأهم هذا ليس شيئ سري بل مجرد تحويل لخواريمية مفتوحة المصدر بلغة الC لتعمل بمترجم باسكال ودلفي
حسن حتى ترى الزاوية الق نظرة على هذا
كود :
http://bouchez.info/delphi-bzip.html
نفس الخواريزمية بثلاث طرق، وبرأيك اي طريقة اسرع/اصغر
على حد علمي مترجم دلفي او فري باسكال , لا يستطيع تحسين كود اسمبلي داخل دالة , فهو يبقيه كما هو .
حتى تعليمة inline لا تعمل اذا وجد سطر اسمبلي واحد فقط في دالة . في الاستدعاء ستجد call
كل من 1 user says قال شكرا ل virtual على المشاركة المفيدة1 user says Thank You to virtual for this post • mohamed49