[*] Binary protection state of libxt_string.so

  
  	Full RELRO     Canary found      NX enabled   DSO          No RPATH     No RUNPATH   No Symbols


[*] Function printf tear down of libxt_string.so

    ; assembly                           | /* r2dec pseudo code output */
                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/xtables/libxt_string.so @ 0xb6c */
                                         | #include <stdint.h>
                                         |  
    ; (fcn) fcn.00000b6c ()              | void fcn_00000b6c (int16_t arg1, int16_t arg2) {
                                         |     r0 = arg1;
                                         |     r1 = arg2;
                                         | label_1:
    0x00000758 invalid                   |     void (*0x75c)() ();
    0x00000b6c push {r4, r5, r6, lr}     |     
    0x00000b6e mov r5, r1                |     r5 = r1;
    0x00000b70 ldr r1, [pc, 0x48]        |     
    0x00000b72 mov r4, r0                |     r4 = r0;
    0x00000b74 movs r0, 1                |     r0 = 1;
    0x00000b76 ldr r6, [pc, 0x48]        |     
    0x00000b78 add r1, pc                |     r1 = 0x1738;
    0x00000b7a add r6, pc                |     r6 = 0x1740;
    0x00000b7c blx 0x76c                 |     fcn_0000076c ();
                                         |     if (r5 == 0) {
    0x00000b80 cbz r5, 0xbb2             |         goto label_2;
                                         |     }
    0x00000b82 subs r4, 1                |     r4--;
    0x00000b84 add r5, r4                |     r5 += r4;
    0x00000b86 b 0xb90                   |     
                                         |     while (r0 != 0x5c) {
    0x00000b88 blx 0x75c                 |         printf_chk ()
    0x00000b8c cmp r5, r4                |         
                                         |         if (r5 == r4) {
    0x00000b8e beq 0xbb2                 |             goto label_2;
                                         |         }
                                         | label_0:
    0x00000b90 ldrb r0, [r4, 1]!         |         r0 = *((r4 += 1));
    0x00000b94 cmp r0, 0x5c              |         
    0x00000b96 it ne                     |         
                                         |         if (r0 != 0x5c) {
    0x00000b98 cmpne r0, 0x22            |             __asm ("cmpne r0, 0x22");
                                         |         }
    0x00000b9a bne 0xb88                 |         
                                         |     }
    0x00000b9c ldr r3, [pc, 0x24]        |     r3 = *(0xbc4);
    0x00000b9e movs r0, 0x5c             |     r0 = 0x5c;
    0x00000ba0 ldr r3, [r6, r3]          |     r3 = *((r6 + r3));
    0x00000ba2 ldr r1, [r3]              |     r1 = *(0xbc4);
    0x00000ba4 blx 0x784                 |     fcn_00000784 ();
    0x00000ba8 ldrb r0, [r4]             |     r0 = *(r4);
    0x00000baa blx 0x75c                 |     printf_chk ()
    0x00000bae cmp r5, r4                |     
                                         |     if (r5 != r4) {
    0x00000bb0 bne 0xb90                 |         goto label_0;
                                         |     }
                                         | label_2:
    0x00000bb2 pop.w {r4, r5, r6, lr}    |     
    0x00000bb6 movs r0, 0x22             |     r0 = 0x22;
    0x00000bb8 b.w 0x758                 |     goto label_1;
                                         | }

[*] Function printf used 3 times libxt_string.so