![]() |
|
لماذا لا يتم نقل البيانات كما هي - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : لماذا لا يتم نقل البيانات كما هي (/showthread.php?tid=8582) |
لماذا لا يتم نقل البيانات كما هي - mohamed49 - 05-04-2017 عندي مشكل في نقل البيانات عند تحويلها الى سترنغ عن طريق copymemory عند تتبعها عن طريق عمل debug لها ارى ان البيانات مختلفة تماما هذه صورة وهذا المشروع ![]() وهذا المشروع RE: لماذا لا يتم نقل البيانات كما هي - mohamed49 - 06-04-2017 قلت ربما يتم التحويل عند النقل من decimal الى hex لكن المفروض ان 85 تعطينا 55وليس 56 و139 تعطينا بدورها حرف é RE: لماذا لا يتم نقل البيانات كما هي - mohamed49 - 06-04-2017 ربما فهمت المشكل وهي انني لم احول الشال كود حقيقة الى سترينغ لذلك لم يتم وضع البيانات بالشكل الصحيح ام اني مخطا RE: لماذا لا يتم نقل البيانات كما هي - Delphi4Us - 06-04-2017 انا لا اعرف لم اتعامل من قبل مع المؤشرات او النسخ بدوال مثل CopyMemory لعل احد مجرب هذه الامور يمر من هنا RE: لماذا لا يتم نقل البيانات كما هي - mohamed49 - 06-04-2017 (06-04-2017, 02:46 PM)Delphi4Us كتب : انا لا اعرف جزاك الله خيرا اخي على الرد RE: لماذا لا يتم نقل البيانات كما هي - Agmcz - 06-04-2017 وعليكم السلام arrRunPE ليست مصفوفة وإنما هي سلسلة نصية في حالتك فما داعي لكتابتها بهذا الشكل؟؟ عملية النسخ سليمة إنتبه معي لما يساوي هذه السلسلة في جدول الاسكي "85,139,236" 8 = 56 5 = 53 , = 44 1 = 49 3 = 51 9 = 57 , = 44 2 = 50 3 = 51 6 = 54 ------------- بما أنك تتعامل مع exe file فلماذا حولته إلى هذا الشكل الق نظرة في هذا الموضوع http://delphi4arab.net/forum/showthread.php?tid=5353 واستعمل الدالة function FileToStr(sPath tring; var sFile tring):Boolean;...... RE: لماذا لا يتم نقل البيانات كما هي - mohamed49 - 06-04-2017 راح اشوف المشكل انه عند استعمالها تلتقي ب nullbyte حاولت عمل replace لها بحرف اخر ولكن لم ينجح واخيرا قمت بحذف nullbyte وتم الحل لكن لم يشتغل جربت خوارزميات عديدة نفس المشكل القيت نظرة في هذا الموضوع http://delphi4arab.net/forum/showthread.php?tid=5353 يبدوا الامر معقد نوعا ما انا استعيض عن هذه الاكواد بطريقة مبسطة قراءة الملف في الميموري ستريم ثم وضع السترنغ في متغير بالاستعانة بدالة setstring وعمل حلقة على السترنغ ان كان هناك null byte اقوم بحذفه كود لا يتعدى 6 اسطر ربما لكن حتى مع تحويله الى سترنغ عند نقله عبر copymemory أجد انه لا ينقله كما هو وتظهر الرسالة المعهودة runtime error لو في مشروع بسيط لفهم الفكرة اكون شاكر جدا مشروع يكون بدون عملية تشفير ان امكن RE: لماذا لا يتم نقل البيانات كما هي - mohamed49 - 07-04-2017 هل حذف nullbyte يؤثر على الملف الناتج ؟ RE: لماذا لا يتم نقل البيانات كما هي - Agmcz - 07-04-2017 صراحة لا أعرف كيف سأجيبك عليك تدور تدور وترجع إلى نفس السؤال؟ ماذا تريد بالضبط؟ أنت أكيد تريد تشفير المصفوفة؟ RE: لماذا لا يتم نقل البيانات كما هي - mohamed49 - 07-04-2017 شوف اخي المشروع الذي صححته لي مرة تتذكره اكيد هنا http://www.delphi4arab.net/forum/showthread.php?tid=8425 اردت بدا ان تكون مصفوفة بايتات تكون مصفوفة سترينغ الشال كود والملف معا المشكل انه عند تحويل المصفوفتين الى سترنغ ثم اعادة ارجاعها لا تشتغل تمام جربت كذلك تشغيل السترنغ مباشرة لكن لم انجح عن طريق التعديل في كود التشغيل السابق var RunPEProc:procedure(Buffer Char;BufferLen WORD); stdcall;begin RunPEProc := @teststring[1]; RunPEProc(@exestring[1],length(exestring)); end. كتبت هذا الكود لتحويل المصفوفة الخاصو بالشال كود الى سترنغ لاني اخطات في التحويل في الكود السابق for c in arrRunPE do begin str:=str+ inttostr(ord(c))+','; end; str1:=EncodeString(str); ونفس الكود ايضا لتحويل مصفوفة بايتات الملف for c in test do begin str:=str+ inttostr(ord(c))+','; end; str1:=EncodeString(str); يعني بالمختصر المفيد هل يمكن تحويل المصفوفتين الى سترنغ وتشغيلهما عبر هذا الفنكشن var RunPEProc:procedure(Buffer Char;BufferLen WORD); stdcall;begin RunPEProc := @firststring[1]; RunPEProc(@secondstring[1],length(secondstring)); end. |