[*] Binary protection state of e4crypt

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


[*] Function sprintf tear down of e4crypt

    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/e4crypt @ 0x18e8 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000018e8 ()                                      | void fcn_000018e8 (int16_t arg_4h, int16_t arg_8h, int16_t arg_48h, int16_t arg_68h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_15h;
                                                                 |     int16_t var_11h;
                                                                 |     int16_t var_1h;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_ch_3;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch_2;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int32_t var_30h_2;
                                                                 |     char * * endptr;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_7ch;
                                                                 |     int16_t var_80h;
                                                                 |     int16_t var_88h;
                                                                 |     int16_t var_0h_4;
                                                                 |     int16_t var_c0h;
                                                                 |     int16_t var_c4h;
                                                                 |     int16_t var_104h;
                                                                 |     int16_t var_144h;
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h_2;
                                                                 |     int16_t var_14h_2;
                                                                 |     int8_t var_53h;
                                                                 |     int16_t var_74h;
                                                                 |     int16_t var_78h;
                                                                 |     int16_t var_0h_3;
                                                                 |     int16_t var_8h_2;
                                                                 |     int16_t var_ch;
                                                                 |     uint32_t request;
                                                                 |     int16_t var_14h_3;
                                                                 |     int16_t var_18h_2;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h_2;
                                                                 |     int16_t var_22h;
                                                                 |     int16_t var_23h;
                                                                 |     int16_t var_24h_2;
                                                                 |     void * s2;
                                                                 |     int16_t var_3ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000018e8 svcmi 0xf0e92d                                    |     __asm ("svcmi 0xf0e92d");
    0x000018ec mov sb, r1                                        |     sb = r1;
    0x000018ee ldr r4, [pc, 0x1ac]                               |     
    0x000018f0 sub sp, 0x44                                      |     
    0x000018f2 ldr r1, [pc, 0x1ac]                               |     r1 = *(0x1aa2);
    0x000018f4 add r4, pc                                        |     r4 = 0x3396;
    0x000018f6 ldr.w r8, [sp, 0x68]                              |     r8 = *(arg_68h);
    0x000018fa ldr r1, [r4, r1]                                  |     
    0x000018fc ldr r1, [r1]                                      |     r1 = *(0x3396);
    0x000018fe str r1, [sp, 0x3c]                                |     var_3ch = r1;
    0x00001900 mov.w r1, 0                                       |     r1 = 0;
    0x00001904 ldr r1, [pc, 0x19c]                               |     
    0x00001906 strd r0, r2, [sp, 8]                              |     __asm ("strd r0, r2, [var_ch]");
    0x0000190a sub.w r2, sb, 4                                   |     r2 = sb - 4;
    0x0000190e bics r2, r2, 4                                    |     __asm ("bics r2, r2, 4");
    0x00001912 add r1, pc                                        |     r1 = 0x33ba;
    0x00001914 str r1, [sp, 0x1c]                                |     var_1ch = r1;
                                                                 |     if (? != ?) {
    0x00001916 beq 0x1924                                        |         
    0x00001918 sub.w r2, sb, 0x10                                |         r2 = sb - 0x10;
    0x0000191c bics r2, r2, 0x10                                 |         __asm ("bics r2, r2, 0x10");
                                                                 |         if (? != ?) {
    0x00001920 bne.w 0x1a4a                                      |             goto label_23;
                                                                 |         }
                                                                 |     }
    0x00001924 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00001926 cmp r8, r2                                        |     
                                                                 |     if (r8 >= r2) {
    0x00001928 bge 0x19cc                                        |         goto label_24;
                                                                 |     }
    0x0000192a add.w r7, r3, r8, lsl 2                           |     r7 = r3 + (r8 << 2);
    0x0000192e ldr r3, [pc, 0x178]                               |     
    0x00001930 movw sl, 0x6613                                   |     
    0x00001934 asr.w sb, sb, 3                                   |     sb >>= 3;
    0x00001938 movt sl, 0x800c                                   |     sl = 0x800c6613;
    0x0000193c add r3, pc                                        |     r3 = 0x33ea;
    0x0000193e str r3, [sp, 0x14]                                |     var_14h_3 = r3;
    0x00001940 movw r3, 0x6614                                   |     
    0x00001944 movt r3, 0x4010                                   |     r3 = 0x40106614;
    0x00001948 str r3, [sp, 0x10]                                |     request = r3;
                                                                 | label_0:
    0x0000194a ldr r0, [r7]                                      |     r0 = *(r7);
    0x0000194c mov.w r1, 0x4000                                  |     r1 = 0x4000;
    0x00001950 blx 0xcf4                                         |     r0 = open (r0, r1, r2);
    0x00001954 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x00001956 mov r4, r7                                        |     r4 = r7;
    0x00001958 mov r6, r0                                        |     r6 = r0;
    0x0000195a add.w r7, r7, 4                                   |     r7 += 4;
                                                                 |     if (r3 == r0) {
    0x0000195e beq.w 0x1a90                                      |         goto label_25;
                                                                 |     }
    0x00001962 ldr r3, [sp, 8]                                   |     r3 = var_8h_2;
    0x00001964 ldr r4, [sp, 8]                                   |     r4 = var_8h_2;
    0x00001966 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00001968 beq 0x1a06                                        |         goto label_26;
                                                                 |     }
                                                                 | label_3:
    0x0000196a mov.w r2, 0x100                                   |     r2 = 0x100;
    0x0000196e movs r3, 4                                        |     r3 = 4;
    0x00001970 strh.w r2, [sp, 0x20]                             |     var_20h_2 = r2;
    0x00001974 strb.w r3, [sp, 0x22]                             |     var_22h = r3;
    0x00001978 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0000197c beq 0x1a46                                        |         goto label_27;
                                                                 |     }
    0x0000197e mov r3, sb                                        |     r3 = sb;
    0x00001980 movs r2, 0                                        |     r2 = 0;
                                                                 |     do {
    0x00001982 asrs r3, r3, 1                                    |         r3 >>= 1;
    0x00001984 add.w r2, r2, 1                                   |         r2++;
    0x00001988 bne 0x1982                                        |         
                                                                 |     } while (r2 != 0);
    0x0000198a uxtb r2, r2                                       |     r2 = (int8_t) r2;
                                                                 | label_4:
    0x0000198c ldr.w r0, [r4, 0x15]                              |     r0 = *((r4 + 0x15));
    0x00001990 add r3, sp, 0x24                                  |     r3 += var_24h_2;
    0x00001992 ldr.w r1, [r4, 0x19]                              |     r1 = *((r4 + 0x19));
    0x00001996 adds r4, 4                                        |     r4 += 4;
    0x00001998 strb.w r2, [sp, 0x23]                             |     var_23h = r2;
    0x0000199c add r2, sp, 0x20                                  |     r2 += var_20h_2;
    0x0000199e stm r3!, {r0, r1}                                 |     *(r3!) = r0;
                                                                 |     *((r3! + 4)) = r1;
    0x000019a0 mov r1, sl                                        |     r1 = sl;
    0x000019a2 mov r0, r6                                        |     r0 = r6;
    0x000019a4 blx 0xc88                                         |     r0 = ioctl (r0, r1);
    0x000019a8 mov r5, r0                                        |     r5 = r0;
    0x000019aa mov r0, r6                                        |     r0 = r6;
    0x000019ac blx 0xe18                                         |     fcn_00000e18 ();
                                                                 |     if (r5 != 0) {
    0x000019b0 cbnz r5, 0x19e6                                   |         goto label_28;
                                                                 |     }
    0x000019b2 ldr r1, [pc, 0xf8]                                |     
    0x000019b4 mov r2, r4                                        |     r2 = r4;
    0x000019b6 ldr r3, [r7, -0x4]                                |     r3 = *((r7 - 0x4));
    0x000019ba movs r0, 1                                        |     r0 = 1;
    0x000019bc add r1, pc                                        |     r1 = 0x346e;
    0x000019be blx 0xd7c                                         |     fcn_00000d7c ();
                                                                 | label_1:
    0x000019c2 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x000019c4 add.w r8, r8, 1                                   |     r8++;
    0x000019c8 cmp r3, r8                                        |     
                                                                 |     if (r3 != r8) {
    0x000019ca bne 0x194a                                        |         goto label_0;
                                                                 |     }
                                                                 | label_24:
    0x000019cc ldr r2, [pc, 0xe0]                                |     
    0x000019ce ldr r3, [pc, 0xd0]                                |     r3 = *(0x1aa2);
    0x000019d0 add r2, pc                                        |     r2 = 0x3484;
    0x000019d2 ldr r3, [r2, r3]                                  |     r3 = *(0x3484);
    0x000019d4 ldr r2, [r3]                                      |     r2 = *(0x3484);
    0x000019d6 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x000019d8 eors r2, r3                                       |     r2 ^= r3;
    0x000019da mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x000019de bne 0x1a8c                                        |         goto label_29;
                                                                 |     }
    0x000019e0 add sp, 0x44                                      |     
    0x000019e2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_28:
    0x000019e6 blx 0xd3c                                         |     r0 = errno_location ();
    0x000019ea ldr r0, [r0]                                      |     r0 = *(r0);
    0x000019ec blx 0xcd0                                         |     strerror (r0);
    0x000019f0 ldr r5, [r7, -0x4]                                |     r5 = *((r7 - 0x4));
    0x000019f4 mov r2, r0                                        |     r2 = r0;
    0x000019f6 ldr r1, [pc, 0xbc]                                |     
    0x000019f8 mov r3, r4                                        |     r3 = r4;
    0x000019fa movs r0, 1                                        |     r0 = 1;
    0x000019fc str r5, [sp]                                      |     *(sp) = r5;
    0x000019fe add r1, pc                                        |     r1 = 0x34b8;
    0x00001a00 blx 0xd7c                                         |     fcn_00000d7c ();
    0x00001a04 b 0x19c2                                          |     goto label_1;
                                                                 | label_26:
    0x00001a06 add.w fp, sp, 0x2c                                |     
    0x00001a0a ldr r1, [sp, 0x10]                                |     r1 = request;
    0x00001a0c mov r2, fp                                        |     r2 = fp;
    0x00001a0e blx 0xc88                                         |     r0 = ioctl (r0, r1);
    0x00001a12 cmp r0, 0                                         |     
                                                                 |     if (r0 < 0) {
    0x00001a14 blt 0x1a7e                                        |         goto label_30;
                                                                 |     }
    0x00001a16 ldr r3, [sp, 0x14]                                |     r3 = var_14h_3;
    0x00001a18 ldrd r4, r3, [r3, 4]                              |     __asm ("ldrd r4, r3, [r3, 4]");
                                                                 |     if (r3 == 0) {
    0x00001a1c cbz r3, 0x1a64                                    |         goto label_31;
                                                                 |     }
    0x00001a1e str r6, [sp, 0x18]                                |     var_18h_2 = r6;
    0x00001a20 mov r6, fp                                        |     r6 = fp;
    0x00001a22 ldr r5, [sp, 8]                                   |     r5 = var_8h_2;
    0x00001a24 mov fp, r3                                        |     
    0x00001a26 b 0x1a30                                          |     
                                                                 |     while (r2 != 0x10) {
                                                                 | label_2:
    0x00001a28 adds r5, 1                                        |         r5++;
    0x00001a2a adds r4, 0x64                                     |         r4 += 0x64;
    0x00001a2c cmp r5, fp                                        |         
                                                                 |         if (r5 == fp) {
    0x00001a2e beq 0x1a64                                        |             goto label_31;
                                                                 |         }
    0x00001a30 ldr r2, [r4, 0x60]                                |         r2 = *((r4 + 0x60));
    0x00001a32 cmp r2, 0x10                                      |         
    0x00001a34 bne 0x1a28                                        |         
                                                                 |     }
    0x00001a36 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00001a38 mov r1, r6                                        |     r1 = r6;
    0x00001a3a blx 0xc34                                         |     r0 = memcmp (r0, r1, r2);
    0x00001a3e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00001a40 bne 0x1a28                                        |         goto label_2;
                                                                 |     }
    0x00001a42 ldr r6, [sp, 0x18]                                |     r6 = var_18h_2;
    0x00001a44 b 0x196a                                          |     goto label_3;
                                                                 | label_27:
    0x00001a46 mov r2, sb                                        |     r2 = sb;
    0x00001a48 b 0x198c                                          |     goto label_4;
                                                                 | label_23:
    0x00001a4a ldr r4, [sp, 0x1c]                                |     r4 = var_1ch;
    0x00001a4c mov r3, sb                                        |     r3 = sb;
    0x00001a4e ldr r0, [pc, 0x68]                                |     
    0x00001a50 movs r1, 1                                        |     r1 = 1;
    0x00001a52 ldr r2, [pc, 0x68]                                |     
    0x00001a54 ldr r0, [r4, r0]                                  |     r0 = *((r4 + r0));
    0x00001a56 add r2, pc                                        |     r2 = 0x3518;
    0x00001a58 ldr r0, [r0]                                      |     r0 = *(0x1aba);
    0x00001a5a blx 0xd88                                         |     fcn_00000d88 ();
    0x00001a5e movs r0, 1                                        |     r0 = 1;
    0x00001a60 blx 0xd00                                         |     exit (r0);
                                                                 | label_31:
    0x00001a64 ldr r4, [sp, 0x1c]                                |     r4 = var_1ch;
    0x00001a66 movs r2, 0x16                                     |     r2 = 0x16;
    0x00001a68 ldr r3, [pc, 0x4c]                                |     
    0x00001a6a movs r1, 1                                        |     r1 = 1;
    0x00001a6c ldr r0, [pc, 0x50]                                |     
    0x00001a6e ldr r3, [r4, r3]                                  |     r3 = *((r4 + r3));
    0x00001a70 add r0, pc                                        |     r0 = 0x3534;
    0x00001a72 ldr r3, [r3]                                      |     r3 = *(0x1ab8);
    0x00001a74 blx 0xc7c                                         |     fwrite (r0, r1, r2, r3);
    0x00001a78 movs r0, 1                                        |     r0 = 1;
    0x00001a7a blx 0xd00                                         |     exit (r0);
                                                                 | label_30:
    0x00001a7e ldr r0, [pc, 0x44]                                |     
    0x00001a80 add r0, pc                                        |     r0 = 0x354a;
    0x00001a82 blx 0xc58                                         |     perror (r0);
    0x00001a86 movs r0, 1                                        |     r0 = 1;
    0x00001a88 blx 0xd00                                         |     r0 = exit (r0);
                                                                 | label_29:
    0x00001a8c blx 0xc40                                         |     stack_chk_fail ();
                                                                 | label_25:
    0x00001a90 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00001a92 blx 0xc58                                         |     perror (r0);
    0x00001a96 movs r0, 1                                        |     r0 = 1;
    0x00001a98 blx 0xd00                                         |     exit (r0);
    0x00001a9c asrs r0, r1, 0x18                                 |     r0 = r1 >> 0x18;
    0x00001a9e movs r1, r0                                       |     r1 = r0;
    0x00001aa0 lsls r4, r3, 3                                    |     r4 = r3 << 3;
    0x00001aa2 movs r0, r0                                       |     
    0x00001aa4 asrs r2, r5, 0x17                                 |     r2 = r5 >> 0x17;
    0x00001aa6 movs r1, r0                                       |     r1 = r0;
    0x00001aa8 asrs r4, r1, 0x1b                                 |     r4 = r1 >> 0x1b;
    0x00001aaa movs r1, r0                                       |     r1 = r0;
    0x00001aac lsrs r4, r6, 0xd                                  |     r4 = r6 >> 0xd;
    0x00001aae movs r0, r0                                       |     
    0x00001ab0 asrs r4, r5, 0x14                                 |     r4 = r5 >> 0x14;
    0x00001ab2 movs r1, r0                                       |     r1 = r0;
    0x00001ab4 lsrs r2, r7, 0xa                                  |     r2 = r7 >> 0xa;
    0x00001ab6 movs r0, r0                                       |     
    0x00001ab8 lsls r4, r4, 3                                    |     r4 <<= 3;
    0x00001aba movs r0, r0                                       |     
    0x00001abc lsrs r6, r1, 9                                    |     r6 = r1 >> 9;
    0x00001abe movs r0, r0                                       |     
    0x00001ac0 lsrs r4, r5, 0xb                                  |     r4 = r5 >> 0xb;
    0x00001ac2 movs r0, r0                                       |     
    0x00001ac4 lsrs r4, r0, 6                                    |     r4 = r0 >> 6;
    0x00001ac6 movs r0, r0                                       |     
    0x00001ac8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00001acc movs r3, 4                                        |     r3 = 4;
    0x00001ace sub sp, 0x7c                                      |     
    0x00001ad0 mov r7, r2                                        |     r7 = r2;
    0x00001ad2 mov r4, r0                                        |     r4 = r0;
    0x00001ad4 mov r5, r1                                        |     r5 = r1;
    0x00001ad6 ldr r2, [pc, 0x11c]                               |     
    0x00001ad8 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00001ada ldr r3, [pc, 0x11c]                               |     r3 = *(0x1bfa);
    0x00001adc add r2, pc                                        |     r2 = 0x36d6;
    0x00001ade ldr r6, [pc, 0x11c]                               |     
    0x00001ae0 ldr.w r8, [pc, 0x11c]                             |     
    0x00001ae4 ldr r3, [r2, r3]                                  |     
    0x00001ae6 add r6, pc                                        |     r6 = 0x36e8;
    0x00001ae8 add r8, pc                                        |     r8 = 0x36ec;
    0x00001aea ldr r3, [r3]                                      |     r3 = *(0x36d6);
    0x00001aec str r3, [sp, 0x74]                                |     var_74h = r3;
    0x00001aee mov.w r3, 0                                       |     r3 = 0;
    0x00001af2 b 0x1af8                                          |     
                                                                 |     while (r3 != r0) {
    0x00001af4 cmp r0, 0x70                                      |         
                                                                 |         if (r0 == 0x70) {
    0x00001af6 beq 0x1b38                                        |             goto label_32;
                                                                 |         }
                                                                 | label_5:
    0x00001af8 mov r2, r8                                        |         r2 = r8;
    0x00001afa mov r1, r5                                        |         r1 = r5;
    0x00001afc mov r0, r4                                        |         r0 = r4;
    0x00001afe blx 0xd30                                         |         r0 = getopt (r0, r1, r2);
    0x00001b02 adds r3, r0, 1                                    |         r3 = r0 + 1;
    0x00001b04 bne 0x1af4                                        |         
                                                                 |     }
    0x00001b06 ldr r3, [pc, 0xfc]                                |     
    0x00001b08 ldr r3, [r6, r3]                                  |     r3 = *((r6 + r3));
    0x00001b0a str r3, [sp, 0xc]                                 |     var_ch_2 = r3;
    0x00001b0c ldr r3, [r3]                                      |     r3 = *(0x1c06);
    0x00001b0e add.w fp, r3, 1                                   |     
    0x00001b12 cmp fp, r4                                        |     
                                                                 |     if (fp >= r4) {
    0x00001b14 bge 0x1bc4                                        |         goto label_33;
                                                                 |     }
    0x00001b16 ldr.w r8, [r5, r3, lsl 2]                         |     offset_0 = r3 << 2;
                                                                 |     r8 = *((r5 + offset_0));
    0x00001b1a mov r0, r8                                        |     r0 = r8;
    0x00001b1c blx 0xd24                                         |     r0 = strlen (r0);
    0x00001b20 cmp r0, 0x10                                      |     
    0x00001b22 beq 0x1b4a                                        |     
                                                                 |     while (r0 == 0) {
                                                                 | label_6:
    0x00001b24 ldr r1, [pc, 0xe0]                                |         
    0x00001b26 movs r3, 0x10                                     |         r3 = 0x10;
    0x00001b28 mov r2, r8                                        |         r2 = r8;
    0x00001b2a movs r0, 1                                        |         r0 = 1;
    0x00001b2c add r1, pc                                        |         r1 = 0x3738;
    0x00001b2e blx 0xd7c                                         |         fcn_00000d7c ();
    0x00001b32 movs r0, 1                                        |         r0 = 1;
    0x00001b34 blx 0xd00                                         |         exit (r0);
                                                                 | label_32:
    0x00001b38 ldr r3, [pc, 0xd0]                                |         r3 = *(0x1c0c);
    0x00001b3a movs r2, 0xa                                      |         r2 = 0xa;
    0x00001b3c movs r1, 0                                        |         r1 = 0;
    0x00001b3e ldr r3, [r6, r3]                                  |         r3 = *((r6 + r3));
    0x00001b40 ldr r0, [r3]                                      |         r0 = *(0x1c0c);
    0x00001b42 blx 0xc04                                         |         strtol (r0, r1, r2);
    0x00001b46 str r0, [sp, 8]                                   |         var_8h = r0;
    0x00001b48 b 0x1af8                                          |         goto label_5;
    0x00001b4a ldr.w sb, [pc, 0xc4]                              |         
    0x00001b4e movs r7, 0                                        |         r7 = 0;
    0x00001b50 add.w sl, r8, 1                                   |         sl = r8 + 1;
    0x00001b54 add sb, pc                                        |         sb = 0x376a;
                                                                 | label_7:
    0x00001b56 ldrb.w r1, [r8, r7]                               |         r1 = *((r8 + r7));
    0x00001b5a movs r2, 0x10                                     |         r2 = 0x10;
    0x00001b5c mov r0, sb                                        |         r0 = sb;
    0x00001b5e blx 0xd94                                         |         r0 = fcn_00000d94 ();
    0x00001b62 mov r6, r0                                        |         r6 = r0;
    0x00001b64 cmp r0, 0                                         |         
    0x00001b66 beq 0x1b24                                        |         
                                                                 |     }
    0x00001b68 ldrb.w r1, [sl, r7]                               |     r1 = *((sl + r7));
    0x00001b6c movs r2, 0x10                                     |     r2 = 0x10;
    0x00001b6e mov r0, sb                                        |     r0 = sb;
    0x00001b70 blx 0xd94                                         |     r0 = fcn_00000d94 ();
    0x00001b74 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00001b76 beq 0x1b24                                        |         goto label_6;
                                                                 |     }
    0x00001b78 add r3, sp, 0x78                                  |     r3 += var_78h;
    0x00001b7a sub.w r6, r6, sb                                  |     r6 -= sb;
    0x00001b7e add.w r3, r3, r7, lsr 1                           |     r3 += (r7 >> 1);
    0x00001b82 sub.w r0, r0, sb                                  |     r0 -= sb;
    0x00001b86 adds r7, 2                                        |     r7 += 2;
    0x00001b88 add.w r0, r0, r6, lsl 4                           |     r0 += (r6 << 4);
    0x00001b8c cmp r7, 0x10                                      |     
    0x00001b8e strb r0, [r3, -0x53]                              |     var_53h = r0;
                                                                 |     if (r7 != 0x10) {
    0x00001b92 bne 0x1b56                                        |         goto label_7;
                                                                 |     }
    0x00001b94 mov r2, fp                                        |     r2 = fp;
    0x00001b96 mov r1, r5                                        |     r1 = r5;
    0x00001b98 mov r0, r4                                        |     r0 = r4;
    0x00001b9a bl 0x109c                                         |     fcn_0000109c (r0, r1, r2);
    0x00001b9e ldr r3, [sp, 0xc]                                 |     r3 = var_ch_2;
    0x00001ba0 movs r2, 0x11                                     |     r2 = 0x11;
    0x00001ba2 add r0, sp, 0x14                                  |     r0 += var_14h_2;
    0x00001ba4 ldr r6, [r3]                                      |     r6 = *(r3);
    0x00001ba6 ldr.w r1, [r5, r6, lsl 2]                         |     offset_1 = r6 << 2;
                                                                 |     r1 = *((r5 + offset_1));
    0x00001baa adds r6, 1                                        |     r6++;
    0x00001bac blx 0xca0                                         |     strcpy_chk ();
    0x00001bb0 add r0, sp, 0x10                                  |     r0 += var_10h_2;
    0x00001bb2 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x00001bb4 mov r3, r5                                        |     r3 = r5;
    0x00001bb6 mov r2, r4                                        |     r2 = r4;
    0x00001bb8 str r6, [sp]                                      |     *(sp) = r6;
    0x00001bba bl 0x18e8                                         |     fcn_000018e8 (r0, r1, r2, r3, r4, r5, r6);
    0x00001bbe movs r0, 0                                        |     r0 = 0;
    0x00001bc0 blx 0xd00                                         |     exit (r0);
                                                                 | label_33:
    0x00001bc4 ldr r3, [pc, 0x4c]                                |     r3 = *(0x1c14);
    0x00001bc6 movs r2, 0x1f                                     |     r2 = 0x1f;
    0x00001bc8 ldr r0, [pc, 0x4c]                                |     
    0x00001bca movs r1, 1                                        |     r1 = 1;
    0x00001bcc ldr r4, [r6, r3]                                  |     r4 = *((r6 + r3));
    0x00001bce add r0, pc                                        |     r0 = 0x37ea;
    0x00001bd0 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00001bd2 blx 0xc7c                                         |     fwrite (r0, r1, r2, r3);
    0x00001bd6 ldr r0, [pc, 0x44]                                |     
    0x00001bd8 movs r2, 9                                        |     r2 = 9;
    0x00001bda ldr r3, [r4]                                      |     r3 = *(r4);
    0x00001bdc movs r1, 1                                        |     r1 = 1;
    0x00001bde add r0, pc                                        |     r0 = 0x3800;
    0x00001be0 blx 0xc7c                                         |     fwrite (r0, r1, r2, r3);
    0x00001be4 ldr r1, [r4]                                      |     r1 = *(r4);
    0x00001be6 ldr r0, [r7, 0xc]                                 |     r0 = *((r7 + 0xc));
    0x00001be8 blx 0xe00                                         |     fcn_00000e00 ();
    0x00001bec movs r0, 1                                        |     r0 = 1;
    0x00001bee blx 0xd00                                         |     exit (r0);
    0x00001bf2 nop                                               |     
    0x00001bf4 asrs r0, r4, 0x10                                 |     r0 = r4 >> 0x10;
    0x00001bf6 movs r1, r0                                       |     r1 = r0;
    0x00001bf8 lsls r4, r3, 3                                    |     r4 = r3 << 3;
    0x00001bfa movs r0, r0                                       |     
    0x00001bfc asrs r6, r2, 0x10                                 |     r6 = r2 >> 0x10;
    0x00001bfe movs r1, r0                                       |     r1 = r0;
    0x00001c00 lsrs r4, r1, 0xa                                  |     r4 = r1 >> 0xa;
    0x00001c02 movs r0, r0                                       |     
    0x00001c04 lsls r0, r4, 3                                    |     r0 = r4 << 3;
    0x00001c06 movs r0, r0                                       |     
    0x00001c08 lsrs r4, r1, 9                                    |     r4 = r1 >> 9;
    0x00001c0a movs r0, r0                                       |     
    0x00001c0c lsls r4, r7, 3                                    |     r4 = r7 << 3;
    0x00001c0e movs r0, r0                                       |     
    0x00001c10 lsrs r4, r4, 3                                    |     r4 >>= 3;
    0x00001c12 movs r0, r0                                       |     
    0x00001c14 lsls r4, r4, 3                                    |     r4 <<= 3;
    0x00001c16 movs r0, r0                                       |     
    0x00001c18 lsls r6, r7, 0x1c                                 |     r6 = r7 << 0x1c;
    0x00001c1a movs r0, r0                                       |     
    0x00001c1c lsls r6, r1, 0x1d                                 |     r6 = r1 << 0x1d;
    0x00001c1e movs r0, r0                                       |     
    0x00001c20 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00001c24 movs r3, 4                                        |     r3 = 4;
    0x00001c26 sub sp, 0x14c                                     |     
    0x00001c28 mov sb, r2                                        |     sb = r2;
    0x00001c2a mov r5, r0                                        |     r5 = r0;
    0x00001c2c mov r6, r1                                        |     r6 = r1;
    0x00001c2e ldr.w r2, [pc, 0x500]                             |     r2 = *(0x00002130);
    0x00001c32 movs r7, 0                                        |     r7 = 0;
    0x00001c34 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00001c36 ldr.w r3, [pc, 0x4fc]                             |     
    0x00001c3a ldr.w r4, [pc, 0x4fc]                             |     
    0x00001c3e add r2, pc                                        |     r2 += pc;
    0x00001c40 ldr.w fp, [pc, 0x4f8]                             |     fp = *(0x0000213c);
    0x00001c44 ldr.w sl, [pc, 0x4f8]                             |     sl = *(0x00002140);
    0x00001c48 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00001c4a add r4, pc                                        |     r4 = 0x3d88;
    0x00001c4c ldr.w r8, [pc, 0x4f4]                             |     r8 = *(0x00002144);
    0x00001c50 add fp, pc                                        |     
    0x00001c52 add sl, pc                                        |     sl += pc;
    0x00001c54 ldr r3, [r3]                                      |     r3 = *(0x2136);
    0x00001c56 str r3, [sp, 0x144]                               |     var_144h = r3;
    0x00001c58 mov.w r3, 0                                       |     r3 = 0;
    0x00001c5c str r7, [sp, 0xc]                                 |     var_ch_3 = r7;
    0x00001c5e add r8, pc                                        |     r8 += pc;
                                                                 | label_8:
    0x00001c60 mov r1, r6                                        |     r1 = r6;
    0x00001c62 mov r2, r4                                        |     r2 = r4;
    0x00001c64 mov r0, r5                                        |     r0 = r5;
    0x00001c66 blx 0xd30                                         |     r0 = getopt (r0, r1, r2);
    0x00001c6a adds r1, r0, 1                                    |     r1 = r0 + 1;
                                                                 |     if (r1 == r0) {
    0x00001c6c beq 0x1ce4                                        |         goto label_34;
                                                                 |     }
                                                                 |     do {
    0x00001c6e sub.w r3, r0, 0x53                                |         r3 = r0 - 0x53;
    0x00001c72 cmp r3, 0x23                                      |         
                                                                 |         if (r3 <= 0x23) {
    0x00001c74 bhi 0x1c9e                                        |             
                                                                 |             /* switch table (36 cases) at 0x1c7a */
    0x00001c76 tbb [pc, r3]                                      |             __asm ("tbb [0x00001c7c]");
                                                                 |         }
    0x00001c9e cmp r0, 0x3f                                      |         
                                                                 |         if (r0 != 0x3f) {
    0x00001ca0 bne 0x1d60                                        |             goto label_35;
                                                                 |         }
    0x00001ca2 ldr.w r3, [pc, 0x4a4]                             |         r3 = *(0x214a);
    0x00001ca6 ldr.w r4, [r8, r3]                                |         r4 = *((r8 + r3));
                                                                 | label_9:
    0x00001caa ldr.w r0, [pc, 0x4a0]                             |         
    0x00001cae movs r2, 9                                        |         r2 = 9;
    0x00001cb0 ldr r3, [r4]                                      |         r3 = *(r4);
    0x00001cb2 movs r1, 1                                        |         r1 = 1;
    0x00001cb4 add r0, pc                                        |         r0 = 0x3e06;
    0x00001cb6 blx 0xc7c                                         |         fwrite (r0, r1, r2, r3);
    0x00001cba ldr r1, [r4]                                      |         r1 = *(r4);
    0x00001cbc ldr.w r0, [sb, 0xc]                               |         r0 = *((sb + 0xc));
    0x00001cc0 blx 0xe00                                         |         fcn_00000e00 ();
    0x00001cc4 movs r0, 1                                        |         r0 = 1;
    0x00001cc6 blx 0xd00                                         |         exit (r0);
    0x00001cca ldr.w r3, [sl]                                    |         r3 = *(sl);
    0x00001cce mov r1, r6                                        |         r1 = r6;
    0x00001cd0 mov r2, r4                                        |         r2 = r4;
    0x00001cd2 mov r0, r5                                        |         r0 = r5;
    0x00001cd4 orr r3, r3, 1                                     |         r3 |= 1;
    0x00001cd8 str.w r3, [sl]                                    |         __asm ("str.w r3, [sl]");
    0x00001cdc blx 0xd30                                         |         r0 = getopt (r0, r1, r2);
    0x00001ce0 adds r1, r0, 1                                    |         r1 = r0 + 1;
    0x00001ce2 bne 0x1c6e                                        |         
                                                                 |     } while (r1 != r0);
                                                                 | label_34:
    0x00001ce4 ldr.w r3, [pc, 0x468]                             |     r3 = *(0x00002150);
    0x00001ce8 add r3, pc                                        |     r3 += pc;
    0x00001cea ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00001cec cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00001cee beq.w 0x1ec0                                      |         goto label_36;
                                                                 |     }
                                                                 | label_11:
    0x00001cf2 ldr.w r3, [pc, 0x460]                             |     r3 = *(0x2156);
    0x00001cf6 mov r1, r6                                        |     r1 = r6;
    0x00001cf8 mov r0, r5                                        |     r0 = r5;
    0x00001cfa ldr.w r3, [r8, r3]                                |     r3 = *((r8 + r3));
    0x00001cfe ldr r2, [r3]                                      |     r2 = *(0x2156);
    0x00001d00 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00001d02 bl 0x109c                                         |     fcn_0000109c (r0, r1, r2);
    0x00001d06 ldr r3, [sp, 0xc]                                 |     r3 = var_ch_3;
    0x00001d08 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00001d0a bne 0x1d86                                        |         goto label_37;
                                                                 |     }
    0x00001d0c ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00001d0e ldr r4, [r3]                                      |     r4 = *(r3);
    0x00001d10 b 0x1d82                                          |     goto label_38;
    0x00001d12 ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x00001d16 orr r3, r3, 2                                     |     r3 |= 2;
    0x00001d1a str.w r3, [fp]                                    |     __asm ("str.w r3, [fp]");
    0x00001d1e b 0x1c60                                          |     goto label_8;
    0x00001d20 ldr.w r3, [pc, 0x434]                             |     r3 = *(0x2158);
    0x00001d24 movs r2, 0xa                                      |     r2 = 0xa;
    0x00001d26 movs r1, 0                                        |     r1 = 0;
    0x00001d28 ldr.w r3, [r8, r3]                                |     r3 = *((r8 + r3));
    0x00001d2c ldr r0, [r3]                                      |     r0 = *(0x2158);
    0x00001d2e blx 0xc04                                         |     strtol (r0, r1, r2);
    0x00001d32 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x00001d34 b 0x1c60                                          |     goto label_8;
    0x00001d36 ldr.w r3, [pc, 0x420]                             |     r3 = *(0x215a);
    0x00001d3a ldr.w r3, [r8, r3]                                |     r3 = *((r8 + r3));
    0x00001d3e ldr r7, [r3]                                      |     r7 = *(0x215a);
    0x00001d40 b 0x1c60                                          |     goto label_8;
    0x00001d42 ldr r3, [sp, 0xc]                                 |     r3 = var_ch_3;
    0x00001d44 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00001d46 bne.w 0x20ce                                      |         goto label_39;
                                                                 |     }
    0x00001d4a ldr.w r3, [pc, 0x40c]                             |     r3 = *(0x215a);
    0x00001d4e ldr r1, [sp, 0xc]                                 |     r1 = var_ch_3;
    0x00001d50 ldr.w r3, [r8, r3]                                |     r3 = *((r8 + r3));
    0x00001d54 ldr r0, [r3]                                      |     r0 = *(0x215a);
    0x00001d56 bl 0x146c                                         |     fcn_0000146c (r0, r1);
    0x00001d5a movs r3, 1                                        |     r3 = 1;
    0x00001d5c str r3, [sp, 0xc]                                 |     var_ch_3 = r3;
    0x00001d5e b 0x1c60                                          |     goto label_8;
                                                                 | label_35:
    0x00001d60 ldr r1, [pc, 0x3e4]                               |     r1 = *(0x2148);
    0x00001d62 mov r3, r0                                        |     r3 = r0;
    0x00001d64 ldr r2, [pc, 0x3f4]                               |     
    0x00001d66 ldr.w r4, [r8, r1]                                |     r4 = *((r8 + r1));
    0x00001d6a movs r1, 1                                        |     r1 = 1;
    0x00001d6c add r2, pc                                        |     r2 = 0x3ecc;
    0x00001d6e ldr r0, [r4]                                      |     r0 = *(r4);
    0x00001d70 blx 0xd88                                         |     fcn_00000d88 ();
    0x00001d74 b 0x1caa                                          |     goto label_9;
                                                                 |     do {
    0x00001d76 ldr.w r0, [r6, r4, lsl 2]                         |         offset_2 = r4 << 2;
                                                                 |         r0 = *((r6 + offset_2));
    0x00001d7a movs r1, 2                                        |         r1 = 2;
    0x00001d7c adds r4, 1                                        |         r4++;
    0x00001d7e bl 0x146c                                         |         fcn_0000146c (r0, r1);
                                                                 | label_38:
    0x00001d82 cmp r4, r5                                        |         
    0x00001d84 blt 0x1d76                                        |         
                                                                 |     } while (r4 < r5);
                                                                 | label_37:
    0x00001d86 ldr r1, [pc, 0x3d8]                               |     
    0x00001d88 movs r0, 1                                        |     r0 = 1;
    0x00001d8a add r1, pc                                        |     r1 = 0x3ef0;
    0x00001d8c blx 0xd7c                                         |     fcn_00000d7c ();
    0x00001d90 add r3, sp, 0x7c                                  |     r3 += var_7ch;
    0x00001d92 movs r0, 0                                        |     r0 = 0;
    0x00001d94 mov r1, r3                                        |     r1 = r3;
    0x00001d96 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00001d98 blx 0xe24                                         |     r0 = fcn_00000e24 ();
    0x00001d9c mov lr, r0                                        |     lr = r0;
    0x00001d9e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00001da0 beq.w 0x1f34                                      |         goto label_40;
                                                                 |     }
    0x00001da4 add.w sb, sp, 0x40                                |     sb += var_40h;
                                                                 | label_12:
    0x00001da8 ldr r3, [pc, 0x3b8]                               |     r3 = *(0x2164);
    0x00001daa mov.w r1, 0x400                                   |     r1 = 0x400;
    0x00001dae ldr.w r3, [r8, r3]                                |     r3 = *((r8 + r3));
    0x00001db2 ldr.w r8, [pc, 0x3b4]                             |     r8 = *(0x00002168);
    0x00001db6 ldr r2, [r3]                                      |     r2 = *(0x2164);
    0x00001db8 add r8, pc                                        |     r8 += pc;
    0x00001dba add.w sl, r8, 0x10                                |     sl = r8 + 0x10;
    0x00001dbe mov r0, sl                                        |     r0 = sl;
    0x00001dc0 blx 0xc1c                                         |     fgets (r0, r1, r2);
    0x00001dc4 movs r1, 0                                        |     r1 = 0;
    0x00001dc6 mov r4, r0                                        |     r4 = r0;
    0x00001dc8 mov r2, sb                                        |     r2 = sb;
    0x00001dca mov r0, r1                                        |     r0 = r1;
    0x00001dcc blx 0xc94                                         |     tcsetattr ();
    0x00001dd0 movs r0, 0xa                                      |     r0 = 0xa;
    0x00001dd2 blx 0xd64                                         |     fcn_00000d64 ();
    0x00001dd6 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00001dd8 beq.w 0x20dc                                      |         goto label_41;
                                                                 |     }
    0x00001ddc mov r0, sl                                        |     r0 = sl;
    0x00001dde movs r1, 0xa                                      |     r1 = 0xa;
    0x00001de0 blx 0xdb8                                         |     r0 = fcn_00000db8 ();
    0x00001de4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00001de6 beq.w 0x20d6                                      |         goto label_42;
                                                                 |     }
                                                                 | label_20:
    0x00001dea ldr r3, [pc, 0x380]                               |     
    0x00001dec movs r2, 0                                        |     r2 = 0;
    0x00001dee strb r2, [r0]                                     |     *(r0) = r2;
    0x00001df0 add r3, pc                                        |     r3 = 0x3f62;
    0x00001df2 ldrd r1, r0, [r3, 4]                              |     __asm ("ldrd r1, r0, [r3, 4]");
    0x00001df6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00001df8 beq.w 0x1fd8                                      |         goto label_43;
                                                                 |     }
    0x00001dfc adds r3, 0x10                                     |     r3 += 0x10;
    0x00001dfe ldr.w r8, [pc, 0x370]                             |     
    0x00001e02 str r3, [sp, 0x1c]                                |     var_1ch_2 = r3;
    0x00001e04 add r3, sp, 0xc4                                  |     r3 += var_c4h;
    0x00001e06 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00001e08 add r3, sp, 0x104                                 |     r3 += var_104h;
    0x00001e0a add r8, pc                                        |     r8 = 0x3f80;
    0x00001e0c add.w r4, r1, 0x1d                                |     r4 = r1 + 0x1d;
    0x00001e10 add.w fp, r1, 0x15                                |     
    0x00001e14 mov sl, r3                                        |     sl = r3;
    0x00001e16 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00001e18 strd r5, r6, [sp, 0x30]                           |     __asm ("strd r5, r6, [var_30h]");
                                                                 | label_14:
    0x00001e1c mov r3, r4                                        |     r3 = r4;
    0x00001e1e ldr r0, [sp, 0x1c]                                |     r0 = var_1ch_2;
    0x00001e20 sub.w r1, fp, 0x15                                |     r1 = fp - 0x15;
    0x00001e24 movw r2, 0xffff                                   |     r2 = 0xffff;
    0x00001e28 bl 0x1760                                         |     fcn_00001760 (r0, r1, r2, r3, r4, r5, r6);
    0x00001e2c ldr r5, [sp, 0x20]                                |     r5 = var_20h;
    0x00001e2e movs r1, 0x40                                     |     r1 = 0x40;
    0x00001e30 mov r0, r4                                        |     r0 = r4;
    0x00001e32 mov r6, fp                                        |     r6 = fp;
    0x00001e34 mov r2, r5                                        |     r2 = r5;
    0x00001e36 blx 0xddc                                         |     fcn_00000ddc ();
    0x00001e3a mov r0, r5                                        |     r0 = r5;
    0x00001e3c movs r1, 0x40                                     |     r1 = 0x40;
    0x00001e3e mov r2, sl                                        |     r2 = sl;
    0x00001e40 blx 0xddc                                         |     fcn_00000ddc ();
    0x00001e44 mov r3, sl                                        |     r3 = sl;
    0x00001e46 ldm r3!, {r0, r1}                                 |     r0 = *(r3!);
                                                                 |     r1 = *((r3! + 4));
    0x00001e48 sub.w r3, fp, 0x11                                |     r3 = fp - 0x11;
    0x00001e4c mov r5, r3                                        |     r5 = r3;
    0x00001e4e str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00001e50 str.w r0, [fp]                                    |     __asm ("str.w r0, [fp]");
    0x00001e54 str.w r1, [fp, 4]                                 |     __asm ("str.w r1, [arg_4h]");
                                                                 |     do {
    0x00001e58 ldrb r2, [r6], 1                                  |         r2 = *(r6);
                                                                 |         r6++;
    0x00001e5c mov r0, r5                                        |         r0 = r5;
    0x00001e5e mov r3, r8                                        |         r3 = r8;
    0x00001e60 movs r1, 1                                        |         r1 = 1;
    0x00001e62 adds r5, 2                                        |         r5 += 2;
    0x00001e64 str r2, [sp]                                      |         *(sp) = r2;
    0x00001e66 mov.w r2, -1                                      |         r2 = -1;
    0x00001e6a blx 0xd48                                         |         sprintf_chk ()
    0x00001e6e cmp r6, r4                                        |         
    0x00001e70 bne 0x1e58                                        |         
                                                                 |     } while (r6 != r4);
    0x00001e72 movs r5, 0                                        |     r5 = 0;
    0x00001e74 mvn sb, 2                                         |     sb = ~2;
    0x00001e78 strb r5, [fp, -0x1]                               |     *((fp - 0x1)) = r5;
    0x00001e7c cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00001e7e beq.w 0x1f84                                      |         goto label_16;
                                                                 |     }
    0x00001e82 ldr r6, [pc, 0x2f0]                               |     
    0x00001e84 add r6, pc                                        |     r6 = 0x3ffe;
                                                                 |     do {
    0x00001e86 mov r1, r6                                        |         r1 = r6;
    0x00001e88 mov r0, r7                                        |         r0 = r7;
    0x00001e8a blx 0xbe0                                         |         r0 = strcmp (r0, r1);
    0x00001e8e cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00001e90 beq 0x1f70                                        |             goto label_44;
                                                                 |         }
    0x00001e92 adds r5, 1                                        |         r5++;
    0x00001e94 adds r6, 0xc                                      |         r6 += 0xc;
    0x00001e96 cmp r5, 6                                         |         
    0x00001e98 bne 0x1e86                                        |         
                                                                 |     } while (r5 != 6);
    0x00001e9a add r6, sp, 0x3c                                  |     r6 += endptr;
    0x00001e9c movs r2, 0xa                                      |     r2 = 0xa;
    0x00001e9e mov r1, r6                                        |     r1 = r6;
    0x00001ea0 mov r0, r7                                        |     r0 = r7;
    0x00001ea2 blx 0xd18                                         |     strtoul (r0, r1, r2);
    0x00001ea6 ldr r3, [r6]                                      |     r3 = *(r6);
    0x00001ea8 mov sb, r0                                        |     sb = r0;
    0x00001eaa ldrb r3, [r3]                                     |     r3 = *(r3);
    0x00001eac cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00001eae beq.w 0x2078                                      |         goto label_45;
                                                                 |     }
                                                                 | label_13:
    0x00001eb2 ldr r1, [pc, 0x2c4]                               |     
    0x00001eb4 add r1, pc                                        |     r1 = 0x4032;
                                                                 | label_22:
    0x00001eb6 mov r2, r7                                        |     r2 = r7;
    0x00001eb8 movs r0, 1                                        |     r0 = 1;
    0x00001eba blx 0xd7c                                         |     fcn_00000d7c ();
    0x00001ebe b 0x1f2e                                          |     goto label_21;
                                                                 | label_36:
    0x00001ec0 ldr r1, [pc, 0x2b8]                               |     
    0x00001ec2 ldr r0, [pc, 0x2bc]                               |     
    0x00001ec4 ldr.w sb, [pc, 0x2bc]                             |     
    0x00001ec8 add r1, pc                                        |     r1 = 0x4048;
    0x00001eca add r0, pc                                        |     r0 = 0x4050;
    0x00001ecc blx 0xdf4                                         |     fcn_00000df4 ();
    0x00001ed0 add sb, pc                                        |     sb = 0x4058;
    0x00001ed2 mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r4 == 0) {
                                                                 |         do {
                                                                 | label_10:
    0x00001ed4 cbz r4, 0x1f08                                    |             goto label_46;
                                                                 |         }
    0x00001ed6 mov r0, r4                                        |         r0 = r4;
    0x00001ed8 blx 0xcac                                         |         r0 = getmntent ();
    0x00001edc mov sl, r0                                        |         sl = r0;
                                                                 |         if (r0 == 0) {
    0x00001ede cbz r0, 0x1f08                                    |             goto label_46;
                                                                 |         }
    0x00001ee0 ldr.w r0, [sl, 8]                                 |         r0 = *((sl + 8));
    0x00001ee4 mov r1, sb                                        |         r1 = sb;
    0x00001ee6 blx 0xbe0                                         |         r0 = strcmp (r0, r1);
    0x00001eea cmp r0, 0                                         |         
    0x00001eec bne 0x1ed4                                        |         
                                                                 |     } while (r0 != 0);
    0x00001eee ldr.w r0, [sl, 4]                                 |     r0 = *((sl + 4));
    0x00001ef2 movs r1, 4                                        |     r1 = 4;
    0x00001ef4 blx 0xda0                                         |     r0 = fcn_00000da0 ();
    0x00001ef8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00001efa bne 0x1ed4                                        |         goto label_10;
                                                                 |     }
    0x00001efc ldr.w r0, [sl, 4]                                 |     r0 = *((sl + 4));
    0x00001f00 movs r1, 1                                        |     r1 = 1;
    0x00001f02 bl 0x146c                                         |     fcn_0000146c (r0, r1);
    0x00001f06 b 0x1ed4                                          |     goto label_10;
                                                                 | label_46:
    0x00001f08 mov r0, r4                                        |     r0 = r4;
    0x00001f0a blx 0xdac                                         |     fcn_00000dac ();
    0x00001f0e ldr r3, [pc, 0x278]                               |     
    0x00001f10 add r3, pc                                        |     
    0x00001f12 ldr r3, [r3, 8]                                   |     r3 = *(0x40a6);
    0x00001f14 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00001f16 bne.w 0x1cf2                                      |         goto label_11;
                                                                 |     }
    0x00001f1a ldr r0, [pc, 0x270]                               |     
    0x00001f1c ldr r3, [pc, 0x228]                               |     r3 = *(0x2148);
    0x00001f1e add r0, pc                                        |     r0 = 0x40b0;
                                                                 | label_19:
    0x00001f20 ldr.w r3, [r8, r3]                                |     r3 = *((r8 + r3));
    0x00001f24 movs r2, 0x19                                     |     r2 = 0x19;
    0x00001f26 movs r1, 1                                        |     r1 = 1;
    0x00001f28 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00001f2a blx 0xc7c                                         |     fwrite (r0, r1, r2, r3);
                                                                 | label_21:
    0x00001f2e movs r0, 1                                        |     r0 = 1;
    0x00001f30 blx 0xd00                                         |     exit (r0);
                                                                 | label_40:
    0x00001f34 ldr.w fp, [sp, 0x24]                              |     fp = var_24h;
    0x00001f38 add.w sb, sp, 0x40                                |     sb += var_40h;
    0x00001f3c ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x00001f3e mov r4, sb                                        |     r4 = sb;
    0x00001f40 mov ip, fp                                        |     
    0x00001f42 bic sl, r3, 8                                     |     sl = BIT_MASK (r3, 8);
    0x00001f46 ldm.w ip!, {r0, r1, r2, r3}                       |     r0 = *(ip!);
                                                                 |     r1 = *((ip! + 4));
                                                                 |     r2 = *((ip! + 8));
                                                                 |     r3 = *((ip! + 12));
    0x00001f4a stm r4!, {r0, r1, r2, r3}                         |     *(r4!) = r0;
                                                                 |     *((r4! + 4)) = r1;
                                                                 |     *((r4! + 8)) = r2;
                                                                 |     *((r4! + 12)) = r3;
    0x00001f4c ldm.w ip!, {r0, r1, r2, r3}                       |     r0 = *(ip!);
                                                                 |     r1 = *((ip! + 4));
                                                                 |     r2 = *((ip! + 8));
                                                                 |     r3 = *((ip! + 12));
    0x00001f50 stm r4!, {r0, r1, r2, r3}                         |     *(r4!) = r0;
                                                                 |     *((r4! + 4)) = r1;
                                                                 |     *((r4! + 8)) = r2;
                                                                 |     *((r4! + 12)) = r3;
    0x00001f52 ldm.w ip!, {r0, r1, r2, r3}                       |     r0 = *(ip!);
                                                                 |     r1 = *((ip! + 4));
                                                                 |     r2 = *((ip! + 8));
                                                                 |     r3 = *((ip! + 12));
    0x00001f56 stm r4!, {r0, r1, r2, r3}                         |     *(r4!) = r0;
                                                                 |     *((r4! + 4)) = r1;
                                                                 |     *((r4! + 8)) = r2;
                                                                 |     *((r4! + 12)) = r3;
    0x00001f58 ldm.w ip, {r0, r1, r2}                            |     r0 = *(ip);
                                                                 |     r1 = *((ip + 4));
                                                                 |     r2 = *((ip + 8));
    0x00001f5c stm.w r4, {r0, r1, r2}                            |     *(r4) = r0;
                                                                 |     *((r4 + 4)) = r1;
                                                                 |     *((r4 + 8)) = r2;
    0x00001f60 mov r2, fp                                        |     r2 = fp;
    0x00001f62 mov r1, lr                                        |     r1 = lr;
    0x00001f64 mov r0, lr                                        |     r0 = lr;
    0x00001f66 str.w sl, [sp, 0x88]                              |     __asm ("str.w sl, [var_88h]");
    0x00001f6a blx 0xc94                                         |     tcsetattr ();
    0x00001f6e b 0x1da8                                          |     goto label_12;
                                                                 | label_44:
    0x00001f70 ldr r3, [pc, 0x21c]                               |     
    0x00001f72 movs r2, 0xc                                      |     r2 = 0xc;
    0x00001f74 add r3, pc                                        |     r3 = 0x4108;
    0x00001f76 mla r3, r2, r5, r3                                |     __asm ("mla r3, r2, r5, r3");
    0x00001f7a ldr.w sb, [r3, 8]                                 |     sb = *(0x4110);
    0x00001f7e cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00001f82 beq 0x1eb2                                        |         goto label_13;
                                                                 |     }
                                                                 | label_16:
    0x00001f84 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00001f86 movs r2, 0x16                                     |     r2 = 0x16;
    0x00001f88 movs r1, 1                                        |     r1 = 1;
    0x00001f8a mov r0, sl                                        |     r0 = sl;
    0x00001f8c str r3, [sp, 4]                                   |     var_4h = r3;
    0x00001f8e ldr r3, [pc, 0x204]                               |     
    0x00001f90 add r3, pc                                        |     r3 = 0x412a;
    0x00001f92 str r3, [sp]                                      |     *(sp) = r3;
    0x00001f94 ldr r3, [pc, 0x200]                               |     
    0x00001f96 add r3, pc                                        |     r3 = 0x4132;
    0x00001f98 blx 0xd48                                         |     sprintf_chk ()
    0x00001f9c ldr r2, [pc, 0x1fc]                               |     
    0x00001f9e movs r3, 0                                        |     r3 = 0;
    0x00001fa0 str r3, [sp]                                      |     *(sp) = r3;
    0x00001fa2 mov r1, sb                                        |     r1 = sb;
    0x00001fa4 mov r3, sl                                        |     r3 = sl;
    0x00001fa6 movs r0, 0xa                                      |     r0 = 0xa;
    0x00001fa8 add r2, pc                                        |     r2 = 0x4148;
    0x00001faa bl 0x1178                                         |     fcn_00001178 (r0);
    0x00001fae adds r0, 1                                        |     r0++;
                                                                 |     if (r0 == 1) {
    0x00001fb0 beq 0x2002                                        |         goto label_47;
                                                                 |     }
    0x00001fb2 ldr r3, [pc, 0x1ec]                               |     
    0x00001fb4 add r3, pc                                        |     
    0x00001fb6 ldr r3, [r3]                                      |     r3 = *(0x415a);
    0x00001fb8 lsls r2, r3, 0x1e                                 |     r2 = r3 << 0x1e;
                                                                 |     if (r2 >= r3) {
    0x00001fba bpl 0x20bc                                        |         goto label_48;
                                                                 |     }
                                                                 | label_15:
    0x00001fbc ldr r3, [pc, 0x1e4]                               |     
    0x00001fbe adds r4, 0x64                                     |     r4 += 0x64;
    0x00001fc0 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00001fc2 add.w fp, fp, 0x64                                |     
    0x00001fc6 add r3, pc                                        |     
    0x00001fc8 ldr r3, [r3, 8]                                   |     r3 = *(0x4176);
    0x00001fca adds r2, 1                                        |     r2++;
    0x00001fcc str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00001fce cmp r3, r2                                        |     
                                                                 |     if (r3 > r2) {
    0x00001fd0 bhi.w 0x1e1c                                      |         goto label_14;
                                                                 |     }
    0x00001fd4 ldrd r5, r6, [sp, 0x30]                           |     __asm ("ldrd r5, r6, [var_30h]");
                                                                 | label_43:
    0x00001fd8 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00001fda ldr r4, [r3]                                      |     r4 = *(r3);
    0x00001fdc cmp r4, r5                                        |     
                                                                 |     if (r4 != r5) {
    0x00001fde beq 0x1ff8                                        |         
    0x00001fe0 ldr r3, [sp, 0xc]                                 |         r3 = var_ch_3;
    0x00001fe2 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00001fe4 beq 0x20ca                                        |             goto label_49;
                                                                 |         }
    0x00001fe6 ldr r3, [pc, 0x1c0]                               |         
    0x00001fe8 add r3, pc                                        |         r3 = 0x4196;
    0x00001fea ldr r0, [r3, 4]                                   |         r0 = *(0x419a);
                                                                 | label_18:
    0x00001fec ldr r1, [sp, 0x10]                                |         r1 = var_10h;
    0x00001fee mov r3, r6                                        |         r3 = r6;
    0x00001ff0 mov r2, r5                                        |         r2 = r5;
    0x00001ff2 str r4, [sp]                                      |         *(sp) = r4;
    0x00001ff4 bl 0x18e8                                         |         r0 = fcn_000018e8 (r0, r1, r2, r3, r4, r5, r6);
                                                                 |     }
    0x00001ff8 bl 0x1710                                         |     fcn_00001710 ();
    0x00001ffc movs r0, 0                                        |     r0 = 0;
    0x00001ffe blx 0xd00                                         |     r0 = exit (r0);
                                                                 | label_47:
    0x00002002 blx 0xd3c                                         |     errno_location ();
    0x00002006 str r0, [sp, 0x28]                                |     var_28h = r0;
    0x00002008 ldr r0, [r0]                                      |     r0 = *(r0);
    0x0000200a cmp r0, 0x7e                                      |     
                                                                 |     if (r0 != 0x7e) {
    0x0000200c bne 0x2106                                        |         goto label_50;
                                                                 |     }
    0x0000200e add.w r5, fp, 8                                   |     r5 += arg_8h;
    0x00002012 add.w ip, sp, 0x80                                |     
    0x00002016 add.w lr, fp, 0x48                                |     lr += arg_48h;
    0x0000201a movs r3, 1                                        |     r3 = 1;
    0x0000201c str r3, [sp, 0x7c]                                |     var_7ch = r3;
                                                                 |     do {
    0x0000201e ldr r0, [r5]                                      |         r0 = *(r5);
    0x00002020 adds r5, 0x10                                     |         r5 += 0x10;
    0x00002022 ldr r1, [r5, -0xc]                                |         r1 = *((r5 - 0xc));
    0x00002026 mov r6, ip                                        |         r6 = ip;
    0x00002028 ldr r2, [r5, -0x8]                                |         r2 = *((r5 - 0x8));
    0x0000202c ldr r3, [r5, -0x4]                                |         r3 = *((r5 - 0x4));
    0x00002030 cmp r5, lr                                        |         
    0x00002032 stm r6!, {r0, r1, r2, r3}                         |         *(r6!) = r0;
                                                                 |         *((r6! + 4)) = r1;
                                                                 |         *((r6! + 8)) = r2;
                                                                 |         *((r6! + 12)) = r3;
    0x00002034 mov ip, r6                                        |         
    0x00002036 bne 0x201e                                        |         
                                                                 |     } while (r5 != lr);
    0x00002038 cmn.w sb, 3                                       |     
    0x0000203c mov.w r3, 0x40                                    |     r3 = 0x40;
    0x00002040 str r3, [sp, 0xc0]                                |     var_c0h = r3;
                                                                 |     if (sb == 3) {
    0x00002042 beq 0x2092                                        |         goto label_51;
                                                                 |     }
                                                                 | label_17:
    0x00002044 ldr r1, [pc, 0x164]                               |     
    0x00002046 movs r3, 0x48                                     |     r3 = 0x48;
    0x00002048 str r3, [sp]                                      |     *(sp) = r3;
    0x0000204a mov r2, sl                                        |     r2 = sl;
    0x0000204c ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0000204e movw r0, 0x135                                    |     r0 = 0x135;
    0x00002052 add r1, pc                                        |     r1 = 0x4202;
    0x00002054 str.w sb, [sp, 4]                                 |     __asm ("str.w sb, [var_4h]");
    0x00002058 blx 0xd0c                                         |     syscall ();
    0x0000205c adds r0, 1                                        |     r0++;
                                                                 |     if (r0 == 1) {
    0x0000205e beq 0x20ea                                        |         goto label_52;
                                                                 |     }
    0x00002060 ldr r3, [pc, 0x14c]                               |     
    0x00002062 add r3, pc                                        |     
    0x00002064 ldr r3, [r3]                                      |     r3 = *(0x4216);
    0x00002066 lsls r3, r3, 0x1e                                 |     r3 <<= 0x1e;
                                                                 |     if (r3 < r3) {
    0x00002068 bmi 0x1fbc                                        |         goto label_15;
                                                                 |     }
    0x0000206a ldr r1, [pc, 0x148]                               |     
    0x0000206c movs r0, 1                                        |     r0 = 1;
    0x0000206e ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00002070 add r1, pc                                        |     r1 = 0x422a;
    0x00002072 blx 0xd7c                                         |     fcn_00000d7c ();
    0x00002076 b 0x1fbc                                          |     goto label_15;
                                                                 | label_45:
    0x00002078 mov r0, r5                                        |     r0 = r5;
    0x0000207a mov r2, r3                                        |     r2 = r3;
    0x0000207c mov r1, sb                                        |     r1 = sb;
    0x0000207e bl 0x1178                                         |     r0 = fcn_00001178 (r0);
    0x00002082 cmp r0, 0                                         |     
                                                                 |     if (r0 < 0) {
    0x00002084 blt.w 0x1eb2                                      |         goto label_13;
                                                                 |     }
    0x00002088 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x0000208c bne.w 0x1f84                                      |         goto label_16;
                                                                 |     }
    0x00002090 b 0x1eb2                                          |     goto label_13;
                                                                 | label_51:
    0x00002092 movs r2, 0                                        |     r2 = 0;
    0x00002094 mov r1, sb                                        |     r1 = sb;
    0x00002096 mov r0, r2                                        |     r0 = r2;
    0x00002098 bl 0x1178                                         |     r0 = fcn_00001178 (r0);
    0x0000209c subs.w sb, r0, 0                                  |     sb = r0 - 0;
                                                                 |     if (sb >= r0) {
    0x000020a0 bge 0x2044                                        |         goto label_17;
                                                                 |     }
    0x000020a2 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000020a4 ldr r0, [r3]                                      |     r0 = *(r3);
    0x000020a6 blx 0xcd0                                         |     strerror (r0);
    0x000020aa ldr r1, [pc, 0x10c]                               |     
    0x000020ac mov r2, r0                                        |     r2 = r0;
    0x000020ae movs r0, 1                                        |     r0 = 1;
    0x000020b0 add r1, pc                                        |     r1 = 0x426e;
    0x000020b2 blx 0xd7c                                         |     fcn_00000d7c ();
    0x000020b6 movs r0, 1                                        |     r0 = 1;
    0x000020b8 blx 0xd00                                         |     exit (r0);
                                                                 | label_48:
    0x000020bc ldr r1, [pc, 0xfc]                                |     
    0x000020be movs r0, 1                                        |     r0 = 1;
    0x000020c0 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x000020c2 add r1, pc                                        |     r1 = 0x4282;
    0x000020c4 blx 0xd7c                                         |     fcn_00000d7c ();
    0x000020c8 b 0x1fbc                                          |     goto label_15;
                                                                 | label_49:
    0x000020ca ldr r0, [sp, 0xc]                                 |     r0 = var_ch_3;
    0x000020cc b 0x1fec                                          |     goto label_18;
                                                                 | label_39:
    0x000020ce ldr r0, [pc, 0xf0]                                |     
    0x000020d0 ldr r3, [pc, 0x74]                                |     r3 = *(0x2148);
    0x000020d2 add r0, pc                                        |     r0 = 0x4298;
    0x000020d4 b 0x1f20                                          |     goto label_19;
                                                                 | label_42:
    0x000020d6 addw r0, r8, 0x40f                                |     __asm ("addw r0, r8, 0x40f");
    0x000020da b 0x1dea                                          |     goto label_20;
                                                                 | label_41:
    0x000020dc ldr r0, [pc, 0xe4]                                |     
    0x000020de add r0, pc                                        |     r0 = 0x42a6;
    0x000020e0 blx 0xcb8                                         |     puts (r0);
    0x000020e4 movs r0, 1                                        |     r0 = 1;
    0x000020e6 blx 0xd00                                         |     exit (r0);
                                                                 | label_52:
    0x000020ea ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000020ec ldr r0, [r3]                                      |     r0 = *(r3);
    0x000020ee cmp r0, 0x7a                                      |     
                                                                 |     if (r0 == 0x7a) {
    0x000020f0 beq 0x2126                                        |         goto label_53;
                                                                 |     }
    0x000020f2 blx 0xcd0                                         |     strerror (r0);
    0x000020f6 ldr r1, [pc, 0xd0]                                |     
    0x000020f8 mov r3, r0                                        |     r3 = r0;
    0x000020fa ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x000020fc movs r0, 1                                        |     r0 = 1;
    0x000020fe add r1, pc                                        |     r1 = 0x42cc;
    0x00002100 blx 0xd7c                                         |     fcn_00000d7c ();
    0x00002104 b 0x1f2e                                          |     goto label_21;
                                                                 | label_50:
    0x00002106 blx 0xcd0                                         |     strerror (r0);
    0x0000210a ldr r1, [pc, 0xc0]                                |     
    0x0000210c mov r2, r0                                        |     r2 = r0;
    0x0000210e movs r0, 1                                        |     r0 = 1;
    0x00002110 add r1, pc                                        |     r1 = 0x42e2;
    0x00002112 blx 0xd7c                                         |     fcn_00000d7c ();
    0x00002116 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00002118 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0000211a cmp r3, 0x16                                      |     
                                                                 |     if (r3 != 0x16) {
    0x0000211c bne.w 0x1f2e                                      |         goto label_21;
                                                                 |     }
    0x00002120 ldr r1, [pc, 0xac]                                |     
    0x00002122 add r1, pc                                        |     r1 = 0x42f6;
    0x00002124 b 0x1eb6                                          |     goto label_22;
                                                                 | label_53:
    0x00002126 ldr r0, [pc, 0xac]                                |     
    0x00002128 add r0, pc                                        |     r0 = 0x4302;
    0x0000212a blx 0xcb8                                         |     puts (r0);
    0x0000212e b 0x1f2e                                          |     goto label_21;
                                                                 | }

[*] Function sprintf used 3 times e4crypt