الفريق العربي للهندسة العكسية

نسخة كاملة : دالة FastStrLen
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
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