[*] Binary protection state of busybox
Partial RELRO No Canary found NX disabled No PIE No RPATH No RUNPATH No Symbols
[*] Function popen tear down of busybox
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/bin/busybox @ 0x88d88 */
| #include <stdint.h>
|
; (fcn) fcn.00088d88 () | void fcn_00088d88 (int32_t arg_0h, void * ptr, int32_t arg_14h, int32_t arg_18h, char * src, int32_t arg1, void * arg2) {
| int32_t var_21h;
| int32_t var_0h;
| int32_t var_0h_2;
| int32_t var_8h;
| int32_t var_10h;
| int32_t var_10h_2;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_28h;
| char * filename;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_38h;
| int32_t var_3ch;
| int32_t var_44h;
| int32_t var_4ch;
| r0 = arg1;
| r1 = arg2;
0x00088d88 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00088d8c subs r4, r0, 0 | r4 -= arg_0h;
0x00088d90 sub sp, sp, 0x4c |
0x00088d94 mov r5, r1 | r5 = r1;
| if (r4 == arg_0h) {
0x00088d98 bne 0x88db8 |
0x00088d9c mov r1, r4 | r1 = r4;
0x00088da0 mov r0, r5 | r0 = r5;
0x00088da4 bl 0x87a44 | fcn_00087a44 (r0, r1);
0x00088da8 str r0, [sp, 0x18] | var_18h = r0;
| label_0:
0x00088dac ldr r0, [sp, 0x18] | r0 = var_18h;
0x00088db0 add sp, sp, 0x4c |
0x00088db4 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00088db8 mov r0, 2 | r0 = 2;
0x00088dbc bl 0x86b54 | fcn_00086b54 (r0);
0x00088dc0 str r5, [sp, 0x18] | var_18h = r5;
0x00088dc4 str r0, [sp, 0x28] | var_28h = r0;
| do {
0x00088dc8 ldr r3, [r4] | r3 = *(r4);
0x00088dcc ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00088dd0 str r3, [sp, 0x1c] | var_1ch = r3;
0x00088dd4 and fp, r3, 0x7f |
0x00088dd8 ldr r3, [pc, 0xe50] | r3 = *(0x89c2c);
0x00088ddc ldr r8, [r3] | r8 = *(0x89c2c);
0x00088de0 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00088de4 str r3, [r8, -0x38] | *((r8 - 0x38)) = r3;
0x00088de8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00088dec str r0, [sp, 0x44] | var_44h = r0;
0x00088df0 lsr sb, r3, 8 | sb = r3 >> 8;
0x00088df4 and sb, sb, 0xff | sb &= 0xff;
0x00088df8 cmp sb, 1 |
| if (sb != 1) {
0x00088dfc bne 0x88eb4 | goto label_27;
| }
0x00088e00 ldr r3, [r0] | r3 = *(r0);
0x00088e04 and r3, r3, 0xff00 | r3 &= 0xff00;
0x00088e08 cmp r3, 0x2700 |
| if (r3 != 0x2700) {
0x00088e0c ldreq r5, [r0, 8] | r5 = *((r0 + 8));
| }
| if (r3 != 0x2700) {
0x00088e10 beq 0x88e2c |
0x00088e14 cmp r3, 0x1800 |
| if (r3 != 0x1800) {
0x00088e18 bne 0x88e9c | goto label_28;
| }
0x00088e1c ldr r3, [r8, 0x8c] | r3 = *((r8 + 0x8c));
0x00088e20 ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x00088e24 mov r8, 0x18 | r8 = 0x18;
0x00088e28 mla r5, r2, r8, r3 | __asm ("mla r5, r2, r8, r3");
| }
0x00088e2c ldr r0, [r0, 0xc] | r0 = *((r0 + 0xc));
0x00088e30 cmp r0, 0 |
| if (r0 == 0) {
0x00088e34 beq 0x88ea4 | goto label_29;
| }
0x00088e38 ldr r1, [sp, 0x28] | r1 = var_28h;
0x00088e3c bl 0x88d88 | r0 = fcn_00088d88 (r0, r1, r2, r3, r4, r5, r6);
0x00088e40 bl 0x87498 | r0 = fcn_00087498 (r0);
0x00088e44 mov sb, r0 | sb = r0;
0x00088e48 mov r0, r5 | r0 = r5;
0x00088e4c bl 0x86aec | fcn_00086aec (r0);
0x00088e50 mov r1, sb | r1 = sb;
0x00088e54 bl 0x871d0 | fcn_000871d0 (r0, r1);
| label_1:
0x00088e58 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00088e5c and r3, r3, 0xff00 | r3 &= 0xff00;
0x00088e60 cmp r3, 0x600 |
| if (r3 > 0x600) {
0x00088e64 ldrls r4, [r4, 0x10] | r4 = *((r4 + 0x10));
| }
| if (r3 >= 0x600) {
0x00088e68 bls 0x88e74 |
0x00088e6c cmp r3, 0x1000 |
| if (r3 >= 0x1000) {
0x00088e70 bhs 0x88e90 | goto label_30;
| }
| }
0x00088e74 ldr r3, [pc, 0xdb4] |
0x00088e78 ldr r3, [r3] |
0x00088e7c ldr r3, [r3, -0x14] | r3 = *(0x89c18);
0x00088e80 cmp r3, 0 |
| if (r3 != 0) {
0x00088e84 bne 0x88e90 | goto label_30;
| }
0x00088e88 cmp r4, 0 |
0x00088e8c bne 0x88dc8 |
| } while (r4 != 0);
| label_30:
0x00088e90 ldr r0, [sp, 0x28] | r0 = var_28h;
0x00088e94 bl 0x8815c | fcn_0008815c (r0);
0x00088e98 b 0x88dac | goto label_0;
| label_28:
0x00088e9c ldr r0, [pc, 0xd90] | r0 = *(0x89c30);
| label_12:
0x00088ea0 bl 0x87374 | fcn_00087374 (r0);
| label_29:
0x00088ea4 mov r0, r5 | r0 = r5;
0x00088ea8 bl 0x86aec | r0 = fcn_00086aec (r0);
0x00088eac bl 0x86d28 | fcn_00086d28 (r0);
0x00088eb0 b 0x88e58 | goto label_1;
| label_27:
0x00088eb4 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00088eb8 tst r3, 0x10000 |
| if ((r3 & 0x10000) != 0) {
0x00088ebc beq 0x88ecc |
0x00088ec0 ldr r1, [sp, 0x28] | r1 = var_28h;
0x00088ec4 bl 0x88d88 | r0 = fcn_00088d88 (r0, r1, r2, r3, r4, r5, r6);
0x00088ec8 mov r6, r0 | r6 = r0;
| }
0x00088ecc ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00088ed0 tst r3, 0x20000 |
| if ((r3 & 0x20000) != 0) {
0x00088ed4 beq 0x88eec |
0x00088ed8 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00088edc ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00088ee0 add r1, r3, 0x18 | r1 = r3 + 0x18;
0x00088ee4 bl 0x88d88 | r0 = fcn_00088d88 (r0, r1, r2, r3, r4, r5, r6);
0x00088ee8 mov sl, r0 | sl = r0;
| }
0x00088eec ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00088ef0 tst r3, 0x40000 |
| if ((r3 & 0x40000) != 0) {
0x00088ef4 beq 0x88f04 |
0x00088ef8 mov r0, r6 | r0 = r6;
0x00088efc bl 0x87498 | r0 = fcn_00087498 (r0);
0x00088f00 mov r7, r0 | r7 = r0;
| }
0x00088f04 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00088f08 tst r3, 0x80000 |
| if ((r3 & 0x80000) != 0) {
0x00088f0c beq 0x88f1c |
0x00088f10 mov r0, sl | r0 = sl;
0x00088f14 bl 0x87498 | fcn_00087498 (r0);
0x00088f18 str r0, [sp, 0x2c] | filename = r0;
| }
0x00088f1c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00088f20 tst r3, 0x100000 |
| if ((r3 & 0x100000) != 0) {
0x00088f24 beq 0x88f34 |
0x00088f28 mov r0, r6 | r0 = r6;
0x00088f2c bl 0x86f20 | fcn_00086f20 (r0);
0x00088f30 strd r0, r1, [sp, 0x10] | __asm ("strd r0, r1, [var_10h]");
| }
0x00088f34 sub sb, sb, 2 | sb -= 2;
0x00088f38 cmp sb, 0x26 |
| if (sb > 0x26) {
| /* switch table (39 cases) at 0x88f44 */
0x00088f3c ldrls pc, [pc, sb, lsl 2] | offset_0 = sb << 2;
| pc = *((pc + offset_0));
| }
0x00088f40 b 0x89430 | goto label_31;
0x00088fe0 ldr r0, [sp, 0x44] | r0 = var_44h;
0x00088fe4 ldr r3, [r0] | r3 = *(r0);
0x00088fe8 and r3, r3, 0xff00 | r3 &= 0xff00;
0x00088fec cmp r3, 0x1300 |
| if (r3 != 0x1300) {
0x00088ff0 bne 0x89048 | goto label_32;
| }
0x00088ff4 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00088ff8 tst r3, 0x200000 |
0x00088ffc beq 0x89030 |
| while (r0 != 0) {
0x00089000 ldr r3, [r4] | r3 = *(r4);
0x00089004 orr r3, r3, 0x200000 | r3 |= 0x200000;
0x00089008 str r3, [r4] | *(r4) = r3;
0x0008900c ldr r3, [sp, 0x44] | r3 = var_44h;
0x00089010 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x00089014 bl 0x8a800 | r0 = fcn_0008a800 (r0);
0x00089018 cmp r0, 0 |
| if (r0 == 0) {
0x0008901c ldrne r3, [r4] | r3 = *(r4);
| }
0x00089020 bicne r3, r3, 0x200000 | __asm ("bicne r3, r3, 0x200000");
| if (r0 == 0) {
0x00089024 strne r3, [r4] | *(r4) = r3;
| }
| label_2:
0x00089028 ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x0008902c b 0x88e58 | goto label_1;
0x00089030 ldr r0, [r0, 8] | r0 = *((r0 + 8));
0x00089034 bl 0x8a800 | r0 = fcn_0008a800 (r0);
0x00089038 cmp r0, 0 |
0x0008903c bne 0x89000 |
| }
| do {
| label_6:
0x00089040 ldr r4, [r4, 0xc] | r4 = *((r4 + 0xc));
0x00089044 b 0x88e58 | goto label_1;
| label_32:
0x00089048 bl 0x8a800 | r0 = fcn_0008a800 (r0);
| label_3:
0x0008904c cmp r0, 0 |
0x00089050 beq 0x89040 |
| } while (r0 == 0);
0x00089054 b 0x89028 | goto label_2;
0x00089058 mov r0, r6 | r0 = r6;
0x0008905c bl 0x86fbc | fcn_00086fbc (r0);
0x00089060 b 0x8904c | goto label_3;
0x00089064 mov r0, sl | r0 = sl;
0x00089068 bl 0x86aec | fcn_00086aec (r0);
0x0008906c ldr r2, [r6] | r2 = *(r6);
0x00089070 ands sb, r2, 0x800 | sb = r2 & 0x800;
| if (sb != r2) {
0x00089074 orreq r2, r2, 0x800 | r2 |= 0x800;
| }
| if (sb != r2) {
0x00089078 streq r2, [r6] | *(r6) = r2;
| }
| if (sb == r2) {
0x0008907c ldrne sb, [r6, 0x14] | sb = *((r6 + 0x14));
| }
0x00089080 mov r3, r0 | r3 = r0;
0x00089084 ldr r0, [r0, 0xc] | r0 = *((r0 + 0xc));
0x00089088 str r3, [sp, 0x34] | var_34h = r3;
0x0008908c add r0, r0, 0x11 | r0 += 0x11;
0x00089090 bl 0x189b8 | fcn_000189b8 (r0);
0x00089094 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00089098 add r2, r0, 0xc | r2 = r0 + 0xc;
0x0008909c str r0, [r6, 0x14] | *((r6 + 0x14)) = r0;
0x000890a0 mov r8, r0 | r8 = r0;
0x000890a4 stmib r0, {r2, sb} | __asm ("stmib r0, {r2, sb}");
0x000890a8 mov sb, 0 | sb = 0;
0x000890ac str r2, [r0] | *(r0) = r2;
| label_4:
0x000890b0 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x000890b4 cmp sb, r2 |
| if (sb >= r2) {
0x000890b8 bhs 0x88e58 | goto label_1;
| }
0x000890bc ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x000890c0 ldr fp, [r2, sb, lsl 2] | offset_1 = sb << 2;
| fp = *((r2 + offset_1));
| label_5:
0x000890c4 cmp fp, 0 |
| if (fp == 0) {
0x000890c8 addeq sb, sb, 1 | sb++;
| goto label_33;
| }
| if (fp == 0) {
| label_33:
0x000890cc beq 0x890b0 | goto label_4;
| }
0x000890d0 add r1, fp, 0x1c | r1 += src;
0x000890d4 ldr r0, [r8] | r0 = *(r8);
0x000890d8 str r3, [sp, 0x34] | var_34h = r3;
0x000890dc bl 0x142f4 | strcpy (r0, r1);
0x000890e0 mov r0, r8 | r0 = r8;
0x000890e4 bl 0x86a4c | fcn_00086a4c (r0);
0x000890e8 ldr fp, [fp, 0x18] | fp = *(arg_18h);
0x000890ec ldr r3, [sp, 0x34] | r3 = var_34h;
0x000890f0 b 0x890c4 | goto label_5;
0x000890f4 ldr r0, [r6, 0x14] | r0 = *((r6 + 0x14));
0x000890f8 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x000890fc ldr r3, [r0] | r3 = *(r0);
0x00089100 cmp r2, r3 |
| if (r2 > r3) {
0x00089104 blo 0x89118 |
0x00089108 ldr r8, [r0, 8] | r8 = *((r0 + 8));
0x0008910c bl 0x152a8 | free (r0);
0x00089110 str r8, [r6, 0x14] | *((r6 + 0x14)) = r8;
0x00089114 b 0x89040 | goto label_6;
| }
0x00089118 add r0, r0, 4 | r0 += 4;
0x0008911c bl 0x86a4c | r0 = fcn_00086a4c (r0);
0x00089120 mov r1, r0 | r1 = r0;
0x00089124 mov r0, r6 | r0 = r6;
0x00089128 bl 0x87a68 | fcn_00087a68 (r0, r1);
0x0008912c b 0x89028 | goto label_2;
0x00089130 ldr r3, [pc, 0xb00] | r3 = "Not an array";
0x00089134 ldr sb, [r3] | sb = "Not an array";
0x00089138 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0008913c cmp r3, 0 |
| if (r3 == 0) {
0x00089140 beq 0x89194 | goto label_34;
| }
0x00089144 ldr r1, [sp, 0x2c] | r1 = filename;
0x00089148 ldr r0, [r8, -0x44] | r0 = *((r8 - 0x44));
0x0008914c bl 0x870ac | r0 = fcn_000870ac (r0, r1);
0x00089150 ldr r3, [r0] | r3 = *(r0);
0x00089154 mov sb, r0 | sb = r0;
0x00089158 cmp r3, 0 |
| if (r3 != 0) {
0x0008915c bne 0x89190 | goto label_35;
| }
0x00089160 cmp fp, 0x7c |
0x00089164 ldr r1, [pc, 0xad0] | r1 = stdout;
| if (fp != 0x7c) {
0x00089168 bne 0x891ec | goto label_36;
| }
0x0008916c ldr r0, [sp, 0x2c] | r0 = filename;
0x00089170 bl 0x14354 | r0 = popen (r0, r1)
0x00089174 cmp r0, 0 |
0x00089178 str r0, [sb] | *(sb) = r0;
| if (r0 == 0) {
0x0008917c bne 0x89188 |
0x00089180 ldr r0, [pc, 0xab8] | r0 = *(0x89c3c);
0x00089184 bl 0x17fd8 | fcn_00017fd8 ();
| }
0x00089188 mov r3, 1 | r3 = 1;
0x0008918c str r3, [sb, 0x14] | *((sb + 0x14)) = r3;
| do {
| label_35:
0x00089190 ldr sb, [sb] | sb = *(sb);
| label_34:
0x00089194 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00089198 ldr r0, [sp, 0x44] | r0 = var_44h;
0x0008919c and r3, r3, 0xff00 | r3 &= 0xff00;
0x000891a0 cmp r3, 0x400 |
| if (r3 != 0x400) {
0x000891a4 bne 0x892ac | goto label_37;
| }
0x000891a8 cmp r0, 0 |
| if (r0 == 0) {
0x000891ac ldrne r3, [pc, 0xa7c] | r3 = *(0x00089c30);
| }
| if (r0 == 0) {
0x000891b0 ldrne r8, [r3] | r8 = *(r3);
| }
| if (r0 != 0) {
0x000891b4 bne 0x8928c | goto label_38;
| }
0x000891b8 ldr r0, [r8, 0x34] | r0 = *((r8 + 0x34));
0x000891bc bl 0x87498 | fcn_00087498 (r0);
0x000891c0 mov r1, sb | r1 = sb;
0x000891c4 bl 0x149d8 | fputs_unlocked ();
| label_7:
0x000891c8 ldr r3, [pc, 0xa60] |
0x000891cc ldr r3, [r3] | r3 = *(0x89c2c);
0x000891d0 ldr r0, [r3, 0x20] | r0 = "Possible_syntax_error";
0x000891d4 bl 0x87498 | fcn_00087498 ("Possible_syntax_error");
0x000891d8 mov r1, sb | r1 = sb;
0x000891dc bl 0x149d8 | fputs_unlocked ();
| label_9:
0x000891e0 mov r0, sb | r0 = sb;
0x000891e4 bl 0x147ec | fflush (r0);
0x000891e8 b 0x88e58 | goto label_1;
| label_36:
0x000891ec ldr r3, [pc, 0xa50] | r3 = "popen"
0x000891f0 cmp fp, 0x77 |
| if (fp == 0x77) {
0x000891f4 movne r1, r3 | r1 = r3;
| }
0x000891f8 ldr r0, [sp, 0x2c] | r0 = filename;
0x000891fc bl 0x18a6c | fcn_00018a6c (r0);
0x00089200 str r0, [sb] | *(sb) = r0;
0x00089204 b 0x89190 |
| } while (1);
| do {
0x00089208 add r0, sp, 0x44 | r0 += var_44h;
0x0008920c bl 0x86a88 | fcn_00086a88 (r0);
0x00089210 ldr r1, [sp, 0x28] | r1 = var_28h;
0x00089214 bl 0x88d88 | r0 = fcn_00088d88 (r0, r1, r2, r3, r4, r5, r6);
0x00089218 ldr r3, [r0] | r3 = *(r0);
0x0008921c tst r3, 1 |
| if ((r3 & 1) == 0) {
0x00089220 beq 0x892a0 | goto label_39;
| }
0x00089224 ldr r3, [r8, -0x20] | r3 = *((r8 - 0x20));
0x00089228 str r0, [sp, 0x3c] | var_3ch = r0;
0x0008922c ldr r0, [r8, 0x14] | r0 = *((r8 + 0x14));
0x00089230 str r3, [sp, 0x38] | var_38h = r3;
0x00089234 bl 0x87498 | fcn_00087498 (r0);
0x00089238 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0008923c str r0, [sp, 0x34] | var_34h = r0;
0x00089240 mov r0, r1 | r0 = r1;
0x00089244 bl 0x86f20 | fcn_00086f20 (r0);
0x00089248 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0008924c str fp, [sp, 8] | var_8h = fp;
0x00089250 ldr r2, [sp, 0x34] | r2 = var_34h;
0x00089254 strd r0, r1, [sp] | __asm ("strd r0, r1, [sp]");
0x00089258 mov r1, 0xf0 | r1 = 0xf0;
0x0008925c mov r0, r3 | r0 = r3;
0x00089260 bl 0x8739c | fcn_0008739c (r0, r1, r2);
0x00089264 ldr r0, [r8, -0x20] | r0 = *((r8 - 0x20));
0x00089268 mov r1, sb | r1 = sb;
| label_8:
0x0008926c bl 0x149d8 | fputs_unlocked ();
0x00089270 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00089274 cmp r3, 0 |
| if (r3 != 0) {
0x00089278 beq 0x89290 |
0x0008927c ldr r0, [r8, 0x1c] | r0 = *((r8 + 0x1c));
0x00089280 bl 0x87498 | fcn_00087498 (r0);
0x00089284 mov r1, sb | r1 = sb;
0x00089288 bl 0x149d8 | fputs_unlocked ();
| label_38:
0x0008928c mov fp, 1 |
| }
0x00089290 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00089294 cmp r3, 0 |
0x00089298 bne 0x89208 |
| } while (r3 != 0);
0x0008929c b 0x891c8 | goto label_7;
| label_39:
0x000892a0 bl 0x87498 | fcn_00087498 (r0);
0x000892a4 mov r1, sb | r1 = sb;
0x000892a8 b 0x8926c | goto label_8;
| label_37:
0x000892ac bl 0x8a5ec | fcn_0008a5ec (r0);
0x000892b0 mov r1, sb | r1 = sb;
0x000892b4 mov r8, r0 | r8 = r0;
0x000892b8 bl 0x149d8 | fputs_unlocked ();
0x000892bc mov r0, r8 | r0 = r8;
0x000892c0 bl 0x152a8 | free (r0);
0x000892c4 b 0x891e0 | goto label_9;
0x000892c8 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x000892cc str r3, [r8, -0x3c] | *((r8 - 0x3c)) = r3;
0x000892d0 b 0x88e58 | goto label_1;
0x000892d4 mov r1, r6 | r1 = r6;
0x000892d8 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000892dc bl 0x87d18 | fcn_00087d18 (r0, r1);
0x000892e0 b 0x88e58 | goto label_1;
0x000892e4 mov r3, 1 | r3 = 1;
0x000892e8 str r3, [r8, -0x10] | *((r8 - 0x10)) = r3;
0x000892ec mov r3, 1 | r3 = 1;
0x000892f0 str r3, [r8, -0x14] | *((r8 - 0x14)) = r3;
0x000892f4 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000892f8 bl 0x86c40 | fcn_00086c40 (r0);
0x000892fc b 0x88e58 | goto label_1;
0x00089300 ldrd r0, r1, [sp, 0x10] | __asm ("ldrd r0, r1, [var_10h]");
0x00089304 bl 0xa70f4 | r0 = fcn_000a70f4 (r0, r1);
0x00089308 bl 0x89c84 | fcn_00089c84 (r0);
0x0008930c ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00089310 str r3, [sp, 0x18] | var_18h = r3;
0x00089314 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00089318 ldr r3, [r8, 0x50] | r3 = *((r8 + 0x50));
0x0008931c cmp r2, r3 |
| if (r2 == r3) {
0x00089320 bne 0x89328 |
0x00089324 bl 0x877b8 | fcn_000877b8 ();
| }
| label_10:
0x00089328 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0008932c cmp r3, 0 |
| if (r3 == 0) {
0x00089330 beq 0x88e58 | goto label_1;
| }
0x00089334 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00089338 bl 0x86aec | fcn_00086aec (r0);
0x0008933c ldr r1, [sp, 0x2c] | r1 = filename;
0x00089340 bl 0x870ac | fcn_000870ac (r0, r1);
| label_11:
0x00089344 str r0, [sp, 0x18] | var_18h = r0;
0x00089348 b 0x88e58 | goto label_1;
0x0008934c ldr r5, [r4, 8] | r5 = *((r4 + 8));
0x00089350 ldr r3, [r8, 0x8c] | r3 = *((r8 + 0x8c));
0x00089354 mov r2, 0x18 | r2 = 0x18;
0x00089358 mla r1, r2, r5, r3 | __asm ("mla r1, r2, r5, r3");
0x0008935c str r1, [sp, 0x18] | var_18h = r1;
0x00089360 b 0x89328 | goto label_10;
0x00089364 mov r0, sl | r0 = sl;
0x00089368 bl 0x86aec | fcn_00086aec (r0);
0x0008936c mov r1, r7 | r1 = r7;
0x00089370 bl 0x8705c | fcn_0008705c (r0, r1);
0x00089374 mov r2, 0 | r2 = 0;
0x00089378 cmp r0, 0 |
| if (r0 == 0) {
0x0008937c beq 0x899e4 | goto label_40;
| }
| label_22:
0x00089380 ldr r3, [pc, 0x8c0] | r3 = *(0x89c44);
0x00089384 b 0x89644 | goto label_15;
0x00089388 ldr r0, [r8, 0x34] | r0 = *((r8 + 0x34));
0x0008938c str r4, [sp, 0x44] | var_44h = r4;
0x00089390 bl 0x87498 | r0 = fcn_00087498 (r0);
0x00089394 mov r7, r0 | r7 = r0;
| do {
0x00089398 add r8, r8, 0x94 | r8 += 0x94;
0x0008939c mov r1, r8 | r1 = r8;
0x000893a0 ldr r0, [sp, 0x44] | r0 = var_44h;
0x000893a4 bl 0x89d1c | fcn_00089d1c (r0, r1);
0x000893a8 mov r3, 0 | r3 = 0;
0x000893ac str r3, [sp] | *(sp) = r3;
0x000893b0 mov r2, r3 | r2 = r3;
0x000893b4 mov r1, r7 | r1 = r7;
0x000893b8 mov sb, r0 | sb = r0;
0x000893bc bl 0x14e34 | regexec ();
0x000893c0 cmp r8, sb |
0x000893c4 mov r3, r0 | r3 = r0;
| if (r8 == sb) {
0x000893c8 bne 0x893dc |
0x000893cc str r0, [sp, 0x34] | var_34h = r0;
0x000893d0 mov r0, r8 | r0 = r8;
0x000893d4 bl 0x15170 | regfree ();
0x000893d8 ldr r3, [sp, 0x34] | r3 = var_34h;
| }
0x000893dc sub r0, fp, 0x21 | r0 = fp - 0x21;
0x000893e0 clz r0, r0 | r0 &= r0;
0x000893e4 lsr r0, r0, 5 | r0 >>= 5;
0x000893e8 cmp r3, 0 |
| if (r3 != 0) {
0x000893ec eoreq r0, r0, 1 | r0 ^= 1;
| }
| label_13:
0x000893f0 bl 0xa6a74 | r0 = fcn_000a6a74 (r0);
0x000893f4 mov r2, r0 | r2 = r0;
0x000893f8 mov r3, r1 | r3 = r1;
0x000893fc b 0x89644 | goto label_15;
0x00089400 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00089404 str r3, [sp, 0x44] | var_44h = r3;
0x00089408 b 0x89398 |
| } while (1);
0x0008940c mov r1, sl | r1 = sl;
0x00089410 mov r0, r6 | r0 = r6;
0x00089414 bl 0x87d18 | fcn_00087d18 (r0, r1);
0x00089418 b 0x89344 | goto label_11;
0x0008941c ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00089420 ldr r3, [r3] | r3 = *(r3);
0x00089424 and r3, r3, 0xff00 | r3 &= 0xff00;
0x00089428 cmp r3, 0x1200 |
| if (r3 != 0x1200) {
0x0008942c beq 0x89438 |
| label_31:
0x00089430 ldr r0, [pc, 0x814] | r0 = *(0x89c48);
0x00089434 b 0x88ea0 | goto label_12;
| }
0x00089438 mov r0, r6 | r0 = r6;
0x0008943c bl 0x86fbc | fcn_00086fbc (r0);
0x00089440 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00089444 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00089448 cmp r0, 0 |
| if (r0 == 0) {
0x0008944c ldrne r0, [r3, 8] | r0 = *((r3 + 8));
| }
| if (r0 != 0) {
0x00089450 ldreq r0, [r3, 0xc] | r0 = *((r3 + 0xc));
| }
0x00089454 bl 0x88d88 | fcn_00088d88 (r0, r1, r2, r3, r4, r5, r6);
0x00089458 b 0x89344 | goto label_11;
0x0008945c ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00089460 ldr r0, [r3] | r0 = *(r3);
0x00089464 cmp r0, 0 |
| if (r0 != 0) {
0x00089468 bne 0x8947c | goto label_41;
| }
0x0008946c ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00089470 cmp r3, 0 |
| if (r3 == 0) {
0x00089474 ldreq r0, [pc, 0x7d4] | r0 = "Call to undefined function";
| goto label_42;
| }
| if (r3 == 0) {
| label_42:
0x00089478 beq 0x88ea0 | goto label_12;
| }
| label_41:
0x0008947c add r0, r0, 1 | r0++;
0x00089480 bl 0x86b54 | r0 = fcn_00086b54 (r0);
0x00089484 mov fp, r0 |
0x00089488 add sb, r0, 0x18 | sb = r0 + 0x18;
| do {
0x0008948c ldr r3, [sp, 0x44] | r3 = var_44h;
0x00089490 sub r2, sb, 0x18 | r2 = sb - 0x18;
0x00089494 cmp r3, 0 |
| if (r3 == 0) {
0x00089498 beq 0x89500 | goto label_43;
| }
0x0008949c add r0, sp, 0x44 | r0 += var_44h;
0x000894a0 str r2, [sp, 0x38] | var_38h = r2;
0x000894a4 bl 0x86a88 | fcn_00086a88 (r0);
0x000894a8 ldr r1, [sp, 0x28] | r1 = var_28h;
0x000894ac bl 0x88d88 | fcn_00088d88 (r0, r1, r2, r3, r4, r5, r6);
0x000894b0 ldr r2, [sp, 0x38] | r2 = var_38h;
0x000894b4 mov r1, r0 | r1 = r0;
0x000894b8 str r0, [sp, 0x34] | var_34h = r0;
0x000894bc mov r0, r2 | r0 = r2;
0x000894c0 bl 0x87d18 | fcn_00087d18 (r0, r1);
0x000894c4 ldr r2, [sb, -0x18] | r2 = *((sb - 0x18));
0x000894c8 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000894cc orr r2, r2, 0x2000 | r2 |= 0x2000;
0x000894d0 str r2, [sb, -0x18] | *((sb - 0x18)) = r2;
0x000894d4 ldr r2, [pc, 0x778] |
0x000894d8 str r3, [sb, -4] | *((sb - 4)) = r3;
0x000894dc sub r3, sb, fp | r3 = sb - fp;
0x000894e0 asr r3, r3, 3 | r3 >>= 3;
0x000894e4 mul r2, r3, r2 | r2 = r3 * r2;
0x000894e8 add sb, sb, 0x18 | sb += 0x18;
0x000894ec mov r3, r2 | r3 = r2;
0x000894f0 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x000894f4 ldr r2, [r2] | r2 = "Call to undefined function";
0x000894f8 cmp r3, r2 |
0x000894fc blo 0x8948c |
| } while (r3 <= r2);
| label_43:
0x00089500 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00089504 ldr sb, [r8, 0x8c] | sb = *((r8 + 0x8c));
0x00089508 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0008950c str fp, [r8, 0x8c] | *((r8 + 0x8c)) = fp;
0x00089510 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x00089514 ldr fp, [r8, -0x3c] | fp = *((r8 - 0x3c));
0x00089518 bl 0x88d88 | fcn_00088d88 (r0, r1, r2, r3, r4, r5, r6);
0x0008951c str fp, [r8, -0x3c] | *((r8 - 0x3c)) = fp;
0x00089520 str r0, [sp, 0x18] | var_18h = r0;
0x00089524 ldr r0, [r8, 0x8c] | r0 = *((r8 + 0x8c));
0x00089528 bl 0x8815c | fcn_0008815c (r0);
0x0008952c str sb, [r8, 0x8c] | *((r8 + 0x8c)) = sb;
0x00089530 b 0x88e58 | goto label_1;
0x00089534 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00089538 and sb, r3, 0xff00 | sb = r3 & 0xff00;
0x0008953c ldr r3, [sp, 0x44] | r3 = var_44h;
0x00089540 cmp r3, 0 |
| if (r3 == 0) {
0x00089544 beq 0x895f4 | goto label_44;
| }
0x00089548 ldr r0, [r8, -0x44] | r0 = *((r8 - 0x44));
0x0008954c mov r1, r7 | r1 = r7;
0x00089550 bl 0x870ac | r0 = fcn_000870ac (r0, r1);
0x00089554 ldr r3, [r0] | r3 = *(r0);
0x00089558 mov r8, r0 | r8 = r0;
0x0008955c cmp r3, 0 |
| if (r3 != 0) {
0x00089560 bne 0x89584 | goto label_14;
| }
0x00089564 cmp sb, 0x2000 |
| if (sb != 0x2000) {
0x00089568 bne 0x895e4 | goto label_45;
| }
0x0008956c ldr r1, [pc, 0x6e4] | r1 = *(0x89c54);
0x00089570 mov r0, r7 | r0 = r7;
0x00089574 bl 0x14354 | popen (r0, r1)
0x00089578 mov r3, 1 | r3 = 1;
0x0008957c str r3, [r8, 0x14] | *((r8 + 0x14)) = r3;
0x00089580 str r0, [r8] | *(r8) = r0;
| do {
| label_14:
0x00089584 ldr r3, [r8] | r3 = *(r8);
0x00089588 cmp r3, 0 |
| if (r3 == 0) {
0x0008958c beq 0x89614 | goto label_46;
| }
0x00089590 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00089594 mov r0, r8 | r0 = r8;
0x00089598 cmp r3, 0 |
| if (r3 != 0) {
0x0008959c ldreq r3, [pc, 0x68c] | r3 = *(0x00089c30);
| }
| if (r3 != 0) {
0x000895a0 ldreq r3, [r3] | r3 = *(r3);
| }
| if (r3 != 0) {
0x000895a4 ldreq sl, [r3, 0x34] | sl = *((r3 + 0x34));
| }
0x000895a8 mov r1, sl | r1 = sl;
0x000895ac bl 0x88254 | r0 = fcn_00088254 (r0, r1);
0x000895b0 subs sb, r0, 0 | sb = r0 - 0;
| if (sb > r0) {
0x000895b4 ble 0x895dc |
0x000895b8 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000895bc cmp r3, 0 |
| if (r3 != 0) {
0x000895c0 bne 0x895dc | goto label_47;
| }
0x000895c4 ldr r3, [pc, 0x664] | r3 = *(0x89c2c);
0x000895c8 ldr r8, [r3] | r8 = *(0x89c2c);
0x000895cc ldr r0, [r8, 0x48] | r0 = *(0x89c74);
0x000895d0 bl 0x87bc8 | fcn_00087bc8 (r0);
0x000895d4 ldr r0, [r8, 0x4c] | r0 = "_s_s_s";
0x000895d8 bl 0x87bc8 | fcn_00087bc8 ("_s_s_s");
| }
| label_47:
0x000895dc mov r0, sb | r0 = sb;
0x000895e0 b 0x893f0 | goto label_13;
| label_45:
0x000895e4 mov r0, r7 | r0 = r7;
0x000895e8 bl 0xa5630 | fcn_000a5630 ();
0x000895ec str r0, [r8] | *(r8) = r0;
0x000895f0 b 0x89584 |
| } while (1);
| label_44:
0x000895f4 ldr r3, [r8, -0x50] | r3 = *((r8 - 0x50));
0x000895f8 cmp r3, 0 |
| if (r3 == 0) {
0x000895fc bne 0x89608 |
0x00089600 bl 0x87bf8 | fcn_00087bf8 ();
0x00089604 str r0, [r8, -0x50] | *((r8 - 0x50)) = r0;
| }
0x00089608 ldr r8, [r8, -0x50] | r8 = *((r8 - 0x50));
0x0008960c cmp r8, 0 |
| if (r8 != 0) {
0x00089610 bne 0x89584 | goto label_14;
| }
| label_46:
0x00089614 ldr r3, [pc, 0x640] |
0x00089618 ldr r3, [r3] | r3 = *(0x89c58);
0x0008961c ldr r0, [r3] | r0 = *(0x89c58);
0x00089620 bl 0xa6a74 | fcn_000a6a74 (r0);
0x00089624 mov r3, r1 | r3 = r1;
0x00089628 ldr r1, [pc, 0x600] |
0x0008962c mov r2, r0 | r2 = r0;
0x00089630 ldr r1, [r1] | r1 = *(0x89c2c);
0x00089634 ldr r0, [r1, 0x44] | r0 = "Access to negative field";
0x00089638 bl 0x87b94 | fcn_00087b94 ("Access to negative field");
0x0008963c ldr r3, [pc, 0x61c] | r3 = *(0x89c5c);
0x00089640 mov r2, 0 | r2 = 0;
| label_15:
0x00089644 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00089648 bl 0x87b94 | fcn_00087b94 (r0);
0x0008964c b 0x88e58 | goto label_1;
0x00089650 cmp fp, 0xc |
| if (fp > 0xc) {
| /* switch table (13 cases) at 0x8965c */
0x00089654 ldrls pc, [pc, fp, lsl 2] | offset_2 = fp << 2;
| pc = *((pc + offset_2));
| }
0x00089658 b 0x896ec | goto label_18;
0x00089690 ldrd r0, r1, [sp, 0x10] | __asm ("ldrd r0, r1, [var_10h]");
0x00089694 bl 0xa78d4 | r0 = fcn_000a78d4 (r0, r1);
0x00089698 bl 0xa6af8 | fcn_000a6af8 (r0, r1);
| do {
| label_16:
0x0008969c strd r0, r1, [sp, 0x20] | __asm ("strd r0, r1, [sp, 0x20]");
0x000896a0 b 0x896ec | goto label_18;
0x000896a4 bl 0x14b28 | rand ();
0x000896a8 bl 0xa6a74 | fcn_000a6a74 (r0);
0x000896ac ldr r2, [pc, 0x5b0] | r2 = *(0x89c60);
0x000896b0 ldr r3, [pc, 0x5b0] | r3 = *(0x89c64);
0x000896b4 bl 0xa6dc4 | fcn_000a6dc4 (r0);
0x000896b8 b 0x8969c |
| } while (1);
0x000896bc ldr r0, [pc, 0x5a8] | r0 = *(0x89c68);
0x000896c0 b 0x88ea0 | goto label_12;
0x000896c4 ldr r0, [r8, 0x90] | r0 = *((r8 + 0x90));
0x000896c8 bl 0xa6a50 | fcn_000a6a50 (r0);
0x000896cc strd r0, r1, [sp, 0x20] | __asm ("strd r0, r1, [sp, 0x20]");
0x000896d0 ldr r0, [sp, 0x44] | r0 = var_44h;
0x000896d4 cmp r0, 0 |
| if (r0 == 0) {
0x000896d8 beq 0x896f4 | goto label_48;
| }
0x000896dc ldrd r0, r1, [sp, 0x10] | __asm ("ldrd r0, r1, [var_10h]");
0x000896e0 bl 0xa7150 | fcn_000a7150 (r0, r1);
| do {
0x000896e4 str r0, [r8, 0x90] | *((r8 + 0x90)) = r0;
0x000896e8 bl 0x14dc8 | srand (r0);
| label_18:
0x000896ec ldrd r2, r3, [sp, 0x20] | __asm ("ldrd r2, r3, [var_20h]");
0x000896f0 b 0x89644 | goto label_15;
| label_48:
0x000896f4 bl 0x14e40 | time (r0);
0x000896f8 b 0x896e4 |
| } while (1);
0x000896fc mov r0, 0 | r0 = 0;
0x00089700 bl 0x14e40 | r0 = time (r0);
| label_17:
0x00089704 bl 0xa6a74 | fcn_000a6a74 (r0);
0x00089708 b 0x8969c | goto label_16;
0x0008970c ldr r3, [sp, 0x44] | r3 = var_44h;
0x00089710 cmp r3, 0 |
| if (r3 != 0) {
0x00089714 bne 0x89730 | goto label_49;
| }
0x00089718 ldr r0, [r8, 0x34] | r0 = *((r8 + 0x34));
0x0008971c bl 0x87498 | r0 = fcn_00087498 (r0);
0x00089720 mov r7, r0 | r7 = r0;
| do {
0x00089724 mov r0, r7 | r0 = r7;
0x00089728 bl 0x1514c | strlen (r0);
0x0008972c b 0x89744 | goto label_50;
| label_49:
0x00089730 ldr r3, [r6] | r3 = *(r6);
0x00089734 tst r3, 2 |
| if ((r3 & 2) == 0) {
0x00089738 ldrne r3, [r6, 0x14] | r3 = *((r6 + 0x14));
| }
| if ((r3 & 2) == 0) {
0x0008973c ldrne r0, [r3] | r0 = *(r3);
| }
0x00089740 beq 0x89724 |
| } while ((r3 & 2) == 0);
| label_50:
0x00089744 bl 0xa6a50 | fcn_000a6a50 (r0);
0x00089748 b 0x8969c | goto label_16;
0x0008974c bl 0x18cdc | fcn_00018cdc ();
0x00089750 cmp r7, 0 |
| if (r7 == 0) {
0x00089754 beq 0x89840 | goto label_51;
| }
0x00089758 ldrb r3, [r7] | r3 = *(r7);
0x0008975c cmp r3, 0 |
| if (r3 == 0) {
0x00089760 beq 0x89840 | goto label_51;
| }
0x00089764 mov r0, r7 | r0 = r7;
0x00089768 bl 0x146c0 | r0 = system (r0);
0x0008976c asr r0, r0, 8 | r0 >>= 8;
0x00089770 b 0x89704 | goto label_17;
0x00089774 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00089778 cmp r3, 0 |
| if (r3 != 0) {
0x0008977c ldreq r3, [pc, 0x4b4] | r3 = obj.stdout;
| }
| if (r3 != 0) {
0x00089780 ldreq r0, [r3] | r0 = *(r3);
| }
| if (r3 != 0) {
0x00089784 beq 0x897ac |
0x00089788 cmp r7, 0 |
| if (r7 == 0) {
0x0008978c beq 0x897b4 | goto label_52;
| }
0x00089790 ldrb r3, [r7] | r3 = *(r7);
0x00089794 cmp r3, 0 |
| if (r3 == 0) {
0x00089798 beq 0x897b4 | goto label_52;
| }
0x0008979c mov r1, r7 | r1 = r7;
0x000897a0 ldr r0, [r8, -0x44] | r0 = *((r8 - 0x44));
0x000897a4 bl 0x870ac | r0 = fcn_000870ac (r0, r1);
0x000897a8 ldr r0, [r0] | r0 = *(r0);
| }
0x000897ac bl 0x147ec | fflush (r0);
0x000897b0 b 0x896ec | goto label_18;
| label_52:
0x000897b4 bl 0x18cdc | fcn_00018cdc ();
0x000897b8 b 0x896ec | goto label_18;
0x000897bc mov r1, r7 | r1 = r7;
0x000897c0 ldr r0, [r8, -0x44] | r0 = *((r8 - 0x44));
0x000897c4 bl 0x8705c | r0 = fcn_0008705c (r0, r1);
0x000897c8 subs fp, r0, 0 |
| if (fp != r0) {
0x000897cc moveq sb, fp | sb = fp;
| }
| if (fp == r0) {
0x000897d0 beq 0x89830 | goto label_53;
| }
0x000897d4 ldr r0, [fp] | r0 = *(fp);
0x000897d8 cmp r0, 0 |
| if (r0 == 0) {
0x000897dc beq 0x897f0 | goto label_54;
| }
0x000897e0 ldr r3, [fp, 0x14] | r3 = *(arg_14h);
0x000897e4 cmp r3, 0 |
| if (r3 == 0) {
0x000897e8 beq 0x89838 | goto label_55;
| }
0x000897ec bl 0x14438 | r0 = pclose (r0);
| do {
| label_54:
0x000897f0 mov sb, r0 | sb = r0;
0x000897f4 ldr r0, [fp, 4] | r0 = *(ptr);
0x000897f8 bl 0x152a8 | free (r0);
0x000897fc mov r1, r7 | r1 = r7;
0x00089800 ldr r0, [r8, -0x44] | r0 = *((r8 - 0x44));
0x00089804 bl 0x871d0 | fcn_000871d0 (r0, r1);
0x00089808 cmp sb, 0 |
| if (sb != 0) {
0x0008980c beq 0x89830 |
0x00089810 ldr r3, [pc, 0x444] |
0x00089814 ldr r3, [r3] | r3 = *(0x89c58);
0x00089818 ldr r0, [r3] | r0 = *(0x89c58);
0x0008981c bl 0xa6a74 | r0 = fcn_000a6a74 (r0);
0x00089820 mov r2, r0 | r2 = r0;
0x00089824 mov r3, r1 | r3 = r1;
0x00089828 ldr r0, [r8, 0x44] | r0 = *((r8 + 0x44));
0x0008982c bl 0x87b94 | fcn_00087b94 (r0);
| }
| label_53:
0x00089830 mov r0, sb | r0 = sb;
0x00089834 b 0x89704 | goto label_17;
| label_55:
0x00089838 bl 0x14dec | fclose (r0);
0x0008983c b 0x897f0 |
| } while (1);
| label_51:
0x00089840 mov r2, 0 | r2 = 0;
0x00089844 mov r3, 0 | r3 = 0;
0x00089848 strd r2, r3, [sp, 0x20] | __asm ("strd r2, r3, [sp, 0x20]");
0x0008984c b 0x896ec | goto label_18;
0x00089850 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00089854 mov r0, r4 | r0 = r4;
0x00089858 bl 0x8a03c | fcn_0008a03c (r0, r1);
0x0008985c b 0x89344 | goto label_11;
0x00089860 ldr r0, [sp, 0x44] | r0 = var_44h;
0x00089864 bl 0x8a5ec | r0 = fcn_0008a5ec (r0);
| label_21:
0x00089868 mov r1, r0 | r1 = r0;
0x0008986c ldr r0, [sp, 0x18] | r0 = var_18h;
0x00089870 bl 0x87a44 | fcn_00087a44 (r0, r1);
0x00089874 b 0x88e58 | goto label_1;
0x00089878 mov r0, sl | r0 = sl;
0x0008987c bl 0x86f20 | fcn_00086f20 (r0);
0x00089880 cmp fp, 0x4d |
0x00089884 mov r8, r0 | r8 = r0;
0x00089888 mov sb, r1 | sb = r1;
| if (fp == 0x4d) {
0x0008988c beq 0x89900 | goto label_56;
| }
| if (fp > 0x4d) {
0x00089890 bgt 0x898b0 | goto label_57;
| }
0x00089894 cmp fp, 0x21 |
| if (fp == 0x21) {
0x00089898 beq 0x89920 | goto label_58;
| }
0x0008989c cmp fp, 0x2d |
0x000898a0 addeq sb, r1, 0x80000000 | sb = r1 + 0x80000000;
| while (fp != 0x50) {
| label_19:
0x000898a4 mov r2, r8 | r2 = r8;
0x000898a8 mov r3, sb | r3 = sb;
0x000898ac b 0x89644 | goto label_15;
| label_57:
0x000898b0 cmp fp, 0x6d |
| if (fp == 0x6d) {
0x000898b4 beq 0x89910 | goto label_59;
| }
0x000898b8 cmp fp, 0x70 |
| if (fp == 0x70) {
0x000898bc beq 0x898e0 | goto label_60;
| }
0x000898c0 cmp fp, 0x50 |
0x000898c4 bne 0x898a4 |
| }
0x000898c8 mov r2, 0 | r2 = 0;
0x000898cc ldr r3, [pc, 0x374] | r3 = *(0x89c44);
0x000898d0 bl 0xa67a4 | r0 = fcn_000a67a4 (r0, r1);
| do {
0x000898d4 mov r8, r0 | r8 = r0;
0x000898d8 mov sb, r1 | sb = r1;
0x000898dc b 0x898ec | goto label_20;
| label_60:
0x000898e0 mov r2, 0 | r2 = 0;
0x000898e4 ldr r3, [pc, 0x35c] | r3 = *(0x89c44);
0x000898e8 bl 0xa67a4 | r0 = fcn_000a67a4 (r0, r1);
| label_20:
0x000898ec mov r2, r0 | r2 = r0;
0x000898f0 mov r3, r1 | r3 = r1;
0x000898f4 mov r0, sl | r0 = sl;
0x000898f8 bl 0x87b94 | fcn_00087b94 (r0);
0x000898fc b 0x898a4 | goto label_19;
| label_56:
0x00089900 mov r2, 0 | r2 = 0;
0x00089904 ldr r3, [pc, 0x33c] | r3 = *(0x89c44);
0x00089908 bl 0xa67a0 | fcn_000a67a0 (r0, r1);
0x0008990c b 0x898d4 |
| } while (1);
| label_59:
0x00089910 mov r2, 0 | r2 = 0;
0x00089914 ldr r3, [pc, 0x32c] | r3 = *(0x89c44);
0x00089918 bl 0xa67a0 | fcn_000a67a0 (r0, r1);
0x0008991c b 0x898ec | goto label_20;
| label_58:
0x00089920 mov r0, sl | r0 = sl;
0x00089924 bl 0x86fbc | r0 = fcn_00086fbc (r0);
0x00089928 subs r8, r0, 0 | r8 = r0 - 0;
| if (r8 == r0) {
0x0008992c movne r8, 0 | r8 = 0;
| }
| if (r8 != r0) {
0x00089930 ldreq sb, [pc, 0x310] | sb = *(0x00089c48);
| }
| if (r8 == r0) {
0x00089934 movne sb, r8 | sb = r8;
| }
0x00089938 b 0x898a4 | goto label_19;
0x0008993c mov r0, sl | r0 = sl;
0x00089940 bl 0x86f20 | r0 = fcn_00086f20 (r0);
0x00089944 bl 0xa70f4 | r0 = fcn_000a70f4 (r0, r1);
0x00089948 subs sb, r0, 0 | sb = r0 - 0;
| if (sb < r0) {
0x0008994c ldrlt r0, [pc, 0x31c] | r0 = "Access to negative field";
| goto label_61;
| }
| if (sb < r0) {
| label_61:
0x00089950 blt 0x88ea0 | goto label_12;
| }
| if (sb != r0) {
0x00089954 ldreq r3, [r8, 0x34] | r3 = *((r8 + 0x34));
| }
| if (sb != r0) {
0x00089958 beq 0x89988 |
0x0008995c bl 0x877b8 | fcn_000877b8 ();
0x00089960 ldr r3, [r8, -0x34] | r3 = *((r8 - 0x34));
0x00089964 cmp r3, sb |
| if (r3 < sb) {
0x00089968 bge 0x89974 |
0x0008996c mov r0, sb | r0 = sb;
0x00089970 bl 0x86c88 | fcn_00086c88 (r0, r1);
| }
0x00089974 mov r3, 0x18 | r3 = 0x18;
0x00089978 mul r5, r3, sb | r5 = r3 * sb;
0x0008997c ldr r3, [r8, -0x2c] | r3 = *((r8 - 0x2c));
0x00089980 sub r5, r5, 0x18 | r5 -= 0x18;
0x00089984 add r3, r3, r5 | r3 += r5;
| }
0x00089988 str r3, [sp, 0x18] | var_18h = r3;
0x0008998c b 0x88e58 | goto label_1;
0x00089990 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00089994 and r3, r3, 0xff00 | r3 &= 0xff00;
0x00089998 cmp r3, 0x1300 |
| if (r3 == 0x1300) {
0x0008999c ldrne r2, [pc, 0x2d0] | r2 = *((pc + 0x2d0));
| }
| if (r3 == 0x1300) {
0x000899a0 bne 0x899b0 |
0x000899a4 ldr r0, [r8, 0x30] | r0 = *((r8 + 0x30));
0x000899a8 bl 0x87498 | r0 = fcn_00087498 (r0);
0x000899ac mov r2, r0 | r2 = r0;
| }
0x000899b0 ldr r3, [sp, 0x2c] | r3 = filename;
0x000899b4 mov r1, r7 | r1 = r7;
0x000899b8 ldr r0, [pc, 0x2b8] | r0 = *(0x89c74);
0x000899bc bl 0x18d1c | fcn_00018d1c ();
0x000899c0 b 0x89868 | goto label_21;
0x000899c4 mov r0, r6 | r0 = r6;
0x000899c8 bl 0x86fbc | r0 = fcn_00086fbc (r0);
0x000899cc cmp r0, 0 |
0x000899d0 beq 0x899e0 |
| while (r0 == 0) {
0x000899d4 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000899d8 bl 0x8a800 | fcn_0008a800 (r0);
0x000899dc b 0x893f0 | goto label_13;
0x000899e0 mov r2, 0 | r2 = 0;
| label_40:
0x000899e4 mov r3, 0 | r3 = 0;
0x000899e8 b 0x89644 | goto label_15;
0x000899ec mov r0, r6 | r0 = r6;
0x000899f0 bl 0x86fbc | r0 = fcn_00086fbc (r0);
0x000899f4 cmp r0, 0 |
0x000899f8 beq 0x899d4 |
| }
0x000899fc mov r2, 0 | r2 = 0;
0x00089a00 b 0x89380 | goto label_22;
0x00089a04 mov r0, sl | r0 = sl;
0x00089a08 bl 0x86f20 | fcn_00086f20 (r0);
0x00089a0c sub fp, fp, 0x25 |
0x00089a10 mov r8, r0 | r8 = r0;
0x00089a14 mov sb, r1 | sb = r1;
0x00089a18 cmp fp, 0xa |
| if (fp > 0xa) {
| /* switch table (11 cases) at 0x89a24 */
0x00089a1c ldrls pc, [pc, fp, lsl 2] | offset_3 = fp << 2;
| pc = *((pc + offset_3));
| }
0x00089a20 b 0x89a64 | goto label_62;
0x00089a50 mov r2, r0 | r2 = r0;
0x00089a54 mov r3, r1 | r3 = r1;
0x00089a58 ldrd r0, r1, [sp, 0x10] | __asm ("ldrd r0, r1, [var_10h]");
0x00089a5c bl 0xa67a4 | fcn_000a67a4 (r0, r1);
| do {
| label_23:
0x00089a60 strd r0, r1, [sp, 0x10] | __asm ("strd r0, r1, [sp, 0x10]");
| label_62:
0x00089a64 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00089a68 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00089a6c and r0, r3, 0xff00 | r0 = r3 & 0xff00;
0x00089a70 cmp r0, 0x1000 |
| if (r0 == 0x1000) {
0x00089a74 movne r1, r6 | r1 = r6;
| }
0x00089a78 ldrd r2, r3, [sp, 0x10] | __asm ("ldrd r2, r3, [var_10h]");
0x00089a7c mov r0, r1 | r0 = r1;
0x00089a80 bl 0x87b94 | fcn_00087b94 (r0);
0x00089a84 b 0x89344 | goto label_11;
0x00089a88 mov r2, r0 | r2 = r0;
0x00089a8c mov r3, r1 | r3 = r1;
| label_24:
0x00089a90 ldrd r0, r1, [sp, 0x10] | __asm ("ldrd r0, r1, [var_10h]");
0x00089a94 bl 0xa67a0 | fcn_000a67a0 (r0, r1);
0x00089a98 b 0x89a60 |
| } while (1);
0x00089a9c mov r2, r0 | r2 = r0;
0x00089aa0 mov r3, r1 | r3 = r1;
0x00089aa4 ldrd r0, r1, [sp, 0x10] | __asm ("ldrd r0, r1, [var_10h]");
0x00089aa8 bl 0xa6b58 | fcn_000a6b58 (r0);
0x00089aac b 0x89a60 | goto label_23;
0x00089ab0 mov r2, 0 | r2 = 0;
0x00089ab4 mov r3, 0 | r3 = 0;
0x00089ab8 bl 0xa7090 | r0 = fcn_000a7090 (r0, r1);
0x00089abc cmp r0, 0 |
0x00089ac0 beq 0x89acc |
| while (r0 != 0) {
0x00089ac4 ldr r0, [pc, 0x1b0] | r0 = "_s_s_s";
0x00089ac8 b 0x88ea0 | goto label_12;
0x00089acc mov r2, r8 | r2 = r8;
0x00089ad0 mov r3, sb | r3 = sb;
0x00089ad4 ldrd r0, r1, [sp, 0x10] | __asm ("ldrd r0, r1, [var_10h]");
0x00089ad8 bl 0xa6dc4 | fcn_000a6dc4 (r0);
0x00089adc b 0x89a60 | goto label_23;
0x00089ae0 mov r2, 0 | r2 = 0;
0x00089ae4 mov r3, 0 | r3 = 0;
0x00089ae8 bl 0xa7090 | r0 = fcn_000a7090 (r0, r1);
0x00089aec cmp r0, 0 |
0x00089af0 bne 0x89ac4 |
| }
0x00089af4 mov r2, r8 | r2 = r8;
0x00089af8 mov r3, sb | r3 = sb;
0x00089afc ldrd r0, r1, [sp, 0x10] | __asm ("ldrd r0, r1, [var_10h]");
0x00089b00 bl 0xa6dc4 | r0 = fcn_000a6dc4 (r0);
0x00089b04 bl 0xa78d4 | r0 = fcn_000a78d4 (r0, r1);
0x00089b08 bl 0xa6af8 | fcn_000a6af8 (r0, r1);
0x00089b0c mov r2, r8 | r2 = r8;
0x00089b10 mov r3, sb | r3 = sb;
0x00089b14 bl 0xa6b58 | r0 = fcn_000a6b58 (r0);
0x00089b18 mov r2, r0 | r2 = r0;
0x00089b1c mov r3, r1 | r3 = r1;
0x00089b20 b 0x89a90 | goto label_24;
0x00089b24 mov r0, r6 | r0 = r6;
0x00089b28 bl 0x86f20 | fcn_00086f20 (r0);
0x00089b2c ldr r3, [r6] | r3 = *(r6);
0x00089b30 ldr sb, [pc, 0x148] | sb = *(0x00089c80);
0x00089b34 eor r3, r3, 0x4000 | r3 ^= 0x4000;
0x00089b38 tst r3, sb |
| if ((r3 & sb) == 0) {
0x00089b3c beq 0x89bd4 | goto label_63;
| }
0x00089b40 mov r0, sl | r0 = sl;
0x00089b44 bl 0x86f20 | fcn_00086f20 (r0);
0x00089b48 ldr r3, [sl] | r3 = *(sl);
0x00089b4c eor r3, r3, 0x4000 | r3 ^= 0x4000;
0x00089b50 tst r3, sb |
| if ((r3 & sb) == 0) {
0x00089b54 beq 0x89bd4 | goto label_63;
| }
0x00089b58 mov r0, r6 | r0 = r6;
0x00089b5c bl 0x86f20 | r0 = fcn_00086f20 (r0);
0x00089b60 mov r8, r0 | r8 = r0;
0x00089b64 mov r0, sl | r0 = sl;
0x00089b68 mov sb, r1 | sb = r1;
0x00089b6c bl 0x86f20 | r0 = fcn_00086f20 (r0);
0x00089b70 mov r2, r0 | r2 = r0;
0x00089b74 mov r3, r1 | r3 = r1;
0x00089b78 mov r0, r8 | r0 = r8;
0x00089b7c mov r1, sb | r1 = sb;
0x00089b80 bl 0xa67a0 | fcn_000a67a0 (r0, r1);
| do {
0x00089b84 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00089b88 and r3, r3, 0x7e | r3 &= 0x7e;
0x00089b8c cmp r3, 2 |
| if (r3 == 2) {
0x00089b90 beq 0x89c10 | goto label_64;
| }
0x00089b94 cmp r3, 4 |
| if (r3 == 4) {
0x00089b98 beq 0x89c20 | goto label_65;
| }
0x00089b9c cmp r3, 0 |
| if (r3 == 0) {
0x00089ba0 bne 0x89bbc |
0x00089ba4 mov r2, 0 | r2 = 0;
0x00089ba8 mov r3, 0 | r3 = 0;
0x00089bac bl 0xa70e0 | r0 = fcn_000a70e0 ();
| label_26:
0x00089bb0 adds r3, r0, 0 | r3 = r0 + 0;
| if (r3 == r0) {
0x00089bb4 movne r3, 1 | r3 = 1;
| }
0x00089bb8 str r3, [sp, 0x30] | var_30h = r3;
| }
0x00089bbc ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00089bc0 mvn r0, r3 | r0 = ~r3;
0x00089bc4 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00089bc8 and r0, r0, 1 | r0 &= 1;
0x00089bcc eor r0, r0, r3 | r0 ^= r3;
0x00089bd0 b 0x893f0 | goto label_13;
| label_63:
0x00089bd4 mov r0, r6 | r0 = r6;
0x00089bd8 bl 0x87498 | r0 = fcn_00087498 (r0);
0x00089bdc mov sb, r0 | sb = r0;
0x00089be0 mov r0, sl | r0 = sl;
0x00089be4 bl 0x87498 | fcn_00087498 (r0);
0x00089be8 ldr r3, [r8, -0x1c] | r3 = *((r8 - 0x1c));
0x00089bec cmp r3, 0 |
0x00089bf0 mov r1, r0 | r1 = r0;
0x00089bf4 mov r0, sb | r0 = sb;
| if (r3 == 0) {
0x00089bf8 beq 0x89c08 | goto label_66;
| }
0x00089bfc bl 0x14c0c | r0 = strcasecmp (r0, r1);
| label_25:
0x00089c00 bl 0xa6a74 | fcn_000a6a74 (r0);
0x00089c04 b 0x89b84 |
| } while (1);
| label_66:
0x00089c08 bl 0x14ed0 | strcmp (r0, r1);
0x00089c0c b 0x89c00 | goto label_25;
| label_64:
0x00089c10 mov r2, 0 | r2 = 0;
0x00089c14 mov r3, 0 | r3 = 0;
0x00089c18 bl 0xa70cc | fcn_000a70cc (r0, r1);
0x00089c1c b 0x89bb0 | goto label_26;
| label_65:
0x00089c20 mov r2, 0 | r2 = 0;
0x00089c24 mov r3, 0 | r3 = 0;
0x00089c28 bl 0xa7090 | fcn_000a7090 (r0, r1);
0x00089c2c b 0x89bb0 | goto label_26;
| }
[*] Function popen used 4 times busybox