PTRPOSCHAR app store crash report #89

Open
opened 2024-02-04 22:46:11 +00:00 by benibela · 2 comments
benibela commented 2024-02-04 22:46:11 +00:00 (Migrated from github.com)

I got a crash report

backtrace:
  #00  pc 0x0000000000234b20  /data/app/...arm64_v8a.apk!liblclapp.so (PTRPOSCHAR+5750) (BuildId: 8c8d350a20b56cce2da74caedd3bc4b35311daa4)

on samsung r9q (Galaxy S21 FE 5G) with Android 14 (SDK 34)

If I put the address in gdb, it gives

Dump of assembler code for function PTRPOSCHAR:
5727    begin
   0x00234a50 <+0>:     fd      std    
   0x00234a51 <+1>:     7b bf   jnp    0x234a12 <POPFIRSTONEBIT+34>
   0x00234a53 <+3>:     a9 fd 03 00 91  test   eax,0x910003fd
   0x00234a58 <+8>:     ff 43 01        inc    DWORD PTR [ebx+0x1]
   0x00234a5b <+11>:    d1 e0   shl    eax,1
   0x00234a5d <+13>:    03 00   add    eax,DWORD PTR [eax]
   0x00234a5f <+15>:    39 e1   cmp    ecx,esp
   0x00234a61 <+17>:    07      pop    es
   0x00234a62 <+18>:    00 f9   add    cl,bh
   0x00234a64 <+20>:    e2 0b   loop   0x234a71 <PTRPOSCHAR+33>
   0x00234a66 <+22>:    00 f9   add    cl,bh
   0x00234a68 <+24>:    e3 0f   jecxz  0x234a79 <PTRPOSCHAR+41>
   0x00234a6a <+26>:    00 f9   add    cl,bh

5728     result:=-1;
   0x00234a6c <+28>:    00 00   add    BYTE PTR [eax],al
   0x00234a6e <+30>:    80 92 e0 13 00 f9 e0    adc    BYTE PTR [edx-0x6ffec20],0xe0

5729
5730     Size:=TextLength-Offset;
   0x00234a74 <+36>:    e0 0b   loopne 0x234a81 <PTRPOSCHAR+49>
   0x00234a76 <+38>:    40      inc    eax
   0x00234a77 <+39>:    f9      stc    
   0x00234a78 <+40>:    e1 0f   loope  0x234a89 <PTRPOSCHAR+57>
   0x00234a7a <+42>:    40      inc    eax
   0x00234a7b <+43>:    f9      stc    
   0x00234a7c <+44>:    00 00   add    BYTE PTR [eax],al
   0x00234a7e <+46>:    01 cb   add    ebx,ecx
   0x00234a80 <+48>:    e0 27   loopne 0x234aa9 <PTRPOSCHAR+89>
   0x00234a82 <+50>:    00 f9   add    cl,bh

5731     if (Offset<TextLength) and (TFLREPtrInt(Size)>0) then begin
   0x00234a84 <+52>:    e1 0f   loope  0x234a95 <PTRPOSCHAR+69>

   0x00234a86 <+54>:    40      inc    eax
   0x00234a87 <+55>:    f9      stc    
   0x00234a88 <+56>:    e0 0b   loopne 0x234a95 <PTRPOSCHAR+69>
   0x00234a8a <+58>:    40      inc    eax
   0x00234a8b <+59>:    f9      stc    
   0x00234a8c <+60>:    3f      aas    
   0x00234a8d <+61>:    00 00   add    BYTE PTR [eax],al
   0x00234a8f <+63>:    eb 0a   jmp    0x234a9b <PTRPOSCHAR+75>
   0x00234a91 <+65>:    16      push   ss
   0x00234a92 <+66>:    00 54 e0 27     add    BYTE PTR [eax+eiz*8+0x27],dl
   0x00234a96 <+70>:    40      inc    eax
   0x00234a97 <+71>:    f9      stc    
   0x00234a98 <+72>:    1f      pop    ds
   0x00234a99 <+73>:    00 00   add    BYTE PTR [eax],al
   0x00234a9b <+75>:    f1      int1   
   0x00234a9c <+76>:    ad      lods   eax,DWORD PTR ds:[esi]
   0x00234a9d <+77>:    15 00 54 e0 03  adc    eax,0x3e05400

5732
5733      XorMask:=TFLREUInt8(SearchChar);
   0x00234aa0 <+80>:    e0 03   loopne 0x234aa5 <PTRPOSCHAR+85>
   0x00234aa2 <+82>:    40      inc    eax
   0x00234aa3 <+83>:    39 e0   cmp    eax,esp
   0x00234aa5 <+85>:    1f      pop    ds
   0x00234aa6 <+86>:    00 f9   add    cl,bh

5734      XorMask:=XorMask or (XorMask shl 8);
   0x00234aa8 <+88>:    e0 1f   loopne 0x234ac9 <PTRPOSCHAR+121>
   0x00234aaa <+90>:    40      inc    eax
   0x00234aab <+91>:    f9      stc    
   0x00234aac <+92>:    00 dc   add    ah,bl
   0x00234aae <+94>:    78 d3   js     0x234a83 <PTRPOSCHAR+51>
   0x00234ab0 <+96>:    e1 1f   loope  0x234ad1 <PTRPOSCHAR+129>
   0x00234ab2 <+98>:    40      inc    eax
   0x00234ab3 <+99>:    f9      stc    

   0x00234ab4 <+100>:   20 00   and    BYTE PTR [eax],al
   0x00234ab6 <+102>:   00 aa e0 1f 00 f9       add    BYTE PTR [edx-0x6ffe020],ch

5735      XorMask:=XorMask or (XorMask shl 16);
   0x00234abc <+108>:   e0 1f   loopne 0x234add <PTRPOSCHAR+141>
   0x00234abe <+110>:   40      inc    eax
   0x00234abf <+111>:   f9      stc    
   0x00234ac0 <+112>:   00 bc 70 d3 e1 1f 40    add    BYTE PTR [eax+esi*2+0x401fe1d3],bh
   0x00234ac7 <+119>:   f9      stc    
   0x00234ac8 <+120>:   20 00   and    BYTE PTR [eax],al
   0x00234aca <+122>:   00 aa e0 1f 00 f9       add    BYTE PTR [edx-0x6ffe020],ch

5736    {$ifdef cpu64}
5737      XorMask:=XorMask or (XorMask shl 32);
   0x00234ad0 <+128>:   e0 1f   loopne 0x234af1 <PTRPOSCHAR+161>
   0x00234ad2 <+130>:   40      inc    eax
   0x00234ad3 <+131>:   f9      stc    
   0x00234ad4 <+132>:   01 7c 60 d3     add    DWORD PTR [eax+eiz*2-0x2d],edi
   0x00234ad8 <+136>:   e0 1f   loopne 0x234af9 <PTRPOSCHAR+169>
   0x00234ada <+138>:   40      inc    eax
   0x00234adb <+139>:   f9      stc    
   0x00234adc <+140>:   00 00   add    BYTE PTR [eax],al
   0x00234ade <+142>:   01 aa e0 1f 00 f9       add    DWORD PTR [edx-0x6ffe020],ebp

5738    {$endif}
5739
5740      CurrentChar:=@Text[Offset];
   0x00234ae4 <+148>:   e1 07   loope  0x234aed <PTRPOSCHAR+157>
   0x00234ae6 <+150>:   40      inc    eax
   0x00234ae7 <+151>:   f9      stc    
   0x00234ae8 <+152>:   e0 0f   loopne 0x234af9 <PTRPOSCHAR+169>
   0x00234aea <+154>:   40      inc    eax
   0x00234aeb <+155>:   f9      stc    
   0x00234aec <+156>:   20 00   and    BYTE PTR [eax],al
   0x00234aee <+158>:   00 8b e0 17 00 f9       add    BYTE PTR [ebx-0x6ffe820],cl


5741
5742      if Size>(SizeOf(TFLREPtrUInt)*2) then begin
   0x00234af4 <+164>:   e0 27   loopne 0x234b1d <PTRPOSCHAR+205>
   0x00234af6 <+166>:   40      inc    eax
   0x00234af7 <+167>:   f9      stc    
   0x00234af8 <+168>:   1f      pop    ds
   0x00234af9 <+169>:   40      inc    eax
   0x00234afa <+170>:   00 f1   add    cl,dh
   0x00234afc <+172>:   49      dec    ecx
   0x00234afd <+173>:   12 00   adc    al,BYTE PTR [eax]
   0x00234aff <+175>:   54      push   esp

5743
5744       // Alignment initialization
5745       CurrentChunk:=pointer(TFLREPtrUInt(TFLREPtrUInt(CurrentChar) and not (SizeOf(TFLREPtrUInt)-1)));
   0x00234b00 <+176>:   e0 17   loopne 0x234b19 <PTRPOSCHAR+201>
   0x00234b02 <+178>:   40      inc    eax
   0x00234b03 <+179>:   f9      stc    
   0x00234b04 <+180>:   00 f0   add    al,dh
   0x00234b06 <+182>:   7d 92   jge    0x234a9a <PTRPOSCHAR+74>
   0x00234b08 <+184>:   e0 1b   loopne 0x234b25 <PTRPOSCHAR+213>
   0x00234b0a <+186>:   00 f9   add    cl,bh

5746
5747       // Try to get first chunk
5748       if TFLREPtrUInt(CurrentChunk)>=TFLREPtrUInt(Text) then begin
   0x00234b0c <+188>:   e0 1b   loopne 0x234b29 <PTRPOSCHAR+217>
   0x00234b0e <+190>:   40      inc    eax
   0x00234b0f <+191>:   f9      stc    
   0x00234b10 <+192>:   e1 07   loope  0x234b19 <PTRPOSCHAR+201>
   0x00234b12 <+194>:   40      inc    eax
   0x00234b13 <+195>:   f9      stc    
   0x00234b14 <+196>:   1f      pop    ds
   0x00234b15 <+197>:   00 01   add    BYTE PTR [ecx],al

   0x00234b17 <+199>:   eb e3   jmp    0x234afc <PTRPOSCHAR+172>
   0x00234b19 <+201>:   00 00   add    BYTE PTR [eax],al
   0x00234b1b <+203>:   54      push   esp

5749        // Yes, we can the get first chunk
5750        XoredChunk:=CurrentChunk^ xor XorMask;
   0x00234b1c <+204>:   e0 1b   loopne 0x234b39 <PTRPOSCHAR+233>
   0x00234b1e <+206>:   40      inc    eax
   0x00234b1f <+207>:   f9      stc    
   0x00234b20 <+208>:   01 00   add    DWORD PTR [eax],eax
   0x00234b22 <+210>:   40      inc    eax
   0x00234b23 <+211>:   f9      stc    
   0x00234b24 <+212>:   e0 1f   loopne 0x234b45 <PTRPOSCHAR+245>
   0x00234b26 <+214>:   40      inc    eax
   0x00234b27 <+215>:   f9      stc    
   0x00234b28 <+216>:   00 00   add    BYTE PTR [eax],al
   0x00234b2a <+218>:   01 ca   add    edx,ecx
   0x00234b2c <+220>:   e0 23   loopne 0x234b51 <PTRPOSCHAR+257>
   0x00234b2e <+222>:   00 f9   add    cl,bh
   0x00234b30 <+224>:   02 00   add    al,BYTE PTR [eax]
   0x00234b32 <+226>:   00 14 ff        add    BYTE PTR [edi+edi*8],dl

5751       end else begin
5752        // No, so return dummy value to force to check the few first characters
5753        XoredChunk:=0;
   0x00234b34 <+228>:   ff 23   jmp    DWORD PTR [ebx]
   0x00234b36 <+230>:   00 f9   add    cl,bh

5754       end;
5755
5756       // Jump to next chunk
5757       inc(CurrentChunk);
   0x00234b38 <+232>:   e0 1b   loopne 0x234b55 <PTRPOSCHAR+261>
   0x00234b3a <+234>:   40      inc    eax
   0x00234b3b <+235>:   f9      stc    

   0x00234b3c <+236>:   00 20   add    BYTE PTR [eax],ah
   0x00234b3e <+238>:   00 91 e0 1b 00 f9       add    BYTE PTR [ecx-0x6ffe420],dl

5758
5759       // Subtract the first chunk from size
5760       dec(TFLREPtrUInt(Size),TFLREPtrUInt(CurrentChunk)-TFLREPtrUInt(CurrentChar));
   0x00234b44 <+244>:   e0 1b   loopne 0x234b61 <PTRPOSCHAR+273>
   0x00234b46 <+246>:   40      inc    eax
   0x00234b47 <+247>:   f9      stc    
   0x00234b48 <+248>:   e1 17   loope  0x234b61 <PTRPOSCHAR+273>
   0x00234b4a <+250>:   40      inc    eax
   0x00234b4b <+251>:   f9      stc    
   0x00234b4c <+252>:   00 00   add    BYTE PTR [eax],al
   0x00234b4e <+254>:   01 cb   add    ebx,ecx
   0x00234b50 <+256>:   e1 27   loope  0x234b79 <PTRPOSCHAR+297>
   0x00234b52 <+258>:   40      inc    eax
   0x00234b53 <+259>:   f9      stc    
   0x00234b54 <+260>:   21 00   and    DWORD PTR [eax],eax
   0x00234b56 <+262>:   00 cb   add    bl,cl
   0x00234b58 <+264>:   e1 27   loope  0x234b81 <PTRPOSCHAR+305>
   0x00234b5a <+266>:   00 f9   add    cl,bh

5761
5762       // Scan first chunk
5763       if (((XoredChunk+MaskA) and not XoredChunk) and MaskB)<>0 then begin
   0x00234b5c <+268>:   e0 23   loopne 0x234b81 <PTRPOSCHAR+305>
   0x00234b5e <+270>:   40      inc    eax
   0x00234b5f <+271>:   f9      stc    
   0x00234b60 <+272>:   e1 c3   loope  0x234b25 <PTRPOSCHAR+213>
   0x00234b62 <+274>:   00 b2 01 00 01 cb       add    BYTE PTR [edx-0x34feffff],dh
   0x00234b68 <+280>:   e0 23   loopne 0x234b8d <PTRPOSCHAR+317>
   0x00234b6a <+282>:   40      inc    eax
   0x00234b6b <+283>:   f9      stc    
   0x00234b6c <+284>:   e0 03   loopne 0x234b71 <PTRPOSCHAR+289>
   0x00234b6e <+286>:   20 aa 00 00 01 8a       and    BYTE PTR [edx-0x75ff0000],ch

   0x00234b74 <+292>:   00 c0   add    al,al
   0x00234b76 <+294>:   01 92 1f 00 00 f1       add    DWORD PTR [edx-0xeffffe1],edx
   0x00234b7c <+300>:   80 0b 00        or     BYTE PTR [ebx],0x0
   0x00234b7f <+303>:   54      push   esp

