delphi4arab منتديات دلفي للعرب
لماذا لا يتم نقل البيانات كما هي - نسخة قابلة للطباعة

+- 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)

الصفحات: 1 2 3


لماذا لا يتم نقل البيانات كما هي - mohamed49 - 05-04-2017

عندي مشكل في نقل البيانات عند تحويلها الى سترنغ عن   طريق copymemory  عند تتبعها عن طريق عمل debug لها ارى ان البيانات مختلفة تماما  هذه  صورة وهذا المشروع
[صورة: p_460n8s0o1.jpg]
وهذا المشروع


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 كتب : انا لا اعرف
لم اتعامل من قبل مع المؤشرات او النسخ بدوال مثل CopyMemory لعل احد مجرب هذه الامور يمر من هنا

جزاك الله خيرا اخي على الرد


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(sPathConfusedtring; var sFileConfusedtring):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(BufferTongueChar;BufferLenBig GrinWORD); 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(BufferTongueChar;BufferLenBig GrinWORD); stdcall;
begin

RunPEProc := @firststring[1];
RunPEProc(@secondstring[1],length(secondstring));
end.