[*] Binary protection state of bootblocktool

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


[*] Function fprintf tear down of bootblocktool

    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/bin/bootblocktool @ 0xc04 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.00000c04 ()                                  | void fcn_00000c04 (int16_t arg_8h, int16_t arg_ch, int16_t arg_10h, int16_t arg_14h, int16_t arg_18h, int16_t arg_1ch) {
                                                             |     int16_t var_0h;
                                                             | label_17:
    0x00000748 vadd.i32 d18, d12, d0                         |     __asm ("vadd.i32 d18, d12, d0");
                                                             |     if (? != ?) {
    0x0000074c bne.w 0xafe                                   |         goto label_18;
                                                             |     }
    0x00000750 ldr r3, [pc, 0x3fc]                           |     
    0x00000752 movs r2, 1                                    |     r2 = 1;
    0x00000754 sub.w r6, r8, 2                               |     r6 = r8 - 2;
    0x00000758 add r3, pc                                    |     r3 = 0x12ac;
    0x0000075a strb r2, [r3, 4]                              |     *((r3 + 4)) = r2;
    0x0000075c cmp r7, 0                                     |     
                                                             |     if (r7 == 0) {
    0x0000075e beq 0x846                                     |         goto label_19;
                                                             |     }
                                                             | label_12:
    0x00000760 ldr r3, [pc, 0x3f0]                           |     
    0x00000762 add r3, pc                                    |     r3 = 0x12ba;
    0x00000764 str r3, [sp, 0x10]                            |     *(arg_10h) = r3;
    0x00000766 ldr r3, [pc, 0x3f0]                           |     
    0x00000768 add r3, pc                                    |     r3 = 0x12c6;
    0x0000076a str r3, [sp, 0x14]                            |     *(arg_14h) = r3;
    0x0000076c ldr r3, [pc, 0x3ec]                           |     
    0x0000076e add r3, pc                                    |     r3 = 0x12ce;
    0x00000770 str r3, [sp, 8]                               |     *(arg_8h) = r3;
    0x00000772 ldr r3, [pc, 0x3ec]                           |     
    0x00000774 add r3, pc                                    |     r3 = 0x12da;
    0x00000776 str r3, [sp, 0xc]                             |     *(arg_ch) = r3;
                                                             | label_1:
    0x00000778 mov r8, r5                                    |     r8 = r5;
    0x0000077a ldr r4, [r8], 4                               |     r4 = *(r8);
                                                             |     r8 += 4;
    0x0000077e ldrb.w sl, [r4]                               |     sl = *(r4);
    0x00000782 cmp.w sl, 0x2d                                |     
                                                             |     if (sl != 0x2d) {
    0x00000786 bne.w 0x88e                                   |         goto label_20;
                                                             |     }
    0x0000078a ldrb r3, [r4, 1]                              |     r3 = *((r4 + 1));
    0x0000078c cmp r3, 0x68                                  |     
                                                             |     if (r3 == 0x68) {
    0x0000078e bne 0x798                                     |         
    0x00000790 ldrb r3, [r4, 2]                              |         r3 = *((r4 + 2));
    0x00000792 cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x00000794 beq.w 0xaec                                   |             goto label_21;
                                                             |         }
                                                             |     }
    0x00000798 cmp.w sl, 0x2d                                |     
                                                             |     if (sl != 0x2d) {
    0x0000079c bne 0x88e                                     |         goto label_20;
                                                             |     }
    0x0000079e ldrb r3, [r4, 1]                              |     r3 = *((r4 + 1));
    0x000007a0 cmp r3, 0x78                                  |     
                                                             |     if (r3 == 0x78) {
    0x000007a2 beq.w 0x8da                                   |         goto label_22;
                                                             |     }
                                                             | label_4:
    0x000007a6 cmp.w sl, 0x2d                                |     
                                                             |     if (sl != 0x2d) {
    0x000007aa bne 0x88e                                     |         goto label_20;
                                                             |     }
    0x000007ac ldrb r3, [r4, 1]                              |     r3 = *((r4 + 1));
    0x000007ae cmp r3, 0x6c                                  |     
                                                             |     if (r3 != 0x6c) {
    0x000007b0 bne 0x88e                                     |         goto label_20;
                                                             |     }
    0x000007b2 ldrb r3, [r4, 2]                              |     r3 = *((r4 + 2));
    0x000007b4 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x000007b6 bne 0x88e                                     |         goto label_20;
                                                             |     }
                                                             | label_3:
    0x000007b8 ldrb r5, [r4, 2]                              |     r5 = *((r4 + 2));
    0x000007ba blx 0x6d4                                     |     r0 = bootblock_get_all ();
    0x000007be mov r7, r0                                    |     r7 = r0;
    0x000007c0 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000007c2 beq.w 0xb26                                   |         goto label_23;
                                                             |     }
    0x000007c6 ldr r2, [r0]                                  |     r2 = *(r0);
    0x000007c8 mov.w sb, 0                                   |     sb = 0;
    0x000007cc ldrd r4, sl, [sp, 0x10]                       |     __asm ("ldrd r4, sl, [arg_10h]");
                                                             |     if (r2 != 0) {
    0x000007d0 cbnz r2, 0x7ee                                |         goto label_0;
                                                             |     }
    0x000007d2 b 0x812                                       |     goto label_24;
                                                             |     do {
    0x000007d4 cmp r5, 0x61                                  |         
                                                             |         if (r5 == 0x61) {
    0x000007d6 bne 0x7e4                                     |             
    0x000007d8 ldr r1, [pc, 0x388]                           |             
    0x000007da mov r3, r0                                    |             r3 = r0;
    0x000007dc movs r0, 1                                    |             r0 = 1;
    0x000007de add r1, pc                                    |             r1 = 0x1346;
    0x000007e0 blx 0x6bc                                     |             printf_chk ();
                                                             |         }
                                                             | label_2:
    0x000007e4 ldr r2, [r7, 8]!                              |         r2 = *((r7 += 8));
    0x000007e8 add.w sb, sb, 1                               |         sb++;
                                                             |         if (r2 == 0) {
    0x000007ec cbz r2, 0x812                                 |             goto label_24;
                                                             |         }
                                                             | label_0:
    0x000007ee cmp r5, 0x65                                  |         
    0x000007f0 ldr r0, [r7, 4]                               |         r0 = *((r7 + 4));
                                                             |         if (r5 == 0x65) {
    0x000007f2 beq 0x882                                     |             goto label_25;
                                                             |         }
                                                             |         if (r5 > 0x65) {
    0x000007f4 bhi 0x862                                     |             goto label_26;
                                                             |         }
    0x000007f6 cmp r5, 0                                     |         
    0x000007f8 bne 0x7d4                                     |         
                                                             |     } while (r5 != 0);
    0x000007fa ldr r1, [pc, 0x36c]                           |     
    0x000007fc mov r3, r0                                    |     r3 = r0;
    0x000007fe movs r0, 1                                    |     r0 = 1;
    0x00000800 add.w sb, sb, 1                               |     sb++;
    0x00000804 add r1, pc                                    |     r1 = 0x1372;
    0x00000806 blx 0x6bc                                     |     printf_chk ();
    0x0000080a ldr r2, [r7, 8]!                              |     r2 = *((r7 += 8));
    0x0000080e cmp r2, 0                                     |     
                                                             |     if (r2 != 0) {
    0x00000810 bne 0x7ee                                     |         goto label_0;
                                                             |     }
                                                             | label_24:
    0x00000812 cmp r5, 0x77                                  |     
    0x00000814 it ne                                         |     
                                                             |     if (r5 != 0x77) {
    0x00000816 cmpne r5, 0x61                                |         __asm ("cmpne r5, 0x61");
                                                             |     }
                                                             |     if (r5 == 0x77) {
    0x00000818 beq.w 0x926                                   |         goto label_27;
                                                             |     }
    0x0000081c mov r5, r8                                    |     r5 = r8;
    0x0000081e mov r7, r6                                    |     r7 = r6;
                                                             | label_8:
    0x00000820 cmp r7, 0                                     |     
    0x00000822 add.w r6, r7, -1                              |     r6 = r7 + -1;
                                                             |     if (r7 > 0) {
    0x00000826 bgt 0x778                                     |         goto label_1;
                                                             |     }
                                                             | label_5:
    0x00000828 ldr r3, [pc, 0x340]                           |     
    0x0000082a add r3, pc                                    |     r3 = 0x139a;
    0x0000082c ldrb r0, [r3, 4]                              |     r0 = *((r3 + 4));
                                                             |     if (r0 != 0) {
    0x0000082e cbz r0, 0x832                                 |         
    0x00000830 ldr r0, [r3]                                  |         r0 = *(r3);
                                                             |     }
    0x00000832 add sp, 0x24                                  |     
    0x00000834 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}    |     
                                                             | label_19:
    0x00000846 ldr r0, [pc, 0x328]                           |     
    0x00000848 ldr r3, [pc, 0x328]                           |     r3 = *(0xb74);
    0x0000084a add r0, pc                                    |     r0 = 0x13c0;
                                                             | label_15:
    0x0000084c movw r2, 0x247                                |     r2 = 0x247;
                                                             | label_16:
    0x00000850 ldr r4, [sp, 0x18]                            |     r4 = *(arg_18h);
    0x00000852 movs r1, 1                                    |     r1 = 1;
    0x00000854 ldr r3, [r4, r3]                              |     r3 = *((r4 + r3));
    0x00000856 ldr r3, [r3]                                  |     r3 = *(r3);
    0x00000858 blx 0x650                                     |     fwrite (r0, r1, r2, r3);
    0x0000085c movs r0, 1                                    |     r0 = 1;
    0x0000085e blx 0x68c                                     |     exit (r0);
                                                             | label_26:
    0x00000862 cmp r5, 0x77                                  |     
                                                             |     if (r5 != 0x77) {
    0x00000864 bne 0x7e4                                     |         goto label_2;
                                                             |     }
    0x00000866 mov r3, r2                                    |     r3 = r2;
    0x00000868 ldrd r2, r1, [sp, 8]                          |     __asm ("ldrd r2, r1, [arg_8h]");
    0x0000086c cmp.w sb, 0                                   |     
    0x0000086e lsrs r0, r0, 0x1c                             |     r0 >>= 0x1c;
    0x00000870 str r0, [sp]                                  |     *(sp) = r0;
    0x00000872 mov.w r0, 1                                   |     r0 = 1;
    0x00000876 it eq                                         |     
                                                             |     if (r0 != r0) {
    0x00000878 moveq r2, r1                                  |         r2 = r1;
                                                             |     }
    0x0000087a mov r1, sl                                    |     r1 = sl;
    0x0000087c blx 0x6bc                                     |     printf_chk ();
    0x00000880 b 0x7e4                                       |     goto label_2;
                                                             | label_25:
    0x00000882 mov r3, r0                                    |     r3 = r0;
    0x00000884 mov r1, r4                                    |     r1 = r4;
    0x00000886 movs r0, 1                                    |     r0 = 1;
    0x00000888 blx 0x6bc                                     |     printf_chk ();
    0x0000088c b 0x7e4                                       |     goto label_2;
                                                             | label_20:
    0x0000088e ldr r1, [pc, 0x2e8]                           |     
    0x00000890 mov r0, r4                                    |     r0 = r4;
    0x00000892 add r1, pc                                    |     r1 = 0x1410;
    0x00000894 blx 0x620                                     |     r0 = strcmp (r0, r1);
    0x00000898 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0000089a beq 0x7b8                                     |         goto label_3;
                                                             |     }
    0x0000089c ldr r1, [pc, 0x2dc]                           |     
    0x0000089e mov r0, r4                                    |     r0 = r4;
    0x000008a0 add r1, pc                                    |     r1 = 0x1420;
    0x000008a2 blx 0x620                                     |     r0 = strcmp (r0, r1);
    0x000008a6 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000008a8 beq 0x7b8                                     |         goto label_3;
                                                             |     }
    0x000008aa ldr r1, [pc, 0x2d4]                           |     
    0x000008ac mov r0, r4                                    |     r0 = r4;
    0x000008ae add r1, pc                                    |     r1 = 0x1434;
    0x000008b0 blx 0x620                                     |     r0 = strcmp (r0, r1);
    0x000008b4 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000008b6 beq.w 0x7b8                                   |         goto label_3;
                                                             |     }
    0x000008ba cmp.w sl, 0x2d                                |     
                                                             |     if (sl == 0x2d) {
    0x000008be beq 0x932                                     |         goto label_28;
                                                             |     }
                                                             | label_9:
    0x000008c0 ldr r2, [pc, 0x2c0]                           |     
    0x000008c2 ldr r0, [pc, 0x2b0]                           |     r0 = *(0xb76);
    0x000008c4 add r2, pc                                    |     r2 = 0x144c;
                                                             | label_13:
    0x000008c6 mov r3, r4                                    |     r3 = r4;
                                                             | label_14:
    0x000008c8 ldr r4, [sp, 0x18]                            |     r4 = *(arg_18h);
    0x000008ca movs r1, 1                                    |     r1 = 1;
    0x000008cc ldr r0, [r4, r0]                              |     r0 = *((r4 + r0));
    0x000008ce ldr r0, [r0]                                  |     r0 = *(r0);
    0x000008d0 blx 0x6c8                                     |     fprintf_chk ()
    0x000008d4 movs r0, 1                                    |     r0 = 1;
    0x000008d6 blx 0x68c                                     |     exit (r0);
                                                             | label_22:
    0x000008da ldrb r3, [r4, 2]                              |     r3 = *((r4 + 2));
    0x000008dc cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x000008de bne.w 0x7a6                                   |         goto label_4;
                                                             |     }
    0x000008e2 cmp r6, 0                                     |     
                                                             |     if (r6 <= 0) {
    0x000008e4 ble.w 0xb1e                                   |         goto label_29;
                                                             |     }
    0x000008e8 ldr r7, [pc, 0x29c]                           |     
    0x000008ea mov.w r8, 1                                   |     r8 = 1;
    0x000008ee ldr r4, [pc, 0x29c]                           |     
    0x000008f0 ldr.w sb, [sp, 0x18]                          |     sb = *(arg_18h);
    0x000008f4 add r7, pc                                    |     r7 = 0x1480;
    0x000008f6 add r4, pc                                    |     r4 = 0x1488;
    0x000008f8 b 0x902                                       |     goto label_30;
                                                             | label_6:
    0x000008fa blx 0x65c                                     |     puts (r0);
                                                             | label_7:
    0x000008fe subs r6, 1                                    |     r6--;
                                                             |     if (r6 == 1) {
    0x00000900 beq 0x828                                     |         goto label_5;
                                                             |     }
                                                             | label_30:
    0x00000902 ldr r0, [r5, 4]!                              |     r0 = *((r5 += 4));
    0x00000906 blx 0x644                                     |     r0 = bootblock_get ();
    0x0000090a cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0000090c bne 0x8fa                                     |         goto label_6;
                                                             |     }
    0x0000090e ldr r0, [pc, 0x264]                           |     
    0x00000910 mov r2, r7                                    |     r2 = r7;
    0x00000912 ldr r3, [r5]                                  |     r3 = *(r5);
    0x00000914 movs r1, 1                                    |     r1 = 1;
    0x00000916 ldr.w r0, [sb, r0]                            |     r0 = *((sb + r0));
    0x0000091a ldr r0, [r0]                                  |     r0 = *(0xb76);
    0x0000091c blx 0x6c8                                     |     fprintf_chk ()
    0x00000920 str.w r8, [r4]                                |     __asm ("str.w r8, [r4]");
    0x00000922 strh r0, [r0]                                 |     *(r0) = r0;
    0x00000924 b 0x8fe                                       |     goto label_7;
                                                             | label_27:
    0x00000926 movs r0, 0xa                                  |     r0 = 0xa;
    0x00000928 mov r5, r8                                    |     r5 = r8;
    0x0000092a mov r7, r6                                    |     r7 = r6;
    0x0000092c blx 0x6b0                                     |     putchar (r0);
    0x00000930 b 0x820                                       |     goto label_8;
                                                             | label_28:
    0x00000932 ldrb r3, [r4, 1]                              |     r3 = *((r4 + 1));
    0x00000934 cmp r3, 0x61                                  |     
                                                             |     if (r3 != 0x61) {
    0x00000936 bne 0x9a4                                     |         goto label_31;
                                                             |     }
    0x00000938 ldrb r2, [r4, 2]                              |     r2 = *((r4 + 2));
    0x0000093a str r2, [sp, 0x1c]                            |     *(arg_1ch) = r2;
                                                             |     if (r2 != 0) {
    0x0000093c cbnz r2, 0x9a4                                |         goto label_31;
                                                             |     }
    0x0000093e cmp r6, 0                                     |     
                                                             |     if (r6 <= 0) {
    0x00000940 ble.w 0xb1e                                   |         goto label_29;
                                                             |     }
    0x00000944 asrs r0, r6, 1                                |     r0 = r6 >> 1;
    0x00000946 adds r0, 1                                    |     r0++;
    0x00000948 lsls r0, r0, 3                                |     r0 <<= 3;
    0x0000094a blx 0x668                                     |     r0 = malloc (r0);
    0x0000094e mov sb, r0                                    |     sb = r0;
    0x00000950 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00000952 beq.w 0xb30                                   |         goto label_32;
                                                             |     }
    0x00000956 cmp r6, 1                                     |     
    0x00000958 ldr r2, [sp, 0x1c]                            |     r2 = *(arg_1ch);
    0x0000095a itt eq                                        |     
                                                             |     if (r6 != 1) {
    0x0000095c moveq r5, r8                                  |         r5 = r8;
                                                             |     }
                                                             |     if (r6 != 1) {
    0x0000095e moveq r7, r6                                  |         r7 = r6;
                                                             |     }
                                                             |     if (r6 == 1) {
    0x00000960 beq 0x990                                     |         goto label_33;
                                                             |     }
    0x00000962 add.w r1, r5, 0xc                             |     r1 = r5 + 0xc;
    0x00000966 mov r7, r6                                    |     r7 = r6;
    0x00000968 add.w ip, r0, 4                               |     
                                                             |     do {
    0x0000096c ldrd r3, r0, [r1, -0x8]                       |         __asm ("ldrd r3, r0, [r1, -0x8]");
    0x00000970 mov r5, r1                                    |         r5 = r1;
    0x00000972 ldrb r4, [r0]                                 |         r4 = *(r0);
    0x00000974 cmp r4, 0                                     |         
                                                             |         if (r4 == 0) {
    0x00000976 beq.w 0xb16                                   |             goto label_34;
                                                             |         }
    0x0000097a subs r7, 2                                    |         r7 -= 2;
    0x0000097c str.w r3, [sb, r2, lsl 3]                     |         __asm ("str.w r3, [sb, r2, lsl 3]");
    0x00000980 cmp r7, 1                                     |         
    0x00000982 str.w r0, [ip, r2, lsl 3]                     |         __asm ("str.w r0, [ip, r2, lsl 3]");
    0x00000986 add.w r1, r1, 8                               |         r1 += 8;
    0x0000098a add.w r2, r2, 1                               |         r2++;
    0x0000098e bgt 0x96c                                     |         
                                                             |     } while (r7 > 1);
                                                             | label_33:
    0x00000990 movs r3, 0                                    |     r3 = 0;
    0x00000992 mov r0, sb                                    |     r0 = sb;
    0x00000994 str.w r3, [sb, r2, lsl 3]                     |     __asm ("str.w r3, [sb, r2, lsl 3]");
    0x00000998 bl 0xccc                                      |     fcn_00000ccc ();
    0x0000099c mov r0, sb                                    |     r0 = sb;
    0x0000099e blx 0x638                                     |     free (r0);
    0x000009a2 b 0x820                                       |     goto label_8;
                                                             | label_31:
    0x000009a4 cmp.w sl, 0x2d                                |     
                                                             |     if (sl != 0x2d) {
    0x000009a8 bne 0x8c0                                     |         goto label_9;
                                                             |     }
    0x000009aa ldrb r3, [r4, 1]                              |     r3 = *((r4 + 1));
    0x000009ac cmp r3, 0x63                                  |     
                                                             |     if (r3 == 0x63) {
    0x000009ae beq 0xa72                                     |         goto label_35;
                                                             |     }
                                                             | label_10:
    0x000009b0 cmp.w sl, 0x2d                                |     
                                                             |     if (sl != 0x2d) {
    0x000009b4 bne 0x8c0                                     |         goto label_9;
                                                             |     }
    0x000009b6 ldrb r3, [r4, 1]                              |     r3 = *((r4 + 1));
    0x000009b8 cmp r3, 0x77                                  |     
                                                             |     if (r3 != 0x77) {
    0x000009ba bne 0x8c0                                     |         goto label_9;
                                                             |     }
    0x000009bc ldrb.w r8, [r4, 2]                            |     r8 = *((r4 + 2));
    0x000009c0 cmp.w r8, 0                                   |     
                                                             |     if (r8 != 0) {
    0x000009c4 bne.w 0x8c0                                   |         goto label_9;
                                                             |     }
    0x000009c8 cmp r6, 0                                     |     
                                                             |     if (r6 <= 0) {
    0x000009ca ble.w 0xb1e                                   |         goto label_29;
                                                             |     }
    0x000009ce ldr r6, [r5, 4]                               |     r6 = *((r5 + 4));
    0x000009d0 mov r0, r6                                    |     r0 = r6;
    0x000009d2 blx 0x698                                     |     strlen (r0);
    0x000009d6 subs r3, r6, 1                                |     r3 = r6 - 1;
    0x000009d8 adds r1, r3, r0                               |     r1 = r3 + r0;
    0x000009da movs r0, 2                                    |     r0 = 2;
    0x000009dc b 0x9e8                                       |     
                                                             |     while (r3 != r1) {
    0x000009de ldrb r2, [r3, 1]!                             |         r2 = *((r3 += 1));
    0x000009e2 cmp r2, 0x3a                                  |         
    0x000009e4 it eq                                         |         
                                                             |         if (r2 != 0x3a) {
    0x000009e6 addeq r0, 1                                   |             r0++;
                                                             |         }
    0x000009e8 cmp r3, r1                                    |         
    0x000009ea bne 0x9de                                     |         
                                                             |     }
    0x000009ec lsls r0, r0, 3                                |     r0 <<= 3;
    0x000009ee blx 0x668                                     |     malloc (r0);
    0x000009f0 cdp p0, 3, c9, c12, c7, 0                     |     __asm ("cdp p0, 3, c9, c12, c7, 0");
    0x000009f4 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000009f6 beq.w 0xb3a                                   |         goto label_36;
                                                             |     }
    0x000009fa ldr r1, [pc, 0x194]                           |     
    0x000009fc mov r0, r6                                    |     r0 = r6;
    0x000009fe add r1, pc                                    |     r1 = 0x1594;
    0x00000a00 blx 0x6e0                                     |     r0 = strtok (r0, r1);
    0x00000a04 mov r4, r0                                    |     r4 = r0;
                                                             |     if (r0 == 0) {
    0x00000a06 cbz r0, 0xa58                                 |         goto label_37;
                                                             |     }
    0x00000a08 ldr.w sl, [pc, 0x188]                         |     
    0x00000a0c ldr.w sb, [pc, 0x188]                         |     
    0x00000a10 ldr r3, [sp, 0x1c]                            |     r3 = *(arg_1ch);
    0x00000a12 add sl, pc                                    |     sl = 0x15aa;
    0x00000a14 add sb, pc                                    |     sb = 0x15b0;
    0x00000a16 adds r6, r3, 4                                |     r6 = r3 + 4;
                                                             |     do {
    0x00000a18 movs r1, 0x3d                                 |         r1 = 0x3d;
    0x00000a1a mov r0, r4                                    |         r0 = r4;
    0x00000a1c blx 0x6a4                                     |         r0 = strchr (r0, r1);
    0x00000a20 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00000a22 beq 0xb06                                     |             goto label_38;
                                                             |         }
    0x00000a24 mov r3, r0                                    |         r3 = r0;
    0x00000a26 mov.w fp, 0                                   |         
    0x00000a2a strb fp, [r3], 1                              |         *(r3) = fp;
                                                             |         r3++;
    0x00000a2e ldrb r2, [r0, 1]                              |         r2 = *((r0 + 1));
    0x00000a30 cmp r2, 0                                     |         
                                                             |         if (r2 == 0) {
    0x00000a32 beq 0xb0e                                     |             goto label_39;
                                                             |         }
    0x00000a34 mov r2, r4                                    |         r2 = r4;
    0x00000a36 str r4, [r6, -0x4]                            |         *((r6 - 0x4)) = r4;
    0x00000a3a mov r1, sl                                    |         r1 = sl;
    0x00000a3c str r3, [r6], 8                               |         *(r6) = r3;
                                                             |         r6 += 8;
    0x00000a40 movs r0, 1                                    |         r0 = 1;
    0x00000a42 add.w r8, r8, 1                               |         r8++;
    0x00000a46 blx 0x6bc                                     |         printf_chk ();
    0x00000a4a mov r0, fp                                    |         r0 = fp;
    0x00000a4c mov r1, sb                                    |         r1 = sb;
    0x00000a4e blx 0x6e0                                     |         r0 = strtok (r0, r1);
    0x00000a52 mov r4, r0                                    |         r4 = r0;
    0x00000a54 cmp r0, 0                                     |         
    0x00000a56 bne 0xa18                                     |         
                                                             |     } while (r0 != 0);
                                                             | label_37:
    0x00000a58 ldr r4, [sp, 0x1c]                            |     r4 = *(arg_1ch);
    0x00000a5a movs r3, 0                                    |     r3 = 0;
    0x00000a5c subs r7, 2                                    |     r7 -= 2;
    0x00000a5e adds r5, 8                                    |     r5 += 8;
    0x00000a60 mov r0, r4                                    |     r0 = r4;
    0x00000a62 str.w r3, [r4, r8, lsl 3]                     |     __asm ("str.w r3, [r4, r8, lsl 3]");
    0x00000a66 bl 0xccc                                      |     fcn_00000ccc ();
    0x00000a6a mov r0, r4                                    |     r0 = r4;
    0x00000a6c blx 0x638                                     |     free (r0);
    0x00000a70 b 0x820                                       |     goto label_8;
                                                             | label_35:
    0x00000a72 ldrb r3, [r4, 2]                              |     r3 = *((r4 + 2));
    0x00000a74 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00000a76 bne 0x9b0                                     |         goto label_10;
                                                             |     }
    0x00000a78 cmp r6, 0                                     |     
                                                             |     if (r6 <= 0) {
    0x00000a7a ble 0xb1e                                     |         goto label_29;
                                                             |     }
    0x00000a7c ldr r1, [pc, 0x11c]                           |     
    0x00000a7e ldr r0, [r5, 4]                               |     r0 = *((r5 + 4));
    0x00000a80 add r1, pc                                    |     r1 = 0x1620;
    0x00000a82 blx 0x6e0                                     |     r0 = strtok (r0, r1);
    0x00000a86 mov sl, r0                                    |     sl = r0;
                                                             |     if (r0 == 0) {
    0x00000a88 cbz r0, 0xae6                                 |         goto label_40;
                                                             |     }
    0x00000a8a ldr.w sb, [pc, 0x114]                         |     
    0x00000a8e ldr.w r8, [pc, 0x114]                         |     r8 = *(0x00000ba4);
    0x00000a92 ldr r6, [pc, 0x114]                           |     
    0x00000a94 ldr r4, [sp, 0x18]                            |     r4 = *(arg_18h);
    0x00000a96 add sb, pc                                    |     sb = 0x163c;
    0x00000a98 add r8, pc                                    |     r8 += pc;
    0x00000a9a add r6, pc                                    |     r6 = 0x1648;
    0x00000a9c b 0xac2                                       |     
                                                             |     while (r0 != 0) {
    0x00000a9e ldr r3, [r5, 4]                               |         r3 = *((r5 + 4));
    0x00000aa0 cmp r3, sl                                    |         
                                                             |         if (r3 != sl) {
    0x00000aa2 beq 0xaaa                                     |             
    0x00000aa4 movs r0, 0x20                                 |             r0 = 0x20;
    0x00000aa6 blx 0x6b0                                     |             putchar (r0);
                                                             |         }
    0x00000aaa mov r2, fp                                    |         r2 = fp;
    0x00000aac mov r1, r6                                    |         r1 = r6;
    0x00000aae movs r0, 1                                    |         r0 = 1;
    0x00000ab0 blx 0x6bc                                     |         printf_chk ();
                                                             | label_11:
    0x00000ab4 ldr r1, [pc, 0xf4]                            |         
    0x00000ab6 movs r0, 0                                    |         r0 = 0;
    0x00000ab8 add r1, pc                                    |         r1 = 0x1668;
    0x00000aba blx 0x6e0                                     |         r0 = strtok (r0, r1);
    0x00000abe mov sl, r0                                    |         sl = r0;
                                                             |         if (r0 == 0) {
    0x00000ac0 cbz r0, 0xae6                                 |             goto label_40;
                                                             |         }
    0x00000ac2 mov r0, sl                                    |         r0 = sl;
    0x00000ac4 blx 0x644                                     |         r0 = bootblock_get ();
    0x00000ac8 mov fp, r0                                    |         
    0x00000aca cmp r0, 0                                     |         
    0x00000acc bne 0xa9e                                     |         
                                                             |     }
    0x00000ace ldr r2, [pc, 0xa4]                            |     r2 = *(0xb76);
    0x00000ad0 mov r3, sl                                    |     r3 = sl;
    0x00000ad2 movs r1, 1                                    |     r1 = 1;
    0x00000ad4 ldr r2, [r4, r2]                              |     r2 = *((r4 + r2));
    0x00000ad6 ldr r0, [r2]                                  |     r0 = *(0xb76);
    0x00000ad8 mov r2, sb                                    |     r2 = sb;
    0x00000ada blx 0x6c8                                     |     fprintf_chk ()
    0x00000ade movs r3, 1                                    |     r3 = 1;
    0x00000ae0 str.w r3, [r8]                                |     __asm ("str.w r3, [r8]");
    0x00000ae4 b 0xab4                                       |     goto label_11;
                                                             | label_40:
    0x00000ae6 subs r7, 2                                    |     r7 -= 2;
    0x00000ae8 adds r5, 8                                    |     r5 += 8;
    0x00000aea b 0x820                                       |     goto label_8;
                                                             | label_21:
    0x00000aec ldr r0, [pc, 0xc0]                            |     
    0x00000aee str r3, [sp, 8]                               |     *(arg_8h) = r3;
    0x00000af0 add r0, pc                                    |     r0 = 0x16a4;
    0x00000af2 blx 0x65c                                     |     puts (r0);
    0x00000af6 ldr r3, [sp, 8]                               |     r3 = *(arg_8h);
    0x00000af8 mov r0, r3                                    |     r0 = r3;
    0x00000afa blx 0x68c                                     |     exit (r0);
                                                             | label_18:
    0x00000afe mov r6, r7                                    |     r6 = r7;
    0x00000b00 mov r5, r4                                    |     r5 = r4;
    0x00000b02 mov r7, r8                                    |     r7 = r8;
    0x00000b04 b 0x760                                       |     goto label_12;
                                                             | label_38:
    0x00000b06 ldr r2, [pc, 0xac]                            |     
    0x00000b08 ldr r0, [pc, 0x68]                            |     r0 = *(0xb74);
    0x00000b0a add r2, pc                                    |     r2 = 0x16c4;
    0x00000b0c b 0x8c6                                       |     goto label_13;
                                                             | label_39:
    0x00000b0e ldr r2, [pc, 0xa8]                            |     
    0x00000b10 ldr r0, [pc, 0x60]                            |     r0 = *(0xb74);
    0x00000b12 add r2, pc                                    |     r2 = 0x16d0;
    0x00000b14 b 0x8c6                                       |     goto label_13;
                                                             | label_34:
    0x00000b16 ldr r2, [pc, 0xa4]                            |     
    0x00000b18 ldr r0, [pc, 0x58]                            |     r0 = *(0xb74);
    0x00000b1a add r2, pc                                    |     r2 = 0x16dc;
    0x00000b1c b 0x8c8                                       |     goto label_14;
                                                             | label_29:
    0x00000b1e ldr r0, [pc, 0xa0]                            |     
    0x00000b20 ldr r3, [pc, 0x50]                            |     r3 = *(0xb74);
    0x00000b22 add r0, pc                                    |     r0 = 0x16e8;
    0x00000b24 b 0x84c                                       |     goto label_15;
                                                             | label_23:
    0x00000b26 ldr r0, [pc, 0x9c]                            |     
    0x00000b28 movs r2, 0x2d                                 |     r2 = 0x2d;
    0x00000b2a ldr r3, [pc, 0x48]                            |     r3 = *(0xb76);
    0x00000b2c add r0, pc                                    |     r0 = 0x16f6;
    0x00000b2e b 0x850                                       |     goto label_16;
                                                             | label_32:
    0x00000b30 ldr r0, [pc, 0x94]                            |     
    0x00000b32 movs r2, 0x16                                 |     r2 = 0x16;
    0x00000b34 ldr r3, [pc, 0x3c]                            |     r3 = *(0xb74);
    0x00000b36 add r0, pc                                    |     r0 = 0x1702;
    0x00000b38 b 0x850                                       |     goto label_16;
                                                             | label_36:
    0x00000b3a ldr r0, [pc, 0x90]                            |     
    0x00000b3c movs r2, 0x16                                 |     r2 = 0x16;
    0x00000b3e ldr r3, [pc, 0x34]                            |     r3 = *(0xb76);
    0x00000b40 add r0, pc                                    |     r0 = 0x1712;
    0x00000b42 b 0x850                                       |     goto label_16;
    0x00000c04 adds r0, 0x14                                 |     r0 += 0x14;
    0x00000c06 b 0x748                                       |     goto label_17;
                                                             | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/bin/bootblocktool @ 0xccc */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.00000ccc ()                  | void fcn_00000ccc () {
    0x00000ccc push {r4, lr}                 |     
    0x00000cce blx 0x6ec                     |     r0 = bootblock_add ();
    0x00000cd2 cmp r0, 0x11                  |     
    0x00000cd4 ldr.w ip, [pc, 0x64]          |     ip = *(0x00000d3c);
    0x00000cd8 add ip, pc                    |     
                                             |     if (r0 != 0x11) {
    0x00000cda beq 0xce4                     |         
    0x00000cdc cmp r0, 0x16                  |         
                                             |         if (r0 == 0x16) {
    0x00000cde beq 0xd22                     |             goto label_0;
                                             |         }
                                             |         if (r0 != 0) {
    0x00000ce0 cbnz r0, 0xd02                |             goto label_1;
                                             |         }
    0x00000ce2 pop {r4, pc}                  |         
                                             |     }
    0x00000ce4 ldr r3, [pc, 0x58]            |     
    0x00000ce6 movs r2, 0x21                 |     r2 = 0x21;
    0x00000ce8 ldr r0, [pc, 0x58]            |     
    0x00000cea movs r1, 1                    |     r1 = 1;
    0x00000cec ldr.w r3, [ip, r3]            |     r3 = *((ip + r3));
    0x00000cf0 add r0, pc                    |     r0 = 0x1a38;
    0x00000cf2 ldr r3, [r3]                  |     r3 = *(0xd40);
    0x00000cf4 blx 0x650                     |     fwrite (r0, r1, r2, r3);
    0x00000cf8 ldr r3, [pc, 0x4c]            |     
    0x00000cfa movs r2, 1                    |     r2 = 1;
    0x00000cfc add r3, pc                    |     r3 = 0x1a48;
    0x00000cfe str r2, [r3]                  |     *(r3) = r2;
    0x00000d00 pop {r4, pc}                  |     
                                             | label_1:
    0x00000d02 ldr r3, [pc, 0x3c]            |     r3 = *(0xd42);
    0x00000d04 ldr.w r3, [ip, r3]            |     r3 = *((ip + r3));
    0x00000d08 ldr r4, [r3]                  |     r4 = *(0xd42);
    0x00000d0a blx 0x674                     |     strerror (r0);
    0x00000d0e ldr r2, [pc, 0x3c]            |     
    0x00000d10 mov r3, r0                    |     r3 = r0;
    0x00000d12 movs r1, 1                    |     r1 = 1;
    0x00000d14 mov r0, r4                    |     r0 = r4;
    0x00000d16 add r2, pc                    |     r2 = 0x1a68;
    0x00000d18 blx 0x6c8                     |     fprintf_chk ()
    0x00000d1c movs r0, 1                    |     r0 = 1;
    0x00000d1e blx 0x68c                     |     exit (r0);
                                             | label_0:
    0x00000d22 ldr r3, [pc, 0x1c]            |     
    0x00000d24 movs r2, 0x17                 |     r2 = 0x17;
    0x00000d26 ldr r0, [pc, 0x28]            |     
    0x00000d28 movs r1, 1                    |     r1 = 1;
    0x00000d2a ldr.w r3, [ip, r3]            |     r3 = *((ip + r3));
    0x00000d2e add r0, pc                    |     r0 = 0x1a84;
    0x00000d30 ldr r3, [r3]                  |     r3 = *(0xd42);
    0x00000d32 blx 0x650                     |     fwrite (r0, r1, r2, r3);
    0x00000d36 movs r0, 1                    |     r0 = 1;
    0x00000d38 blx 0x68c                     |     exit (r0);
    0x00000d3c asrs r0, r6, 0xa              |     r0 = r6 >> 0xa;
    0x00000d3e movs r1, r0                   |     r1 = r0;
    0x00000d40 lsls r4, r4, 1                |     r4 <<= 1;
    0x00000d42 movs r0, r0                   |     
    0x00000d44 lsls r4, r2, 4                |     r4 = r2 << 4;
    0x00000d46 movs r0, r0                   |     
    0x00000d48 asrs r4, r1, 0xc              |     r4 = r1 >> 0xc;
    0x00000d4a movs r1, r0                   |     r1 = r0;
    0x00000d4c lsls r2, r2, 4                |     r2 <<= 4;
    0x00000d4e movs r0, r0                   |     
    0x00000d50 lsls r6, r7, 2                |     r6 = r7 << 2;
    0x00000d52 movs r0, r0                   |     
                                             |     /* [14] -r-x section size 8 named .fini */
    0x00000d54 ands r0, r1                   |     r0 &= r1;
    0x00000d56 invalid                       |     
                                             | }

[*] Function fprintf used 5 times bootblocktool