5764        while TFLREPtrUInt(CurrentChar)<TFLREPtrUInt(CurrentChunk) do begin
   0x00234b80 <+304>:   0e      push   cs
   0x00234b81 <+305>:   00 00   add    BYTE PTR [eax],al
   0x00234b83 <+307>:   14 e0   adc    al,0xe0
   0x00234bb8 <+360>:   e0 17   loopne 0x234bd1 <PTRPOSCHAR+385>
   0x00234bba <+362>:   40      inc    eax
   0x00234bbb <+363>:   f9      stc    
   0x00234bbc <+364>:   e1 1b   loope  0x234bd9 <PTRPOSCHAR+393>
   0x00234bbe <+366>:   40      inc    eax
   0x00234bbf <+367>:   f9      stc    
   0x00234bc0 <+368>:   1f      pop    ds
   0x00234bc1 <+369>:   00 01   add    BYTE PTR [ecx],al
   0x00234bc3 <+371>:   eb 03   jmp    0x234bc8 <PTRPOSCHAR+376>
   0x00234bc5 <+373>:   fe      (bad)  
   0x00234bc6 <+374>:   ff 54 49 00     call   DWORD PTR [ecx+ecx*2+0x0]

5765         if CurrentChar^=SearchChar then begin
   0x00234b84 <+308>:   e0 17   loopne 0x234b9d <PTRPOSCHAR+333>
   0x00234b86 <+310>:   40      inc    eax
   0x00234b87 <+311>:   f9      stc    
   0x00234b88 <+312>:   01 00   add    DWORD PTR [eax],eax
   0x00234b8a <+314>:   40      inc    eax
   0x00234b8b <+315>:   39 e0   cmp    eax,esp
   0x00234b8d <+317>:   03 40 39        add    eax,DWORD PTR [eax+0x39]
   0x00234b90 <+320>:   3f      aas    
   0x00234b91 <+321>:   00 00   add    BYTE PTR [eax],al
   0x00234b93 <+323>:   6b c1 00        imul   eax,ecx,0x0
   0x00234b96 <+326>:   00 54 e0 17     add    BYTE PTR [eax+eiz*8+0x17],dl

5766          result:=TFLREPtrUInt(CurrentChar)-TFLREPtrUInt(Text);

   0x00234b98 <+328>:   e0 17   loopne 0x234bb1 <PTRPOSCHAR+353>
   0x00234b9a <+330>:   40      inc    eax
   0x00234b9b <+331>:   f9      stc    
   0x00234b9c <+332>:   e1 07   loope  0x234ba5 <PTRPOSCHAR+341>
   0x00234b9e <+334>:   40      inc    eax
   0x00234b9f <+335>:   f9      stc    
   0x00234ba0 <+336>:   00 00   add    BYTE PTR [eax],al
   0x00234ba2 <+338>:   01 cb   add    ebx,ecx
   0x00234ba4 <+340>:   e0 13   loopne 0x234bb9 <PTRPOSCHAR+361>
   0x00234ba6 <+342>:   00 f9   add    cl,bh

5767          exit;
   0x00234ba8 <+344>:   6a 00   push   0x0
   0x00234baa <+346>:   00 14 e0        add    BYTE PTR [eax+eiz*8],dl

5768         end;
5769         inc(CurrentChar);
   0x00234bac <+348>:   e0 17   loopne 0x234bc5 <PTRPOSCHAR+373>
   0x00234bae <+350>:   40      inc    eax
   0x00234baf <+351>:   f9      stc    
   0x00234bb0 <+352>:   00 04 00        add    BYTE PTR [eax+eax*1],al
   0x00234bb3 <+355>:   91      xchg   ecx,eax
   0x00234bb4 <+356>:   e0 17   loopne 0x234bcd <PTRPOSCHAR+381>
   0x00234bb6 <+358>:   00 f9   add    cl,bh

5770        end;
5771       end;
5772
5773       // Scan until the last whole chunk
5774       while Size>=SizeOf(TFLREPtrUInt) do begin
   0x00234bc8 <+376>:   49      dec    ecx
   0x00234bc9 <+377>:   00 00   add    BYTE PTR [eax],al
   0x00234bcb <+379>:   14 e0   adc    al,0xe0
   0x00234cec <+668>:   e0 27   loopne 0x234d15 <PTRPOSCHAR+709>
   0x00234cee <+670>:   40      inc    eax

   0x00234cef <+671>:   f9      stc    
   0x00234cf0 <+672>:   1f      pop    ds
   0x00234cf1 <+673>:   20 00   and    BYTE PTR [eax],al
   0x00234cf3 <+675>:   f1      int1   
   0x00234cf4 <+676>:   c2 f6 ff        ret    0xfff6
   0x00234cf7 <+679>:   54      push   esp

5775        XoredChunk:=CurrentChunk^ xor XorMask;
   0x00234bcc <+380>:   e0 1b   loopne 0x234be9 <PTRPOSCHAR+409>
   0x00234bce <+382>:   40      inc    eax
   0x00234bcf <+383>:   f9      stc    
   0x00234bd0 <+384>:   00 00   add    BYTE PTR [eax],al
   0x00234bd2 <+386>:   40      inc    eax
   0x00234bd3 <+387>:   f9      stc    
   0x00234bd4 <+388>:   e1 1f   loope  0x234bf5 <PTRPOSCHAR+421>
   0x00234bd6 <+390>:   40      inc    eax
   0x00234bd7 <+391>:   f9      stc    
   0x00234bd8 <+392>:   20 00   and    BYTE PTR [eax],al
   0x00234bda <+394>:   00 ca   add    dl,cl
   0x00234bdc <+396>:   e0 23   loopne 0x234c01 <PTRPOSCHAR+433>
   0x00234bde <+398>:   00 f9   add    cl,bh

5776        if (((XoredChunk+MaskA) and not XoredChunk) and MaskB)<>0 then begin
   0x00234be0 <+400>:   e1 23   loope  0x234c05 <PTRPOSCHAR+437>
   0x00234be2 <+402>:   40      inc    eax
   0x00234be3 <+403>:   f9      stc    
   0x00234be4 <+404>:   e0 c3   loopne 0x234ba9 <PTRPOSCHAR+345>
   0x00234be6 <+406>:   00 b2 21 00 00 cb       add    BYTE PTR [edx-0x34ffffdf],dh
   0x00234bec <+412>:   e0 23   loopne 0x234c11 <PTRPOSCHAR+449>
   0x00234bee <+414>:   40      inc    eax
   0x00234bef <+415>:   f9      stc    
   0x00234bf0 <+416>:   e0 03   loopne 0x234bf5 <PTRPOSCHAR+421>
   0x00234bf2 <+418>:   20 aa 00 00 01 8a       and    BYTE PTR [edx-0x75ff0000],ch
   0x00234bf8 <+424>:   00 c0   add    al,al
   0x00234bfa <+426>:   01 92 1f 00 00 f1       add    DWORD PTR [edx-0xeffffe1],edx

   0x00234c00 <+432>:   a0 06 00 54 e0  mov    al,ds:0xe0540006

5777    {$ifdef POSCHARSAFECHECK}
5778         CurrentChar:=pointer(CurrentChunk);
5779         if CurrentChar[0]=SearchChar then begin
5780          result:=TFLREPtrUInt(pointer(@CurrentChar[0]))-TFLREPtrUInt(Text);
5781          exit;
5782         end;
5783         if CurrentChar[1]=SearchChar then begin
5784          result:=TFLREPtrUInt(pointer(@CurrentChar[1]))-TFLREPtrUInt(Text);
5785          exit;
5786         end;
5787         if CurrentChar[2]=SearchChar then begin
5788          result:=TFLREPtrUInt(pointer(@CurrentChar[2]))-TFLREPtrUInt(Text);
5789          exit;
5790         end;
5791         if CurrentChar[3]=SearchChar then begin
5792          result:=TFLREPtrUInt(pointer(@CurrentChar[3]))-TFLREPtrUInt(Text);
5793          exit;
5794         end;
5795    {$ifdef cpu64}
5796         if CurrentChar[4]=SearchChar then begin
5797          result:=TFLREPtrUInt(pointer(@CurrentChar[4]))-TFLREPtrUInt(Text);
5798          exit;
5799         end;
5800         if CurrentChar[5]=Pattern then begin
5801          result:=TFLREPtrUInt(pointer(@CurrentChar[5]))-TFLREPtrUInt(Text);
5802          exit;
5803         end;
5804         if CurrentChar[6]=SearchChar then begin
5805          result:=TFLREPtrUInt(pointer(@CurrentChar[6]))-TFLREPtrUInt(Text);
5806          exit;
5807         end;
5808         if CurrentChar[7]=SearchChar then begin
5809          result:=TFLREPtrUInt(pointer(@CurrentChar[7]))-TFLREPtrUInt(Text);

5810          exit;
5811         end;
5812    {$endif}
5813    {$else}
5814         CurrentChar:=pointer({$ifdef BIG_ENDIAN}TFLREPtrUInt(TFLREPtrUInt(CurrentChunk)+TFLREPtrUInt(SizeOf(TFLREPtrUInt)-1)){$else}CurrentChunk{$endif});
   0x00234c04 <+436>:   e0 1b   loopne 0x234c21 <PTRPOSCHAR+465>
   0x00234c06 <+438>:   40      inc    eax
   0x00234c07 <+439>:   f9      stc    
   0x00234c08 <+440>:   e0 17   loopne 0x234c21 <PTRPOSCHAR+465>
   0x00234c0a <+442>:   00 f9   add    cl,bh

5815         XoredChunk:=XoredChunk xor XorMask;
   0x00234c0c <+444>:   e1 23   loope  0x234c31 <PTRPOSCHAR+481>
   0x00234c0e <+446>:   40      inc    eax
   0x00234c0f <+447>:   f9      stc    
   0x00234c10 <+448>:   e0 1f   loopne 0x234c31 <PTRPOSCHAR+481>
   0x00234c12 <+450>:   40      inc    eax
   0x00234c13 <+451>:   f9      stc    
   0x00234c14 <+452>:   00 00   add    BYTE PTR [eax],al
   0x00234c16 <+454>:   01 ca   add    edx,ecx
   0x00234c18 <+456>:   e0 23   loopne 0x234c3d <PTRPOSCHAR+493>
   0x00234c1a <+458>:   00 f9   add    cl,bh

5816         if TFLREUInt8(SearchChar)=0 then begin
   0x00234c1c <+460>:   e0 03   loopne 0x234c21 <PTRPOSCHAR+465>
   0x00234c1e <+462>:   40      inc    eax
   0x00234c1f <+463>:   39 1f   cmp    DWORD PTR [edi],ebx
   0x00234c21 <+465>:   00 00   add    BYTE PTR [eax],al
   0x00234c23 <+467>:   71 81   jno    0x234ba6 <PTRPOSCHAR+342>
   0x00234c25 <+469>:   03 00   add    eax,DWORD PTR [eax]
   0x00234c27 <+471>:   54      push   esp

5817          // Special case
5818          XoredChunk:=not XoredChunk;

   0x00234c28 <+472>:   e0 23   loopne 0x234c4d <PTRPOSCHAR+509>
   0x00234c2a <+474>:   40      inc    eax
   0x00234c2b <+475>:   f9      stc    
   0x00234c2c <+476>:   e0 03   loopne 0x234c31 <PTRPOSCHAR+481>
   0x00234c2e <+478>:   20 aa e0 23 00 f9       and    BYTE PTR [edx-0x6ffdc20],ch

5819          while (XoredChunk<>0) and ((XoredChunk and $ff)<>$ff) do begin
   0x00234c34 <+484>:   07      pop    es
   0x00234c35 <+485>:   00 00   add    BYTE PTR [eax],al
   0x00234c37 <+487>:   14 e0   adc    al,0xe0
   0x00234c50 <+512>:   e0 23   loopne 0x234c75 <PTRPOSCHAR+549>
   0x00234c52 <+514>:   40      inc    eax
   0x00234c53 <+515>:   f9      stc    
   0x00234c54 <+516>:   1f      pop    ds
   0x00234c55 <+517>:   00 00   add    BYTE PTR [eax],al
   0x00234c57 <+519>:   f1      int1   
   0x00234c58 <+520>:   e0 02   loopne 0x234c5c <PTRPOSCHAR+524>
   0x00234c5a <+522>:   00 54 e0 23     add    BYTE PTR [eax+eiz*8+0x23],dl
   0x00234c5e <+526>:   40      inc    eax
   0x00234c5f <+527>:   f9      stc    
   0x00234c60 <+528>:   00 1c 40        add    BYTE PTR [eax+eax*2],bl
   0x00234c63 <+531>:   92      xchg   edx,eax
   0x00234c64 <+532>:   1f      pop    ds
   0x00234c65 <+533>:   fc      cld    
   0x00234c66 <+534>:   03 f1   add    esi,ecx
   0x00234c68 <+536>:   60      pusha  
   0x00234c69 <+537>:   02 00   add    al,BYTE PTR [eax]
   0x00234c6b <+539>:   54      push   esp
   0x00234c6c <+540>:   f3 ff   repz (bad) 
   0x00234c6e <+542>:   ff 17   call   DWORD PTR [edi]
   0x00234c70 <+544>:   11 00   adc    DWORD PTR [eax],eax
   0x00234c72 <+546>:   00 14 10        add    BYTE PTR [eax+edx*1],dl
   0x00234c75 <+549>:   00 00   add    BYTE PTR [eax],al
   0x00234c77 <+551>:   14 07   adc    al,0x7


5820           XoredChunk:=XoredChunk shr 8;
   0x00234c38 <+488>:   e0 23   loopne 0x234c5d <PTRPOSCHAR+525>
   0x00234c3a <+490>:   40      inc    eax
   0x00234c3b <+491>:   f9      stc    
   0x00234c3c <+492>:   00 fc   add    ah,bh
   0x00234c3e <+494>:   48      dec    eax
   0x00234c3f <+495>:   d3 e0   shl    eax,cl
   0x00234c41 <+497>:   23 00   and    eax,DWORD PTR [eax]
   0x00234c43 <+499>:   f9      stc    

5821           {$ifdef BIG_ENDIAN}dec{$else}inc{$endif}(CurrentChar);
   0x00234c44 <+500>:   e0 17   loopne 0x234c5d <PTRPOSCHAR+525>
   0x00234c46 <+502>:   40      inc    eax
   0x00234c47 <+503>:   f9      stc    
   0x00234c48 <+504>:   00 04 00        add    BYTE PTR [eax+eax*1],al
   0x00234c4b <+507>:   91      xchg   ecx,eax
   0x00234c4c <+508>:   e0 17   loopne 0x234c65 <PTRPOSCHAR+533>
   0x00234c4e <+510>:   00 f9   add    cl,bh

