[*] Binary protection state of sulogin.util-linux

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


[*] Function strcpy tear down of sulogin.util-linux

    ; assembly                                                               | /* r2dec pseudo code output */
                                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/sulogin.util-linux @ 0x2db0 */
                                                                             | #include <stdint.h>
                                                                             |  
                                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                             |  
    ; (fcn) fcn.00002db0 ()                                                  | void fcn_00002db0 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                             |     int16_t var_4h_2;
                                                                             |     int16_t var_8h;
                                                                             |     int16_t var_ah;
                                                                             |     int16_t var_10h;
                                                                             |     int32_t var_10h_2;
                                                                             |     int16_t var_18h;
                                                                             |     int32_t var_18h_2;
                                                                             |     int16_t var_4ch;
                                                                             |     char * s1;
                                                                             |     int8_t var_4h_4;
                                                                             |     int16_t var_ch;
                                                                             |     int16_t var_0h;
                                                                             |     int16_t var_4h;
                                                                             |     int16_t var_84h;
                                                                             |     int16_t var_8ch;
                                                                             |     r0 = arg1;
                                                                             |     r1 = arg2;
                                                                             |     r2 = arg3;
    0x00002db0 push {r4, r5, lr}                                             |     
    0x00002db2 mov r5, r2                                                    |     r5 = r2;
    0x00002db4 ldr r2, [pc, 0x44]                                            |     
    0x00002db6 sub sp, 0x94                                                  |     
    0x00002db8 mov r4, r0                                                    |     r4 = r0;
    0x00002dba add r0, sp, 4                                                 |     r0 += var_4h;
    0x00002dbc ldr r3, [pc, 0x40]                                            |     r3 = *(0x2e00);
    0x00002dbe add r2, pc                                                    |     r2 = 0x5bbe;
    0x00002dc0 ldr r3, [r2, r3]                                              |     
    0x00002dc2 ldr r3, [r3]                                                  |     r3 = *(0x5bbe);
    0x00002dc4 str r3, [sp, 0x8c]                                            |     var_8ch = r3;
    0x00002dc6 mov.w r3, 0                                                   |     r3 = 0;
    0x00002dca str r1, [sp]                                                  |     *(sp) = r1;
    0x00002dcc blx 0x19b4                                                    |     fcn_000019b4 ();
    0x00002dd0 movs r3, 0                                                    |     r3 = 0;
    0x00002dd2 mov r2, r5                                                    |     r2 = r5;
    0x00002dd4 mov r1, sp                                                    |     r1 = sp;
    0x00002dd6 mov r0, r4                                                    |     r0 = r4;
    0x00002dd8 str r3, [sp, 0x84]                                            |     var_84h = r3;
    0x00002dda blx 0x1724                                                    |     fcn_00001724 ();
    0x00002ddc vstmia r4!, {s8, s9, s10, s11, s12, s13, s14, s15, s16}       |     __asm ("vstmia r4!, {s8, s9, s10, s11, s12, s13, s14, s15, s16}");
    0x00002dde ldr r2, [pc, 0x24]                                            |     
    0x00002de0 ldr r3, [pc, 0x1c]                                            |     r3 = *(0x2e00);
    0x00002de2 add r2, pc                                                    |     r2 = 0x5bec;
    0x00002de4 ldr r3, [r2, r3]                                              |     r3 = *(0x5bec);
    0x00002de6 ldr r2, [r3]                                                  |     r2 = *(0x5bec);
    0x00002de8 ldr r3, [sp, 0x8c]                                            |     r3 = var_8ch;
    0x00002dea eors r2, r3                                                   |     r2 ^= r3;
    0x00002dec mov.w r3, 0                                                   |     r3 = 0;
                                                                             |     if (r2 == r3) {
    0x00002df0 bne 0x2df6                                                    |         
    0x00002df2 add sp, 0x94                                                  |         
    0x00002df4 pop {r4, r5, pc}                                              |         
                                                                             |     }
    0x00002df6 blx 0x16ac                                                    |     fcn_000016ac ();
    0x00002dfa nop                                                           |     
    0x00002dfc ands r6, r4                                                   |     r6 &= r4;
    0x00002dfe movs r1, r0                                                   |     r1 = r0;
    0x00002e00 lsls r4, r6, 7                                                |     r4 = r6 << 7;
    0x00002e02 movs r0, r0                                                   |     
    0x00002e04 ands r2, r0                                                   |     r2 &= r0;
    0x00002e06 movs r1, r0                                                   |     r1 = r0;
    0x00002e08 ldr r2, [pc, 0x108]                                           |     
    0x00002e0a ldr r3, [pc, 0x10c]                                           |     r3 = *(0x2f1a);
    0x00002e0c push {r4, r5, r6, lr}                                         |     
    0x00002e0e sub sp, 0x10                                                  |     
    0x00002e10 add r2, pc                                                    |     r2 = 0x5d28;
    0x00002e12 ldrsb.w r4, [r0]                                              |     r4 = *(r0);
    0x00002e16 ldr r3, [r2, r3]                                              |     
    0x00002e18 ldr r3, [r3]                                                  |     r3 = *(0x5d28);
    0x00002e1a str r3, [sp, 0xc]                                             |     var_ch = r3;
    0x00002e1c mov.w r3, 0                                                   |     r3 = 0;
                                                                             |     if (r4 == 0) {
    0x00002e20 cbz r4, 0x2e82                                                |         goto label_3;
                                                                             |     }
    0x00002e22 cmp r4, 0x24                                                  |     
    0x00002e24 mov r5, r0                                                    |     r5 = r0;
                                                                             |     if (r4 != 0x24) {
    0x00002e26 bne 0x2e5e                                                    |         goto label_10;
                                                                             |     }
    0x00002e28 ldrsb.w r3, [r0, 1]                                           |     r3 = *((r0 + 1));
    0x00002e2c adds r2, r0, 1                                                |     r2 = r0 + 1;
    0x00002e2e cmp r3, 0x24                                                  |     
                                                                             |     if (r3 == 0x24) {
    0x00002e30 beq 0x2e86                                                    |         goto label_11;
                                                                             |     }
                                                                             |     if (r3 == 0) {
    0x00002e32 cbz r3, 0x2e40                                                |         goto label_12;
                                                                             |     }
                                                                             |     do {
    0x00002e34 ldrsb r3, [r2, 1]!                                            |         r3 = *((r2 += 1));
    0x00002e38 cmp r3, 0                                                     |         
    0x00002e3a it ne                                                         |         
                                                                             |         if (r3 != 0) {
    0x00002e3c cmpne r3, 0x24                                                |             __asm ("cmpne r3, 0x24");
                                                                             |         }
    0x00002e3e bne 0x2e34                                                    |         
                                                                             |     } while (r3 != 0);
                                                                             | label_12:
    0x00002e40 cmp r3, 0x24                                                  |     
                                                                             |     if (r3 == 0x24) {
    0x00002e42 beq 0x2e86                                                    |         goto label_11;
                                                                             |     }
                                                                             |     do {
                                                                             | label_0:
    0x00002e44 movs r0, 0                                                    |         r0 = 0;
                                                                             | label_2:
    0x00002e46 ldr r2, [pc, 0xd4]                                            |         
    0x00002e48 ldr r3, [pc, 0xcc]                                            |         r3 = *(0x2f18);
    0x00002e4a add r2, pc                                                    |         r2 = 0x5d6c;
    0x00002e4c ldr r3, [r2, r3]                                              |         r3 = *(0x5d6c);
    0x00002e4e ldr r2, [r3]                                                  |         r2 = *(0x5d6c);
    0x00002e50 ldr r3, [sp, 0xc]                                             |         r3 = var_ch;
    0x00002e52 eors r2, r3                                                   |         r2 ^= r3;
    0x00002e54 mov.w r3, 0                                                   |         r3 = 0;
                                                                             |         if (r2 != r3) {
    0x00002e58 bne 0x2f10                                                    |             goto label_13;
                                                                             |         }
    0x00002e5a add sp, 0x10                                                  |         
    0x00002e5c pop {r4, r5, r6, pc}                                          |         
                                                                             | label_10:
    0x00002e5e blx 0x186c                                                    |         r0 = setsid ();
    0x00002e62 cmp r0, 0xd                                                   |         
    0x00002e64 bne 0x2e44                                                    |         
                                                                             |     } while (r0 != 0xd);
                                                                             | label_1:
    0x00002e66 and r3, r4, 0xdf                                              |     r3 = r4 & 0xdf;
    0x00002e6a subs r4, 0x2e                                                 |     r4 -= 0x2e;
    0x00002e6c subs r3, 0x41                                                 |     r3 -= 0x41;
    0x00002e6e and r4, r4, 0xff                                              |     r4 &= 0xff;
    0x00002e72 cmp r3, 0x19                                                  |     
    0x00002e74 it hi                                                         |     
                                                                             |     if (r3 <= 0x19) {
    0x00002e76 cmphi r4, 0xb                                                 |         __asm ("cmphi r4, 0xb");
                                                                             |         goto label_14;
                                                                             |     }
                                                                             |     if (r3 > 0x19) {
                                                                             | label_14:
    0x00002e78 bhi 0x2e44                                                    |         goto label_0;
                                                                             |     }
    0x00002e7a ldrsb r4, [r5, 1]!                                            |     r4 = *((r5 += 1));
    0x00002e7e cmp r4, 0                                                     |     
                                                                             |     if (r4 != 0) {
    0x00002e80 bne 0x2e66                                                    |         goto label_1;
                                                                             |     }
                                                                             | label_3:
    0x00002e82 movs r0, 1                                                    |     r0 = 1;
    0x00002e84 b 0x2e46                                                      |     goto label_2;
                                                                             | label_11:
    0x00002e86 adds r4, r2, 1                                                |     r4 = r2 + 1;
    0x00002e88 subs r2, r4, r5                                               |     r2 = r4 - r5;
    0x00002e8a asrs r3, r2, 0x1f                                             |     r3 = r2 >> 0x1f;
    0x00002e8c subs r1, r2, 3                                                |     r1 = r2 - 3;
    0x00002e8e adc r3, r3, -1                                                |     __asm ("adc r3, r3, -1");
    0x00002e92 cmp r1, 2                                                     |     
    0x00002e94 sbcs r3, r3, 0                                                |     __asm ("sbcs r3, r3, 0");
                                                                             |     if (r1 >= 2) {
    0x00002e98 bhs 0x2e44                                                    |         goto label_0;
                                                                             |     }
    0x00002e9a add r6, sp, 4                                                 |     r6 += s1;
    0x00002e9c movs r3, 0                                                    |     r3 = 0;
    0x00002e9e str r3, [sp, 4]                                               |     s1 = r3;
    0x00002ea0 mov r1, r5                                                    |     r1 = r5;
    0x00002ea2 strb r3, [r6, 4]                                              |     var_4h_4 = r3;
    0x00002ea4 mov r0, r6                                                    |     r0 = r6;
    0x00002ea6 movs r3, 5                                                    |     r3 = 5;
    0x00002ea8 blx 0x1690                                                    |     fcn_00001690 ();
    0x00002eac b 0x2eb2                                                      |     
                                                                             |     while (r3 != 0) {
    0x00002eae cmp r3, 0x24                                                  |         
                                                                             |         if (r3 == 0x24) {
    0x00002eb0 beq 0x2ebe                                                    |             goto label_15;
                                                                             |         }
    0x00002eb2 ldrsb r3, [r4], 1                                             |         r3 = *(r4);
                                                                             |         r4++;
    0x00002eb6 cmp r3, 0                                                     |         
    0x00002eb8 bne 0x2eae                                                    |         
                                                                             |     }
    0x00002eba cmp r3, 0x24                                                  |     
                                                                             |     if (r3 != 0x24) {
    0x00002ebc bne 0x2e44                                                    |         goto label_0;
                                                                             |     }
                                                                             | label_15:
    0x00002ebe subs r5, r4, r5                                               |     r5 = r4 - r5;
    0x00002ec0 cmp r5, 0x10                                                  |     
                                                                             |     if (r5 > 0x10) {
    0x00002ec2 bgt 0x2e44                                                    |         goto label_0;
                                                                             |     }
    0x00002ec4 mov r0, r4                                                    |     r0 = r4;
    0x00002ec6 blx 0x186c                                                    |     setsid ();
    0x00002eca ldr r1, [pc, 0x54]                                            |     
    0x00002ecc mov r4, r0                                                    |     r4 = r0;
    0x00002ece mov r0, r6                                                    |     r0 = r6;
    0x00002ed0 add r1, pc                                                    |     r1 = 0x5df6;
    0x00002ed2 blx 0x1590                                                    |     r0 = strcmp (r0, r1);
                                                                             |     if (r0 != 0) {
    0x00002ed6 cbnz r0, 0x2ee0                                               |         goto label_16;
                                                                             |     }
    0x00002ed8 sub.w r3, r4, 0x16                                            |     r3 = r4 - 0x16;
    0x00002edc cmp r3, 2                                                     |     
                                                                             |     if (r3 > 2) {
    0x00002ede bhi 0x2e44                                                    |         goto label_0;
                                                                             |     }
                                                                             | label_16:
    0x00002ee0 ldr r1, [pc, 0x40]                                            |     
    0x00002ee2 mov r0, r6                                                    |     r0 = r6;
    0x00002ee4 add r1, pc                                                    |     r1 = 0x5e0c;
    0x00002ee6 blx 0x1590                                                    |     r0 = strcmp (r0, r1);
                                                                             |     if (r0 != 0) {
    0x00002eea cbnz r0, 0x2ef4                                               |         goto label_17;
                                                                             |     }
    0x00002eec sub.w r3, r4, 0x2a                                            |     r3 = r4 - 0x2a;
    0x00002ef0 cmp r3, 2                                                     |     
                                                                             |     if (r3 > 2) {
    0x00002ef2 bhi 0x2e44                                                    |         goto label_0;
                                                                             |     }
                                                                             | label_17:
    0x00002ef4 ldr r1, [pc, 0x30]                                            |     
    0x00002ef6 mov r0, r6                                                    |     r0 = r6;
    0x00002ef8 add r1, pc                                                    |     r1 = 0x5e24;
    0x00002efa blx 0x1590                                                    |     r0 = strcmp (r0, r1);
    0x00002efe cmp r0, 0                                                     |     
                                                                             |     if (r0 != 0) {
    0x00002f00 bne 0x2e82                                                    |         goto label_3;
                                                                             |     }
    0x00002f02 sub.w r0, r4, 0x55                                            |     r0 = r4 - 0x55;
    0x00002f06 cmp r0, 2                                                     |     
    0x00002f08 ite hi                                                        |     
                                                                             |     if (r0 <= 2) {
    0x00002f0a movhi r0, 0                                                   |         r0 = 0;
                                                                             |     }
                                                                             |     if (r0 > 2) {
    0x00002f0c movls r0, 1                                                   |         r0 = 1;
                                                                             |     }
    0x00002f0e b 0x2e46                                                      |     goto label_2;
                                                                             | label_13:
    0x00002f10 blx 0x16ac                                                    |     fcn_000016ac ();
    0x00002f14 subs r7, 0xd4                                                 |     r7 -= 0xd4;
    0x00002f16 movs r1, r0                                                   |     r1 = r0;
    0x00002f18 lsls r4, r6, 7                                                |     r4 = r6 << 7;
    0x00002f1a movs r0, r0                                                   |     
    0x00002f1c subs r7, 0x9a                                                 |     r7 -= 0x9a;
    0x00002f1e movs r1, r0                                                   |     r1 = r0;
    0x00002f20 adds r3, 0x60                                                 |     r3 += 0x60;
    0x00002f22 movs r0, r0                                                   |     
    0x00002f24 adds r3, 0x50                                                 |     r3 += 0x50;
    0x00002f26 movs r0, r0                                                   |     
    0x00002f28 adds r3, 0x40                                                 |     r3 += 0x40;
    0x00002f2a movs r0, r0                                                   |     
    0x00002f2c ldr r1, [pc, 0x290]                                           |     
    0x00002f2e movs r3, 0                                                    |     r3 = 0;
    0x00002f30 ldr r2, [pc, 0x290]                                           |     r2 = *(0x31c4);
    0x00002f32 push.w {r4, r5, r6, r7, r8, sb, lr}                           |     
    0x00002f36 mov r7, r0                                                    |     r7 = r0;
    0x00002f38 add r1, pc                                                    |     r1 = 0x60fc;
    0x00002f3a sub sp, 0x54                                                  |     
    0x00002f3c movs r0, 0x50                                                 |     r0 = 0x50;
    0x00002f3e add.w r8, r7, 0x34                                            |     r8 = r7 + 0x34;
    0x00002f42 ldr r2, [r1, r2]                                              |     
    0x00002f44 ldr r6, [r7, 0x14]                                            |     r6 = *((r7 + 0x14));
    0x00002f46 ldr r2, [r2]                                                  |     r2 = *(0x60fc);
    0x00002f48 str r2, [sp, 0x4c]                                            |     var_4ch = r2;
    0x00002f4a mov.w r2, 0                                                   |     r2 = 0;
    0x00002f4e str r3, [sp, 4]                                               |     var_4h_2 = r3;
    0x00002f50 bl 0x446c                                                     |     r0 = fcn_0000446c ();
    0x00002f54 cmp r0, 0                                                     |     
                                                                             |     if (r0 != 0) {
    0x00002f56 bne.w 0x30ae                                                  |         goto label_18;
                                                                             |     }
    0x00002f58 strh r2, [r5, 4]                                              |     *((r5 + 4)) = r2;
    0x00002f5a add r5, sp, 0x10                                              |     r5 += var_10h;
                                                                             | label_4:
    0x00002f5c movs r1, 0                                                    |     r1 = 0;
    0x00002f5e movs r2, 0x3c                                                 |     r2 = 0x3c;
    0x00002f60 mov r0, r5                                                    |     r0 = r5;
    0x00002f62 mov sb, r1                                                    |     sb = r1;
    0x00002f64 blx 0x1900                                                    |     fcn_00001900 ();
    0x00002f68 mov r2, r5                                                    |     r2 = r5;
    0x00002f6a movw r1, 0x5457                                               |     r1 = 0x5457;
    0x00002f6e mov r0, r6                                                    |     r0 = r6;
    0x00002f70 blx 0x173c                                                    |     fcn_0000173c ();
    0x00002f74 blx 0x18cc                                                    |     r0 = cxa_atexit ();
    0x00002f78 mov r4, r0                                                    |     r4 = r0;
    0x00002f7a mov r1, r8                                                    |     r1 = r8;
    0x00002f7c mov r0, r6                                                    |     r0 = r6;
    0x00002f7e str.w sb, [r4]                                                |     __asm ("str.w sb, [r4]");
    0x00002f80 str r0, [sp]                                                  |     *(sp) = r0;
    0x00002f82 blx 0x1aec                                                    |     r0 = fcn_00001aec ();
    0x00002f86 cmp r0, sb                                                    |     
                                                                             |     if (r0 < sb) {
    0x00002f88 blt.w 0x30f4                                                  |         goto label_19;
                                                                             |     }
    0x00002f8c add r2, sp, 4                                                 |     r2 += var_4h_2;
    0x00002f8e movw r1, 0x4b44                                               |     r1 = 0x4b44;
    0x00002f92 mov r0, r6                                                    |     r0 = r6;
    0x00002f94 blx 0x173c                                                    |     r0 = fcn_0000173c ();
    0x00002f98 cmp r0, 0                                                     |     
                                                                             |     if (r0 < 0) {
    0x00002f9a blt.w 0x3110                                                  |         goto label_20;
                                                                             |     }
    0x00002f9c strh r1, [r7, 4]                                              |     *((r7 + 4)) = r1;
    0x00002f9e ldr r3, [sp, 4]                                               |     r3 = var_4h_2;
    0x00002fa0 cmp r3, 3                                                     |     
                                                                             |     if (r3 == 3) {
    0x00002fa2 beq 0x306c                                                    |         goto label_21;
                                                                             |     }
    0x00002fa4 ldr r1, [pc, 0x220]                                           |     
    0x00002fa6 mov r0, sb                                                    |     r0 = sb;
    0x00002fa8 add r1, pc                                                    |     r1 = 0x6174;
    0x00002faa blx 0x19a8                                                    |     fcn_000019a8 ();
    0x00002fae ldrd r3, r2, [r7, 0x34]                                       |     __asm ("ldrd r3, r2, [r7, 0x34]");
    0x00002fb2 bic r2, r2, 0xff00                                            |     r2 = BIT_MASK (r2, 0xff00);
    0x00002fb6 bic r3, r3, 0x5a80                                            |     r3 = BIT_MASK (r3, 0x5a80);
    0x00002fba bic r2, r2, 0xfa                                              |     r2 = BIT_MASK (r2, 0xfa);
    0x00002fbe bic r3, r3, 0x61                                              |     r3 = BIT_MASK (r3, 0x61);
    0x00002fc0 lsls r1, r4, 0xd                                              |     r1 = r4 << 0xd;
    0x00002fc2 orr r2, r2, 5                                                 |     r2 |= 5;
    0x00002fc6 orr r3, r3, 0x2500                                            |     r3 |= 0x2500;
    0x00002fca str r2, [r7, 0x38]                                            |     *((r7 + 0x38)) = r2;
    0x00002fcc orr r3, r3, 2                                                 |     r3 |= 2;
    0x00002fd0 ldr r2, [r7, 0x40]                                            |     r2 = *((r7 + 0x40));
    0x00002fd2 bic r2, r2, 0x15c0                                            |     r2 = BIT_MASK (r2, sym.imp.setsockopt);
    0x00002fd6 bic r2, r2, 0xf                                               |     r2 = BIT_MASK (r2, 0xf);
    0x00002fda orr r2, r2, 0x8a00                                            |     r2 |= 0x8a00;
    0x00002fde orr r2, r2, 0x3b                                              |     r2 |= 0x3b;
    0x00002fe2 str r2, [r7, 0x40]                                            |     *((r7 + 0x40)) = r2;
                                                                             |     do {
    0x00002fe4 ldr r2, [r7, 0x3c]                                            |         r2 = *((r7 + 0x3c));
    0x00002fe6 movs r1, 3                                                    |         r1 = 3;
    0x00002fe8 str r3, [r7, 0x34]                                            |         *((r7 + 0x34)) = r3;
    0x00002fea mov.w r3, 0x1200                                              |         
    0x00002fee movt r3, 0x170f                                               |         r3 = 0x170f1200;
    0x00002ff2 strb.w r1, [r7, 0x45]                                         |         *((r7 + 0x45)) = r1;
    0x00002ff6 bic r2, r2, 0x300                                             |         r2 = BIT_MASK (r2, 0x300);
    0x00002ffa str r3, [r7, 0x50]                                            |         *((r7 + 0x50)) = r3;
    0x00002ffc orr r2, r2, 0x4b8                                             |         r2 |= 0x4b8;
    0x00003000 movw r3, 0x7f1c                                               |         r3 = 0x7f1c;
    0x00003004 orr r2, r2, 7                                                 |         r2 |= 7;
    0x00003008 strh.w r3, [r7, 0x46]                                         |         *((r7 + 0x46)) = r3;
    0x0000300c str r2, [r7, 0x3c]                                            |         *((r7 + 0x3c)) = r2;
    0x0000300e movw r2, 0x415                                                |         
    0x00003012 movt r2, 0x100                                                |         r2 = 0x1000415;
    0x00003016 str r2, [r7, 0x48]                                            |         *((r7 + 0x48)) = r2;
    0x00003018 mov.w r2, 0x1100                                              |         
    0x0000301c movt r2, 0x1a13                                               |         r2 = 0x1a131100;
    0x00003020 str r2, [r7, 0x4c]                                            |         *((r7 + 0x4c)) = r2;
    0x00003022 movs r2, 0x16                                                 |         r2 = 0x16;
    0x00003024 strh.w r2, [r7, 0x54]                                         |         *((r7 + 0x54)) = r2;
                                                                             | label_8:
    0x00003028 mov r2, r8                                                    |         r2 = r8;
    0x0000302a movs r1, 0                                                    |         r1 = 0;
    0x0000302c mov r0, r6                                                    |         r0 = r6;
    0x0000302e blx 0x174c                                                    |         r0 = strcpy (r0, r1)
    0x00003032 cmp r0, 0                                                     |         
                                                                             |         if (r0 != 0) {
    0x00003034 bne 0x3106                                                    |             goto label_22;
                                                                             |         }
                                                                             | label_7:
    0x00003036 movs r2, 0                                                    |         r2 = 0;
    0x00003038 movs r1, 3                                                    |         r1 = 3;
    0x0000303a mov r0, r6                                                    |         r0 = r6;
    0x0000303c blx 0x199c                                                    |         r0 = fcn_0000199c ();
    0x00003040 adds r3, r0, 1                                                |         r3 = r0 + 1;
                                                                             |         if (r3 != r0) {
    0x00003042 beq 0x3050                                                    |             
    0x00003044 bic r2, r0, 0x800                                             |             r2 = BIT_MASK (r0, 0x800);
    0x00003048 movs r1, 4                                                    |             r1 = 4;
    0x0000304a mov r0, r6                                                    |             r0 = r6;
    0x0000304c blx 0x199c                                                    |             fcn_0000199c ();
                                                                             |         }
                                                                             | label_6:
    0x00003050 ldr r2, [pc, 0x178]                                           |         
    0x00003052 ldr r3, [pc, 0x170]                                           |         r3 = *(0x31c6);
    0x00003054 add r2, pc                                                    |         r2 = 0x6224;
    0x00003056 ldr r3, [r2, r3]                                              |         r3 = *(0x6224);
    0x00003058 ldr r2, [r3]                                                  |         r2 = *(0x6224);
    0x0000305a ldr r3, [sp, 0x4c]                                            |         r3 = var_4ch;
    0x0000305c eors r2, r3                                                   |         r2 ^= r3;
    0x0000305e mov.w r3, 0                                                   |         r3 = 0;
                                                                             |         if (r2 != r3) {
    0x00003062 bne.w 0x31bc                                                  |             goto label_23;
                                                                             |         }
    0x00003066 add sp, 0x54                                                  |         
    0x00003068 pop.w {r4, r5, r6, r7, r8, sb, pc}                            |         
                                                                             | label_21:
    0x0000306c ldr r1, [pc, 0x160]                                           |         
    0x0000306e mov r0, sb                                                    |         r0 = sb;
    0x00003070 add r1, pc                                                    |         r1 = 0x6244;
    0x00003072 blx 0x19a8                                                    |         fcn_000019a8 ();
    0x00003076 ldr r2, [r7, 0x40]                                            |         r2 = *((r7 + 0x40));
    0x00003078 ldr r1, [r7, 0x38]                                            |         r1 = *((r7 + 0x38));
    0x0000307a ldr r3, [r7, 0x34]                                            |         r3 = *((r7 + 0x34));
    0x0000307c bic r2, r2, 0x15c0                                            |         r2 = BIT_MASK (r2, sym.imp.setsockopt);
    0x00003080 bic r1, r1, 0xff00                                            |         r1 = BIT_MASK (r1, 0xff00);
    0x00003084 bic r2, r2, 0xf                                               |         r2 = BIT_MASK (r2, 0xf);
    0x00003088 bic r3, r3, 0x1ae0                                            |         r3 = BIT_MASK (r3, fcn.00001ae0);
    0x0000308c bic r1, r1, 0xfa                                              |         r1 = BIT_MASK (r1, 0xfa);
    0x00003090 orr r2, r2, 0x8a00                                            |         r2 |= 0x8a00;
    0x00003094 bic r3, r3, 1                                                 |         r3 = BIT_MASK (r3, 1);
    0x00003098 orr r1, r1, 5                                                 |         r1 |= 5;
    0x0000309c orr r2, r2, 0x3b                                              |         r2 |= 0x3b;
    0x0000309e lsls r3, r7, 8                                                |         r3 = r7 << 8;
    0x000030a0 orr r3, r3, 0x6500                                            |         r3 |= 0x6500;
    0x000030a4 str r1, [r7, 0x38]                                            |         *((r7 + 0x38)) = r1;
    0x000030a6 orr r3, r3, 2                                                 |         r3 |= 2;
    0x000030a8 lsls r2, r0, 0xc                                              |         r2 = r0 << 0xc;
    0x000030aa str r2, [r7, 0x40]                                            |         *((r7 + 0x40)) = r2;
    0x000030ac b 0x2fe4                                                      |         
                                                                             |     } while (1);
                                                                             | label_18:
    0x000030ae movs r0, 0x51                                                 |     r0 = 0x51;
    0x000030b0 movs r4, 0x1e                                                 |     r4 = 0x1e;
    0x000030b2 add r5, sp, 0x10                                              |     r5 += var_10h;
    0x000030b4 bl 0x446c                                                     |     fcn_0000446c ();
    0x000030b8 b 0x30d8                                                      |     goto label_24;
                                                                             | label_5:
    0x000030ba ldrd r3, r0, [sp, 0x10]                                       |     __asm ("ldrd r3, r0, [var_10h]");
    0x000030be ldrd r1, r2, [sp, 0x18]                                       |     __asm ("ldrd r1, r2, [var_18h]");
    0x000030c0 asrs r6, r0, 8                                                |     r6 = r0 >> 8;
    0x000030c2 orrs r3, r0                                                   |     r3 |= r0;
    0x000030c4 orrs r3, r1                                                   |     r3 |= r1;
    0x000030c6 orrs r3, r2                                                   |     r3 |= r2;
                                                                             |     if (r3 == r2) {
    0x000030c8 beq.w 0x2f5c                                                  |         goto label_4;
                                                                             |     }
    0x000030cc movs r0, 1                                                    |     r0 = 1;
    0x000030ce blx 0x1684                                                    |     fcn_00001684 ();
    0x000030d2 subs r4, 1                                                    |     r4--;
                                                                             |     if (r4 == 1) {
    0x000030d4 beq.w 0x2f5c                                                  |         goto label_4;
                                                                             |     }
                                                                             | label_24:
    0x000030d8 movs r1, 0                                                    |     r1 = 0;
    0x000030da movs r2, 0x3c                                                 |     r2 = 0x3c;
    0x000030dc mov r0, r5                                                    |     r0 = r5;
    0x000030de blx 0x1900                                                    |     fcn_00001900 ();
    0x000030e2 mov r2, r5                                                    |     r2 = r5;
    0x000030e4 movw r1, 0x5456                                               |     r1 = 0x5456;
    0x000030e8 mov r0, r6                                                    |     r0 = r6;
    0x000030ea blx 0x173c                                                    |     r0 = fcn_0000173c ();
    0x000030ee cmp r0, 0                                                     |     
                                                                             |     if (r0 >= 0) {
    0x000030f0 bge 0x30ba                                                    |         goto label_5;
                                                                             |     }
    0x000030f2 b 0x2f5c                                                      |     goto label_4;
                                                                             | label_19:
    0x000030f4 ldr r0, [pc, 0xdc]                                            |     
    0x000030f6 add r0, pc                                                    |     r0 = 0x62ce;
    0x000030f8 blx 0x19fc                                                    |     fcn_000019fc ();
    0x000030fc ldr r3, [r7, 0x10]                                            |     r3 = *((r7 + 0x10));
    0x000030fe orr r3, r3, 2                                                 |     r3 |= 2;
    0x00003100 lsls r2, r0, 0xc                                              |     r2 = r0 << 0xc;
    0x00003102 str r3, [r7, 0x10]                                            |     *((r7 + 0x10)) = r3;
    0x00003104 b 0x3050                                                      |     goto label_6;
                                                                             | label_22:
    0x00003106 ldr r0, [pc, 0xd0]                                            |     
    0x00003108 add r0, pc                                                    |     r0 = 0x62e6;
    0x0000310a blx 0x19fc                                                    |     fcn_000019fc ();
    0x0000310e b 0x3036                                                      |     goto label_7;
                                                                             | label_20:
    0x00003110 str.w sb, [r4]                                                |     __asm ("str.w sb, [r4]");
    0x00003114 movs r1, 2                                                    |     r1 = 2;
    0x00003116 ldr r3, [r7, 0x10]                                            |     r3 = *((r7 + 0x10));
    0x00003118 mov r0, r6                                                    |     r0 = r6;
    0x0000311a orr r3, r3, 1                                                 |     r3 |= 1;
    0x0000311e str r3, [r7, 0x10]                                            |     *((r7 + 0x10)) = r3;
    0x00003120 blx 0x15f0                                                    |     tcflush ();
    0x00003124 mov r0, r8                                                    |     r0 = r8;
    0x00003126 blx 0x16b8                                                    |     r0 = fcn_000016b8 ();
    0x0000312a mov r5, r0                                                    |     r5 = r0;
    0x0000312c mov r0, r8                                                    |     r0 = r8;
    0x0000312e blx 0x18c0                                                    |     errno_location ();
    0x00003132 ldr r3, [r7, 0x3c]                                            |     r3 = *((r7 + 0x3c));
    0x00003134 cmp r5, 0                                                     |     
    0x00003136 it eq                                                         |     
                                                                             |     if (r5 != 0) {
    0x00003138 moveq r5, 0xd                                                 |         r5 = 0xd;
                                                                             |     }
    0x0000313a subs r4, r0, 0                                                |     r4 = r0 - 0;
    0x0000313c it eq                                                         |     
                                                                             |     if (r4 != r0) {
    0x0000313e moveq r4, 0xd                                                 |         r4 = 0xd;
                                                                             |     }
    0x00003140 mov r1, r5                                                    |     r1 = r5;
    0x00003142 and r3, r3, 0x800                                             |     r3 &= 0x800;
    0x00003146 mov r0, r8                                                    |     r0 = r8;
    0x00003148 orr r3, r3, 0x4b0                                             |     r3 |= 0x4b0;
    0x0000314c str.w sb, [r7, 0x34]                                          |     __asm ("str.w sb, [r7, 0x34]");
    0x00003150 str r3, [r7, 0x3c]                                            |     *((r7 + 0x3c)) = r3;
    0x00003152 ldr r3, [r7, 0x38]                                            |     r3 = *((r7 + 0x38));
    0x00003154 str.w sb, [r7, 0x40]                                          |     __asm ("str.w sb, [r7, 0x40]");
    0x00003158 and r3, r3, 5                                                 |     r3 &= 5;
    0x0000315c str r3, [r7, 0x38]                                            |     *((r7 + 0x38)) = r3;
    0x0000315e blx 0x18a8                                                    |     posix_memalign ();
    0x00003162 mov r1, r4                                                    |     r1 = r4;
    0x00003164 mov r0, r8                                                    |     r0 = r8;
    0x00003166 blx 0x1718                                                    |     fcn_00001718 ();
    0x0000316a add r4, sp, 8                                                 |     r4 += var_8h;
    0x0000316c mov.w r3, 0x100                                               |     r3 = 0x100;
    0x00003170 mov r2, r4                                                    |     r2 = r4;
    0x00003172 movw r1, 0x5413                                               |     r1 = 0x5413;
    0x00003176 mov r0, r6                                                    |     r0 = r6;
    0x00003178 strh.w r3, [r7, 0x4a]                                         |     *((r7 + 0x4a)) = r3;
    0x0000317c strb.w sb, [r7, 0x44]                                         |     *((r7 + 0x44)) = sb;
    0x00003180 blx 0x173c                                                    |     r0 = fcn_0000173c ();
                                                                             |     if (r0 != 0) {
    0x00003184 cbnz r0, 0x31a4                                               |         goto label_25;
                                                                             |     }
    0x00003186 ldrh.w r2, [sp, 8]                                            |     r2 = var_8h;
    0x0000318a ldrh.w r3, [sp, 0xa]                                          |     r3 = var_ah;
                                                                             |     if (r2 == 0) {
    0x0000318e cbz r2, 0x31b0                                                |         goto label_26;
                                                                             |     }
    0x00003190 cbnz r3, 0x31a4                                               |     
                                                                             |     while (r3 == 0) {
    0x00003192 movs r3, 0x50                                                 |         r3 = 0x50;
    0x00003194 strh.w r3, [sp, 0xa]                                          |         var_ah = r3;
                                                                             | label_9:
    0x00003198 mov r2, r4                                                    |         r2 = r4;
    0x0000319a movw r1, 0x5414                                               |         r1 = 0x5414;
    0x0000319e mov r0, r6                                                    |         r0 = r6;
    0x000031a0 blx 0x173c                                                    |         fcn_0000173c ();
                                                                             | label_25:
    0x000031a4 ldr r1, [pc, 0x34]                                            |         
    0x000031a6 movs r0, 0                                                    |         r0 = 0;
    0x000031a8 add r1, pc                                                    |         r1 = 0x6388;
    0x000031aa blx 0x19a8                                                    |         fcn_000019a8 ();
    0x000031ae b 0x3028                                                      |         goto label_8;
                                                                             | label_26:
    0x000031b0 movs r2, 0x18                                                 |         r2 = 0x18;
    0x000031b2 strh.w r2, [sp, 8]                                            |         var_8h = r2;
    0x000031b4 movs r0, 8                                                    |         r0 = 8;
    0x000031b6 cmp r3, 0                                                     |         
    0x000031b8 beq 0x3192                                                    |         
                                                                             |     }
    0x000031ba b 0x3198                                                      |     goto label_9;
                                                                             | label_23:
    0x000031bc blx 0x16ac                                                    |     fcn_000016ac ();
    0x000031c0 subs r6, 0xac                                                 |     r6 -= 0xac;
    0x000031c2 movs r1, r0                                                   |     r1 = r0;
    0x000031c4 lsls r4, r6, 7                                                |     r4 = r6 << 7;
    0x000031c6 movs r0, r0                                                   |     
    0x000031c8 adds r2, 0xa8                                                 |     r2 += 0xa8;
    0x000031ca movs r0, r0                                                   |     
    0x000031cc subs r5, 0x90                                                 |     r5 -= 0x90;
    0x000031ce movs r1, r0                                                   |     r1 = r0;
    0x000031d0 adds r1, 0xe8                                                 |     r1 += 0xe8;
    0x000031d2 movs r0, r0                                                   |     
    0x000031d4 adds r1, 0x46                                                 |     r1 += 0x46;
    0x000031d6 movs r0, r0                                                   |     
    0x000031d8 adds r1, 0x58                                                 |     r1 += 0x58;
    0x000031da movs r0, r0                                                   |     
    0x000031dc adds r0, 0xa8                                                 |     r0 += 0xa8;
    0x000031de movs r0, r0                                                   |     
                                                                             | }

[*] Function strcpy used 2 times sulogin.util-linux