[*] Binary protection state of libxt_tcp.so

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


[*] Function printf tear down of libxt_tcp.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_tcp.so @ 0xb08 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.00000b08 ()                      | void fcn_00000b08 (int16_t arg1) {
                                                 |     r0 = arg1;
    0x00000b08 invalid                           |     goto label_3;
    0x00000b0a ands r1, r0, 1                    |     r1 = r0 & 1;
    0x00000b0e push {r4, r5, r6, lr}             |     
    0x00000b10 mov r6, r0                        |     r6 = r0;
    0x00000b12 itt ne                            |     
                                                 |     if (r1 == r0) {
    0x00000b14 movne r5, 0xfe                    |         r5 = 0xfe;
                                                 |     }
                                                 |     if (r1 == r0) {
    0x00000b16 movne r4, 0                       |         r4 = 0;
                                                 |     }
                                                 |     if (r1 != r0) {
    0x00000b18 bne 0xb36                         |         goto label_1;
                                                 |     }
                                                 | label_0:
    0x00000b1a lsls r2, r6, 0x1e                 |     r2 = r6 << 0x1e;
                                                 |     if (r2 < r6) {
    0x00000b1c bmi 0xb64                         |         goto label_4;
                                                 |     }
    0x00000b1e ldr r2, [pc, 0x58]                |     
    0x00000b20 movs r4, 1                        |     r4 = 1;
    0x00000b22 add r2, pc                        |     r2 = 0x16a0;
                                                 |     do {
    0x00000b24 add.w r3, r2, r4, lsl 3           |         r3 = r2 + (r4 << 3);
    0x00000b28 adds r4, 1                        |         r4++;
    0x00000b2a ldr r3, [r3, 0xc]                 |         r3 = *((r3 + 0xc));
    0x00000b2c tst r6, r3                        |         
    0x00000b2e beq 0xb24                         |         
                                                 |     } while ((r6 & r3) == 0);
                                                 | label_2:
    0x00000b30 mvns r3, r3                       |     r3 = ~r3;
    0x00000b32 uxtb r5, r3                       |     r5 = (int8_t) r3;
                                                 |     if (r1 != 0) {
    0x00000b34 cbnz r1, 0xb5c                    |         goto label_5;
                                                 |     }
                                                 | label_1:
    0x00000b36 ldr r3, [pc, 0x44]                |     
    0x00000b38 movs r0, 1                        |     r0 = 1;
    0x00000b3a ldr r1, [pc, 0x44]                |     
    0x00000b3c add r3, pc                        |     r3 = 0x16be;
    0x00000b3e ldr.w r2, [r3, r4, lsl 3]         |     r2 = *(0x16be);
    0x00000b42 add r1, pc                        |     r1 = 0x16c8;
    0x00000b44 blx 0x7e0                         |     fcn_000007e0 ();
    0x00000b48 ands r6, r5                       |     r6 &= r5;
                                                 |     if (r6 == r5) {
    0x00000b4a beq 0xb6a                         |         goto label_6;
                                                 |     }
    0x00000b4c lsls r3, r6, 0x1f                 |     r3 = r6 << 0x1f;
    0x00000b4e mov.w r1, 1                       |     r1 = 1;
    0x00000b52 mov.w r4, 0                       |     r4 = 0;
    0x00000b56 mov.w r5, 0xfe                    |     r5 = 0xfe;
                                                 |     if (r3 >= r6) {
    0x00000b5a bpl 0xb1a                         |         goto label_0;
                                                 |     }
                                                 | label_5:
    0x00000b5c movs r0, 0x2c                     |     r0 = 0x2c;
    0x00000b5e blx 0x7d0                         |     printf_chk ()
    0x00000b62 b 0xb36                           |     goto label_1;
                                                 | label_4:
    0x00000b64 movs r4, 1                        |     r4 = 1;
    0x00000b66 movs r3, 2                        |     r3 = 2;
    0x00000b68 b 0xb30                           |     goto label_2;
                                                 | label_6:
    0x00000b6a pop {r4, r5, r6, pc}              |     
                                                 | label_3:
    0x00000b6c ldr r1, [pc, 0x14]                |     
    0x00000b6e movs r0, 1                        |     r0 = 1;
    0x00000b70 add r1, pc                        |     r1 = 0x16f8;
    0x00000b72 b.w 0x7dc                         |     return void (*0x7dc)() ();
                                                 | }

[*] Function printf used 2 times libxt_tcp.so