5822          end;
5823         end else begin
5824          while (XoredChunk<>0) and ((XoredChunk and $ff)<>TFLREUInt8(SearchChar)) do begin
   0x00234c78 <+552>:   07      pop    es
   0x00234c79 <+553>:   00 00   add    BYTE PTR [eax],al
   0x00234c7b <+555>:   14 e0   adc    al,0xe0
   0x00234c94 <+580>:   e0 23   loopne 0x234cb9 <PTRPOSCHAR+617>
   0x00234c96 <+582>:   40      inc    eax
   0x00234c97 <+583>:   f9      stc    
   0x00234c98 <+584>:   1f      pop    ds
   0x00234c99 <+585>:   00 00   add    BYTE PTR [eax],al
   0x00234c9b <+587>:   f1      int1   
   0x00234c9c <+588>:   c0 00 00        rol    BYTE PTR [eax],0x0
   0x00234c9f <+591>:   54      push   esp
   0x00234ca0 <+592>:   e0 23   loopne 0x234cc5 <PTRPOSCHAR+629>
   0x00234ca2 <+594>:   40      inc    eax

   0x00234ca3 <+595>:   f9      stc    
   0x00234ca4 <+596>:   00 1c 40        add    BYTE PTR [eax+eax*2],bl
   0x00234ca7 <+599>:   92      xchg   edx,eax
   0x00234ca8 <+600>:   e1 03   loope  0x234cad <PTRPOSCHAR+605>
   0x00234caa <+602>:   40      inc    eax
   0x00234cab <+603>:   39 1f   cmp    DWORD PTR [edi],ebx
   0x00234cad <+605>:   00 01   add    BYTE PTR [ecx],al
   0x00234caf <+607>:   eb 61   jmp    0x234d12 <PTRPOSCHAR+706>
   0x00234cb1 <+609>:   fe      (bad)  
   0x00234cb2 <+610>:   ff 54 e0 23     call   DWORD PTR [eax+eiz*8+0x23]

5825           XoredChunk:=XoredChunk shr 8;
   0x00234c7c <+556>:   e0 23   loopne 0x234ca1 <PTRPOSCHAR+593>
   0x00234c7e <+558>:   40      inc    eax
   0x00234c7f <+559>:   f9      stc    
   0x00234c80 <+560>:   00 fc   add    ah,bh
   0x00234c82 <+562>:   48      dec    eax
   0x00234c83 <+563>:   d3 e0   shl    eax,cl
   0x00234c85 <+565>:   23 00   and    eax,DWORD PTR [eax]
   0x00234c87 <+567>:   f9      stc    

5826           {$ifdef BIG_ENDIAN}dec{$else}inc{$endif}(CurrentChar);
   0x00234c88 <+568>:   e0 17   loopne 0x234ca1 <PTRPOSCHAR+593>
   0x00234c8a <+570>:   40      inc    eax
   0x00234c8b <+571>:   f9      stc    
   0x00234c8c <+572>:   00 04 00        add    BYTE PTR [eax+eax*1],al
   0x00234c8f <+575>:   91      xchg   ecx,eax
   0x00234c90 <+576>:   e0 17   loopne 0x234ca9 <PTRPOSCHAR+601>
   0x00234c92 <+578>:   00 f9   add    cl,bh

5827          end;
5828         end;
5829         if XoredChunk<>0 then begin
   0x00234cb4 <+612>:   e0 23   loopne 0x234cd9 <PTRPOSCHAR+649>
   0x00234cb6 <+614>:   40      inc    eax
c
   0x00234cb7 <+615>:   f9      stc    
   0x00234cb8 <+616>:   1f      pop    ds
   0x00234cb9 <+617>:   00 00   add    BYTE PTR [eax],al
   0x00234cbb <+619>:   f1      int1   
   0x00234cbc <+620>:   c0 00 00        rol    BYTE PTR [eax],0x0
   0x00234cbf <+623>:   54      push   esp

5830          result:=TFLREPtrUInt(pointer(CurrentChar))-TFLREPtrUInt(Text);
   0x00234cc0 <+624>:   e1 17   loope  0x234cd9 <PTRPOSCHAR+649>
   0x00234cc2 <+626>:   40      inc    eax
   0x00234cc3 <+627>:   f9      stc    
   0x00234cc4 <+628>:   e0 07   loopne 0x234ccd <PTRPOSCHAR+637>
   0x00234cc6 <+630>:   40      inc    eax
   0x00234cc7 <+631>:   f9      stc    
   0x00234cc8 <+632>:   20 00   and    BYTE PTR [eax],al
   0x00234cca <+634>:   00 cb   add    bl,cl
   0x00234ccc <+636>:   e0 13   loopne 0x234ce1 <PTRPOSCHAR+657>
   0x00234cce <+638>:   00 f9   add    cl,bh

5831          exit;
   0x00234cd0 <+640>:   20 00   and    BYTE PTR [eax],al
   0x00234cd2 <+642>:   00 14 e0        add    BYTE PTR [eax+eiz*8],dl

5832         end;
5833    {$endif}
5834        end;
5835        inc(CurrentChunk);
   0x00234cd4 <+644>:   e0 1b   loopne 0x234cf1 <PTRPOSCHAR+673>
   0x00234cd6 <+646>:   40      inc    eax
   0x00234cd7 <+647>:   f9      stc    
   0x00234cd8 <+648>:   00 20   add    BYTE PTR [eax],ah
   0x00234cda <+650>:   00 91 e0 1b 00 f9       add    BYTE PTR [ecx-0x6ffe420],dl

5836        dec(Size,SizeOf(TFLREPtrUInt));
   0x00234ce0 <+656>:   e0 27   loopne 0x234d09 <PTRPOSCHAR+697>
   0x00234ce2 <+658>:   40      inc    eax
   0x00234ce3 <+659>:   f9      stc    
   0x00234ce4 <+660>:   00 20   add    BYTE PTR [eax],ah
   0x00234ce6 <+662>:   00 d1   add    cl,dl
   0x00234ce8 <+664>:   e0 27   loopne 0x234d11 <PTRPOSCHAR+705>
   0x00234cea <+666>:   00 f9   add    cl,bh

5837       end;
5838
5839       // Set chunkwise to charwise pointer
5840       CurrentChar:=pointer(CurrentChunk);
   0x00234cf8 <+680>:   e0 1b   loopne 0x234d15 <PTRPOSCHAR+709>
   0x00234cfa <+682>:   40      inc    eax
   0x00234cfb <+683>:   f9      stc    
   0x00234cfc <+684>:   e0 17   loopne 0x234d15 <PTRPOSCHAR+709>
   0x00234cfe <+686>:   00 f9   add    cl,bh

5841      end;
5842
5843      // Scan rest of the remained characters, if there are any
5844      while Size>0 do begin
   0x00234d00 <+688>:   11 00   adc    DWORD PTR [eax],eax
   0x00234d02 <+690>:   00 14 e0        add    BYTE PTR [eax+eiz*8],dl
   0x00234d44 <+756>:   e0 27   loopne 0x234d6d <PTRPOSCHARSETOF2+13>
   0x00234d46 <+758>:   40      inc    eax
   0x00234d47 <+759>:   f9      stc    
   0x00234d48 <+760>:   1f      pop    ds
   0x00234d49 <+761>:   00 00   add    BYTE PTR [eax],al
   0x00234d4b <+763>:   f1      int1   
   0x00234d4c <+764>:   c8 fd ff 54     enter  0xfffd,0x54

5845       if CurrentChar^=SearchChar then begin
   0x00234d04 <+692>:   e0 17   loopne 0x234d1d <PTRPOSCHAR+717>
   0x00234d06 <+694>:   40      inc    eax
   0x00234d07 <+695>:   f9      stc    
   0x00234d08 <+696>:   01 00   add    DWORD PTR [eax],eax
   0x00234d0a <+698>:   40      inc    eax
   0x00234d0b <+699>:   39 e0   cmp    eax,esp
   0x00234d0d <+701>:   03 40 39        add    eax,DWORD PTR [eax+0x39]
   0x00234d10 <+704>:   3f      aas    
   0x00234d11 <+705>:   00 00   add    BYTE PTR [eax],al
   0x00234d13 <+707>:   6b c1 00        imul   eax,ecx,0x0
   0x00234d16 <+710>:   00 54 e1 17     add    BYTE PTR [ecx+eiz*8+0x17],dl

5846        result:=TFLREPtrUInt(pointer(CurrentChar))-TFLREPtrUInt(Text);
   0x00234d18 <+712>:   e1 17   loope  0x234d31 <PTRPOSCHAR+737>
   0x00234d1a <+714>:   40      inc    eax
   0x00234d1b <+715>:   f9      stc    
   0x00234d1c <+716>:   e0 07   loopne 0x234d25 <PTRPOSCHAR+725>
   0x00234d1e <+718>:   40      inc    eax
   0x00234d1f <+719>:   f9      stc    
   0x00234d20 <+720>:   20 00   and    BYTE PTR [eax],al
   0x00234d22 <+722>:   00 cb   add    bl,cl
   0x00234d24 <+724>:   e0 13   loopne 0x234d39 <PTRPOSCHAR+745>
   0x00234d26 <+726>:   00 f9   add    cl,bh

5847        exit;
   0x00234d28 <+728>:   0a 00   or     al,BYTE PTR [eax]
   0x00234d2a <+730>:   00 14 e0        add    BYTE PTR [eax+eiz*8],dl

5848       end;
5849       inc(CurrentChar);
   0x00234d2c <+732>:   e0 17   loopne 0x234d45 <PTRPOSCHAR+757>
   0x00234d2e <+734>:   40      inc    eax
   0x00234d2f <+735>:   f9      stc    
   0x00234d30 <+736>:   00 04 00        add    BYTE PTR [eax+eax*1],al
   0x00234d33 <+739>:   91      xchg   ecx,eax
   0x00234d34 <+740>:   e0 17   loopne 0x234d4d <PTRPOSCHAR+765>
   0x00234d36 <+742>:   00 f9   add    cl,bh

5850       dec(Size);
   0x00234d38 <+744>:   e0 27   loopne 0x234d61 <PTRPOSCHARSETOF2+1>
   0x00234d3a <+746>:   40      inc    eax
   0x00234d3b <+747>:   f9      stc    
   0x00234d3c <+748>:   00 04 00        add    BYTE PTR [eax+eax*1],al
   0x00234d3f <+751>:   d1 e0   shl    eax,1
   0x00234d41 <+753>:   27      daa    
   0x00234d42 <+754>:   00 f9   add    cl,bh

5851      end;
5852
5853     end;
5854    end;
   0x00234d50 <+768>:   e0 13   loopne 0x234d65 <PTRPOSCHARSETOF2+5>
   0x00234d52 <+770>:   40      inc    eax
   0x00234d53 <+771>:   f9      stc    
   0x00234d54 <+772>:   bf 03 00 91 fd  mov    edi,0xfd910003
   0x00234d59 <+777>:   7b c1   jnp    0x234d1c <PTRPOSCHAR+716>
   0x00234d5b <+779>:   a8 c0   test   al,0xc0
   0x00234d5d <+781>:   03 5f d6        add    ebx,DWORD PTR [edi-0x2a]



Perhaps something is wrong with CurrentChunk

