[*] Binary protection state of libweb_encoding.so

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


[*] Function sprintf tear down of libweb_encoding.so

    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libweb_encoding.so @ 0x4a0 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) sym.web_encoding_encode ()                   | void web_encoding_encode (uint32_t arg1, int16_t arg2) {
                                                         |     int16_t var_0h;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     if (? >= ?) {
    0x000004a0 ldrbmi lr, [r0, sp, lsr 18]!              |         
                                                         |     }
    0x000004a4 sub sp, 8                                 |     
    0x000004a6 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x000004a8 beq.w 0x690                               |         goto label_3;
                                                         |     }
    0x000004ac mov r6, r1                                |     r6 = r1;
    0x000004ae mov r4, r0                                |     r4 = r0;
    0x000004b0 blx 0x3c0                                 |     r0 = strlen (r0);
    0x000004b4 add.w r0, r0, r0, lsl 2                   |     r0 += (r0 << 2);
    0x000004b8 adds r0, 1                                |     r0++;
    0x000004ba blx 0x39c                                 |     r0 = malloc (r0);
    0x000004be mov r7, r0                                |     r7 = r0;
    0x000004c0 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x000004c2 beq.w 0x690                               |         goto label_3;
                                                         |     }
    0x000004c6 ldrb r3, [r4]                             |     r3 = *(r4);
                                                         |     if (r3 == 0) {
    0x000004c8 cbz r3, 0x508                             |         goto label_4;
                                                         |     }
    0x000004ca ldr.w sl, [pc, 0x1d0]                     |     
    0x000004ce movw r8, 0x2635                           |     
    0x000004d2 ldr.w sb, [pc, 0x1cc]                     |     
    0x000004d6 movs r5, 0                                |     r5 = 0;
    0x000004d8 movt r8, 0x7f00                           |     r8 = 0x7f002635;
    0x000004dc add sl, pc                                |     sl = 0xb7e;
    0x000004de add sb, pc                                |     sb = 0xb84;
                                                         |     do {
    0x000004e0 cmp r6, 5                                 |         
                                                         |         if (r6 <= 5) {
    0x000004e2 bhi 0x500                                 |             
                                                         |             /* switch table (5 cases) at 0x4e8 */
    0x000004e4 tbb [pc, r6]                              |             __asm ("tbb [0x000004ec]");
    0x000004ee cmp r3, 0x22                              |             
                                                         |             if (r3 == 0x22) {
    0x000004f0 beq.w 0x688                               |                 goto label_5;
                                                         |             }
    0x000004f4 cmp r3, 0x27                              |             
                                                         |             if (r3 == 0x27) {
    0x000004f6 beq.w 0x688                               |                 goto label_5;
                                                         |             }
                                                         | label_0:
    0x000004fa invalid                                   |             
    0x000004fc strb r3, [r0]                             |             *(r0) = r3;
    0x000004fe adds r0, r7, r5                           |             r0 = r7 + r5;
                                                         |         }
                                                         | label_1:
    0x00000500 ldrb r3, [r4, 1]!                         |         r3 = *((r4 += 1));
    0x00000504 cmp r3, 0                                 |         
    0x00000506 bne 0x4e0                                 |         
                                                         |     } while (r3 != 0);
                                                         | label_4:
    0x00000508 movs r3, 0                                |     r3 = 0;
    0x0000050a strb r3, [r0]                             |     *(r0) = r3;
    0x0000050c mov r0, r7                                |     r0 = r7;
    0x0000050e add sp, 8                                 |     
    0x00000510 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}    |     
    0x00000548 cmp r3, 0x3e                              |     
                                                         |     if (r3 > 0x3e) {
    0x0000054a bhi 0x5e4                                 |         goto label_6;
                                                         |     }
    0x0000054c cmp r3, 0x1f                              |     
                                                         |     if (r3 < 0x1f) {
    0x0000054e bls 0x4fa                                 |         goto label_0;
                                                         |     }
    0x00000550 sub.w r1, r3, 0x20                        |     r1 = r3 - 0x20;
    0x00000554 movw r2, 0x3af                            |     
    0x00000558 uxtb r1, r1                               |     r1 = (int8_t) r1;
    0x0000055a movt r2, 0x5800                           |     r2 = 0x580003af;
    0x0000055e lsrs r2, r1                               |     r2 >>= r1;
    0x00000560 lsls r2, r2, 0x1f                         |     r2 <<= 0x1f;
                                                         |     if (r2 >= r2) {
    0x00000562 bpl 0x4fa                                 |         goto label_0;
                                                         |     }
    0x00000564 str r3, [sp]                              |     *(sp) = r3;
    0x00000566 mov r3, sb                                |     r3 = sb;
                                                         | label_2:
    0x00000568 mov.w r2, -1                              |     r2 = -1;
    0x0000056c movs r1, 1                                |     r1 = 1;
    0x0000056e blx 0x3cc                                 |     r0 = sprintf_chk ()
    0x00000572 add r5, r0                                |     r5 += r0;
    0x00000574 adds r0, r7, r5                           |     r0 = r7 + r5;
    0x00000576 b 0x500                                   |     goto label_1;
    0x00000578 cmp r3, 0x3e                              |     
                                                         |     if (r3 < 0x3e) {
    0x0000057a bls 0x5b6                                 |         goto label_7;
                                                         |     }
    0x0000057c cmp r3, 0x5c                              |     
                                                         |     if (r3 != 0x5c) {
    0x0000057e bne 0x4fa                                 |         goto label_0;
                                                         |     }
    0x00000580 ldr r3, [pc, 0x120]                       |     
    0x00000582 adds r5, 2                                |     r5 += 2;
    0x00000584 add r3, pc                                |     r3 = 0xc2c;
    0x00000586 ldrh r3, [r3]                             |     r3 = *(r3);
    0x00000588 strh r3, [r0]                             |     *(r0) = r3;
    0x0000058a adds r0, r7, r5                           |     r0 = r7 + r5;
    0x0000058c b 0x500                                   |     goto label_1;
    0x0000058e sub.w r2, r3, 0x22                        |     r2 = r3 - 0x22;
    0x00000592 uxtb r2, r2                               |     r2 = (int8_t) r2;
    0x00000594 cmp r2, 0x1e                              |     
                                                         |     if (r2 > 0x1e) {
    0x00000596 bhi 0x4fa                                 |         goto label_0;
                                                         |     }
    0x00000598 lsr.w r2, r8, r2                          |     r2 = r8 >> r2;
    0x0000059c lsls r2, r2, 0x1f                         |     r2 <<= 0x1f;
                                                         |     if (r2 >= r2) {
    0x0000059e bpl 0x4fa                                 |         goto label_0;
                                                         |     }
    0x000005a0 str r3, [sp]                              |     *(sp) = r3;
    0x000005a2 adds r5, 5                                |     r5 += 5;
    0x000005a4 ldr r3, [pc, 0x100]                       |     
    0x000005a6 mov.w r2, -1                              |     r2 = -1;
    0x000005aa movs r1, 1                                |     r1 = 1;
    0x000005ac add r3, pc                                |     r3 = 0xc58;
    0x000005ae blx 0x3cc                                 |     sprintf_chk ()
    0x000005b2 adds r0, r7, r5                           |     r0 = r7 + r5;
    0x000005b4 b 0x500                                   |     goto label_1;
                                                         | label_7:
    0x000005b6 cmp r3, 0x21                              |     
                                                         |     if (r3 < 0x21) {
    0x000005b8 bls 0x4fa                                 |         goto label_0;
                                                         |     }
    0x000005ba sub.w r1, r3, 0x22                        |     r1 = r3 - 0x22;
    0x000005be movw r2, 0x4f1                            |     
    0x000005c2 uxtb r1, r1                               |     r1 = (int8_t) r1;
    0x000005c4 movt r2, 0x1e00                           |     r2 = 0x1e0004f1;
    0x000005c8 lsrs r2, r1                               |     r2 >>= r1;
    0x000005ca lsls r1, r2, 0x1f                         |     r1 = r2 << 0x1f;
                                                         |     if (r1 >= r2) {
    0x000005cc bpl 0x4fa                                 |         goto label_0;
                                                         |     }
    0x000005ce str r3, [sp]                              |     *(sp) = r3;
    0x000005d0 adds r5, 5                                |     r5 += 5;
    0x000005d2 ldr r3, [pc, 0xd8]                        |     
    0x000005d4 mov.w r2, -1                              |     r2 = -1;
    0x000005d8 movs r1, 1                                |     r1 = 1;
    0x000005da add r3, pc                                |     r3 = 0xc8c;
    0x000005dc blx 0x3cc                                 |     sprintf_chk ()
    0x000005e0 adds r0, r7, r5                           |     r0 = r7 + r5;
    0x000005e2 b 0x500                                   |     goto label_1;
                                                         | label_6:
    0x000005e4 sub.w r2, r3, 0x5c                        |     r2 = r3 - 0x5c;
    0x000005e8 uxtb r1, r2                               |     r1 = (int8_t) r2;
    0x000005ea cmp r1, 0x22                              |     
                                                         |     if (r1 > 0x22) {
    0x000005ec bhi 0x4fa                                 |         goto label_0;
                                                         |     }
    0x000005ee cmp r2, 0x22                              |     
                                                         |     if (r2 > 0x22) {
    0x000005f0 bhi 0x4fa                                 |         goto label_0;
                                                         |     }
    0x000005f2 adr r1, 8                                 |     r1 = 8;
    0x000005f4 ldr.w r2, [r1, r2, lsl 2]                 |     offset_0 = r2 << 2;
                                                         |     r2 = *((r1 + offset_0));
    0x000005f8 add r1, r2                                |     r1 += r2;
                                                         |     /* switch table (35 cases) at 0x5fc */
    0x000005fa bx r1                                     |     return uint32_t (*r1)() ();
                                                         | label_5:
    0x00000688 str r3, [sp]                              |     *(sp) = r3;
    0x0000068a ldr r3, [pc, 0x24]                        |     
    0x0000068c add r3, pc                                |     r3 = 0xd42;
    0x0000068e b 0x568                                   |     goto label_2;
                                                         | label_3:
    0x00000690 movs r7, 0                                |     r7 = 0;
    0x00000692 mov r0, r7                                |     r0 = r7;
    0x00000694 add sp, 8                                 |     
    0x00000696 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}    |     
                                                         | }

[*] Function sprintf used 4 times libweb_encoding.so