[*] Binary protection state of vftpd
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH No Symbols
[*] Function strcpy tear down of vftpd
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/bin/vftpd @ 0x37e8 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.000037e8 () | void fcn_000037e8 (int16_t arg_8h, int16_t arg_ch, int16_t arg_10h, int16_t arg_14h, int16_t arg_18h, char * str, int16_t arg_20h, char * s1, int16_t arg_28h, FILE * fildes, int16_t arg_30h, char * dest, int16_t arg_38h, int16_t arg_3ch, int16_t arg_40h, int16_t arg_44h, int16_t arg_48h, int16_t arg_4ch, int16_t arg_5ch, int16_t arg_60h, int16_t arg_64h, int16_t arg_68h, int16_t arg_6ch, int16_t arg_90h, int16_t arg_101h, char * arg_354h, int16_t arg_396h, int16_t arg_397h, int16_t arg_398h, int16_t arg_39ch, char * path, char * s) {
| int16_t var_0h;
| int16_t var_4h;
| label_2:
0x00002142 ldr r3, [sp, 0x3c] | r3 = *(arg_3ch);
0x00002144 ldr r3, [r3] | r3 = *(r3);
0x00002146 cmp r3, 0 |
| if (r3 != 0) {
0x00002148 bne.w 0x24c8 | goto label_36;
| }
0x0000214c mov sb, r3 | sb = r3;
0x0000214e add.w sl, r4, 1 | sl = r4 + 1;
0x00002152 add r7, sp, 0x90 | r7 += arg_90h;
| do {
| label_0:
0x00002154 movs r2, 0x80 | r2 = 0x80;
0x00002156 movs r1, 0 | r1 = 0;
0x00002158 mov r0, r6 | r0 = r6;
0x0000215a mov.w r5, 0x384 | r5 = 0x384;
0x0000215e blx 0x1934 | memset (r0, r1, r2);
0x00002162 mov r0, r4 | r0 = r4;
0x00002164 blx 0x1724 | fdelt_chk ();
0x00002168 movs r3, 0 | r3 = 0;
0x0000216a str r7, [sp] | *(sp) = r7;
0x0000216c ldr r2, [sp, 0x28] | r2 = *(arg_28h);
0x0000216e mov r1, r6 | r1 = r6;
0x00002170 strd r5, r3, [r7] | __asm ("strd r5, r3, [r7]");
0x00002174 ldr.w r3, [r6, r0, lsl 2] | offset_0 = r0 << 2;
| r3 = *((r6 + offset_0));
0x00002178 orrs r3, r2 | r3 |= r2;
0x0000217a str.w r3, [r6, r0, lsl 2] | __asm ("str.w r3, [r6, r0, lsl 2]");
0x0000217e movs r3, 0 | r3 = 0;
0x00002180 mov r2, r3 | r2 = r3;
0x00002182 mov r0, sl | r0 = sl;
0x00002184 blx 0x16b8 | r0 = select ();
0x00002188 cmp r0, 0 |
| if (r0 <= 0) {
0x0000218a ble.w 0x2490 | goto label_37;
| }
0x0000218e add r5, sp, 0x398 | r5 += arg_398h;
0x00002190 rsb.w r2, sb, 0x100 | r2 = 0x100 - sb;
0x00002194 add.w r1, r5, sb | r1 = r5 + sb;
0x00002198 mov r0, r4 | r0 = r4;
0x0000219a blx 0x1640 | r0 = read (r0, r1, r2);
0x0000219e cmp r0, 0 |
| if (r0 < 0) {
0x000021a0 blt.w 0x239e | goto label_38;
| }
| if (r0 == 0) {
0x000021a4 beq.w 0x24c8 | goto label_36;
| }
0x000021a8 add sb, r0 | sb += r0;
0x000021aa cmp.w sb, 0xff |
| if (sb > 0xff) {
0x000021ae bgt.w 0x23b8 | goto label_39;
| }
0x000021b0 strh r3, [r0, 8] | *((r0 + 8)) = r3;
| label_1:
0x000021b2 addw r3, sp, 0x397 | __asm ("addw r3, arg_397h");
0x000021b6 ldrb.w r2, [r3, sb] | r2 = *((r3 + sb));
0x000021b8 movs r0, 9 | r0 = 9;
0x000021ba cmp r2, 0xa |
0x000021bc bne 0x2154 |
| } while (r2 != 0xa);
0x000021be b 0x23bc | goto label_40;
| label_38:
0x0000239e blx 0x18d4 | r0 = errno_location ();
0x000023a2 ldr r3, [r0] | r3 = *(r0);
0x000023a4 cmp r3, 0xb |
| if (r3 != 0xb) {
0x000023a6 beq 0x23ae |
0x000023a8 cmp r3, 4 |
| if (r3 != 4) {
0x000023aa bne.w 0x24c8 | goto label_36;
| }
| }
0x000023ae cmp.w sb, 0 |
| if (sb == 0) {
0x000023b2 beq.w 0x2154 | goto label_0;
| }
0x000023b6 b 0x21b2 | goto label_1;
| label_39:
0x000023b8 addw r3, sp, 0x397 | __asm ("addw r3, arg_397h");
| label_40:
0x000023bc addw r2, sp, 0x396 | __asm ("addw r2, arg_396h");
0x000023c0 ldr.w sl, [pc, 0x414] | sl = *(0x000027d8);
0x000023c4 ldrb.w r2, [r2, sb] | r2 = *((r2 + sb));
0x000023c8 add sl, pc | sl += pc;
0x000023ca cmp r2, 0xd |
0x000023cc mov.w r2, 0 | r2 = 0;
0x000023d0 it eq |
| if (r2 != 0xd) {
0x000023d2 addeq sb, sb, -1 | sb += -1;
| }
0x000023d6 strb.w r2, [r3, sb] | *((r3 + sb)) = r2;
0x000023da ldr.w sb, [sl, 0x38] | sb = *((sl + 0x38));
0x000023de mov r0, sb | r0 = sb;
0x000023e0 blx 0x1898 | strlen (r0);
0x000023e4 mov r1, sb | r1 = sb;
0x000023e6 mov r2, r0 | r2 = r0;
0x000023e8 mov r0, r5 | r0 = r5;
0x000023ea blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
0x000023ee cmp r0, 0 |
| if (r0 == 0) {
0x000023f0 beq 0x24c8 | goto label_36;
| }
0x000023f2 ldr.w sb, [sl, 0x3c] | sb = *((sl + 0x3c));
0x000023f6 mov r0, sb | r0 = sb;
0x000023f8 blx 0x1898 | strlen (r0);
0x000023fc mov r1, sb | r1 = sb;
0x000023fe mov r2, r0 | r2 = r0;
0x00002400 mov r0, r5 | r0 = r5;
0x00002402 blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
0x00002406 cmp r0, 0 |
| if (r0 == 0) {
0x00002408 beq.w 0x3206 | goto label_41;
| }
0x0000240c ldr.w sb, [sl, 0x48] | sb = *((sl + 0x48));
0x00002410 mov r0, sb | r0 = sb;
0x00002412 blx 0x1898 | strlen (r0);
0x00002416 mov r1, sb | r1 = sb;
0x00002418 mov r2, r0 | r2 = r0;
0x0000241a mov r0, r5 | r0 = r5;
0x0000241c blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
0x00002420 cmp r0, 0 |
| if (r0 == 0) {
0x00002422 beq.w 0x32aa | goto label_42;
| }
0x00002426 ldr.w sb, [sl, 0x50] | sb = *((sl + 0x50));
0x0000242a mov r0, sb | r0 = sb;
0x0000242c blx 0x1898 | strlen (r0);
0x00002430 mov r1, sb | r1 = sb;
0x00002432 mov r2, r0 | r2 = r0;
0x00002434 mov r0, r5 | r0 = r5;
0x00002436 blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
0x0000243a cmp r0, 0 |
| if (r0 == 0) {
0x0000243c beq.w 0x32a2 | goto label_43;
| }
0x00002440 ldr r3, [sp, 0x18] | r3 = *(arg_18h);
0x00002442 cmp r3, 1 |
| if (r3 == 1) {
0x00002444 beq.w 0x32b2 | goto label_44;
| }
0x00002448 cmp r3, 2 |
| if (r3 == 2) {
0x0000244a beq 0x24cc | goto label_45;
| }
0x0000244c cmp r3, 0 |
| if (r3 != 0) {
0x0000244e bne.w 0x2142 | goto label_2;
| }
0x00002452 ldr.w sb, [sl, 0x58] | sb = *((sl + 0x58));
0x00002456 mov r0, sb | r0 = sb;
0x00002458 blx 0x1898 | strlen (r0);
0x0000245c mov r1, sb | r1 = sb;
0x0000245e mov r7, r0 | r7 = r0;
0x00002460 mov r2, r0 | r2 = r0;
0x00002462 mov r0, r5 | r0 = r5;
0x00002464 blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
| if (r0 == 0) {
0x00002468 cbnz r0, 0x2478 |
0x0000246a mov r0, r5 | r0 = r5;
0x0000246c blx 0x1898 | strlen (r0);
0x00002470 adds r3, r7, 1 | r3 = r7 + 1;
0x00002472 cmp r0, r3 |
| if (r0 > r3) {
0x00002474 bhi.w 0x3230 | goto label_46;
| }
| }
0x00002478 ldr r3, [pc, 0x360] |
0x0000247a add r3, pc | r3 = 0x4c5a;
0x0000247c ldr r5, [r3, 0x60] | r5 = *(0x4cba);
| label_3:
0x0000247e mov r0, r5 | r0 = r5;
0x00002480 blx 0x1898 | strlen (r0);
0x00002484 mov r1, r5 | r1 = r5;
0x00002486 mov r2, r0 | r2 = r0;
0x00002488 mov r0, r4 | r0 = r4;
0x0000248a blx 0x195c | fcn_0000195c ();
0x0000248e b 0x2142 | goto label_2;
| label_37:
0x00002490 mov fp, r4 |
| if (r0 == r3) {
0x00002492 beq.w 0x3292 | goto label_47;
| }
| do {
| label_24:
0x00002496 ldr r3, [pc, 0x348] |
0x00002498 add r3, pc | r3 = 0x4c7e;
0x0000249a ldr.w r4, [r3, 0xe8] | r4 = *(0x4d66);
0x0000249e mov r0, r4 | r0 = r4;
0x000024a0 blx 0x1898 | strlen (r0);
0x000024a4 mov r1, r4 | r1 = r4;
0x000024a6 mov r2, r0 | r2 = r0;
0x000024a8 mov r0, fp | r0 = fp;
0x000024aa blx 0x195c | fcn_0000195c ();
0x000024ae mov r0, fp | r0 = fp;
0x000024b0 blx 0x1ab4 | fdipc_client_socket ();
0x000024b4 ldr r2, [pc, 0x32c] |
0x000024b6 movs r1, 1 | r1 = 1;
0x000024b8 ldr r3, [sp, 0x20] | r3 = *(arg_20h);
0x000024ba movs r0, 0x26 | r0 = 0x26;
0x000024bc add r2, pc | r2 = 0x4ca4;
0x000024be blx 0x19cc | fcn_000019cc ();
| label_32:
0x000024c2 mov r0, fp | r0 = fp;
0x000024c4 blx 0x1874 | exit (r0);
| label_36:
0x000024c8 mov fp, r4 |
0x000024ca b 0x2496 |
| } while (1);
| label_45:
0x000024cc ldr.w r1, [sl, 0x70] | r1 = *((sl + 0x70));
0x000024d0 mov r0, r1 | r0 = r1;
0x000024d2 str r1, [sp, 0x1c] | *(str) = r1;
0x000024d4 blx 0x1898 | strlen (r0);
0x000024d8 ldr r1, [sp, 0x1c] | r1 = *(str);
0x000024da mov sb, r0 | sb = r0;
0x000024dc mov r2, r0 | r2 = r0;
0x000024de mov r0, r5 | r0 = r5;
0x000024e0 blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
| if (r0 == 0) {
0x000024e4 cbnz r0, 0x24f6 |
0x000024e6 mov r0, r5 | r0 = r5;
0x000024e8 blx 0x1898 | strlen (r0);
0x000024ec add.w r3, sb, 1 | r3 = sb + 1;
0x000024f0 cmp r0, r3 |
| if (r0 > r3) {
0x000024f2 bhi.w 0x33c2 | goto label_48;
| }
| }
0x000024f6 ldr r3, [pc, 0x2f0] |
0x000024f8 add r3, pc | r3 = 0x4ce6;
0x000024fa ldr.w sb, [r3, 0x78] | sb = *(0x4d5e);
0x000024fe str r3, [sp, 0x1c] | *(str) = r3;
0x00002500 mov r0, sb | r0 = sb;
0x00002502 blx 0x1898 | strlen (r0);
0x00002506 mov r1, sb | r1 = sb;
0x00002508 mov r2, r0 | r2 = r0;
0x0000250a mov r0, r5 | r0 = r5;
0x0000250c blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
0x00002510 cmp r0, 0 |
| if (r0 != 0) {
0x00002512 beq 0x25e4 |
0x00002514 ldr r3, [sp, 0x1c] | r3 = *(str);
0x00002516 ldr.w sb, [r3, 0x7c] | sb = *((r3 + 0x7c));
0x0000251a mov r0, sb | r0 = sb;
0x0000251c blx 0x1898 | strlen (r0);
0x00002520 mov r1, sb | r1 = sb;
0x00002522 mov r2, r0 | r2 = r0;
0x00002524 mov r0, r5 | r0 = r5;
0x00002526 blx 0x18ec | strncasecmp (r0, r1, r2);
0x0000252a ldr r3, [sp, 0x1c] | r3 = *(str);
0x0000252c mov sb, r0 | sb = r0;
0x0000252e ldr.w sl, [r3, 0x80] | sl = *((r3 + 0x80));
0x00002532 mov r0, sl | r0 = sl;
0x00002534 blx 0x1898 | strlen (r0);
0x00002538 mov r1, sl | r1 = sl;
0x0000253a mov r2, r0 | r2 = r0;
0x0000253c mov r0, r5 | r0 = r5;
0x0000253e blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
0x00002542 mov sl, r0 | sl = r0;
0x00002544 cmp.w sb, 0 |
| if (sb == 0) {
0x00002548 beq.w 0x26d2 | goto label_49;
| }
0x0000254c cmp r0, 0 |
| if (r0 == 0) {
0x0000254e beq.w 0x26d2 | goto label_49;
| }
0x00002552 ldr r3, [sp, 0x1c] | r3 = *(str);
0x00002554 ldr.w sl, [r3, 0x84] | sl = *((r3 + 0x84));
0x00002558 mov r0, sl | r0 = sl;
0x0000255a blx 0x1898 | strlen (r0);
0x0000255e mov r1, sl | r1 = sl;
0x00002560 mov r2, r0 | r2 = r0;
0x00002562 mov sb, r0 | sb = r0;
0x00002564 mov r0, r5 | r0 = r5;
0x00002566 blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
0x0000256a mov sl, r0 | sl = r0;
| if (r0 == 0) {
0x0000256c cbnz r0, 0x257c |
0x0000256e mov r0, r5 | r0 = r5;
0x00002570 blx 0x1898 | strlen (r0);
0x00002574 add.w r3, sb, 1 | r3 = sb + 1;
0x00002578 cmp r0, r3 |
| if (r0 > r3) {
0x0000257a bhi 0x261a | goto label_50;
| }
| }
0x0000257c ldr r3, [pc, 0x26c] |
0x0000257e add r3, pc | r3 = 0x4d6e;
0x00002580 ldr.w sl, [r3, 0x8c] | sl = *(0x4dfa);
0x00002584 str r3, [sp, 0x30] | *(arg_30h) = r3;
0x00002586 mov r0, sl | r0 = sl;
0x00002588 blx 0x1898 | strlen (r0);
0x0000258c mov r1, sl | r1 = sl;
0x0000258e mov sb, r0 | sb = r0;
0x00002590 mov r2, r0 | r2 = r0;
0x00002592 mov r0, r5 | r0 = r5;
0x00002594 blx 0x18ec | strncasecmp (r0, r1, r2);
0x00002596 invalid |
0x0000259a mov r0, r5 | r0 = r5;
0x0000259c blx 0x1898 | strlen (r0);
0x000025a0 add.w r3, sb, 1 | r3 = sb + 1;
0x000025a4 cmp r0, r3 |
| if (r0 > r3) {
0x000025a6 bhi.w 0x2e96 | goto label_51;
| }
0x000025aa ldr.w sb, [pc, 0x244] | sb = *(0x000027f0);
0x000025ae add sb, pc | sb += pc;
0x000025b0 ldr.w sl, [sb, 0x9c] | sl = *((sb + 0x9c));
0x000025b4 mov r0, sl | r0 = sl;
0x000025b6 blx 0x1898 | strlen (r0);
0x000025ba mov r1, sl | r1 = sl;
0x000025bc mov r2, r0 | r2 = r0;
0x000025be mov r0, r5 | r0 = r5;
0x000025c0 blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
0x000025c4 cmp r0, 0 |
| if (r0 != 0) {
0x000025c6 bne.w 0x280c | goto label_52;
| }
0x000025ca ldrb r3, [r5, 5] | r3 = *((r5 + 5));
0x000025cc and r2, r3, 0xf7 | r2 = r3 & 0xf7;
0x000025d0 cmp r2, 0x41 |
| if (r2 != 0x41) {
0x000025d2 bne.w 0x26f8 | goto label_53;
| }
0x000025d6 ldr r2, [pc, 0x21c] |
0x000025d8 ldr.w r5, [sb, 0x54] | r5 = *((sb + 0x54));
0x000025dc add r2, pc | r2 = 0x4dd6;
0x000025de strb.w r3, [r2, 0x74] | *((r2 + 0x74)) = r3;
0x000025e2 b 0x247e | goto label_3;
| }
0x000025e4 ldrb.w sl, [r8, 0xc] | sl = *((r8 + 0xc));
0x000025e8 cmp.w sl, 0 |
| if (sl != 0) {
0x000025ec bne.w 0x2e6c | goto label_54;
| }
0x000025f0 movs r0, 2 | r0 = 2;
0x000025f2 bl 0x3a0c | r0 = fcn_00003a0c (r0);
0x000025f6 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 < r0) {
0x000025f8 blt 0x26c2 | goto label_55;
| }
0x000025fa movs r3, 0x80 | r3 = 0x80;
0x000025fc mov r2, r7 | r2 = r7;
0x000025fe mov r1, r6 | r1 = r6;
0x00002600 mov r0, r4 | r0 = r4;
0x00002602 str r3, [r7] | *(r7) = r3;
0x00002604 blx 0x1a2c | r0 = fcn_00001a2c ();
0x00002608 cmp r0, 0 |
| if (r0 < 0) {
0x0000260a blt 0x2616 | goto label_56;
| }
0x0000260c ldrh r3, [r6] | r3 = *(r6);
0x0000260e cmp r3, 2 |
| if (r3 == 2) {
0x00002610 beq 0x26ca | goto label_57;
| }
0x00002612 cmp r3, 0xa |
0x00002614 beq 0x2688 |
| while (sb != r2) {
| label_56:
0x00002616 mov sb, sl | sb = sl;
0x00002618 b 0x26a0 | goto label_58;
| label_50:
0x0000261a addw r0, sp, 0x39d | __asm ("addw r0, path");
0x0000261e bl 0x3b2c | fcn_00003b2c (r0);
0x00002622 add r3, sp, 0x6c | r3 += arg_6ch;
0x00002624 add r2, sp, 0x68 | r2 += arg_68h;
0x00002626 mov r1, sl | r1 = sl;
0x00002628 strd sl, r4, [sp] | __asm ("strd sl, r4, [sp]");
0x0000262c mov sb, r0 | sb = r0;
0x0000262e bl 0x45cc | r0 = fcn_000045cc (r0, r1, r2, r3, r4, r5, r6);
0x00002632 mov r5, r0 | r5 = r0;
0x00002634 cmp r0, 0 |
| if (r0 == 0) {
0x00002636 beq.w 0x2a7c | goto label_59;
| }
| label_5:
0x0000263a cmp r5, 0 |
| if (r5 < 0) {
0x0000263c blt.w 0x299e | goto label_4;
| }
0x00002640 ldr.w sb, [pc, 0x1b4] | sb = *(0x000027f8);
0x00002644 add sb, pc | sb += pc;
0x00002646 ldr.w r7, [sb, 0x1c] | r7 = *((sb + 0x1c));
0x0000264a mov r0, r7 | r0 = r7;
0x0000264c blx 0x1898 | strlen (r0);
0x00002650 mov r1, r7 | r1 = r7;
0x00002652 mov r2, r0 | r2 = r0;
0x00002654 mov r0, r4 | r0 = r4;
0x00002656 blx 0x195c | fcn_0000195c ();
0x0000265a mov r0, r8 | r0 = r8;
0x0000265c bl 0x3c44 | r0 = fcn_00003c44 (r0);
0x00002660 subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 < r0) {
0x00002662 blt.w 0x2ca4 | goto label_60;
| }
0x00002666 ldr r3, [pc, 0x194] |
0x00002668 add r3, pc | r3 = 0x4e6a;
0x0000266a ldrb.w r3, [r3, 0x74] | r3 = *((r3 + 0x74));
0x0000266e cmp r3, 0x49 |
| if (r3 == 0x49) {
0x00002670 beq.w 0x2c50 | goto label_61;
| }
0x00002674 cmp r3, 0x41 |
| if (r3 == 0x41) {
0x00002676 beq.w 0x2da2 | goto label_62;
| }
0x0000267a ldr r2, [pc, 0x184] |
0x0000267c movs r1, 1 | r1 = 1;
0x0000267e movs r0, 3 | r0 = 3;
0x00002680 add r2, pc | r2 = 0x4e86;
0x00002682 blx 0x19cc | fcn_000019cc ();
0x00002686 b 0x2142 | goto label_2;
0x00002688 ldrd r2, r3, [r6, 8] | __asm ("ldrd r2, r3, [r6, 8]");
0x0000268c orrs.w sb, r2, r3 | sb = r2 | r3;
0x00002690 bne 0x2616 |
| }
0x00002692 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x00002694 cmn.w r3, 0x10000 |
| if (r3 != 0x10000) {
0x00002698 bne 0x26a0 | goto label_58;
| }
0x0000269a ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x0000269c rev.w sb, r3 | r3 = SWAP32 (sb);
| do {
| label_58:
0x000026a0 mov r2, r7 | r2 = r7;
0x000026a2 mov r1, r6 | r1 = r6;
0x000026a4 mov r0, r5 | r0 = r5;
0x000026a6 blx 0x1a2c | r0 = fcn_00001a2c ();
0x000026aa cmp r0, 0 |
| if (r0 >= 0) {
0x000026ac blt 0x26bc |
0x000026ae ldrh r3, [r6] | r3 = *(r6);
0x000026b0 cmp r3, 2 |
| if (r3 == 2) {
0x000026b2 beq.w 0x2d4c | goto label_63;
| }
0x000026b4 strh r3, [r1, 0x1a] | *((r1 + 0x1a)) = r3;
0x000026b6 cmp r3, 0xa |
| if (r3 == 0xa) {
0x000026b8 beq.w 0x2d38 | goto label_64;
| }
| }
| label_11:
0x000026bc mov r0, r5 | r0 = r5;
0x000026be blx 0x1ab4 | fdipc_client_socket ();
| label_55:
0x000026c2 ldr r3, [pc, 0x140] |
0x000026c4 add r3, pc | r3 = 0x4ece;
0x000026c6 ldr r5, [r3, 0x14] | r5 = *(0x4ee2);
0x000026c8 b 0x247e | goto label_3;
| label_57:
0x000026ca ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x000026cc rev.w sb, r3 | r3 = SWAP32 (sb);
0x000026d0 b 0x26a0 |
| } while (1);
| label_49:
0x000026d2 mov r0, r5 | r0 = r5;
0x000026d4 blx 0x1898 | r0 = strlen (r0);
0x000026d8 cmp r0, 5 |
| if (r0 >= 5) {
0x000026da bls 0x26e4 |
0x000026dc ldrb r3, [r5, 5] | r3 = *((r5 + 5));
0x000026de cmp r3, 0x2d |
| if (r3 != 0x2d) {
0x000026e0 bne.w 0x31cc | goto label_65;
| }
| }
0x000026e4 ldr r0, [pc, 0x120] |
0x000026e6 clz r3, sl | r3 &= sl;
0x000026ea lsrs r3, r3, 5 | r3 >>= 5;
0x000026ec mov r2, r8 | r2 = r8;
0x000026ee mov r1, r4 | r1 = r4;
0x000026f0 add r0, pc | r0 = 0x4efc;
0x000026f2 bl 0x3ec0 | fcn_00003ec0 (r0, r1, r2, r3);
0x000026f4 invalid |
| label_53:
0x000026f8 ldr.w r5, [sb, 0xa0] | r5 = *((sb + 0xa0));
0x000026fc b 0x247e | goto label_3;
| label_52:
0x0000280c ldr.w r1, [sb, 0xa4] | r1 = *((sb + 0xa4));
0x00002810 mov r0, r1 | r0 = r1;
0x00002812 str r1, [sp, 0x1c] | *(str) = r1;
0x00002814 blx 0x1898 | strlen (r0);
0x00002816 strex sb, sb, [r0, 0x1c] | __asm ("strex sb, sb, [r0, 0x1c]");
0x0000281a mov sl, r0 | sl = r0;
0x0000281c mov r2, r0 | r2 = r0;
0x0000281e mov r0, r5 | r0 = r5;
0x00002820 blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
| if (r0 == 0) {
0x00002824 cbnz r0, 0x2836 |
0x00002826 mov r0, r5 | r0 = r5;
0x00002828 blx 0x1898 | strlen (r0);
0x0000282c add.w r3, sl, 1 | r3 = sl + 1;
0x00002830 cmp r0, r3 |
| if (r0 > r3) {
0x00002832 bhi.w 0x29a8 | goto label_66;
| }
| }
0x00002836 ldr.w sb, [pc, 0xc40] | sb = *(0x00003478);
0x0000283a add sb, pc | sb += pc;
0x0000283c ldr.w r1, [sb, 0xa8] | r1 = *((sb + 0xa8));
0x00002840 mov r0, r1 | r0 = r1;
0x00002842 str r1, [sp, 0x1c] | *(str) = r1;
0x00002844 blx 0x1898 | strlen (r0);
0x00002848 ldr r1, [sp, 0x1c] | r1 = *(str);
0x0000284a mov sl, r0 | sl = r0;
0x0000284c mov r2, r0 | r2 = r0;
0x0000284e mov r0, r5 | r0 = r5;
0x00002850 blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
| if (r0 == 0) {
0x00002854 cbnz r0, 0x2866 |
0x00002856 mov r0, r5 | r0 = r5;
0x00002858 blx 0x1898 | strlen (r0);
0x0000285c add.w r3, sl, 1 | r3 = sl + 1;
0x00002860 cmp r0, r3 |
| if (r0 > r3) {
0x00002862 bhi.w 0x3742 | goto label_67;
| }
| }
0x00002866 ldr.w sb, [pc, 0xc14] | sb = *(0x0000347c);
0x0000286a add sb, pc | sb += pc;
0x0000286c ldr.w r1, [sb, 0xac] | r1 = *((sb + 0xac));
0x00002870 mov r0, r1 | r0 = r1;
0x00002872 str r1, [sp, 0x1c] | *(str) = r1;
0x00002874 blx 0x1898 | strlen (r0);
0x00002878 ldr r1, [sp, 0x1c] | r1 = *(str);
0x0000287a mov sl, r0 | sl = r0;
0x0000287c mov r2, r0 | r2 = r0;
0x0000287e mov r0, r5 | r0 = r5;
0x00002880 blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
| if (r0 == 0) {
0x00002884 cbnz r0, 0x2896 |
0x00002886 mov r0, r5 | r0 = r5;
0x00002888 blx 0x1898 | strlen (r0);
0x0000288c add.w r3, sl, 1 | r3 = sl + 1;
0x00002890 cmp r0, r3 |
| if (r0 > r3) {
0x00002892 bhi.w 0x35a2 | goto label_68;
| }
| }
0x00002896 ldr.w sb, [pc, 0xbe8] | sb = *(0x00003480);
0x0000289a add sb, pc | sb += pc;
0x0000289c ldr.w sl, [sb, 0xb0] | sl = *((sb + 0xb0));
0x000028a0 mov r0, sl | r0 = sl;
0x000028a2 blx 0x1898 | strlen (r0);
0x000028a6 mov r1, sl | r1 = sl;
0x000028a8 mov r2, r0 | r2 = r0;
0x000028aa mov r0, r5 | r0 = r5;
0x000028ac blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
0x000028b0 cmp r0, 0 |
| if (r0 == 0) {
0x000028b2 beq.w 0x35ca | goto label_69;
| }
0x000028b6 ldr.w sl, [sb, 0xb8] | sl = *((sb + 0xb8));
0x000028ba mov r0, sl | r0 = sl;
0x000028bc blx 0x1898 | strlen (r0);
0x000028c0 mov r1, sl | r1 = sl;
0x000028c2 mov sb, r0 | sb = r0;
0x000028c4 mov r2, r0 | r2 = r0;
0x000028c6 mov r0, r5 | r0 = r5;
0x000028c8 blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
| if (r0 == 0) {
0x000028cc cbnz r0, 0x28de |
0x000028ce mov r0, r5 | r0 = r5;
0x000028d0 blx 0x1898 | strlen (r0);
0x000028d4 add.w r3, sb, 1 | r3 = sb + 1;
0x000028d8 cmp r0, r3 |
| if (r0 > r3) {
0x000028da bhi.w 0x35b8 | goto label_70;
| }
| }
0x000028de ldr.w sb, [pc, 0xba4] | sb = *(0x00003484);
0x000028e2 add sb, pc | sb += pc;
0x000028e4 ldr.w r1, [sb, 0xbc] | r1 = *((sb + 0xbc));
0x000028e8 mov r0, r1 | r0 = r1;
0x000028ea str r1, [sp, 0x1c] | *(str) = r1;
0x000028ec blx 0x1898 | strlen (r0);
0x000028f0 ldr r1, [sp, 0x1c] | r1 = *(str);
0x000028f2 mov sl, r0 | sl = r0;
0x000028f4 mov r2, r0 | r2 = r0;
0x000028f6 mov r0, r5 | r0 = r5;
0x000028f8 blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
| if (r0 == 0) {
0x000028fc cbnz r0, 0x290e |
0x000028fe mov r0, r5 | r0 = r5;
0x00002900 blx 0x1898 | strlen (r0);
0x00002904 add.w r3, sl, 1 | r3 = sl + 1;
0x00002908 cmp r0, r3 |
| if (r0 > r3) {
0x0000290a bhi.w 0x3612 | goto label_71;
| }
| }
0x0000290e ldr.w sb, [pc, 0xb78] | sb = *(0x00003488);
0x00002912 add sb, pc | sb += pc;
0x00002914 ldr.w sl, [sb, 0xcc] | sl = *((sb + 0xcc));
0x00002916 adr r0, 0x330 | r0 = 0x330;
0x00002918 mov r0, sl | r0 = sl;
0x0000291a blx 0x1898 | strlen (r0);
0x0000291e mov r1, sl | r1 = sl;
0x00002920 mov r2, r0 | r2 = r0;
0x00002922 mov r0, r5 | r0 = r5;
0x00002924 blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
0x00002928 cmp r0, 0 |
| if (r0 == 0) {
0x0000292a beq.w 0x2a6c | goto label_72;
| }
0x0000292e ldr.w sl, [sb, 0xd0] | sl = *((sb + 0xd0));
0x00002932 mov r0, sl | r0 = sl;
0x00002934 blx 0x1898 | strlen (r0);
0x00002938 mov r1, sl | r1 = sl;
0x0000293a mov r2, r0 | r2 = r0;
0x0000293c str r0, [sp, 0x1c] | *(str) = r0;
0x0000293e mov r0, r5 | r0 = r5;
0x00002940 blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
0x00002944 mov sl, r0 | sl = r0;
| if (r0 == 0) {
0x00002946 cbnz r0, 0x2958 |
0x00002948 mov r0, r5 | r0 = r5;
0x0000294a blx 0x1898 | strlen (r0);
0x0000294e ldr r2, [sp, 0x1c] | r2 = *(str);
0x00002950 adds r3, r2, 1 | r3 = r2 + 1;
0x00002952 cmp r0, r3 |
| if (r0 > r3) {
0x00002954 bhi.w 0x2b8c | goto label_73;
| }
| }
0x00002958 ldr.w sb, [pc, 0xb30] | sb = *(0x0000348c);
0x0000295c add sb, pc | sb += pc;
0x0000295e ldr.w r1, [sb, 0xd8] | r1 = *((sb + 0xd8));
0x00002962 mov r0, r1 | r0 = r1;
0x00002964 str r1, [sp, 0x1c] | *(str) = r1;
0x00002966 blx 0x1898 | strlen (r0);
0x0000296a ldr r1, [sp, 0x1c] | r1 = *(str);
0x0000296c mov sl, r0 | sl = r0;
0x0000296e mov r2, r0 | r2 = r0;
0x00002970 mov r0, r5 | r0 = r5;
0x00002972 blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
| if (r0 != 0) {
0x00002976 cbnz r0, 0x29c0 | goto label_74;
| }
0x00002978 mov r0, r5 | r0 = r5;
0x0000297a blx 0x1898 | strlen (r0);
0x0000297e add.w r3, sl, 1 | r3 = sl + 1;
0x00002982 cmp r0, r3 |
| if (r0 < r3) {
0x00002984 bls 0x29c0 | goto label_74;
| }
0x00002986 ldr r5, [sp, 0x34] | r5 = *(dest);
0x00002988 ldrb r3, [r5] | r3 = *(r5);
| if (r3 == 0) {
0x0000298a cbz r3, 0x299e | goto label_4;
| }
0x0000298c addw r0, sp, 0x39d | __asm ("addw r0, path");
0x00002990 bl 0x3b2c | r0 = fcn_00003b2c (r0);
0x00002994 mov r1, r0 | r1 = r0;
0x00002996 mov r0, r5 | r0 = r5;
0x00002998 blx 0x1850 | r0 = rename (r0, r1);
| if (r0 == 0) {
0x0000299c cbz r0, 0x29ba | goto label_30;
| }
| do {
| label_4:
0x0000299e mov r0, r4 | r0 = r4;
0x000029a0 bl 0x38b0 | fcn_000038b0 (r0);
0x000029a4 b.w 0x2142 | goto label_2;
| label_66:
0x000029a8 add r0, sp, 0x39c | r0 += arg_39ch;
0x000029aa bl 0x3b2c | fcn_00003b2c (r0);
0x000029ae movw r1, 0x1ed | r1 = 0x1ed;
0x000029b2 blx 0x191c | r0 = mkdir ();
0x000029b6 cmp r0, 0 |
0x000029b8 bne 0x299e |
| } while (r0 != 0);
| label_30:
0x000029ba ldr.w r5, [sb, 0x18] | r5 = *((sb + 0x18));
0x000029be b 0x247e | goto label_3;
| label_74:
0x000029c0 ldr.w sl, [pc, 0xacc] | sl = *(0x00003490);
0x000029c4 add sl, pc | sl += pc;
0x000029c6 ldr.w r1, [sl, 0xdc] | r1 = *((sl + 0xdc));
0x000029ca mov r0, r1 | r0 = r1;
0x000029cc str r1, [sp, 0x1c] | *(str) = r1;
0x000029ce blx 0x1898 | strlen (r0);
0x000029d2 ldr r1, [sp, 0x1c] | r1 = *(str);
0x000029d4 mov sb, r0 | sb = r0;
0x000029d6 mov r2, r0 | r2 = r0;
0x000029d8 mov r0, r5 | r0 = r5;
0x000029da blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
| if (r0 == 0) {
0x000029de cbnz r0, 0x29ee |
0x000029e0 mov r0, r5 | r0 = r5;
0x000029e2 blx 0x1898 | strlen (r0);
0x000029e6 add.w r3, sb, 1 | r3 = sb + 1;
0x000029ea cmp r0, r3 |
| if (r0 > r3) {
0x000029ec bhi 0x2aae | goto label_75;
| }
| }
0x000029ee ldr.w sb, [pc, 0xaa4] | sb = *(0x00003494);
0x000029f2 add sb, pc | sb += pc;
0x000029f4 ldr.w sl, [sb, 0xe4] | sl = *((sb + 0xe4));
0x000029f8 mov r0, sl | r0 = sl;
0x000029fa blx 0x1898 | strlen (r0);
0x000029fe mov r1, sl | r1 = sl;
0x00002a00 mov r2, r0 | r2 = r0;
0x00002a02 str r0, [sp, 0x1c] | *(str) = r0;
0x00002a04 mov r0, r5 | r0 = r5;
0x00002a06 blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
0x00002a0a mov sl, r0 | sl = r0;
0x00002a0c cmp r0, 0 |
| if (r0 != 0) {
0x00002a0e bne.w 0x2bfa | goto label_31;
| }
0x00002a12 mov r0, r5 | r0 = r5;
0x00002a14 blx 0x1898 | strlen (r0);
0x00002a16 vpmax.s8 d25, d0, d7 | __asm ("vpmax.s8 d25, d0, d7");
0x00002a1a adds r3, r2, 1 | r3 = r2 + 1;
0x00002a1c cmp r0, r3 |
| if (r0 < r3) {
0x00002a1e bls.w 0x2bf2 | goto label_76;
| }
0x00002a22 ldrb r3, [r5, r2] | r3 = *((r5 + r2));
0x00002a24 add r5, r2 | r5 += r2;
0x00002a26 cmp r3, 0x20 |
| if (r3 != 0x20) {
0x00002a28 bne.w 0x2bfa | goto label_31;
| }
0x00002a2c ldr.w r1, [pc, 0xa68] |
0x00002a30 adds r5, 1 | r5++;
0x00002a32 mov r0, r5 | r0 = r5;
0x00002a34 add r1, pc | r1 = 0x5ed0;
0x00002a36 blx 0x15f8 | r0 = strcmp (r0, r1);
0x00002a3a cmp r0, 0 |
| if (r0 == 0) {
0x00002a3c beq.w 0x2c00 | goto label_77;
| }
0x00002a40 mov r1, sl | r1 = sl;
0x00002a42 mov r0, r5 | r0 = r5;
0x00002a44 movs r2, 0xa | r2 = 0xa;
0x00002a46 blx 0x1610 | r0 = strtol (r0, r1, r2);
0x00002a4a cmp r0, 1 |
0x00002a4c mov r3, r0 | r3 = r0;
| if (r0 == 1) {
0x00002a4e beq.w 0x2b58 | goto label_78;
| }
0x00002a52 cmp r0, 2 |
| if (r0 == 2) {
0x00002a54 beq.w 0x2bba | goto label_79;
| }
0x00002a58 ldr.w r2, [pc, 0xa40] |
0x00002a5c movs r1, 1 | r1 = 1;
0x00002a5e movs r0, 6 | r0 = 6;
0x00002a60 add r2, pc | r2 = 0x5f00;
0x00002a62 blx 0x19cc | fcn_000019cc ();
0x00002a66 ldr.w r5, [sb, 0xe0] | r5 = *((sb + 0xe0));
0x00002a6a b 0x247e | goto label_3;
| label_72:
0x00002a6c ldr.w r1, [pc, 0xa30] |
0x00002a70 mov r0, r4 | r0 = r4;
0x00002a72 add r1, pc | r1 = 0x5f16;
0x00002a74 bl 0x3c10 | fcn_00003c10 (r0, r1);
0x00002a78 b.w 0x2142 | goto label_2;
| label_59:
0x00002a7c mov r1, r7 | r1 = r7;
0x00002a7e mov r0, sb | r0 = sb;
0x00002a80 blx 0x1838 | r0 = stat ();
0x00002a84 cmp r0, 0 |
| if (r0 < 0) {
0x00002a86 blt 0x299e | goto label_4;
| }
0x00002a88 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x00002a8a and r3, r3, 0xf000 | r3 &= 0xf000;
0x00002a8e cmp.w r3, 0x4000 |
| if (r3 == 0x4000) {
0x00002a92 beq 0x2b50 | goto label_80;
| }
0x00002a94 movs r1, 4 | r1 = 4;
0x00002a96 mov r0, sb | r0 = sb;
0x00002a98 blx 0x1968 | r0 = fcn_00001968 ();
0x00002a9c cmp r0, 0 |
| if (r0 < 0) {
0x00002a9e blt.w 0x299e | goto label_4;
| }
0x00002aa2 mov r1, r5 | r1 = r5;
0x00002aa4 mov r0, sb | r0 = sb;
0x00002aa6 blx 0x1844 | r0 = open (r0, r1, r2);
0x00002aaa mov r5, r0 | r5 = r0;
0x00002aac b 0x263a | goto label_5;
| label_75:
0x00002aae ldrb.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x00002ab2 cmp r3, 0 |
| if (r3 == 0) {
0x00002ab4 bne 0x2b4a |
0x00002ab6 ldr.w r1, [pc, 0x9ec] |
0x00002aba movs r2, 5 | r2 = 5;
0x00002abc mov r0, r5 | r0 = r5;
0x00002abe add r1, pc | r1 = 0x5f68;
0x00002ac0 blx 0x1a98 | r0 = fcn_00001a98 ();
0x00002ac4 mov r7, r0 | r7 = r0;
0x00002ac6 cmp r0, 0 |
| if (r0 == 0) {
0x00002ac8 bne 0x2b40 |
0x00002aca ldrb r5, [r5, 5] | r5 = *((r5 + 5));
0x00002acc sub.w r3, r5, 0x21 | r3 = r5 - 0x21;
0x00002ad0 cmp r3, 0x5d |
| if (r3 > 0x5d) {
0x00002ad2 bhi 0x2b40 | goto label_81;
| }
0x00002ad4 addw r3, sp, 0x39e | __asm ("addw r3, s");
0x00002ad8 mov r1, r5 | r1 = r5;
0x00002ada mov r0, r3 | r0 = r3;
0x00002adc str r3, [sp, 0x1c] | *(str) = r3;
0x00002ade blx 0x18a4 | r0 = strchr (r0, r1);
0x00002ae2 mov sb, r0 | sb = r0;
| if (r0 == 0) {
0x00002ae4 cbz r0, 0x2b40 | goto label_81;
| }
0x00002ae6 ldr r3, [sp, 0x1c] | r3 = *(str);
0x00002ae8 mov r1, r7 | r1 = r7;
0x00002aea strb r7, [sb], 1 | *(sb) = r7;
| sb++;
0x00002aee movs r2, 0xa | r2 = 0xa;
0x00002af0 mov r0, r3 | r0 = r3;
0x00002af2 blx 0x1610 | strtol (r0, r1, r2);
0x00002af6 mov r1, r5 | r1 = r5;
0x00002af8 str r0, [sp, 0x1c] | *(str) = r0;
0x00002afa mov r0, sb | r0 = sb;
0x00002afc blx 0x18a4 | r0 = strchr (r0, r1);
| if (r0 == 0) {
0x00002b00 cbz r0, 0x2b40 | goto label_81;
| }
0x00002b02 ldr r3, [sp, 0x1c] | r3 = *(str);
0x00002b04 strb r7, [r0] | *(r0) = r7;
0x00002b06 subs r1, r3, 1 | r1 = r3 - 1;
0x00002b08 cmp r1, 1 |
| if (r1 > 1) {
0x00002b0a bhi 0x2bd0 | goto label_82;
| }
0x00002b0c mov r1, sb | r1 = sb;
0x00002b0e movs r2, 0x3e | r2 = 0x3e;
0x00002b10 add.w sb, r0, 1 | sb = r0 + 1;
0x00002b14 addw r0, sp, 0x101 | __asm ("addw r0, arg_101h");
0x00002b16 asrs r1, r0, 0x20 | r1 = r0 >> 0x20;
0x00002b18 blx 0x17c0 | strcpy_chk ()
0x00002b1c mov r1, r5 | r1 = r5;
0x00002b1e mov r0, sb | r0 = sb;
0x00002b20 blx 0x18a4 | r0 = strchr (r0, r1);
| if (r0 == 0) {
0x00002b24 cbz r0, 0x2b40 | goto label_81;
| }
0x00002b26 strb r7, [r0] | *(r0) = r7;
0x00002b28 mov r1, r7 | r1 = r7;
0x00002b2a mov r0, sb | r0 = sb;
0x00002b2c movs r2, 0xa | r2 = 0xa;
0x00002b2e blx 0x1610 | strtol (r0, r1, r2);
0x00002b32 str.w r0, [r8, 4] | __asm ("str.w r0, [r8, 4]");
0x00002b36 mov r0, r8 | r0 = r8;
0x00002b38 bl 0x3b50 | r0 = fcn_00003b50 (r0);
0x00002b3c cmp r0, 0 |
| if (r0 == 0) {
0x00002b3e beq 0x2bbe | goto label_83;
| }
| }
| label_81:
0x00002b40 ldr.w r3, [pc, 0x964] | r3 = *(0x000034a8);
0x00002b44 add r3, pc | r3 += pc;
0x00002b46 ldr r5, [r3, 0x14] | r5 = *((r3 + 0x14));
0x00002b48 b 0x247e | goto label_3;
| }
| label_27:
0x00002b4a ldr.w r5, [sl, 0x74] | r5 = *((sl + 0x74));
0x00002b4e b 0x247e | goto label_3;
| label_80:
0x00002b50 ldr r3, [sp, 0x1c] | r3 = *(str);
0x00002b52 ldr.w r5, [r3, 0x88] | r5 = *((r3 + 0x88));
0x00002b56 b 0x247e | goto label_3;
| label_78:
0x00002b58 movs r0, 2 | r0 = 2;
| label_6:
0x00002b5a bl 0x3a0c | r0 = fcn_00003a0c (r0);
0x00002b5e subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 >= r0) {
0x00002b60 blt 0x2b82 |
0x00002b62 movs r3, 0x80 | r3 = 0x80;
0x00002b64 mov r2, r7 | r2 = r7;
0x00002b66 mov r1, r6 | r1 = r6;
0x00002b68 str r3, [r7] | *(r7) = r3;
0x00002b6a blx 0x1a2c | r0 = fcn_00001a2c ();
0x00002b6e cmp r0, 0 |
| if (r0 >= 0) {
0x00002b70 blt 0x2b7c |
0x00002b72 ldrh r3, [r6] | r3 = *(r6);
0x00002b74 cmp r3, 2 |
| if (r3 == 2) {
0x00002b76 beq 0x2c0c | goto label_84;
| }
0x00002b78 cmp r3, 0xa |
| if (r3 == 0xa) {
0x00002b7a beq 0x2c0c | goto label_84;
| }
| }
| label_7:
0x00002b7c mov r0, r5 | r0 = r5;
0x00002b7e blx 0x1ab4 | fdipc_client_socket ();
| }
0x00002b82 ldr.w r3, [pc, 0x928] | r3 = *(0x000034ac);
0x00002b86 add r3, pc | r3 += pc;
0x00002b88 ldr r5, [r3, 0x14] | r5 = *((r3 + 0x14));
0x00002b8a b 0x247e | goto label_3;
| label_73:
0x00002b8c addw r0, sp, 0x39d | __asm ("addw r0, path");
0x00002b90 bl 0x3b2c | fcn_00003b2c (r0);
0x00002b94 ldr r5, [sp, 0x34] | r5 = *(dest);
0x00002b96 mov r1, r0 | r1 = r0;
0x00002b98 mov.w r2, 0x100 | r2 = 0x100;
0x00002b9c mov r0, r5 | r0 = r5;
0x00002b9e blx 0x1940 | strncpy (r0, r1, r2);
0x00002ba2 mov r1, sl | r1 = sl;
0x00002ba4 mov r0, r5 | r0 = r5;
0x00002ba6 strb.w sl, [r5, 0x100] | *((r5 + 0x100)) = sl;
0x00002baa blx 0x1968 | r0 = fcn_00001968 ();
0x00002bae cmp r0, 0 |
| if (r0 != 0) {
0x00002bb0 bne.w 0x299e | goto label_4;
| }
0x00002bb4 ldr.w r5, [sb, 0xd4] | r5 = *((sb + 0xd4));
0x00002bb8 b 0x247e | goto label_3;
| label_79:
0x00002bba movs r0, 0xa | r0 = 0xa;
0x00002bbc b 0x2b5a | goto label_6;
| label_83:
0x00002bbe ldr.w r0, [r8, 8] | r0 = *((r8 + 8));
0x00002bc2 cmp r0, 0 |
0x00002bc4 bge 0x2be4 |
| while (1) {
0x00002bc6 ldr.w r3, [pc, 0x8e8] | r3 = *(0x000034b0);
0x00002bca add r3, pc | r3 += pc;
0x00002bcc ldr r5, [r3, 0x54] | r5 = *((r3 + 0x54));
0x00002bce b 0x247e | goto label_3;
| label_82:
0x00002bd0 ldr.w r2, [pc, 0x8e0] |
0x00002bd4 movs r1, 1 | r1 = 1;
0x00002bd6 movs r0, 6 | r0 = 6;
0x00002bd8 add r2, pc | r2 = 0x6090;
0x00002bda blx 0x19cc | fcn_000019cc ();
0x00002bde ldr.w r5, [sl, 0xe0] | r5 = *((sl + 0xe0));
0x00002be2 b 0x247e | goto label_3;
0x00002be4 blx 0x1ab4 | fdipc_client_socket ();
0x00002be8 mov.w r3, -1 | r3 = -1;
0x00002bec str.w r3, [r8, 8] | __asm ("str.w r3, [r8, 8]");
0x00002bf0 b 0x2bc6 |
| }
| label_76:
0x00002bf2 ldr.w r3, [r8] | r3 = *(r8);
0x00002bf6 ldrh r0, [r3] | r0 = *(r3);
0x00002bf8 b 0x2b5a | goto label_6;
| label_31:
0x00002bfa ldr.w r5, [sb, 0xb4] | r5 = *((sb + 0xb4));
0x00002bfe b 0x247e | goto label_3;
| label_77:
0x00002c00 movs r3, 1 | r3 = 1;
0x00002c02 ldr.w r5, [sb, 0x54] | r5 = *((sb + 0x54));
0x00002c06 strb.w r3, [r8, 0xc] | *((r8 + 0xc)) = r3;
0x00002c0a b 0x247e | goto label_3;
| label_84:
0x00002c0c ldrh r7, [r6, 2] | r7 = *((r6 + 2));
0x00002c0e rev16 r7, r7 | __asm ("rev16 r7, r7");
0x00002c10 uxth r7, r7 | r7 = (int16_t) r7;
0x00002c12 cmp r7, 0 |
| if (r7 == 0) {
0x00002c14 beq 0x2b7c | goto label_7;
| }
0x00002c16 ldr.w r0, [r8, 8] | r0 = *((r8 + 8));
0x00002c1a cmp r0, 0 |
| if (r0 >= 0) {
0x00002c1c blt 0x2c22 |
0x00002c1e blx 0x1ab4 | fdipc_client_socket ();
| }
0x00002c22 ldr.w r3, [pc, 0x894] |
0x00002c26 movs r2, 1 | r2 = 1;
0x00002c28 str r7, [sp, 4] | var_4h = r7;
0x00002c2a mov r0, fp | r0 = fp;
0x00002c2c str.w r5, [r8, 8] | __asm ("str.w r5, [r8, 8]");
0x00002c30 add r3, pc | r3 = 0x60ee;
0x00002c32 str r3, [sp] | *(sp) = r3;
0x00002c34 movs r3, 0x50 | r3 = 0x50;
0x00002c36 mov r1, r3 | r1 = r3;
0x00002c38 blx 0x1afc | fcn_00001afc ();
| label_12:
0x00002c3c mov r0, fp | r0 = fp;
0x00002c3e blx 0x1898 | strlen (r0);
0x00002c42 mov r1, fp | r1 = fp;
0x00002c44 mov r2, r0 | r2 = r0;
0x00002c46 mov r0, r4 | r0 = r4;
0x00002c48 blx 0x195c | fcn_0000195c ();
0x00002c4c b.w 0x2142 | goto label_2;
| label_61:
0x00002c50 movw r0, 0x1ff4 | r0 = 0x1ff4;
0x00002c54 blx 0x17f0 | r0 = malloc (r0);
0x00002c58 mov sb, r0 | sb = r0;
0x00002c5a cmp r0, 0 |
| if (r0 == 0) {
0x00002c5c beq 0x2d28 | goto label_85;
| }
0x00002c5e blx 0x18d4 | errno_location ();
0x00002c62 str.w r8, [sp, 0x2c] | __asm ("str.w r8, [fildes]");
0x00002c66 mov r8, r6 | r8 = r6;
0x00002c68 mov r6, sl | r6 = sl;
0x00002c6a movs r3, 0 | r3 = 0;
0x00002c6c str r0, [sp, 0x30] | *(arg_30h) = r0;
0x00002c6e str r3, [r0] | *(r0) = r3;
0x00002c70 str r4, [sp, 0x1c] | *(str) = r4;
| label_8:
0x00002c72 movw r2, 0x1ff4 | r2 = 0x1ff4;
0x00002c76 mov r1, sb | r1 = sb;
0x00002c78 mov r0, r5 | r0 = r5;
0x00002c7a blx 0x1640 | r0 = read (r0, r1, r2);
0x00002c7e subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 <= r0) {
0x00002c80 ble 0x2d10 | goto label_86;
| }
0x00002c82 mov sl, r8 | sl = r8;
0x00002c84 add r6, r4 | r6 += r4;
0x00002c86 mov r1, sb | r1 = sb;
0x00002c88 mov r8, r4 | r8 = r4;
| do {
| label_9:
0x00002c8a mov r2, r4 | r2 = r4;
0x00002c8c mov r0, r7 | r0 = r7;
0x00002c8e str r1, [sp, 0x38] | *(arg_38h) = r1;
0x00002c90 blx 0x195c | r0 = fcn_0000195c ();
0x00002c94 cmp r0, 0 |
0x00002c96 ldr r1, [sp, 0x38] | r1 = *(arg_38h);
| if (r0 < 0) {
0x00002c98 blt 0x2cc2 | goto label_87;
| }
0x00002c9a subs r4, r4, r0 | r4 -= r0;
0x00002c9c add r1, r0 | r1 += r0;
0x00002c9e bne 0x2c8a |
| } while (r4 != r4);
0x00002ca0 mov r8, sl | r8 = sl;
0x00002ca2 b 0x2c72 | goto label_8;
| label_60:
0x00002ca4 ldr.w r7, [sb, 0x20] | r7 = *((sb + 0x20));
0x00002ca8 mov r0, r7 | r0 = r7;
0x00002caa blx 0x1898 | strlen (r0);
0x00002cae mov r1, r7 | r1 = r7;
0x00002cb0 mov r2, r0 | r2 = r0;
0x00002cb2 mov r0, r4 | r0 = r4;
0x00002cb4 blx 0x195c | fcn_0000195c ();
0x00002cb8 mov r0, r5 | r0 = r5;
0x00002cba blx 0x1ab4 | fdipc_client_socket ();
0x00002cbe b.w 0x2142 | goto label_2;
| label_87:
0x00002cc2 ldr r3, [sp, 0x30] | r3 = *(arg_30h);
0x00002cc4 ldr r3, [r3] | r3 = *(r3);
0x00002cc6 cmp r3, 4 |
| if (r3 == 4) {
0x00002cc8 beq 0x2c8a | goto label_9;
| }
0x00002cca cmp r3, 0xb |
| if (r3 == 0xb) {
0x00002ccc beq 0x2c8a | goto label_9;
| }
0x00002cce mov r2, sl | r2 = sl;
0x00002cd0 mov sl, r6 | sl = r6;
0x00002cd2 mov r6, r2 | r6 = r2;
0x00002cd4 ldr.w r2, [pc, 0x7e4] |
0x00002cd8 mov ip, r3 |
0x00002cda str r0, [sp] | *(sp) = r0;
0x00002cdc mov r3, r8 | r3 = r8;
0x00002cde movs r1, 1 | r1 = 1;
0x00002ce0 add r2, pc | r2 = 0x61a0;
0x00002ce2 movs r0, 7 | r0 = 7;
0x00002ce4 strd sl, ip, [sp, 4] | __asm ("strd sl, ip, [sp, 4]");
0x00002ce8 ldr r4, [sp, 0x1c] | r4 = *(str);
0x00002cea ldr.w r8, [sp, 0x2c] | r8 = *(fildes);
0x00002cee blx 0x19cc | fcn_000019cc ();
| label_10:
0x00002cf2 mov r0, r5 | r0 = r5;
0x00002cf4 blx 0x1ab4 | fdipc_client_socket ();
0x00002cf8 mov r0, r7 | r0 = r7;
0x00002cfa blx 0x1ab4 | fdipc_client_socket ();
0x00002cfe mov r0, sb | r0 = sb;
0x00002d00 blx 0x1664 | free (r0);
0x00002d04 ldr.w r3, [pc, 0x7b8] | r3 = *(0x000034c0);
0x00002d08 add r3, pc | r3 += pc;
0x00002d0a ldr r5, [r3, 0x24] | r5 = *((r3 + 0x24));
0x00002d0c b.w 0x247e | goto label_3;
| if (r0 == 7) {
| label_86:
0x00002d10 beq 0x2d1e | goto label_88;
| }
0x00002d12 ldr r3, [sp, 0x30] | r3 = *(arg_30h);
0x00002d14 ldr r2, [r3] | r2 = *(r3);
0x00002d16 cmp r2, 4 |
| if (r2 == 4) {
0x00002d18 beq 0x2c72 | goto label_8;
| }
0x00002d1a cmp r2, 0xb |
| if (r2 == 0xb) {
0x00002d1c beq 0x2c72 | goto label_8;
| }
| label_88:
0x00002d1e mov r6, r8 | r6 = r8;
0x00002d20 ldr r4, [sp, 0x1c] | r4 = *(str);
0x00002d22 ldr.w r8, [sp, 0x2c] | r8 = *(fildes);
0x00002d26 b 0x2cf2 | goto label_10;
| label_85:
0x00002d28 ldr.w r2, [pc, 0x798] |
0x00002d2c add r2, pc | r2 = 0x61f4;
| label_14:
0x00002d2e movs r1, 1 | r1 = 1;
0x00002d30 movs r0, 3 | r0 = 3;
0x00002d32 blx 0x19cc | fcn_000019cc ();
0x00002d36 b 0x299e | goto label_4;
| label_64:
0x00002d38 ldrd r3, r2, [r6] | __asm ("ldrd r3, r2, [r6]");
0x00002d3c orrs r3, r2 | r3 |= r2;
| if (r3 != r2) {
0x00002d3e bne.w 0x26bc | goto label_11;
| }
0x00002d42 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00002d44 cmn.w r3, 0x10000 |
| if (r3 != 0x10000) {
0x00002d48 bne.w 0x26bc | goto label_11;
| }
| label_63:
0x00002d4c ldrh r7, [r6, 2] | r7 = *((r6 + 2));
0x00002d4e rev16 r7, r7 | __asm ("rev16 r7, r7");
0x00002d50 uxth r7, r7 | r7 = (int16_t) r7;
0x00002d52 cmp.w sb, 0 |
| if (sb == 0) {
0x00002d56 beq.w 0x26bc | goto label_11;
| }
0x00002d5a cmp r7, 0 |
| if (r7 == 0) {
0x00002d5c beq.w 0x26bc | goto label_11;
| }
0x00002d60 ldr.w r0, [r8, 8] | r0 = *((r8 + 8));
0x00002d64 cmp r0, 0 |
| if (r0 >= 0) {
0x00002d66 blt 0x2d6c |
0x00002d68 blx 0x1ab4 | fdipc_client_socket ();
| }
0x00002d6c uxtb r3, r7 | r3 = (int8_t) r7;
0x00002d6e str.w r5, [r8, 8] | __asm ("str.w r5, [r8, 8]");
0x00002d72 asrs r7, r7, 8 | r7 >>= 8;
0x00002d74 movs r2, 0x50 | r2 = 0x50;
0x00002d76 str r3, [sp, 0x14] | *(arg_14h) = r3;
0x00002d78 uxtb.w r3, sb | r3 = (int8_t) sb;
0x00002d7c movs r1, 1 | r1 = 1;
0x00002d7e str r7, [sp, 0x10] | *(arg_10h) = r7;
0x00002d80 str r3, [sp, 0xc] | *(arg_ch) = r3;
0x00002d82 lsr.w r3, sb, 0x18 | r3 = sb >> 0x18;
0x00002d86 mov r0, fp | r0 = fp;
0x00002d88 str r3, [sp] | *(sp) = r3;
0x00002d8a ubfx r3, sb, 8, 8 | r3 = (sb >> 8) & ((1 << 8) - 1);
0x00002d8e str r3, [sp, 8] | *(arg_8h) = r3;
0x00002d90 ubfx r3, sb, 0x10, 8 | r3 = (sb >> 0x10) & ((1 << 8) - 1);
0x00002d94 str r3, [sp, 4] | var_4h = r3;
0x00002d96 ldr.w r3, [pc, 0x730] |
0x00002d9a add r3, pc | r3 = 0x6268;
0x00002d9c blx 0x18f8 | sprintf_chk ();
0x00002da0 b 0x2c3c | goto label_12;
| label_62:
0x00002da2 ldr.w r1, [pc, 0x728] |
0x00002da6 mov r0, r5 | r0 = r5;
0x00002da8 add r1, pc | r1 = 0x627a;
0x00002daa blx 0x15c8 | r0 = fdopen ();
0x00002dae mov sb, r0 | sb = r0;
0x00002db0 movw r0, 0x1ff4 | r0 = 0x1ff4;
0x00002db4 blx 0x17f0 | r0 = malloc (r0);
0x00002db8 mov r5, r0 | r5 = r0;
0x00002dba cmp r0, 0 |
| if (r0 == 0) {
0x00002dbc beq 0x2e64 | goto label_89;
| }
0x00002dbe mov r0, sb | r0 = sb;
0x00002dc0 blx 0x1a14 | fcn_00001a14 ();
0x00002dc4 b 0x2e00 |
| while (r0 != 0) {
| label_13:
0x00002dc6 mov r0, sb | r0 = sb;
0x00002dc8 blx 0x1688 | r0 = ferror (r0);
| if (r0 != 0) {
0x00002dcc cbnz r0, 0x2e38 | goto label_90;
| }
0x00002dce mov r0, sb | r0 = sb;
0x00002dd0 blx 0x1880 | r0 = feof (r0);
0x00002dd4 mov sl, r0 | sl = r0;
| if (r0 == 0) {
0x00002dd6 cbnz r0, 0x2dfc |
0x00002dd8 mov r0, r5 | r0 = r5;
0x00002dda blx 0x1898 | r0 = strlen (r0);
0x00002dde mov r3, r0 | r3 = r0;
| if (r0 != 0) {
0x00002de0 cbz r0, 0x2df2 |
0x00002de2 subs r1, r0, 1 | r1 = r0 - 1;
0x00002de4 mov sl, r0 | sl = r0;
0x00002de6 ldrb.w ip, [r5, r1] | ip = *((r5 + r1));
0x00002dea adds r0, r5, r1 | r0 = r5 + r1;
0x00002dec cmp.w ip, 0xa |
| if (ip == 0xa) {
0x00002df0 beq 0x2e74 | goto label_91;
| }
| }
| label_15:
0x00002df2 mov r2, sl | r2 = sl;
0x00002df4 mov r1, r5 | r1 = r5;
0x00002df6 mov r0, r7 | r0 = r7;
0x00002df8 bl 0x4034 | fcn_00004034 (r0, r1, r2);
| }
0x00002dfc movs r3, 0 | r3 = 0;
0x00002dfe strb r3, [r5] | *(r5) = r3;
0x00002e00 mov r2, sb | r2 = sb;
0x00002e02 movw r1, 0x1ff3 | r1 = 0x1ff3;
0x00002e06 mov r0, r5 | r0 = r5;
0x00002e08 blx 0x167c | r0 = fgets (r0, r1, r2);
0x00002e0c cmp r0, 0 |
0x00002e0e bne 0x2dc6 |
| }
0x00002e10 mov r0, sb | r0 = sb;
0x00002e12 blx 0x1880 | r0 = feof (r0);
0x00002e16 cmp r0, 0 |
| if (r0 == 0) {
0x00002e18 beq 0x2dc6 | goto label_13;
| }
0x00002e1a mov r0, sb | r0 = sb;
0x00002e1c blx 0x198c | fcn_0000198c ();
0x00002e20 mov r0, r7 | r0 = r7;
0x00002e22 blx 0x1ab4 | fdipc_client_socket ();
0x00002e26 mov r0, r5 | r0 = r5;
0x00002e28 blx 0x1664 | free (r0);
0x00002e2c ldr.w r3, [pc, 0x6a0] | r3 = *(0x000034d0);
0x00002e2e adds r6, 0xa0 | r6 += 0xa0;
0x00002e30 add r3, pc | r3 += pc;
0x00002e32 ldr r5, [r3, 0x24] | r5 = *((r3 + 0x24));
0x00002e34 b.w 0x247e | goto label_3;
| label_90:
0x00002e38 mov r0, sb | r0 = sb;
0x00002e3a blx 0x1880 | r0 = feof (r0);
0x00002e3e mov sl, r0 | sl = r0;
0x00002e40 mov r0, sb | r0 = sb;
0x00002e42 blx 0x1688 | ferror (r0);
0x00002e46 str r0, [sp, 0x1c] | *(str) = r0;
0x00002e48 blx 0x18d4 | errno_location ();
0x00002e4c ldr r2, [sp, 0x1c] | r2 = *(str);
0x00002e4e mov r3, sl | r3 = sl;
0x00002e50 str r5, [sp, 8] | *(arg_8h) = r5;
0x00002e52 ldr r1, [r0] | r1 = *(r0);
0x00002e54 movs r0, 6 | r0 = 6;
0x00002e56 strd r2, r1, [sp] | __asm ("strd r2, r1, [sp]");
0x00002e5a movs r1, 1 | r1 = 1;
0x00002e5c ldr r2, [sp, 0x48] | r2 = *(arg_48h);
0x00002e5e blx 0x19cc | fcn_000019cc ();
0x00002e60 ldc p7, c14, [r6, 0x2d0]! | __asm ("ldc p7, c14, [r6, 0x2d0]!");
| label_89:
0x00002e64 ldr.w r2, [pc, 0x66c] |
0x00002e68 add r2, pc | r2 = 0x6340;
0x00002e6a b 0x2d2e | goto label_14;
| label_54:
0x00002e6c ldr r3, [sp, 0x1c] | r3 = *(str);
0x00002e6e ldr r5, [r3, 0x74] | r5 = *((r3 + 0x74));
0x00002e70 b.w 0x247e | goto label_3;
| label_91:
0x00002e74 cmp r3, 1 |
| if (r3 == 1) {
0x00002e76 beq 0x2e86 | goto label_92;
| }
0x00002e78 add.w ip, r5, r3 |
0x00002e7c ldrb ip, [ip, -0x2] | ip = *((ip - 0x2));
0x00002e80 cmp.w ip, 0xd |
| if (ip == 0xd) {
0x00002e84 beq 0x2df2 | goto label_15;
| }
| label_92:
0x00002e86 ldr r2, [sp, 0x4c] | r2 = *(arg_4ch);
0x00002e88 add.w sl, r3, 1 | sl = r3 + 1;
0x00002e8c ldrh r3, [r2] | r3 = *(r2);
0x00002e8e strh r3, [r5, r1] | *((r5 + r1)) = r3;
0x00002e90 ldrb r3, [r2, 2] | r3 = *((r2 + 2));
0x00002e92 strb r3, [r0, 2] | *((r0 + 2)) = r3;
0x00002e94 b 0x2df2 | goto label_15;
| label_51:
0x00002e96 addw r0, sp, 0x39d | __asm ("addw r0, path");
0x00002e9a add.w sl, sp, 0x6c | sl += arg_6ch;
0x00002e9e bl 0x3b2c | fcn_00003b2c (r0);
0x00002ea2 add r3, sp, 0x68 | r3 += arg_68h;
0x00002ea4 add r2, sp, 0x64 | r2 += arg_64h;
0x00002ea6 str r3, [sp, 0x2c] | *(fildes) = r3;
0x00002ea8 movs r1, 1 | r1 = 1;
0x00002eaa str r3, [sp] | *(sp) = r3;
0x00002eac mov r3, sl | r3 = sl;
0x00002eae str r4, [sp, 4] | var_4h = r4;
0x00002eb0 mov sb, r0 | sb = r0;
0x00002eb2 str r2, [sp, 0x1c] | *(str) = r2;
0x00002eb4 bl 0x45cc | r0 = fcn_000045cc (r0, r1, r2, r3, r4, r5, r6);
0x00002eb8 mov r5, r0 | r5 = r0;
0x00002eba cmp r0, 0 |
| if (r0 == 0) {
0x00002ebc beq.w 0x3196 | goto label_93;
| }
| label_22:
0x00002ec0 cmp r5, 0 |
| if (r5 <= 0) {
0x00002ec2 ble.w 0x299e | goto label_4;
| }
0x00002ec6 ldr r3, [sp, 0x1c] | r3 = *(str);
0x00002ec8 ldr r3, [r3] | r3 = *(r3);
0x00002eca cmp r3, 2 |
| if (r3 == 2) {
0x00002ecc beq.w 0x3150 | goto label_94;
| }
| label_34:
0x00002ed0 movw r0, 0x1ff4 | r0 = 0x1ff4;
0x00002ed4 blx 0x17f0 | r0 = malloc (r0);
0x00002ed8 mov r7, r0 | r7 = r0;
0x00002eda cmp r0, 0 |
| if (r0 == 0) {
0x00002edc beq.w 0x3134 | goto label_95;
| }
0x00002ee0 ldr.w r3, [pc, 0x5f4] | r3 = *(0x000034d8);
0x00002ee4 add r3, pc | r3 += pc;
0x00002ee6 ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x00002ee8 str r3, [sp, 0x30] | *(arg_30h) = r3;
0x00002eea mov r0, r1 | r0 = r1;
0x00002eec str r1, [sp, 0x2c] | *(fildes) = r1;
0x00002eee blx 0x1898 | strlen (r0);
0x00002ef2 ldr r1, [sp, 0x2c] | r1 = *(fildes);
0x00002ef4 mov r2, r0 | r2 = r0;
0x00002ef6 mov r0, r4 | r0 = r4;
0x00002ef8 blx 0x195c | fcn_0000195c ();
0x00002efc mov r0, r8 | r0 = r8;
0x00002efe bl 0x3c44 | r0 = fcn_00003c44 (r0);
0x00002f02 subs r3, r0, 0 | r3 = r0 - 0;
0x00002f04 str r3, [sp, 0x2c] | *(fildes) = r3;
0x00002f06 ldr r3, [sp, 0x30] | r3 = *(arg_30h);
| if (r3 < r0) {
0x00002f08 blt.w 0x3118 | goto label_96;
| }
0x00002f0c ldr r2, [sp, 0x1c] | r2 = *(str);
0x00002f0e ldr r2, [r2] | r2 = *(r2);
0x00002f10 cmp r2, 2 |
| if (r2 == 2) {
0x00002f12 beq.w 0x3100 | goto label_97;
| }
| label_20:
0x00002f16 ldr.w r3, [pc, 0x5c4] | r3 = *(0x000034dc);
0x00002f1a add r3, pc | r3 += pc;
0x00002f1c ldrb.w r3, [r3, 0x74] | r3 = *((r3 + 0x74));
0x00002f20 cmp r3, 0x49 |
| if (r3 == 0x49) {
0x00002f22 beq.w 0x302a | goto label_98;
| }
0x00002f26 cmp r3, 0x41 |
| if (r3 != 0x41) {
0x00002f28 bne 0x3018 | goto label_99;
| }
0x00002f2a ldr.w r2, [pc, 0x5b4] |
0x00002f2e mov r3, sb | r3 = sb;
0x00002f30 movs r1, 1 | r1 = 1;
0x00002f32 movs r0, 7 | r0 = 7;
0x00002f34 add r2, pc | r2 = 0x641a;
0x00002f36 blx 0x19cc | fcn_000019cc ();
0x00002f3a ldr.w r1, [pc, 0x5a8] |
0x00002f3e ldr r0, [sp, 0x2c] | r0 = *(fildes);
0x00002f40 add r1, pc | r1 = 0x642a;
0x00002f42 blx 0x15c8 | fdopen ();
0x00002f46 ldr.w r1, [pc, 0x5a0] |
0x00002f4a str r0, [sp, 0x2c] | *(fildes) = r0;
0x00002f4c mov r0, r5 | r0 = r5;
0x00002f4e add r1, pc | r1 = 0x643c;
0x00002f50 blx 0x15c8 | fdopen ();
0x00002f54 str r0, [sp, 0x30] | *(arg_30h) = r0;
| do {
0x00002f56 ldr r2, [sp, 0x2c] | r2 = *(fildes);
0x00002f58 movw r1, 0x1ff3 | r1 = 0x1ff3;
0x00002f5c mov r0, r7 | r0 = r7;
0x00002f5e blx 0x167c | r0 = fgets (r0, r1, r2);
0x00002f62 cmp r0, 0 |
| if (r0 == 0) {
0x00002f64 beq 0x2fd0 | goto label_100;
| }
0x00002f66 mov r0, r7 | r0 = r7;
0x00002f68 blx 0x1898 | r0 = strlen (r0);
0x00002f6c cmp r0, 1 |
| if (r0 >= 1) {
0x00002f6e bls 0x2f86 |
0x00002f70 subs r2, r0, 2 | r2 = r0 - 2;
0x00002f72 ldrb r1, [r7, r2] | r1 = *((r7 + r2));
0x00002f74 cmp r1, 0xd |
| if (r1 != 0xd) {
0x00002f76 bne 0x2f86 | goto label_101;
| }
0x00002f78 subs r3, r0, 1 | r3 = r0 - 1;
0x00002f7a ldrb r1, [r7, r3] | r1 = *((r7 + r3));
0x00002f7c cmp r1, 0xa |
0x00002f7e ittt eq |
| if (r1 != 0xa) {
0x00002f80 strbeq r1, [r7, r2] | *((r7 + r2)) = r1;
| }
| if (r1 != 0xa) {
0x00002f82 moveq r2, 0 | r2 = 0;
| }
| if (r1 == 0xa) {
0x00002f84 strbeq r2, [r7, r3] | *((r7 + r3)) = r2;
| goto label_101;
| }
| }
| label_101:
0x00002f86 ldr r1, [sp, 0x30] | r1 = *(arg_30h);
0x00002f88 mov r0, r7 | r0 = r7;
0x00002f8a blx 0x1a8c | fcn_00001a8c ();
0x00002f8e adds r0, 1 | r0++;
0x00002f90 bne 0x2f56 |
| } while (r0 != 1);
0x00002f92 ldr.w r3, [pc, 0x558] | r3 = *(0x000034ec);
0x00002f96 add r3, pc | r3 += pc;
0x00002f98 ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x00002f9a mov r0, r1 | r0 = r1;
0x00002f9c str r1, [sp, 0x38] | *(arg_38h) = r1;
0x00002f9e blx 0x1898 | strlen (r0);
0x00002fa2 ldr r1, [sp, 0x38] | r1 = *(arg_38h);
0x00002fa4 mov r2, r0 | r2 = r0;
0x00002fa6 mov r0, r4 | r0 = r4;
0x00002fa8 blx 0x195c | fcn_0000195c ();
0x00002fac mov r0, r5 | r0 = r5;
0x00002fae movs r1, 0 | r1 = 0;
0x00002fb0 blx 0x1980 | r0 = fcn_00001980 ();
0x00002fb4 cmp r0, 0 |
| if (r0 < 0) {
0x00002fb6 bge 0x2fd0 |
0x00002fb8 blx 0x18d4 | errno_location ();
0x00002fbc ldr.w r2, [pc, 0x530] |
0x00002fc0 movs r1, 1 | r1 = 1;
0x00002fc2 ldr r3, [r0] | r3 = *(r0);
0x00002fc4 movs r0, 3 | r0 = 3;
0x00002fc6 add r2, pc | r2 = 0x64ba;
0x00002fc8 str r3, [sp] | *(sp) = r3;
0x00002fca mov r3, sb | r3 = sb;
0x00002fcc blx 0x19cc | fcn_000019cc ();
| }
| label_100:
0x00002fd0 ldr r0, [sp, 0x2c] | r0 = *(fildes);
0x00002fd2 blx 0x198c | fcn_0000198c ();
0x00002fd6 ldr r0, [sp, 0x30] | r0 = *(arg_30h);
0x00002fd8 blx 0x198c | fcn_0000198c ();
0x00002fdc mov r0, r7 | r0 = r7;
0x00002fde blx 0x1664 | free (r0);
| label_18:
0x00002fe2 ldr r3, [sp, 0x1c] | r3 = *(str);
0x00002fe4 ldr r3, [r3] | r3 = *(r3);
0x00002fe6 cmp r3, 2 |
| if (r3 == 2) {
0x00002fe8 beq 0x2ff6 | goto label_102;
| }
0x00002fea ldr.w r3, [pc, 0x508] | r3 = *(0x000034f4);
0x00002fee add r3, pc | r3 += pc;
0x00002ff0 ldr r5, [r3, 0x24] | r5 = *((r3 + 0x24));
0x00002ff2 b.w 0x247e | goto label_3;
| do {
| label_102:
0x00002ff6 movs r2, 0 | r2 = 0;
0x00002ff8 ldr.w r0, [sl] | r0 = *(sl);
0x00002ffc mov r1, r2 | r1 = r2;
0x00002ffe blx 0x17b4 | waitpid ();
0x00003002 ldr.w r3, [sl] | r3 = *(sl);
0x00003006 cmp r0, r3 |
0x00003008 beq 0x2ff6 |
| } while (r0 == r3);
0x0000300a ldr.w r3, [pc, 0x4ec] | r3 = *(0x000034f8);
0x0000300e add r3, pc | r3 += pc;
0x00003010 ldr.w r5, [r3, 0x98] | r5 = *((r3 + 0x98));
0x00003014 b.w 0x247e | goto label_3;
0x00003016 rev r3, r6 | r6 = SWAP32 (r3);
| label_99:
0x00003018 ldr.w r2, [pc, 0x4e0] |
0x0000301c movs r1, 1 | r1 = 1;
0x0000301e movs r0, 3 | r0 = 3;
0x00003020 add r2, pc | r2 = 0x6520;
0x00003022 blx 0x19cc | fcn_000019cc ();
0x00003026 b.w 0x2142 | goto label_2;
| label_98:
0x0000302a ldr.w r2, [pc, 0x4d4] |
0x0000302e mov r3, sb | r3 = sb;
0x00003030 movs r1, 1 | r1 = 1;
0x00003032 movs r0, 7 | r0 = 7;
0x00003034 add r2, pc | r2 = 0x653a;
0x00003036 blx 0x19cc | fcn_000019cc ();
0x0000303a blx 0x18d4 | errno_location ();
0x0000303e str r4, [sp, 0x30] | *(arg_30h) = r4;
0x00003040 mov r4, r0 | r4 = r0;
0x00003042 movs r2, 0 | r2 = 0;
0x00003044 str r2, [r0] | *(r0) = r2;
| label_16:
0x00003046 movw r2, 0x1ff4 | r2 = 0x1ff4;
0x0000304a ldr r0, [sp, 0x2c] | r0 = *(fildes);
0x0000304c mov r1, r7 | r1 = r7;
0x0000304e blx 0x1640 | r0 = read (r0, r1, r2);
0x00003052 subs r2, r0, 0 | r2 = r0 - 0;
| if (r2 <= r0) {
0x00003054 ble 0x30b0 | goto label_103;
| }
0x00003056 str.w r8, [sp, 0x38] | __asm ("str.w r8, [arg_38h]");
0x0000305a mov r1, r7 | r1 = r7;
0x0000305c mov r8, r6 | r8 = r6;
0x0000305e mov r6, r4 | r6 = r4;
0x00003060 mov r4, r2 | r4 = r2;
| do {
| label_17:
0x00003062 mov r2, r4 | r2 = r4;
0x00003064 mov r0, r5 | r0 = r5;
0x00003066 str r1, [sp, 0x40] | *(arg_40h) = r1;
0x00003068 blx 0x195c | r0 = fcn_0000195c ();
0x0000306c subs r2, r0, 0 | r2 = r0 - 0;
0x0000306e ldr r1, [sp, 0x40] | r1 = *(arg_40h);
| if (r2 < r0) {
0x00003070 blt 0x3084 | goto label_104;
| }
0x00003072 subs r4, r4, r2 | r4 -= r2;
0x00003074 add r1, r2 | r1 += r2;
0x00003076 cmp r4, 0 |
0x00003078 bgt 0x3062 |
| } while (r4 > 0);
0x0000307a mov r4, r6 | r4 = r6;
0x0000307c mov r6, r8 | r6 = r8;
0x0000307e ldr.w r8, [sp, 0x38] | r8 = *(arg_38h);
0x00003082 b 0x3046 | goto label_16;
| label_104:
0x00003084 ldr r0, [r6] | r0 = *(r6);
0x00003086 cmp r0, 4 |
| if (r0 == 4) {
0x00003088 beq 0x3062 | goto label_17;
| }
0x0000308a cmp r0, 0xb |
| if (r0 == 0xb) {
0x0000308c beq 0x3062 | goto label_17;
| }
0x0000308e cmp r0, 0x1c |
0x00003090 mov r3, r6 | r3 = r6;
0x00003092 ldr r4, [sp, 0x30] | r4 = *(arg_30h);
0x00003094 mov r6, r8 | r6 = r8;
0x00003096 ldr.w r8, [sp, 0x38] | r8 = *(arg_38h);
| if (r0 == 0x1c) {
0x0000309a beq 0x30c0 | goto label_105;
| }
| label_19:
0x0000309c ldr r0, [sp, 0x2c] | r0 = *(fildes);
0x0000309e blx 0x1ab4 | fdipc_client_socket ();
0x000030a2 mov r0, r5 | r0 = r5;
0x000030a4 blx 0x1ab4 | fdipc_client_socket ();
0x000030a8 mov r0, r7 | r0 = r7;
0x000030aa blx 0x1664 | free (r0);
0x000030ae b 0x2fe2 | goto label_18;
| if (r0 == 0x1c) {
| label_103:
0x000030b0 beq 0x30bc | goto label_106;
| }
0x000030b2 ldr r2, [r4] | r2 = *(r4);
0x000030b4 cmp r2, 4 |
| if (r2 == 4) {
0x000030b6 beq 0x3046 | goto label_16;
| }
0x000030b8 cmp r2, 0xb |
| if (r2 == 0xb) {
0x000030ba beq 0x3046 | goto label_16;
| }
| label_106:
0x000030bc ldr r4, [sp, 0x30] | r4 = *(arg_30h);
0x000030be b 0x309c | goto label_19;
| label_105:
0x000030c0 ldr.w r2, [pc, 0x440] | r2 = *(0x00003504);
0x000030c4 str r3, [sp, 0x38] | *(arg_38h) = r3;
0x000030c6 add r2, pc | r2 += pc;
0x000030c8 ldr r1, [r2, 0x10] | r1 = *((r2 + 0x10));
0x000030ca mov r0, r1 | r0 = r1;
0x000030cc str r1, [sp, 0x30] | *(arg_30h) = r1;
0x000030ce blx 0x1898 | strlen (r0);
0x000030d2 ldr r1, [sp, 0x30] | r1 = *(arg_30h);
0x000030d4 mov r2, r0 | r2 = r0;
0x000030d6 mov r0, r4 | r0 = r4;
0x000030d8 blx 0x195c | fcn_0000195c ();
0x000030dc movs r1, 0 | r1 = 0;
0x000030de mov r0, r5 | r0 = r5;
0x000030e0 blx 0x1980 | r0 = fcn_00001980 ();
0x000030e4 cmp r0, 0 |
0x000030e6 ldr r3, [sp, 0x38] | r3 = *(arg_38h);
| if (r0 >= 0) {
0x000030e8 bge 0x309c | goto label_19;
| }
0x000030ea ldr r3, [r3] | r3 = *(r3);
0x000030ec movs r1, 1 | r1 = 1;
0x000030ee ldr.w r2, [pc, 0x418] |
0x000030f2 movs r0, 3 | r0 = 3;
0x000030f4 str r3, [sp] | *(sp) = r3;
0x000030f6 mov r3, sb | r3 = sb;
0x000030f8 add r2, pc | r2 = 0x6606;
0x000030fa blx 0x19cc | fcn_000019cc ();
0x000030fe b 0x309c | goto label_19;
| label_97:
0x00003100 ldr.w r1, [r3, 0x94] | r1 = *((r3 + 0x94));
0x00003104 mov r0, r1 | r0 = r1;
0x00003106 str r1, [sp, 0x30] | *(arg_30h) = r1;
0x00003108 blx 0x1898 | strlen (r0);
0x0000310c ldr r1, [sp, 0x30] | r1 = *(arg_30h);
0x0000310e mov r2, r0 | r2 = r0;
0x00003110 mov r0, r4 | r0 = r4;
0x00003112 blx 0x195c | fcn_0000195c ();
0x00003116 b 0x2f16 | goto label_20;
| label_96:
0x00003118 ldr r5, [r3, 0x20] | r5 = *((r3 + 0x20));
0x0000311a mov r0, r5 | r0 = r5;
0x0000311c blx 0x1898 | strlen (r0);
0x00003120 mov r1, r5 | r1 = r5;
0x00003122 mov r2, r0 | r2 = r0;
0x00003124 mov r0, r4 | r0 = r4;
0x00003126 blx 0x195c | fcn_0000195c ();
0x0000312a mov r0, r7 | r0 = r7;
0x0000312c blx 0x1664 | free (r0);
0x00003130 b.w 0x2142 | goto label_2;
| label_95:
0x00003134 ldr r2, [pc, 0x3d4] |
0x00003136 movs r1, 1 | r1 = 1;
0x00003138 movs r0, 3 | r0 = 3;
0x0000313a add r2, pc | r2 = 0x664a;
0x0000313c blx 0x19cc | fcn_000019cc ();
0x00003140 mov r0, r4 | r0 = r4;
0x00003142 bl 0x38b0 | fcn_000038b0 (r0);
0x00003146 mov r0, r5 | r0 = r5;
0x00003148 blx 0x1ab4 | fdipc_client_socket ();
0x0000314c b.w 0x2142 | goto label_2;
| label_94:
0x00003150 ldr r3, [pc, 0x3bc] |
0x00003152 add r3, pc | r3 = 0x6666;
0x00003154 ldr.w r7, [r3, 0x90] | r7 = *(0x66f6);
0x00003158 mov r0, r7 | r0 = r7;
0x0000315a blx 0x1898 | strlen (r0);
0x0000315e mov r1, r7 | r1 = r7;
0x00003160 mov r2, r0 | r2 = r0;
0x00003162 mov r0, r4 | r0 = r4;
0x00003164 blx 0x195c | fcn_0000195c ();
0x00003168 str r5, [sp, 0x30] | *(arg_30h) = r5;
| label_21:
0x0000316a ldr r3, [sp, 0x2c] | r3 = *(fildes);
0x0000316c movs r2, 0x51 | r2 = 0x51;
0x0000316e mov r1, fp | r1 = fp;
0x00003170 ldr r0, [r3] | r0 = *(r3);
0x00003172 blx 0x1640 | r0 = read (r0, r1, r2);
0x00003176 subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 <= r0) {
0x00003178 ble.w 0x373c | goto label_107;
| }
0x0000317c mov r5, fp | r5 = fp;
| do {
| label_33:
0x0000317e mov r2, r7 | r2 = r7;
0x00003180 mov r1, r5 | r1 = r5;
0x00003182 mov r0, r4 | r0 = r4;
0x00003184 blx 0x195c | r0 = fcn_0000195c ();
0x00003188 subs r3, r0, 0 | r3 = r0 - 0;
| if (r3 < r0) {
0x0000318a blt.w 0x3718 | goto label_108;
| }
0x0000318e subs r7, r7, r3 | r7 -= r3;
0x00003190 add r5, r3 | r5 += r3;
0x00003192 bne 0x317e |
| } while (r7 != r7);
0x00003194 b 0x316a | goto label_21;
| label_93:
0x00003196 mov r1, r7 | r1 = r7;
0x00003198 mov r0, sb | r0 = sb;
0x0000319a blx 0x1838 | r0 = stat ();
| if (r0 != 0) {
0x0000319e cbnz r0, 0x3200 | goto label_109;
| }
0x000031a0 ldr r5, [r7, 0x10] | r5 = *((r7 + 0x10));
0x000031a2 and r3, r5, 0xf000 | r3 = r5 & 0xf000;
0x000031a6 cmp.w r3, 0x4000 |
| if (r3 == 0x4000) {
0x000031aa beq 0x31f6 | goto label_110;
| }
0x000031ac movs r1, 2 | r1 = 2;
0x000031ae mov r0, sb | r0 = sb;
0x000031b0 blx 0x1968 | r0 = fcn_00001968 ();
0x000031b4 cmp r0, 0 |
| if (r0 < 0) {
0x000031b6 blt.w 0x299e | goto label_4;
| }
0x000031ba ubfx r2, r5, 0, 9 | r2 = (r5 >> 0) & ((1 << 9) - 1);
| label_23:
0x000031be movw r1, 0x241 | r1 = 0x241;
0x000031c2 mov r0, sb | r0 = sb;
0x000031c4 blx 0x1844 | r0 = open (r0, r1, r2);
0x000031c8 mov r5, r0 | r5 = r0;
0x000031ca b 0x2ec0 | goto label_22;
| label_65:
0x000031cc blx 0x185c | r0 = ctype_b_loc ();
0x000031d0 ldr r3, [r0] | r3 = *(r0);
0x000031d2 addw r2, sp, 0x39d | __asm ("addw r2, path");
| do {
0x000031d6 mov r0, r2 | r0 = r2;
0x000031d8 adds r2, 1 | r2++;
0x000031da ldrb r1, [r0] | r1 = *(r0);
0x000031dc ldrh.w r1, [r3, r1, lsl 1] | offset_1 = r1 << 1;
| r1 = *((r3 + offset_1));
0x000031e0 lsls r1, r1, 0x12 | r1 <<= 0x12;
0x000031e2 bmi 0x31d6 |
| } while (r1 < r1);
0x000031e4 clz r3, sl | r3 &= sl;
0x000031e8 mov r2, r8 | r2 = r8;
0x000031ea lsrs r3, r3, 5 | r3 >>= 5;
0x000031ec mov r1, r4 | r1 = r4;
0x000031ee bl 0x3ec0 | fcn_00003ec0 (r0, r1, r2, r3);
0x000031f2 b.w 0x2142 | goto label_2;
| label_110:
0x000031f6 ldr r3, [sp, 0x30] | r3 = *(arg_30h);
0x000031f8 ldr.w r5, [r3, 0x88] | r5 = *((r3 + 0x88));
0x000031fc b.w 0x247e | goto label_3;
| label_109:
0x00003200 mov.w r2, 0x1a4 | r2 = 0x1a4;
0x00003204 b 0x31be | goto label_23;
| label_41:
0x00003206 add r7, sp, 0x39c | r7 += arg_39ch;
0x00003208 b 0x3218 |
| while (sb != 0) {
0x0000320a blx 0x185c | r0 = ctype_b_loc ();
0x0000320e ldr r3, [r0] | r3 = *(r0);
0x00003210 ldrh.w r3, [r3, sb, lsl 1] | offset_2 = sb << 1;
| r3 = *((r3 + offset_2));
0x00003214 lsls r0, r3, 0x12 | r0 = r3 << 0x12;
| if (r0 >= r3) {
0x00003216 bpl 0x3250 | goto label_111;
| }
0x00003218 mov r5, r7 | r5 = r7;
0x0000321a ldrb sb, [r7], 1 | sb = *(r7);
| r7++;
0x0000321e cmp.w sb, 0 |
0x00003222 bne 0x320a |
| }
0x00003224 ldr r3, [pc, 0x2ec] |
0x00003226 add r3, pc | r3 = 0x673e;
0x00003228 ldr.w r5, [r3, 0xec] | r5 = *(0x682a);
0x0000322c b.w 0x247e | goto label_3;
| label_46:
0x00003230 ldr r5, [sp, 0x24] | r5 = *(s1);
0x00003232 movs r2, 0x40 | r2 = 0x40;
0x00003234 addw r1, sp, 0x39d | __asm ("addw r1, path");
0x00003238 mov r0, r5 | r0 = r5;
0x0000323a blx 0x1940 | strncpy (r0, r1, r2);
0x0000323e ldr r2, [sp, 0x18] | r2 = *(arg_18h);
0x00003240 movs r3, 1 | r3 = 1;
0x00003242 str r3, [sp, 0x18] | *(arg_18h) = r3;
0x00003244 strb.w r2, [r5, 0x40] | *((r5 + 0x40)) = r2;
0x00003248 ldr.w r5, [sl, 0x5c] | r5 = *((sl + 0x5c));
0x0000324a str r4, [r3, r1] | *((r3 + r1)) = r4;
0x0000324c b.w 0x247e | goto label_3;
| label_111:
0x00003250 ldr r7, [pc, 0x2c4] |
0x00003252 add r7, pc | r7 = 0x676e;
0x00003254 ldr.w sb, [r7, 0xbc] | sb = *(0x682a);
0x00003258 mov r0, sb | r0 = sb;
0x0000325a blx 0x1898 | strlen (r0);
0x0000325e mov r1, sb | r1 = sb;
0x00003260 mov r2, r0 | r2 = r0;
0x00003262 mov r0, r5 | r0 = r5;
0x00003264 blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
| if (r0 == 0) {
0x00003268 cbnz r0, 0x3270 |
0x0000326a ldr r5, [r7, 0x40] | r5 = *((r7 + 0x40));
0x0000326c b.w 0x247e | goto label_3;
| }
0x00003270 ldr r5, [r7, 0x44] | r5 = *((r7 + 0x44));
0x00003272 b.w 0x247e | goto label_3;
| label_47:
0x00003292 ldr r2, [pc, 0x28c] |
0x00003294 movs r1, 1 | r1 = 1;
0x00003296 movs r0, 6 | r0 = 6;
0x00003298 add r2, pc | r2 = 0x67be;
0x0000329a blx 0x19cc | fcn_000019cc ();
0x0000329e b.w 0x2496 | goto label_24;
| label_43:
0x000032a2 ldr.w r5, [sl, 0x54] | r5 = *((sl + 0x54));
0x000032a6 b.w 0x247e | goto label_3;
| label_42:
0x000032aa ldr.w r5, [sl, 0x4c] | r5 = *((sl + 0x4c));
0x000032ae b.w 0x247e | goto label_3;
| label_44:
0x000032b2 ldr.w sb, [sl, 0x64] | sb = *((sl + 0x64));
0x000032b6 mov r0, sb | r0 = sb;
0x000032b8 blx 0x1898 | strlen (r0);
0x000032bc mov r1, sb | r1 = sb;
0x000032be mov r2, r0 | r2 = r0;
0x000032c0 mov r0, r5 | r0 = r5;
0x000032c2 blx 0x18ec | strncasecmp (r0, r1, r2);
0x000032c6 str r0, [sp, 0x18] | *(arg_18h) = r0;
0x000032c8 cmp r0, 0 |
| if (r0 != 0) {
0x000032ca bne.w 0x342e | goto label_112;
| }
0x000032ce ldr r3, [pc, 0x254] |
0x000032d0 add r3, pc |
0x000032d2 ldr r3, [r3, 0x64] | r3 = *(0x685e);
0x000032d4 cmp r3, 0 |
| if (r3 > 0) {
0x000032d6 ble 0x32e8 |
0x000032d8 ldr r1, [pc, 0x24c] |
0x000032da ldr r0, [sp, 0x24] | r0 = *(s1);
0x000032dc add r1, pc | r1 = 0x6808;
0x000032de blx 0x15f8 | r0 = strcmp (r0, r1);
0x000032e2 cmp r0, 0 |
| if (r0 != 0) {
0x000032e4 bne.w 0x3452 | goto label_113;
| }
| }
0x000032e8 add r5, sp, 0x354 | r5 += arg_354h;
0x000032ea movs r2, 0x40 | r2 = 0x40;
0x000032ec addw r1, sp, 0x39d | __asm ("addw r1, path");
0x000032f0 mov r0, r5 | r0 = r5;
0x000032f2 blx 0x1940 | strncpy (r0, r1, r2);
0x000032f6 movs r3, 0 | r3 = 0;
0x000032f8 ldr r0, [sp, 0x24] | r0 = *(s1);
0x000032fa strb.w r3, [r5, 0x40] | *((r5 + 0x40)) = r3;
0x000032fe blx 0x15d4 | r0 = getpwnam ();
0x00003302 mov sb, r0 | sb = r0;
0x00003304 cmp r0, 0 |
| if (r0 == 0) {
0x00003306 beq 0x3394 | goto label_114;
| }
0x00003308 blx 0x173c | r0 = geteuid ();
0x0000330c cmp r0, 0 |
0x0000330e beq 0x337e |
| while (r0 == 0) {
| label_26:
0x00003310 ldr.w sl, [sb, 4] | sl = *((sb + 4));
| label_25:
0x00003314 mov r0, r5 | r0 = r5;
0x00003316 mov r1, sl | r1 = sl;
0x00003318 blx 0x1a80 | r0 = fcn_00001a80 ();
0x0000331c cmp r0, 0 |
| if (r0 == 0) {
0x0000331e beq 0x3394 | goto label_114;
| }
0x00003320 mov r1, sl | r1 = sl;
0x00003322 blx 0x15f8 | r0 = strcmp (r0, r1);
0x00003326 cmp r0, 0 |
| if (r0 != 0) {
0x00003328 bne 0x3394 | goto label_114;
| }
0x0000332a ldr r3, [pc, 0x200] | r3 = *(0x352e);
| label_35:
0x0000332c ldrd r5, sb, [sb, 8] | __asm ("ldrd r5, sb, [sb, 8]");
0x00003330 add r3, pc | r3 += pc;
0x00003332 ldr.w sl, [r3, 0x6c] | sl = *((r3 + 0x6c));
0x00003334 adr r0, 0x1b0 | r0 = 0x1b0;
0x00003336 mov r0, sl | r0 = sl;
0x00003338 blx 0x1898 | strlen (r0);
0x0000333c mov r1, sl | r1 = sl;
0x0000333e mov r2, r0 | r2 = r0;
0x00003340 mov r0, r4 | r0 = r4;
0x00003342 blx 0x195c | fcn_0000195c ();
0x00003346 ldr r2, [pc, 0x1e8] |
0x00003348 movs r0, 0x26 | r0 = 0x26;
0x0000334a ldr r3, [sp, 0x24] | r3 = *(s1);
0x0000334c movs r1, 1 | r1 = 1;
0x0000334e add r2, pc | r2 = 0x6884;
0x00003350 blx 0x19cc | fcn_000019cc ();
0x00003354 mov r0, r5 | r0 = r5;
0x00003356 blx 0x161c | r0 = getpwuid ();
| if (r0 != 0) {
0x0000335a cbz r0, 0x336a |
0x0000335c ldr r1, [pc, 0x1d4] |
0x0000335e ldr r0, [r0] | r0 = *(r0);
0x00003360 add r1, pc | r1 = 0x6898;
0x00003362 blx 0x15f8 | r0 = strcmp (r0, r1);
0x00003366 cmp r0, 0 |
| if (r0 == 0) {
0x00003368 beq 0x343a | goto label_115;
| }
| }
| label_28:
0x0000336a mov r0, sb | r0 = sb;
0x0000336c blx 0x1974 | fcn_00001974 ();
0x00003370 mov r0, r5 | r0 = r5;
0x00003372 blx 0x1760 | seteuid ();
0x00003376 movs r3, 2 | r3 = 2;
0x00003378 str r3, [sp, 0x18] | *(arg_18h) = r3;
0x0000337a b.w 0x2142 | goto label_2;
0x0000337e ldr r0, [sp, 0x24] | r0 = *(s1);
0x00003380 blx 0x1658 | r0 = getspnam ();
0x00003384 cmp r0, 0 |
0x00003386 beq 0x3310 |
| }
0x00003388 ldr.w sl, [r0, 4] | sl = *((r0 + 4));
0x0000338c cmp.w sl, 0 |
| if (sl != 0) {
0x00003390 bne 0x3314 | goto label_25;
| }
0x00003392 b 0x3310 | goto label_26;
| label_114:
0x00003394 ldr r0, [sp, 0x44] | r0 = *(arg_44h);
0x00003396 blx 0x17a8 | usleep (r0);
0x0000339a ldr r3, [pc, 0x19c] |
0x0000339c add r3, pc | r3 = 0x68da;
0x0000339e ldr r5, [r3, 0x68] | r5 = *(0x6942);
0x000033a0 mov r0, r5 | r0 = r5;
0x000033a2 blx 0x1898 | strlen (r0);
0x000033a6 mov r1, r5 | r1 = r5;
0x000033a8 mov r2, r0 | r2 = r0;
0x000033aa mov r0, r4 | r0 = r4;
0x000033ac blx 0x195c | fcn_0000195c ();
0x000033b0 ldr r2, [pc, 0x188] |
0x000033b2 movs r1, 1 | r1 = 1;
0x000033b4 ldr r3, [sp, 0x20] | r3 = *(arg_20h);
0x000033b6 movs r0, 0x26 | r0 = 0x26;
0x000033b8 add r2, pc | r2 = 0x68f8;
0x000033ba blx 0x19cc | fcn_000019cc ();
0x000033be b.w 0x2142 | goto label_2;
| label_48:
0x000033c2 ldrb.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x000033c6 cmp r3, 0 |
| if (r3 != 0) {
0x000033c8 bne.w 0x2b4a | goto label_27;
| }
0x000033cc ldr r1, [pc, 0x170] |
0x000033ce add r3, sp, 0x68 | r3 += arg_68h;
0x000033d0 add r2, sp, 0x64 | r2 += arg_64h;
0x000033d2 mov r0, r5 | r0 = r5;
0x000033d4 add.w sb, sp, 0x5c | sb += arg_5ch;
0x000033d8 add r5, sp, 0x60 | r5 += arg_60h;
0x000033da add.w sl, sp, 0x6c | sl += arg_6ch;
0x000033de str r3, [sp, 0x2c] | *(fildes) = r3;
0x000033e0 str r3, [sp, 4] | var_4h = r3;
0x000033e2 add r1, pc | r1 = 0x6926;
0x000033e4 str r2, [sp, 0x1c] | *(str) = r2;
0x000033e6 mov r3, r5 | r3 = r5;
0x000033e8 str r2, [sp] | *(sp) = r2;
0x000033ea mov r2, sb | r2 = sb;
0x000033ec str r7, [sp, 0xc] | *(arg_ch) = r7;
0x000033ee str.w sl, [sp, 8] | __asm ("str.w sl, [arg_8h]");
0x000033f2 blx 0x1910 | r0 = isoc99_sscanf ();
0x000033f6 cmp r0, 6 |
| if (r0 == 6) {
0x000033f8 bne 0x3424 |
0x000033fa ldr r3, [sp, 0x5c] | r3 = *(arg_5ch);
0x000033fc cmp r3, 0xff |
| if (r3 > 0xff) {
0x000033fe bgt 0x3424 | goto label_29;
| }
0x00003400 ldr r2, [sp, 0x60] | r2 = *(arg_60h);
0x00003402 cmp r2, 0xff |
| if (r2 > 0xff) {
0x00003404 bgt 0x3424 | goto label_29;
| }
0x00003406 ldr r1, [sp, 0x1c] | r1 = *(str);
0x00003408 ldr r1, [r1] | r1 = *(r1);
0x0000340a cmp r1, 0xff |
| if (r1 > 0xff) {
0x0000340c bgt 0x3424 | goto label_29;
| }
0x0000340e ldr r0, [sp, 0x2c] | r0 = *(fildes);
0x00003410 ldr r5, [r0] | r5 = *(r0);
0x00003412 cmp r5, 0xff |
| if (r5 > 0xff) {
0x00003414 bgt 0x3424 | goto label_29;
| }
0x00003416 ldr r0, [sp, 0x6c] | r0 = *(arg_6ch);
0x00003418 cmp r0, 0xff |
| if (r0 > 0xff) {
0x0000341a bgt 0x3424 | goto label_29;
| }
0x0000341c ldr r0, [r7] | r0 = *(r7);
0x0000341e cmp r0, 0xff |
| if (r0 <= 0xff) {
0x00003420 ble.w 0x3554 | goto label_116;
| }
| }
| label_29:
0x00003424 ldr r3, [pc, 0x11c] |
0x00003426 add r3, pc | r3 = 0x696e;
0x00003428 ldr r5, [r3, 0x14] | r5 = *(0x6982);
0x0000342a b.w 0x247e | goto label_3;
| label_112:
0x0000342e movs r3, 0 | r3 = 0;
0x00003430 ldr.w r5, [sl, 0x60] | r5 = *((sl + 0x60));
0x00003434 str r3, [sp, 0x18] | *(arg_18h) = r3;
0x00003436 b.w 0x247e | goto label_3;
| label_115:
0x0000343a ldr r0, [pc, 0x10c] |
0x0000343c mov r1, r7 | r1 = r7;
0x0000343e add r0, pc | r0 = 0x698c;
0x00003440 blx 0x1838 | r0 = stat ();
0x00003444 cmp r0, 0 |
| if (r0 < 0) {
0x00003446 blt 0x336a | goto label_28;
| }
0x00003448 ldr r0, [pc, 0x100] |
0x0000344a add r0, pc | r0 = 0x699a;
0x0000344c blx 0x1814 | system (r0);
0x00003450 b 0x336a | goto label_28;
| label_113:
0x00003452 ldr.w r5, [sl, 0x68] | r5 = *((sl + 0x68));
0x00003456 mov r0, r5 | r0 = r5;
0x00003458 blx 0x1898 | strlen (r0);
0x0000345c mov r1, r5 | r1 = r5;
0x0000345e mov r2, r0 | r2 = r0;
0x00003460 mov r0, r4 | r0 = r4;
0x00003462 blx 0x195c | fcn_0000195c ();
0x00003466 ldr r2, [pc, 0xe8] |
0x00003468 movs r1, 1 | r1 = 1;
0x0000346a ldr r3, [sp, 0x20] | r3 = *(arg_20h);
0x0000346c movs r0, 0x26 | r0 = 0x26;
0x0000346e add r2, pc | r2 = 0x69c4;
0x00003470 blx 0x19cc | fcn_000019cc ();
0x00003474 b.w 0x2142 | goto label_2;
| label_116:
0x00003554 strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x00003558 addw r0, sp, 0x101 | __asm ("addw r0, arg_101h");
0x0000355c ldr r3, [pc, 0x228] |
0x0000355e movs r2, 0x3e | r2 = 0x3e;
0x00003560 strd r1, r5, [sp, 8] | __asm ("strd r1, r5, [sp, 8]");
0x00003564 movs r1, 1 | r1 = 1;
0x00003566 add r3, pc | r3 = 0x6cf2;
0x00003568 blx 0x18f8 | sprintf_chk ();
0x0000356c ldr r2, [sp, 0x6c] | r2 = *(arg_6ch);
0x0000356e mov r0, r8 | r0 = r8;
0x00003570 ldr r3, [r7] | r3 = *(r7);
0x00003572 add.w r3, r3, r2, lsl 8 | r3 += (r2 << 8);
0x00003576 str.w r3, [r8, 4] | __asm ("str.w r3, [r8, 4]");
0x0000357a bl 0x3b50 | r0 = fcn_00003b50 (r0);
0x0000357e cmp r0, 0 |
| if (r0 != 0) {
0x00003580 bne.w 0x3424 | goto label_29;
| }
0x00003584 ldr.w r0, [r8, 8] | r0 = *((r8 + 8));
0x00003588 cmp r0, 0 |
| if (r0 >= 0) {
0x0000358a blt 0x3598 |
0x0000358c blx 0x1ab4 | fdipc_client_socket ();
0x00003590 mov.w r3, -1 | r3 = -1;
0x00003594 str.w r3, [r8, 8] | __asm ("str.w r3, [r8, 8]");
| }
0x00003598 ldr r3, [pc, 0x1f0] |
0x0000359a add r3, pc | r3 = 0x6d2a;
0x0000359c ldr r5, [r3, 0x54] | r5 = *(0x6d7e);
0x0000359e b.w 0x247e | goto label_3;
| label_68:
0x000035a2 addw r0, sp, 0x39d | __asm ("addw r0, path");
0x000035a6 bl 0x3b2c | r0 = fcn_00003b2c (r0);
0x000035aa blx 0x1700 | r0 = unlink (r0);
0x000035ae cmp r0, 0 |
| if (r0 != 0) {
0x000035b0 bne.w 0x299e | goto label_4;
| }
0x000035b4 b.w 0x29ba | goto label_30;
| label_70:
0x000035b8 add r0, sp, 0x39c | r0 += arg_39ch;
0x000035ba bl 0x3b2c | r0 = fcn_00003b2c (r0);
0x000035be mov r1, r0 | r1 = r0;
0x000035c0 mov r0, r4 | r0 = r4;
0x000035c2 bl 0x3c10 | fcn_00003c10 (r0, r1);
0x000035c6 b.w 0x2142 | goto label_2;
| label_69:
0x000035ca movs r1, 0xc8 | r1 = 0xc8;
0x000035cc mov r0, fp | r0 = fp;
0x000035ce blx 0x1868 | r0 = getcwd ();
0x000035d2 mov r5, r0 | r5 = r0;
0x000035d4 cmp r0, 0 |
| if (r0 == 0) {
0x000035d6 beq.w 0x2bfa | goto label_31;
| }
0x000035da ldr r1, [pc, 0x1b4] |
0x000035dc movs r2, 5 | r2 = 5;
0x000035de mov r0, r4 | r0 = r4;
0x000035e0 add r1, pc | r1 = 0x6d76;
0x000035e2 bl 0x4034 | r0 = fcn_00004034 (r0, r1, r2);
| if (r0 != 0) {
0x000035e6 cbnz r0, 0x360c | goto label_117;
| }
0x000035e8 mov r0, r5 | r0 = r5;
0x000035ea blx 0x1898 | strlen (r0);
0x000035ee mov r1, r5 | r1 = r5;
0x000035f0 mov r2, r0 | r2 = r0;
0x000035f2 mov r0, r4 | r0 = r4;
0x000035f4 bl 0x4034 | r0 = fcn_00004034 (r0, r1, r2);
| if (r0 != 0) {
0x000035f8 cbnz r0, 0x360c | goto label_117;
| }
0x000035fa ldr r1, [pc, 0x198] |
0x000035fc movs r2, 0x19 | r2 = 0x19;
0x000035fe mov r0, r4 | r0 = r4;
0x00003600 add r1, pc | r1 = 0x6d9a;
0x00003602 bl 0x4034 | r0 = fcn_00004034 (r0, r1, r2);
0x00003606 cmp r0, 0 |
| if (r0 == 0) {
0x00003608 beq.w 0x2142 | goto label_2;
| }
| label_117:
0x0000360c mov fp, r4 |
0x0000360e b.w 0x24c2 | goto label_32;
| label_71:
0x00003612 addw r0, sp, 0x39d | __asm ("addw r0, path");
0x00003616 bl 0x3b2c | fcn_00003b2c (r0);
0x0000361a ldr.w sl, [sb, 0xc0] | sl = *((sb + 0xc0));
0x0000361e mov r5, r0 | r5 = r0;
0x00003620 str r0, [r7] | *(r7) = r0;
0x00003622 mov r0, sl | r0 = sl;
0x00003624 blx 0x1898 | strlen (r0);
0x00003628 mov r1, sl | r1 = sl;
0x0000362a mov r2, r0 | r2 = r0;
0x0000362c mov r0, r5 | r0 = r5;
0x0000362e blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
| if (r0 != 0) {
0x00003632 cbz r0, 0x367a |
0x00003634 ldr.w r7, [sb, 0xc4] | r7 = *((sb + 0xc4));
0x00003638 mov r0, r7 | r0 = r7;
0x0000363a blx 0x1898 | strlen (r0);
0x0000363e mov r1, r7 | r1 = r7;
0x00003640 mov r2, r0 | r2 = r0;
0x00003642 mov r0, r5 | r0 = r5;
0x00003644 blx 0x18ec | r0 = strncasecmp (r0, r1, r2);
| if (r0 == 0) {
0x00003648 cbnz r0, 0x3672 |
0x0000364a ldr r0, [pc, 0x14c] |
0x0000364c add r0, pc | r0 = 0x6dea;
0x0000364e blx 0x1814 | r0 = system (r0);
0x00003652 cmp r0, 0 |
| if (r0 >= 0) {
0x00003654 blt 0x366a |
0x00003656 ldr r2, [pc, 0x144] |
0x00003658 movs r1, 1 | r1 = 1;
0x0000365a movs r0, 6 | r0 = 6;
0x0000365c add r2, pc | r2 = 0x6dfe;
0x0000365e blx 0x19cc | fcn_000019cc ();
0x00003662 ldr.w r5, [sb, 0x54] | r5 = *((sb + 0x54));
0x00003666 b.w 0x247e | goto label_3;
| }
0x0000366a ldr r2, [pc, 0x134] |
0x0000366c add r2, pc | r2 = 0x6e12;
0x0000366e b.w 0x2d2e | goto label_14;
| }
0x00003672 ldr.w r5, [sb, 0xc8] | r5 = *((sb + 0xc8));
0x00003676 b.w 0x247e | goto label_3;
| }
0x0000367a adds r0, r5, 5 | r0 = r5 + 5;
0x0000367c mov r1, r7 | r1 = r7;
0x0000367e str r0, [r7] | *(r7) = r0;
0x00003680 movs r2, 8 | r2 = 8;
0x00003682 blx 0x1610 | strtol (r0, r1, r2);
0x00003686 ldr.w sl, [r7] | sl = *(r7);
0x0000368a mov sb, r0 | sb = r0;
0x0000368c str.w r8, [sp, 0x1c] | __asm ("str.w r8, [str]");
0x00003690 mov r8, r7 | r8 = r7;
0x00003692 mov r7, r6 | r7 = r6;
0x00003694 mov r6, r4 | r6 = r4;
0x00003696 b 0x36a6 |
| while (r4 != 0) {
0x00003698 blx 0x185c | r0 = ctype_b_loc ();
0x0000369c ldr r3, [r0] | r3 = *(r0);
0x0000369e ldrh.w r3, [r3, r4, lsl 1] | offset_3 = r4 << 1;
| r3 = *((r3 + offset_3));
0x000036a2 lsls r3, r3, 0x12 | r3 <<= 0x12;
| if (r3 >= r3) {
0x000036a4 bpl 0x36b0 | goto label_118;
| }
0x000036a6 mov r5, sl | r5 = sl;
0x000036a8 ldrb r4, [sl], 1 | r4 = *(sl);
| sl++;
0x000036ac cmp r4, 0 |
0x000036ae bne 0x3698 |
| }
| label_118:
0x000036b0 mov r4, r6 | r4 = r6;
0x000036b2 mov r6, r7 | r6 = r7;
0x000036b4 mov r7, r8 | r7 = r8;
0x000036b6 movs r1, 0xc0 | r1 = 0xc0;
0x000036b8 mov r0, fp | r0 = fp;
0x000036ba str r5, [r7] | *(r7) = r5;
0x000036bc ldr.w r8, [sp, 0x1c] | r8 = *(str);
0x000036c0 blx 0x1868 | r0 = getcwd ();
0x000036c4 cmp r0, 0 |
| if (r0 == 0) {
0x000036c6 beq 0x3756 | goto label_119;
| }
0x000036c8 mov r0, fp | r0 = fp;
0x000036ca blx 0x1898 | r0 = strlen (r0);
0x000036ce mov r7, r0 | r7 = r0;
0x000036d0 mov r0, r5 | r0 = r5;
0x000036d2 blx 0x1898 | r0 = strlen (r0);
0x000036d6 adds r3, r7, r0 | r3 = r7 + r0;
0x000036d8 adds r3, 1 | r3++;
0x000036da cmp.w r3, 0x100 |
| if (r3 > 0x100) {
0x000036de bhi 0x3756 | goto label_119;
| }
0x000036e0 ldr r1, [pc, 0xc0] |
0x000036e2 rsb.w r3, r7, 0x100 | r3 = 0x100 - r7;
0x000036e6 adds r3, 1 | r3++;
0x000036e8 movs r2, 1 | r2 = 1;
0x000036ea add.w r0, fp, r7 | r0 = fp + r7;
0x000036ee add r1, pc | r1 = 0x6e96;
0x000036f0 blx 0x1790 | memcpy_chk ();
0x000036f4 adds r0, r7, 1 | r0 = r7 + 1;
0x000036f6 rsb.w r2, r7, 0x100 | r2 = 0x100 - r7;
0x000036fa mov r1, r5 | r1 = r5;
0x000036fc add r0, fp | r0 += fp;
0x000036fe blx 0x17c0 | strcpy_chk ()
0x00003702 mov r1, sb | r1 = sb;
0x00003704 mov r0, r5 | r0 = r5;
0x00003706 blx 0x1a74 | r0 = fcn_00001a74 ();
0x0000370a cmp r0, 0 |
| if (r0 < 0) {
0x0000370c blt 0x3762 | goto label_120;
| }
0x0000370e ldr r3, [pc, 0x98] |
0x00003710 add r3, pc | r3 = 0x6ebe;
0x00003712 ldr r5, [r3, 0x54] | r5 = *(0x6f12);
0x00003714 b.w 0x247e | goto label_3;
0x00003716 bkpt 0xb3 | __asm ("bkpt 0xb3");
| label_108:
0x00003718 blx 0x18d4 | r0 = errno_location ();
0x0000371c ldr r3, [r0] | r3 = *(r0);
0x0000371e cmp r3, 4 |
| if (r3 == 4) {
0x00003720 beq.w 0x317e | goto label_33;
| }
0x00003724 cmp r3, 0xb |
| if (r3 == 0xb) {
0x00003726 beq.w 0x317e | goto label_33;
| }
0x0000372a ldr r5, [sp, 0x30] | r5 = *(arg_30h);
0x0000372c mov r0, r4 | r0 = r4;
0x0000372e bl 0x38b0 | fcn_000038b0 (r0);
0x00003732 mov r0, r5 | r0 = r5;
0x00003734 blx 0x1ab4 | fdipc_client_socket ();
0x00003738 b.w 0x2142 | goto label_2;
| label_107:
0x0000373c ldr r5, [sp, 0x30] | r5 = *(arg_30h);
0x0000373e b.w 0x2ed0 | goto label_34;
| label_67:
0x00003742 add r0, sp, 0x39c | r0 += arg_39ch;
0x00003744 bl 0x3b2c | r0 = fcn_00003b2c (r0);
0x00003748 blx 0x16ac | r0 = rmdir ();
0x0000374c cmp r0, 0 |
| if (r0 != 0) {
0x0000374e bne.w 0x299e | goto label_4;
| }
0x00003752 b.w 0x29ba | goto label_30;
| label_119:
0x00003756 ldr r3, [pc, 0x54] |
0x00003758 add r3, pc | r3 = 0x6f0a;
0x0000375a ldr.w r5, [r3, 0x88] | r5 = *(0x6f92);
0x0000375e b.w 0x247e | goto label_3;
| label_120:
0x00003762 blx 0x18d4 | r0 = errno_location ();
0x00003766 ldr r0, [r0] | r0 = *(r0);
0x00003768 blx 0x1808 | strerror (r0);
0x0000376c ldr r2, [pc, 0x40] |
0x0000376e mov r3, r5 | r3 = r5;
0x00003770 str r0, [sp] | *(sp) = r0;
0x00003772 movs r1, 1 | r1 = 1;
0x00003774 movs r0, 3 | r0 = 3;
0x00003776 add r2, pc | r2 = 0x6f2a;
0x00003778 blx 0x19cc | fcn_000019cc ();
0x0000377c mov r0, r4 | r0 = r4;
0x0000377e bl 0x38b0 | fcn_000038b0 (r0);
0x00003782 b.w 0x2142 | goto label_2;
0x000037e8 adds r0, 0x14 | r0 += 0x14;
0x000037ea b 0x332c | goto label_35;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/bin/vftpd @ 0x45cc */
| #include <stdint.h>
|
; (fcn) fcn.000045cc () | void fcn_000045cc (int16_t arg_1h, int16_t arg_a8h, int16_t arg_ach, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_ch_2;
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_18h_2;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_28h_2;
| int16_t var_2ch_2;
| int16_t var_30h_2;
| int16_t var_3ch_2;
| int16_t var_23ch;
| int16_t var_244h;
| int16_t var_18h;
| int16_t var_28h;
| int32_t var_4h;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| char * s;
| int16_t var_24h_2;
| int16_t var_84h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| label_7:
0x00004204 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00004208 sub.w sp, sp, 0x294 |
0x0000420c str r2, [sp, 0x18] | var_18h_2 = r2;
0x0000420e add.w sl, sp, 0x30 | sl += var_30h_2;
0x00004212 movs r6, 0 | r6 = 0;
0x00004214 ldr r2, [pc, 0x2f4] |
0x00004216 str r3, [sp, 0x10] | var_10h_2 = r3;
0x00004218 ldr r3, [pc, 0x2f4] | r3 = *(0x4510);
0x0000421a add r2, pc | r2 = 0x872a;
0x0000421c str r0, [sp, 0x1c] | var_1ch = r0;
0x0000421e str r1, [sp, 0xc] | var_ch_2 = r1;
0x00004220 ldr r3, [r2, r3] |
0x00004222 ldr r4, [r0, 0xc] | r4 = *((r0 + 0xc));
0x00004224 ldr r3, [r3] | r3 = *(0x872a);
0x00004226 str r3, [sp, 0x28c] | var_18h = r3;
0x00004228 mov.w r3, 0 | r3 = 0;
0x0000422c strd r6, r6, [sl] | __asm ("strd r6, r6, [sl]");
0x00004230 str.w r6, [sl, 8] | __asm ("str.w r6, [sl, 8]");
0x00004234 ldrb r3, [r4] | r3 = *(r4);
0x00004236 cmp r3, 0 |
| if (r3 == 0) {
0x00004238 beq.w 0x4496 | goto label_10;
| }
0x0000423c add r3, sp, 0x3c | r3 += var_3ch_2;
0x0000423e mov r8, r6 | r8 = r6;
0x00004240 mov sb, r3 | sb = r3;
0x00004242 str r3, [sp, 0x14] | var_14h_2 = r3;
| label_0:
0x00004244 movs r1, 0x20 | r1 = 0x20;
0x00004246 mov r0, r4 | r0 = r4;
0x00004248 blx 0x18a4 | r0 = strchr (r0, r1);
0x0000424c mov r5, r0 | r5 = r0;
0x0000424e cmp r0, 0 |
| if (r0 == 0) {
0x00004250 beq.w 0x4356 | goto label_11;
| }
0x00004254 sub.w fp, r5, r4 |
0x00004258 add.w r0, fp, 1 | r0 += arg_1h;
0x0000425c cmp.w r0, 0x400 |
| if (r0 > 0x400) {
0x00004260 bgt.w 0x436e | goto label_12;
| }
| label_1:
0x00004264 blx 0x17f0 | r0 = malloc (r0);
0x00004268 mov r7, r0 | r7 = r0;
0x0000426a cmp r0, 0 |
| if (r0 == 0) {
0x0000426c beq.w 0x44fa | goto label_13;
| }
0x00004270 mov r1, r4 | r1 = r4;
0x00004272 mov r2, fp | r2 = fp;
0x00004274 blx 0x1940 | strncpy (r0, r1, r2);
0x00004278 strb.w r8, [r7, fp] | *((r7 + fp)) = r8;
0x0000427c adds r6, 1 | r6++;
0x0000427e str r7, [sb], 4 | *(sb) = r7;
| sb += 4;
0x00004282 mov r4, r5 | r4 = r5;
0x00004284 ldrb r3, [r5] | r3 = *(r5);
0x00004286 cmp r3, 0x20 |
| if (r3 != 0x20) {
0x00004288 bne 0x4292 | goto label_14;
| }
| do {
0x0000428a ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x0000428e cmp r3, 0x20 |
0x00004290 beq 0x428a |
| } while (r3 == 0x20);
| label_14:
0x00004292 cmp r3, 0 |
| if (r3 != 0) {
0x00004294 bne 0x4244 | goto label_0;
| }
0x00004296 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x00004298 add.w r6, r3, r6, lsl 2 | r6 = r3 + (r6 << 2);
| label_6:
0x0000429c movs r3, 0 | r3 = 0;
0x0000429e str r3, [r6] | *(r6) = r3;
0x000042a0 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x000042a2 ldr r5, [r3] | r5 = *(r3);
0x000042a4 blx 0x173c | r0 = geteuid ();
0x000042a8 mov r4, r0 | r4 = r0;
0x000042aa blx 0x1778 | getegid ();
0x000042ae mov r1, r4 | r1 = r4;
0x000042b0 mov r6, r0 | r6 = r0;
0x000042b2 mov r0, r4 | r0 = r4;
0x000042b4 blx 0x18bc | setreuid ();
0x000042b8 mov r1, r6 | r1 = r6;
0x000042ba mov r4, r0 | r4 = r0;
0x000042bc mov r0, r6 | r0 = r6;
0x000042be blx 0x19bc | r0 = fcn_000019bc ();
0x000042c2 cmp r0, 0 |
| if (r0 < 0) {
0x000042c4 blt.w 0x43d4 | goto label_15;
| }
0x000042c8 mov r0, r5 | r0 = r5;
0x000042ca movs r1, 5 | r1 = 5;
0x000042cc blx 0x1968 | fcn_00001968 ();
0x000042d0 orrs r0, r4 | r0 |= r4;
| if (r0 < r4) {
0x000042d2 bmi.w 0x44b0 | goto label_16;
| }
0x000042d6 add r4, sp, 0x20 | r4 += var_20h;
0x000042d8 mov r0, r4 | r0 = r4;
0x000042da blx 0x1998 | r0 = fcn_00001998 ();
0x000042de cmp r0, 0 |
| if (r0 < 0) {
0x000042e0 blt.w 0x43e8 | goto label_17;
| }
| label_4:
0x000042e4 ldr r3, [sp, 0x10] | r3 = var_10h_2;
| if (r3 != 0) {
0x000042e6 cbz r3, 0x42f4 |
0x000042e8 add r0, sp, 0x28 | r0 += var_28h_2;
0x000042ea blx 0x1998 | r0 = fcn_00001998 ();
0x000042ee cmp r0, 0 |
| if (r0 != 0) {
0x000042f0 bne.w 0x442a | goto label_18;
| }
| }
| label_5:
0x000042f4 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000042f6 cmp r3, 0 |
| if (r3 == 0) {
0x000042f8 beq 0x43e2 | goto label_19;
| }
0x000042fa cmp r3, 1 |
| if (r3 != 1) {
0x000042fc bne.w 0x449e | goto label_20;
| }
0x00004300 ldr r5, [pc, 0x210] |
0x00004302 add r5, pc | r5 = 0x881a;
0x00004304 adds r5, 0x10 | r5 += 0x10;
| label_3:
0x00004306 blx 0x19e4 | fcn_000019e4 ();
0x0000430a ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x0000430c cmp r0, 0 |
0x0000430e mov r8, r0 | r8 = r0;
0x00004310 str r0, [r3] | *(r3) = r0;
| if (r0 < 0) {
0x00004312 blt.w 0x44e2 | goto label_21;
| }
| if (r0 == 0) {
0x00004316 beq 0x4380 | goto label_22;
| }
0x00004318 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x0000431a cmp r3, 0 |
| if (r3 == 0) {
0x0000431c beq.w 0x4438 | goto label_23;
| }
0x00004320 ldr r1, [sp, 0x10] | r1 = var_10h_2;
| if (r1 != 0) {
0x00004322 cbz r1, 0x432e |
0x00004324 ldrd r2, r0, [sp, 0x28] | __asm ("ldrd r2, r0, [var_28h_2]");
0x00004328 str r2, [r1] | *(r1) = r2;
0x0000432a blx 0x1ab4 | fdipc_client_socket ();
| }
0x0000432e ldrd r0, r4, [r4] | __asm ("ldrd r0, r4, [r4]");
0x00004332 blx 0x1ab4 | fdipc_client_socket ();
| label_2:
0x00004336 ldr r2, [pc, 0x1e0] |
0x00004338 ldr r3, [pc, 0x1d4] | r3 = *(0x4510);
0x0000433a add r2, pc | r2 = 0x8858;
0x0000433c ldr r3, [r2, r3] | r3 = *(0x8858);
0x0000433e ldr r2, [r3] | r2 = *(0x8858);
0x00004340 ldr r3, [sp, 0x28c] | r3 = var_18h;
0x00004342 eors r2, r3 | r2 ^= r3;
0x00004344 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00004348 bne.w 0x44ca | goto label_24;
| }
0x0000434c mov r0, r4 | r0 = r4;
0x0000434e add.w sp, sp, 0x294 |
0x00004352 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x00004356 mov r0, r4 | r0 = r4;
0x00004358 blx 0x1898 | r0 = strlen (r0);
0x0000435c adds r5, r4, r0 | r5 = r4 + r0;
0x0000435e sub.w fp, r5, r4 |
0x00004362 add.w r0, fp, 1 | r0 += arg_1h;
0x00004366 cmp.w r0, 0x400 |
| if (r0 <= 0x400) {
0x0000436a ble.w 0x4264 | goto label_1;
| }
| label_12:
0x0000436e ldr r2, [pc, 0x1ac] |
0x00004370 movs r1, 1 | r1 = 1;
0x00004372 movs r0, 3 | r0 = 3;
0x00004374 mov.w r4, -1 | r4 = -1;
0x00004378 add r2, pc | r2 = 0x889a;
0x0000437a blx 0x19cc | fcn_000019cc ();
0x0000437e b 0x4336 | goto label_2;
| label_22:
0x00004380 blx 0x18d4 | errno_location ();
0x00004384 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x00004386 mov r6, r0 | r6 = r0;
0x00004388 cmp r3, 0 |
| if (r3 != 0) {
0x0000438a bne 0x43f6 | goto label_25;
| }
0x0000438c ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0000438e movs r1, 1 | r1 = 1;
0x00004390 blx 0x170c | r0 = dup2 ();
0x00004394 cmp r0, 1 |
| if (r0 != 1) {
0x00004396 bne.w 0x44ce | goto label_26;
| }
0x0000439a ldr r0, [sp, 0xc] | r0 = var_ch_2;
0x0000439c blx 0x1ab4 | fdipc_client_socket ();
| do {
0x000043a0 ldr r0, [r4] | r0 = *(r4);
0x000043a2 blx 0x1ab4 | fdipc_client_socket ();
0x000043a6 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000043a8 blx 0x1ab4 | fdipc_client_socket ();
0x000043ac ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x000043ae cmp r3, 0 |
| if (r3 == 0) {
0x000043b0 beq 0x444e | goto label_27;
| }
0x000043b2 movs r1, 3 | r1 = 3;
0x000043b4 ldr r0, [sp, 0x2c] | r0 = var_2ch_2;
0x000043b6 blx 0x170c | r0 = dup2 ();
0x000043ba cmp r0, 3 |
0x000043bc add r4, sp, 0x28 | r4 += var_28h_2;
| if (r0 == 3) {
0x000043be beq 0x4442 | goto label_28;
| }
0x000043c0 ldr r2, [pc, 0x15c] |
0x000043c2 movs r1, 1 | r1 = 1;
0x000043c4 ldr r3, [r6] | r3 = *(r6);
0x000043c6 movs r0, 3 | r0 = 3;
0x000043c8 mov.w r4, -1 | r4 = -1;
0x000043cc add r2, pc | r2 = 0x88f0;
0x000043ce blx 0x19cc | fcn_000019cc ();
0x000043d2 b 0x4336 | goto label_2;
| label_15:
0x000043d4 movs r1, 5 | r1 = 5;
0x000043d6 mov r0, r5 | r0 = r5;
0x000043d8 mov.w r4, -1 | r4 = -1;
0x000043dc blx 0x1968 | fcn_00001968 ();
0x000043e0 b 0x4336 | goto label_2;
| label_19:
0x000043e2 ldr r5, [pc, 0x140] |
0x000043e4 add r5, pc | r5 = 0x890e;
0x000043e6 b 0x4306 | goto label_3;
| label_17:
0x000043e8 ldr r2, [pc, 0x13c] |
0x000043ea movs r1, 1 | r1 = 1;
0x000043ec movs r0, 3 | r0 = 3;
0x000043ee add r2, pc | r2 = 0x891a;
0x000043f0 blx 0x19cc | fcn_000019cc ();
0x000043f4 b 0x42e4 | goto label_4;
| label_25:
0x000043f6 ldr r0, [sp, 0x2b8] | r0 = s;
0x000043f8 movs r1, 1 | r1 = 1;
0x000043fa blx 0x170c | r0 = dup2 ();
0x000043fe cmp r0, 1 |
0x00004400 mov r7, r0 | r7 = r0;
| if (r0 != 1) {
0x00004402 bne 0x44b6 | goto label_29;
| }
0x00004404 ldr r0, [sp, 0x2b8] | r0 = s;
0x00004406 blx 0x1ab4 | fdipc_client_socket ();
0x0000440a ldr r0, [r4] | r0 = *(r4);
0x0000440c mov r1, r8 | r1 = r8;
0x0000440e blx 0x170c | r0 = dup2 ();
0x00004412 cmp r0, 0 |
0x00004414 beq 0x43a0 |
| } while (r0 == 0);
0x00004416 ldr r2, [pc, 0x114] |
0x00004418 mov r1, r7 | r1 = r7;
0x0000441a ldr r3, [r6] | r3 = *(r6);
0x0000441c movs r0, 3 | r0 = 3;
0x0000441e mov.w r4, -1 | r4 = -1;
0x00004422 add r2, pc | r2 = 0x8954;
0x00004424 blx 0x19cc | fcn_000019cc ();
0x00004428 b 0x4336 | goto label_2;
| label_18:
0x0000442a ldr r2, [pc, 0x104] |
0x0000442c movs r1, 1 | r1 = 1;
0x0000442e movs r0, 3 | r0 = 3;
0x00004430 add r2, pc | r2 = 0x8966;
0x00004432 blx 0x19cc | fcn_000019cc ();
0x00004436 b 0x42f4 | goto label_5;
| label_23:
0x00004438 ldrd r4, r0, [r4] | __asm ("ldrd r4, r0, [r4]");
0x0000443c blx 0x1ab4 | fdipc_client_socket ();
0x00004440 b 0x4336 | goto label_2;
| label_28:
0x00004442 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00004444 blx 0x1ab4 | fdipc_client_socket ();
0x00004448 ldr r0, [r4] | r0 = *(r4);
0x0000444a blx 0x1ab4 | fdipc_client_socket ();
| label_27:
0x0000444e ldr r2, [pc, 0xe4] |
0x00004450 add r7, sp, 0x23c | r7 += var_23ch;
0x00004452 mov r3, r7 | r3 = r7;
0x00004454 mov.w r4, -1 | r4 = -1;
0x00004458 add r2, pc | r2 = 0x8992;
0x0000445a ldm r2, {r0, r1, r2} | r0 = *(r2);
| r1 = *((r2 + 4));
| r2 = *((r2 + 8));
0x0000445c stm r3!, {r0, r1} | *(r3!) = r0;
| *((r3! + 4)) = r1;
0x0000445e add r0, sp, 0x244 | r0 += var_244h;
0x00004460 strb r2, [r3] | *(r3) = r2;
0x00004462 movs r2, 0x48 | r2 = 0x48;
0x00004464 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00004466 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x00004468 blx 0x17c0 | strcpy_chk ()
0x0000446c ldr r1, [sp, 0x14] | r1 = var_14h_2;
0x0000446e mov r2, sl | r2 = sl;
0x00004470 strd r7, r5, [sl] | __asm ("strd r7, r5, [sl]");
0x00004474 ldr r0, [r1] | r0 = *(r1);
0x00004476 blx 0x18b0 | execve ();
0x0000447a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0000447c ldr r0, [r6] | r0 = *(r6);
0x0000447e ldr r5, [r3, 0xc] | r5 = *((r3 + 0xc));
0x00004480 blx 0x1808 | strerror (r0);
0x00004484 ldr r2, [pc, 0xb0] |
0x00004486 movs r1, 1 | r1 = 1;
0x00004488 str r0, [sp] | *(sp) = r0;
0x0000448a mov r3, r5 | r3 = r5;
0x0000448c movs r0, 3 | r0 = 3;
0x0000448e add r2, pc | r2 = 0x89ca;
0x00004490 blx 0x19cc | fcn_000019cc ();
0x00004494 b 0x4336 | goto label_2;
| label_10:
0x00004496 add r3, sp, 0x3c | r3 += var_3ch_2;
0x00004498 mov r6, r3 | r6 = r3;
0x0000449a str r3, [sp, 0x14] | var_14h_2 = r3;
0x0000449c b 0x429c | goto label_6;
| label_20:
0x0000449e ldr r2, [pc, 0x9c] |
0x000044a0 movs r1, 1 | r1 = 1;
0x000044a2 movs r0, 3 | r0 = 3;
0x000044a4 mov.w r4, -1 | r4 = -1;
0x000044a8 add r2, pc | r2 = 0x89ea;
0x000044aa blx 0x19cc | fcn_000019cc ();
0x000044ae b 0x4336 | goto label_2;
| label_16:
0x000044b0 mov.w r4, -1 | r4 = -1;
0x000044b4 b 0x4336 | goto label_2;
| label_29:
0x000044b6 ldr r2, [pc, 0x88] |
0x000044b8 movs r1, 1 | r1 = 1;
0x000044ba ldr r3, [r6] | r3 = *(r6);
0x000044bc movs r0, 3 | r0 = 3;
0x000044be mov.w r4, -1 | r4 = -1;
0x000044c2 add r2, pc | r2 = 0x8a08;
0x000044c4 blx 0x19cc | fcn_000019cc ();
0x000044c8 b 0x4336 | goto label_2;
| label_24:
0x000044ca blx 0x16f4 | stack_chk_fail ();
| label_26:
0x000044ce ldr r2, [pc, 0x74] |
0x000044d0 movs r1, 1 | r1 = 1;
0x000044d2 ldr r3, [r6] | r3 = *(r6);
0x000044d4 movs r0, 3 | r0 = 3;
0x000044d6 mov.w r4, -1 | r4 = -1;
0x000044da add r2, pc | r2 = 0x8a24;
0x000044dc blx 0x19cc | fcn_000019cc ();
0x000044e0 b 0x4336 | goto label_2;
| label_21:
0x000044e2 blx 0x18d4 | errno_location ();
0x000044e6 ldr r2, [pc, 0x60] |
0x000044e8 movs r1, 1 | r1 = 1;
0x000044ea ldr r3, [r0] | r3 = *(r0);
0x000044ec movs r0, 3 | r0 = 3;
0x000044ee mov.w r4, -1 | r4 = -1;
0x000044f2 add r2, pc | r2 = 0x8a40;
0x000044f4 blx 0x19cc | fcn_000019cc ();
0x000044f8 b 0x4336 | goto label_2;
| label_13:
0x000044fa ldr r2, [pc, 0x50] |
0x000044fc movs r1, 1 | r1 = 1;
0x000044fe movs r0, 3 | r0 = 3;
0x00004500 mov.w r4, -1 | r4 = -1;
0x00004504 add r2, pc | r2 = 0x8a56;
0x00004506 blx 0x19cc | fcn_000019cc ();
0x0000450a b 0x4336 | goto label_2;
0x000045cc push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000045d0 mov r5, r0 | r5 = r0;
0x000045d2 ldr r4, [pc, 0x1bc] |
0x000045d4 mov r7, r3 | r7 = r3;
0x000045d6 sub sp, 0x88 |
0x000045d8 mov r8, r1 | r8 = r1;
0x000045da ldr r0, [pc, 0x1b8] | r0 = *(0x4796);
0x000045dc mov r6, r2 | r6 = r2;
0x000045de ldrb r3, [r5] | r3 = *(r5);
0x000045e0 add r4, pc | r4 = 0x8d76;
0x000045e2 ldr.w sb, [sp, 0xa8] | sb = *(arg_a8h);
0x000045e6 ldr r0, [r4, r0] |
0x000045e8 cmp r3, 0x2f |
0x000045ea ldr.w sl, [sp, 0xac] | sl = *(arg_ach);
0x000045ee ldr r0, [r0] | r0 = *(0x8d76);
0x000045f0 str r0, [sp, 0x84] | var_84h = r0;
0x000045f2 mov.w r0, 0 | r0 = 0;
| if (r3 != 0x2f) {
0x000045f6 bne 0x464e | goto label_30;
| }
| label_8:
0x000045f8 ldr r3, [pc, 0x19c] |
0x000045fa add r3, pc | r3 = 0x8d96;
0x000045fc ldr r4, [r3] | r4 = *(0x8d96);
| if (r4 != 0) {
0x000045fe cbnz r4, 0x460a | goto label_31;
| }
0x00004600 b 0x4742 | goto label_32;
| do {
0x00004602 ldr r4, [r4] | r4 = *(r4);
0x00004604 cmp r4, 0 |
| if (r4 == 0) {
0x00004606 beq.w 0x4742 | goto label_32;
| }
| label_31:
0x0000460a ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0000460c mov r1, r5 | r1 = r5;
0x0000460e blx 0x15f8 | r0 = strcmp (r0, r1);
0x00004612 cmp r0, 0 |
0x00004614 bne 0x4602 |
| } while (r0 != 0);
0x00004616 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00004618 cmp r3, 1 |
0x0000461a str r3, [r6] | *(r6) = r3;
| if (r3 != 1) {
0x0000461c beq 0x4698 |
0x0000461e cmp r3, 2 |
| if (r3 != 2) {
0x00004620 bne.w 0x474a | goto label_33;
| }
0x00004624 ldr r2, [pc, 0x174] |
0x00004626 ldr r3, [pc, 0x16c] | r3 = *(0x4796);
0x00004628 add r2, pc | r2 = 0x8dc8;
0x0000462a ldr r3, [r2, r3] | r3 = *(0x8dc8);
0x0000462c ldr r2, [r3] | r2 = *(0x8dc8);
0x0000462e ldr r3, [sp, 0x84] | r3 = var_84h;
0x00004630 eors r2, r3 | r2 ^= r3;
0x00004632 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00004636 bne.w 0x478a | goto label_34;
| }
0x0000463a mov r3, sb | r3 = sb;
0x0000463c mov r2, r7 | r2 = r7;
0x0000463e mov r1, r8 | r1 = r8;
0x00004640 mov r0, r4 | r0 = r4;
0x00004642 str.w sl, [sp, 0xa8] | __asm ("str.w sl, [arg_a8h]");
0x00004646 add sp, 0x88 |
0x00004648 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0000464c b 0x4204 | goto label_7;
| label_30:
0x0000464e ldr r4, [pc, 0x150] |
0x00004650 movs r1, 0x96 | r1 = 0x96;
0x00004652 add r4, pc | r4 = 0x8df8;
0x00004654 adds r4, 4 | r4 += 4;
0x00004656 mov r0, r4 | r0 = r4;
0x00004658 blx 0x1868 | r0 = getcwd ();
0x0000465c cmp r0, 0 |
| if (r0 == 0) {
0x0000465e beq 0x4742 | goto label_32;
| }
0x00004660 mov r0, r4 | r0 = r4;
0x00004662 blx 0x1898 | r0 = strlen (r0);
0x00004666 cmp r0, 1 |
0x00004668 mov r3, r0 | r3 = r0;
| if (r0 >= 1) {
0x0000466a bls 0x467c |
0x0000466c ldr r1, [pc, 0x134] |
0x0000466e adds r0, r4, r0 | r0 = r4 + r0;
0x00004670 rsb.w r3, r3, 0xfa | r3 = 0xfa - r3;
0x00004674 movs r2, 2 | r2 = 2;
0x00004676 add r1, pc | r1 = 0x8e1e;
0x00004678 blx 0x1790 | memcpy_chk ();
| }
0x0000467c mov r0, r5 | r0 = r5;
0x0000467e blx 0x1898 | r0 = strlen (r0);
0x00004682 cmp r0, 0x63 |
| if (r0 > 0x63) {
0x00004684 bhi 0x4736 | goto label_35;
| }
0x00004686 ldr r0, [pc, 0x120] |
0x00004688 mov r1, r5 | r1 = r5;
0x0000468a movs r2, 0xfa | r2 = 0xfa;
0x0000468c add r0, pc | r0 = 0x8e3a;
0x0000468e adds r0, 4 | r0 += 4;
0x00004690 mov r5, r0 | r5 = r0;
0x00004692 blx 0x18e0 | strcat_chk ();
0x00004696 b 0x45f8 | goto label_8;
| }
0x00004698 cmp.w sb, 0 |
| if (sb != 0) {
0x0000469c beq 0x46a6 |
0x0000469e mov.w r3, -1 | r3 = -1;
0x000046a2 str.w r3, [sb] | __asm ("str.w r3, [sb]");
| }
0x000046a6 movs r1, 1 | r1 = 1;
0x000046a8 mov.w r6, -1 | r6 = -1;
0x000046ac add r3, sp, 4 | r3 += var_28h;
0x000046ae movs r2, 0 | r2 = 0;
0x000046b0 mov r0, r1 | r0 = r1;
0x000046b2 str r6, [r7] | *(r7) = r6;
0x000046b4 blx 0x1718 | r0 = socketpair ();
0x000046b8 cmp r0, 0 |
| if (r0 < 0) {
0x000046ba blt 0x4772 | goto label_36;
| }
0x000046bc ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000046be ldrd r7, r8, [sp, 4] | __asm ("ldrd r7, r8, [var_28h]");
0x000046c2 blx 0x1ac0 | r0 = globfree ();
0x000046c6 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 < r0) {
0x000046c8 blt 0x476e | goto label_37;
| }
0x000046ca ldr r1, [pc, 0xe0] |
0x000046cc movs r0, 0 | r0 = 0;
0x000046ce strb.w r0, [sp, 0x1c] | var_40h = r0;
0x000046d2 movs r3, 0x64 | r3 = 0x64;
0x000046d4 movs r2, 0x5f | r2 = 0x5f;
0x000046d6 add r1, pc | r1 = 0x8e88;
0x000046d8 ldm r1, {r0, r1} | r0 = *(r1);
| r1 = *((r1 + 4));
0x000046da strh.w r1, [sp, 0x24] | var_24h_2 = r1;
0x000046de ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x000046e0 add r4, sp, 0x20 | r4 += s;
0x000046e2 str r0, [sp, 0x20] | s = r0;
0x000046e4 mov r0, r4 | r0 = r4;
0x000046e6 blx 0x15e0 | strncat_chk ();
0x000046ea mov r0, r4 | r0 = r4;
0x000046ec str r4, [sp, 0xc] | var_30h = r4;
0x000046ee blx 0x1898 | strlen (r0);
0x000046f2 add r3, sp, 0x1c | r3 += var_40h;
0x000046f4 adds r0, 1 | r0++;
0x000046f6 str r3, [sp, 0x14] | var_38h = r3;
0x000046f8 movs r3, 1 | r3 = 1;
0x000046fa str r0, [sp, 0x10] | var_34h = r0;
0x000046fc movs r2, 2 | r2 = 2;
0x000046fe str r3, [sp, 0x18] | var_3ch = r3;
0x00004700 add r1, sp, 0xc | r1 += var_30h;
0x00004702 mov r3, r7 | r3 = r7;
0x00004704 mov r0, r5 | r0 = r5;
0x00004706 blx 0x1a38 | r0 = fcn_00001a38 ();
0x0000470a cmp r0, 0 |
0x0000470c mov r0, r5 | r0 = r5;
| if (r0 < 0) {
0x0000470e blt 0x4782 | goto label_38;
| }
0x00004710 blx 0x1ab4 | fdipc_client_socket ();
0x00004714 mov r0, r7 | r0 = r7;
0x00004716 blx 0x1ab4 | fdipc_client_socket ();
| do {
| label_9:
0x0000471a ldr r2, [pc, 0x94] |
0x0000471c ldr r3, [pc, 0x74] | r3 = *(0x4794);
0x0000471e add r2, pc | r2 = 0x8ed4;
0x00004720 ldr r3, [r2, r3] | r3 = *(0x8ed4);
0x00004722 ldr r2, [r3] | r2 = *(0x8ed4);
0x00004724 ldr r3, [sp, 0x84] | r3 = var_84h;
0x00004726 eors r2, r3 | r2 ^= r3;
0x00004728 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000472c bne 0x478a | goto label_34;
| }
0x0000472e mov r0, r8 | r0 = r8;
0x00004730 add sp, 0x88 |
0x00004732 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_35:
0x00004736 ldr r2, [pc, 0x7c] |
0x00004738 movs r1, 1 | r1 = 1;
0x0000473a movs r0, 3 | r0 = 3;
0x0000473c add r2, pc | r2 = 0x8ef6;
0x0000473e blx 0x19cc | fcn_000019cc ();
| label_32:
0x00004742 movs r3, 0 | r3 = 0;
0x00004744 mov r8, r3 | r8 = r3;
0x00004746 str r3, [r6] | *(r6) = r3;
0x00004748 b 0x471a |
| } while (1);
| label_33:
0x0000474a ldr r2, [pc, 0x6c] |
0x0000474c movs r1, 1 | r1 = 1;
0x0000474e movs r0, 3 | r0 = 3;
0x00004750 add r2, pc | r2 = 0x8f0e;
0x00004752 blx 0x19cc | fcn_000019cc ();
0x00004756 cmp.w sb, 0 |
| if (sb != 0) {
0x0000475a beq 0x4764 |
0x0000475c mov.w r3, -1 | r3 = -1;
0x00004760 str.w r3, [sb] | __asm ("str.w r3, [sb]");
| }
0x00004764 mov.w r3, -1 | r3 = -1;
0x00004768 mov r8, r3 | r8 = r3;
0x0000476a str r3, [r7] | *(r7) = r3;
0x0000476c b 0x471a | goto label_9;
| label_37:
0x0000476e mov r8, r6 | r8 = r6;
0x00004770 b 0x471a | goto label_9;
| label_36:
0x00004772 ldr r2, [pc, 0x48] |
0x00004774 movs r1, 1 | r1 = 1;
0x00004776 movs r0, 3 | r0 = 3;
0x00004778 mov r8, r6 | r8 = r6;
0x0000477a add r2, pc | r2 = 0x8f3c;
0x0000477c blx 0x19cc | fcn_000019cc ();
0x00004780 b 0x471a | goto label_9;
| label_38:
0x00004782 mov r8, r6 | r8 = r6;
0x00004784 blx 0x1ab4 | fdipc_client_socket ();
0x00004788 b 0x471a | goto label_9;
| label_34:
0x0000478a blx 0x16f4 | stack_chk_fail ();
0x0000478e nop |
0x00004790 cmp r0, 0x28 |
0x00004792 movs r1, r0 | r1 = r0;
0x00004794 lsls r0, r3, 7 | r0 = r3 << 7;
0x00004796 movs r0, r0 |
0x00004798 cmp r3, 0x82 |
0x0000479a movs r1, r0 | r1 = r0;
0x0000479c movs r7, 0xe0 | r7 = 0xe0;
0x0000479e movs r1, r0 | r1 = r0;
0x000047a0 cmp r3, 0x2a |
0x000047a2 movs r1, r0 | r1 = r0;
0x000047a4 asrs r6, r1, 0x18 | r6 = r1 >> 0x18;
0x000047a6 movs r0, r0 |
0x000047a8 cmp r2, 0xf0 |
0x000047aa movs r1, r0 | r1 = r0;
0x000047ac asrs r2, r5, 0x16 | r2 = r5 >> 0x16;
0x000047ae movs r0, r0 |
0x000047b0 movs r6, 0xea | r6 = 0xea;
0x000047b2 movs r1, r0 | r1 = r0;
0x000047b4 asrs r4, r6, 0x13 | r4 = r6 >> 0x13;
0x000047b6 movs r0, r0 |
0x000047b8 asrs r0, r7, 0x14 | r0 = r7 >> 0x14;
0x000047ba movs r0, r0 |
0x000047bc asrs r2, r2, 0x13 | r2 >>= 0x13;
0x000047be movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/bin/vftpd @ 0x47c0 */
| #include <stdint.h>
|
; (fcn) fcn.000047c0 () | void fcn_000047c0 (int16_t arg_100h, int16_t arg_10ch, void * arg_30ch, int16_t arg_50ch, char * arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_24h;
| char * var_28h;
| char * src;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| char * s;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_4ch;
| int16_t var_50h;
| time_t * timer;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000047c0 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000047c4 subw sp, sp, 0x514 | __asm ("subw sp, sp, 0x514");
0x000047c8 str r1, [sp, 0x30] | var_30h = r1;
0x000047ca mov fp, r2 |
0x000047cc ldr.w r1, [pc, 0x498] | r1 = *(0x00004c68);
0x000047d0 ldr.w r2, [pc, 0x498] |
0x000047d4 ldrb r3, [r0] | r3 = *(r0);
0x000047d6 add r1, pc | r1 += pc;
0x000047d8 str r0, [sp, 0x28] | var_28h = r0;
0x000047da ldr r2, [r1, r2] | r2 = *((r1 + r2));
0x000047dc ldr r2, [r2] | r2 = *(0x4c6c);
0x000047de str.w r2, [sp, 0x50c] | __asm ("str.w r2, [arg_50ch]");
0x000047e2 mov.w r2, 0 | r2 = 0;
0x000047e6 cmp r3, 0 |
| if (r3 == 0) {
0x000047e8 beq.w 0x4c52 | goto label_7;
| }
0x000047ec mov r4, r0 | r4 = r0;
0x000047ee blx 0x1898 | strlen (r0);
0x000047f2 add r0, r4 | r0 += r4;
0x000047f4 ldrb r3, [r0, -0x1] | r3 = *((r0 - 0x1));
0x000047f8 sub.w r3, r3, 0x2f | r3 -= 0x2f;
0x000047fc clz r3, r3 | r3 &= r3;
0x00004800 lsrs r3, r3, 5 | r3 >>= 5;
0x00004802 str r3, [sp, 0x34] | var_34h = r3;
| label_6:
0x00004804 ldr.w r3, [pc, 0x468] |
0x00004808 add r3, pc |
0x0000480a str r3, [sp, 0x40] | var_40h = r3;
0x0000480c ldr.w r3, [pc, 0x464] | r3 = *(0x00004c74);
0x00004810 add r3, pc |
0x00004812 adds r3, 8 | r3 += 8;
0x00004814 str r3, [sp, 0x44] | var_44h = r3;
0x00004816 ldr.w r3, [pc, 0x460] | r3 = *(0x00004c78);
0x0000481a add r3, pc | r3 = 0x124ae;
0x0000481c adds r3, 8 | r3 += 8;
0x0000481e str r3, [sp, 0x3c] | s = r3;
0x00004820 movw r3, 0xcc80 |
0x00004824 movt r3, 0xfe1e | r3 = 0xfe1ecc80;
0x00004828 str r3, [sp, 0x38] | var_38h = r3;
0x0000482a b 0x4a58 |
| while (r3 == 0x2000) {
0x0000482c ldrd r3, r1, [r4, 0x20] | __asm ("ldrd r3, r1, [r4, 0x20]");
0x00004830 add.w sl, sp, 0x100 | sl += arg_100h;
0x00004834 ldr.w r2, [pc, 0x444] |
0x00004838 mov r0, sl | r0 = sl;
0x0000483a add r2, pc | r2 = 0x94ba;
0x0000483c str r2, [sp] | *(sp) = r2;
0x0000483e lsrs r2, r3, 8 | r2 = r3 >> 8;
0x00004840 uxtb r3, r3 | r3 = (int8_t) r3;
0x00004842 orr.w r2, r2, r1, lsl 24 | r2 |= (r1 << 24);
0x00004846 str r3, [sp, 8] | var_8h = r3;
0x00004848 movs r3, 0xb | r3 = 0xb;
0x0000484a str r2, [sp, 4] | var_4h = r2;
0x0000484c mov r1, r3 | r1 = r3;
0x0000484e movs r2, 1 | r2 = 1;
0x00004850 blx 0x1afc | fcn_00001afc ();
| label_0:
0x00004854 ldr.w r2, [pc, 0x428] |
0x00004858 ldr.w ip, [pc, 0x428] | ip = *(0x00004c84);
0x0000485c ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0000485e add r2, pc | r2 = 0x94e2;
0x00004860 ldm r2, {r0, r1, r2} | r0 = *(r2);
| r1 = *((r2 + 4));
| r2 = *((r2 + 8));
0x00004862 add ip, pc |
0x00004864 add.w r7, ip, 0x58 | r7 = ip + 0x58;
0x00004868 and lr, r3, 0xf000 | lr = r3 & 0xf000;
0x0000486c cmp.w lr, 0x4000 |
0x00004870 stm r7!, {r0, r1} | *(r7!) = r0;
| *((r7! + 4)) = r1;
0x00004872 strh r2, [r7], 2 | *(r7) = r2;
| r7 += 2;
0x00004876 lsr.w r2, r2, 0x10 | r2 >>= 0x10;
0x0000487a strb r2, [r7] | *(r7) = r2;
0x0000487c itt eq |
| if (lr != 0x4000) {
0x0000487e moveq r2, 0x64 | r2 = 0x64;
| }
| if (lr != 0x4000) {
0x00004880 strbeq r2, [ip, 0x58] | *((ip + 0x58)) = r2;
| }
| if (lr != 0x4000) {
0x00004884 beq 0x48a4 |
0x00004886 cmp.w lr, 0x2000 |
0x0000488a itt eq |
| if (lr != 0x2000) {
0x0000488c moveq r2, 0x63 | r2 = 0x63;
| }
| if (lr != 0x2000) {
0x0000488e strbeq r2, [ip, 0x58] | *((ip + 0x58)) = r2;
| }
| if (lr == 0x2000) {
0x00004892 beq 0x48a4 | goto label_1;
| }
0x00004894 cmp.w lr, 0x6000 |
0x00004898 itt eq |
| if (lr != 0x6000) {
0x0000489a moveq r2, 0x62 | r2 = 0x62;
| }
| if (lr != 0x6000) {
0x0000489c strbeq r2, [ip, 0x58] | *((ip + 0x58)) = r2;
| }
| if (lr != 0x6000) {
0x000048a0 bne.w 0x4b46 | goto label_8;
| }
| }
| label_1:
0x000048a4 lsls r7, r3, 0x17 | r7 = r3 << 0x17;
| if (r7 < r3) {
0x000048a6 bpl 0x48b2 |
0x000048a8 ldr r2, [pc, 0x3dc] |
0x000048aa movs r1, 0x72 | r1 = 0x72;
0x000048ac add r2, pc | r2 = 0x9538;
0x000048ae strb.w r1, [r2, 0x59] | *((r2 + 0x59)) = r1;
| }
0x000048b2 lsls r0, r3, 0x18 | r0 = r3 << 0x18;
| if (r0 < r3) {
0x000048b4 bpl 0x48c0 |
0x000048b6 ldr r2, [pc, 0x3d4] |
0x000048b8 movs r1, 0x77 | r1 = 0x77;
0x000048ba add r2, pc | r2 = 0x954c;
0x000048bc strb.w r1, [r2, 0x5a] | *((r2 + 0x5a)) = r1;
| }
0x000048c0 ands r7, r3, 0x40 | r7 = r3 & 0x40;
| if (r7 != r3) {
0x000048c4 beq 0x48d0 |
0x000048c6 ldr r2, [pc, 0x3c8] |
0x000048c8 movs r1, 0x78 | r1 = 0x78;
0x000048ca add r2, pc | r2 = 0x9560;
0x000048cc strb.w r1, [r2, 0x5b] | *((r2 + 0x5b)) = r1;
| }
0x000048d0 lsls r1, r3, 0x1a | r1 = r3 << 0x1a;
| if (r1 < r3) {
0x000048d2 bpl 0x48de |
0x000048d4 ldr r2, [pc, 0x3bc] |
0x000048d6 movs r1, 0x72 | r1 = 0x72;
0x000048d8 add r2, pc | r2 = 0x9570;
0x000048da strb.w r1, [r2, 0x5c] | *((r2 + 0x5c)) = r1;
| }
0x000048de lsls r0, r3, 0x1b | r0 = r3 << 0x1b;
| if (r0 < r3) {
0x000048e0 bpl 0x48ec |
0x000048e2 ldr r2, [pc, 0x3b4] |
0x000048e4 movs r1, 0x77 | r1 = 0x77;
0x000048e6 add r2, pc | r2 = 0x9584;
0x000048e8 strb.w r1, [r2, 0x5d] | *((r2 + 0x5d)) = r1;
| }
0x000048ec ands r0, r3, 8 | r0 = r3 & 8;
| if (r0 != r3) {
0x000048f0 beq 0x48fc |
0x000048f2 ldr r2, [pc, 0x3a8] |
0x000048f4 movs r1, 0x78 | r1 = 0x78;
0x000048f6 add r2, pc | r2 = 0x9598;
0x000048f8 strb.w r1, [r2, 0x5e] | *((r2 + 0x5e)) = r1;
| }
0x000048fc lsls r1, r3, 0x1d | r1 = r3 << 0x1d;
| if (r1 < r3) {
0x000048fe bpl 0x490a |
0x00004900 ldr r2, [pc, 0x39c] |
0x00004902 movs r1, 0x72 | r1 = 0x72;
0x00004904 add r2, pc | r2 = 0x95a8;
0x00004906 strb.w r1, [r2, 0x5f] | *((r2 + 0x5f)) = r1;
| }
0x0000490a lsls r1, r3, 0x1e | r1 = r3 << 0x1e;
| if (r1 < r3) {
0x0000490c bpl 0x4918 |
0x0000490e ldr r2, [pc, 0x394] |
0x00004910 movs r1, 0x77 | r1 = 0x77;
0x00004912 add r2, pc | r2 = 0x95bc;
0x00004914 strb.w r1, [r2, 0x60] | *((r2 + 0x60)) = r1;
0x00004916 asrs r0, r4, 1 | r0 = r4 >> 1;
| }
0x00004918 ands r1, r3, 1 | r1 = r3 & 1;
| if (r1 != r3) {
0x0000491c beq 0x492a |
0x0000491e ldr r2, [pc, 0x388] |
0x00004920 mov.w ip, 0x78 |
0x00004924 add r2, pc | r2 = 0x95d2;
0x00004926 strb.w ip, [r2, 0x61] | *((r2 + 0x61)) = ip;
| }
0x0000492a tst.w r3, 0x800 |
| if ((r3 & 0x800) != 0) {
0x0000492e beq 0x4940 |
0x00004930 ldr r2, [pc, 0x378] |
0x00004932 cmp r7, 0 |
0x00004934 ite ne |
| if (r7 == 0) {
0x00004936 movne r7, 0x73 | r7 = 0x73;
| }
| if (r7 != 0) {
0x00004938 moveq r7, 0x53 | r7 = 0x53;
| }
0x0000493a add r2, pc | r2 = 0x95ea;
0x0000493c strb.w r7, [r2, 0x5b] | *((r2 + 0x5b)) = r7;
| }
0x00004940 lsls r7, r3, 0x15 | r7 = r3 << 0x15;
| if (r7 < r3) {
0x00004942 bpl 0x4954 |
0x00004944 ldr r2, [pc, 0x368] |
0x00004946 cmp r0, 0 |
0x00004948 ite ne |
| if (r0 == 0) {
0x0000494a movne r0, 0x73 | r0 = 0x73;
| }
| if (r0 != 0) {
0x0000494c moveq r0, 0x53 | r0 = 0x53;
| }
0x0000494e add r2, pc | r2 = 0x9602;
0x00004950 strb.w r0, [r2, 0x5e] | *((r2 + 0x5e)) = r0;
| }
0x00004954 lsls r3, r3, 0x16 | r3 <<= 0x16;
| if (r3 < r3) {
0x00004956 bpl 0x4968 |
0x00004958 ldr r3, [pc, 0x358] |
0x0000495a cmp r1, 0 |
0x0000495c ite ne |
| if (r1 == 0) {
0x0000495e movne r2, 0x74 | r2 = 0x74;
| }
| if (r1 != 0) {
0x00004960 moveq r2, 0x54 | r2 = 0x54;
| }
0x00004962 add r3, pc | r3 = 0x961a;
0x00004964 strb.w r2, [r3, 0x61] | *((r3 + 0x61)) = r2;
| }
0x00004968 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0000496a add.w sb, sp, 0xa8 | sb += timer;
0x0000496e ldr r2, [r4, 0x40] | r2 = *((r4 + 0x40));
0x00004970 add r7, sp, 0x4c | r7 += var_4ch;
0x00004972 ldr.w r8, [pc, 0x344] | r8 = *(0x00004cb8);
0x00004976 mov r0, sb | r0 = sb;
0x00004978 str r3, [sp, 0x24] | var_24h = r3;
0x0000497a str r2, [r7] | *(r7) = r2;
0x0000497c add r8, pc | r8 += pc;
0x0000497e blx 0x16a0 | time (r0);
0x00004982 mov r0, r7 | r0 = r7;
0x00004984 blx 0x16d0 | ctime (r0);
0x00004988 movs r2, 0x1a | r2 = 0x1a;
0x0000498a adds r1, r0, 4 | r1 = r0 + 4;
0x0000498c str r0, [sp, 0x2c] | src = r0;
0x0000498e add.w r0, r8, 0x64 | r0 = r8 + 0x64;
0x00004992 blx 0x17c0 | strcpy_chk ()
0x00004996 ldrb.w r2, [r8, 0x68] | r2 = *((r8 + 0x68));
0x0000499a movs r1, 0 | r1 = 0;
0x0000499c ldr.w r3, [sb] | r3 = *(sb);
0x000049a0 strb.w r1, [r8, 0x70] | *((r8 + 0x70)) = r1;
0x000049a4 cmp r2, 0x30 |
0x000049a6 itt eq |
| if (r2 != 0x30) {
0x000049a8 moveq r2, 0x20 | r2 = 0x20;
| }
| if (r2 != 0x30) {
0x000049aa strbeq r2, [r8, 0x68] | *((r8 + 0x68)) = r2;
| }
0x000049ae ldr r2, [r7] | r2 = *(r7);
0x000049b0 cmp r2, r3 |
| if (r2 <= r3) {
0x000049b2 bgt 0x49bc |
0x000049b4 ldr r1, [sp, 0x38] | r1 = var_38h;
0x000049b6 add r3, r1 | r3 += r1;
0x000049b8 cmp r2, r3 |
| if (r2 >= r3) {
0x000049ba bge 0x49d2 | goto label_9;
| }
| }
0x000049bc ldr r0, [pc, 0x2fc] |
0x000049be movs r3, 0x20 | r3 = 0x20;
0x000049c0 ldr r1, [sp, 0x2c] | r1 = src;
0x000049c2 movs r2, 4 | r2 = 4;
0x000049c4 add r0, pc | r0 = 0x9684;
0x000049c6 strb.w r3, [r0, 0x6b] | *((r0 + 0x6b)) = r3;
0x000049ca adds r1, 0x14 | r1 += 0x14;
0x000049cc adds r0, 0x6c | r0 += 0x6c;
0x000049ce blx 0x1940 | strncpy (r0, r1, r2);
| label_9:
0x000049d2 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000049d4 ldr r2, [pc, 0x2e8] |
0x000049d6 str.w sl, [sp, 0x14] | __asm ("str.w sl, [var_14h]");
0x000049da str r3, [sp, 8] | var_8h = r3;
0x000049dc ldr r3, [pc, 0x2e4] |
0x000049de add r2, pc | r2 = 0x96a2;
0x000049e0 add.w r1, r2, 0x64 | r1 = r2 + 0x64;
0x000049e4 add.w r7, r2, 0x80 | r7 = r2 + 0x80;
0x000049e8 str r1, [sp, 0x18] | var_18h = r1;
0x000049ea add.w r1, r2, 0x34 | r1 = r2 + 0x34;
0x000049ee add r3, pc | r3 = 0x96b6;
0x000049f0 str r1, [sp, 0x10] | var_10h = r1;
0x000049f2 str r3, [sp] | *(sp) = r3;
0x000049f4 add.w r1, r2, 8 | r1 = r2 + 8;
0x000049f8 mov.w r3, 0x200 | r3 = 0x200;
0x000049fc adds r2, 0x58 | r2 += 0x58;
0x000049fe str r1, [sp, 0xc] | var_ch = r1;
0x00004a00 mov r0, r7 | r0 = r7;
0x00004a02 mov r1, r3 | r1 = r3;
0x00004a04 str r2, [sp, 4] | var_4h = r2;
0x00004a06 movs r2, 1 | r2 = 1;
0x00004a08 blx 0x1afc | fcn_00001afc ();
0x00004a0c mov r0, r7 | r0 = r7;
0x00004a0e blx 0x1898 | strlen (r0);
0x00004a12 mov r1, r7 | r1 = r7;
0x00004a14 mov r2, r0 | r2 = r0;
0x00004a16 mov r0, fp | r0 = fp;
0x00004a18 bl 0x4034 | r0 = fcn_00004034 (r0, r1, r2);
0x00004a1c cmp r0, 0 |
| if (r0 < 0) {
0x00004a1e blt.w 0x4bee | goto label_10;
| }
0x00004a22 mov r0, r5 | r0 = r5;
0x00004a24 blx 0x1898 | strlen (r0);
0x00004a28 mov r1, r5 | r1 = r5;
0x00004a2a mov r2, r0 | r2 = r0;
0x00004a2c mov r0, fp | r0 = fp;
0x00004a2e bl 0x4034 | r0 = fcn_00004034 (r0, r1, r2);
0x00004a32 cmp r0, 0 |
| if (r0 < 0) {
0x00004a34 blt.w 0x4bee | goto label_10;
| }
0x00004a38 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00004a3a and r3, r3, 0xf000 | r3 &= 0xf000;
0x00004a3e cmp.w r3, 0xa000 |
| if (r3 == 0xa000) {
0x00004a42 beq.w 0x4b74 | goto label_11;
| }
| label_2:
0x00004a46 ldr r1, [pc, 0x280] |
0x00004a48 movs r2, 2 | r2 = 2;
0x00004a4a mov r0, fp | r0 = fp;
0x00004a4c add r1, pc | r1 = 0x971a;
0x00004a4e bl 0x4034 | r0 = fcn_00004034 (r0, r1, r2);
0x00004a52 cmp r0, 0 |
| if (r0 < 0) {
0x00004a54 blt.w 0x4bee | goto label_10;
| }
0x00004a58 ldr r0, [sp, 0x30] | r0 = var_30h;
0x00004a5a blx 0x19fc | r0 = fcn_000019fc ();
0x00004a5e mov r5, r0 | r5 = r0;
0x00004a60 cmp r0, 0 |
| if (r0 == 0) {
0x00004a62 beq.w 0x4bf2 | goto label_12;
| }
0x00004a66 ldr r1, [sp, 0x28] | r1 = var_28h;
0x00004a68 add r6, sp, 0x10c | r6 += arg_10ch;
0x00004a6a movs r2, 0 | r2 = 0;
0x00004a6c strb r2, [r6] | *(r6) = r2;
0x00004a6e ldrb r3, [r1] | r3 = *(r1);
0x00004a70 cmp r3, 0x2e |
| if (r3 == 0x2e) {
0x00004a72 bne 0x4a78 |
0x00004a74 ldrb r3, [r1, 1] | r3 = *((r1 + 1));
| if (r3 == 0) {
0x00004a76 cbz r3, 0x4a92 | goto label_3;
| }
| }
0x00004a78 ldr r1, [sp, 0x28] | r1 = var_28h;
0x00004a7a movw r2, 0x1ff | r2 = 0x1ff;
0x00004a7e mov r0, r6 | r0 = r6;
0x00004a80 blx 0x1940 | strncpy (r0, r1, r2);
0x00004a84 movs r3, 0 | r3 = 0;
0x00004a86 strb.w r3, [r6, 0x1ff] | *((r6 + 0x1ff)) = r3;
0x00004a8a ldr r3, [sp, 0x34] | r3 = var_34h;
0x00004a8c cmp r3, 0 |
| if (r3 == 0) {
0x00004a8e beq.w 0x4c10 | goto label_13;
| }
| label_3:
0x00004a92 adds r5, 0xb | r5 += 0xb;
0x00004a94 mov.w r2, 0x200 | r2 = 0x200;
0x00004a98 mov r1, r5 | r1 = r5;
0x00004a9a mov r0, r6 | r0 = r6;
0x00004a9c add r4, sp, 0x50 | r4 += var_50h;
0x00004a9e blx 0x18e0 | strcat_chk ();
0x00004aa2 mov r1, r4 | r1 = r4;
0x00004aa4 mov r0, r6 | r0 = r6;
0x00004aa6 blx 0x17d8 | r0 = lstat (r0, r1);
0x00004aaa cmp r0, 0 |
| if (r0 < 0) {
0x00004aac blt.w 0x4c56 | goto label_14;
| }
0x00004ab0 ldr r3, [pc, 0x218] |
0x00004ab2 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00004ab4 add r3, pc | r3 = 0x9784;
0x00004ab6 ldr r2, [r3] | r2 = *(0x9784);
| if (r2 != 0) {
0x00004ab8 cbz r2, 0x4ac0 |
0x00004aba ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00004abc cmp r3, r0 |
| if (r3 == r0) {
0x00004abe beq 0x4ae4 | goto label_15;
| }
| }
0x00004ac0 blx 0x161c | r0 = getpwuid ();
0x00004ac4 cmp r0, 0 |
| if (r0 == 0) {
0x00004ac6 beq.w 0x4c3a | goto label_16;
| }
0x00004aca ldr r2, [pc, 0x204] |
0x00004acc movs r1, 0x21 | r1 = 0x21;
0x00004ace ldr r3, [r0] | r3 = *(r0);
0x00004ad0 ldr r0, [sp, 0x3c] | r0 = s;
0x00004ad2 add r2, pc | r2 = 0x97a8;
0x00004ad4 blx 0x1904 | snprintf (r0, r1, r2, r3);
| label_5:
0x00004ad8 ldr r3, [pc, 0x1f8] |
0x00004ada ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x00004adc add r3, pc | r3 = 0x97b4;
0x00004ade str r2, [r3, 4] | *((r3 + 4)) = r2;
0x00004ae0 movs r2, 1 | r2 = 1;
0x00004ae2 str r2, [r3] | *(r3) = r2;
| label_15:
0x00004ae4 ldr r3, [pc, 0x1f0] |
0x00004ae6 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00004ae8 add r3, pc | r3 = 0x97c4;
0x00004aea ldr r2, [r3, 0x2c] | r2 = *(0x97f0);
| if (r2 != 0) {
0x00004aec cbz r2, 0x4af4 |
0x00004aee ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x00004af0 cmp r3, r0 |
| if (r3 == r0) {
0x00004af2 beq 0x4b1c | goto label_17;
| }
| }
0x00004af4 blx 0x1af0 | r0 = snprintf_chk ();
0x00004af8 cmp r0, 0 |
| if (r0 == 0) {
0x00004afa beq.w 0x4c1e | goto label_18;
| }
0x00004afe ldr r3, [r0] | r3 = *(r0);
0x00004b00 movs r1, 0x21 | r1 = 0x21;
0x00004b02 ldr r0, [pc, 0x1d8] |
0x00004b04 ldr r2, [pc, 0x1d8] |
0x00004b06 add r0, pc | r0 = 0x97e8;
0x00004b08 adds r0, 0x34 | r0 += 0x34;
0x00004b0a add r2, pc | r2 = 0x97ee;
0x00004b0c blx 0x1904 | snprintf (r0, r1, r2, r3);
| label_4:
0x00004b10 ldr r3, [pc, 0x1d0] |
0x00004b12 ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x00004b14 add r3, pc | r3 = 0x97fc;
0x00004b16 str r2, [r3, 0x30] | *((r3 + 0x30)) = r2;
0x00004b18 movs r2, 1 | r2 = 1;
0x00004b1a str r2, [r3, 0x2c] | *((r3 + 0x2c)) = r2;
| label_17:
0x00004b1c ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00004b1e and r3, r3, 0xb000 | r3 &= 0xb000;
0x00004b22 cmp.w r3, 0x2000 |
0x00004b26 beq.w 0x482c |
| }
0x00004b2a ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x00004b2c add.w sl, sp, 0x100 | sl += arg_100h;
0x00004b30 movs r2, 1 | r2 = 1;
0x00004b32 mov r0, sl | r0 = sl;
0x00004b34 str r3, [sp, 4] | var_4h = r3;
0x00004b36 ldr r3, [pc, 0x1b0] |
0x00004b38 add r3, pc | r3 = 0x9826;
0x00004b3a str r3, [sp] | *(sp) = r3;
0x00004b3c movs r3, 0xb | r3 = 0xb;
0x00004b3e mov r1, r3 | r1 = r3;
0x00004b40 blx 0x1afc | fcn_00001afc ();
0x00004b44 b 0x4854 | goto label_0;
| label_8:
0x00004b46 cmp.w lr, 0x1000 |
0x00004b4a itt eq |
| if (lr != 0x1000) {
0x00004b4c moveq r2, 0x70 | r2 = 0x70;
| }
| if (lr == 0x1000) {
0x00004b4e strbeq r2, [ip, 0x58] | *((ip + 0x58)) = r2;
| goto label_19;
| }
| if (lr == 0x1000) {
| label_19:
0x00004b52 beq.w 0x48a4 | goto label_1;
| }
0x00004b56 cmp.w lr, 0xa000 |
0x00004b5a itt eq |
| if (lr != 0xa000) {
0x00004b5c moveq r2, 0x6c | r2 = 0x6c;
| }
| if (lr == 0xa000) {
0x00004b5e strbeq r2, [ip, 0x58] | *((ip + 0x58)) = r2;
| goto label_20;
| }
| if (lr == 0xa000) {
| label_20:
0x00004b62 beq.w 0x48a4 | goto label_1;
| }
0x00004b66 cmp.w lr, 0xc000 |
0x00004b6a itt eq |
| if (lr != 0xc000) {
0x00004b6c moveq r2, 0x73 | r2 = 0x73;
| }
| if (lr != 0xc000) {
0x00004b6e strbeq r2, [ip, 0x58] | *((ip + 0x58)) = r2;
| }
0x00004b72 b 0x48a4 | goto label_1;
| label_11:
0x00004b74 add r4, sp, 0x30c | r4 += arg_30ch;
0x00004b76 mov.w r2, 0x200 | r2 = 0x200;
0x00004b7a movs r1, 0 | r1 = 0;
0x00004b7c mov r0, r4 | r0 = r4;
0x00004b7e blx 0x1934 | memset (r0, r1, r2);
0x00004b82 ldr r1, [pc, 0x168] |
0x00004b84 movs r2, 4 | r2 = 4;
0x00004b86 mov r0, fp | r0 = fp;
0x00004b88 add r1, pc | r1 = 0x987a;
0x00004b8a bl 0x4034 | r0 = fcn_00004034 (r0, r1, r2);
0x00004b8e cmp r0, 0 |
| if (r0 < 0) {
0x00004b90 blt 0x4bee | goto label_10;
| }
0x00004b92 mov r0, r6 | r0 = r6;
0x00004b94 mov.w r2, 0x200 | r2 = 0x200;
0x00004b98 mov r1, r4 | r1 = r4;
0x00004b9a blx 0x176c | r0 = readlink ();
0x00004b9e subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 < r0) {
0x00004ba0 blt.w 0x4a46 | goto label_2;
| }
0x00004ba4 mov r2, r5 | r2 = r5;
0x00004ba6 mov r1, r4 | r1 = r4;
0x00004ba8 mov r0, fp | r0 = fp;
0x00004baa bl 0x4034 | r0 = fcn_00004034 (r0, r1, r2);
0x00004bae cmp r0, 0 |
| if (r0 < 0) {
0x00004bb0 blt 0x4bee | goto label_10;
| }
0x00004bb2 mov r1, sb | r1 = sb;
0x00004bb4 mov r0, r4 | r0 = r4;
0x00004bb6 blx 0x17d8 | r0 = lstat (r0, r1);
0x00004bba cmp r0, 0 |
| if (r0 < 0) {
0x00004bbc blt.w 0x4a46 | goto label_2;
| }
0x00004bc0 ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x00004bc4 and r3, r3, 0xf000 | r3 &= 0xf000;
0x00004bc8 cmp.w r3, 0x4000 |
| if (r3 != 0x4000) {
0x00004bcc bne.w 0x4a46 | goto label_2;
| }
0x00004bd0 add r4, r5 | r4 += r5;
0x00004bd2 ldrb r3, [r4, -0x1] | r3 = *((r4 - 0x1));
0x00004bd6 cmp r3, 0x2f |
| if (r3 == 0x2f) {
0x00004bd8 beq.w 0x4a46 | goto label_2;
| }
0x00004bdc ldr r1, [pc, 0x110] |
0x00004bde movs r2, 1 | r2 = 1;
0x00004be0 mov r0, fp | r0 = fp;
0x00004be2 add r1, pc | r1 = 0x98d6;
0x00004be4 bl 0x4034 | r0 = fcn_00004034 (r0, r1, r2);
0x00004be8 cmp r0, 0 |
| if (r0 >= 0) {
0x00004bea bge.w 0x4a46 | goto label_2;
| }
| label_10:
0x00004bee mov.w r0, -1 | r0 = -1;
| do {
| label_12:
0x00004bf2 ldr r2, [pc, 0x100] |
0x00004bf4 ldr r3, [pc, 0x74] | r3 = *(0x4c6c);
0x00004bf6 add r2, pc | r2 = 0x98f0;
0x00004bf8 ldr r3, [r2, r3] | r3 = *(0x98f0);
0x00004bfa ldr r2, [r3] | r2 = *(0x98f0);
0x00004bfc ldr.w r3, [sp, 0x50c] | r3 = *(arg_50ch);
0x00004c00 eors r2, r3 | r2 ^= r3;
0x00004c02 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00004c06 bne 0x4c62 | goto label_21;
| }
0x00004c08 addw sp, sp, 0x514 | __asm ("addw sp, sp, 0x514");
0x00004c0c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_13:
0x00004c10 ldr r1, [sp, 0x40] | r1 = var_40h;
0x00004c12 mov.w r2, 0x200 | r2 = 0x200;
0x00004c16 mov r0, r6 | r0 = r6;
0x00004c18 blx 0x18e0 | strcat_chk ();
0x00004c1c b 0x4a92 | goto label_3;
| label_18:
0x00004c1e ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x00004c20 movs r2, 1 | r2 = 1;
0x00004c22 ldr r0, [pc, 0xd4] |
0x00004c24 str r3, [sp, 4] | var_4h = r3;
0x00004c26 ldr r3, [pc, 0xd4] |
0x00004c28 add r0, pc | r0 = 0x9926;
0x00004c2a adds r0, 0x34 | r0 += 0x34;
0x00004c2c add r3, pc | r3 = 0x992e;
0x00004c2e str r3, [sp] | *(sp) = r3;
0x00004c30 movs r3, 0x21 | r3 = 0x21;
0x00004c32 mov r1, r3 | r1 = r3;
0x00004c34 blx 0x1afc | fcn_00001afc ();
0x00004c38 b 0x4b10 | goto label_4;
| label_16:
0x00004c3a ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00004c3c movs r2, 1 | r2 = 1;
0x00004c3e ldr r0, [sp, 0x44] | r0 = var_44h;
0x00004c40 str r3, [sp, 4] | var_4h = r3;
0x00004c42 ldr r3, [pc, 0xbc] |
0x00004c44 add r3, pc | r3 = 0x994a;
0x00004c46 str r3, [sp] | *(sp) = r3;
0x00004c48 movs r3, 0x21 | r3 = 0x21;
0x00004c4a mov r1, r3 | r1 = r3;
0x00004c4c blx 0x1afc | fcn_00001afc ();
0x00004c50 b 0x4ad8 | goto label_5;
| label_7:
0x00004c52 str r3, [sp, 0x34] | var_34h = r3;
0x00004c54 b 0x4804 | goto label_6;
| label_14:
0x00004c56 mov r0, r6 | r0 = r6;
0x00004c58 blx 0x1748 | perror (r0);
0x00004c5c mov.w r0, -1 | r0 = -1;
0x00004c60 b 0x4bf2 |
| } while (1);
| label_21:
0x00004c62 blx 0x16f4 | stack_chk_fail ();
0x00004c66 nop |
0x00004c68 movs r6, 0x32 | r6 = 0x32;
0x00004c6a movs r1, r0 | r1 = r0;
0x00004c6c lsls r0, r3, 7 | r0 = r3 << 7;
0x00004c6e movs r0, r0 |
0x00004c70 asrs r4, r7, 0x11 | r4 = r7 >> 0x11;
0x00004c72 movs r0, r0 |
0x00004c74 cmp r2, 0x6c |
0x00004c76 movs r1, r0 | r1 = r0;
0x00004c78 cmp r2, 0x62 |
0x00004c7a movs r1, r0 | r1 = r0;
0x00004c7c asrs r2, r3, 0x12 | r2 = r3 >> 0x12;
0x00004c7e movs r0, r0 |
0x00004c80 asrs r6, r7, 0x11 | r6 = r7 >> 0x11;
0x00004c82 movs r0, r0 |
0x00004c84 cmp r2, 0x1a |
0x00004c86 movs r1, r0 | r1 = r0;
0x00004c88 cmp r1, 0xd0 |
0x00004c8a movs r1, r0 | r1 = r0;
0x00004c8c cmp r1, 0xc2 |
0x00004c8e movs r1, r0 | r1 = r0;
0x00004c90 cmp r1, 0xb2 |
0x00004c92 movs r1, r0 | r1 = r0;
0x00004c94 cmp r1, 0xa4 |
0x00004c96 movs r1, r0 | r1 = r0;
0x00004c98 cmp r1, 0x96 |
0x00004c9a movs r1, r0 | r1 = r0;
0x00004c9c cmp r1, 0x86 |
0x00004c9e movs r1, r0 | r1 = r0;
0x00004ca0 cmp r1, 0x78 |
0x00004ca2 movs r1, r0 | r1 = r0;
0x00004ca4 cmp r1, 0x6a |
0x00004ca6 movs r1, r0 | r1 = r0;
0x00004ca8 cmp r1, 0x58 |
0x00004caa movs r1, r0 | r1 = r0;
0x00004cac cmp r1, 0x42 |
0x00004cae movs r1, r0 | r1 = r0;
0x00004cb0 cmp r1, 0x2e |
0x00004cb2 movs r1, r0 | r1 = r0;
0x00004cb4 cmp r1, 0x1a |
0x00004cb6 movs r1, r0 | r1 = r0;
0x00004cb8 cmp r1, 0 |
0x00004cba movs r1, r0 | r1 = r0;
0x00004cbc cmp r0, 0xb8 |
0x00004cbe movs r1, r0 | r1 = r0;
0x00004cc0 cmp r0, 0x9e |
0x00004cc2 movs r1, r0 | r1 = r0;
0x00004cc4 asrs r2, r7, 0xb | r2 = r7 >> 0xb;
0x00004cc6 movs r0, r0 |
0x00004cc8 lsrs r0, r2, 7 | r0 = r2 >> 7;
0x00004cca movs r0, r0 |
0x00004ccc movs r7, 0xc8 | r7 = 0xc8;
0x00004cce movs r1, r0 | r1 = r0;
0x00004cd0 lsls r6, r6, 0x1e | r6 <<= 0x1e;
0x00004cd2 movs r0, r0 |
0x00004cd4 movs r7, 0xa0 | r7 = 0xa0;
0x00004cd6 movs r1, r0 | r1 = r0;
0x00004cd8 movs r7, 0x94 | r7 = 0x94;
0x00004cda movs r1, r0 | r1 = r0;
0x00004cdc movs r7, 0x76 | r7 = 0x76;
0x00004cde movs r1, r0 | r1 = r0;
0x00004ce0 lsls r6, r7, 0x1d | r6 = r7 << 0x1d;
0x00004ce2 movs r0, r0 |
0x00004ce4 movs r7, 0x68 | r7 = 0x68;
0x00004ce6 movs r1, r0 | r1 = r0;
0x00004ce8 asrs r0, r4, 6 | r0 = r4 >> 6;
0x00004cea movs r0, r0 |
0x00004cec asrs r0, r0, 6 | r0 >>= 6;
0x00004cee movs r0, r0 |
0x00004cf0 asrs r2, r4, 2 | r2 = r4 >> 2;
0x00004cf2 movs r0, r0 |
0x00004cf4 movs r2, 0x12 | r2 = 0x12;
0x00004cf6 movs r1, r0 | r1 = r0;
0x00004cf8 movs r6, 0x54 | r6 = 0x54;
0x00004cfa movs r1, r0 | r1 = r0;
0x00004cfc asrs r4, r5, 2 | r4 = r5 >> 2;
0x00004cfe movs r0, r0 |
0x00004d00 asrs r4, r2, 2 | r4 = r2 >> 2;
0x00004d02 movs r0, r0 |
| /* [14] -r-x section size 8 named .fini */
0x00004d04 ands r0, r1 | r0 &= r1;
0x00004d06 invalid |
| }
[*] Function strcpy used 5 times vftpd