I got a crash report backtrace: #00 pc 0x0000000000234b20 /data/app/...arm64_v8a.apk!liblclapp.so (PTRPOSCHAR+5750) (BuildId: 8c8d350a20b56cce2da74caedd3bc4b35311daa4) on samsung r9q (Galaxy S21 FE 5G) with Android 14 (SDK 34) If I put the address in gdb, it gives ``` Dump of assembler code for function PTRPOSCHAR: 5727 begin 0x00234a50 <+0>: fd std 0x00234a51 <+1>: 7b bf jnp 0x234a12 <POPFIRSTONEBIT+34> 0x00234a53 <+3>: a9 fd 03 00 91 test eax,0x910003fd 0x00234a58 <+8>: ff 43 01 inc DWORD PTR [ebx+0x1] 0x00234a5b <+11>: d1 e0 shl eax,1 0x00234a5d <+13>: 03 00 add eax,DWORD PTR [eax] 0x00234a5f <+15>: 39 e1 cmp ecx,esp 0x00234a61 <+17>: 07 pop es 0x00234a62 <+18>: 00 f9 add cl,bh 0x00234a64 <+20>: e2 0b loop 0x234a71 <PTRPOSCHAR+33> 0x00234a66 <+22>: 00 f9 add cl,bh 0x00234a68 <+24>: e3 0f jecxz 0x234a79 <PTRPOSCHAR+41> 0x00234a6a <+26>: 00 f9 add cl,bh 5728 result:=-1; 0x00234a6c <+28>: 00 00 add BYTE PTR [eax],al 0x00234a6e <+30>: 80 92 e0 13 00 f9 e0 adc BYTE PTR [edx-0x6ffec20],0xe0 5729 5730 Size:=TextLength-Offset; 0x00234a74 <+36>: e0 0b loopne 0x234a81 <PTRPOSCHAR+49> 0x00234a76 <+38>: 40 inc eax 0x00234a77 <+39>: f9 stc 0x00234a78 <+40>: e1 0f loope 0x234a89 <PTRPOSCHAR+57> 0x00234a7a <+42>: 40 inc eax 0x00234a7b <+43>: f9 stc 0x00234a7c <+44>: 00 00 add BYTE PTR [eax],al 0x00234a7e <+46>: 01 cb add ebx,ecx 0x00234a80 <+48>: e0 27 loopne 0x234aa9 <PTRPOSCHAR+89> 0x00234a82 <+50>: 00 f9 add cl,bh 5731 if (Offset<TextLength) and (TFLREPtrInt(Size)>0) then begin 0x00234a84 <+52>: e1 0f loope 0x234a95 <PTRPOSCHAR+69> 0x00234a86 <+54>: 40 inc eax 0x00234a87 <+55>: f9 stc 0x00234a88 <+56>: e0 0b loopne 0x234a95 <PTRPOSCHAR+69> 0x00234a8a <+58>: 40 inc eax 0x00234a8b <+59>: f9 stc 0x00234a8c <+60>: 3f aas 0x00234a8d <+61>: 00 00 add BYTE PTR [eax],al 0x00234a8f <+63>: eb 0a jmp 0x234a9b <PTRPOSCHAR+75> 0x00234a91 <+65>: 16 push ss 0x00234a92 <+66>: 00 54 e0 27 add BYTE PTR [eax+eiz*8+0x27],dl 0x00234a96 <+70>: 40 inc eax 0x00234a97 <+71>: f9 stc 0x00234a98 <+72>: 1f pop ds 0x00234a99 <+73>: 00 00 add BYTE PTR [eax],al 0x00234a9b <+75>: f1 int1 0x00234a9c <+76>: ad lods eax,DWORD PTR ds:[esi] 0x00234a9d <+77>: 15 00 54 e0 03 adc eax,0x3e05400 5732 5733 XorMask:=TFLREUInt8(SearchChar); 0x00234aa0 <+80>: e0 03 loopne 0x234aa5 <PTRPOSCHAR+85> 0x00234aa2 <+82>: 40 inc eax 0x00234aa3 <+83>: 39 e0 cmp eax,esp 0x00234aa5 <+85>: 1f pop ds 0x00234aa6 <+86>: 00 f9 add cl,bh 5734 XorMask:=XorMask or (XorMask shl 8); 0x00234aa8 <+88>: e0 1f loopne 0x234ac9 <PTRPOSCHAR+121> 0x00234aaa <+90>: 40 inc eax 0x00234aab <+91>: f9 stc 0x00234aac <+92>: 00 dc add ah,bl 0x00234aae <+94>: 78 d3 js 0x234a83 <PTRPOSCHAR+51> 0x00234ab0 <+96>: e1 1f loope 0x234ad1 <PTRPOSCHAR+129> 0x00234ab2 <+98>: 40 inc eax 0x00234ab3 <+99>: f9 stc 0x00234ab4 <+100>: 20 00 and BYTE PTR [eax],al 0x00234ab6 <+102>: 00 aa e0 1f 00 f9 add BYTE PTR [edx-0x6ffe020],ch 5735 XorMask:=XorMask or (XorMask shl 16); 0x00234abc <+108>: e0 1f loopne 0x234add <PTRPOSCHAR+141> 0x00234abe <+110>: 40 inc eax 0x00234abf <+111>: f9 stc 0x00234ac0 <+112>: 00 bc 70 d3 e1 1f 40 add BYTE PTR [eax+esi*2+0x401fe1d3],bh 0x00234ac7 <+119>: f9 stc 0x00234ac8 <+120>: 20 00 and BYTE PTR [eax],al 0x00234aca <+122>: 00 aa e0 1f 00 f9 add BYTE PTR [edx-0x6ffe020],ch 5736 {$ifdef cpu64} 5737 XorMask:=XorMask or (XorMask shl 32); 0x00234ad0 <+128>: e0 1f loopne 0x234af1 <PTRPOSCHAR+161> 0x00234ad2 <+130>: 40 inc eax 0x00234ad3 <+131>: f9 stc 0x00234ad4 <+132>: 01 7c 60 d3 add DWORD PTR [eax+eiz*2-0x2d],edi 0x00234ad8 <+136>: e0 1f loopne 0x234af9 <PTRPOSCHAR+169> 0x00234ada <+138>: 40 inc eax 0x00234adb <+139>: f9 stc 0x00234adc <+140>: 00 00 add BYTE PTR [eax],al 0x00234ade <+142>: 01 aa e0 1f 00 f9 add DWORD PTR [edx-0x6ffe020],ebp 5738 {$endif} 5739 5740 CurrentChar:=@Text[Offset]; 0x00234ae4 <+148>: e1 07 loope 0x234aed <PTRPOSCHAR+157> 0x00234ae6 <+150>: 40 inc eax 0x00234ae7 <+151>: f9 stc 0x00234ae8 <+152>: e0 0f loopne 0x234af9 <PTRPOSCHAR+169> 0x00234aea <+154>: 40 inc eax 0x00234aeb <+155>: f9 stc 0x00234aec <+156>: 20 00 and BYTE PTR [eax],al 0x00234aee <+158>: 00 8b e0 17 00 f9 add BYTE PTR [ebx-0x6ffe820],cl 5741 5742 if Size>(SizeOf(TFLREPtrUInt)*2) then begin 0x00234af4 <+164>: e0 27 loopne 0x234b1d <PTRPOSCHAR+205> 0x00234af6 <+166>: 40 inc eax 0x00234af7 <+167>: f9 stc 0x00234af8 <+168>: 1f pop ds 0x00234af9 <+169>: 40 inc eax 0x00234afa <+170>: 00 f1 add cl,dh 0x00234afc <+172>: 49 dec ecx 0x00234afd <+173>: 12 00 adc al,BYTE PTR [eax] 0x00234aff <+175>: 54 push esp 5743 5744 // Alignment initialization 5745 CurrentChunk:=pointer(TFLREPtrUInt(TFLREPtrUInt(CurrentChar) and not (SizeOf(TFLREPtrUInt)-1))); 0x00234b00 <+176>: e0 17 loopne 0x234b19 <PTRPOSCHAR+201> 0x00234b02 <+178>: 40 inc eax 0x00234b03 <+179>: f9 stc 0x00234b04 <+180>: 00 f0 add al,dh 0x00234b06 <+182>: 7d 92 jge 0x234a9a <PTRPOSCHAR+74> 0x00234b08 <+184>: e0 1b loopne 0x234b25 <PTRPOSCHAR+213> 0x00234b0a <+186>: 00 f9 add cl,bh 5746 5747 // Try to get first chunk 5748 if TFLREPtrUInt(CurrentChunk)>=TFLREPtrUInt(Text) then begin 0x00234b0c <+188>: e0 1b loopne 0x234b29 <PTRPOSCHAR+217> 0x00234b0e <+190>: 40 inc eax 0x00234b0f <+191>: f9 stc 0x00234b10 <+192>: e1 07 loope 0x234b19 <PTRPOSCHAR+201> 0x00234b12 <+194>: 40 inc eax 0x00234b13 <+195>: f9 stc 0x00234b14 <+196>: 1f pop ds 0x00234b15 <+197>: 00 01 add BYTE PTR [ecx],al 0x00234b17 <+199>: eb e3 jmp 0x234afc <PTRPOSCHAR+172> 0x00234b19 <+201>: 00 00 add BYTE PTR [eax],al 0x00234b1b <+203>: 54 push esp 5749 // Yes, we can the get first chunk 5750 XoredChunk:=CurrentChunk^ xor XorMask; 0x00234b1c <+204>: e0 1b loopne 0x234b39 <PTRPOSCHAR+233> 0x00234b1e <+206>: 40 inc eax 0x00234b1f <+207>: f9 stc 0x00234b20 <+208>: 01 00 add DWORD PTR [eax],eax 0x00234b22 <+210>: 40 inc eax 0x00234b23 <+211>: f9 stc 0x00234b24 <+212>: e0 1f loopne 0x234b45 <PTRPOSCHAR+245> 0x00234b26 <+214>: 40 inc eax 0x00234b27 <+215>: f9 stc 0x00234b28 <+216>: 00 00 add BYTE PTR [eax],al 0x00234b2a <+218>: 01 ca add edx,ecx 0x00234b2c <+220>: e0 23 loopne 0x234b51 <PTRPOSCHAR+257> 0x00234b2e <+222>: 00 f9 add cl,bh 0x00234b30 <+224>: 02 00 add al,BYTE PTR [eax] 0x00234b32 <+226>: 00 14 ff add BYTE PTR [edi+edi*8],dl 5751 end else begin 5752 // No, so return dummy value to force to check the few first characters 5753 XoredChunk:=0; 0x00234b34 <+228>: ff 23 jmp DWORD PTR [ebx] 0x00234b36 <+230>: 00 f9 add cl,bh 5754 end; 5755 5756 // Jump to next chunk 5757 inc(CurrentChunk); 0x00234b38 <+232>: e0 1b loopne 0x234b55 <PTRPOSCHAR+261> 0x00234b3a <+234>: 40 inc eax 0x00234b3b <+235>: f9 stc 0x00234b3c <+236>: 00 20 add BYTE PTR [eax],ah 0x00234b3e <+238>: 00 91 e0 1b 00 f9 add BYTE PTR [ecx-0x6ffe420],dl 5758 5759 // Subtract the first chunk from size 5760 dec(TFLREPtrUInt(Size),TFLREPtrUInt(CurrentChunk)-TFLREPtrUInt(CurrentChar)); 0x00234b44 <+244>: e0 1b loopne 0x234b61 <PTRPOSCHAR+273> 0x00234b46 <+246>: 40 inc eax 0x00234b47 <+247>: f9 stc 0x00234b48 <+248>: e1 17 loope 0x234b61 <PTRPOSCHAR+273> 0x00234b4a <+250>: 40 inc eax 0x00234b4b <+251>: f9 stc 0x00234b4c <+252>: 00 00 add BYTE PTR [eax],al 0x00234b4e <+254>: 01 cb add ebx,ecx 0x00234b50 <+256>: e1 27 loope 0x234b79 <PTRPOSCHAR+297> 0x00234b52 <+258>: 40 inc eax 0x00234b53 <+259>: f9 stc 0x00234b54 <+260>: 21 00 and DWORD PTR [eax],eax 0x00234b56 <+262>: 00 cb add bl,cl 0x00234b58 <+264>: e1 27 loope 0x234b81 <PTRPOSCHAR+305> 0x00234b5a <+266>: 00 f9 add cl,bh 5761 5762 // Scan first chunk 5763 if (((XoredChunk+MaskA) and not XoredChunk) and MaskB)<>0 then begin 0x00234b5c <+268>: e0 23 loopne 0x234b81 <PTRPOSCHAR+305> 0x00234b5e <+270>: 40 inc eax 0x00234b5f <+271>: f9 stc 0x00234b60 <+272>: e1 c3 loope 0x234b25 <PTRPOSCHAR+213> 0x00234b62 <+274>: 00 b2 01 00 01 cb add BYTE PTR [edx-0x34feffff],dh 0x00234b68 <+280>: e0 23 loopne 0x234b8d <PTRPOSCHAR+317> 0x00234b6a <+282>: 40 inc eax 0x00234b6b <+283>: f9 stc 0x00234b6c <+284>: e0 03 loopne 0x234b71 <PTRPOSCHAR+289> 0x00234b6e <+286>: 20 aa 00 00 01 8a and BYTE PTR [edx-0x75ff0000],ch 0x00234b74 <+292>: 00 c0 add al,al 0x00234b76 <+294>: 01 92 1f 00 00 f1 add DWORD PTR [edx-0xeffffe1],edx 0x00234b7c <+300>: 80 0b 00 or BYTE PTR [ebx],0x0 0x00234b7f <+303>: 54 push esp 5764 while TFLREPtrUInt(CurrentChar)<TFLREPtrUInt(CurrentChunk) do begin 0x00234b80 <+304>: 0e push cs 0x00234b81 <+305>: 00 00 add BYTE PTR [eax],al 0x00234b83 <+307>: 14 e0 adc al,0xe0 0x00234bb8 <+360>: e0 17 loopne 0x234bd1 <PTRPOSCHAR+385> 0x00234bba <+362>: 40 inc eax 0x00234bbb <+363>: f9 stc 0x00234bbc <+364>: e1 1b loope 0x234bd9 <PTRPOSCHAR+393> 0x00234bbe <+366>: 40 inc eax 0x00234bbf <+367>: f9 stc 0x00234bc0 <+368>: 1f pop ds 0x00234bc1 <+369>: 00 01 add BYTE PTR [ecx],al 0x00234bc3 <+371>: eb 03 jmp 0x234bc8 <PTRPOSCHAR+376> 0x00234bc5 <+373>: fe (bad) 0x00234bc6 <+374>: ff 54 49 00 call DWORD PTR [ecx+ecx*2+0x0] 5765 if CurrentChar^=SearchChar then begin 0x00234b84 <+308>: e0 17 loopne 0x234b9d <PTRPOSCHAR+333> 0x00234b86 <+310>: 40 inc eax 0x00234b87 <+311>: f9 stc 0x00234b88 <+312>: 01 00 add DWORD PTR [eax],eax 0x00234b8a <+314>: 40 inc eax 0x00234b8b <+315>: 39 e0 cmp eax,esp 0x00234b8d <+317>: 03 40 39 add eax,DWORD PTR [eax+0x39] 0x00234b90 <+320>: 3f aas 0x00234b91 <+321>: 00 00 add BYTE PTR [eax],al 0x00234b93 <+323>: 6b c1 00 imul eax,ecx,0x0 0x00234b96 <+326>: 00 54 e0 17 add BYTE PTR [eax+eiz*8+0x17],dl 5766 result:=TFLREPtrUInt(CurrentChar)-TFLREPtrUInt(Text); 0x00234b98 <+328>: e0 17 loopne 0x234bb1 <PTRPOSCHAR+353> 0x00234b9a <+330>: 40 inc eax 0x00234b9b <+331>: f9 stc 0x00234b9c <+332>: e1 07 loope 0x234ba5 <PTRPOSCHAR+341> 0x00234b9e <+334>: 40 inc eax 0x00234b9f <+335>: f9 stc 0x00234ba0 <+336>: 00 00 add BYTE PTR [eax],al 0x00234ba2 <+338>: 01 cb add ebx,ecx 0x00234ba4 <+340>: e0 13 loopne 0x234bb9 <PTRPOSCHAR+361> 0x00234ba6 <+342>: 00 f9 add cl,bh 5767 exit; 0x00234ba8 <+344>: 6a 00 push 0x0 0x00234baa <+346>: 00 14 e0 add BYTE PTR [eax+eiz*8],dl 5768 end; 5769 inc(CurrentChar); 0x00234bac <+348>: e0 17 loopne 0x234bc5 <PTRPOSCHAR+373> 0x00234bae <+350>: 40 inc eax 0x00234baf <+351>: f9 stc 0x00234bb0 <+352>: 00 04 00 add BYTE PTR [eax+eax*1],al 0x00234bb3 <+355>: 91 xchg ecx,eax 0x00234bb4 <+356>: e0 17 loopne 0x234bcd <PTRPOSCHAR+381> 0x00234bb6 <+358>: 00 f9 add cl,bh 5770 end; 5771 end; 5772 5773 // Scan until the last whole chunk 5774 while Size>=SizeOf(TFLREPtrUInt) do begin 0x00234bc8 <+376>: 49 dec ecx 0x00234bc9 <+377>: 00 00 add BYTE PTR [eax],al 0x00234bcb <+379>: 14 e0 adc al,0xe0 0x00234cec <+668>: e0 27 loopne 0x234d15 <PTRPOSCHAR+709> 0x00234cee <+670>: 40 inc eax 0x00234cef <+671>: f9 stc 0x00234cf0 <+672>: 1f pop ds 0x00234cf1 <+673>: 20 00 and BYTE PTR [eax],al 0x00234cf3 <+675>: f1 int1 0x00234cf4 <+676>: c2 f6 ff ret 0xfff6 0x00234cf7 <+679>: 54 push esp 5775 XoredChunk:=CurrentChunk^ xor XorMask; 0x00234bcc <+380>: e0 1b loopne 0x234be9 <PTRPOSCHAR+409> 0x00234bce <+382>: 40 inc eax 0x00234bcf <+383>: f9 stc 0x00234bd0 <+384>: 00 00 add BYTE PTR [eax],al 0x00234bd2 <+386>: 40 inc eax 0x00234bd3 <+387>: f9 stc 0x00234bd4 <+388>: e1 1f loope 0x234bf5 <PTRPOSCHAR+421> 0x00234bd6 <+390>: 40 inc eax 0x00234bd7 <+391>: f9 stc 0x00234bd8 <+392>: 20 00 and BYTE PTR [eax],al 0x00234bda <+394>: 00 ca add dl,cl 0x00234bdc <+396>: e0 23 loopne 0x234c01 <PTRPOSCHAR+433> 0x00234bde <+398>: 00 f9 add cl,bh 5776 if (((XoredChunk+MaskA) and not XoredChunk) and MaskB)<>0 then begin 0x00234be0 <+400>: e1 23 loope 0x234c05 <PTRPOSCHAR+437> 0x00234be2 <+402>: 40 inc eax 0x00234be3 <+403>: f9 stc 0x00234be4 <+404>: e0 c3 loopne 0x234ba9 <PTRPOSCHAR+345> 0x00234be6 <+406>: 00 b2 21 00 00 cb add BYTE PTR [edx-0x34ffffdf],dh 0x00234bec <+412>: e0 23 loopne 0x234c11 <PTRPOSCHAR+449> 0x00234bee <+414>: 40 inc eax 0x00234bef <+415>: f9 stc 0x00234bf0 <+416>: e0 03 loopne 0x234bf5 <PTRPOSCHAR+421> 0x00234bf2 <+418>: 20 aa 00 00 01 8a and BYTE PTR [edx-0x75ff0000],ch 0x00234bf8 <+424>: 00 c0 add al,al 0x00234bfa <+426>: 01 92 1f 00 00 f1 add DWORD PTR [edx-0xeffffe1],edx 0x00234c00 <+432>: a0 06 00 54 e0 mov al,ds:0xe0540006 5777 {$ifdef POSCHARSAFECHECK} 5778 CurrentChar:=pointer(CurrentChunk); 5779 if CurrentChar[0]=SearchChar then begin 5780 result:=TFLREPtrUInt(pointer(@CurrentChar[0]))-TFLREPtrUInt(Text); 5781 exit; 5782 end; 5783 if CurrentChar[1]=SearchChar then begin 5784 result:=TFLREPtrUInt(pointer(@CurrentChar[1]))-TFLREPtrUInt(Text); 5785 exit; 5786 end; 5787 if CurrentChar[2]=SearchChar then begin 5788 result:=TFLREPtrUInt(pointer(@CurrentChar[2]))-TFLREPtrUInt(Text); 5789 exit; 5790 end; 5791 if CurrentChar[3]=SearchChar then begin 5792 result:=TFLREPtrUInt(pointer(@CurrentChar[3]))-TFLREPtrUInt(Text); 5793 exit; 5794 end; 5795 {$ifdef cpu64} 5796 if CurrentChar[4]=SearchChar then begin 5797 result:=TFLREPtrUInt(pointer(@CurrentChar[4]))-TFLREPtrUInt(Text); 5798 exit; 5799 end; 5800 if CurrentChar[5]=Pattern then begin 5801 result:=TFLREPtrUInt(pointer(@CurrentChar[5]))-TFLREPtrUInt(Text); 5802 exit; 5803 end; 5804 if CurrentChar[6]=SearchChar then begin 5805 result:=TFLREPtrUInt(pointer(@CurrentChar[6]))-TFLREPtrUInt(Text); 5806 exit; 5807 end; 5808 if CurrentChar[7]=SearchChar then begin 5809 result:=TFLREPtrUInt(pointer(@CurrentChar[7]))-TFLREPtrUInt(Text); 5810 exit; 5811 end; 5812 {$endif} 5813 {$else} 5814 CurrentChar:=pointer({$ifdef BIG_ENDIAN}TFLREPtrUInt(TFLREPtrUInt(CurrentChunk)+TFLREPtrUInt(SizeOf(TFLREPtrUInt)-1)){$else}CurrentChunk{$endif}); 0x00234c04 <+436>: e0 1b loopne 0x234c21 <PTRPOSCHAR+465> 0x00234c06 <+438>: 40 inc eax 0x00234c07 <+439>: f9 stc 0x00234c08 <+440>: e0 17 loopne 0x234c21 <PTRPOSCHAR+465> 0x00234c0a <+442>: 00 f9 add cl,bh 5815 XoredChunk:=XoredChunk xor XorMask; 0x00234c0c <+444>: e1 23 loope 0x234c31 <PTRPOSCHAR+481> 0x00234c0e <+446>: 40 inc eax 0x00234c0f <+447>: f9 stc 0x00234c10 <+448>: e0 1f loopne 0x234c31 <PTRPOSCHAR+481> 0x00234c12 <+450>: 40 inc eax 0x00234c13 <+451>: f9 stc 0x00234c14 <+452>: 00 00 add BYTE PTR [eax],al 0x00234c16 <+454>: 01 ca add edx,ecx 0x00234c18 <+456>: e0 23 loopne 0x234c3d <PTRPOSCHAR+493> 0x00234c1a <+458>: 00 f9 add cl,bh 5816 if TFLREUInt8(SearchChar)=0 then begin 0x00234c1c <+460>: e0 03 loopne 0x234c21 <PTRPOSCHAR+465> 0x00234c1e <+462>: 40 inc eax 0x00234c1f <+463>: 39 1f cmp DWORD PTR [edi],ebx 0x00234c21 <+465>: 00 00 add BYTE PTR [eax],al 0x00234c23 <+467>: 71 81 jno 0x234ba6 <PTRPOSCHAR+342> 0x00234c25 <+469>: 03 00 add eax,DWORD PTR [eax] 0x00234c27 <+471>: 54 push esp 5817 // Special case 5818 XoredChunk:=not XoredChunk; 0x00234c28 <+472>: e0 23 loopne 0x234c4d <PTRPOSCHAR+509> 0x00234c2a <+474>: 40 inc eax 0x00234c2b <+475>: f9 stc 0x00234c2c <+476>: e0 03 loopne 0x234c31 <PTRPOSCHAR+481> 0x00234c2e <+478>: 20 aa e0 23 00 f9 and BYTE PTR [edx-0x6ffdc20],ch 5819 while (XoredChunk<>0) and ((XoredChunk and $ff)<>$ff) do begin 0x00234c34 <+484>: 07 pop es 0x00234c35 <+485>: 00 00 add BYTE PTR [eax],al 0x00234c37 <+487>: 14 e0 adc al,0xe0 0x00234c50 <+512>: e0 23 loopne 0x234c75 <PTRPOSCHAR+549> 0x00234c52 <+514>: 40 inc eax 0x00234c53 <+515>: f9 stc 0x00234c54 <+516>: 1f pop ds 0x00234c55 <+517>: 00 00 add BYTE PTR [eax],al 0x00234c57 <+519>: f1 int1 0x00234c58 <+520>: e0 02 loopne 0x234c5c <PTRPOSCHAR+524> 0x00234c5a <+522>: 00 54 e0 23 add BYTE PTR [eax+eiz*8+0x23],dl 0x00234c5e <+526>: 40 inc eax 0x00234c5f <+527>: f9 stc 0x00234c60 <+528>: 00 1c 40 add BYTE PTR [eax+eax*2],bl 0x00234c63 <+531>: 92 xchg edx,eax 0x00234c64 <+532>: 1f pop ds 0x00234c65 <+533>: fc cld 0x00234c66 <+534>: 03 f1 add esi,ecx 0x00234c68 <+536>: 60 pusha 0x00234c69 <+537>: 02 00 add al,BYTE PTR [eax] 0x00234c6b <+539>: 54 push esp 0x00234c6c <+540>: f3 ff repz (bad) 0x00234c6e <+542>: ff 17 call DWORD PTR [edi] 0x00234c70 <+544>: 11 00 adc DWORD PTR [eax],eax 0x00234c72 <+546>: 00 14 10 add BYTE PTR [eax+edx*1],dl 0x00234c75 <+549>: 00 00 add BYTE PTR [eax],al 0x00234c77 <+551>: 14 07 adc al,0x7 5820 XoredChunk:=XoredChunk shr 8; 0x00234c38 <+488>: e0 23 loopne 0x234c5d <PTRPOSCHAR+525> 0x00234c3a <+490>: 40 inc eax 0x00234c3b <+491>: f9 stc 0x00234c3c <+492>: 00 fc add ah,bh 0x00234c3e <+494>: 48 dec eax 0x00234c3f <+495>: d3 e0 shl eax,cl 0x00234c41 <+497>: 23 00 and eax,DWORD PTR [eax] 0x00234c43 <+499>: f9 stc 5821 {$ifdef BIG_ENDIAN}dec{$else}inc{$endif}(CurrentChar); 0x00234c44 <+500>: e0 17 loopne 0x234c5d <PTRPOSCHAR+525> 0x00234c46 <+502>: 40 inc eax 0x00234c47 <+503>: f9 stc 0x00234c48 <+504>: 00 04 00 add BYTE PTR [eax+eax*1],al 0x00234c4b <+507>: 91 xchg ecx,eax 0x00234c4c <+508>: e0 17 loopne 0x234c65 <PTRPOSCHAR+533> 0x00234c4e <+510>: 00 f9 add cl,bh 5822 end; 5823 end else begin 5824 while (XoredChunk<>0) and ((XoredChunk and $ff)<>TFLREUInt8(SearchChar)) do begin 0x00234c78 <+552>: 07 pop es 0x00234c79 <+553>: 00 00 add BYTE PTR [eax],al 0x00234c7b <+555>: 14 e0 adc al,0xe0 0x00234c94 <+580>: e0 23 loopne 0x234cb9 <PTRPOSCHAR+617> 0x00234c96 <+582>: 40 inc eax 0x00234c97 <+583>: f9 stc 0x00234c98 <+584>: 1f pop ds 0x00234c99 <+585>: 00 00 add BYTE PTR [eax],al 0x00234c9b <+587>: f1 int1 0x00234c9c <+588>: c0 00 00 rol BYTE PTR [eax],0x0 0x00234c9f <+591>: 54 push esp 0x00234ca0 <+592>: e0 23 loopne 0x234cc5 <PTRPOSCHAR+629> 0x00234ca2 <+594>: 40 inc eax 0x00234ca3 <+595>: f9 stc 0x00234ca4 <+596>: 00 1c 40 add BYTE PTR [eax+eax*2],bl 0x00234ca7 <+599>: 92 xchg edx,eax 0x00234ca8 <+600>: e1 03 loope 0x234cad <PTRPOSCHAR+605> 0x00234caa <+602>: 40 inc eax 0x00234cab <+603>: 39 1f cmp DWORD PTR [edi],ebx 0x00234cad <+605>: 00 01 add BYTE PTR [ecx],al 0x00234caf <+607>: eb 61 jmp 0x234d12 <PTRPOSCHAR+706> 0x00234cb1 <+609>: fe (bad) 0x00234cb2 <+610>: ff 54 e0 23 call DWORD PTR [eax+eiz*8+0x23] 5825 XoredChunk:=XoredChunk shr 8; 0x00234c7c <+556>: e0 23 loopne 0x234ca1 <PTRPOSCHAR+593> 0x00234c7e <+558>: 40 inc eax 0x00234c7f <+559>: f9 stc 0x00234c80 <+560>: 00 fc add ah,bh 0x00234c82 <+562>: 48 dec eax 0x00234c83 <+563>: d3 e0 shl eax,cl 0x00234c85 <+565>: 23 00 and eax,DWORD PTR [eax] 0x00234c87 <+567>: f9 stc 5826 {$ifdef BIG_ENDIAN}dec{$else}inc{$endif}(CurrentChar); 0x00234c88 <+568>: e0 17 loopne 0x234ca1 <PTRPOSCHAR+593> 0x00234c8a <+570>: 40 inc eax 0x00234c8b <+571>: f9 stc 0x00234c8c <+572>: 00 04 00 add BYTE PTR [eax+eax*1],al 0x00234c8f <+575>: 91 xchg ecx,eax 0x00234c90 <+576>: e0 17 loopne 0x234ca9 <PTRPOSCHAR+601> 0x00234c92 <+578>: 00 f9 add cl,bh 5827 end; 5828 end; 5829 if XoredChunk<>0 then begin 0x00234cb4 <+612>: e0 23 loopne 0x234cd9 <PTRPOSCHAR+649> 0x00234cb6 <+614>: 40 inc eax c 0x00234cb7 <+615>: f9 stc 0x00234cb8 <+616>: 1f pop ds 0x00234cb9 <+617>: 00 00 add BYTE PTR [eax],al 0x00234cbb <+619>: f1 int1 0x00234cbc <+620>: c0 00 00 rol BYTE PTR [eax],0x0 0x00234cbf <+623>: 54 push esp 5830 result:=TFLREPtrUInt(pointer(CurrentChar))-TFLREPtrUInt(Text); 0x00234cc0 <+624>: e1 17 loope 0x234cd9 <PTRPOSCHAR+649> 0x00234cc2 <+626>: 40 inc eax 0x00234cc3 <+627>: f9 stc 0x00234cc4 <+628>: e0 07 loopne 0x234ccd <PTRPOSCHAR+637> 0x00234cc6 <+630>: 40 inc eax 0x00234cc7 <+631>: f9 stc 0x00234cc8 <+632>: 20 00 and BYTE PTR [eax],al 0x00234cca <+634>: 00 cb add bl,cl 0x00234ccc <+636>: e0 13 loopne 0x234ce1 <PTRPOSCHAR+657> 0x00234cce <+638>: 00 f9 add cl,bh 5831 exit; 0x00234cd0 <+640>: 20 00 and BYTE PTR [eax],al 0x00234cd2 <+642>: 00 14 e0 add BYTE PTR [eax+eiz*8],dl 5832 end; 5833 {$endif} 5834 end; 5835 inc(CurrentChunk); 0x00234cd4 <+644>: e0 1b loopne 0x234cf1 <PTRPOSCHAR+673> 0x00234cd6 <+646>: 40 inc eax 0x00234cd7 <+647>: f9 stc 0x00234cd8 <+648>: 00 20 add BYTE PTR [eax],ah 0x00234cda <+650>: 00 91 e0 1b 00 f9 add BYTE PTR [ecx-0x6ffe420],dl 5836 dec(Size,SizeOf(TFLREPtrUInt)); 0x00234ce0 <+656>: e0 27 loopne 0x234d09 <PTRPOSCHAR+697> 0x00234ce2 <+658>: 40 inc eax 0x00234ce3 <+659>: f9 stc 0x00234ce4 <+660>: 00 20 add BYTE PTR [eax],ah 0x00234ce6 <+662>: 00 d1 add cl,dl 0x00234ce8 <+664>: e0 27 loopne 0x234d11 <PTRPOSCHAR+705> 0x00234cea <+666>: 00 f9 add cl,bh 5837 end; 5838 5839 // Set chunkwise to charwise pointer 5840 CurrentChar:=pointer(CurrentChunk); 0x00234cf8 <+680>: e0 1b loopne 0x234d15 <PTRPOSCHAR+709> 0x00234cfa <+682>: 40 inc eax 0x00234cfb <+683>: f9 stc 0x00234cfc <+684>: e0 17 loopne 0x234d15 <PTRPOSCHAR+709> 0x00234cfe <+686>: 00 f9 add cl,bh 5841 end; 5842 5843 // Scan rest of the remained characters, if there are any 5844 while Size>0 do begin 0x00234d00 <+688>: 11 00 adc DWORD PTR [eax],eax 0x00234d02 <+690>: 00 14 e0 add BYTE PTR [eax+eiz*8],dl 0x00234d44 <+756>: e0 27 loopne 0x234d6d <PTRPOSCHARSETOF2+13> 0x00234d46 <+758>: 40 inc eax 0x00234d47 <+759>: f9 stc 0x00234d48 <+760>: 1f pop ds 0x00234d49 <+761>: 00 00 add BYTE PTR [eax],al 0x00234d4b <+763>: f1 int1 0x00234d4c <+764>: c8 fd ff 54 enter 0xfffd,0x54 5845 if CurrentChar^=SearchChar then begin 0x00234d04 <+692>: e0 17 loopne 0x234d1d <PTRPOSCHAR+717> 0x00234d06 <+694>: 40 inc eax 0x00234d07 <+695>: f9 stc 0x00234d08 <+696>: 01 00 add DWORD PTR [eax],eax 0x00234d0a <+698>: 40 inc eax 0x00234d0b <+699>: 39 e0 cmp eax,esp 0x00234d0d <+701>: 03 40 39 add eax,DWORD PTR [eax+0x39] 0x00234d10 <+704>: 3f aas 0x00234d11 <+705>: 00 00 add BYTE PTR [eax],al 0x00234d13 <+707>: 6b c1 00 imul eax,ecx,0x0 0x00234d16 <+710>: 00 54 e1 17 add BYTE PTR [ecx+eiz*8+0x17],dl 5846 result:=TFLREPtrUInt(pointer(CurrentChar))-TFLREPtrUInt(Text); 0x00234d18 <+712>: e1 17 loope 0x234d31 <PTRPOSCHAR+737> 0x00234d1a <+714>: 40 inc eax 0x00234d1b <+715>: f9 stc 0x00234d1c <+716>: e0 07 loopne 0x234d25 <PTRPOSCHAR+725> 0x00234d1e <+718>: 40 inc eax 0x00234d1f <+719>: f9 stc 0x00234d20 <+720>: 20 00 and BYTE PTR [eax],al 0x00234d22 <+722>: 00 cb add bl,cl 0x00234d24 <+724>: e0 13 loopne 0x234d39 <PTRPOSCHAR+745> 0x00234d26 <+726>: 00 f9 add cl,bh 5847 exit; 0x00234d28 <+728>: 0a 00 or al,BYTE PTR [eax] 0x00234d2a <+730>: 00 14 e0 add BYTE PTR [eax+eiz*8],dl 5848 end; 5849 inc(CurrentChar); 0x00234d2c <+732>: e0 17 loopne 0x234d45 <PTRPOSCHAR+757> 0x00234d2e <+734>: 40 inc eax 0x00234d2f <+735>: f9 stc 0x00234d30 <+736>: 00 04 00 add BYTE PTR [eax+eax*1],al 0x00234d33 <+739>: 91 xchg ecx,eax 0x00234d34 <+740>: e0 17 loopne 0x234d4d <PTRPOSCHAR+765> 0x00234d36 <+742>: 00 f9 add cl,bh 5850 dec(Size); 0x00234d38 <+744>: e0 27 loopne 0x234d61 <PTRPOSCHARSETOF2+1> 0x00234d3a <+746>: 40 inc eax 0x00234d3b <+747>: f9 stc 0x00234d3c <+748>: 00 04 00 add BYTE PTR [eax+eax*1],al 0x00234d3f <+751>: d1 e0 shl eax,1 0x00234d41 <+753>: 27 daa 0x00234d42 <+754>: 00 f9 add cl,bh 5851 end; 5852 5853 end; 5854 end; 0x00234d50 <+768>: e0 13 loopne 0x234d65 <PTRPOSCHARSETOF2+5> 0x00234d52 <+770>: 40 inc eax 0x00234d53 <+771>: f9 stc 0x00234d54 <+772>: bf 03 00 91 fd mov edi,0xfd910003 0x00234d59 <+777>: 7b c1 jnp 0x234d1c <PTRPOSCHAR+716> 0x00234d5b <+779>: a8 c0 test al,0xc0 0x00234d5d <+781>: 03 5f d6 add ebx,DWORD PTR [edi-0x2a] ``` Perhaps something is wrong with CurrentChunk
BeRo1985 commented 2024-02-05 00:01:36 +00:00 (Migrated from github.com)

