[*] Binary protection state of conf-migrate
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH No Symbols
[*] Function strcpy tear down of conf-migrate
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/libexec/conf-migrate @ 0x2354 */
| #include <stdint.h>
|
; (fcn) fcn.00002354 () | void fcn_00002354 (int16_t arg1, int16_t arg2) {
| char * * endptr;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
0x00002354 ldr r2, [pc, 0x15c] |
0x00002356 ldr r3, [pc, 0x160] | r3 = *(0x24ba);
0x00002358 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000235c mov r8, r0 | r8 = r0;
0x0000235e add r2, pc | r2 = 0x4816;
0x00002360 sub sp, 0x24 |
0x00002362 movs r4, 0 | r4 = 0;
0x00002364 mov r0, r1 | r0 = r1;
0x00002366 ldr r3, [r2, r3] |
0x00002368 mov r7, r1 | r7 = r1;
0x0000236a ldr r3, [r3] | r3 = *(0x4816);
0x0000236c str r3, [sp, 0x1c] | var_1ch = r3;
0x0000236e mov.w r3, 0 | r3 = 0;
0x00002372 str.w r4, [r8] | __asm ("str.w r4, [r8]");
0x00002374 ands r0, r0 | r0 &= r0;
0x00002376 bl 0x2240 | r0 = fcn_00002240 (r0);
0x0000237a cmp r0, 0 |
| if (r0 == 0) {
0x0000237c beq.w 0x2484 | goto label_0;
| }
0x00002380 ldr r1, [pc, 0x138] |
0x00002382 mov r6, r0 | r6 = r0;
0x00002384 str r4, [sp, 0x14] | var_14h = r4;
0x00002386 add r1, pc | r1 = 0x4846;
0x00002388 blx 0xe0c | r0 = strtok (r0, r1);
0x0000238c mov fp, r0 |
0x0000238e cmp r0, 0 |
| if (r0 == 0) {
0x00002390 beq 0x2462 | goto label_1;
| }
0x00002392 add.w sl, sp, 0x14 | sl += var_14h;
0x00002396 add r3, sp, 0x18 | r3 += var_18h;
0x00002398 str r3, [sp, 4] | endptr = r3;
0x0000239a str.w r8, [sp, 0xc] | __asm ("str.w r8, [var_ch]");
| do {
0x0000239e movs r1, 0x3a | r1 = 0x3a;
0x000023a0 mov r0, fp | r0 = fp;
0x000023a2 blx 0xd94 | r0 = strchr (r0, r1);
0x000023a6 mov r5, r0 | r5 = r0;
0x000023a8 cmp r0, 0 |
| if (r0 == 0) {
0x000023aa beq 0x2470 | goto label_2;
| }
0x000023ac movs r1, 0x3a | r1 = 0x3a;
0x000023ae adds r0, 1 | r0++;
0x000023b0 blx 0xd94 | r0 = strchr (r0, r1);
0x000023b2 ldcl p8, c2, [r0], 0 | __asm ("ldcl p8, c2, [r0], 0");
| if (r0 == 1) {
0x000023b6 beq 0x2470 | goto label_2;
| }
0x000023b8 adds r4, r0, 1 | r4 = r0 + 1;
0x000023ba movs r1, 0x3a | r1 = 0x3a;
0x000023bc mov r0, r4 | r0 = r4;
0x000023be blx 0xd94 | r0 = strchr (r0, r1);
0x000023c2 mov r8, r0 | r8 = r0;
0x000023c4 cmp r0, 0 |
| if (r0 == 0) {
0x000023c6 beq 0x2470 | goto label_2;
| }
0x000023c8 add.w sb, r0, 1 | sb = r0 + 1;
0x000023cc mov r0, sb | r0 = sb;
0x000023ce blx 0xd88 | r0 = strlen (r0);
0x000023d2 cmp.w r0, 0x1000 |
0x000023d6 sub.w r2, r5, fp | r2 = r5 - fp;
0x000023d8 lsls r3, r1, 8 | r3 = r1 << 8;
0x000023da ite ls |
| if (r3 > r1) {
0x000023dc movls r0, 0 | r0 = 0;
| }
| if (r3 <= r1) {
0x000023de movhi r0, 1 | r0 = 1;
| }
0x000023e0 cmp r2, 0x20 |
0x000023e2 it gt |
| if (r2 <= 0x20) {
0x000023e4 orrgt r0, r0, 1 | r0 |= 1;
| }
0x000023e8 cmp r0, 0 |
| if (r0 != 0) {
0x000023ea bne 0x2470 | goto label_2;
| }
0x000023ec ldr r1, [sp, 4] | r1 = endptr;
0x000023ee mov r0, r4 | r0 = r4;
0x000023f0 movs r2, 0xa | r2 = 0xa;
0x000023f2 sub.w r4, r4, r8 | r4 -= r8;
0x000023f6 blx 0xd7c | strtoul (r0, r1, r2);
0x000023fa clz r4, r4 | r4 &= r4;
0x000023fe ldr r1, [sp, 0x18] | r1 = var_18h;
0x00002400 lsrs r4, r4, 5 | r4 >>= 5;
0x00002402 str r0, [sp, 8] | var_8h = r0;
0x00002404 cmp r1, r8 |
0x00002406 it ne |
| if (r1 == r8) {
0x00002408 orrne r4, r4, 1 | r4 |= 1;
| }
| if (r4 != 0) {
0x0000240c cbnz r4, 0x2470 | goto label_2;
| }
0x0000240e movw r0, 0x1030 | r0 = 0x1030;
0x00002412 blx 0xd28 | malloc (r0);
0x00002416 ldr r2, [sp, 8] | r2 = var_8h;
0x00002418 mov r8, r0 | r8 = r0;
0x0000241a cmp r0, 0 |
| if (r0 == 0) {
0x0000241c beq 0x24a4 | goto label_3;
| }
0x0000241e mov r1, fp | r1 = fp;
0x00002420 strb r4, [r5] | *(r5) = r4;
0x00002422 adds r0, 9 | r0 += 9;
0x00002424 str r2, [r0, -0x5] | *((r0 - 0x5)) = r2;
0x00002428 strb r4, [r0, -0x1] | *((r0 - 0x1)) = r4;
0x0000242c movs r2, 0x21 | r2 = 0x21;
0x0000242e blx 0xcf8 | strcpy_chk ()
0x00002432 mov r1, sb | r1 = sb;
0x00002434 movw r2, 0x1006 | r2 = 0x1006;
0x00002438 add.w r0, r8, 0x2a | r0 = r8 + 0x2a;
0x0000243c blx 0xcf8 | strcpy_chk ()
0x0000243e mrrc p9, 1, r4, ip, c15 | __asm ("mrrc p9, 1, r4, ip, c15");
0x00002442 mov r0, r4 | r0 = r4;
0x00002444 str.w r4, [r8] | __asm ("str.w r4, [r8]");
0x00002448 str.w r8, [sl] | __asm ("str.w r8, [sl]");
0x0000244c mov sl, r8 | sl = r8;
0x0000244e add r1, pc | r1 += pc;
0x00002450 blx 0xe0c | r0 = strtok (r0, r1);
0x00002454 mov fp, r0 |
0x00002456 cmp r0, 0 |
0x00002458 bne 0x239e |
| } while (r0 != 0);
0x0000245a ldr.w r8, [sp, 0xc] | r8 = var_ch;
0x0000245e ldr.w fp, [sp, 0x14] | fp = var_14h;
| label_1:
0x00002462 mov r0, r6 | r0 = r6;
0x00002464 blx 0xc5c | free (r0);
0x00002468 movs r0, 1 | r0 = 1;
0x0000246a str.w fp, [r8] | __asm ("str.w fp, [r8]");
0x0000246e b 0x2486 | goto label_4;
| label_2:
0x00002470 ldr r1, [pc, 0x50] |
0x00002472 movs r0, 3 | r0 = 3;
0x00002474 mov r3, r7 | r3 = r7;
0x00002476 mov r2, fp | r2 = fp;
0x00002478 add r1, pc | r1 = 0x4940;
0x0000247a bl 0x2b28 | fcn_00002b28 (r0);
0x0000247e mov r0, r6 | r0 = r6;
0x00002480 blx 0xc5c | free (r0);
0x00002482 invalid |
| label_0:
0x00002484 movs r0, 0 | r0 = 0;
| label_4:
0x00002486 ldr r2, [pc, 0x40] |
0x00002488 ldr r3, [pc, 0x2c] | r3 = *(0x24b8);
0x0000248a add r2, pc | r2 = 0x4958;
0x0000248c ldr r3, [r2, r3] | r3 = *(0x4958);
0x0000248e ldr r2, [r3] | r2 = *(0x4958);
0x00002490 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00002492 eors r2, r3 | r2 ^= r3;
0x00002494 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00002498 bne 0x24a0 |
0x0000249a add sp, 0x24 |
0x0000249c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x000024a0 blx 0xc98 | stack_chk_fail ();
| label_3:
0x000024a4 ldr r1, [pc, 0x24] |
0x000024a6 movs r0, 3 | r0 = 3;
0x000024a8 add r1, pc | r1 = 0x4978;
0x000024aa bl 0x2b28 | fcn_00002b28 (r0);
0x000024ae movs r0, 1 | r0 = 1;
0x000024b0 blx 0xd70 | exit (r0);
0x000024b4 cmp r3, 0x8e |
0x000024b6 movs r0, r0 |
0x000024b8 lsls r4, r7, 3 | r4 = r7 << 3;
0x000024ba movs r0, r0 |
0x000024bc asrs r6, r0, 0x10 | r6 = r0 >> 0x10;
0x000024be movs r0, r0 |
0x000024c0 asrs r6, r7, 0xc | r6 = r7 >> 0xc;
0x000024c2 movs r0, r0 |
0x000024c4 asrs r0, r3, 0xc | r0 = r3 >> 0xc;
0x000024c6 movs r0, r0 |
0x000024c8 cmp r2, 0x62 |
0x000024ca movs r0, r0 |
0x000024cc asrs r0, r0, 0xb | r0 >>= 0xb;
0x000024ce movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/libexec/conf-migrate @ 0x2580 */
| #include <stdint.h>
|
; (fcn) fcn.00002580 () | void fcn_00002580 (int16_t arg_0h, int16_t arg_1h, int16_t arg_4h, int16_t arg_8h, int16_t arg_9h, int16_t arg1) {
| int16_t var_0h_2;
| int16_t var_4h;
| int16_t fildes;
| int16_t var_14h;
| int16_t var_94h;
| char * ptr;
| int16_t var_1h;
| int8_t var_0h_5;
| int16_t var_194h;
| int16_t var_0h;
| int32_t var_0h_6;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_0h_3;
| int32_t var_0h_7;
| char * * endptr;
| int16_t var_4h_3;
| int16_t var_10h;
| char * s;
| int32_t var_0h_4;
| int32_t var_4h_2;
| char * s1;
| r0 = arg1;
0x00002580 teqhs sl, sb, ror 20 | __asm ("teqhs sl, sb, ror 20");
0x00002584 ldr r3, [pc, 0x1a4] |
0x00002586 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0000258a sub.w sp, sp, 0x1000 |
0x0000258e add r2, pc | r2 += pc;
0x00002590 sub sp, 0x10 |
0x00002592 mov r4, r0 | r4 = r0;
0x00002594 add.w r0, sp, 0x1000 | r0 += s;
0x00002598 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0000259a add.w r6, r4, 0x2a | r6 = r4 + 0x2a;
0x0000259e adds r0, 0xc | r0 += 0xc;
0x000025a0 ldr r3, [r3] | r3 = *(0x272c);
0x000025a2 str r3, [r0] | *(r0) = r3;
0x000025a4 mov.w r3, 0 | r3 = 0;
0x000025a8 mov r0, r6 | r0 = r6;
0x000025aa blx 0xd94 | r0 = strchr (r0, r1);
| if (r0 == 0) {
0x000025ae cbz r0, 0x25cc | goto label_20;
| }
0x000025b0 add.w r8, sp, 0x10 | r8 += var_10h;
0x000025b4 mov r5, r0 | r5 = r0;
0x000025b6 movs r2, 0xa | r2 = 0xa;
0x000025b8 sub.w r1, r8, 8 | r1 -= endptr;
0x000025bc mov r0, r6 | r0 = r6;
0x000025be blx 0xd7c | strtoul (r0, r1, r2);
0x000025c2 ldr sb, [r8, -0x8] | sb = *((r8 - 0x8));
0x000025c6 mov r7, r0 | r7 = r0;
0x000025c8 cmp sb, r5 |
0x000025ca beq 0x2602 |
| while (r3 != 0x3a) {
| label_20:
0x000025cc ldr r1, [pc, 0x160] |
0x000025ce add.w r2, r4, 9 | r2 = r4 + 9;
0x000025d2 movs r0, 3 | r0 = 3;
0x000025d4 add r1, pc | r1 = 0x4d08;
0x000025d6 bl 0x2b28 | fcn_00002b28 (r0);
| label_2:
0x000025da movs r0, 0 | r0 = 0;
| label_0:
0x000025dc ldr r2, [pc, 0x154] |
0x000025de add.w r1, sp, 0x1000 | r1 += s;
0x000025e2 ldr r3, [pc, 0x148] | r3 = *(0x272e);
0x000025e4 adds r1, 0xc | r1 += 0xc;
0x000025e6 add r2, pc | r2 = 0x4d1e;
0x000025e8 ldr r3, [r2, r3] | r3 = *(0x4d1e);
0x000025ea ldr r2, [r3] | r2 = *(0x4d1e);
0x000025ec ldr r3, [r1] | r3 = *(r1);
0x000025ee eors r2, r3 | r2 ^= r3;
0x000025f0 mov.w r3, 0 | r3 = 0;
0x000025f2 lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 != r0) {
0x000025f4 bne.w 0x2724 | goto label_21;
| }
0x000025f8 add.w sp, sp, 0x1000 |
0x000025fc add sp, 0x10 |
0x000025fe pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
0x00002602 ldrb.w r3, [sb] | r3 = *(sb);
0x00002606 cmp r3, 0x3a |
0x00002608 bne 0x25cc |
| }
0x0000260a ldr r0, [pc, 0x12c] |
0x0000260c mov r1, r7 | r1 = r7;
0x0000260e add r0, pc | r0 = 0x4d4c;
0x00002610 bl 0x2528 | r0 = fcn_00002528 (r0, r1);
0x00002614 subs.w sl, r0, 0 | sl = r0 - 0;
0x00002616 lsrs r0, r0, 8 | r0 >>= 8;
| if (r0 < r0) {
0x00002618 blt 0x26f2 | goto label_22;
| }
0x0000261a cmp sl, r7 |
| if (sl != r7) {
0x0000261c beq 0x2656 |
0x0000261e ldr r1, [pc, 0x11c] |
0x00002620 mov r3, r7 | r3 = r7;
0x00002622 sub.w r5, r8, 4 | r5 -= var_4h_3;
0x00002626 add.w r2, r4, 9 | r2 = r4 + 9;
0x0000262a movs r0, 7 | r0 = 7;
0x0000262c str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00002630 add r1, pc | r1 = 0x4d72;
0x00002632 bl 0x2b28 | fcn_00002b28 (r0);
0x00002636 mov r1, sb | r1 = sb;
0x00002638 mov.w r2, 0x1000 | r2 = 0x1000;
0x0000263c mov r0, r5 | r0 = r5;
0x0000263e blx 0xcf8 | strcpy_chk ()
0x00002642 ldr r3, [pc, 0xfc] |
0x00002644 mov r0, r6 | r0 = r6;
0x00002646 mov.w r2, -1 | r2 = -1;
0x0000264a movs r1, 1 | r1 = 1;
0x0000264c strd sl, r5, [sp] | __asm ("strd sl, r5, [sp]");
0x00002650 add r3, pc | r3 = 0x4d96;
0x00002652 blx 0xdc4 | sprintf_chk ();
| }
0x00002656 ldr r3, [pc, 0xec] |
0x00002658 add r3, pc | r3 = 0x4da2;
0x0000265a ldr r7, [r3, 0xc] | r7 = *(0x4dae);
| if (r7 == 0) {
0x0000265c cbz r7, 0x267a | goto label_23;
| }
0x0000265e ldr.w r8, [pc, 0xe8] |
0x00002662 add.w sb, r4, 9 | sb = r4 + 9;
0x00002666 add r8, pc | r8 = 0x4db4;
| do {
0x00002668 mov r1, sb | r1 = sb;
0x0000266a add.w r0, r7, 0x2a | r0 = r7 + 0x2a;
0x0000266e bl 0x217c | r0 = fcn_0000217c (r0, r1);
| if (r0 != 0) {
0x00002672 cbnz r0, 0x267e | goto label_24;
| }
| label_1:
0x00002674 ldr r7, [r7] | r7 = *(r7);
0x00002676 cmp r7, 0 |
0x00002678 bne 0x2668 |
| } while (r7 != 0);
| label_23:
0x0000267a movs r0, 1 | r0 = 1;
0x0000267c b 0x25dc | goto label_0;
| label_24:
0x0000267e ldr.w r4, [r8, 0x10] | r4 = *((r8 + 0x10));
0x00002682 add.w r6, r7, 9 | r6 = r7 + 9;
| if (r4 != 0) {
0x00002686 cbnz r4, 0x268e | goto label_25;
| }
0x00002688 b 0x26e4 | goto label_26;
| do {
0x0000268a ldr r4, [r4] | r4 = *(r4);
| if (r4 == 0) {
0x0000268c cbz r4, 0x26e4 | goto label_26;
| }
| label_25:
0x0000268e add.w r5, r4, 9 | r5 = r4 + 9;
0x00002692 mov r1, r6 | r1 = r6;
0x00002694 mov r0, r5 | r0 = r5;
0x00002696 blx 0xc20 | r0 = strcmp (r0, r1);
0x0000269a cmp r0, 0 |
0x0000269c bne 0x268a |
| } while (r0 != 0);
0x0000269e adds r4, 0x2a | r4 += 0x2a;
0x000026a0 mov r1, sb | r1 = sb;
0x000026a2 mov r0, r4 | r0 = r4;
0x000026a4 bl 0x217c | r0 = fcn_0000217c (r0, r1);
| if (r0 == 0) {
0x000026a8 cbnz r0, 0x2704 |
0x000026aa mov r0, r4 | r0 = r4;
0x000026ac blx 0xd88 | r0 = strlen (r0);
0x000026b0 mov r6, r0 | r6 = r0;
0x000026b2 mov r0, sb | r0 = sb;
0x000026b4 blx 0xd88 | strlen (r0);
0x000026b8 add r0, r6 | r0 += r6;
0x000026ba cmp.w r0, 0x1000 |
| if (r0 > 0x1000) {
0x000026be bhi 0x2714 | goto label_27;
| }
0x000026c0 ldr r3, [pc, 0x88] |
0x000026c2 adds r0, r4, r6 | r0 = r4 + r6;
0x000026c4 movs r1, 1 | r1 = 1;
0x000026c6 mov.w r2, -1 | r2 = -1;
0x000026ca str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000026ce add r3, pc | r3 = 0x4e1e;
0x000026d0 blx 0xdc4 | sprintf_chk ();
0x000026d4 ldr r1, [pc, 0x78] |
0x000026d6 mov r3, r5 | r3 = r5;
0x000026d8 mov r2, sb | r2 = sb;
0x000026da movs r0, 7 | r0 = 7;
0x000026dc add r1, pc | r1 = 0x4e30;
0x000026de bl 0x2b28 | fcn_00002b28 (r0);
0x000026e2 b 0x2674 | goto label_1;
| label_26:
0x000026e4 ldr r1, [pc, 0x6c] |
0x000026e6 mov r2, r6 | r2 = r6;
0x000026e8 movs r0, 2 | r0 = 2;
0x000026ea add r1, pc | r1 = 0x4e42;
0x000026ec bl 0x2b28 | fcn_00002b28 (r0);
0x000026f0 b 0x25da | goto label_2;
| label_22:
0x000026f2 ldr r1, [pc, 0x64] |
0x000026f4 add.w r3, r4, 9 | r3 = r4 + 9;
0x000026f8 mov r2, r7 | r2 = r7;
0x000026fa movs r0, 3 | r0 = 3;
0x000026fc add r1, pc | r1 = 0x4e5a;
0x000026fe bl 0x2b28 | fcn_00002b28 (r0);
0x00002702 b 0x25da | goto label_2;
| }
0x00002704 ldr r1, [pc, 0x54] |
0x00002706 mov r3, r5 | r3 = r5;
0x00002708 mov r2, sb | r2 = sb;
0x0000270a movs r0, 7 | r0 = 7;
0x0000270c add r1, pc | r1 = 0x4e6c;
0x0000270e bl 0x2b28 | fcn_00002b28 (r0);
0x00002712 b 0x2674 | goto label_1;
| label_27:
0x00002714 ldr r1, [pc, 0x48] |
0x00002716 mov r3, sb | r3 = sb;
0x00002718 mov r2, r5 | r2 = r5;
0x0000271a movs r0, 3 | r0 = 3;
0x0000271c add r1, pc | r1 = 0x4e80;
0x0000271e bl 0x2b28 | fcn_00002b28 (r0);
0x00002722 b 0x25da | goto label_2;
| label_21:
0x00002724 blx 0xc98 | stack_chk_fail ();
0x00002728 cmp r1, 0x5e |
0x0000272a movs r0, r0 |
0x0000272c lsls r4, r7, 3 | r4 = r7 << 3;
0x0000272e movs r0, r0 |
0x00002730 asrs r4, r3, 7 | r4 = r3 >> 7;
0x00002732 movs r0, r0 |
0x00002734 cmp r1, 6 |
0x00002736 movs r0, r0 |
0x00002738 asrs r6, r7, 6 | r6 = r7 >> 6;
0x0000273a movs r0, r0 |
0x0000273c asrs r4, r1, 7 | r4 = r1 >> 7;
0x0000273e movs r0, r0 |
0x00002740 asrs r4, r3, 7 | r4 = r3 >> 7;
0x00002742 movs r0, r0 |
0x00002744 cmp r1, 0xb0 |
0x00002746 movs r0, r0 |
0x00002748 cmp r1, 0xa2 |
0x0000274a movs r0, r0 |
0x0000274c asrs r6, r5, 7 | r6 = r5 >> 7;
0x0000274e movs r0, r0 |
0x00002750 asrs r4, r4, 7 | r4 >>= 7;
0x00002752 movs r0, r0 |
0x00002754 asrs r2, r1, 5 | r2 = r1 >> 5;
0x00002756 movs r0, r0 |
0x00002758 asrs r4, r2, 3 | r4 = r2 >> 3;
0x0000275a movs r0, r0 |
0x0000275c asrs r4, r2, 5 | r4 = r2 >> 5;
0x0000275e movs r0, r0 |
0x00002760 asrs r4, r5, 5 | r4 = r5 >> 5;
0x00002762 movs r0, r0 |
0x00002764 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00002768 sub sp, 0x14 |
0x0000276a mov sb, r2 | sb = r2;
0x0000276c mov r5, r1 | r5 = r1;
0x0000276e str r0, [sp, 8] | var_8h = r0;
0x00002770 cmp r1, 0 |
| if (r1 == 0) {
0x00002772 beq.w 0x28a4 | goto label_28;
| }
0x00002776 mov r3, r1 | r3 = r1;
| do {
0x00002778 mov r8, r3 | r8 = r3;
0x0000277a ldr r3, [r3] | r3 = *(r3);
0x0000277c cmp r3, 0 |
0x0000277e bne 0x2778 |
| } while (r3 != 0);
| label_15:
0x00002780 ldr r3, [sp, 8] | r3 = var_8h;
| if (r3 == 0) {
0x00002782 cbz r3, 0x27b2 | goto label_11;
| }
0x00002784 ldr r3, [pc, 0x130] |
0x00002786 mov.w sl, 1 | sl = 1;
0x0000278a ldr r6, [sp, 8] | r6 = var_8h;
0x0000278c add r3, pc | r3 = 0x5048;
0x0000278e str r3, [sp, 0xc] | var_ch = r3;
| if (r5 == 0) {
| label_10:
0x00002790 cbz r5, 0x27ba | goto label_29;
| }
| label_3:
0x00002792 add.w r4, r6, 9 | r4 = r6 + 9;
0x00002796 mov r7, r5 | r7 = r5;
0x00002798 b 0x279e |
| while (r0 != 0) {
0x0000279a ldr r7, [r7] | r7 = *(r7);
| if (r7 == 0) {
0x0000279c cbz r7, 0x27ba | goto label_29;
| }
0x0000279e mov r1, r4 | r1 = r4;
0x000027a0 add.w r0, r7, 9 | r0 += s1;
0x000027a4 blx 0xc20 | r0 = strcmp (r0, r1);
0x000027a8 cmp r0, 0 |
0x000027aa bne 0x279a |
| }
0x000027ac ldr r6, [r6] | r6 = *(r6);
0x000027ae cmp r6, 0 |
| if (r6 != 0) {
0x000027b0 bne 0x2792 | goto label_3;
| }
| label_11:
0x000027b2 movs r0, 1 | r0 = 1;
| label_5:
0x000027b4 add sp, 0x14 |
0x000027b6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_29:
0x000027ba ldr.w ip, [r6, 4] | ip = *((r6 + 4));
0x000027be cmp.w ip, 0x10000 |
| if (ip >= 0x10000) {
0x000027c2 bhs 0x27e4 | goto label_6;
| }
0x000027c4 mov r4, ip | r4 = ip;
| if (r5 == 0) {
0x000027c6 cbz r5, 0x2804 | goto label_7;
| }
| label_4:
0x000027c8 mov r3, r5 | r3 = r5;
0x000027ca b 0x27d0 |
| while (r4 != r2) {
0x000027cc ldr r3, [r3] | r3 = *(r3);
| if (r3 == 0) {
0x000027ce cbz r3, 0x2804 | goto label_7;
| }
0x000027d0 ldr r2, [r3, 4] | r2 = var_4h_2;
0x000027d2 cmp r4, r2 |
0x000027d4 bne 0x27cc |
| }
0x000027d6 cmp ip, r4 |
| if (ip != r4) {
0x000027d8 bne 0x2886 | goto label_30;
| }
0x000027da add.w r4, ip, 1 | r4 = ip + 1;
0x000027de cmp.w r4, 0x10000 |
| if (r4 != 0x10000) {
0x000027e2 bne 0x27c8 | goto label_4;
| }
| label_6:
0x000027e4 cmp.w sb, 0 |
| if (sb != 0) {
0x000027e8 bne 0x289e | goto label_31;
| }
0x000027ea ldr r2, [pc, 0xd0] |
0x000027ec add r2, pc | r2 = 0x50ae;
| label_14:
0x000027ee ldr r1, [pc, 0xd0] |
0x000027f0 add.w r3, r6, 9 | r3 = r6 + 9;
0x000027f4 movs r0, 3 | r0 = 3;
0x000027f6 str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x000027fa add r1, pc | r1 = 0x50c0;
0x000027fc bl 0x2b28 | fcn_00002b28 (r0);
| label_9:
0x00002800 movs r0, 0 | r0 = 0;
0x00002802 b 0x27b4 | goto label_5;
| label_7:
0x00002804 cmp ip, r4 |
| if (ip == r4) {
0x00002806 beq 0x282a | goto label_32;
| }
0x00002808 movs r1, 1 | r1 = 1;
| label_12:
0x0000280a ldr r3, [sp, 8] | r3 = var_8h;
0x0000280c b 0x2812 |
| while (r2 != r4) {
0x0000280e ldr r3, [r3] | r3 = *(r3);
| if (r3 == 0) {
0x00002810 cbz r3, 0x2826 | goto label_33;
| }
0x00002812 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00002814 cmp r2, r4 |
0x00002816 bne 0x280e |
| }
| label_8:
0x00002818 adds r4, 1 | r4++;
0x0000281a cmp.w r4, 0x10000 |
| if (r4 == 0x10000) {
0x0000281e beq 0x27e4 | goto label_6;
| }
0x00002820 cmp r5, 0 |
| if (r5 != 0) {
0x00002822 bne 0x27c8 | goto label_4;
| }
0x00002824 b 0x2804 | goto label_7;
| label_33:
0x00002826 cmp r1, 0 |
| if (r1 == 0) {
0x00002828 beq 0x2818 | goto label_8;
| }
| label_32:
0x0000282a movw r0, 0x1030 | r0 = 0x1030;
0x0000282e blx 0xd28 | r0 = malloc (r0);
0x00002832 mov fp, r0 |
0x00002834 cmp r0, 0 |
| if (r0 == 0) {
0x00002836 beq 0x28a8 | goto label_34;
| }
0x00002838 movw r2, 0x1030 | r2 = 0x1030;
0x0000283c mov r1, r6 | r1 = r6;
0x0000283e blx 0xc74 | memcpy (r0, r1, r2);
0x00002842 movs r2, 0 | r2 = 0;
0x00002844 str.w r4, [fp, 4] | __asm ("str.w r4, [arg_4h]");
0x00002848 strb.w sl, [fp, 8] | *(arg_8h) = sl;
0x0000284c add.w r3, fp, 9 | r3 += arg_9h;
0x00002850 str.w r2, [fp] | __asm ("str.w r2, [fp]");
0x00002854 str.w fp, [r8] | __asm ("str.w fp, [r8]");
0x00002858 mov r8, fp | r8 = fp;
0x0000285a cmp.w sb, 0 |
| if (sb == 0) {
0x0000285e beq 0x288a | goto label_35;
| }
0x00002860 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x00002862 movs r0, 7 | r0 = 7;
0x00002864 ldr r1, [pc, 0x5c] |
0x00002866 strd r4, r2, [sp] | __asm ("strd r4, r2, [sp]");
0x0000286a ldr r2, [pc, 0x5c] |
0x0000286c add r1, pc | r1 = 0x5134;
0x0000286e add r2, pc | r2 = 0x513c;
0x00002870 bl 0x2b28 | fcn_00002b28 (r0);
0x00002874 mov r0, fp | r0 = fp;
0x00002876 bl 0x2580 | r0 = fcn_00002580 (r0, r1, r2, r3, r4, r5);
0x0000287a cmp r0, 0 |
| if (r0 == 0) {
0x0000287c beq 0x2800 | goto label_9;
| }
| label_13:
0x0000287e ldr r6, [r6] | r6 = *(r6);
0x00002880 cmp r6, 0 |
| if (r6 != 0) {
0x00002882 bne 0x2790 | goto label_10;
| }
0x00002884 b 0x27b2 | goto label_11;
| label_30:
0x00002886 movs r1, 0 | r1 = 0;
0x00002888 b 0x280a | goto label_12;
| label_35:
0x0000288a ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0000288c ldr r1, [pc, 0x3c] |
0x0000288e ldr r2, [sp, 0xc] | r2 = var_ch;
0x00002890 strd r4, r0, [sp] | __asm ("strd r4, r0, [sp]");
0x00002894 movs r0, 7 | r0 = 7;
0x00002896 add r1, pc | r1 = 0x5166;
0x00002898 bl 0x2b28 | fcn_00002b28 (r0);
0x0000289c b 0x287e | goto label_13;
| label_31:
0x0000289e ldr r2, [pc, 0x30] |
0x000028a0 add r2, pc | r2 = 0x5176;
0x000028a2 b 0x27ee | goto label_14;
| label_28:
0x000028a4 mov r8, r1 | r8 = r1;
0x000028a6 b 0x2780 | goto label_15;
| label_34:
0x000028a8 ldr r1, [pc, 0x28] |
0x000028aa movs r0, 3 | r0 = 3;
0x000028ac add r1, pc | r1 = 0x5184;
0x000028ae bl 0x2b28 | fcn_00002b28 (r0);
0x000028b2 movs r0, 1 | r0 = 1;
0x000028b4 blx 0xd70 | exit (r0);
0x000028b8 asrs r4, r4, 5 | r4 >>= 5;
0x000028ba movs r0, r0 |
0x000028bc asrs r4, r0, 4 | r4 = r0 >> 4;
0x000028be movs r0, r0 |
0x000028c0 asrs r6, r7, 3 | r6 = r7 >> 3;
0x000028c2 movs r0, r0 |
0x000028c4 asrs r4, r0, 3 | r4 = r0 >> 3;
0x000028c6 movs r0, r0 |
0x000028c8 asrs r2, r7, 1 | r2 = r7 >> 1;
0x000028ca movs r0, r0 |
0x000028cc asrs r2, r3, 2 | r2 = r3 >> 2;
0x000028ce movs r0, r0 |
0x000028d0 asrs r0, r1, 1 | r0 = r1 >> 1;
0x000028d2 movs r0, r0 |
0x000028d4 lsrs r4, r7, 0x1a | r4 = r7 >> 0x1a;
0x000028d6 movs r0, r0 |
0x000028d8 ldr r2, [pc, 0x20c] |
0x000028da ldr r3, [pc, 0x210] | r3 = *(0x2aee);
0x000028dc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000028e0 mov sb, r0 | sb = r0;
0x000028e2 ldr r6, [pc, 0x20c] |
0x000028e4 add r2, pc | r2 = 0x53d0;
0x000028e6 sub sp, 0x19c |
0x000028e8 ldr r5, [pc, 0x208] |
0x000028ea ldr r3, [r2, r3] |
0x000028ec add r6, pc | r6 = 0x53e2;
0x000028ee mov r1, r6 | r1 = r6;
0x000028f0 add r5, pc | r5 = 0x53e8;
0x000028f2 add.w r0, r5, 8 | r0 = r5 + 8;
0x000028f6 ldr r3, [r3] | r3 = *(0x53d0);
0x000028f8 str r3, [sp, 0x194] | var_194h = r3;
0x000028fa mov.w r3, 0 | r3 = 0;
0x000028fe bl 0x2354 | r0 = fcn_00002354 (r0, r1);
0x00002902 cbnz r0, 0x2924 |
| while (r0 == 0) {
| label_16:
0x00002904 movs r4, 0 | r4 = 0;
| label_17:
0x00002906 ldr r2, [pc, 0x1f0] |
0x00002908 ldr r3, [pc, 0x1e0] | r3 = *(0x2aec);
0x0000290a add r2, pc | r2 = 0x5408;
0x0000290c ldr r3, [r2, r3] | r3 = *(0x5408);
0x0000290e ldr r2, [r3] | r2 = *(0x5408);
0x00002910 ldr r3, [sp, 0x194] | r3 = var_194h;
0x00002912 eors r2, r3 | r2 ^= r3;
0x00002914 mov.w r3, 0 | r3 = 0;
0x00002916 lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 != r0) {
0x00002918 bne.w 0x2ab6 | goto label_36;
| }
0x0000291c mov r0, r4 | r0 = r4;
0x0000291e add sp, 0x19c |
0x00002920 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00002924 ldr.w r8, [pc, 0x1d4] |
0x00002928 add.w r0, r5, 0x10 | r0 = r5 + 0x10;
0x0000292c add r8, pc | r8 = 0x542c;
0x0000292e mov r1, r8 | r1 = r8;
0x00002930 bl 0x2354 | r0 = fcn_00002354 (r0, r1);
0x00002934 mov r4, r0 | r4 = r0;
0x00002936 cmp r0, 0 |
0x00002938 beq 0x2904 |
| }
0x0000293a cmp.w sb, 0 |
| if (sb == 0) {
0x0000293e beq.w 0x2a7e | goto label_37;
| }
0x00002942 ldr r3, [pc, 0x1bc] |
0x00002944 add r7, sp, 0x14 | r7 += var_14h;
0x00002946 movs r2, 1 | r2 = 1;
0x00002948 mov r0, r7 | r0 = r7;
0x0000294a str.w sb, [sp, 4] | __asm ("str.w sb, [var_4h]");
0x0000294e add.w sl, sp, 0x94 | sl += var_94h;
0x00002952 add r3, pc | r3 = 0x5458;
0x00002954 str r3, [sp] | *(sp) = r3;
0x00002956 movs r3, 0x80 | r3 = 0x80;
0x00002958 mov r1, r3 | r1 = r3;
0x0000295a blx 0xeb4 | snprintf_chk ();
0x0000295e ldr r3, [pc, 0x1a4] |
0x00002960 movs r2, 1 | r2 = 1;
0x00002962 mov r0, sl | r0 = sl;
0x00002964 str.w sb, [sp, 4] | __asm ("str.w sb, [var_4h]");
0x00002968 add r3, pc | r3 = 0x5472;
0x0000296a str r3, [sp] | *(sp) = r3;
0x0000296c movs r3, 0x80 | r3 = 0x80;
0x0000296e mov r1, r3 | r1 = r3;
0x00002970 blx 0xeb4 | snprintf_chk ();
0x00002974 mov r1, r7 | r1 = r7;
0x00002976 adds r0, r5, 4 | r0 = r5 + 4;
0x00002978 bl 0x2354 | r0 = fcn_00002354 (r0, r1);
0x0000297c cmp r0, 0 |
| if (r0 == 0) {
0x0000297e beq 0x2904 | goto label_16;
| }
0x00002980 mov r1, sl | r1 = sl;
0x00002982 add.w r0, r5, 0xc | r0 = r5 + 0xc;
0x00002986 bl 0x2354 | r0 = fcn_00002354 (r0, r1);
0x0000298a cmp r0, 0 |
| if (r0 == 0) {
0x0000298c beq 0x2904 | goto label_16;
| }
0x0000298e ldr r3, [pc, 0x178] |
0x00002990 add r7, sp, 0x114 | r7 += ptr;
0x00002992 movs r2, 1 | r2 = 1;
0x00002994 mov r0, r7 | r0 = r7;
0x00002996 str.w sb, [sp, 4] | __asm ("str.w sb, [var_4h]");
0x0000299a add r3, pc | r3 = 0x54a8;
0x0000299c str r3, [sp] | *(sp) = r3;
0x0000299e movs r3, 0x80 | r3 = 0x80;
0x000029a0 mov r1, r3 | r1 = r3;
0x000029a2 blx 0xeb4 | snprintf_chk ();
0x000029a6 ldrd r0, r1, [r5, 0xc] | __asm ("ldrd r0, r1, [r5, 0xc]");
0x000029aa movs r2, 0 | r2 = 0;
0x000029ac bl 0x2764 | r0 = void (*0x2764)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5);
0x000029b0 cmp r0, 0 |
| if (r0 == 0) {
0x000029b2 beq 0x2904 | goto label_16;
| }
0x000029b4 ldrd r0, r1, [r5, 4] | __asm ("ldrd r0, r1, [r5, 4]");
0x000029b8 movs r2, 1 | r2 = 1;
0x000029ba bl 0x2764 | r0 = void (*0x2764)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5);
0x000029be cmp r0, 0 |
| if (r0 == 0) {
0x000029c0 beq 0x2904 | goto label_16;
| }
0x000029c2 ldr r0, [r5, 0x10] | r0 = *((r5 + 0x10));
0x000029c4 mov r1, r8 | r1 = r8;
0x000029c6 bl 0x21c0 | r0 = fcn_000021c0 (r0, r1);
0x000029ca cmp r0, 0 |
| if (r0 == 0) {
0x000029cc beq 0x2904 | goto label_16;
| }
0x000029ce ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x000029d0 mov r1, r6 | r1 = r6;
0x000029d2 bl 0x21c0 | r0 = fcn_000021c0 (r0, r1);
0x000029d6 cmp r0, 0 |
| if (r0 == 0) {
0x000029d8 beq 0x2904 | goto label_16;
| }
0x000029da mov r0, r7 | r0 = r7;
0x000029dc bl 0x2240 | r0 = fcn_00002240 (r0);
0x000029e0 mov r8, r0 | r8 = r0;
0x000029e2 cmp r0, 0 |
| if (r0 == 0) {
0x000029e4 beq 0x2904 | goto label_16;
| }
0x000029e6 ldr r5, [pc, 0x124] |
0x000029e8 add r5, pc | r5 = 0x54fa;
0x000029ea mov r0, r5 | r0 = r5;
0x000029ec bl 0x2240 | r0 = fcn_00002240 (r0);
0x000029f0 mov sb, r0 | sb = r0;
0x000029f2 cmp r0, 0 |
| if (r0 == 0) {
0x000029f4 beq 0x2a76 | goto label_38;
| }
0x000029f6 mov.w r2, 0x180 | r2 = 0x180;
0x000029fa movw r1, 0x241 | r1 = 0x241;
0x000029fe mov r0, r5 | r0 = r5;
0x00002a00 blx 0xd4c | r0 = open (r0, r1, r2);
0x00002a04 subs r3, r0, 0 | r3 = r0 - 0;
0x00002a06 str r3, [sp, 0xc] | fildes = r3;
| if (r3 < r0) {
0x00002a08 blt 0x2aba | goto label_39;
| }
0x00002a0a ldr r3, [pc, 0x104] |
0x00002a0c add r3, pc | r3 = 0x5522;
0x00002a0e ldr.w sl, [r3, 8] | sl = *(0x552a);
0x00002a12 cmp.w sl, 0 |
| if (sl == 0) {
0x00002a16 beq 0x2aa2 | goto label_40;
| }
| label_18:
0x00002a18 add.w r7, sl, 9 | r7 = sl + 9;
0x00002a1c mov r5, r8 | r5 = r8;
0x00002a1e mov r0, r7 | r0 = r7;
0x00002a20 blx 0xd88 | strlen (r0);
0x00002a24 ldrb.w r3, [sl, 8] | r3 = *((sl + 8));
0x00002a28 mov r6, r0 | r6 = r0;
| if (r3 != 0) {
0x00002a2a cbnz r3, 0x2a50 | goto label_41;
| }
0x00002a2c ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x00002a30 cmp r3, 0 |
0x00002a32 ite ne |
| if (r3 == 0) {
0x00002a34 movne r5, sb | r5 = sb;
| }
| if (r3 != 0) {
0x00002a36 moveq r5, r8 | r5 = r8;
| }
0x00002a38 b 0x2a50 |
| while (r0 != 0) {
0x00002a3a mov r2, r6 | r2 = r6;
0x00002a3c mov r1, r7 | r1 = r7;
0x00002a3e mov r0, r5 | r0 = r5;
0x00002a40 blx 0xe84 | r0 = strncmp (r0, r1, r2);
| if (r0 == 0) {
0x00002a44 cbnz r0, 0x2a4c |
0x00002a46 ldrb r2, [r5, r6] | r2 = *((r5 + r6));
0x00002a48 cmp r2, 0x3a |
| if (r2 == 0x3a) {
0x00002a4a beq 0x2a84 | goto label_42;
| }
| }
0x00002a4c add.w r5, fp, 1 | r5 += arg_1h;
| label_41:
0x00002a50 movs r1, 0xa | r1 = 0xa;
0x00002a52 mov r0, r5 | r0 = r5;
0x00002a54 blx 0xd94 | r0 = strchr (r0, r1);
0x00002a58 mov fp, r0 |
0x00002a5a cmp r0, 0 |
0x00002a5c bne 0x2a3a |
| }
0x00002a5e ldr r1, [pc, 0xb4] |
0x00002a60 mov r2, r7 | r2 = r7;
0x00002a62 movs r0, 3 | r0 = 3;
0x00002a64 add r1, pc | r1 = 0x557e;
0x00002a66 bl 0x2b28 | fcn_00002b28 (r0);
| label_19:
0x00002a6a ldr r0, [sp, 0xc] | r0 = fildes;
0x00002a6c blx 0xe9c | close (r0);
0x00002a70 mov r0, sb | r0 = sb;
0x00002a72 blx 0xc5c | free (r0);
| label_38:
0x00002a76 mov r0, r8 | r0 = r8;
0x00002a78 blx 0xc5c | free (r0);
0x00002a7c b 0x2904 | goto label_16;
| label_37:
0x00002a7e movs r3, 1 | r3 = 1;
0x00002a80 strb r3, [r5] | *(r5) = r3;
0x00002a82 b 0x2906 | goto label_17;
| label_42:
0x00002a84 sub.w r3, fp, r5 | r3 = fp - r5;
0x00002a88 mov r1, r5 | r1 = r5;
0x00002a8a adds r5, r3, 1 | r5 = r3 + 1;
0x00002a8c ldr r0, [sp, 0xc] | r0 = fildes;
0x00002a8e mov r2, r5 | r2 = r5;
0x00002a90 blx 0xde8 | r0 = write (r0, r1, r2);
0x00002a94 cmp r5, r0 |
| if (r5 != r0) {
0x00002a96 bne 0x2ac8 | goto label_43;
| }
0x00002a98 ldr.w sl, [sl] | sl = *(sl);
0x00002a9c cmp.w sl, 0 |
| if (sl != 0) {
0x00002aa0 bne 0x2a18 | goto label_18;
| }
| label_40:
0x00002aa2 ldr r0, [sp, 0xc] | r0 = fildes;
0x00002aa4 blx 0xe9c | close (r0);
0x00002aa8 mov r0, sb | r0 = sb;
0x00002aaa blx 0xc5c | free (r0);
0x00002aae mov r0, r8 | r0 = r8;
0x00002ab0 blx 0xc5c | free (r0);
0x00002ab4 b 0x2906 | goto label_17;
| label_36:
0x00002ab6 blx 0xc98 | stack_chk_fail ();
| label_39:
0x00002aba ldr r1, [pc, 0x5c] |
0x00002abc mov r2, r5 | r2 = r5;
0x00002abe movs r0, 2 | r0 = 2;
0x00002ac0 add r1, pc | r1 = 0x55de;
0x00002ac2 bl 0x2b28 | fcn_00002b28 (r0);
0x00002ac6 b 0x2a6a | goto label_19;
| label_43:
0x00002ac8 cmp r0, 0 |
| if (r0 >= 0) {
0x00002aca blt 0x2ad8 |
0x00002acc ldr r1, [pc, 0x4c] |
0x00002ace movs r0, 2 | r0 = 2;
0x00002ad0 add r1, pc | r1 = 0x55f0;
0x00002ad2 bl 0x2b28 | fcn_00002b28 (r0);
0x00002ad6 b 0x2a6a | goto label_19;
| }
0x00002ad8 ldr r2, [pc, 0x44] |
0x00002ada movs r0, 2 | r0 = 2;
0x00002adc ldr r1, [pc, 0x44] |
0x00002ade add r2, pc | r2 = 0x5602;
0x00002ae0 add r1, pc | r1 = 0x5608;
0x00002ae2 bl 0x2b28 | fcn_00002b28 (r0);
0x00002ae6 b 0x2a6a | goto label_19;
| }
[*] Function strcpy used 4 times conf-migrate