[*] 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-50593792.squashfs_v4_le_extract/usr/libexec/conf-migrate @ 0x229c */
| #include <stdint.h>
|
; (fcn) fcn.0000229c () | void fcn_0000229c (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| char * s2;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
0x0000229c ldr r2, [pc, 0x15c] |
0x0000229e ldr r3, [pc, 0x160] | r3 = *(0x2402);
0x000022a0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000022a4 sub sp, 0x24 |
0x000022a6 add r2, pc | r2 = 0x46a6;
0x000022a8 str r0, [sp, 0xc] | var_ch = r0;
0x000022aa mov r5, r0 | r5 = r0;
0x000022ac movs r4, 0 | r4 = 0;
0x000022ae ldr r3, [r2, r3] |
0x000022b0 mov r0, r1 | r0 = r1;
0x000022b2 mov r8, r1 | r8 = r1;
0x000022b4 ldr r3, [r3] | r3 = *(0x46a6);
0x000022b6 str r3, [sp, 0x1c] | var_1ch = r3;
0x000022b8 mov.w r3, 0 | r3 = 0;
0x000022bc str r4, [r5] | *(r5) = r4;
0x000022be bl 0x2180 | r0 = fcn_00002180 (r0);
0x000022c2 mov r7, r0 | r7 = r0;
0x000022c4 cmp r0, 0 |
| if (r0 == 0) {
0x000022c6 beq 0x23b4 | goto label_0;
| }
0x000022c8 ldr r1, [pc, 0x138] |
0x000022ca str r4, [sp, 0x14] | var_14h = r4;
0x000022cc add r1, pc | r1 = 0x46d4;
0x000022ce blx 0xd84 | r0 = strtok (r0, r1);
0x000022d2 mov r5, r0 | r5 = r0;
0x000022d4 cmp r0, 0 |
| if (r0 == 0) {
0x000022d6 beq 0x23a8 | goto label_1;
| }
0x000022d8 add r3, sp, 0x14 | r3 += var_14h;
0x000022da add.w fp, sp, 0x18 |
0x000022de str r3, [sp] | *(sp) = r3;
0x000022e0 ldr r3, [pc, 0x124] |
0x000022e2 add r3, pc | r3 = 0x46ee;
0x000022e4 str r3, [sp, 8] | s2 = r3;
| do {
0x000022e6 movs r1, 0x3a | r1 = 0x3a;
0x000022e8 mov r0, r5 | r0 = r5;
0x000022ea blx 0xd0c | r0 = strchr (r0, r1);
0x000022ee mov r6, r0 | r6 = r0;
0x000022f0 cmp r0, 0 |
| if (r0 == 0) {
0x000022f2 beq 0x23ce | goto label_2;
| }
0x000022f4 movs r1, 0x3a | r1 = 0x3a;
0x000022f6 adds r0, 1 | r0++;
0x000022f8 blx 0xd0c | r0 = strchr (r0, r1);
0x000022fc cmp r0, 0 |
| if (r0 == 0) {
0x000022fe beq 0x23ce | goto label_2;
| }
0x00002300 adds r4, r0, 1 | r4 = r0 + 1;
0x00002302 movs r1, 0x3a | r1 = 0x3a;
0x00002304 mov r0, r4 | r0 = r4;
0x00002306 blx 0xd0c | r0 = strchr (r0, r1);
0x0000230a mov sl, r0 | sl = r0;
0x0000230c cmp r0, 0 |
| if (r0 == 0) {
0x0000230e beq 0x23ce | goto label_2;
| }
0x00002310 add.w sb, r0, 1 | sb = r0 + 1;
0x00002314 mov r0, sb | r0 = sb;
0x00002316 blx 0xd00 | r0 = strlen (r0);
0x0000231a cmp.w r0, 0x1000 |
0x0000231e sub.w r2, r6, r5 | r2 = r6 - r5;
0x00002322 ite ls |
| if (r0 > 0x1000) {
0x00002324 movls r0, 0 | r0 = 0;
| }
| if (r0 <= 0x1000) {
0x00002326 movhi r0, 1 | r0 = 1;
| }
0x00002328 cmp r2, 0x20 |
0x0000232a it gt |
| if (r2 <= 0x20) {
0x0000232c orrgt r0, r0, 1 | r0 |= 1;
| }
0x00002330 cmp r0, 0 |
| if (r0 != 0) {
0x00002332 bne 0x23ce | goto label_2;
| }
0x00002334 mov r1, fp | r1 = fp;
0x00002336 mov r0, r4 | r0 = r4;
0x00002338 movs r2, 0xa | r2 = 0xa;
0x0000233a sub.w r4, r4, sl | r4 -= sl;
0x0000233e blx 0xcf4 | strtoul (r0, r1, r2);
0x00002342 clz r4, r4 | r4 &= r4;
0x00002346 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00002348 lsrs r4, r4, 5 | r4 >>= 5;
0x0000234a str r0, [sp, 4] | var_4h = r0;
0x0000234c cmp r1, sl |
0x0000234e it ne |
| if (r1 == sl) {
0x00002350 orrne r4, r4, 1 | r4 |= 1;
| }
0x00002354 cmp r4, 0 |
| if (r4 != 0) {
0x00002356 bne 0x23ce | goto label_2;
| }
0x00002358 movw r0, 0x1030 | r0 = 0x1030;
0x0000235c blx 0xca0 | malloc (r0);
0x00002360 ldr r2, [sp, 4] | r2 = var_4h;
0x00002362 mov sl, r0 | sl = r0;
0x00002364 cmp r0, 0 |
| if (r0 == 0) {
0x00002366 beq 0x23ea | goto label_3;
| }
0x00002368 mov r1, r5 | r1 = r5;
0x0000236a strb r4, [r6] | *(r6) = r4;
0x0000236c adds r0, 9 | r0 += 9;
0x0000236e str r2, [r0, -0x5] | *((r0 - 0x5)) = r2;
0x00002372 strb r4, [r0, -0x1] | *((r0 - 0x1)) = r4;
0x00002376 movs r2, 0x21 | r2 = 0x21;
0x00002378 blx 0xc70 | strcpy_chk ()
0x0000237c mov r1, sb | r1 = sb;
0x0000237e movw r2, 0x1006 | r2 = 0x1006;
0x00002382 add.w r0, sl, 0x2a | r0 = sl + 0x2a;
0x00002386 blx 0xc70 | strcpy_chk ()
0x0000238a ldr r3, [sp] | r3 = *(sp);
0x0000238c mov r0, r4 | r0 = r4;
0x0000238e str.w r4, [sl] | __asm ("str.w r4, [sl]");
0x00002392 ldr r1, [sp, 8] | r1 = s2;
0x00002394 str.w sl, [r3] | __asm ("str.w sl, [r3]");
0x00002396 adr r0, 0 | r0 = 0;
0x00002398 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0000239c blx 0xd84 | r0 = strtok (r0, r1);
0x000023a0 mov r5, r0 | r5 = r0;
0x000023a2 cmp r0, 0 |
0x000023a4 bne 0x22e6 |
| } while (r0 != 0);
0x000023a6 ldr r5, [sp, 0x14] | r5 = var_14h;
| label_1:
0x000023a8 mov r0, r7 | r0 = r7;
0x000023aa blx 0xbd4 | free (r0);
0x000023ac invalid |
0x000023b0 movs r0, 1 | r0 = 1;
0x000023b2 str r5, [r3] | *(r3) = r5;
| do {
| label_0:
0x000023b4 ldr r2, [pc, 0x54] |
0x000023b6 ldr r3, [pc, 0x48] | r3 = *(0x2402);
0x000023b8 add r2, pc | r2 = 0x47c8;
0x000023ba ldr r3, [r2, r3] | r3 = *(0x47c8);
0x000023bc ldr r2, [r3] | r2 = *(0x47c8);
0x000023be ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000023c0 eors r2, r3 | r2 ^= r3;
0x000023c2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000023c6 bne 0x23e6 | goto label_4;
| }
0x000023c8 add sp, 0x24 |
0x000023ca pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_2:
0x000023ce ldr r1, [pc, 0x40] |
0x000023d0 mov r3, r8 | r3 = r8;
0x000023d2 mov r2, r5 | r2 = r5;
0x000023d4 movs r0, 3 | r0 = 3;
0x000023d6 add r1, pc | r1 = 0x47ec;
0x000023d8 bl 0x2a88 | fcn_00002a88 (r0);
0x000023dc mov r0, r7 | r0 = r7;
0x000023de blx 0xbd4 | free (r0);
0x000023e2 movs r0, 0 | r0 = 0;
0x000023e4 b 0x23b4 |
| } while (1);
| label_4:
0x000023e6 blx 0xc10 | stack_chk_fail ();
| label_3:
0x000023ea ldr r1, [pc, 0x28] |
0x000023ec movs r0, 3 | r0 = 3;
0x000023ee add r1, pc | r1 = 0x4808;
0x000023f0 bl 0x2a88 | fcn_00002a88 (r0);
0x000023f4 movs r0, 1 | r0 = 1;
0x000023f6 blx 0xce8 | exit (r0);
0x000023fa nop |
0x000023fc adds r6, r0, 1 | r6 = r0 + 1;
0x000023fe movs r1, r0 | r1 = r0;
0x00002400 lsls r4, r7, 3 | r4 = r7 << 3;
0x00002402 movs r0, r0 |
0x00002404 asrs r0, r4, 0x10 | r0 = r4 >> 0x10;
0x00002406 movs r0, r0 |
0x00002408 asrs r2, r1, 0x10 | r2 = r1 >> 0x10;
0x0000240a movs r0, r0 |
0x0000240c subs r4, r6, r4 | r4 = r6 - r4;
0x0000240e movs r1, r0 | r1 = r0;
0x00002410 asrs r2, r3, 0xc | r2 = r3 >> 0xc;
0x00002412 movs r0, r0 |
0x00002414 asrs r2, r3, 0xb | r2 = r3 >> 0xb;
0x00002416 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/libexec/conf-migrate @ 0x24c8 */
| #include <stdint.h>
|
; (fcn) fcn.000024c8 () | void fcn_000024c8 (int16_t arg_0h, 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 fd;
| 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_ch;
| int16_t var_0h_3;
| int32_t var_0h_7;
| int16_t var_ch_3;
| char * * endptr;
| int16_t var_4h_2;
| int16_t var_18h;
| char * s;
| int32_t var_0h_4;
| r0 = arg1;
0x000024c8 teqhs sl, r1, ror sl | __asm ("teqhs sl, r1, ror sl");
0x000024cc ldr r3, [pc, 0x1c4] |
0x000024ce push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000024d2 sub.w sp, sp, 0x1000 |
0x000024d6 add r2, pc | r2 += pc;
0x000024d8 sub sp, 0x1c |
0x000024da mov r6, r0 | r6 = r0;
0x000024dc add.w r0, sp, 0x1000 | r0 += s;
0x000024e0 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000024e2 add.w r7, r6, 0x2a | r7 = r6 + 0x2a;
0x000024e6 adds r0, 0x14 | r0 += 0x14;
0x000024e8 ldr r3, [r3] | r3 = *(0x2694);
0x000024ea str r3, [r0] | *(r0) = r3;
0x000024ec mov.w r3, 0 | r3 = 0;
0x000024f0 mov r0, r7 | r0 = r7;
0x000024f2 blx 0xd0c | r0 = strchr (r0, r1);
| if (r0 == 0) {
0x000024f6 cbz r0, 0x2514 | goto label_16;
| }
0x000024f8 add.w r8, sp, 0x18 | r8 += var_18h;
0x000024fc mov r4, r0 | r4 = r0;
0x000024fe movs r2, 0xa | r2 = 0xa;
0x00002500 sub.w r1, r8, 8 | r1 -= endptr;
0x00002504 mov r0, r7 | r0 = r7;
0x00002506 blx 0xcf4 | strtoul (r0, r1, r2);
0x0000250a ldr sb, [r8, -0x8] | sb = *((r8 - 0x8));
0x0000250e mov r5, r0 | r5 = r0;
0x00002510 cmp sb, r4 |
0x00002512 beq 0x254e |
| while (r3 != 0x3a) {
| label_16:
0x00002514 ldr r1, [pc, 0x180] |
0x00002516 add.w r2, r6, 9 | r2 = r6 + 9;
0x0000251a movs r0, 3 | r0 = 3;
0x0000251c mov.w fp, 0 |
0x00002520 add r1, pc | r1 = 0x4bbc;
0x00002522 bl 0x2a88 | fcn_00002a88 (r0);
| label_1:
0x00002526 ldr r2, [pc, 0x174] |
0x00002528 add.w r1, sp, 0x1000 | r1 += s;
0x0000252c ldr r3, [pc, 0x164] | r3 = *(0x2694);
0x0000252e adds r1, 0x14 | r1 += 0x14;
0x00002530 add r2, pc | r2 = 0x4bd2;
0x00002532 ldr r3, [r2, r3] | r3 = *(0x4bd2);
0x00002534 ldr r2, [r3] | r2 = *(0x4bd2);
0x00002536 ldr r3, [r1] | r3 = *(r1);
0x00002538 eors r2, r3 | r2 ^= r3;
0x0000253a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000253e bne.w 0x268a | goto label_17;
| }
0x00002542 mov r0, fp | r0 = fp;
0x00002544 add.w sp, sp, 0x1000 |
0x00002548 add sp, 0x1c |
0x0000254a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0000254e ldrb.w r3, [sb] | r3 = *(sb);
0x00002552 cmp r3, 0x3a |
0x00002554 bne 0x2514 |
| }
0x00002556 ldr r0, [pc, 0x148] |
0x00002558 mov r1, r5 | r1 = r5;
0x0000255a add r0, pc | r0 = 0x4c00;
0x0000255c bl 0x2470 | r0 = fcn_00002470 (r0, r1);
0x00002560 subs.w sl, r0, 0 | sl = r0 - 0;
| if (sl < r0) {
0x00002564 blt.w 0x2674 | goto label_18;
| }
0x00002568 cmp sl, r5 |
| if (sl != r5) {
0x0000256a beq 0x25a4 |
0x0000256c ldr r1, [pc, 0x134] |
0x0000256e mov r3, r5 | r3 = r5;
0x00002570 sub.w r4, r8, 4 | r4 -= var_4h_2;
0x00002574 add.w r2, r6, 9 | r2 = r6 + 9;
0x00002578 movs r0, 7 | r0 = 7;
0x0000257a str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0000257e add r1, pc | r1 = 0x4c26;
0x00002580 bl 0x2a88 | fcn_00002a88 (r0);
0x00002584 mov r1, sb | r1 = sb;
0x00002586 mov.w r2, 0x1000 | r2 = 0x1000;
0x0000258a mov r0, r4 | r0 = r4;
0x0000258c blx 0xc70 | strcpy_chk ()
0x00002590 ldr r3, [pc, 0x114] |
0x00002592 mov r0, r7 | r0 = r7;
0x00002594 mov.w r2, -1 | r2 = -1;
0x00002598 movs r1, 1 | r1 = 1;
0x0000259a strd sl, r4, [sp] | __asm ("strd sl, r4, [sp]");
0x0000259e add r3, pc | r3 = 0x4c4a;
0x000025a0 blx 0xd3c | sprintf_chk ();
| }
0x000025a4 ldr r3, [pc, 0x104] |
0x000025a6 add r3, pc | r3 = 0x4c56;
0x000025a8 ldr r7, [r3, 0xc] | r7 = *(0x4c62);
0x000025aa cmp r7, 0 |
| if (r7 == 0) {
0x000025ac beq 0x264c | goto label_19;
| }
0x000025ae ldr r3, [pc, 0x100] |
0x000025b0 adds r6, 9 | r6 += 9;
0x000025b2 ldr.w sl, [pc, 0x100] |
0x000025b6 ldr.w sb, [pc, 0x100] |
0x000025ba add r3, pc | r3 = 0x4c70;
0x000025bc add sl, pc | sl = 0x4c76;
0x000025be str r3, [sp, 0xc] | var_ch_3 = r3;
0x000025c0 add sb, pc | sb = 0x4c7e;
0x000025c2 b 0x25ca |
| while (r0 == 0) {
| label_0:
0x000025c4 ldr r7, [r7] | r7 = *(r7);
0x000025c6 cmp r7, 0 |
| if (r7 == 0) {
0x000025c8 beq 0x264c | goto label_19;
| }
0x000025ca mov r1, r6 | r1 = r6;
0x000025cc add.w r0, r7, 0x2a | r0 = r7 + 0x2a;
0x000025d0 bl 0x20b4 | r0 = fcn_000020b4 (r0, r1);
0x000025d4 cmp r0, 0 |
0x000025d6 beq 0x25c4 |
| }
0x000025d8 ldr r3, [sp, 0xc] | r3 = var_ch_3;
0x000025da add.w fp, r7, 9 |
0x000025de ldr r4, [r3, 0x10] | r4 = *((r3 + 0x10));
| if (r4 != 0) {
0x000025e0 cbnz r4, 0x25e8 | goto label_20;
| }
0x000025e2 b 0x2652 | goto label_21;
| do {
0x000025e4 ldr r4, [r4] | r4 = *(r4);
| if (r4 == 0) {
0x000025e6 cbz r4, 0x2652 | goto label_21;
| }
| label_20:
0x000025e8 add.w r5, r4, 9 | r5 = r4 + 9;
0x000025ec mov r1, fp | r1 = fp;
0x000025ee mov r0, r5 | r0 = r5;
0x000025f0 blx 0xb98 | r0 = strcmp (r0, r1);
0x000025f4 cmp r0, 0 |
0x000025f6 bne 0x25e4 |
| } while (r0 != 0);
0x000025f8 adds r4, 0x2a | r4 += 0x2a;
0x000025fa mov r1, r6 | r1 = r6;
0x000025fc mov r0, r4 | r0 = r4;
0x000025fe bl 0x20b4 | r0 = fcn_000020b4 (r0, r1);
0x00002602 mov fp, r0 |
| if (r0 == 0) {
0x00002604 cbnz r0, 0x263c |
0x00002606 mov r0, r4 | r0 = r4;
0x00002608 blx 0xd00 | r0 = strlen (r0);
0x0000260c mov r8, r0 | r8 = r0;
0x0000260e mov r0, r6 | r0 = r6;
0x00002610 blx 0xd00 | strlen (r0);
0x00002614 add r0, r8 | r0 += r8;
0x00002616 cmp.w r0, 0x1000 |
| if (r0 > 0x1000) {
0x0000261a bhi 0x2664 | goto label_22;
| }
0x0000261c mov r3, sl | r3 = sl;
0x0000261e add.w r0, r4, r8 | r0 = r4 + r8;
0x00002622 mov.w r2, -1 | r2 = -1;
0x00002626 movs r1, 1 | r1 = 1;
0x00002628 str r6, [sp] | *(sp) = r6;
0x0000262a blx 0xd3c | sprintf_chk ();
0x0000262e mov r3, r5 | r3 = r5;
0x00002630 mov r2, r6 | r2 = r6;
0x00002632 mov r1, sb | r1 = sb;
0x00002634 movs r0, 7 | r0 = 7;
0x00002636 bl 0x2a88 | fcn_00002a88 (r0);
0x0000263a b 0x25c4 | goto label_0;
| }
0x0000263c ldr r1, [pc, 0x7c] |
0x0000263e mov r3, r5 | r3 = r5;
0x00002640 mov r2, r6 | r2 = r6;
0x00002642 movs r0, 7 | r0 = 7;
0x00002644 add r1, pc | r1 = 0x4d04;
0x00002646 bl 0x2a88 | fcn_00002a88 (r0);
0x0000264a b 0x25c4 | goto label_0;
| label_19:
0x0000264c mov.w fp, 1 |
0x00002650 b 0x2526 | goto label_1;
| label_21:
0x00002652 ldr r1, [pc, 0x6c] |
0x00002654 mov r2, fp | r2 = fp;
0x00002656 movs r0, 2 | r0 = 2;
0x00002658 mov.w fp, 0 |
0x0000265c add r1, pc | r1 = 0x4d22;
0x0000265e bl 0x2a88 | fcn_00002a88 (r0);
0x00002662 b 0x2526 | goto label_1;
| label_22:
0x00002664 ldr r1, [pc, 0x5c] |
0x00002666 mov r3, r6 | r3 = r6;
0x00002668 mov r2, r5 | r2 = r5;
0x0000266a movs r0, 3 | r0 = 3;
0x0000266c add r1, pc | r1 = 0x4d34;
0x0000266e bl 0x2a88 | fcn_00002a88 (r0);
0x00002672 b 0x2526 | goto label_1;
| label_18:
0x00002674 ldr r1, [pc, 0x50] |
0x00002676 add.w r3, r6, 9 | r3 = r6 + 9;
0x0000267a mov r2, r5 | r2 = r5;
0x0000267c movs r0, 3 | r0 = 3;
0x0000267e mov.w fp, 0 |
0x00002682 add r1, pc | r1 = 0x4d4e;
0x00002684 bl 0x2a88 | fcn_00002a88 (r0);
0x00002688 b 0x2526 | goto label_1;
| label_17:
0x0000268a blx 0xc10 | stack_chk_fail ();
0x0000268e nop |
0x00002690 subs r6, r2, r0 | r6 = r2 - r0;
0x00002692 movs r1, r0 | r1 = r0;
0x00002694 lsls r4, r7, 3 | r4 = r7 << 3;
0x00002696 movs r0, r0 |
0x00002698 asrs r0, r6, 7 | r0 = r6 >> 7;
0x0000269a movs r0, r0 |
0x0000269c adds r4, r7, r6 | r4 = r7 + r6;
0x0000269e movs r1, r0 | r1 = r0;
0x000026a0 asrs r2, r2, 7 | r2 >>= 7;
0x000026a2 movs r0, r0 |
0x000026a4 asrs r6, r3, 7 | r6 = r3 >> 7;
0x000026a6 movs r0, r0 |
0x000026a8 asrs r6, r5, 7 | r6 = r5 >> 7;
0x000026aa movs r0, r0 |
0x000026ac subs r2, r4, r1 | r2 = r4 - r1;
0x000026ae movs r1, r0 | r1 = r0;
0x000026b0 subs r6, r1, r1 | r6 = r1 - r1;
0x000026b2 movs r1, r0 | r1 = r0;
0x000026b4 asrs r4, r6, 8 | r4 = r6 >> 8;
0x000026b6 movs r0, r0 |
0x000026b8 asrs r4, r6, 8 | r4 = r6 >> 8;
0x000026ba movs r0, r0 |
0x000026bc asrs r0, r2, 5 | r0 = r2 >> 5;
0x000026be movs r0, r0 |
0x000026c0 asrs r0, r0, 7 | r0 >>= 7;
0x000026c2 movs r0, r0 |
0x000026c4 asrs r0, r2, 5 | r0 = r2 >> 5;
0x000026c6 movs r0, r0 |
0x000026c8 asrs r6, r5, 2 | r6 = r5 >> 2;
0x000026ca movs r0, r0 |
0x000026cc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000026d0 mov r7, r0 | r7 = r0;
0x000026d2 sub sp, 0x14 |
0x000026d4 mov sb, r2 | sb = r2;
0x000026d6 mov r5, r1 | r5 = r1;
0x000026d8 cmp r1, 0 |
| if (r1 == 0) {
0x000026da beq.w 0x2806 | goto label_23;
| }
0x000026de mov r3, r1 | r3 = r1;
| do {
0x000026e0 mov r8, r3 | r8 = r3;
0x000026e2 ldr r3, [r3] | r3 = *(r3);
0x000026e4 cmp r3, 0 |
0x000026e6 bne 0x26e0 |
| } while (r3 != 0);
| if (r7 == 0) {
| label_10:
0x000026e8 cbz r7, 0x2718 | goto label_7;
| }
0x000026ea ldr r3, [pc, 0x130] |
0x000026ec mov r6, r7 | r6 = r7;
0x000026ee mov.w sl, 1 | sl = 1;
0x000026f2 add r3, pc | r3 = 0x4f14;
0x000026f4 str r3, [sp, 0xc] | var_ch = r3;
| label_2:
0x000026f6 add.w fp, r6, 9 |
0x000026fa mov r4, r5 | r4 = r5;
| if (r5 != 0) {
0x000026fc cbnz r5, 0x2704 | goto label_24;
| }
0x000026fe b 0x2720 | goto label_25;
| do {
0x00002700 ldr r4, [r4] | r4 = *(r4);
| if (r4 == 0) {
0x00002702 cbz r4, 0x2720 | goto label_25;
| }
| label_24:
0x00002704 mov r1, fp | r1 = fp;
0x00002706 add.w r0, r4, 9 | r0 = r4 + 9;
0x0000270a blx 0xb98 | r0 = strcmp (r0, r1);
0x0000270e cmp r0, 0 |
0x00002710 bne 0x2700 |
| } while (r0 != 0);
0x00002712 ldr r6, [r6] | r6 = *(r6);
0x00002714 cmp r6, 0 |
| if (r6 != 0) {
0x00002716 bne 0x26f6 | goto label_2;
| }
| label_7:
0x00002718 movs r0, 1 | r0 = 1;
| label_6:
0x0000271a add sp, 0x14 |
0x0000271c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_25:
0x00002720 ldr.w ip, [r6, 4] | ip = *((r6 + 4));
0x00002724 cmp.w ip, 0x10000 |
| if (ip >= 0x10000) {
0x00002728 bhs 0x2748 | goto label_26;
| }
0x0000272a mov r4, ip | r4 = ip;
| label_3:
0x0000272c mov r3, r5 | r3 = r5;
| if (r5 != 0) {
0x0000272e cbnz r5, 0x2736 | goto label_27;
| }
0x00002730 b 0x276c | goto label_28;
| do {
0x00002732 ldr r3, [r3] | r3 = *(r3);
| if (r3 == 0) {
0x00002734 cbz r3, 0x276c | goto label_28;
| }
| label_27:
0x00002736 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00002738 cmp r4, r2 |
0x0000273a bne 0x2732 |
| } while (r4 != r2);
0x0000273c cmp ip, r4 |
| if (ip != r4) {
0x0000273e bne 0x27e0 | goto label_29;
| }
| label_4:
0x00002740 adds r4, 1 | r4++;
0x00002742 cmp.w r4, 0x10000 |
| if (r4 != 0x10000) {
0x00002746 bne 0x272c | goto label_3;
| }
| label_26:
0x00002748 cmp.w sb, 0 |
| if (sb != 0) {
0x0000274c bne 0x2800 | goto label_30;
| }
0x0000274e ldr r2, [pc, 0xd0] |
0x00002750 add r2, pc | r2 = 0x4f76;
| label_9:
0x00002752 ldr r1, [pc, 0xd0] |
0x00002754 add.w r3, r6, 9 | r3 = r6 + 9;
0x00002758 movs r0, 3 | r0 = 3;
0x0000275a str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x0000275e add r1, pc | r1 = 0x4f88;
0x00002760 bl 0x2a88 | fcn_00002a88 (r0);
0x00002764 movs r0, 0 | r0 = 0;
0x00002766 add sp, 0x14 |
0x00002768 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_28:
0x0000276c cmp ip, r4 |
| if (ip == r4) {
0x0000276e beq 0x2784 | goto label_31;
| }
0x00002770 movs r1, 1 | r1 = 1;
| label_8:
0x00002772 mov r3, r7 | r3 = r7;
| label_5:
0x00002774 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00002776 cmp r4, r2 |
| if (r4 == r2) {
0x00002778 beq 0x2740 | goto label_4;
| }
0x0000277a ldr r3, [r3] | r3 = *(r3);
0x0000277c cmp r3, 0 |
| if (r3 != 0) {
0x0000277e bne 0x2774 | goto label_5;
| }
0x00002780 cmp r1, 0 |
| if (r1 == 0) {
0x00002782 beq 0x2740 | goto label_4;
| }
| label_31:
0x00002784 movw r0, 0x1030 | r0 = 0x1030;
0x00002788 blx 0xca0 | r0 = malloc (r0);
0x0000278c mov fp, r0 |
0x0000278e cmp r0, 0 |
| if (r0 == 0) {
0x00002790 beq 0x280a | goto label_32;
| }
0x00002792 movw r2, 0x1030 | r2 = 0x1030;
0x00002796 mov r1, r6 | r1 = r6;
0x00002798 blx 0xbec | memcpy (r0, r1, r2);
0x0000279c movs r2, 0 | r2 = 0;
0x0000279e str.w r4, [fp, 4] | __asm ("str.w r4, [arg_4h]");
0x000027a2 strb.w sl, [fp, 8] | *(arg_8h) = sl;
0x000027a6 add.w r3, fp, 9 | r3 += arg_9h;
0x000027aa str.w r2, [fp] | __asm ("str.w r2, [fp]");
0x000027ae str.w fp, [r8] | __asm ("str.w fp, [r8]");
0x000027b2 mov r8, fp | r8 = fp;
0x000027b4 cmp.w sb, 0 |
| if (sb == 0) {
0x000027b8 beq 0x27e4 | goto label_33;
| }
0x000027ba ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x000027bc movs r0, 7 | r0 = 7;
0x000027be ldr r1, [pc, 0x68] |
0x000027c0 strd r4, r2, [sp] | __asm ("strd r4, r2, [sp]");
0x000027c4 ldr r2, [pc, 0x64] |
0x000027c6 add r1, pc | r1 = 0x4ff4;
0x000027c8 add r2, pc | r2 = 0x4ff8;
0x000027ca bl 0x2a88 | fcn_00002a88 (r0);
0x000027ce mov r0, fp | r0 = fp;
0x000027d0 bl 0x24c8 | r0 = fcn_000024c8 (r0, r1, r2, r3, r4);
0x000027d4 cmp r0, 0 |
| if (r0 == 0) {
0x000027d6 beq 0x271a | goto label_6;
| }
0x000027d8 ldr r6, [r6] | r6 = *(r6);
0x000027da cmp r6, 0 |
| if (r6 != 0) {
0x000027dc bne 0x26f6 | goto label_2;
| }
0x000027de b 0x2718 | goto label_7;
| label_29:
0x000027e0 movs r1, 0 | r1 = 0;
0x000027e2 b 0x2772 | goto label_8;
| label_33:
0x000027e4 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x000027e6 ldr r1, [pc, 0x48] |
0x000027e8 ldr r2, [sp, 0xc] | r2 = var_ch;
0x000027ea strd r4, r0, [sp] | __asm ("strd r4, r0, [sp]");
0x000027ee movs r0, 7 | r0 = 7;
0x000027f0 add r1, pc | r1 = 0x5026;
0x000027f2 bl 0x2a88 | fcn_00002a88 (r0);
0x000027f6 ldr r6, [r6] | r6 = *(r6);
0x000027f8 cmp r6, 0 |
| if (r6 != 0) {
0x000027fa bne.w 0x26f6 | goto label_2;
| }
0x000027fe b 0x2718 | goto label_7;
| label_30:
0x00002800 ldr r2, [pc, 0x30] |
0x00002802 add r2, pc | r2 = 0x503a;
0x00002804 b 0x2752 | goto label_9;
| label_23:
0x00002806 mov r8, r1 | r8 = r1;
0x00002808 b 0x26e8 | goto label_10;
| label_32:
0x0000280a ldr r1, [pc, 0x2c] |
0x0000280c movs r0, 3 | r0 = 3;
0x0000280e add r1, pc | r1 = 0x504c;
0x00002810 bl 0x2a88 | fcn_00002a88 (r0);
0x00002814 movs r0, 1 | r0 = 1;
0x00002816 blx 0xce8 | exit (r0);
0x0000281a nop |
0x0000281c asrs r6, r3, 5 | r6 = r3 >> 5;
0x0000281e movs r0, r0 |
0x00002820 asrs r0, r0, 4 | r0 >>= 4;
0x00002822 movs r0, r0 |
0x00002824 asrs r2, r7, 3 | r2 = r7 >> 3;
0x00002826 movs r0, r0 |
0x00002828 asrs r2, r1, 3 | r2 = r1 >> 3;
0x0000282a movs r0, r0 |
0x0000282c asrs r0, r0, 2 | r0 >>= 2;
0x0000282e movs r0, r0 |
0x00002830 asrs r0, r4, 2 | r0 = r4 >> 2;
0x00002832 movs r0, r0 |
0x00002834 asrs r6, r0, 1 | r6 = r0 >> 1;
0x00002836 movs r0, r0 |
0x00002838 lsrs r2, r7, 0x1a | r2 = r7 >> 0x1a;
0x0000283a movs r0, r0 |
0x0000283c ldr r2, [pc, 0x208] |
0x0000283e ldr r3, [pc, 0x20c] | r3 = *(0x2a4e);
0x00002840 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00002844 mov r7, r0 | r7 = r0;
0x00002846 ldr r6, [pc, 0x208] |
0x00002848 add r2, pc | r2 = 0x5294;
0x0000284a sub sp, 0x19c |
0x0000284c ldr r5, [pc, 0x204] |
0x0000284e ldr r3, [r2, r3] |
0x00002850 add r6, pc | r6 = 0x52a6;
0x00002852 mov r1, r6 | r1 = r6;
0x00002854 add r5, pc | r5 = 0x52ac;
0x00002856 add.w r0, r5, 8 | r0 = r5 + 8;
0x0000285a ldr r3, [r3] | r3 = *(0x5294);
0x0000285c str r3, [sp, 0x194] | var_194h = r3;
0x0000285e mov.w r3, 0 | r3 = 0;
0x00002862 bl 0x229c | r0 = fcn_0000229c (r0, r1);
0x00002866 cbnz r0, 0x2888 |
| while (r0 == 0) {
| label_11:
0x00002868 movs r4, 0 | r4 = 0;
| label_12:
0x0000286a ldr r2, [pc, 0x1ec] |
0x0000286c ldr r3, [pc, 0x1dc] | r3 = *(0x2a4c);
0x0000286e add r2, pc | r2 = 0x52cc;
0x00002870 ldr r3, [r2, r3] | r3 = *(0x52cc);
0x00002872 ldr r2, [r3] | r2 = *(0x52cc);
0x00002874 ldr r3, [sp, 0x194] | r3 = var_194h;
0x00002876 eors r2, r3 | r2 ^= r3;
0x00002878 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000287c bne.w 0x2a14 | goto label_34;
| }
0x00002880 mov r0, r4 | r0 = r4;
0x00002882 add sp, 0x19c |
0x00002884 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00002888 ldr.w r8, [pc, 0x1d0] |
0x0000288c add.w r0, r5, 0x10 | r0 = r5 + 0x10;
0x00002890 add r8, pc | r8 = 0x52f0;
0x00002892 mov r1, r8 | r1 = r8;
0x00002894 bl 0x229c | r0 = fcn_0000229c (r0, r1);
0x00002898 mov r4, r0 | r4 = r0;
0x0000289a cmp r0, 0 |
0x0000289c beq 0x2868 |
| }
0x0000289e cmp r7, 0 |
| if (r7 == 0) {
0x000028a0 beq.w 0x29e2 | goto label_35;
| }
0x000028a4 ldr r3, [pc, 0x1b8] |
0x000028a6 add r4, sp, 0x14 | r4 += var_14h;
0x000028a8 movs r2, 1 | r2 = 1;
0x000028aa mov r0, r4 | r0 = r4;
0x000028ac str r7, [sp, 4] | var_4h = r7;
0x000028ae add.w sb, sp, 0x94 | sb += var_94h;
0x000028b2 add r3, pc | r3 = 0x5316;
0x000028b4 str r3, [sp] | *(sp) = r3;
0x000028b6 movs r3, 0x80 | r3 = 0x80;
0x000028b8 mov r1, r3 | r1 = r3;
0x000028ba blx 0xe2c | snprintf_chk ();
0x000028be ldr r3, [pc, 0x1a4] |
0x000028c0 movs r2, 1 | r2 = 1;
0x000028c2 mov r0, sb | r0 = sb;
0x000028c4 str r7, [sp, 4] | var_4h = r7;
0x000028c6 add r3, pc | r3 = 0x5330;
0x000028c8 str r3, [sp] | *(sp) = r3;
0x000028ca movs r3, 0x80 | r3 = 0x80;
0x000028cc mov r1, r3 | r1 = r3;
0x000028ce blx 0xe2c | snprintf_chk ();
0x000028d2 mov r1, r4 | r1 = r4;
0x000028d4 adds r0, r5, 4 | r0 = r5 + 4;
0x000028d6 bl 0x229c | r0 = fcn_0000229c (r0, r1);
0x000028da cmp r0, 0 |
| if (r0 == 0) {
0x000028dc beq 0x2868 | goto label_11;
| }
0x000028de mov r1, sb | r1 = sb;
0x000028e0 add.w r0, r5, 0xc | r0 = r5 + 0xc;
0x000028e4 bl 0x229c | r0 = fcn_0000229c (r0, r1);
0x000028e8 cmp r0, 0 |
| if (r0 == 0) {
0x000028ea beq 0x2868 | goto label_11;
| }
0x000028ec ldr r3, [pc, 0x178] |
0x000028ee add.w sb, sp, 0x114 | sb += ptr;
0x000028f2 movs r2, 1 | r2 = 1;
0x000028f4 mov r0, sb | r0 = sb;
0x000028f6 str r7, [sp, 4] | var_4h = r7;
0x000028f8 add r3, pc | r3 = 0x5364;
0x000028fa str r3, [sp] | *(sp) = r3;
0x000028fc movs r3, 0x80 | r3 = 0x80;
0x000028fe mov r1, r3 | r1 = r3;
0x00002900 blx 0xe2c | snprintf_chk ();
0x00002904 ldrd r0, r1, [r5, 0xc] | __asm ("ldrd r0, r1, [r5, 0xc]");
0x00002908 movs r2, 0 | r2 = 0;
0x0000290a bl 0x26cc | r0 = void (*0x26cc)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4);
0x0000290e cmp r0, 0 |
| if (r0 == 0) {
0x00002910 beq 0x2868 | goto label_11;
| }
0x00002912 ldrd r0, r1, [r5, 4] | __asm ("ldrd r0, r1, [r5, 4]");
0x00002916 movs r2, 1 | r2 = 1;
0x00002918 bl 0x26cc | r0 = void (*0x26cc)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4);
0x0000291c cmp r0, 0 |
| if (r0 == 0) {
0x0000291e beq 0x2868 | goto label_11;
| }
0x00002920 ldr r0, [r5, 0x10] | r0 = *((r5 + 0x10));
0x00002922 mov r1, r8 | r1 = r8;
0x00002924 bl 0x20f8 | r0 = fcn_000020f8 (r0, r1);
0x00002928 cmp r0, 0 |
| if (r0 == 0) {
0x0000292a beq 0x2868 | goto label_11;
| }
0x0000292c ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x0000292e mov r1, r6 | r1 = r6;
0x00002930 bl 0x20f8 | r0 = fcn_000020f8 (r0, r1);
0x00002934 mov r4, r0 | r4 = r0;
0x00002936 cmp r0, 0 |
| if (r0 == 0) {
0x00002938 beq 0x2868 | goto label_11;
| }
0x0000293a mov r0, sb | r0 = sb;
0x0000293c bl 0x2180 | r0 = fcn_00002180 (r0);
0x00002940 mov r7, r0 | r7 = r0;
0x00002942 cmp r0, 0 |
| if (r0 == 0) {
0x00002944 beq 0x2868 | goto label_11;
| }
0x00002946 ldr r5, [pc, 0x124] |
0x00002948 add r5, pc | r5 = 0x53ba;
0x0000294a mov r0, r5 | r0 = r5;
0x0000294c bl 0x2180 | r0 = fcn_00002180 (r0);
0x00002950 mov r8, r0 | r8 = r0;
0x00002952 cmp r0, 0 |
| if (r0 == 0) {
0x00002954 beq 0x2a0a | goto label_36;
| }
0x00002956 mov.w r2, 0x180 | r2 = 0x180;
0x0000295a movw r1, 0x241 | r1 = 0x241;
0x0000295e mov r0, r5 | r0 = r5;
0x00002960 blx 0xcc4 | r0 = open (r0, r1, r2);
0x00002964 subs r3, r0, 0 | r3 = r0 - 0;
0x00002966 str r3, [sp, 0xc] | fd = r3;
| if (r3 < r0) {
0x00002968 blt 0x2a18 | goto label_37;
| }
0x0000296a ldr r3, [pc, 0x104] |
0x0000296c add r3, pc | r3 = 0x53e2;
0x0000296e ldr.w sb, [r3, 8] | sb = *(0x53ea);
0x00002972 cmp.w sb, 0 |
| if (sb == 0) {
0x00002976 beq 0x2a06 | goto label_38;
| }
| label_13:
0x00002978 add.w fp, sb, 9 |
0x0000297c mov sl, r7 | sl = r7;
0x0000297e mov r0, fp | r0 = fp;
0x00002980 blx 0xd00 | strlen (r0);
0x00002984 ldrb.w r3, [sb, 8] | r3 = *((sb + 8));
0x00002988 mov r6, r0 | r6 = r0;
| if (r3 != 0) {
0x0000298a cbnz r3, 0x29b2 | goto label_39;
| }
0x0000298c ldr.w r2, [sb, 4] | r2 = *((sb + 4));
0x00002990 cmp r2, 0 |
0x00002992 ite eq |
| if (r2 != 0) {
0x00002994 moveq sl, r7 | sl = r7;
| }
| if (r2 == 0) {
0x00002996 movne sl, r8 | sl = r8;
| }
0x00002998 b 0x29b2 |
| while (r0 != 0) {
0x0000299a mov r2, r6 | r2 = r6;
0x0000299c mov r1, fp | r1 = fp;
0x0000299e mov r0, sl | r0 = sl;
0x000029a0 blx 0xdfc | r0 = strncmp (r0, r1, r2);
| if (r0 == 0) {
0x000029a4 cbnz r0, 0x29ae |
0x000029a6 ldrb.w r2, [sl, r6] | r2 = *((sl + r6));
0x000029aa cmp r2, 0x3a |
| if (r2 == 0x3a) {
0x000029ac beq 0x29e8 | goto label_40;
| }
| }
0x000029ae add.w sl, r5, 1 | sl += var_1h;
| label_39:
0x000029b2 movs r1, 0xa | r1 = 0xa;
0x000029b4 mov r0, sl | r0 = sl;
0x000029b6 blx 0xd0c | r0 = strchr (r0, r1);
0x000029ba mov r5, r0 | r5 = r0;
0x000029bc cmp r0, 0 |
0x000029be bne 0x299a |
| }
0x000029c0 ldr r1, [pc, 0xb0] |
0x000029c2 mov r2, fp | r2 = fp;
0x000029c4 movs r0, 3 | r0 = 3;
0x000029c6 add r1, pc | r1 = 0x543e;
0x000029c8 bl 0x2a88 | fcn_00002a88 (r0);
| label_15:
0x000029cc ldr r0, [sp, 0xc] | r0 = fd;
0x000029ce movs r4, 0 | r4 = 0;
| label_14:
0x000029d0 blx 0xe14 | close (r0);
0x000029d4 mov r0, r8 | r0 = r8;
0x000029d6 blx 0xbd4 | free (r0);
0x000029da mov r0, r7 | r0 = r7;
0x000029dc blx 0xbd4 | free (r0);
0x000029e0 b 0x286a | goto label_12;
| label_35:
0x000029e2 movs r3, 1 | r3 = 1;
0x000029e4 strb r3, [r5] | *(r5) = r3;
0x000029e6 b 0x286a | goto label_12;
| label_40:
0x000029e8 sub.w r5, r5, sl | r5 -= sl;
0x000029ec ldr r0, [sp, 0xc] | r0 = fd;
0x000029ee adds r5, 1 | r5++;
0x000029f0 mov r1, sl | r1 = sl;
0x000029f2 mov r2, r5 | r2 = r5;
0x000029f4 blx 0xd60 | r0 = write (r0, r1, r2);
0x000029f8 cmp r5, r0 |
| if (r5 != r0) {
0x000029fa bne 0x2a26 | goto label_41;
| }
0x000029fc ldr.w sb, [sb] | sb = *(sb);
0x00002a00 cmp.w sb, 0 |
| if (sb != 0) {
0x00002a04 bne 0x2978 | goto label_13;
| }
| label_38:
0x00002a06 ldr r0, [sp, 0xc] | r0 = fd;
0x00002a08 b 0x29d0 | goto label_14;
| label_36:
0x00002a0a mov r0, r7 | r0 = r7;
0x00002a0c mov r4, r8 | r4 = r8;
0x00002a0e blx 0xbd4 | free (r0);
0x00002a12 b 0x286a | goto label_12;
| label_34:
0x00002a14 blx 0xc10 | stack_chk_fail ();
| label_37:
0x00002a18 ldr r1, [pc, 0x5c] |
0x00002a1a mov r2, r5 | r2 = r5;
0x00002a1c movs r0, 2 | r0 = 2;
0x00002a1e add r1, pc | r1 = 0x549a;
0x00002a20 bl 0x2a88 | fcn_00002a88 (r0);
0x00002a24 b 0x29cc | goto label_15;
| label_41:
0x00002a26 cmp r0, 0 |
| if (r0 >= 0) {
0x00002a28 blt 0x2a36 |
0x00002a2a ldr r1, [pc, 0x50] |
0x00002a2c movs r0, 2 | r0 = 2;
0x00002a2e add r1, pc | r1 = 0x54b0;
0x00002a30 bl 0x2a88 | fcn_00002a88 (r0);
0x00002a34 b 0x29cc | goto label_15;
| }
0x00002a36 ldr r2, [pc, 0x48] |
0x00002a38 movs r0, 2 | r0 = 2;
0x00002a3a ldr r1, [pc, 0x48] |
0x00002a3c add r2, pc | r2 = 0x54c2;
0x00002a3e add r1, pc | r1 = 0x54c8;
0x00002a40 bl 0x2a88 | fcn_00002a88 (r0);
0x00002a44 b 0x29cc | goto label_15;
| }
[*] Function strcpy used 4 times conf-migrate