Thank you for the bug report. However, it appears there's a misunderstanding in the approach taken to diagnose the crash report. The disassembled code provided is based on the x86 architecture, which is not fully applicable to the crash context in this case. The crash occurred on a Samsung Galaxy S21 FE 5G device running Android 14 (SDK 34), which uses the ARM architecture, specifically AArch64 for 64-bit ARM processors.

To accurately diagnose the issue, one would need to analyze the crash using an AArch64 disassembler or debugger, as the x86 code and addresses will not correspond to the actual execution path or memory layout on the device where the crash was reported. Adjusting the analysis to focus on the correct architecture is essential for identifying the root cause of the SIGSEGV (Segmentation Fault).

In summary, to move forward with debugging, ensure that the analysis is performed with the correct architecture in mind, focusing on AArch64 rather than x86. This involves doing an analysis directly on the AArch64 liblclapp.so from the [whatever-stripped-away]arm64_v8a.apk file, which, in the end, is just a ZIP file with a different file extension. This approach will provide more accurate insights into the crash's root cause by examining the correct instruction set and memory addresses relevant to the device and application in question.

But, however, I'll take a look into it regarding with a prospect towards CurrentChunk.

Thank you for the bug report. However, it appears there's a misunderstanding in the approach taken to diagnose the crash report. The disassembled code provided is based on the x86 architecture, which is not fully applicable to the crash context in this case. The crash occurred on a Samsung Galaxy S21 FE 5G device running Android 14 (SDK 34), which uses the ARM architecture, specifically AArch64 for 64-bit ARM processors. To accurately diagnose the issue, one would need to analyze the crash using an AArch64 disassembler or debugger, as the x86 code and addresses will not correspond to the actual execution path or memory layout on the device where the crash was reported. Adjusting the analysis to focus on the correct architecture is essential for identifying the root cause of the SIGSEGV (Segmentation Fault). In summary, to move forward with debugging, ensure that the analysis is performed with the correct architecture in mind, focusing on AArch64 rather than x86. This involves doing an analysis directly on the AArch64 `liblclapp.so` from the `[whatever-stripped-away]arm64_v8a.apk` file, which, in the end, is just a ZIP file with a different file extension. This approach will provide more accurate insights into the crash's root cause by examining the correct instruction set and memory addresses relevant to the device and application in question. But, however, I'll take a look into it regarding with a prospect towards CurrentChunk.
benibela commented 2024-02-11 21:39:09 +00:00 (Migrated from github.com)

