[*] Binary protection state of ubinize

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


[*] Function sprintf tear down of ubinize

    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/ubinize @ 0x2598 */
                                             | #include <stdint.h>
                                             |  
                                             | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                             |                                ((n & 0x0000ff00) <<  8) | \
                                             |                                ((n & 0x00ff0000) >>  8) | \
                                             |                                ((n & 0xff000000) >> 24)))
                                             |  
    ; (fcn) fcn.00002598 ()                  | void fcn_00002598 (int16_t arg1) {
                                             |     int16_t var_0h;
                                             |     int32_t var_4h;
                                             |     int32_t var_4h_2;
                                             |     r0 = arg1;
    0x00002598 push {r4, r5, r6, r7, lr}     |     
    0x0000259a mov r6, r0                    |     r6 = r0;
    0x0000259c ldr r4, [r6, 0x18]            |     r4 = *((r6 + 0x18));
    0x0000259e sub sp, 0x14                  |     
    0x000025a0 movs r0, 1                    |     r0 = 1;
    0x000025a2 ldr r5, [pc, 0x78]            |     
    0x000025a4 mov r1, r4                    |     r1 = r4;
    0x000025a6 blx 0xb0c                     |     calloc (r0, r1);
    0x000025aa add r5, pc                    |     r5 = 0x4bcc;
    0x000025ac mov r7, r0                    |     r7 = r0;
                                             |     if (r0 == 0) {
    0x000025ae cbz r0, 0x25de                |         goto label_0;
                                             |     }
    0x000025b0 ldr r3, [r6, 0x1c]            |     r3 = *((r6 + 0x1c));
    0x000025b2 cmp r3, 0                     |     
    0x000025b4 itt gt                        |     
                                             |     if (r3 <= 0) {
    0x000025b6 movgt r4, r0                  |         r4 = r0;
                                             |     }
                                             |     if (r3 <= 0) {
    0x000025b8 movgt r5, 0                   |         r5 = 0;
                                             |     }
                                             |     if (r3 <= 0) {
    0x000025ba ble 0x25d8                    |         goto label_1;
                                             |     }
                                             |     do {
    0x000025bc mov r1, r4                    |         r1 = r4;
    0x000025be movs r2, 0xa8                 |         r2 = 0xa8;
    0x000025c0 mov.w r0, -1                  |         r0 = -1;
    0x000025c4 adds r5, 1                    |         r5++;
    0x000025c6 bl 0x30c0                     |         fcn_000030c0 (r0, r1, r2);
    0x000025ca ldr r2, [r6, 0x1c]            |         r2 = *((r6 + 0x1c));
    0x000025cc rev r0, r0                    |         r0 = SWAP32 (r0);
    0x000025ce str.w r0, [r4, 0xa8]          |         __asm ("str.w r0, [r4, 0xa8]");
    0x000025d2 adds r4, 0xac                 |         r4 += 0xac;
    0x000025d4 cmp r2, r5                    |         
    0x000025d6 bgt 0x25bc                    |         
                                             |     } while (r2 > r5);
                                             |     do {
                                             | label_1:
    0x000025d8 mov r0, r7                    |         r0 = r7;
    0x000025da add sp, 0x14                  |         
    0x000025dc pop {r4, r5, r6, r7, pc}      |         
                                             | label_0:
    0x000025de blx 0xc8c                     |         sprintf_chk ()
    0x000025e2 ldr r3, [pc, 0x3c]            |         r3 = *(0x2622);
    0x000025e4 movs r1, 1                    |         r1 = 1;
    0x000025e6 ldr r2, [pc, 0x3c]            |         
    0x000025e8 ldr r6, [r0]                  |         r6 = *(r0);
    0x000025ea ldr r5, [r5, r3]              |         r5 = *((r5 + r3));
    0x000025ec ldr r3, [pc, 0x38]            |         
    0x000025ee add r2, pc                    |         r2 = 0x4c18;
    0x000025f0 str r4, [sp]                  |         *(sp) = r4;
    0x000025f2 ldr r0, [r5]                  |         r0 = *(r5);
    0x000025f4 add r3, pc                    |         r3 = 0x4c20;
    0x000025f6 blx 0xcf0                     |         r0 = fcn_00000cf0 ();
    0x000025f8 sbcs.w r6, ip, r0, ror 16     |         __asm ("sbcs.w r6, ip, r0, ror 16");
    0x000025fc ldr r4, [r5]                  |         r4 = *(r5);
    0x000025fe blx 0xc08                     |         ctype_tolower_loc ();
    0x00002602 ldr r1, [pc, 0x28]            |         
    0x00002604 movs r3, 0xb                  |         r3 = 0xb;
    0x00002606 ldr r2, [pc, 0x28]            |         
    0x00002608 strd r6, r0, [sp, 4]          |         __asm ("strd r6, r0, [var_4h]");
    0x0000260c mov r0, r4                    |         r0 = r4;
    0x0000260e add r1, pc                    |         r1 = 0x4c40;
    0x00002610 str r1, [sp]                  |         *(sp) = r1;
    0x00002612 add r2, pc                    |         r2 = 0x4c48;
    0x00002614 movs r1, 1                    |         r1 = 1;
    0x00002616 blx 0xcf0                     |         fcn_00000cf0 ();
    0x0000261a b 0x25d8                      |         
                                             |     } while (1);
                                             | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/ubinize @ 0x2634 */
                                                     | #include <stdint.h>
                                                     |  
                                                     | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                     |                                ((n & 0x0000ff00) <<  8) | \
                                                     |                                ((n & 0x00ff0000) >>  8) | \
                                                     |                                ((n & 0xff000000) >> 24)))
                                                     |  
    ; (fcn) fcn.00002634 ()                          | void fcn_00002634 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                     |     int16_t var_0h;
                                                     |     int16_t var_4h;
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
                                                     |     r2 = arg3;
    0x00002634 push.w {r4, r5, r6, r7, r8, lr}       |     
    0x00002638 mov r6, r0                            |     r6 = r0;
    0x0000263a ldr r0, [r1]                          |     r0 = *(r1);
    0x0000263c mov r7, r2                            |     r7 = r2;
    0x0000263e movs r3, 0xac                         |     r3 = 0xac;
    0x00002640 mov r4, r1                            |     r4 = r1;
    0x00002642 ldr r2, [r6, 0x1c]                    |     r2 = *((r6 + 0x1c));
    0x00002644 sub sp, 8                             |     
    0x00002646 ldr r1, [pc, 0xc8]                    |     
    0x00002648 mul r8, r3, r0                        |     r8 = r3 * r0;
    0x0000264c cmp r0, r2                            |     
    0x0000264e add r1, pc                            |     r1 = "%s:vol_type";
    0x00002650 add.w r5, r7, r8                      |     r5 = r7 + r8;
                                                     |     if (r0 >= r2) {
    0x00002654 bge 0x26fe                            |         goto label_1;
                                                     |     }
    0x00002656 ldr r0, [r4, 8]                       |     r0 = *((r4 + 8));
    0x00002658 ldr r2, [r6]                          |     r2 = *(r6);
    0x0000265a cmp r0, r2                            |     
                                                     |     if (r0 >= r2) {
    0x0000265c bge 0x26d8                            |         goto label_2;
                                                     |     }
    0x0000265e mov r2, r3                            |     r2 = r3;
    0x00002660 movs r1, 0                            |     r1 = 0;
    0x00002662 mov r0, r5                            |     r0 = r5;
    0x00002664 blx 0xcb0                             |     putchar (r0);
    0x00002668 ldr r6, [r6]                          |     r6 = *(r6);
    0x0000266a ldr r0, [r4, 0x28]                    |     r0 = *((r4 + 0x28));
    0x0000266c ldr r1, [r4, 0x2c]                    |     r1 = *((r4 + 0x2c));
    0x0000266e mov r2, r6                            |     r2 = r6;
    0x00002670 asrs r3, r6, 0x1f                     |     r3 = r6 >> 0x1f;
    0x00002672 adds r0, r6, r0                       |     r0 = r6 + r0;
    0x00002674 adc.w r1, r3, r1                      |     __asm ("adc.w r1, r3, r1");
    0x00002678 subs r0, 1                            |     r0--;
    0x0000267a sbc r1, r1, 0                         |     __asm ("sbc r1, r1, 0");
    0x0000267e bl 0x4168                             |     r0 = fcn_00004168 (r0, r1, r2, r3);
    0x00002682 rev r0, r0                            |     r0 = SWAP32 (r0);
    0x00002684 ldr r3, [r4, 4]                       |     r3 = *((r4 + 4));
    0x00002686 str.w r0, [r7, r8]                    |     __asm ("str.w r0, [r7, r8]");
    0x0000268a mov r0, r6                            |     r0 = r6;
    0x0000268c ldr r1, [r4, 8]                       |     r1 = *((r4 + 8));
    0x0000268e strb r3, [r5, 0xc]                    |     *((r5 + 0xc)) = r3;
    0x00002690 rev r3, r1                            |     r1 = SWAP32 (r3);
    0x00002692 str r3, [r5, 4]                       |     *((r5 + 4)) = r3;
    0x00002694 bl 0x414c                             |     fcn_0000414c (r0, r1);
    0x00002698 rev r1, r1                            |     r1 = SWAP32 (r1);
    0x0000269a add.w r0, r5, 0x10                    |     r0 = r5 + 0x10;
    0x0000269e str r1, [r5, 8]                       |     *((r5 + 8)) = r1;
    0x000026a0 ldrb.w r3, [r4, 0x30]                 |     r3 = *((r4 + 0x30));
    0x000026a4 strb.w r3, [r5, 0x90]                 |     *((r5 + 0x90)) = r3;
    0x000026a8 ldrd r1, r2, [r4, 0x14]               |     __asm ("ldrd r1, r2, [r4, 0x14]");
    0x000026ac blx 0xb80                             |     fcn_00000b80 ();
    0x000026b0 ldrh r3, [r4, 0x18]                   |     r3 = *((r4 + 0x18));
    0x000026b2 movs r2, 0xa8                         |     r2 = 0xa8;
    0x000026b4 ldr r1, [r4, 0x18]                    |     r1 = *((r4 + 0x18));
    0x000026b6 movs r4, 0                            |     r4 = 0;
    0x000026b8 mov.w r0, -1                          |     r0 = -1;
    0x000026bc rev16 r3, r3                          |     __asm ("rev16 r3, r3");
    0x000026be add r1, r5                            |     r1 += r5;
    0x000026c0 strb r4, [r1, 0x10]                   |     *((r1 + 0x10)) = r4;
    0x000026c2 mov r1, r5                            |     r1 = r5;
    0x000026c4 strh r3, [r5, 0xe]                    |     *((r5 + 0xe)) = r3;
    0x000026c6 bl 0x30c0                             |     r0 = fcn_000030c0 (r0, r1, r2);
    0x000026ca rev r0, r0                            |     r0 = SWAP32 (r0);
    0x000026cc str.w r0, [r5, 0xa8]                  |     __asm ("str.w r0, [r5, 0xa8]");
                                                     |     do {
    0x000026d0 mov r0, r4                            |         r0 = r4;
    0x000026d2 add sp, 8                             |         
    0x000026d4 pop.w {r4, r5, r6, r7, r8, pc}        |         
                                                     | label_2:
    0x000026d8 ldr r4, [pc, 0x38]                    |         r4 = *(0x2714);
    0x000026da ldr r3, [pc, 0x3c]                    |         
    0x000026dc ldr r4, [r1, r4]                      |         r4 = *((r1 + r4));
    0x000026de str r2, [sp, 4]                       |         var_4h = r2;
    0x000026e0 add r3, pc                            |         r3 = 0x4dfe;
    0x000026e2 ldr r2, [pc, 0x38]                    |         
    0x000026e4 add r2, pc                            |         r2 = 0x4e06;
                                                     | label_0:
    0x000026e6 movs r1, 1                            |         r1 = 1;
    0x000026e8 str r0, [sp]                          |         *(sp) = r0;
    0x000026ea ldr r0, [r4]                          |         r0 = *(r4);
    0x000026ec mov.w r4, -1                          |         r4 = -1;
    0x000026ee adds r4, 0xff                         |         r4 += 0xff;
    0x000026f0 blx 0xcf0                             |         fcn_00000cf0 ();
    0x000026f4 blx 0xc8c                             |         sprintf_chk ()
    0x000026f8 movs r3, 0x16                         |         r3 = 0x16;
    0x000026fa str r3, [r0]                          |         *(r0) = r3;
    0x000026fc b 0x26d0                              |         
                                                     |     } while (1);
                                                     | label_1:
    0x000026fe ldr r4, [pc, 0x14]                    |     r4 = *(0x2716);
    0x00002700 ldr r3, [pc, 0x1c]                    |     
    0x00002702 ldr r4, [r1, r4]                      |     r4 = *((r1 + r4));
    0x00002704 str r2, [sp, 4]                       |     var_4h = r2;
    0x00002706 add r3, pc                            |     r3 = 0x4e2a;
    0x00002708 ldr r2, [pc, 0x18]                    |     
    0x0000270a add r2, pc                            |     r2 = 0x4e32;
    0x0000270c b 0x26e6                              |     goto label_0;
                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/ubinize @ 0x27f8 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000027f8 ()                                      | void fcn_000027f8 (int16_t arg_48h, int16_t arg_4ch, int16_t arg_50h, int16_t arg_54h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000027f8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000027fc mov r6, r0                                        |     r6 = r0;
    0x000027fe sub sp, 0x24                                      |     
    0x00002800 ldr r0, [r1]                                      |     r0 = *(r1);
    0x00002802 mov fp, r2                                        |     
    0x00002804 ldr r2, [r6, 0x1c]                                |     r2 = *((r6 + 0x1c));
    0x00002806 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00002808 ldr r3, [pc, 0x24c]                               |     
    0x0000280a cmp r0, r2                                        |     
    0x0000280c ldr r4, [sp, 0x48]                                |     r4 = *(arg_48h);
    0x0000280e ldr.w r8, [sp, 0x4c]                              |     r8 = *(arg_4ch);
    0x00002812 add r3, pc                                        |     r3 = 0x526e;
    0x00002814 ldr r5, [r1, 0x10]                                |     r5 = *((r1 + 0x10));
    0x00002816 str r3, [sp, 0x1c]                                |     var_1ch = r3;
                                                                 |     if (r0 >= r2) {
    0x00002818 bge.w 0x29ba                                      |         goto label_2;
                                                                 |     }
    0x0000281c ldr r0, [r1, 8]                                   |     r0 = *((r1 + 8));
    0x0000281e mov sl, r1                                        |     sl = r1;
    0x00002820 ldr r7, [r6]                                      |     r7 = *(r6);
    0x00002822 cmp r0, r7                                        |     
                                                                 |     if (r0 >= r7) {
    0x00002824 bge.w 0x2990                                      |         goto label_3;
                                                                 |     }
    0x00002828 mov r0, r7                                        |     r0 = r7;
    0x0000282a blx 0xbfc                                         |     r0 = strerror (r0);
    0x0000282e mov sb, r0                                        |     sb = r0;
    0x00002830 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00002832 beq.w 0x29cc                                      |         goto label_4;
                                                                 |     }
    0x00002836 ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x00002838 mov r0, r2                                        |     r0 = r2;
    0x0000283a str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0000283c blx 0xbfc                                         |     strerror (r0);
    0x00002840 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00002842 mov r7, r0                                        |     r7 = r0;
    0x00002844 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00002846 beq.w 0x2a12                                      |         goto label_5;
                                                                 |     }
    0x00002848 strh r4, [r4, 6]                                  |     *((r4 + 6)) = r4;
    0x0000284a ldr r2, [r6, 0x10]                                |     r2 = *((r6 + 0x10));
    0x0000284c movs r1, 0xff                                     |     r1 = 0xff;
    0x0000284e blx 0xcb0                                         |     putchar (r0);
    0x00002852 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00002854 mov r2, fp                                        |     r2 = fp;
    0x00002856 mov r1, r7                                        |     r1 = r7;
    0x00002858 mov r0, r6                                        |     r0 = r6;
    0x0000285a bl 0x2728                                         |     fcn_00002728 (r0, r1, r2, r3);
    0x0000285e orrs.w r3, r4, r8                                 |     r3 = r4 | r8;
    0x00002862 it ne                                             |     
                                                                 |     if (r3 == r4) {
    0x00002864 movne fp, 0                                       |         
                                                                 |     }
                                                                 |     if (r3 != r4) {
    0x00002868 bne 0x28ac                                        |         goto label_6;
                                                                 |     }
    0x0000286a b 0x2938                                          |     goto label_7;
                                                                 |     do {
    0x0000286c ldr r2, [r6, 0xc]                                 |         r2 = *((r6 + 0xc));
    0x0000286e strd sb, r5, [sp]                                 |         __asm ("strd sb, r5, [sp]");
    0x00002872 add r2, r7                                        |         r2 += r7;
    0x00002874 bl 0x2784                                         |         fcn_00002784 (r0, r1, r2, r3, r4, r5);
    0x00002878 ldr r0, [r6, 0x10]                                |         r0 = *((r6 + 0x10));
    0x0000287a mov r2, r5                                        |         r2 = r5;
    0x0000287c mov r1, sb                                        |         r1 = sb;
    0x0000287e add r0, r7                                        |         r0 += r7;
    0x00002880 blx 0xb80                                         |         fcn_00000b80 ();
    0x00002884 ldr r3, [r6, 0x10]                                |         r3 = *((r6 + 0x10));
    0x00002886 movs r1, 0xff                                     |         r1 = 0xff;
    0x00002888 ldr r2, [r6, 4]                                   |         r2 = *((r6 + 4));
    0x0000288a adds r0, r3, r5                                   |         r0 = r3 + r5;
    0x0000288c subs r2, r2, r3                                   |         r2 -= r3;
    0x0000288e add r0, r7                                        |         r0 += r7;
    0x00002890 subs r2, r2, r5                                   |         r2 -= r5;
    0x00002892 blx 0xcb0                                         |         putchar (r0);
    0x00002896 ldr r2, [r6, 4]                                   |         r2 = *((r6 + 4));
    0x00002898 mov r1, r7                                        |         r1 = r7;
    0x0000289a ldr r0, [sp, 0x54]                                |         r0 = *(arg_54h);
    0x0000289c blx 0xce4                                         |         fcn_00000ce4 ();
    0x0000289e bic.w r8, r2, r3, ror 25                          |         r8 = BIT_MASK (r2, r3);
    0x000028a2 cmp r0, r3                                        |         
                                                                 |         if (r0 != r3) {
    0x000028a4 bne 0x294c                                        |             goto label_8;
                                                                 |         }
    0x000028a6 orrs.w r3, r4, r8                                 |         r3 = r4 | r8;
                                                                 |         if (r3 == r4) {
    0x000028aa beq 0x2938                                        |             goto label_7;
                                                                 |         }
                                                                 | label_6:
    0x000028ac asr.w ip, r5, 0x1f                                |         
    0x000028b0 cmp r4, r5                                        |         
    0x000028b2 mov r3, r5                                        |         r3 = r5;
    0x000028b4 ldr r0, [sp, 0x50]                                |         r0 = *(arg_50h);
    0x000028b6 sbcs.w r2, r8, ip                                 |         __asm ("sbcs.w r2, r8, ip");
    0x000028ba mov r1, sb                                        |         r1 = sb;
    0x000028bc ittt lt                                           |         
                                                                 |         if (r4 < r5) {
    0x000028be asrlt ip, r4, 0x1f                                |             __asm ("asrlt ip, r4, 0x1f");
                                                                 |         }
                                                                 |         if (r4 >= r5) {
    0x000028c2 movlt r5, r4                                      |             r5 = r4;
                                                                 |         }
                                                                 |         if (r4 < r5) {
    0x000028c4 mov r3, r4                                        |             r3 = r4;
                                                                 |         }
    0x000028c6 subs r3, r4, r3                                   |         r3 = r4 - r3;
    0x000028c8 mov r2, r5                                        |         r2 = r5;
    0x000028ca mov r4, r3                                        |         r4 = r3;
    0x000028cc sbc.w r8, r8, ip                                  |         __asm ("sbc.w r8, r8, ip");
    0x000028d0 blx 0xb58                                         |         r0 = fcn_00000b58 ();
    0x000028d4 mov r2, r0                                        |         r2 = r0;
    0x000028d6 mov r3, fp                                        |         r3 = fp;
    0x000028d8 cmp r5, r2                                        |         
    0x000028da mov r1, sl                                        |         r1 = sl;
    0x000028dc mov r0, r6                                        |         r0 = r6;
    0x000028de add.w fp, fp, 1                                   |         
    0x000028e2 beq 0x286c                                        |         
                                                                 |     } while (r5 == r2);
    0x000028e4 blx 0xc8c                                         |     sprintf_chk ()
    0x000028e8 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x000028ea movs r1, 1                                        |     r1 = 1;
    0x000028ec ldr r3, [pc, 0x16c]                               |     r3 = *(0x2a5c);
    0x000028ee ldr r4, [r0]                                      |     r4 = *(r0);
    0x000028f0 ldr r6, [r2, r3]                                  |     r6 = *((r2 + r3));
    0x000028f2 ldr r3, [pc, 0x16c]                               |     
    0x000028f4 ldr r2, [pc, 0x16c]                               |     
    0x000028f6 str r5, [sp]                                      |     *(sp) = r5;
    0x000028f8 add r3, pc                                        |     r3 = 0x535e;
    0x000028fa ldr r0, [r6]                                      |     r0 = *(r6);
    0x000028fc add r2, pc                                        |     r2 = 0x5364;
    0x000028fe blx 0xcf0                                         |     fcn_00000cf0 ();
    0x00002902 mov r0, r4                                        |     r0 = r4;
    0x00002904 ldr r5, [r6]                                      |     r5 = *(r6);
    0x00002906 blx 0xc08                                         |     ctype_tolower_loc ();
    0x0000290a ldr r3, [pc, 0x15c]                               |     
    0x0000290c movs r1, 1                                        |     r1 = 1;
    0x0000290e ldr r2, [pc, 0x15c]                               |     
    0x00002910 str r0, [sp, 8]                                   |     var_8h = r0;
    0x00002912 mov r0, r5                                        |     r0 = r5;
    0x00002914 add r3, pc                                        |     r3 = 0x5382;
    0x00002916 str r4, [sp, 4]                                   |     var_4h = r4;
    0x00002918 str r3, [sp]                                      |     *(sp) = r3;
    0x0000291a add r2, pc                                        |     r2 = 0x538c;
    0x0000291c movs r3, 0xb                                      |     r3 = 0xb;
    0x0000291e blx 0xcf0                                         |     fcn_00000cf0 ();
                                                                 |     do {
    0x00002922 mov r0, r7                                        |         r0 = r7;
    0x00002924 blx 0xb68                                         |         fcn_00000b68 ();
                                                                 | label_1:
    0x00002928 mov r0, sb                                        |         r0 = sb;
    0x0000292a blx 0xb68                                         |         fcn_00000b68 ();
    0x0000292e mov.w r0, -1                                      |         r0 = -1;
                                                                 | label_0:
    0x00002932 add sp, 0x24                                      |         
    0x00002934 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_7:
    0x00002938 mov r0, r7                                        |         r0 = r7;
    0x0000293a blx 0xb68                                         |         fcn_00000b68 ();
    0x0000293e mov r0, sb                                        |         r0 = sb;
    0x00002940 blx 0xb68                                         |         fcn_00000b68 ();
    0x00002944 movs r0, 0                                        |         r0 = 0;
    0x00002946 add sp, 0x24                                      |         
    0x00002948 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_8:
    0x0000294c str r3, [sp, 0x14]                                |         var_14h = r3;
    0x0000294e blx 0xc8c                                         |         sprintf_chk ()
    0x00002952 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00002954 movs r1, 1                                        |         r1 = 1;
    0x00002956 ldr r2, [pc, 0x104]                               |         r2 = *(0x2a5e);
    0x00002958 ldr r4, [r0]                                      |         r4 = *(r0);
    0x0000295a ldr r5, [r3, r2]                                  |         r5 = *((r3 + r2));
    0x0000295c ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x0000295e ldr r2, [pc, 0x110]                               |         
    0x00002960 str r3, [sp]                                      |         *(sp) = r3;
    0x00002962 ldr r3, [pc, 0x110]                               |         
    0x00002964 add r2, pc                                        |         r2 = 0x53da;
    0x00002966 ldr r0, [r5]                                      |         r0 = *(r5);
    0x00002968 add r3, pc                                        |         r3 = 0x53e2;
    0x0000296a blx 0xcf0                                         |         fcn_00000cf0 ();
    0x0000296e mov r0, r4                                        |         r0 = r4;
    0x00002970 ldr r5, [r5]                                      |         r5 = *(r5);
    0x00002972 blx 0xc08                                         |         ctype_tolower_loc ();
    0x00002976 ldr r3, [pc, 0x100]                               |         
    0x00002978 movs r1, 1                                        |         r1 = 1;
    0x0000297a ldr r2, [pc, 0x100]                               |         
    0x0000297c str r0, [sp, 8]                                   |         var_8h = r0;
    0x0000297e mov r0, r5                                        |         r0 = r5;
    0x00002980 add r3, pc                                        |         r3 = 0x53fe;
    0x00002982 str r4, [sp, 4]                                   |         var_4h = r4;
    0x00002984 str r3, [sp]                                      |         *(sp) = r3;
    0x00002986 add r2, pc                                        |         r2 = 0x5408;
    0x00002988 movs r3, 0xb                                      |         r3 = 0xb;
    0x0000298a blx 0xcf0                                         |         fcn_00000cf0 ();
    0x0000298e b 0x2922                                          |         
                                                                 |     } while (1);
                                                                 | label_3:
    0x00002990 ldr r2, [pc, 0xc8]                                |     r2 = *(0x2a5c);
    0x00002992 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00002994 ldr r3, [pc, 0xe8]                                |     
    0x00002996 ldr r4, [r1, r2]                                  |     r4 = *((r1 + r2));
    0x00002998 ldr r2, [pc, 0xe8]                                |     
    0x0000299a add r3, pc                                        |     r3 = 0x541e;
    0x0000299c str r7, [sp, 4]                                   |     var_4h = r7;
    0x0000299e add r2, pc                                        |     r2 = 0x5426;
                                                                 |     do {
    0x000029a0 movs r1, 1                                        |         r1 = 1;
    0x000029a2 str r0, [sp]                                      |         *(sp) = r0;
    0x000029a4 ldr r0, [r4]                                      |         r0 = *(r4);
    0x000029a6 blx 0xcf0                                         |         fcn_00000cf0 ();
    0x000029aa blx 0xc8c                                         |         sprintf_chk ()
    0x000029ae movs r2, 0x16                                     |         r2 = 0x16;
    0x000029b0 mov r3, r0                                        |         r3 = r0;
    0x000029b2 str r2, [r3]                                      |         *(r3) = r2;
    0x000029b4 mov.w r0, -1                                      |         r0 = -1;
    0x000029b8 b 0x2932                                          |         goto label_0;
                                                                 | label_2:
    0x000029ba ldr r1, [pc, 0xa0]                                |         r1 = *(0x2a5e);
    0x000029bc ldr r4, [sp, 0x1c]                                |         r4 = var_1ch;
    0x000029be ldr r3, [pc, 0xc8]                                |         
    0x000029c0 ldr r4, [r4, r1]                                  |         r4 = *((r4 + r1));
    0x000029c2 str r2, [sp, 4]                                   |         var_4h = r2;
    0x000029c4 add r3, pc                                        |         r3 = 0x5452;
    0x000029c6 ldr r2, [pc, 0xc4]                                |         
    0x000029c8 add r2, pc                                        |         r2 = 0x545a;
    0x000029ca b 0x29a0                                          |         
                                                                 |     } while (1);
                                                                 | label_4:
    0x000029cc blx 0xc8c                                         |     sprintf_chk ()
    0x000029d0 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x000029d2 ldr r2, [pc, 0x88]                                |     r2 = *(0x2a5e);
    0x000029d4 ldr r3, [pc, 0xb8]                                |     
    0x000029d6 ldr r5, [r0]                                      |     r5 = *(r0);
    0x000029d8 ldr r4, [r1, r2]                                  |     r4 = *((r1 + r2));
    0x000029da movs r1, 1                                        |     r1 = 1;
    0x000029dc ldr r2, [pc, 0xb4]                                |     
    0x000029de add r3, pc                                        |     r3 = 0x5472;
    0x000029e0 str r7, [sp]                                      |     *(sp) = r7;
    0x000029e2 ldr r0, [r4]                                      |     r0 = *(r4);
    0x000029e4 add r2, pc                                        |     r2 = 0x547c;
    0x000029e6 blx 0xcf0                                         |     fcn_00000cf0 ();
    0x000029ea ldr r6, [r4]                                      |     r6 = *(r4);
    0x000029ec mov r0, r5                                        |     r0 = r5;
    0x000029ee ldr r4, [pc, 0xa8]                                |     
    0x000029f0 blx 0xc08                                         |     ctype_tolower_loc ();
    0x000029f4 ldr r2, [pc, 0xa4]                                |     
    0x000029f6 mov r1, r0                                        |     r1 = r0;
    0x000029f8 add r4, pc                                        |     r4 = 0x5496;
    0x000029fa strd r5, r1, [sp, 4]                              |     __asm ("strd r5, r1, [var_4h]");
    0x000029fe movs r3, 0xb                                      |     r3 = 0xb;
    0x00002a00 mov r0, r6                                        |     r0 = r6;
    0x00002a02 add r2, pc                                        |     r2 = 0x54a2;
    0x00002a04 movs r1, 1                                        |     r1 = 1;
    0x00002a06 str r4, [sp]                                      |     *(sp) = r4;
    0x00002a08 blx 0xcf0                                         |     fcn_00000cf0 ();
    0x00002a0c mov.w r0, -1                                      |     r0 = -1;
    0x00002a10 b 0x2932                                          |     goto label_0;
                                                                 | label_5:
    0x00002a12 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00002a14 blx 0xc8c                                         |     r0 = sprintf_chk ()
    0x00002a16 ldmdb sl!, {r0, r1, r2, sb, fp, ip, pc}           |     __asm ("ldmdb sl!, {r0, r1, r2, sb, fp, ip, pc}");
    0x00002a1a movs r1, 1                                        |     r1 = 1;
    0x00002a1c ldr r3, [pc, 0x3c]                                |     r3 = *(0x2a5c);
    0x00002a1e ldr r4, [r0]                                      |     r4 = *(r0);
    0x00002a20 ldr r5, [r2, r3]                                  |     r5 = *((r2 + r3));
    0x00002a22 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00002a24 ldr r3, [pc, 0x78]                                |     
    0x00002a26 str r2, [sp]                                      |     *(sp) = r2;
    0x00002a28 ldr r2, [pc, 0x78]                                |     
    0x00002a2a add r3, pc                                        |     r3 = 0x54ce;
    0x00002a2c ldr r0, [r5]                                      |     r0 = *(r5);
    0x00002a2e add r2, pc                                        |     r2 = 0x54d6;
    0x00002a30 blx 0xcf0                                         |     fcn_00000cf0 ();
    0x00002a32 ldrd r4, r6, [lr, -0x80]                          |     __asm ("ldrd r4, r6, [lr, -0x80]");
    0x00002a36 ldr r5, [r5]                                      |     r5 = *(r5);
    0x00002a38 blx 0xc08                                         |     ctype_tolower_loc ();
    0x00002a3c ldr r1, [pc, 0x68]                                |     
    0x00002a3e movs r3, 0xb                                      |     r3 = 0xb;
    0x00002a40 ldr r2, [pc, 0x68]                                |     
    0x00002a42 strd r4, r0, [sp, 4]                              |     __asm ("strd r4, r0, [var_4h]");
    0x00002a46 mov r0, r5                                        |     r0 = r5;
    0x00002a48 add r1, pc                                        |     r1 = 0x54f4;
    0x00002a4a str r1, [sp]                                      |     *(sp) = r1;
    0x00002a4c add r2, pc                                        |     r2 = 0x54fc;
    0x00002a4e movs r1, 1                                        |     r1 = 1;
    0x00002a50 blx 0xcf0                                         |     fcn_00000cf0 ();
    0x00002a54 b 0x2928                                          |     goto label_1;
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/ubinize @ 0x2ab0 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.00002ab0 ()                                          | void fcn_00002ab0 (int16_t arg_80h, int16_t arg_88h, int16_t arg_90h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                     |     int16_t var_0h_2;
                                                                     |     int16_t var_4h_2;
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_10h;
                                                                     |     int16_t var_14h;
                                                                     |     int16_t var_18h;
                                                                     |     int32_t var_1ch;
                                                                     |     int32_t var_1ch_2;
                                                                     |     int16_t var_24h;
                                                                     |     int16_t var_28h;
                                                                     |     int16_t var_2ch;
                                                                     |     int32_t var_30h;
                                                                     |     int32_t var_30h_2;
                                                                     |     int16_t var_40h;
                                                                     |     int16_t var_44h;
                                                                     |     int16_t var_54h;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
    0x00002ab0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x00002ab4 mov r8, r2                                            |     r8 = r2;
    0x00002ab6 ldr r2, [pc, 0x298]                                   |     
    0x00002ab8 sub sp, 0x5c                                          |     
    0x00002aba mov r4, r0                                            |     r4 = r0;
    0x00002abc mov r7, r1                                            |     r7 = r1;
    0x00002abe ldr r3, [pc, 0x294]                                   |     r3 = *(0x2d56);
    0x00002ac0 movs r1, 0xd                                          |     r1 = 0xd;
    0x00002ac2 add r2, pc                                            |     r2 = 0x5818;
    0x00002ac4 mov.w fp, 1                                           |     
    0x00002ac6 lsrs r1, r0, 0xc                                      |     r1 = r0 >> 0xc;
    0x00002ac8 movs r6, 0                                            |     r6 = 0;
    0x00002aca ldrd sb, sl, [sp, 0x90]                               |     __asm ("ldrd sb, sl, [arg_90h]");
    0x00002ace ldr r3, [r2, r3]                                      |     
    0x00002ad0 ldr r2, [r0, 4]                                       |     r2 = *((r0 + 4));
    0x00002ad2 ldr r3, [r3]                                          |     r3 = *(0x5818);
    0x00002ad4 str r3, [sp, 0x54]                                    |     var_54h = r3;
    0x00002ad6 mov.w r3, 0                                           |     r3 = 0;
    0x00002ada ldr r3, [r0]                                          |     r3 = *(r0);
    0x00002adc mov r0, r2                                            |     r0 = r2;
    0x00002ade strd fp, fp, [sp, 0x1c]                               |     __asm ("strd fp, fp, [var_0hx1c]");
    0x00002ae2 str r6, [sp, 0x24]                                    |     var_24h = r6;
    0x00002ae4 str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x00002ae6 lsls r3, r3, 1                                        |     r3 <<= 1;
    0x00002ae8 str r2, [sp, 0x10]                                    |     var_10h = r2;
    0x00002aea str r3, [sp, 0x40]                                    |     var_40h = r3;
    0x00002aec asrs r3, r3, 0x1f                                     |     r3 >>= 0x1f;
    0x00002aee str r3, [sp, 0x44]                                    |     var_44h = r3;
    0x00002af0 ldr r3, [pc, 0x264]                                   |     
    0x00002af2 add r3, pc                                            |     r3 = 0x584e;
    0x00002af4 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x00002af6 movw r3, 0xefff                                       |     
    0x00002afa movt r3, 0x7fff                                       |     
    0x00002afe str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x00002b00 movs r3, 5                                            |     r3 = 5;
    0x00002b02 strd r1, r3, [sp, 0x30]                               |     __asm ("strd r1, r3, [var_30h]");
    0x00002b06 blx 0xbfc                                             |     strerror (r0);
    0x00002b08 ldrd r4, fp, [sl], -0x250                             |     __asm ("ldrd r4, fp, [sl], -aav.0x00000001");
    0x00002b0c add r3, pc                                            |     r3 = 0x80001b0f;
    0x00002b0e str r3, [sp, 0x14]                                    |     var_14h = r3;
    0x00002b10 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x00002b12 beq.w 0x2d06                                          |         goto label_2;
                                                                     |     }
    0x00002b16 ldr r2, [r4, 0x10]                                    |     r2 = *((r4 + 0x10));
    0x00002b18 movs r1, 0xff                                         |     r1 = 0xff;
    0x00002b1a mov r5, r0                                            |     r5 = r0;
    0x00002b1c str r2, [sp, 0x10]                                    |     var_10h = r2;
    0x00002b1e blx 0xcb0                                             |     putchar (r0);
    0x00002b20 invalid                                               |     
    0x00002b24 mov r1, sb                                            |     r1 = sb;
    0x00002b26 ldr r3, [r4, 0xc]                                     |     r3 = *((r4 + 0xc));
    0x00002b28 adds r0, r5, r2                                       |     r0 = r5 + r2;
    0x00002b2a ldr r2, [r4, 0x18]                                    |     r2 = *((r4 + 0x18));
    0x00002b2c add.w sb, r5, r3                                      |     sb = r5 + r3;
    0x00002b30 blx 0xb80                                             |     fcn_00000b80 ();
    0x00002b34 ldr r0, [r4, 0x10]                                    |     r0 = *((r4 + 0x10));
    0x00002b36 movs r1, 0xff                                         |     r1 = 0xff;
    0x00002b38 ldr r2, [r4, 0x18]                                    |     r2 = *((r4 + 0x18));
    0x00002b3a ldr r3, [r4, 4]                                       |     r3 = *((r4 + 4));
    0x00002b3c subs r3, r3, r0                                       |     r3 -= r0;
    0x00002b3e add r0, r2                                            |     r0 += r2;
    0x00002b40 add r0, r5                                            |     r0 += r5;
    0x00002b42 subs r2, r3, r2                                       |     r2 = r3 - r2;
    0x00002b44 blx 0xcb0                                             |     putchar (r0);
    0x00002b48 str r6, [sp]                                          |     *(sp) = r6;
    0x00002b4a mov r0, sl                                            |     r0 = sl;
    0x00002b4c ldr r3, [r4, 4]                                       |     r3 = *((r4 + 4));
    0x00002b4e smull r2, r7, r7, r3                                  |     r2:r7 = r7 * r3;
    0x00002b52 mov r3, r7                                            |     r3 = r7;
    0x00002b54 str r2, [sp, 0x10]                                    |     var_10h = r2;
    0x00002b56 blx 0xbb4                                             |     stpcpy_chk ();
    0x00002b5a ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x00002b5c cmp r1, r7                                            |     
    0x00002b5e it eq                                                 |     
                                                                     |     if (r1 == r7) {
    0x00002b60 cmpeq r0, r2                                          |         __asm ("cmpeq r0, r2");
                                                                     |     }
                                                                     |     if (r1 != r7) {
    0x00002b62 bne 0x2bfc                                            |         goto label_3;
                                                                     |     }
    0x00002b64 ldrd r2, r3, [sp, 0x80]                               |     __asm ("ldrd r2, r3, [arg_80h]");
    0x00002b68 mov r1, r5                                            |     r1 = r5;
    0x00002b6a mov r0, r4                                            |     r0 = r4;
    0x00002b6c add r7, sp, 0x18                                      |     r7 += var_18h;
    0x00002b6e bl 0x2728                                             |     fcn_00002728 (r0, r1, r2, r3);
    0x00002b72 mov r3, r6                                            |     r3 = r6;
    0x00002b74 mov r2, sb                                            |     r2 = sb;
    0x00002b76 mov r1, r7                                            |     r1 = r7;
    0x00002b78 mov r0, r4                                            |     r0 = r4;
    0x00002b7a strd r6, r6, [sp]                                     |     __asm ("strd r6, r6, [sp]");
    0x00002b7e bl 0x2784                                             |     fcn_00002784 (r0, r1, r2, r3, r4, r5);
    0x00002b82 ldr r2, [r4, 4]                                       |     r2 = *((r4 + 4));
    0x00002b84 mov r1, r5                                            |     r1 = r5;
    0x00002b86 mov r0, sl                                            |     r0 = sl;
    0x00002b88 blx 0xce4                                             |     fcn_00000ce4 ();
    0x00002b8c ldr r3, [r4, 4]                                       |     r3 = *((r4 + 4));
    0x00002b8e cmp r3, r0                                            |     
                                                                     |     if (r3 != r0) {
    0x00002b90 bne 0x2c44                                            |         goto label_4;
                                                                     |     }
    0x00002b92 smull r2, r8, r8, r3                                  |     r2:r8 = r8 * r3;
    0x00002b96 mov r0, sl                                            |     r0 = sl;
    0x00002b98 str r6, [sp]                                          |     *(sp) = r6;
    0x00002b9a mov r3, r8                                            |     r3 = r8;
    0x00002b9c str r2, [sp, 0x10]                                    |     var_10h = r2;
    0x00002b9e blx 0xbb4                                             |     stpcpy_chk ();
    0x00002ba2 ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x00002ba4 cmp r1, r8                                            |     
    0x00002ba6 it eq                                                 |     
                                                                     |     if (r1 == r8) {
    0x00002ba8 cmpeq r0, r2                                          |         __asm ("cmpeq r0, r2");
                                                                     |     }
                                                                     |     if (r1 != r8) {
    0x00002baa bne 0x2c88                                            |         goto label_5;
                                                                     |     }
    0x00002bac ldrd r2, r3, [sp, 0x88]                               |     __asm ("ldrd r2, r3, [arg_88h]");
    0x00002bb0 mov r0, r4                                            |     r0 = r4;
    0x00002bb2 mov r1, r5                                            |     r1 = r5;
    0x00002bb4 bl 0x2728                                             |     fcn_00002728 (r0, r1, r2, r3);
    0x00002bb8 mov r0, r4                                            |     r0 = r4;
    0x00002bba mov r2, sb                                            |     r2 = sb;
    0x00002bbc mov r1, r7                                            |     r1 = r7;
    0x00002bbe mov r3, fp                                            |     r3 = fp;
    0x00002bc0 strd r6, r6, [sp]                                     |     __asm ("strd r6, r6, [sp]");
    0x00002bc4 bl 0x2784                                             |     fcn_00002784 (r0, r1, r2, r3, r4, r5);
    0x00002bc6 ldc2l p8, c6, [lr, 0x188]                             |     __asm ("ldc2l p8, c6, [lr, 0x188]");
    0x00002bca mov r0, sl                                            |     r0 = sl;
    0x00002bcc mov r1, r5                                            |     r1 = r5;
    0x00002bce blx 0xce4                                             |     fcn_00000ce4 ();
    0x00002bd2 ldr r4, [r4, 4]                                       |     r4 = *((r4 + 4));
    0x00002bd4 cmp r4, r0                                            |     
                                                                     |     if (r4 != r0) {
    0x00002bd6 bne 0x2cc6                                            |         goto label_6;
                                                                     |     }
    0x00002bd8 mov r0, r5                                            |     r0 = r5;
    0x00002bda blx 0xb68                                             |     fcn_00000b68 ();
    0x00002bde mov r0, r6                                            |     r0 = r6;
                                                                     |     do {
                                                                     | label_1:
    0x00002be0 ldr r2, [pc, 0x17c]                                   |         
    0x00002be2 ldr r3, [pc, 0x170]                                   |         r3 = *(0x2d56);
    0x00002be4 add r2, pc                                            |         r2 = 0x5948;
    0x00002be6 ldr r3, [r2, r3]                                      |         r3 = *(0x5948);
    0x00002be8 ldr r2, [r3]                                          |         r2 = *(0x5948);
    0x00002bea ldr r3, [sp, 0x54]                                    |         r3 = var_54h;
    0x00002bec eors r2, r3                                           |         r2 ^= r3;
    0x00002bee mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x00002bf2 bne.w 0x2d4c                                          |             goto label_7;
                                                                     |         }
    0x00002bf6 add sp, 0x5c                                          |         
    0x00002bf8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_3:
    0x00002bfc blx 0xc8c                                             |         sprintf_chk ()
    0x00002c00 ldr r2, [sp, 0x14]                                    |         r2 = var_14h;
    0x00002c02 mov r1, fp                                            |         r1 = fp;
    0x00002c04 ldr r3, [pc, 0x15c]                                   |         r3 = *(0x2d64);
    0x00002c06 ldr r4, [r0]                                          |         r4 = *(r0);
    0x00002c08 ldr r6, [r2, r3]                                      |         r6 = *((r2 + r3));
    0x00002c0a ldr r3, [pc, 0x15c]                                   |         
    0x00002c0c ldr r2, [pc, 0x15c]                                   |         
    0x00002c0e ldr r0, [r6]                                          |         r0 = *(r6);
    0x00002c10 add r3, pc                                            |         r3 = 0x597e;
    0x00002c12 add r2, pc                                            |         r2 = 0x5982;
    0x00002c14 blx 0xcf0                                             |         fcn_00000cf0 ();
    0x00002c16 strd r4, r6, [ip], -0x80                              |         __asm ("strd r4, r6, [ip], -0x80");
    0x00002c1a ldr r6, [r6]                                          |         r6 = *(r6);
    0x00002c1c blx 0xc08                                             |         ctype_tolower_loc ();
    0x00002c20 ldr r3, [pc, 0x14c]                                   |         
    0x00002c22 mov r1, fp                                            |         r1 = fp;
    0x00002c24 ldr r2, [pc, 0x14c]                                   |         
    0x00002c26 str r0, [sp, 8]                                       |         var_8h = r0;
    0x00002c28 mov r0, r6                                            |         r0 = r6;
    0x00002c2a add r3, pc                                            |         r3 = 0x599e;
    0x00002c2c strd r3, r4, [sp]                                     |         __asm ("strd r3, r4, [sp]");
    0x00002c30 add r2, pc                                            |         r2 = 0x59a8;
    0x00002c32 movs r3, 0xb                                          |         r3 = 0xb;
    0x00002c34 blx 0xcf0                                             |         fcn_00000cf0 ();
                                                                     | label_0:
    0x00002c38 mov r0, r5                                            |         r0 = r5;
    0x00002c3a blx 0xb68                                             |         fcn_00000b68 ();
    0x00002c3e mov.w r0, -1                                          |         r0 = -1;
    0x00002c42 b 0x2be0                                              |         
                                                                     |     } while (1);
                                                                     | label_4:
    0x00002c44 str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x00002c46 blx 0xc8c                                             |     sprintf_chk ()
    0x00002c4a ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x00002c4c mov r1, fp                                            |     r1 = fp;
    0x00002c4e ldr r2, [pc, 0x114]                                   |     r2 = *(0x2d66);
    0x00002c50 ldr r4, [r0]                                          |     r4 = *(r0);
    0x00002c52 ldr r6, [r3, r2]                                      |     r6 = *((r3 + r2));
    0x00002c54 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x00002c56 ldr r2, [pc, 0x120]                                   |     
    0x00002c58 str r3, [sp]                                          |     *(sp) = r3;
    0x00002c5a ldr r3, [pc, 0x120]                                   |     
    0x00002c5c add r2, pc                                            |     r2 = 0x59da;
    0x00002c5e ldr r0, [r6]                                          |     r0 = *(r6);
    0x00002c60 add r3, pc                                            |     r3 = 0x59e2;
    0x00002c62 blx 0xcf0                                             |     fcn_00000cf0 ();
    0x00002c66 mov r0, r4                                            |     r0 = r4;
    0x00002c68 ldr r6, [r6]                                          |     r6 = *(r6);
    0x00002c6a blx 0xc08                                             |     ctype_tolower_loc ();
    0x00002c6e ldr r3, [pc, 0x110]                                   |     
    0x00002c70 mov r1, fp                                            |     r1 = fp;
    0x00002c72 ldr r2, [pc, 0x110]                                   |     
    0x00002c74 str r0, [sp, 8]                                       |     var_8h = r0;
    0x00002c76 mov r0, r6                                            |     r0 = r6;
    0x00002c78 add r3, pc                                            |     r3 = 0x59fe;
    0x00002c7a strd r3, r4, [sp]                                     |     __asm ("strd r3, r4, [sp]");
    0x00002c7e add r2, pc                                            |     r2 = 0x5a08;
    0x00002c80 movs r3, 0xb                                          |     r3 = 0xb;
    0x00002c82 blx 0xcf0                                             |     fcn_00000cf0 ();
    0x00002c86 b 0x2c38                                              |     goto label_0;
                                                                     | label_5:
    0x00002c88 blx 0xc8c                                             |     sprintf_chk ()
    0x00002c8c ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x00002c8e mov r1, fp                                            |     r1 = fp;
    0x00002c90 ldr r3, [pc, 0xd0]                                    |     r3 = *(0x2d64);
    0x00002c92 ldr r4, [r0]                                          |     r4 = *(r0);
    0x00002c94 ldr r6, [r2, r3]                                      |     r6 = *((r2 + r3));
    0x00002c96 ldr r3, [pc, 0xf0]                                    |     
    0x00002c98 ldr r2, [pc, 0xf0]                                    |     
    0x00002c9a ldr r0, [r6]                                          |     r0 = *(r6);
    0x00002c9c add r3, pc                                            |     r3 = 0x5a2a;
    0x00002c9e add r2, pc                                            |     r2 = 0x5a2e;
    0x00002ca0 blx 0xcf0                                             |     fcn_00000cf0 ();
    0x00002ca4 mov r0, r4                                            |     r0 = r4;
    0x00002ca6 ldr r6, [r6]                                          |     r6 = *(r6);
    0x00002ca8 blx 0xc08                                             |     ctype_tolower_loc ();
    0x00002cac ldr r3, [pc, 0xe0]                                    |     
    0x00002cae mov r1, fp                                            |     r1 = fp;
    0x00002cb0 ldr r2, [pc, 0xe0]                                    |     
    0x00002cb2 str r0, [sp, 8]                                       |     var_8h = r0;
    0x00002cb4 mov r0, r6                                            |     r0 = r6;
    0x00002cb6 add r3, pc                                            |     r3 = 0x5a4a;
    0x00002cb8 strd r3, r4, [sp]                                     |     __asm ("strd r3, r4, [sp]");
    0x00002cbc add r2, pc                                            |     r2 = 0x5a54;
    0x00002cbe movs r3, 0xb                                          |     r3 = 0xb;
    0x00002cc0 blx 0xcf0                                             |     fcn_00000cf0 ();
    0x00002cc4 b 0x2c38                                              |     goto label_0;
                                                                     | label_6:
    0x00002cc6 blx 0xc8c                                             |     sprintf_chk ()
    0x00002cca ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x00002ccc mov r1, fp                                            |     r1 = fp;
    0x00002cce ldr r3, [pc, 0x94]                                    |     r3 = *(0x2d66);
    0x00002cd0 ldr r6, [r0]                                          |     r6 = *(r0);
    0x00002cd2 ldr r7, [r2, r3]                                      |     r7 = *((r2 + r3));
    0x00002cd4 ldr r3, [pc, 0xc0]                                    |     
    0x00002cd6 ldr r2, [pc, 0xc4]                                    |     
    0x00002cd8 str r4, [sp]                                          |     *(sp) = r4;
    0x00002cda add r3, pc                                            |     
    0x00002cdc ldr r0, [r7]                                          |     r0 = *(r7);
    0x00002cde add r2, pc                                            |     r2 = 0x5a80;
    0x00002ce0 blx 0xcf0                                             |     fcn_00000cf0 ();
    0x00002ce4 mov r0, r6                                            |     r0 = r6;
    0x00002ce6 ldr r4, [r7]                                          |     r4 = *(r7);
    0x00002ce8 blx 0xc08                                             |     ctype_tolower_loc ();
    0x00002cea invalid                                               |     
    0x00002cee mov r1, fp                                            |     r1 = fp;
    0x00002cf0 ldr r2, [pc, 0xb0]                                    |     
    0x00002cf2 str r0, [sp, 8]                                       |     var_8h = r0;
    0x00002cf4 mov r0, r4                                            |     r0 = r4;
    0x00002cf6 add r3, pc                                            |     r3 = 0x8770;
    0x00002cf8 strd r3, r6, [sp]                                     |     __asm ("strd r3, r6, [sp]");
    0x00002cfc add r2, pc                                            |     r2 = 0x5aa4;
    0x00002cfe movs r3, 0xb                                          |     r3 = 0xb;
    0x00002d00 blx 0xcf0                                             |     fcn_00000cf0 ();
    0x00002d04 b 0x2c38                                              |     goto label_0;
                                                                     | label_2:
    0x00002d06 blx 0xc8c                                             |     sprintf_chk ()
    0x00002d0a ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x00002d0c mov r1, fp                                            |     r1 = fp;
    0x00002d0e ldr r3, [pc, 0x54]                                    |     r3 = *(0x2d66);
    0x00002d10 ldr r5, [r0]                                          |     r5 = *(r0);
    0x00002d12 ldr r4, [r2, r3]                                      |     r4 = *((r2 + r3));
    0x00002d14 ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x00002d16 ldr r3, [pc, 0x90]                                    |     
    0x00002d18 str r2, [sp]                                          |     *(sp) = r2;
    0x00002d1a ldr r2, [pc, 0x90]                                    |     
    0x00002d1c add r3, pc                                            |     r3 = 0x5aca;
    0x00002d1e ldr r0, [r4]                                          |     r0 = *(r4);
    0x00002d20 add r2, pc                                            |     r2 = 0x5ad2;
    0x00002d22 blx 0xcf0                                             |     fcn_00000cf0 ();
    0x00002d26 ldr r6, [r4]                                          |     r6 = *(r4);
    0x00002d28 mov r0, r5                                            |     r0 = r5;
    0x00002d2a ldr r4, [pc, 0x84]                                    |     
    0x00002d2c blx 0xc08                                             |     ctype_tolower_loc ();
    0x00002d30 ldr r2, [pc, 0x80]                                    |     
    0x00002d32 mov r1, fp                                            |     r1 = fp;
    0x00002d34 add r4, pc                                            |     r4 = 0x5aea;
    0x00002d36 str r0, [sp, 8]                                       |     var_8h = r0;
    0x00002d38 movs r3, 0xb                                          |     r3 = 0xb;
    0x00002d3a mov r0, r6                                            |     r0 = r6;
    0x00002d3c add r2, pc                                            |     r2 = 0x5af4;
    0x00002d3e str r5, [sp, 4]                                       |     var_4h = r5;
    0x00002d40 str r4, [sp]                                          |     *(sp) = r4;
    0x00002d42 blx 0xcf0                                             |     fcn_00000cf0 ();
    0x00002d46 mov.w r0, -1                                          |     r0 = -1;
    0x00002d4a b 0x2be0                                              |     goto label_1;
                                                                     | label_7:
    0x00002d4c blx 0xb8c                                             |     fcn_00000b8c ();
    0x00002d50 add r6, r8                                            |     r6 += r8;
    0x00002d52 movs r1, r0                                           |     r1 = r0;
    0x00002d54 lsls r4, r2, 3                                        |     r4 = r2 << 3;
    0x00002d56 movs r0, r0                                           |     
    0x00002d58 adds r2, 0x9a                                         |     r2 += 0x9a;
    0x00002d5a movs r0, r0                                           |     
    0x00002d5c mvns r4, r7                                           |     r4 = ~r7;
    0x00002d5e movs r1, r0                                           |     r1 = r0;
    0x00002d60 orrs r4, r4                                           |     r4 |= r4;
    0x00002d62 movs r1, r0                                           |     r1 = r0;
    0x00002d64 lsls r4, r3, 3                                        |     r4 = r3 << 3;
    0x00002d66 movs r0, r0                                           |     
    0x00002d68 adds r0, 0x5c                                         |     r0 += 0x5c;
    0x00002d6a movs r0, r0                                           |     
    0x00002d6c adds r1, 0xb6                                         |     r1 += 0xb6;
    0x00002d6e movs r0, r0                                           |     
    0x00002d70 movs r2, 0xe2                                         |     r2 = 0xe2;
    0x00002d72 movs r0, r0                                           |     
    0x00002d74 adds r4, r7, r0                                       |     r4 = r7 + r0;
    0x00002d76 movs r0, r0                                           |     
    0x00002d78 adds r1, 0x94                                         |     r1 += 0x94;
    0x00002d7a movs r0, r0                                           |     
    0x00002d7c adds r0, 0xc                                          |     r0 += 0xc;
    0x00002d7e movs r0, r0                                           |     
    0x00002d80 movs r2, 0x94                                         |     r2 = 0x94;
    0x00002d82 movs r0, r0                                           |     
    0x00002d84 asrs r6, r5, 0x1f                                     |     r6 = r5 >> 0x1f;
    0x00002d86 movs r0, r0                                           |     
    0x00002d88 cmp r7, 0xd0                                          |     
    0x00002d8a movs r0, r0                                           |     
    0x00002d8c adds r1, 0x2a                                         |     r1 += 0x2a;
    0x00002d8e movs r0, r0                                           |     
    0x00002d90 movs r2, 0x56                                         |     r2 = 0x56;
    0x00002d92 movs r0, r0                                           |     
    0x00002d94 asrs r0, r6, 0x1e                                     |     r0 = r6 >> 0x1e;
    0x00002d96 movs r0, r0                                           |     
    0x00002d98 cmp r7, 0x92                                          |     
    0x00002d9a movs r0, r0                                           |     
    0x00002d9c adds r1, 0x12                                         |     r1 += 0x12;
    0x00002d9e movs r0, r0                                           |     
    0x00002da0 movs r2, 0x16                                         |     r2 = 0x16;
    0x00002da2 movs r0, r0                                           |     
    0x00002da4 asrs r0, r6, 0x1d                                     |     r0 = r6 >> 0x1d;
    0x00002da6 movs r0, r0                                           |     
    0x00002da8 cmp r7, 0x50                                          |     
    0x00002daa movs r0, r0                                           |     
    0x00002dac adds r0, 0x7c                                         |     r0 += 0x7c;
    0x00002dae movs r0, r0                                           |     
    0x00002db0 movs r1, 0xd8                                         |     r1 = 0xd8;
    0x00002db2 movs r0, r0                                           |     
    0x00002db4 asrs r0, r6, 0x1c                                     |     r0 = r6 >> 0x1c;
    0x00002db6 movs r0, r0                                           |     
                                                                     | }

[*] Function sprintf used 13 times ubinize