[*] 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