Here is the correct disassembler (but it is the same file, you can see they both start with a9bf7bfd with reveerse endian)

0000000000234a50 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64>:
PTRPOSCHAR():
components/pascal/import/flre/src/FLRE.pas:5727
const MaskA=TFLREPtrUInt({$ifdef cpu64}$fefefefefefefeff{$else}$fefefeff{$endif}); // it is: 0-$01010101 / 0-$0101010101010101
      MaskB=TFLREPtrUInt({$ifdef cpu64}$8080808080808080{$else}$80808080{$endif});
var CurrentChar:PFLRERawByteChar;
    CurrentChunk:pptruint;
    XorMask,XoredChunk,Size:TFLREPtrUInt;
begin
  234a50:	a9bf7bfd 	stp	x29, x30, [sp, #-16]!
  234a54:	910003fd 	mov	x29, sp
  234a58:	d10143ff 	sub	sp, sp, #0x50
  234a5c:	390003e0 	strb	w0, [sp]
  234a60:	f90007e1 	str	x1, [sp, #8]
  234a64:	f9000be2 	str	x2, [sp, #16]
  234a68:	f9000fe3 	str	x3, [sp, #24]
components/pascal/import/flre/src/FLRE.pas:5728
 result:=-1;
  234a6c:	92800000 	mov	x0, #0xffffffffffffffff    	// #-1
  234a70:	f90013e0 	str	x0, [sp, #32]
components/pascal/import/flre/src/FLRE.pas:5730

 Size:=TextLength-Offset;
  234a74:	f9400be0 	ldr	x0, [sp, #16]
  234a78:	f9400fe1 	ldr	x1, [sp, #24]
  234a7c:	cb010000 	sub	x0, x0, x1
  234a80:	f90027e0 	str	x0, [sp, #72]
components/pascal/import/flre/src/FLRE.pas:5731
 if (Offset<TextLength) and (TFLREPtrInt(Size)>0) then begin
  234a84:	f9400fe1 	ldr	x1, [sp, #24]
  234a88:	f9400be0 	ldr	x0, [sp, #16]
  234a8c:	eb00003f 	cmp	x1, x0
  234a90:	5400160a 	b.ge	234d50 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x300>  // b.tcont
  234a94:	f94027e0 	ldr	x0, [sp, #72]
  234a98:	f100001f 	cmp	x0, #0x0
  234a9c:	540015ad 	b.le	234d50 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x300>
components/pascal/import/flre/src/FLRE.pas:5733

  XorMask:=TFLREUInt8(SearchChar);
  234aa0:	394003e0 	ldrb	w0, [sp]
  234aa4:	f9001fe0 	str	x0, [sp, #56]
components/pascal/import/flre/src/FLRE.pas:5734
  XorMask:=XorMask or (XorMask shl 8);
  234aa8:	f9401fe0 	ldr	x0, [sp, #56]
  234aac:	d378dc00 	lsl	x0, x0, #8
  234ab0:	f9401fe1 	ldr	x1, [sp, #56]
  234ab4:	aa000020 	orr	x0, x1, x0
  234ab8:	f9001fe0 	str	x0, [sp, #56]
components/pascal/import/flre/src/FLRE.pas:5735
  XorMask:=XorMask or (XorMask shl 16);
  234abc:	f9401fe0 	ldr	x0, [sp, #56]
  234ac0:	d370bc00 	lsl	x0, x0, #16
  234ac4:	f9401fe1 	ldr	x1, [sp, #56]
  234ac8:	aa000020 	orr	x0, x1, x0
  234acc:	f9001fe0 	str	x0, [sp, #56]
components/pascal/import/flre/src/FLRE.pas:5737
{$ifdef cpu64}
  XorMask:=XorMask or (XorMask shl 32);
  234ad0:	f9401fe0 	ldr	x0, [sp, #56]
  234ad4:	d3607c01 	lsl	x1, x0, #32
  234ad8:	f9401fe0 	ldr	x0, [sp, #56]
  234adc:	aa010000 	orr	x0, x0, x1
  234ae0:	f9001fe0 	str	x0, [sp, #56]
components/pascal/import/flre/src/FLRE.pas:5740
{$endif}

  CurrentChar:=@Text[Offset];
  234ae4:	f94007e1 	ldr	x1, [sp, #8]
  234ae8:	f9400fe0 	ldr	x0, [sp, #24]
  234aec:	8b000020 	add	x0, x1, x0
  234af0:	f90017e0 	str	x0, [sp, #40]
components/pascal/import/flre/src/FLRE.pas:5742

  if Size>(SizeOf(TFLREPtrUInt)*2) then begin
  234af4:	f94027e0 	ldr	x0, [sp, #72]
  234af8:	f100401f 	cmp	x0, #0x10
  234afc:	54001249 	b.ls	234d44 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x2f4>  // b.plast
components/pascal/import/flre/src/FLRE.pas:5745

   // Alignment initialization
   CurrentChunk:=pointer(TFLREPtrUInt(TFLREPtrUInt(CurrentChar) and not (SizeOf(TFLREPtrUInt)-1)));
  234b00:	f94017e0 	ldr	x0, [sp, #40]
  234b04:	927df000 	and	x0, x0, #0xfffffffffffffff8
  234b08:	f9001be0 	str	x0, [sp, #48]
components/pascal/import/flre/src/FLRE.pas:5748

   // Try to get first chunk
   if TFLREPtrUInt(CurrentChunk)>=TFLREPtrUInt(Text) then begin
  234b0c:	f9401be0 	ldr	x0, [sp, #48]
  234b10:	f94007e1 	ldr	x1, [sp, #8]
  234b14:	eb01001f 	cmp	x0, x1
  234b18:	540000e3 	b.cc	234b34 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0xe4>  // b.lo, b.ul, b.last
components/pascal/import/flre/src/FLRE.pas:5750
    // Yes, we can the get first chunk
    XoredChunk:=CurrentChunk^ xor XorMask;
  234b1c:	f9401be0 	ldr	x0, [sp, #48]
  234b20:	f9400001 	ldr	x1, [x0]
  234b24:	f9401fe0 	ldr	x0, [sp, #56]
  234b28:	ca010000 	eor	x0, x0, x1
  234b2c:	f90023e0 	str	x0, [sp, #64]
  234b30:	14000002 	b	234b38 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0xe8>
components/pascal/import/flre/src/FLRE.pas:5753
   end else begin
    // No, so return dummy value to force to check the few first characters
    XoredChunk:=0;
  234b34:	f90023ff 	str	xzr, [sp, #64]
components/pascal/import/flre/src/FLRE.pas:5757
   end;

   // Jump to next chunk
   inc(CurrentChunk);
  234b38:	f9401be0 	ldr	x0, [sp, #48]
  234b3c:	91002000 	add	x0, x0, #0x8
  234b40:	f9001be0 	str	x0, [sp, #48]
components/pascal/import/flre/src/FLRE.pas:5760

   // Subtract the first chunk from size
   dec(TFLREPtrUInt(Size),TFLREPtrUInt(CurrentChunk)-TFLREPtrUInt(CurrentChar));
  234b44:	f9401be0 	ldr	x0, [sp, #48]
  234b48:	f94017e1 	ldr	x1, [sp, #40]
  234b4c:	cb010000 	sub	x0, x0, x1
  234b50:	f94027e1 	ldr	x1, [sp, #72]
  234b54:	cb000021 	sub	x1, x1, x0
  234b58:	f90027e1 	str	x1, [sp, #72]
components/pascal/import/flre/src/FLRE.pas:5763

   // Scan first chunk
   if (((XoredChunk+MaskA) and not XoredChunk) and MaskB)<>0 then begin
  234b5c:	f94023e0 	ldr	x0, [sp, #64]
  234b60:	b200c3e1 	mov	x1, #0x101010101010101     	// #72340172838076673
  234b64:	cb010001 	sub	x1, x0, x1
  234b68:	f94023e0 	ldr	x0, [sp, #64]
  234b6c:	aa2003e0 	mvn	x0, x0
  234b70:	8a010000 	and	x0, x0, x1
  234b74:	9201c000 	and	x0, x0, #0x8080808080808080
  234b78:	f100001f 	cmp	x0, #0x0
  234b7c:	54000b80 	b.eq	234cec <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x29c>  // b.none
components/pascal/import/flre/src/FLRE.pas:5764
    while TFLREPtrUInt(CurrentChar)<TFLREPtrUInt(CurrentChunk) do begin
  234b80:	1400000e 	b	234bb8 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x168>
components/pascal/import/flre/src/FLRE.pas:5765
     if CurrentChar^=SearchChar then begin
  234b84:	f94017e0 	ldr	x0, [sp, #40]
  234b88:	39400001 	ldrb	w1, [x0]
  234b8c:	394003e0 	ldrb	w0, [sp]
  234b90:	6b00003f 	cmp	w1, w0
  234b94:	540000c1 	b.ne	234bac <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x15c>  // b.any
components/pascal/import/flre/src/FLRE.pas:5766
      result:=TFLREPtrUInt(CurrentChar)-TFLREPtrUInt(Text);
  234b98:	f94017e0 	ldr	x0, [sp, #40]
  234b9c:	f94007e1 	ldr	x1, [sp, #8]
  234ba0:	cb010000 	sub	x0, x0, x1
  234ba4:	f90013e0 	str	x0, [sp, #32]
components/pascal/import/flre/src/FLRE.pas:5767
      exit;
  234ba8:	1400006a 	b	234d50 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x300>
components/pascal/import/flre/src/FLRE.pas:5769
     end;
     inc(CurrentChar);
  234bac:	f94017e0 	ldr	x0, [sp, #40]
  234bb0:	91000400 	add	x0, x0, #0x1
  234bb4:	f90017e0 	str	x0, [sp, #40]
components/pascal/import/flre/src/FLRE.pas:5764
    while TFLREPtrUInt(CurrentChar)<TFLREPtrUInt(CurrentChunk) do begin
  234bb8:	f94017e0 	ldr	x0, [sp, #40]
  234bbc:	f9401be1 	ldr	x1, [sp, #48]
  234bc0:	eb01001f 	cmp	x0, x1
  234bc4:	54fffe03 	b.cc	234b84 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x134>  // b.lo, b.ul, b.last
components/pascal/import/flre/src/FLRE.pas:5774
    end;
   end;

   // Scan until the last whole chunk
   while Size>=SizeOf(TFLREPtrUInt) do begin
  234bc8:	14000049 	b	234cec <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x29c>
components/pascal/import/flre/src/FLRE.pas:5775
    XoredChunk:=CurrentChunk^ xor XorMask;
  234bcc:	f9401be0 	ldr	x0, [sp, #48]
  234bd0:	f9400000 	ldr	x0, [x0]
  234bd4:	f9401fe1 	ldr	x1, [sp, #56]
  234bd8:	ca000020 	eor	x0, x1, x0
  234bdc:	f90023e0 	str	x0, [sp, #64]
components/pascal/import/flre/src/FLRE.pas:5776
    if (((XoredChunk+MaskA) and not XoredChunk) and MaskB)<>0 then begin
  234be0:	f94023e1 	ldr	x1, [sp, #64]
  234be4:	b200c3e0 	mov	x0, #0x101010101010101     	// #72340172838076673
  234be8:	cb000021 	sub	x1, x1, x0
  234bec:	f94023e0 	ldr	x0, [sp, #64]
  234bf0:	aa2003e0 	mvn	x0, x0
  234bf4:	8a010000 	and	x0, x0, x1
  234bf8:	9201c000 	and	x0, x0, #0x8080808080808080
  234bfc:	f100001f 	cmp	x0, #0x0
  234c00:	540006a0 	b.eq	234cd4 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x284>  // b.none
components/pascal/import/flre/src/FLRE.pas:5814
      result:=TFLREPtrUInt(pointer(@CurrentChar[7]))-TFLREPtrUInt(Text);
      exit;
     end;
{$endif}
{$else}
     CurrentChar:=pointer({$ifdef BIG_ENDIAN}TFLREPtrUInt(TFLREPtrUInt(CurrentChunk)+TFLREPtrUInt(SizeOf(TFLREPtrUInt)-1)){$else}CurrentChunk{$endif});
  234c04:	f9401be0 	ldr	x0, [sp, #48]
  234c08:	f90017e0 	str	x0, [sp, #40]
components/pascal/import/flre/src/FLRE.pas:5815
     XoredChunk:=XoredChunk xor XorMask;
  234c0c:	f94023e1 	ldr	x1, [sp, #64]
  234c10:	f9401fe0 	ldr	x0, [sp, #56]
  234c14:	ca010000 	eor	x0, x0, x1
  234c18:	f90023e0 	str	x0, [sp, #64]
components/pascal/import/flre/src/FLRE.pas:5816
     if TFLREUInt8(SearchChar)=0 then begin
  234c1c:	394003e0 	ldrb	w0, [sp]
  234c20:	7100001f 	cmp	w0, #0x0
  234c24:	54000381 	b.ne	234c94 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x244>  // b.any
components/pascal/import/flre/src/FLRE.pas:5818
      // Special case
      XoredChunk:=not XoredChunk;
  234c28:	f94023e0 	ldr	x0, [sp, #64]
  234c2c:	aa2003e0 	mvn	x0, x0
  234c30:	f90023e0 	str	x0, [sp, #64]
components/pascal/import/flre/src/FLRE.pas:5819
      while (XoredChunk<>0) and ((XoredChunk and $ff)<>$ff) do begin
  234c34:	14000007 	b	234c50 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x200>
components/pascal/import/flre/src/FLRE.pas:5820
       XoredChunk:=XoredChunk shr 8;
  234c38:	f94023e0 	ldr	x0, [sp, #64]
  234c3c:	d348fc00 	lsr	x0, x0, #8
  234c40:	f90023e0 	str	x0, [sp, #64]
components/pascal/import/flre/src/FLRE.pas:5821
       {$ifdef BIG_ENDIAN}dec{$else}inc{$endif}(CurrentChar);
  234c44:	f94017e0 	ldr	x0, [sp, #40]
  234c48:	91000400 	add	x0, x0, #0x1
  234c4c:	f90017e0 	str	x0, [sp, #40]
components/pascal/import/flre/src/FLRE.pas:5819
      while (XoredChunk<>0) and ((XoredChunk and $ff)<>$ff) do begin
  234c50:	f94023e0 	ldr	x0, [sp, #64]
  234c54:	f100001f 	cmp	x0, #0x0
  234c58:	540002e0 	b.eq	234cb4 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x264>  // b.none
  234c5c:	f94023e0 	ldr	x0, [sp, #64]
  234c60:	92401c00 	and	x0, x0, #0xff
  234c64:	f103fc1f 	cmp	x0, #0xff
  234c68:	54000260 	b.eq	234cb4 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x264>  // b.none
  234c6c:	17fffff3 	b	234c38 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x1e8>
  234c70:	14000011 	b	234cb4 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x264>
  234c74:	14000010 	b	234cb4 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x264>
components/pascal/import/flre/src/FLRE.pas:5824
      end;
     end else begin
      while (XoredChunk<>0) and ((XoredChunk and $ff)<>TFLREUInt8(SearchChar)) do begin
  234c78:	14000007 	b	234c94 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x244>
components/pascal/import/flre/src/FLRE.pas:5825
       XoredChunk:=XoredChunk shr 8;
  234c7c:	f94023e0 	ldr	x0, [sp, #64]
  234c80:	d348fc00 	lsr	x0, x0, #8
  234c84:	f90023e0 	str	x0, [sp, #64]
components/pascal/import/flre/src/FLRE.pas:5826
       {$ifdef BIG_ENDIAN}dec{$else}inc{$endif}(CurrentChar);
  234c88:	f94017e0 	ldr	x0, [sp, #40]
  234c8c:	91000400 	add	x0, x0, #0x1
  234c90:	f90017e0 	str	x0, [sp, #40]
components/pascal/import/flre/src/FLRE.pas:5824
      while (XoredChunk<>0) and ((XoredChunk and $ff)<>TFLREUInt8(SearchChar)) do begin
  234c94:	f94023e0 	ldr	x0, [sp, #64]
  234c98:	f100001f 	cmp	x0, #0x0
  234c9c:	540000c0 	b.eq	234cb4 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x264>  // b.none
  234ca0:	f94023e0 	ldr	x0, [sp, #64]
  234ca4:	92401c00 	and	x0, x0, #0xff
  234ca8:	394003e1 	ldrb	w1, [sp]
  234cac:	eb01001f 	cmp	x0, x1
  234cb0:	54fffe61 	b.ne	234c7c <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x22c>  // b.any
components/pascal/import/flre/src/FLRE.pas:5829
      end;
     end;
     if XoredChunk<>0 then begin
  234cb4:	f94023e0 	ldr	x0, [sp, #64]
  234cb8:	f100001f 	cmp	x0, #0x0
  234cbc:	540000c0 	b.eq	234cd4 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x284>  // b.none
components/pascal/import/flre/src/FLRE.pas:5830
      result:=TFLREPtrUInt(pointer(CurrentChar))-TFLREPtrUInt(Text);
  234cc0:	f94017e1 	ldr	x1, [sp, #40]
  234cc4:	f94007e0 	ldr	x0, [sp, #8]
  234cc8:	cb000020 	sub	x0, x1, x0
  234ccc:	f90013e0 	str	x0, [sp, #32]
components/pascal/import/flre/src/FLRE.pas:5831
      exit;
  234cd0:	14000020 	b	234d50 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x300>
components/pascal/import/flre/src/FLRE.pas:5835
     end;
{$endif}
    end;
    inc(CurrentChunk);
  234cd4:	f9401be0 	ldr	x0, [sp, #48]
  234cd8:	91002000 	add	x0, x0, #0x8
  234cdc:	f9001be0 	str	x0, [sp, #48]
components/pascal/import/flre/src/FLRE.pas:5836
    dec(Size,SizeOf(TFLREPtrUInt));
  234ce0:	f94027e0 	ldr	x0, [sp, #72]
  234ce4:	d1002000 	sub	x0, x0, #0x8
  234ce8:	f90027e0 	str	x0, [sp, #72]
components/pascal/import/flre/src/FLRE.pas:5774
   while Size>=SizeOf(TFLREPtrUInt) do begin
  234cec:	f94027e0 	ldr	x0, [sp, #72]
  234cf0:	f100201f 	cmp	x0, #0x8
  234cf4:	54fff6c2 	b.cs	234bcc <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x17c>  // b.hs, b.nlast
components/pascal/import/flre/src/FLRE.pas:5840
   end;

   // Set chunkwise to charwise pointer
   CurrentChar:=pointer(CurrentChunk);
  234cf8:	f9401be0 	ldr	x0, [sp, #48]
  234cfc:	f90017e0 	str	x0, [sp, #40]
components/pascal/import/flre/src/FLRE.pas:5844
  end;

  // Scan rest of the remained characters, if there are any
  while Size>0 do begin
  234d00:	14000011 	b	234d44 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x2f4>
components/pascal/import/flre/src/FLRE.pas:5845
   if CurrentChar^=SearchChar then begin
  234d04:	f94017e0 	ldr	x0, [sp, #40]
  234d08:	39400001 	ldrb	w1, [x0]
  234d0c:	394003e0 	ldrb	w0, [sp]
  234d10:	6b00003f 	cmp	w1, w0
  234d14:	540000c1 	b.ne	234d2c <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x2dc>  // b.any
components/pascal/import/flre/src/FLRE.pas:5846
    result:=TFLREPtrUInt(pointer(CurrentChar))-TFLREPtrUInt(Text);
  234d18:	f94017e1 	ldr	x1, [sp, #40]
  234d1c:	f94007e0 	ldr	x0, [sp, #8]
  234d20:	cb000020 	sub	x0, x1, x0
  234d24:	f90013e0 	str	x0, [sp, #32]
components/pascal/import/flre/src/FLRE.pas:5847
    exit;
  234d28:	1400000a 	b	234d50 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x300>
components/pascal/import/flre/src/FLRE.pas:5849
   end;
   inc(CurrentChar);
  234d2c:	f94017e0 	ldr	x0, [sp, #40]
  234d30:	91000400 	add	x0, x0, #0x1
  234d34:	f90017e0 	str	x0, [sp, #40]
components/pascal/import/flre/src/FLRE.pas:5850
   dec(Size);
  234d38:	f94027e0 	ldr	x0, [sp, #72]
  234d3c:	d1000400 	sub	x0, x0, #0x1
  234d40:	f90027e0 	str	x0, [sp, #72]
components/pascal/import/flre/src/FLRE.pas:5844
  while Size>0 do begin
  234d44:	f94027e0 	ldr	x0, [sp, #72]
  234d48:	f100001f 	cmp	x0, #0x0
  234d4c:	54fffdc8 	b.hi	234d04 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x2b4>  // b.pmore
components/pascal/import/flre/src/FLRE.pas:5854
  end;

 end;
end;
  234d50:	f94013e0 	ldr	x0, [sp, #32]
  234d54:	910003bf 	mov	sp, x29
  234d58:	a8c17bfd 	ldp	x29, x30, [sp], #16
  234d5c:	d65f03c0 	ret

Here is the correct disassembler (but it is the same file, you can see they both start with a9bf7bfd with reveerse endian) ``` 0000000000234a50 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64>: PTRPOSCHAR(): components/pascal/import/flre/src/FLRE.pas:5727 const MaskA=TFLREPtrUInt({$ifdef cpu64}$fefefefefefefeff{$else}$fefefeff{$endif}); // it is: 0-$01010101 / 0-$0101010101010101 MaskB=TFLREPtrUInt({$ifdef cpu64}$8080808080808080{$else}$80808080{$endif}); var CurrentChar:PFLRERawByteChar; CurrentChunk:pptruint; XorMask,XoredChunk,Size:TFLREPtrUInt; begin 234a50: a9bf7bfd stp x29, x30, [sp, #-16]! 234a54: 910003fd mov x29, sp 234a58: d10143ff sub sp, sp, #0x50 234a5c: 390003e0 strb w0, [sp] 234a60: f90007e1 str x1, [sp, #8] 234a64: f9000be2 str x2, [sp, #16] 234a68: f9000fe3 str x3, [sp, #24] components/pascal/import/flre/src/FLRE.pas:5728 result:=-1; 234a6c: 92800000 mov x0, #0xffffffffffffffff // #-1 234a70: f90013e0 str x0, [sp, #32] components/pascal/import/flre/src/FLRE.pas:5730 Size:=TextLength-Offset; 234a74: f9400be0 ldr x0, [sp, #16] 234a78: f9400fe1 ldr x1, [sp, #24] 234a7c: cb010000 sub x0, x0, x1 234a80: f90027e0 str x0, [sp, #72] components/pascal/import/flre/src/FLRE.pas:5731 if (Offset<TextLength) and (TFLREPtrInt(Size)>0) then begin 234a84: f9400fe1 ldr x1, [sp, #24] 234a88: f9400be0 ldr x0, [sp, #16] 234a8c: eb00003f cmp x1, x0 234a90: 5400160a b.ge 234d50 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x300> // b.tcont 234a94: f94027e0 ldr x0, [sp, #72] 234a98: f100001f cmp x0, #0x0 234a9c: 540015ad b.le 234d50 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x300> components/pascal/import/flre/src/FLRE.pas:5733 XorMask:=TFLREUInt8(SearchChar); 234aa0: 394003e0 ldrb w0, [sp] 234aa4: f9001fe0 str x0, [sp, #56] components/pascal/import/flre/src/FLRE.pas:5734 XorMask:=XorMask or (XorMask shl 8); 234aa8: f9401fe0 ldr x0, [sp, #56] 234aac: d378dc00 lsl x0, x0, #8 234ab0: f9401fe1 ldr x1, [sp, #56] 234ab4: aa000020 orr x0, x1, x0 234ab8: f9001fe0 str x0, [sp, #56] components/pascal/import/flre/src/FLRE.pas:5735 XorMask:=XorMask or (XorMask shl 16); 234abc: f9401fe0 ldr x0, [sp, #56] 234ac0: d370bc00 lsl x0, x0, #16 234ac4: f9401fe1 ldr x1, [sp, #56] 234ac8: aa000020 orr x0, x1, x0 234acc: f9001fe0 str x0, [sp, #56] components/pascal/import/flre/src/FLRE.pas:5737 {$ifdef cpu64} XorMask:=XorMask or (XorMask shl 32); 234ad0: f9401fe0 ldr x0, [sp, #56] 234ad4: d3607c01 lsl x1, x0, #32 234ad8: f9401fe0 ldr x0, [sp, #56] 234adc: aa010000 orr x0, x0, x1 234ae0: f9001fe0 str x0, [sp, #56] components/pascal/import/flre/src/FLRE.pas:5740 {$endif} CurrentChar:=@Text[Offset]; 234ae4: f94007e1 ldr x1, [sp, #8] 234ae8: f9400fe0 ldr x0, [sp, #24] 234aec: 8b000020 add x0, x1, x0 234af0: f90017e0 str x0, [sp, #40] components/pascal/import/flre/src/FLRE.pas:5742 if Size>(SizeOf(TFLREPtrUInt)*2) then begin 234af4: f94027e0 ldr x0, [sp, #72] 234af8: f100401f cmp x0, #0x10 234afc: 54001249 b.ls 234d44 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x2f4> // b.plast components/pascal/import/flre/src/FLRE.pas:5745 // Alignment initialization CurrentChunk:=pointer(TFLREPtrUInt(TFLREPtrUInt(CurrentChar) and not (SizeOf(TFLREPtrUInt)-1))); 234b00: f94017e0 ldr x0, [sp, #40] 234b04: 927df000 and x0, x0, #0xfffffffffffffff8 234b08: f9001be0 str x0, [sp, #48] components/pascal/import/flre/src/FLRE.pas:5748 // Try to get first chunk if TFLREPtrUInt(CurrentChunk)>=TFLREPtrUInt(Text) then begin 234b0c: f9401be0 ldr x0, [sp, #48] 234b10: f94007e1 ldr x1, [sp, #8] 234b14: eb01001f cmp x0, x1 234b18: 540000e3 b.cc 234b34 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0xe4> // b.lo, b.ul, b.last components/pascal/import/flre/src/FLRE.pas:5750 // Yes, we can the get first chunk XoredChunk:=CurrentChunk^ xor XorMask; 234b1c: f9401be0 ldr x0, [sp, #48] 234b20: f9400001 ldr x1, [x0] 234b24: f9401fe0 ldr x0, [sp, #56] 234b28: ca010000 eor x0, x0, x1 234b2c: f90023e0 str x0, [sp, #64] 234b30: 14000002 b 234b38 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0xe8> components/pascal/import/flre/src/FLRE.pas:5753 end else begin // No, so return dummy value to force to check the few first characters XoredChunk:=0; 234b34: f90023ff str xzr, [sp, #64] components/pascal/import/flre/src/FLRE.pas:5757 end; // Jump to next chunk inc(CurrentChunk); 234b38: f9401be0 ldr x0, [sp, #48] 234b3c: 91002000 add x0, x0, #0x8 234b40: f9001be0 str x0, [sp, #48] components/pascal/import/flre/src/FLRE.pas:5760 // Subtract the first chunk from size dec(TFLREPtrUInt(Size),TFLREPtrUInt(CurrentChunk)-TFLREPtrUInt(CurrentChar)); 234b44: f9401be0 ldr x0, [sp, #48] 234b48: f94017e1 ldr x1, [sp, #40] 234b4c: cb010000 sub x0, x0, x1 234b50: f94027e1 ldr x1, [sp, #72] 234b54: cb000021 sub x1, x1, x0 234b58: f90027e1 str x1, [sp, #72] components/pascal/import/flre/src/FLRE.pas:5763 // Scan first chunk if (((XoredChunk+MaskA) and not XoredChunk) and MaskB)<>0 then begin 234b5c: f94023e0 ldr x0, [sp, #64] 234b60: b200c3e1 mov x1, #0x101010101010101 // #72340172838076673 234b64: cb010001 sub x1, x0, x1 234b68: f94023e0 ldr x0, [sp, #64] 234b6c: aa2003e0 mvn x0, x0 234b70: 8a010000 and x0, x0, x1 234b74: 9201c000 and x0, x0, #0x8080808080808080 234b78: f100001f cmp x0, #0x0 234b7c: 54000b80 b.eq 234cec <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x29c> // b.none components/pascal/import/flre/src/FLRE.pas:5764 while TFLREPtrUInt(CurrentChar)<TFLREPtrUInt(CurrentChunk) do begin 234b80: 1400000e b 234bb8 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x168> components/pascal/import/flre/src/FLRE.pas:5765 if CurrentChar^=SearchChar then begin 234b84: f94017e0 ldr x0, [sp, #40] 234b88: 39400001 ldrb w1, [x0] 234b8c: 394003e0 ldrb w0, [sp] 234b90: 6b00003f cmp w1, w0 234b94: 540000c1 b.ne 234bac <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x15c> // b.any components/pascal/import/flre/src/FLRE.pas:5766 result:=TFLREPtrUInt(CurrentChar)-TFLREPtrUInt(Text); 234b98: f94017e0 ldr x0, [sp, #40] 234b9c: f94007e1 ldr x1, [sp, #8] 234ba0: cb010000 sub x0, x0, x1 234ba4: f90013e0 str x0, [sp, #32] components/pascal/import/flre/src/FLRE.pas:5767 exit; 234ba8: 1400006a b 234d50 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x300> components/pascal/import/flre/src/FLRE.pas:5769 end; inc(CurrentChar); 234bac: f94017e0 ldr x0, [sp, #40] 234bb0: 91000400 add x0, x0, #0x1 234bb4: f90017e0 str x0, [sp, #40] components/pascal/import/flre/src/FLRE.pas:5764 while TFLREPtrUInt(CurrentChar)<TFLREPtrUInt(CurrentChunk) do begin 234bb8: f94017e0 ldr x0, [sp, #40] 234bbc: f9401be1 ldr x1, [sp, #48] 234bc0: eb01001f cmp x0, x1 234bc4: 54fffe03 b.cc 234b84 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x134> // b.lo, b.ul, b.last components/pascal/import/flre/src/FLRE.pas:5774 end; end; // Scan until the last whole chunk while Size>=SizeOf(TFLREPtrUInt) do begin 234bc8: 14000049 b 234cec <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x29c> components/pascal/import/flre/src/FLRE.pas:5775 XoredChunk:=CurrentChunk^ xor XorMask; 234bcc: f9401be0 ldr x0, [sp, #48] 234bd0: f9400000 ldr x0, [x0] 234bd4: f9401fe1 ldr x1, [sp, #56] 234bd8: ca000020 eor x0, x1, x0 234bdc: f90023e0 str x0, [sp, #64] components/pascal/import/flre/src/FLRE.pas:5776 if (((XoredChunk+MaskA) and not XoredChunk) and MaskB)<>0 then begin 234be0: f94023e1 ldr x1, [sp, #64] 234be4: b200c3e0 mov x0, #0x101010101010101 // #72340172838076673 234be8: cb000021 sub x1, x1, x0 234bec: f94023e0 ldr x0, [sp, #64] 234bf0: aa2003e0 mvn x0, x0 234bf4: 8a010000 and x0, x0, x1 234bf8: 9201c000 and x0, x0, #0x8080808080808080 234bfc: f100001f cmp x0, #0x0 234c00: 540006a0 b.eq 234cd4 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x284> // b.none components/pascal/import/flre/src/FLRE.pas:5814 result:=TFLREPtrUInt(pointer(@CurrentChar[7]))-TFLREPtrUInt(Text); exit; end; {$endif} {$else} CurrentChar:=pointer({$ifdef BIG_ENDIAN}TFLREPtrUInt(TFLREPtrUInt(CurrentChunk)+TFLREPtrUInt(SizeOf(TFLREPtrUInt)-1)){$else}CurrentChunk{$endif}); 234c04: f9401be0 ldr x0, [sp, #48] 234c08: f90017e0 str x0, [sp, #40] components/pascal/import/flre/src/FLRE.pas:5815 XoredChunk:=XoredChunk xor XorMask; 234c0c: f94023e1 ldr x1, [sp, #64] 234c10: f9401fe0 ldr x0, [sp, #56] 234c14: ca010000 eor x0, x0, x1 234c18: f90023e0 str x0, [sp, #64] components/pascal/import/flre/src/FLRE.pas:5816 if TFLREUInt8(SearchChar)=0 then begin 234c1c: 394003e0 ldrb w0, [sp] 234c20: 7100001f cmp w0, #0x0 234c24: 54000381 b.ne 234c94 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x244> // b.any components/pascal/import/flre/src/FLRE.pas:5818 // Special case XoredChunk:=not XoredChunk; 234c28: f94023e0 ldr x0, [sp, #64] 234c2c: aa2003e0 mvn x0, x0 234c30: f90023e0 str x0, [sp, #64] components/pascal/import/flre/src/FLRE.pas:5819 while (XoredChunk<>0) and ((XoredChunk and $ff)<>$ff) do begin 234c34: 14000007 b 234c50 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x200> components/pascal/import/flre/src/FLRE.pas:5820 XoredChunk:=XoredChunk shr 8; 234c38: f94023e0 ldr x0, [sp, #64] 234c3c: d348fc00 lsr x0, x0, #8 234c40: f90023e0 str x0, [sp, #64] components/pascal/import/flre/src/FLRE.pas:5821 {$ifdef BIG_ENDIAN}dec{$else}inc{$endif}(CurrentChar); 234c44: f94017e0 ldr x0, [sp, #40] 234c48: 91000400 add x0, x0, #0x1 234c4c: f90017e0 str x0, [sp, #40] components/pascal/import/flre/src/FLRE.pas:5819 while (XoredChunk<>0) and ((XoredChunk and $ff)<>$ff) do begin 234c50: f94023e0 ldr x0, [sp, #64] 234c54: f100001f cmp x0, #0x0 234c58: 540002e0 b.eq 234cb4 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x264> // b.none 234c5c: f94023e0 ldr x0, [sp, #64] 234c60: 92401c00 and x0, x0, #0xff 234c64: f103fc1f cmp x0, #0xff 234c68: 54000260 b.eq 234cb4 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x264> // b.none 234c6c: 17fffff3 b 234c38 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x1e8> 234c70: 14000011 b 234cb4 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x264> 234c74: 14000010 b 234cb4 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x264> components/pascal/import/flre/src/FLRE.pas:5824 end; end else begin while (XoredChunk<>0) and ((XoredChunk and $ff)<>TFLREUInt8(SearchChar)) do begin 234c78: 14000007 b 234c94 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x244> components/pascal/import/flre/src/FLRE.pas:5825 XoredChunk:=XoredChunk shr 8; 234c7c: f94023e0 ldr x0, [sp, #64] 234c80: d348fc00 lsr x0, x0, #8 234c84: f90023e0 str x0, [sp, #64] components/pascal/import/flre/src/FLRE.pas:5826 {$ifdef BIG_ENDIAN}dec{$else}inc{$endif}(CurrentChar); 234c88: f94017e0 ldr x0, [sp, #40] 234c8c: 91000400 add x0, x0, #0x1 234c90: f90017e0 str x0, [sp, #40] components/pascal/import/flre/src/FLRE.pas:5824 while (XoredChunk<>0) and ((XoredChunk and $ff)<>TFLREUInt8(SearchChar)) do begin 234c94: f94023e0 ldr x0, [sp, #64] 234c98: f100001f cmp x0, #0x0 234c9c: 540000c0 b.eq 234cb4 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x264> // b.none 234ca0: f94023e0 ldr x0, [sp, #64] 234ca4: 92401c00 and x0, x0, #0xff 234ca8: 394003e1 ldrb w1, [sp] 234cac: eb01001f cmp x0, x1 234cb0: 54fffe61 b.ne 234c7c <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x22c> // b.any components/pascal/import/flre/src/FLRE.pas:5829 end; end; if XoredChunk<>0 then begin 234cb4: f94023e0 ldr x0, [sp, #64] 234cb8: f100001f cmp x0, #0x0 234cbc: 540000c0 b.eq 234cd4 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x284> // b.none components/pascal/import/flre/src/FLRE.pas:5830 result:=TFLREPtrUInt(pointer(CurrentChar))-TFLREPtrUInt(Text); 234cc0: f94017e1 ldr x1, [sp, #40] 234cc4: f94007e0 ldr x0, [sp, #8] 234cc8: cb000020 sub x0, x1, x0 234ccc: f90013e0 str x0, [sp, #32] components/pascal/import/flre/src/FLRE.pas:5831 exit; 234cd0: 14000020 b 234d50 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x300> components/pascal/import/flre/src/FLRE.pas:5835 end; {$endif} end; inc(CurrentChunk); 234cd4: f9401be0 ldr x0, [sp, #48] 234cd8: 91002000 add x0, x0, #0x8 234cdc: f9001be0 str x0, [sp, #48] components/pascal/import/flre/src/FLRE.pas:5836 dec(Size,SizeOf(TFLREPtrUInt)); 234ce0: f94027e0 ldr x0, [sp, #72] 234ce4: d1002000 sub x0, x0, #0x8 234ce8: f90027e0 str x0, [sp, #72] components/pascal/import/flre/src/FLRE.pas:5774 while Size>=SizeOf(TFLREPtrUInt) do begin 234cec: f94027e0 ldr x0, [sp, #72] 234cf0: f100201f cmp x0, #0x8 234cf4: 54fff6c2 b.cs 234bcc <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x17c> // b.hs, b.nlast components/pascal/import/flre/src/FLRE.pas:5840 end; // Set chunkwise to charwise pointer CurrentChar:=pointer(CurrentChunk); 234cf8: f9401be0 ldr x0, [sp, #48] 234cfc: f90017e0 str x0, [sp, #40] components/pascal/import/flre/src/FLRE.pas:5844 end; // Scan rest of the remained characters, if there are any while Size>0 do begin 234d00: 14000011 b 234d44 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x2f4> components/pascal/import/flre/src/FLRE.pas:5845 if CurrentChar^=SearchChar then begin 234d04: f94017e0 ldr x0, [sp, #40] 234d08: 39400001 ldrb w1, [x0] 234d0c: 394003e0 ldrb w0, [sp] 234d10: 6b00003f cmp w1, w0 234d14: 540000c1 b.ne 234d2c <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x2dc> // b.any components/pascal/import/flre/src/FLRE.pas:5846 result:=TFLREPtrUInt(pointer(CurrentChar))-TFLREPtrUInt(Text); 234d18: f94017e1 ldr x1, [sp, #40] 234d1c: f94007e0 ldr x0, [sp, #8] 234d20: cb000020 sub x0, x1, x0 234d24: f90013e0 str x0, [sp, #32] components/pascal/import/flre/src/FLRE.pas:5847 exit; 234d28: 1400000a b 234d50 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x300> components/pascal/import/flre/src/FLRE.pas:5849 end; inc(CurrentChar); 234d2c: f94017e0 ldr x0, [sp, #40] 234d30: 91000400 add x0, x0, #0x1 234d34: f90017e0 str x0, [sp, #40] components/pascal/import/flre/src/FLRE.pas:5850 dec(Size); 234d38: f94027e0 ldr x0, [sp, #72] 234d3c: d1000400 sub x0, x0, #0x1 234d40: f90027e0 str x0, [sp, #72] components/pascal/import/flre/src/FLRE.pas:5844 while Size>0 do begin 234d44: f94027e0 ldr x0, [sp, #72] 234d48: f100001f cmp x0, #0x0 234d4c: 54fffdc8 b.hi 234d04 <FLRE_$$_PTRPOSCHAR$CHAR$PCHAR$INT64$INT64$$INT64+0x2b4> // b.pmore components/pascal/import/flre/src/FLRE.pas:5854 end; end; end; 234d50: f94013e0 ldr x0, [sp, #32] 234d54: 910003bf mov sp, x29 234d58: a8c17bfd ldp x29, x30, [sp], #16 234d5c: d65f03c0 ret ```
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
BeRo1985/flre#89
No description provided.