[*] Binary protection state of suexec

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


[*] Function printf tear down of suexec

    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/suexec @ 0x15d0 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.000015d0 ()                  | void fcn_000015d0 (int16_t arg_ch, int16_t arg_10h, int16_t arg_14h, int16_t arg_18h, int16_t arg_1ch, int16_t arg_20h, int16_t arg_24h, void * arg_28h, int16_t arg_2ch, void * buf, int16_t arg_10e0h) {
                                             |     int16_t var_97h;
                                             |     int16_t var_0h;
                                             |     int16_t var_4h;
                                             | label_6:
    0x00001114 movs r1, 1                    |     r1 = 1;
    0x00001116 ldr r0, [r4]                  |     r0 = *(r4);
    0x00001118 add r2, pc                    |     r2 += pc;
    0x0000111a blx 0xe9c                     |     fprintf_chk ()
    0x0000111e ldr.w r3, [pc, 0x448]         |     
    0x00001122 movs r1, 1                    |     r1 = 1;
    0x00001124 ldr.w r2, [pc, 0x444]         |     
    0x00001128 ldr r0, [r4]                  |     r0 = *(r4);
    0x0000112a add r3, pc                    |     r3 = 0x2698;
    0x0000112c add r2, pc                    |     r2 = 0x269c;
    0x0000112e blx 0xe9c                     |     fprintf_chk ()
    0x00001132 ldr.w r2, [pc, 0x43c]         |     
    0x00001136 movs r3, 0xa6                 |     r3 = 0xa6;
    0x00001138 movs r1, 1                    |     r1 = 1;
    0x0000113a ldr r0, [r4]                  |     r0 = *(r4);
    0x0000113c add r2, pc                    |     r2 = 0x26b2;
    0x0000113e blx 0xe9c                     |     fprintf_chk ()
    0x00001142 ldr.w r2, [pc, 0x430]         |     
    0x00001146 movs r3, 0x69                 |     r3 = 0x69;
    0x00001148 ldr r0, [r4]                  |     r0 = *(r4);
    0x0000114a movs r1, 1                    |     r1 = 1;
    0x0000114c add r2, pc                    |     r2 = 0x26c6;
    0x0000114e blx 0xe9c                     |     fprintf_chk ()
    0x00001152 movs r0, 0                    |     r0 = 0;
    0x00001154 blx 0xe6c                     |     exit (r0);
    0x00001158 movs r0, 0x66                 |     r0 = 0x66;
    0x0000115a blx 0xe6c                     |     exit (r0);
    0x0000115e ldrb r3, [r6]                 |     r3 = *(r6);
    0x00001160 ldr.w r1, [pc, 0x414]         |     
    0x00001164 cmp r3, 0x7e                  |     
    0x00001166 itt eq                        |     
                                             |     if (r3 != 0x7e) {
    0x00001168 addeq r6, 1                   |         r6++;
                                             |     }
                                             |     if (r3 != 0x7e) {
    0x0000116a moveq r3, 1                   |         r3 = 1;
                                             |     }
    0x0000116c add r1, pc                    |     r1 = 0x26e8;
    0x0000116e mov r0, r6                    |     r0 = r6;
    0x00001170 ite eq                        |     
                                             |     if (r3 != 0x7e) {
    0x00001172 streq r3, [sp, 0xc]           |         *(arg_ch) = r3;
                                             |     }
                                             |     if (r3 == 0x7e) {
    0x00001174 strne r5, [sp, 0xc]           |         *(arg_ch) = r5;
                                             |     }
    0x00001176 blx 0xefc                     |     r0 = strspn (r0, r1);
    0x0000117a mov r8, r0                    |     r8 = r0;
    0x0000117c mov r0, r6                    |     r0 = r6;
    0x0000117e blx 0xe78                     |     r0 = strlen (r0);
    0x00001182 cmp r8, r0                    |     
    0x00001184 mov r0, r6                    |     r0 = r6;
                                             |     if (r8 == r0) {
    0x00001186 beq 0x1202                    |         goto label_7;
                                             |     }
    0x00001188 blx 0xdac                     |     r0 = getpwnam ();
    0x0000118c mov r6, r0                    |     r6 = r0;
    0x0000118e cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00001190 beq 0x1248                    |         goto label_8;
                                             |     }
                                             |     do {
    0x00001192 ldr r1, [pc, 0x3e8]           |         
    0x00001194 mov r0, r7                    |         r0 = r7;
    0x00001196 add r1, pc                    |         r1 = 0x2718;
    0x00001198 blx 0xefc                     |         r0 = strspn (r0, r1);
    0x0000119c mov r8, r0                    |         r8 = r0;
    0x0000119e mov r0, r7                    |         r0 = r7;
    0x000011a0 blx 0xe78                     |         r0 = strlen (r0);
    0x000011a4 cmp r8, r0                    |         
    0x000011a6 mov r0, r7                    |         r0 = r7;
                                             |         if (r8 == r0) {
    0x000011a8 beq 0x121a                    |             goto label_9;
                                             |         }
    0x000011aa blx 0xee4                     |         r0 = getgrnam ();
    0x000011ae mov r3, r0                    |         r3 = r0;
    0x000011b0 cmp r0, 0                     |         
                                             |         if (r0 == 0) {
    0x000011b2 beq 0x122c                    |             goto label_10;
                                             |         }
                                             | label_0:
    0x000011b4 ldr r0, [r3]                  |         r0 = *(r3);
    0x000011b6 ldr r7, [r3, 8]               |         r7 = *((r3 + 8));
    0x000011b8 blx 0xe0c                     |         r0 = strdup (r0);
    0x000011bc cmp r0, 0                     |         
                                             |         if (r0 == 0) {
    0x000011be beq 0x1242                    |             goto label_11;
                                             |         }
    0x000011c0 ldr r0, [r6]                  |         r0 = *(r6);
    0x000011c2 ldr.w fp, [r6, 8]             |         fp = *((r6 + 8));
    0x000011c6 blx 0xe0c                     |         r0 = strdup (r0);
    0x000011ca mov sl, r0                    |         sl = r0;
    0x000011cc ldr r0, [r6, 0x14]            |         r0 = *((r6 + 0x14));
    0x000011ce blx 0xe0c                     |         strdup (r0);
    0x000011d2 str r0, [sp, 0x14]            |         *(arg_14h) = r0;
    0x000011d4 cmp.w sl, 0                   |         
                                             |         if (sl == 0) {
    0x000011d8 beq.w 0x1380                  |             goto label_12;
                                             |         }
    0x000011dc clz r8, r0                    |         r8 &= r0;
    0x000011e0 lsr.w r8, r8, 5               |         r8 >>= 5;
    0x000011e4 cmp r0, 0                     |         
                                             |         if (r0 == 0) {
    0x000011e6 beq.w 0x1380                  |             goto label_12;
                                             |         }
    0x000011ea sub.w r3, fp, 0x97            |         r3 = fp - 0x97;
    0x000011ee cmp r3, 0xf                   |         
                                             |         if (r3 > 0xf) {
    0x000011f0 bhi.w 0x137a                  |             goto label_13;
                                             |         }
    0x000011f4 sub.w r3, r7, 0x65            |         r3 = r7 - 0x65;
    0x000011f8 cmp r3, 4                     |         
                                             |         if (r3 < 4) {
    0x000011fa bls 0x1232                    |             goto label_14;
                                             |         }
    0x000011fc movs r0, 0x6c                 |         r0 = 0x6c;
    0x000011fe blx 0xe6c                     |         exit (r0);
                                             | label_7:
    0x00001202 movs r2, 0xa                  |         r2 = 0xa;
    0x00001204 movs r1, 0                    |         r1 = 0;
    0x00001206 blx 0xddc                     |         r0 = strtol (r0, r1, r2);
    0x0000120a blx 0xdf4                     |         r0 = getpwuid ();
    0x0000120e mov r6, r0                    |         r6 = r0;
    0x00001210 cmp r0, 0                     |         
    0x00001212 bne 0x1192                    |         
                                             |     } while (r0 != 0);
                                             | label_3:
    0x00001214 movs r0, 0x79                 |     r0 = 0x79;
    0x00001216 blx 0xe6c                     |     exit (r0);
                                             | label_9:
    0x0000121a movs r2, 0xa                  |     r2 = 0xa;
    0x0000121c movs r1, 0                    |     r1 = 0;
    0x0000121e blx 0xddc                     |     r0 = strtol (r0, r1, r2);
    0x00001222 blx 0xed8                     |     r0 = getgrgid ();
    0x00001226 mov r3, r0                    |     r3 = r0;
    0x00001228 cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x0000122a bne 0x11b4                    |         goto label_0;
                                             |     }
                                             | label_10:
    0x0000122c movs r0, 0x6a                 |     r0 = 0x6a;
    0x0000122e blx 0xe6c                     |     exit (r0);
                                             | label_14:
    0x00001232 mov r0, r4                    |     r0 = r4;
    0x00001234 blx 0xde8                     |     r0 = basename (r0);
    0x00001238 cmp r4, r0                    |     
                                             |     if (r4 != r0) {
    0x0000123a beq 0x124e                    |         
    0x0000123c movs r0, 0x7f                 |         r0 = 0x7f;
    0x0000123e blx 0xe6c                     |         exit (r0);
                                             | label_11:
    0x00001242 movs r0, 0x7d                 |         r0 = 0x7d;
    0x00001244 blx 0xe6c                     |         exit (r0);
                                             | label_8:
    0x00001248 movs r0, 0x69                 |         r0 = 0x69;
    0x0000124a blx 0xe6c                     |         exit (r0);
                                             |     }
    0x0000124e ldr r3, [sp, 0x24]            |     r3 = *(arg_24h);
    0x00001250 mov.w r1, 0x1000              |     r1 = 0x1000;
    0x00001254 sub.w sb, r3, 4               |     sb = r3 - 4;
    0x00001258 mov r0, sb                    |     r0 = sb;
    0x0000125a blx 0xe60                     |     r0 = getcwd ();
    0x0000125e cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00001260 beq 0x12f0                    |         goto label_15;
                                             |     }
    0x00001262 ldr r3, [pc, 0x31c]           |     
    0x00001264 mov r2, r8                    |     r2 = r8;
    0x00001266 str r5, [sp, 0x10]            |     *(arg_10h) = r5;
    0x00001268 mov r8, r7                    |     r8 = r7;
    0x0000126a mov r5, r4                    |     r5 = r4;
    0x0000126c mov r7, r2                    |     r7 = r2;
    0x0000126e add r3, pc                    |     
    0x00001270 add.w r3, r3, 0x1a8           |     r3 = 0x299c;
    0x00001274 mov r4, r3                    |     r4 = r3;
    0x00001276 b 0x1296                      |     
                                             |     while (r6 != 0) {
    0x00001278 mov r0, r6                    |         r0 = r6;
    0x0000127a blx 0xde8                     |         r0 = basename (r0);
    0x0000127e mov r1, r0                    |         r1 = r0;
    0x00001280 mov r0, r5                    |         r0 = r5;
    0x00001282 blx 0xdc4                     |         r0 = strcmp (r0, r1);
                                             |         if (r0 == 0) {
    0x00001286 cbnz r0, 0x1292               |             
    0x00001288 ldr r1, [r4]                  |             r1 = *(r4);
    0x0000128a mov r0, sb                    |             r0 = sb;
    0x0000128c blx 0xdc4                     |             r0 = strcmp (r0, r1);
                                             |             if (r0 == 0) {
    0x00001290 cbz r0, 0x12f6                |                 goto label_16;
                                             |             }
                                             |         }
    0x00001292 adds r7, 1                    |         r7++;
    0x00001294 adds r4, 0x18                 |         r4 += 0x18;
    0x00001296 ldr r6, [r4, 4]               |         r6 = *((r4 + 4));
    0x00001298 cmp r6, 0                     |         
    0x0000129a bne 0x1278                    |         
                                             |     }
    0x0000129c mov r4, r5                    |     r4 = r5;
    0x0000129e mov r1, r6                    |     r1 = r6;
    0x000012a0 mov r0, r4                    |     r0 = r4;
    0x000012a2 ldr r5, [sp, 0x10]            |     r5 = *(arg_10h);
    0x000012a4 mov r7, r8                    |     r7 = r8;
    0x000012a6 blx 0xecc                     |     r0 = realpath ();
    0x000012aa cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x000012ac beq 0x1386                    |         goto label_17;
                                             |     }
    0x000012ae ldr.w ip, [pc, 0x2d4]         |     ip = *(0x00001584);
    0x000012b2 movs r2, 0x14                 |     r2 = 0x14;
    0x000012b4 str.w sb, [sp, 0x10]          |     __asm ("str.w sb, [arg_10h]");
    0x000012b8 add ip, pc                    |     
    0x000012ba add.w r1, ip, 0x250           |     r1 = ip + 0x250;
    0x000012be mov sb, ip                    |     sb = ip;
    0x000012c0 strd r1, r5, [sp, 0x18]       |     __asm ("strd r1, r5, [sp, 0x18]");
    0x000012c4 mov r5, r0                    |     r5 = r0;
    0x000012c6 b 0x12da                      |     
                                             |     while (r1 != 0) {
    0x000012c8 mov r0, r5                    |         r0 = r5;
    0x000012ca str r1, [sp, 0x2c]            |         *(arg_2ch) = r1;
    0x000012cc blx 0xdc4                     |         strcmp (r0, r1);
    0x000012d0 ldr r1, [sp, 0x2c]            |         r1 = *(arg_2ch);
    0x000012d2 movs r2, 0x14                 |         r2 = 0x14;
    0x000012d4 cmp r0, 0                     |         
                                             |         if (r0 == 0) {
    0x000012d6 beq 0x138c                    |             goto label_18;
                                             |         }
    0x000012d8 adds r6, 1                    |         r6++;
    0x000012da mul r8, r2, r6                |         r8 = r2 * r6;
    0x000012de ldr r3, [sp, 0x18]            |         r3 = *(arg_18h);
    0x000012e0 ldr.w r1, [r8, r3]            |         r1 = *((r8 + r3));
    0x000012e4 cmp r1, 0                     |         
    0x000012e6 bne 0x12c8                    |         
                                             |     }
    0x000012e8 ldr r5, [sp, 0x1c]            |     r5 = *(arg_1ch);
    0x000012ea ldr.w sb, [sp, 0x10]          |     sb = *(arg_10h);
    0x000012ee b 0x134a                      |     goto label_19;
                                             | label_15:
    0x000012f0 movs r0, 0x6f                 |     r0 = 0x6f;
    0x000012f2 blx 0xe6c                     |     exit (r0);
                                             | label_16:
    0x000012f6 movs r1, 0x10                 |     r1 = 0x10;
    0x000012f8 movs r0, 1                    |     r0 = 1;
    0x000012fa blx 0xd94                     |     calloc (r0, r1);
    0x000012fe movs r1, 0x10                 |     r1 = 0x10;
    0x00001300 mov r5, r0                    |     r5 = r0;
    0x00001302 movs r0, 1                    |     r0 = 1;
    0x00001304 mov r4, r6                    |     r4 = r6;
    0x00001306 blx 0xd94                     |     r0 = calloc (r0, r1);
    0x0000130a mov r6, r0                    |     r6 = r0;
    0x0000130c mov r0, r5                    |     r0 = r5;
    0x0000130e ldr r5, [pc, 0x278]           |     
    0x00001310 movs r3, 0x18                 |     r3 = 0x18;
    0x00001312 add r5, pc                    |     r5 = 0x28a0;
    0x00001314 mla r5, r3, r7, r5            |     __asm ("mla r5, r3, r7, r5");
    0x00001316 strb r7, [r0, r4]             |     *((r0 + r4)) = r7;
    0x00001318 ldr r7, [pc, 0x270]           |     
    0x0000131a movs r3, 0x10                 |     r3 = 0x10;
    0x0000131c add r7, pc                    |     r7 = 0x28ac;
    0x0000131e mov r1, r3                    |     r1 = r3;
    0x00001320 ldr.w r2, [r5, 0x1b4]         |     r2 = *(0x2a54);
    0x00001324 str r7, [sp]                  |     *(sp) = r7;
    0x00001326 str r2, [sp, 4]               |     var_4h = r2;
    0x00001328 mov fp, r2                    |     
    0x0000132a movs r2, 1                    |     r2 = 1;
    0x0000132c blx 0xef0                     |     snprintf_chk ()
    0x00001330 str r7, [sp]                  |     *(sp) = r7;
    0x00001332 movs r3, 0x10                 |     r3 = 0x10;
    0x00001334 ldr.w r7, [r5, 0x1bc]         |     r7 = *(0x2a5c);
    0x00001338 mov r0, r6                    |     r0 = r6;
    0x0000133a movs r2, 1                    |     r2 = 1;
    0x0000133c mov r1, r3                    |     r1 = r3;
    0x0000133e str r7, [sp, 4]               |     var_4h = r7;
    0x00001340 blx 0xef0                     |     snprintf_chk ()
    0x00001344 ldr.w sl, [r5, 0x1b0]         |     sl = *(0x2a50);
    0x00001348 movs r5, 1                    |     r5 = 1;
                                             |     do {
                                             | label_19:
    0x0000134a mov r0, r7                    |         r0 = r7;
    0x0000134c blx 0xe3c                     |         r0 = setgid ();
                                             |         if (r0 == 0) {
    0x00001350 cbnz r0, 0x135e               |             
    0x00001352 mov r1, r7                    |             r1 = r7;
    0x00001354 mov r0, sl                    |             r0 = sl;
    0x00001356 blx 0xe18                     |             r0 = initgroups ();
    0x0000135a cmp r0, 0                     |             
                                             |             if (r0 == 0) {
    0x0000135c beq 0x13e8                    |                 goto label_20;
                                             |             }
                                             |         }
    0x0000135e blx 0xe90                     |         r0 = errno_location ();
    0x00001362 ldr r0, [r0]                  |         r0 = *(r0);
    0x00001364 blx 0xe48                     |         strerror (r0);
    0x00001368 movs r0, 0x6d                 |         r0 = 0x6d;
    0x0000136a blx 0xe6c                     |         exit (r0);
    0x0000136e movs r0, 0x7c                 |         r0 = 0x7c;
    0x00001370 blx 0xe6c                     |         exit (r0);
    0x00001374 movs r0, 0x7b                 |         r0 = 0x7b;
    0x00001376 blx 0xe6c                     |         exit (r0);
                                             | label_13:
    0x0000137a movs r0, 0x6b                 |         r0 = 0x6b;
    0x0000137c blx 0xe6c                     |         exit (r0);
                                             | label_12:
    0x00001380 movs r0, 0x7e                 |         r0 = 0x7e;
    0x00001382 blx 0xe6c                     |         exit (r0);
                                             | label_17:
    0x00001386 movs r0, 0x80                 |         r0 = 0x80;
    0x00001388 blx 0xe6c                     |         exit (r0);
                                             | label_18:
    0x0000138c mov ip, sb                    |         
    0x0000138e mov r5, r0                    |         r5 = r0;
    0x00001390 mov r4, r1                    |         r4 = r1;
    0x00001392 movs r0, 1                    |         r0 = 1;
    0x00001394 movs r1, 0x10                 |         r1 = 0x10;
    0x00001396 add.w r6, ip, r8              |         r6 = ip + r8;
    0x0000139a ldr.w sb, [sp, 0x10]          |         sb = *(arg_10h);
    0x0000139e blx 0xd94                     |         calloc (r0, r1);
    0x000013a2 movs r1, 0x10                 |         r1 = 0x10;
    0x000013a4 mov r8, r0                    |         r8 = r0;
    0x000013a6 movs r0, 1                    |         r0 = 1;
    0x000013a8 blx 0xd94                     |         calloc (r0, r1);
    0x000013ac ldr.w r3, [r6, 0x258]         |         r3 = *((r6 + 0x258));
    0x000013b0 mov r7, r0                    |         r7 = r0;
    0x000013b2 mov r0, r8                    |         r0 = r8;
    0x000013b4 ldr.w r8, [pc, 0x1d8]         |         
    0x000013b8 movs r2, 1                    |         r2 = 1;
    0x000013ba str r3, [sp, 4]               |         var_4h = r3;
    0x000013bc mov fp, r3                    |         
    0x000013be add r8, pc                    |         r8 = 0x2952;
    0x000013c0 movs r3, 0x10                 |         r3 = 0x10;
    0x000013c2 mov r1, r3                    |         r1 = r3;
    0x000013c4 str.w r8, [sp]                |         __asm ("str.w r8, [sp]");
    0x000013c8 blx 0xef0                     |         snprintf_chk ()
    0x000013cc mov r0, r7                    |         r0 = r7;
    0x000013ce ldr.w r7, [r6, 0x260]         |         r7 = *((r6 + 0x260));
    0x000013d2 movs r3, 0x10                 |         r3 = 0x10;
    0x000013d4 movs r2, 1                    |         r2 = 1;
    0x000013d6 mov r1, r3                    |         r1 = r3;
    0x000013d8 str.w r8, [sp]                |         __asm ("str.w r8, [sp]");
    0x000013dc str r7, [sp, 4]               |         var_4h = r7;
    0x000013de blx 0xef0                     |         snprintf_chk ()
    0x000013e2 ldr.w sl, [r6, 0x254]         |         sl = *((r6 + 0x254));
    0x000013e6 b 0x134a                      |         
                                             |     } while (1);
                                             | label_20:
    0x000013e8 mov r0, fp                    |     r0 = fp;
    0x000013ea blx 0xea8                     |     r0 = setuid ();
                                             |     if (r0 != 0) {
    0x000013ee cbnz r0, 0x144a               |         goto label_21;
                                             |     }
    0x000013f0 ldr r3, [sp, 0xc]             |     r3 = *(arg_ch);
                                             |     if (r3 == 0) {
    0x000013f2 cbz r3, 0x140c                |         goto label_22;
                                             |     }
    0x000013f4 ldr r0, [sp, 0x14]            |     r0 = *(arg_14h);
    0x000013f6 blx 0xe24                     |     r0 = chdir ();
                                             |     if (r0 != 0) {
    0x000013fa cbnz r0, 0x1406               |         goto label_1;
                                             |     }
    0x000013fc ldr r0, [pc, 0x194]           |     
    0x000013fe add r0, pc                    |     r0 = 0x2996;
    0x00001400 blx 0xe24                     |     r0 = chdir ();
    0x00001404 cbz r0, 0x145a                |     
                                             |     while (r0 == 0) {
                                             | label_1:
    0x00001406 movs r0, 0x70                 |         r0 = 0x70;
    0x00001408 blx 0xe6c                     |         exit (r0);
                                             | label_22:
    0x0000140c ldr r0, [pc, 0x188]           |         
    0x0000140e add r0, pc                    |         r0 = 0x29aa;
    0x00001410 blx 0xe24                     |         r0 = chdir ();
    0x00001414 cmp r0, 0                     |         
                                             |         if (r0 != 0) {
    0x00001416 bne 0x149a                    |             goto label_23;
                                             |         }
    0x00001418 add.w r6, sp, 0x10e0          |         r6 += arg_10e0h;
    0x0000141c mov.w r1, 0x1000              |         r1 = 0x1000;
    0x00001420 adds r6, 4                    |         r6 += 4;
    0x00001422 mov r0, r6                    |         r0 = r6;
    0x00001424 blx 0xe60                     |         r0 = getcwd ();
                                             |         if (r0 == 0) {
    0x00001428 cbz r0, 0x149a                |             goto label_23;
                                             |         }
    0x0000142a mov r0, sb                    |         r0 = sb;
    0x0000142c blx 0xe24                     |         r0 = chdir ();
                                             |         if (r0 != 0) {
    0x00001430 cbnz r0, 0x149a               |             goto label_23;
                                             |         }
                                             | label_2:
    0x00001432 mov r0, r6                    |         r0 = r6;
    0x00001434 blx 0xe78                     |         strlen (r0);
    0x00001438 mov r1, r6                    |         r1 = r6;
    0x0000143a mov r2, r0                    |         r2 = r0;
    0x0000143c mov r0, sb                    |         r0 = sb;
    0x0000143e blx 0xeb4                     |         r0 = strncmp (r0, r1, r2);
                                             |         if (r0 == 0) {
    0x00001442 cbz r0, 0x147a                |             goto label_24;
                                             |         }
    0x00001444 movs r0, 0x72                 |         r0 = 0x72;
    0x00001446 blx 0xe6c                     |         r0 = exit (r0);
                                             | label_21:
    0x0000144a blx 0xe90                     |         r0 = errno_location ();
    0x0000144e ldr r0, [r0]                  |         r0 = *(r0);
    0x00001450 blx 0xe48                     |         strerror (r0);
    0x00001454 movs r0, 0x6e                 |         r0 = 0x6e;
    0x00001456 blx 0xe6c                     |         exit (r0);
    0x0000145a add.w r6, sp, 0x10e0          |         r6 += arg_10e0h;
    0x0000145e mov.w r1, 0x1000              |         r1 = 0x1000;
    0x00001462 adds r6, 4                    |         r6 += 4;
    0x00001464 mov r0, r6                    |         r0 = r6;
    0x00001466 blx 0xe60                     |         r0 = getcwd ();
    0x0000146a cmp r0, 0                     |         
    0x0000146c beq 0x1406                    |         
                                             |     }
    0x0000146e mov r0, sb                    |     r0 = sb;
    0x00001470 blx 0xe24                     |     r0 = chdir ();
    0x00001474 cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x00001476 bne 0x1406                    |         goto label_1;
                                             |     }
    0x00001478 b 0x1432                      |     goto label_2;
                                             | label_24:
    0x0000147a mov r0, sb                    |     r0 = sb;
    0x0000147c add r1, sp, 0x30              |     r1 += buf;
    0x0000147e blx 0xe30                     |     r0 = lstat (r0, r1);
                                             |     if (r0 == 0) {
    0x00001482 cbnz r0, 0x1494               |         
    0x00001484 ldr r3, [sp, 0x24]            |         r3 = *(arg_24h);
    0x00001486 ldr r3, [r3, -0xa8]           |         r3 = *((r3 - 0xa8));
    0x0000148a and r2, r3, 0xf000            |         r2 = r3 & 0xf000;
    0x0000148e cmp.w r2, 0x4000              |         
                                             |         if (r2 == sym..data) {
    0x00001492 beq 0x14a0                    |             goto label_25;
                                             |         }
                                             |     }
    0x00001494 movs r0, 0x73                 |     r0 = 0x73;
    0x00001496 blx 0xe6c                     |     exit (r0);
                                             | label_23:
    0x0000149a movs r0, 0x71                 |     r0 = 0x71;
    0x0000149c blx 0xe6c                     |     exit (r0);
                                             | label_25:
    0x000014a0 tst.w r3, 0x12                |     
                                             |     if ((r3 & 0x12) != 0) {
    0x000014a4 beq 0x14ac                    |         
    0x000014a6 movs r0, 0x74                 |         r0 = 0x74;
    0x000014a8 blx 0xe6c                     |         exit (r0);
                                             |     }
    0x000014ac ldr r1, [sp, 0x28]            |     r1 = *(arg_28h);
    0x000014ae mov r0, r4                    |     r0 = r4;
    0x000014b0 blx 0xe30                     |     r0 = lstat (r0, r1);
                                             |     if (r0 != 0) {
    0x000014b4 cbnz r0, 0x14f4               |         goto label_26;
                                             |     }
    0x000014b6 ldr r3, [sp, 0x24]            |     r3 = *(arg_24h);
    0x000014b8 ldr r3, [r3, -0x50]           |     r3 = *((r3 - 0x50));
    0x000014bc and r2, r3, 0xf000            |     r2 = r3 & 0xf000;
                                             |     if (r5 != 0) {
    0x000014c0 cbnz r5, 0x1506               |         goto label_27;
                                             |     }
    0x000014c2 cmp.w r2, 0xa000              |     
                                             |     if (r2 == 0xa000) {
    0x000014c6 beq 0x14f4                    |         goto label_26;
                                             |     }
                                             | label_5:
    0x000014c8 tst.w r3, 0x12                |     
                                             |     if ((r3 & 0x12) != 0) {
    0x000014cc bne 0x1500                    |         goto label_28;
                                             |     }
                                             | label_4:
    0x000014ce tst.w r3, 0xc00               |     
                                             |     if ((r3 & 0xc00) != 0) {
    0x000014d2 bne 0x14fa                    |         goto label_29;
                                             |     }
    0x000014d4 lsls r3, r3, 0x19             |     r3 <<= 0x19;
                                             |     if (r3 >= r3) {
    0x000014d6 bpl.w 0x1214                  |         goto label_3;
                                             |     }
    0x000014da ldr r1, [sp, 0x20]            |     r1 = *(arg_20h);
    0x000014dc mov r0, r4                    |     r0 = r4;
    0x000014de adds r1, 0xc                  |     r1 += 0xc;
    0x000014e0 blx 0xe84                     |     execv ();
    0x000014e4 blx 0xe90                     |     r0 = errno_location ();
    0x000014e8 ldr r0, [r0]                  |     r0 = *(r0);
    0x000014ea blx 0xe48                     |     strerror (r0);
    0x000014ee movs r0, 0xff                 |     r0 = 0xff;
    0x000014f0 blx 0xe6c                     |     exit (r0);
                                             | label_26:
    0x000014f4 movs r0, 0x75                 |     r0 = 0x75;
    0x000014f6 blx 0xe6c                     |     exit (r0);
                                             | label_29:
    0x000014fa movs r0, 0x77                 |     r0 = 0x77;
    0x000014fc blx 0xe6c                     |     exit (r0);
                                             | label_28:
    0x00001500 movs r0, 0x76                 |     r0 = 0x76;
    0x00001502 blx 0xe6c                     |     exit (r0);
                                             | label_27:
    0x00001506 cmp.w r2, 0xa000              |     
                                             |     if (r2 == 0xa000) {
    0x0000150a beq 0x14ce                    |         goto label_4;
                                             |     }
    0x0000150c b 0x14c8                      |     goto label_5;
    0x000015d0 adds r0, 0x14                 |     r0 += 0x14;
    0x000015d2 b 0x1114                      |     goto label_6;
                                             | }

[*] Function printf used 9 times suexec