الفريق العربي للهندسة العكسية
دالة FastStrLen - نسخة قابلة للطباعة

+- الفريق العربي للهندسة العكسية (https://www.at4re.net/f)
+-- قسم : منتديات البرمجة - Programming Forums (https://www.at4re.net/f/forum-5.html)
+--- قسم : البرمجة بلغة باسكال و الدلفي - Pascal & Delphi (https://www.at4re.net/f/forum-18.html)
+--- الموضوع : دالة FastStrLen (/thread-3292.html)



دالة FastStrLen - TeRcO - 16-09-2022

SMP3 كتب :  
السلام عليكم و رحمة الله وبركاته

كنت قد كتبت قبل أيام دالة تقوم بجلب طول سلسلة نصية FastStrLen
  function FastStrLen(const _Str:String):Integer;assembler;
 //---> BY SMP3 <---
asm
 XOR EDI,EDI
 TEST EAX,EAX
 JE @NUll
 @Loop:
 MOV CL,BYTE PTR [EAX]
 {$IFDEF Unicode}
 ADD EAX,2
 {$ELSE}
 INC EAX
 {$ENDIF}
 INC EDI
 TEST CL,CL
 JNE @Loop
 JMP @FIN
 @NUll:
 INC EDI
 @FIN:
 PUSH EDI
 POP EAX
 DEC EAX
end;
.. لكن حين تنقيحي لبعض المشاريع ب Olly , اكتشفت أنه توجد طريقة أسهل و أسرع للحصول على الطول

لو رجعنا للوراء ب 4 بايت من موقع السلسلة سنشاهد طول السلسلة النصية بالهكس .

في هذا المثال :
Length('Sample Text')= $B = 11
الدالة تصبح بالشكل التالي :
 
 function FastStrLen (s:string):integer;assembler;
asm
 MOV EAX,DWORD PTR DS :[EAX-4]
end;


rose