[*] Binary protection state of libupnp.so.17.1.8
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function printf tear down of libupnp.so.17.1.8
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0xc540 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0000c540 () | void fcn_0000c540 (int16_t arg_24h, int16_t arg_28h, int16_t arg_2ch, int16_t arg_30h, int16_t arg_38h, int16_t arg_54h, int16_t arg_58h, int16_t arg_d4h, int16_t arg_154h, int16_t arg_280h, int16_t arg_c44h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0000c540 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x0000c544 mov r7, r2 | r7 = r2;
0x0000c546 subw sp, sp, 0xc4c | __asm ("subw sp, sp, aav.0x000000ff");
0x0000c54a ldr r2, [pc, 0x330] |
0x0000c54c mov fp, r1 |
0x0000c54e str r3, [sp, 0x24] | *(arg_24h) = r3;
0x0000c550 ldr r3, [pc, 0x32c] | r3 = *(0xc880);
0x0000c552 add r2, pc | r2 = 0x18dd4;
0x0000c554 str r0, [sp, 0x20] | var_20h = r0;
0x0000c556 ldr r6, [pc, 0x32c] |
0x0000c558 ldr r3, [r2, r3] |
0x0000c55a add r6, pc | r6 = 0x18de4;
0x0000c55c ldr r3, [r3] | r3 = *(0x18dd4);
0x0000c55e str.w r3, [sp, 0xc44] | __asm ("str.w r3, [arg_c44h]");
0x0000c562 mov.w r3, 0 | r3 = 0;
0x0000c566 add r3, sp, 0x28 | r3 += arg_28h;
0x0000c568 str r3, [sp, 0x14] | var_14h = r3;
0x0000c56a movs r3, 0 | r3 = 0;
0x0000c56c ldr r2, [sp, 0x14] | r2 = var_14h;
0x0000c56e str r3, [r2] | *(r2) = r3;
0x0000c570 ldr r3, [pc, 0x314] | r3 = *(0xc888);
0x0000c572 ldr r1, [r6, r3] | r1 = *(0x18de4);
0x0000c574 ldrb r3, [r1] | r3 = *(r1);
0x0000c576 cbnz r3, 0xc59a |
| while (r0 != 0) {
0x0000c578 add.w r8, sp, 0x38 | r8 += arg_38h;
0x0000c57c movs r2, 0x1c | r2 = 0x1c;
0x0000c57e movs r1, 0 | r1 = 0;
0x0000c580 mov r0, r8 | r0 = r8;
0x0000c582 blx 0x9144 | fcn_00009144 ();
0x0000c586 mov r0, r7 | r0 = r7;
0x0000c588 bl 0xd314 | r0 = fcn_0000d314 (r0);
0x0000c58c mov r3, r0 | r3 = r0;
0x0000c58e str r0, [sp, 0x1c] | var_1ch = r0;
0x0000c590 adds r3, 1 | r3++;
| if (r3 != 1) {
0x0000c592 bne 0xc5a8 | goto label_4;
| }
| label_0:
0x0000c594 mvn r0, 0x64 | r0 = ~0x64;
0x0000c598 b 0xc71c | goto label_1;
0x0000c59a add r2, sp, 0x2c | r2 += arg_2ch;
0x0000c59c movs r0, 2 | r0 = 2;
0x0000c59e blx 0x89ec | r0 = pthread_self ();
0x0000c5a2 cmp r0, 0 |
0x0000c5a4 bne 0xc578 |
| }
0x0000c5a6 b 0xc594 | goto label_0;
| label_4:
0x0000c5a8 cmp.w fp, 0x50 |
0x0000c5ac add r4, sp, 0x154 | r4 += arg_154h;
0x0000c5ae it ge |
| if (fp < 0x50) {
0x0000c5b0 movge fp, 0x50 |
| }
0x0000c5b4 mov.w r2, 0x12c | r2 = 0x12c;
0x0000c5b8 cmp.w fp, 2 |
0x0000c5bc mov.w r1, 0 | r1 = 0;
0x0000c5c0 mov r0, r4 | r0 = r4;
0x0000c5c2 it lt |
| if (fp >= 2) {
0x0000c5c4 movlt fp, 2 |
| }
0x0000c5c8 blx 0x9144 | fcn_00009144 ();
0x0000c5cc ldr r1, [pc, 0x2bc] |
0x0000c5ce add r5, sp, 0x280 | r5 += arg_280h;
0x0000c5d0 mov r0, r5 | r0 = r5;
0x0000c5d2 add r1, pc | r1 = 0x18e62;
0x0000c5d4 blx 0x8d68 | fcn_00008d68 ();
0x0000c5d8 movw r3, 0x76c | r3 = 0x76c;
0x0000c5dc movs r2, 1 | r2 = 1;
0x0000c5de str r3, [sp, 8] | var_8h = r3;
0x0000c5e0 mov r0, r4 | r0 = r4;
0x0000c5e2 ldr r3, [pc, 0x2ac] |
0x0000c5e4 add r3, pc | r3 = 0x18e7a;
0x0000c5e6 str r3, [sp, 4] | var_4h = r3;
0x0000c5e8 ldr r3, [pc, 0x2a8] |
0x0000c5ea add r3, pc | r3 = 0x18e82;
0x0000c5ec str r3, [sp] | *(sp) = r3;
0x0000c5ee mov.w r3, 0x12c | r3 = 0x12c;
0x0000c5f2 mov r1, r3 | r1 = r3;
0x0000c5f4 blx 0x96fc | fcn_000096fc ();
0x0000c5f8 mov r0, r5 | r0 = r5;
0x0000c5fa blx 0x8f9c | r0 = fcn_00008f9c ();
0x0000c5fe mov sb, r0 | sb = r0;
0x0000c600 mov r0, r4 | r0 = r4;
0x0000c602 blx 0x8f9c | fcn_00008f9c ();
0x0000c606 add r0, sb | r0 += sb;
0x0000c608 movw sb, 0x9c3 | sb = 0x9c3;
0x0000c60c cmp r0, sb |
| if (r0 > sb) {
0x0000c60e bhi.w 0xc718 | goto label_5;
| }
0x0000c612 movw r2, 0x9c4 | r2 = 0x9c4;
0x0000c616 mov r1, r4 | r1 = r4;
0x0000c618 mov r0, r5 | r0 = r5;
0x0000c61a blx 0x90c4 | strerror_r ();
0x0000c61e mov r0, r5 | r0 = r5;
0x0000c620 blx 0x8f9c | fcn_00008f9c ();
0x0000c624 adds r0, 0x16 | r0 += 0x16;
0x0000c626 cmp r0, sb |
| if (r0 > sb) {
0x0000c628 bhi 0xc718 | goto label_5;
| }
0x0000c62a ldr r1, [pc, 0x26c] |
0x0000c62c movw r2, 0x9c4 | r2 = 0x9c4;
0x0000c630 mov r0, r5 | r0 = r5;
0x0000c632 add r1, pc | r1 = 0x18ed0;
0x0000c634 blx 0x90c4 | strerror_r ();
0x0000c638 ldr r3, [pc, 0x260] |
0x0000c63a movs r2, 1 | r2 = 1;
0x0000c63c mov r0, r4 | r0 = r4;
0x0000c63e str.w fp, [sp, 4] | __asm ("str.w fp, [var_4h]");
0x0000c642 add r3, pc | r3 = 0x18ee2;
0x0000c644 str r3, [sp] | *(sp) = r3;
0x0000c646 mov.w r3, 0x12c | r3 = 0x12c;
0x0000c64a mov r1, r3 | r1 = r3;
0x0000c64c blx 0x96fc | fcn_000096fc ();
0x0000c650 mov r0, r5 | r0 = r5;
0x0000c652 blx 0x8f9c | r0 = fcn_00008f9c ();
0x0000c656 mov sl, r0 | sl = r0;
0x0000c658 mov r0, r4 | r0 = r4;
0x0000c65a blx 0x8f9c | r0 = fcn_00008f9c ();
0x0000c65e add sl, r0 | sl += r0;
0x0000c660 cmp sl, sb |
| if (sl > sb) {
0x0000c662 bhi 0xc718 | goto label_5;
| }
0x0000c664 movw r2, 0x9c4 | r2 = 0x9c4;
0x0000c668 mov r1, r4 | r1 = r4;
0x0000c66a mov r0, r5 | r0 = r5;
0x0000c66c blx 0x90c4 | strerror_r ();
| if (r7 != 0) {
0x0000c670 cbz r7, 0xc6ae |
0x0000c672 ldr r3, [pc, 0x22c] |
0x0000c674 movs r2, 1 | r2 = 1;
0x0000c676 mov r0, r4 | r0 = r4;
0x0000c678 str r7, [sp, 4] | var_4h = r7;
0x0000c67a add r3, pc | r3 = 0x18f20;
0x0000c67c str r3, [sp] | *(sp) = r3;
0x0000c67e mov.w r3, 0x12c | r3 = 0x12c;
0x0000c682 mov r1, r3 | r1 = r3;
0x0000c684 blx 0x96fc | r0 = fcn_000096fc ();
0x0000c688 cmp.w r0, 0x12c |
| if (r0 >= 0x12c) {
0x0000c68c bhs 0xc714 | goto label_6;
| }
0x0000c68e mov r0, r5 | r0 = r5;
0x0000c690 blx 0x8f9c | r0 = fcn_00008f9c ();
0x0000c694 mov sl, r0 | sl = r0;
0x0000c696 mov r0, r4 | r0 = r4;
0x0000c698 blx 0x8f9c | r0 = fcn_00008f9c ();
0x0000c69c add sl, r0 | sl += r0;
0x0000c69e cmp sl, sb |
| if (sl > sb) {
0x0000c6a0 bhi 0xc718 | goto label_5;
| }
0x0000c6a2 movw r2, 0x9c4 | r2 = 0x9c4;
0x0000c6a6 mov r1, r4 | r1 = r4;
0x0000c6a8 mov r0, r5 | r0 = r5;
0x0000c6aa blx 0x90c4 | strerror_r ();
| }
0x0000c6ae add.w sb, sp, 0x280 | sb += arg_280h;
0x0000c6b2 mov r0, sb | r0 = sb;
0x0000c6b4 blx 0x8f9c | fcn_00008f9c ();
0x0000c6b8 movw r3, 0x9c3 | r3 = 0x9c3;
0x0000c6bc adds r0, 2 | r0 += 2;
0x0000c6be cmp r0, r3 |
| if (r0 > r3) {
0x0000c6c0 bhi 0xc718 | goto label_5;
| }
0x0000c6c2 ldr r1, [pc, 0x1e0] |
0x0000c6c4 add.w sl, sp, 0x54 | sl += arg_54h;
0x0000c6c8 movw r2, 0x9c4 | r2 = 0x9c4;
0x0000c6cc mov r0, sb | r0 = sb;
0x0000c6ce add r1, pc | r1 = 0x18f78;
0x0000c6d0 blx 0x90c4 | strerror_r ();
0x0000c6d4 movs r2, 0x80 | r2 = 0x80;
0x0000c6d6 movs r1, 0 | r1 = 0;
0x0000c6d8 mov r0, sl | r0 = sl;
0x0000c6da blx 0x9144 | fcn_00009144 ();
0x0000c6de ldr r1, [pc, 0x1c8] |
0x0000c6e0 movs r0, 2 | r0 = 2;
0x0000c6e2 add r2, sp, 0x58 | r2 += arg_58h;
0x0000c6e4 strh.w r0, [sl] | *(sl) = r0;
0x0000c6e8 add r1, pc | r1 = 0x18f96;
0x0000c6ea blx 0x89ec | pthread_self ();
0x0000c6ee movw r3, 0x6c07 | r3 = 0x6c07;
0x0000c6f2 strh.w r3, [sl, 2] | *((sl + 2)) = r3;
0x0000c6f6 ldr r3, [pc, 0x1b4] | r3 = *(0xc8ae);
0x0000c6f8 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x0000c6fa mov r0, r3 | r0 = r3;
0x0000c6fc str r3, [sp, 0x18] | var_18h = r3;
0x0000c6fe blx 0x8930 | fcn_00008930 ();
0x0000c702 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0000c704 ldr r0, [sp, 0x20] | r0 = var_20h;
0x0000c706 bl 0x19470 | r0 = fcn_00019470 (r0, r1);
0x0000c70a mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0000c70c cbz r0, 0xc738 | goto label_7;
| }
0x0000c70e ldr r0, [sp, 0x18] | r0 = var_18h;
0x0000c710 blx 0x920c | fcn_0000920c ();
| do {
| label_6:
0x0000c714 ldr r0, [pc, 0x15c] | r0 = *(0xc874);
0x0000c716 b 0xc71c | goto label_1;
| label_5:
0x0000c718 mvn r0, 0x69 | r0 = ~0x69;
| label_1:
0x0000c71c ldr r2, [pc, 0x190] |
0x0000c71e ldr r3, [pc, 0x160] | r3 = *(0xc882);
0x0000c720 add r2, pc | r2 = 0x18fd4;
0x0000c722 ldr r3, [r2, r3] | r3 = *(0x18fd4);
0x0000c724 ldr r2, [r3] | r2 = *(0x18fd4);
0x0000c726 ldr.w r3, [sp, 0xc44] | r3 = *(arg_c44h);
0x0000c72a eors r2, r3 | r2 ^= r3;
0x0000c72c mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000c730 beq.w 0xc86a | goto label_8;
| }
0x0000c734 blx 0x8b7c | fcn_00008b7c ();
| label_7:
0x0000c738 movs r0, 0x10 | r0 = 0x10;
0x0000c73a blx 0x8e30 | r0 = vfprintf_chk ()
0x0000c73e mov r5, r0 | r5 = r0;
0x0000c740 mov r0, r7 | r0 = r7;
0x0000c742 blx 0x8b40 | fcn_00008b40 ();
0x0000c744 ldrd sb, fp, [lr, 0x24]! | __asm ("ldrd sb, fp, [lr, 0x24]!");
0x0000c748 str r0, [r5, 4] | *((r5 + 4)) = r0;
0x0000c74a movs r0, 8 | r0 = 8;
0x0000c74c str r3, [r5, 8] | *((r5 + 8)) = r3;
0x0000c74e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0000c750 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x0000c752 blx 0x8e30 | vfprintf_chk ()
0x0000c756 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0000c758 mov r2, r0 | r2 = r0;
0x0000c75a ldr r1, [pc, 0x158] |
0x0000c75c mov r7, r0 | r7 = r0;
0x0000c75e str r3, [r0] | *(r0) = r3;
0x0000c760 mov r0, r8 | r0 = r8;
0x0000c762 add r1, pc | r1 = 0x1901c;
0x0000c764 bl 0xa7d4 | fcn_0000a7d4 (r0, r1, r2);
0x0000c768 movs r1, 1 | r1 = 1;
0x0000c76a mov r0, r8 | r0 = r8;
0x0000c76c bl 0xa7ec | fcn_0000a7ec (r0, r1);
0x0000c770 ldr r3, [pc, 0x144] | r3 = *(0xc8b8);
0x0000c772 mov r0, r8 | r0 = r8;
0x0000c774 ldr r1, [r6, r3] | r1 = *((r6 + r3));
0x0000c776 bl 0xa7fc | fcn_0000a7fc (r0, r1);
0x0000c77a ldr r3, [pc, 0x140] | r3 = *(0xc8be);
0x0000c77c movs r2, 1 | r2 = 1;
0x0000c77e mov r1, fp | r1 = fp;
0x0000c780 ldr r0, [r6, r3] | r0 = *((r6 + r3));
0x0000c782 adds r3, r7, 4 | r3 = r7 + 4;
0x0000c784 strd r4, r3, [sp] | __asm ("strd r4, r3, [sp]");
0x0000c788 mov r3, r8 | r3 = r8;
0x0000c78a bl 0xac38 | fcn_0000ac38 (r0, r1, r2, r3, r4);
0x0000c78e ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x0000c790 mov r1, r5 | r1 = r5;
0x0000c792 add r7, sp, 0xd4 | r7 += arg_d4h;
0x0000c794 str r3, [r5] | *(r5) = r3;
0x0000c796 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000c798 ldr r0, [r3] | r0 = *(r3);
0x0000c79a add.w r0, r0, 0x264 | r0 += 0x264;
0x0000c79e bl 0x992e | fcn_0000992e (r0, r1);
0x0000c7a2 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0000c7a4 blx 0x920c | fcn_0000920c ();
0x0000c7a8 movs r2, 0x80 | r2 = 0x80;
0x0000c7aa mov r1, r4 | r1 = r4;
0x0000c7ac mov r0, r7 | r0 = r7;
0x0000c7ae blx 0x9144 | fcn_00009144 ();
0x0000c7b2 ldr r3, [pc, 0x10c] | r3 = *(0xc8c2);
0x0000c7b4 ldr r5, [r6, r3] | r5 = *((r6 + r3));
0x0000c7b6 ldr r0, [r5] | r0 = *(r5);
0x0000c7b8 adds r2, r0, 1 | r2 = r0 + 1;
| if (r2 != r0) {
0x0000c7ba beq 0xc7e8 |
0x0000c7bc movs r3, 4 | r3 = 4;
0x0000c7be movs r2, 0x20 | r2 = 0x20;
0x0000c7c0 mov r1, r4 | r1 = r4;
0x0000c7c2 str r3, [sp] | *(sp) = r3;
0x0000c7c4 add r3, sp, 0x2c | r3 += arg_2ch;
0x0000c7c6 blx 0x8814 | fcn_00008814 ();
0x0000c7ca ldr r0, [r5] | r0 = *(r5);
0x0000c7cc blx 0x8bb8 | fcn_00008bb8 ();
0x0000c7d0 ldr r4, [r5] | r4 = *(r5);
0x0000c7d2 movs r3, 1 | r3 = 1;
0x0000c7d4 and r2, r4, 0x1f | r2 = r4 & 0x1f;
0x0000c7d8 lsls r3, r2 | r3 <<= r2;
0x0000c7da ldr.w r2, [r7, r0, lsl 2] | offset_0 = r0 << 2;
| r2 = *((r7 + offset_0));
0x0000c7de bic.w r4, r4, r4, asr 31 | r4 = BIT_MASK (r4, r4);
0x0000c7e2 orrs r3, r2 | r3 |= r2;
0x0000c7e4 str.w r3, [r7, r0, lsl 2] | __asm ("str.w r3, [r7, r0, lsl 2]");
| }
0x0000c7e8 movs r6, 0 | r6 = 0;
0x0000c7ea mov r2, r7 | r2 = r7;
0x0000c7ec mov r3, r6 | r3 = r6;
0x0000c7ee mov r1, r6 | r1 = r6;
0x0000c7f0 adds r0, r4, 1 | r0 = r4 + 1;
0x0000c7f2 str r6, [sp] | *(sp) = r6;
0x0000c7f4 blx 0x8aac | freeifaddrs ();
0x0000c7f8 adds r0, 1 | r0++;
| if (r0 != 1) {
0x0000c7fa bne 0xc814 | goto label_9;
| }
0x0000c7fc blx 0x9094 | strncasecmp (r0, r1, r2);
0x0000c800 mov.w r2, 0x100 | r2 = 0x100;
0x0000c804 add r1, sp, 0x154 | r1 += arg_154h;
0x0000c806 ldr r0, [r0] | r0 = *(r0);
0x0000c808 blx 0x9110 | fcn_00009110 ();
0x0000c80c ldr r0, [r5] | r0 = *(r5);
0x0000c80e blx 0x966c | fcn_0000966c ();
0x0000c812 b 0xc714 |
| } while (1);
| label_9:
0x0000c814 ldr r0, [r5] | r0 = *(r5);
0x0000c816 adds r3, r0, 1 | r3 = r0 + 1;
0x0000c818 bne 0xc81e |
| while ((r3 & r2) == 0) {
| label_2:
0x0000c81a movs r0, 1 | r0 = 1;
0x0000c81c b 0xc71c | goto label_1;
0x0000c81e blx 0x8bb8 | fcn_00008bb8 ();
0x0000c822 ldr r3, [r5] | r3 = *(r5);
0x0000c824 and r2, r3, 0x1f | r2 = r3 & 0x1f;
0x0000c828 movs r3, 1 | r3 = 1;
0x0000c82a lsls r3, r2 | r3 <<= r2;
0x0000c82c ldr.w r2, [r7, r0, lsl 2] | offset_1 = r0 << 2;
| r2 = *((r7 + offset_1));
0x0000c830 tst r3, r2 |
0x0000c832 beq 0xc81a |
| }
0x0000c834 ldr r7, [pc, 0x40] | r7 = *(0xc878);
0x0000c836 movs r4, 2 | r4 = 2;
0x0000c838 mov.w r8, 0x10 | r8 = 0x10;
| label_3:
0x0000c83c ldr.w fp, [r5] | fp = *(r5);
0x0000c840 mov r0, sb | r0 = sb;
0x0000c842 blx 0x8f9c | fcn_00008f9c ();
0x0000c846 movs r3, 0 | r3 = 0;
0x0000c848 mov r2, r0 | r2 = r0;
0x0000c84a mov r1, sb | r1 = sb;
0x0000c84c mov r0, fp | r0 = fp;
0x0000c84e strd sl, r8, [sp] | __asm ("strd sl, r8, [sp]");
0x0000c852 blx 0x92cc | fcn_000092cc ();
0x0000c856 add r0, sp, 0x30 | r0 += arg_30h;
0x0000c858 movs r1, 0 | r1 = 0;
0x0000c85a strd r6, r7, [r0] | __asm ("strd r6, r7, [r0]");
0x0000c85e blx 0x89bc | ixmlNode_getNodeType ();
0x0000c862 cmp r4, 1 |
| if (r4 == 1) {
0x0000c864 beq 0xc81a | goto label_2;
| }
0x0000c866 movs r4, 1 | r4 = 1;
0x0000c868 b 0xc83c | goto label_3;
| label_8:
0x0000c86a addw sp, sp, 0xc4c | __asm ("addw sp, var_0h");
0x0000c86e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0xe806 */
| #include <stdint.h>
|
; (fcn) fcn.0000e806 () | void fcn_0000e806 (int16_t arg1, int16_t arg2) {
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_a8h;
| int16_t var_d8h;
| int16_t var_a9ch;
| r0 = arg1;
| r1 = arg2;
| label_2:
0x0000d3cc ldr r2, [pc, 0x134] |
0x0000d3ce movs r1, 0 | r1 = 0;
0x0000d3d0 ldr r3, [pc, 0x134] | r3 = *(0xd508);
0x0000d3d2 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0000d3d6 sub.w sp, sp, 0xaa0 |
0x0000d3da add r2, pc | r2 = 0x1a8e2;
0x0000d3dc ldr.w r8, [pc, 0x12c] | r8 = *(0x0000d50c);
0x0000d3e0 add r6, sp, 0xc | r6 += var_ch;
0x0000d3e2 mov r5, r0 | r5 = r0;
0x0000d3e4 ldr r3, [r2, r3] |
0x0000d3e6 add.w sl, sp, 8 | sl += var_8h;
0x0000d3ea mov r0, r6 | r0 = r6;
0x0000d3ec movs r2, 0x1c | r2 = 0x1c;
0x0000d3ee add r8, pc | r8 += pc;
0x0000d3f0 ldr r3, [r3] | r3 = *(0x1a8e2);
0x0000d3f2 str.w r3, [sp, 0xa9c] | __asm ("str.w r3, [var_a9ch]");
0x0000d3f6 mov.w r3, 0 | r3 = 0;
0x0000d3fa movs r3, 0x80 | r3 = 0x80;
0x0000d3fc str.w r3, [sl] | __asm ("str.w r3, [sl]");
0x0000d400 blx 0x9144 | fcn_00009144 ();
0x0000d404 mov.w r0, 0x1d0 | r0 = 0x1d0;
0x0000d408 blx 0x8e30 | r0 = vfprintf_chk ()
0x0000d40c mov r4, r0 | r4 = r0;
0x0000d40e cmp r0, 0 |
| if (r0 == 0) {
0x0000d410 beq 0xd4e8 | goto label_3;
| }
0x0000d412 ldr r3, [pc, 0xfc] |
0x0000d414 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x0000d418 ldr r3, [r3] | r3 = *(0xd512);
0x0000d41a cmp r3, r5 |
| if (r3 != r5) {
0x0000d41c bne 0xd4da | goto label_4;
| }
0x0000d41e movs r1, 9 | r1 = 9;
0x0000d420 bl 0x11342 | fcn_00011342 (r0, r1);
| do {
0x0000d424 movw r1, 0x9c4 | r1 = 0x9c4;
0x0000d428 add.w r0, r4, 0x114 | r0 = r4 + 0x114;
0x0000d42c bl 0x102ec | r0 = fcn_000102ec (r0, r1);
0x0000d430 cmp r0, 0 |
| if (r0 != 0) {
0x0000d432 bne 0xd4e0 | goto label_5;
| }
0x0000d434 ldr.w r7, [r4, 0x114] | r7 = *((r4 + 0x114));
| label_0:
0x0000d438 add.w sb, sp, 0x28 | sb += var_28h;
0x0000d43c mov r0, r5 | r0 = r5;
0x0000d43e movs r3, 0 | r3 = 0;
0x0000d440 movw r2, 0x9c3 | r2 = 0x9c3;
0x0000d444 mov r1, r7 | r1 = r7;
0x0000d446 strd sb, sl, [sp] | __asm ("strd sb, sl, [sp]");
0x0000d44a blx 0x8b18 | r0 = strdup (r0);
0x0000d44e subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 > r0) {
0x0000d450 ble 0xd4ba |
0x0000d452 movs r3, 0 | r3 = 0;
0x0000d454 add r0, sp, 0xa8 | r0 += var_a8h;
0x0000d456 strb r3, [r7, r5] | *((r7 + r5)) = r3;
0x0000d458 ldrh.w r7, [sb] | r7 = *(sb);
0x0000d45c cmp r7, 2 |
| if (r7 != 2) {
0x0000d45e bne 0xd4ec | goto label_6;
| }
0x0000d460 mov r2, r0 | r2 = r0;
0x0000d462 movs r3, 0x2e | r3 = 0x2e;
0x0000d464 add r1, sp, 0x2c | r1 += var_2ch;
0x0000d466 mov r0, r7 | r0 = r7;
0x0000d468 blx 0x9504 | fcn_00009504 ();
| if (r4 == 0) {
| label_1:
0x0000d46c cbz r4, 0xd4c0 | goto label_7;
| }
0x0000d46e ldr.w r3, [r4, 0x118] | r3 = *((r4 + 0x118));
0x0000d472 movs r7, 0 | r7 = 0;
0x0000d474 movs r2, 0x80 | r2 = 0x80;
0x0000d476 mov r1, sb | r1 = sb;
0x0000d478 add.w r0, r4, 0x150 | r0 = r4 + 0x150;
0x0000d47c add r3, r5 | r3 += r5;
0x0000d47e str.w r3, [r4, 0x118] | __asm ("str.w r3, aav.0x000000ff");
0x0000d482 ldr.w r3, [r4, 0x114] | r3 = *((r4 + 0x114));
0x0000d486 strb r7, [r3, r5] | *((r3 + r5)) = r7;
0x0000d488 blx 0x8a14 | fcn_00008a14 ();
0x0000d48c ldr r1, [pc, 0x84] |
0x0000d48e mov r2, r4 | r2 = r4;
0x0000d490 mov r0, r6 | r0 = r6;
0x0000d492 add r1, pc | r1 = 0x1a9aa;
0x0000d494 bl 0xa7d4 | fcn_0000a7d4 (r0, r1, r2);
0x0000d498 ldr r1, [pc, 0x7c] |
0x0000d49a mov r0, r6 | r0 = r6;
0x0000d49c add r1, pc | r1 = 0x1a9b8;
0x0000d49e bl 0xa7fc | fcn_0000a7fc (r0, r1);
0x0000d4a2 movs r1, 1 | r1 = 1;
0x0000d4a4 mov r0, r6 | r0 = r6;
0x0000d4a6 bl 0xa7ec | fcn_0000a7ec (r0, r1);
0x0000d4aa ldr r3, [pc, 0x70] | r3 = *(0xd51e);
0x0000d4ac mov r2, r7 | r2 = r7;
0x0000d4ae mov r1, r6 | r1 = r6;
0x0000d4b0 ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x0000d4b4 bl 0xa174 | r0 = fcn_0000a174 (r0, r1, r2);
| if (r0 == 0) {
0x0000d4b8 cbz r0, 0xd4c0 | goto label_7;
| }
| }
0x0000d4ba mov r0, r4 | r0 = r4;
0x0000d4bc bl 0xc948 | fcn_0000c948 (r0, r1);
| label_7:
0x0000d4c0 ldr r2, [pc, 0x5c] |
0x0000d4c2 ldr r3, [pc, 0x44] | r3 = *(0xd50a);
0x0000d4c4 add r2, pc | r2 = 0x1a9e8;
0x0000d4c6 ldr r3, [r2, r3] | r3 = *(0x1a9e8);
0x0000d4c8 ldr r2, [r3] | r2 = *(0x1a9e8);
0x0000d4ca ldr.w r3, [sp, 0xa9c] | r3 = var_a9ch;
0x0000d4ce eors r2, r3 | r2 ^= r3;
0x0000d4d0 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000d4d4 beq 0xd4fc | goto label_8;
| }
0x0000d4d6 blx 0x8b7c | fcn_00008b7c ();
| label_4:
0x0000d4da bl 0x1132c | fcn_0001132c (r0);
0x0000d4de b 0xd424 |
| } while (1);
| label_5:
0x0000d4e0 mov r0, r4 | r0 = r4;
0x0000d4e2 movs r4, 0 | r4 = 0;
0x0000d4e4 blx 0x894c | fcn_0000894c ();
0x0000d4e6 invalid |
| label_3:
0x0000d4e8 add r7, sp, 0xd8 | r7 += var_d8h;
0x0000d4ea b 0xd438 | goto label_0;
| label_6:
0x0000d4ec ldr r1, [pc, 0x34] |
0x0000d4ee movs r2, 0x2d | r2 = 0x2d;
0x0000d4f0 strb.w r3, [r0, 0x2d] | *((r0 + 0x2d)) = r3;
0x0000d4f4 add r1, pc | r1 = 0x1aa1c;
0x0000d4f6 blx 0x9174 | fcn_00009174 ();
0x0000d4fa b 0xd46c | goto label_1;
| label_8:
0x0000d4fc add.w sp, sp, 0xaa0 |
0x0000d500 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
0x0000e806 push {r3, r4, r5, lr} |
0x0000e808 adds r3, r0, 1 | r3 = r0 + 1;
0x0000e80a mov r4, r0 | r4 = r0;
0x0000e80c mov r5, r1 | r5 = r1;
| if (r3 != r0) {
0x0000e80e beq 0xe82e |
0x0000e810 blx 0x8bb8 | fcn_00008bb8 ();
0x0000e814 and r2, r4, 0x1f | r2 = r4 & 0x1f;
0x0000e816 lsls r7, r3, 8 | r7 = r3 << 8;
0x0000e818 movs r3, 1 | r3 = 1;
0x0000e81a lsls r3, r2 | r3 <<= r2;
0x0000e81c ldr.w r2, [r5, r0, lsl 2] | offset_0 = r0 << 2;
| r2 = *((r5 + offset_0));
0x0000e820 tst r3, r2 |
| if ((r3 & r2) == 0) {
0x0000e822 beq 0xe82e | goto label_9;
| }
0x0000e824 mov r0, r4 | r0 = r4;
0x0000e826 pop.w {r3, r4, r5, lr} |
0x0000e82a b.w 0xd3cc | goto label_2;
| }
| label_9:
0x0000e82e pop {r3, r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0xef54 */
| #include <stdint.h>
|
; (fcn) fcn.0000ef54 () | void fcn_0000ef54 (int16_t arg1, int16_t arg2) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_24h;
| int16_t var_a4h;
| int16_t var_1a4h;
| r0 = arg1;
| r1 = arg2;
| label_2:
0x0000ee74 ldr r2, [pc, 0xc0] |
0x0000ee76 ldr r3, [pc, 0xc4] | r3 = *(0xef3e);
0x0000ee78 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x0000ee7c sub sp, 0x1ac |
0x0000ee7e add r2, pc | r2 = 0x1ddba;
0x0000ee80 add.w r8, sp, 0x24 | r8 += var_24h;
0x0000ee84 mov.w sb, 0x80 | sb = 0x80;
0x0000ee88 mov r1, r8 | r1 = r8;
0x0000ee8a ldr r3, [r2, r3] |
0x0000ee8c add r2, sp, 4 | r2 += var_4h;
0x0000ee8e ldr r7, [pc, 0xb0] |
0x0000ee90 ldr r3, [r3] | r3 = *(0x1ddba);
0x0000ee92 str r3, [sp, 0x1a4] | var_1a4h = r3;
0x0000ee94 mov.w r3, 0 | r3 = 0;
0x0000ee98 str.w sb, [r2] | __asm ("str.w sb, [r2]");
0x0000ee9c blx 0x8c58 | r0 = fcn_00008c58 ();
0x0000eea0 adds r3, r0, 1 | r3 = r0 + 1;
0x0000eea2 add r7, pc | r7 = 0x1dde8;
0x0000eea4 mov r4, r0 | r4 = r0;
| if (r3 != r0) {
0x0000eea6 bne 0xeed0 | goto label_3;
| }
0x0000eea8 blx 0x9094 | strncasecmp (r0, r1, r2);
0x0000eeac mov.w r2, 0x100 | r2 = 0x100;
0x0000eeb0 ldr r0, [r0] | r0 = *(r0);
0x0000eeb2 add r1, sp, 0xa4 | r1 += var_a4h;
0x0000eeb4 blx 0x9110 | fcn_00009110 ();
| do {
| label_0:
0x0000eeb8 ldr r2, [pc, 0x88] |
0x0000eeba ldr r3, [pc, 0x80] | r3 = *(0xef3e);
0x0000eebc add r2, pc | r2 = 0x1de04;
0x0000eebe ldr r3, [r2, r3] | r3 = *(0x1de04);
0x0000eec0 ldr r2, [r3] | r2 = *(0x1de04);
0x0000eec2 ldr r3, [sp, 0x1a4] | r3 = var_1a4h;
0x0000eec4 eors r2, r3 | r2 ^= r3;
0x0000eec6 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000eeca beq 0xef30 | goto label_4;
| }
0x0000eecc blx 0x8b7c | fcn_00008b7c ();
| label_3:
0x0000eed0 add r6, sp, 8 | r6 += var_8h;
0x0000eed2 movs r2, 0x1c | r2 = 0x1c;
0x0000eed4 movs r1, 0 | r1 = 0;
0x0000eed6 mov r0, r6 | r0 = r6;
0x0000eed8 blx 0x9144 | fcn_00009144 ();
0x0000eedc movs r0, 0x84 | r0 = 0x84;
0x0000eede blx 0x8e30 | r0 = vfprintf_chk ()
0x0000eee2 mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x0000eee4 cbnz r0, 0xeeee | goto label_5;
| }
| label_1:
0x0000eee6 mov r0, r4 | r0 = r4;
0x0000eee8 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000eeec b 0xeeb8 |
| } while (1);
| label_5:
0x0000eeee mov r2, sb | r2 = sb;
0x0000eef0 mov r1, r8 | r1 = r8;
0x0000eef2 str r4, [r0], 4 | *(r0) = r4;
| r0 += 4;
0x0000eef6 blx 0x8a14 | fcn_00008a14 ();
0x0000eefa ldr r1, [pc, 0x4c] |
0x0000eefc mov r2, r5 | r2 = r5;
0x0000eefe mov r0, r6 | r0 = r6;
0x0000ef00 add r1, pc | r1 = 0x1de4e;
0x0000ef02 bl 0xa7d4 | fcn_0000a7d4 (r0, r1, r2);
0x0000ef06 ldr r1, [pc, 0x44] |
0x0000ef08 mov r0, r6 | r0 = r6;
0x0000ef0a add r1, pc | r1 = 0x1de5c;
0x0000ef0c bl 0xa7fc | fcn_0000a7fc (r0, r1);
0x0000ef10 movs r1, 1 | r1 = 1;
0x0000ef12 mov r0, r6 | r0 = r6;
0x0000ef14 bl 0xa7ec | fcn_0000a7ec (r0, r1);
0x0000ef16 stc2l p11, c4, [sl], -0x34 | __asm ("stc2l p11, c4, [sl], -0x34");
0x0000ef1a movs r2, 0 | r2 = 0;
0x0000ef1c mov r1, r6 | r1 = r6;
0x0000ef1e ldr r0, [r7, r3] | r0 = *((r7 + r3));
0x0000ef20 bl 0xa174 | r0 = fcn_0000a174 (r0, r1, r2);
0x0000ef24 cmp r0, 0 |
| if (r0 == 0) {
0x0000ef26 beq 0xeeb8 | goto label_0;
| }
0x0000ef28 mov r0, r5 | r0 = r5;
0x0000ef2a blx 0x894c | fcn_0000894c ();
0x0000ef2e b 0xeee6 | goto label_1;
| label_4:
0x0000ef30 add sp, 0x1ac |
0x0000ef32 pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x0000ef54 push {r3, r4, r5, lr} |
0x0000ef56 adds r3, r0, 1 | r3 = r0 + 1;
0x0000ef58 mov r4, r0 | r4 = r0;
0x0000ef5a mov r5, r1 | r5 = r1;
| if (r3 != r0) {
0x0000ef5c beq 0xef7a |
0x0000ef5e blx 0x8bb8 | fcn_00008bb8 ();
0x0000ef62 and r2, r4, 0x1f | r2 = r4 & 0x1f;
0x0000ef66 movs r3, 1 | r3 = 1;
0x0000ef68 lsls r3, r2 | r3 <<= r2;
0x0000ef6a ldr.w r2, [r5, r0, lsl 2] | offset_0 = r0 << 2;
| r2 = *((r5 + offset_0));
0x0000ef6e tst r3, r2 |
| if ((r3 & r2) == 0) {
0x0000ef70 beq 0xef7a | goto label_6;
| }
0x0000ef72 mov r0, r4 | r0 = r4;
0x0000ef74 pop.w {r3, r4, r5, lr} |
0x0000ef78 b 0xee74 | goto label_2;
| }
| label_6:
0x0000ef7a pop {r3, r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0xf1f4 */
| #include <stdint.h>
|
; (fcn) fcn.0000f1f4 () | void fcn_0000f1f4 (int16_t arg_ch, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int32_t var_0h_2;
| int16_t var_10h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_3ch;
| int16_t var_13ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0000f1f4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000f1f8 sub sp, 0x144 |
0x0000f1fa strd r1, r2, [sp] | __asm ("strd r1, r2, [sp]");
0x0000f1fe add r7, sp, 0x10 | r7 += var_10h;
0x0000f200 mov sb, r0 | sb = r0;
0x0000f202 movs r1, 0 | r1 = 0;
0x0000f204 ldr r2, [pc, 0x230] |
0x0000f206 mov r0, r7 | r0 = r7;
0x0000f208 ldr r3, [pc, 0x230] | r3 = *(0xf43c);
0x0000f20a ldr.w fp, [pc, 0x234] | fp = *(0x0000f440);
0x0000f20e add r2, pc | r2 = 0x1e64a;
0x0000f210 ldr.w sl, [pc, 0x230] | sl = *(0x0000f444);
0x0000f214 ldr r3, [r2, r3] |
0x0000f216 movs r2, 0x1c | r2 = 0x1c;
0x0000f218 add fp, pc |
0x0000f21a add sl, pc | sl += pc;
0x0000f21c ldr r3, [r3] | r3 = *(0x1e64a);
0x0000f21e str r3, [sp, 0x13c] | var_13ch = r3;
0x0000f220 mov.w r3, 0 | r3 = 0;
0x0000f224 blx 0x9144 | fcn_00009144 ();
0x0000f228 ldr.w r5, [fp, 0xc] | r5 = *(arg_ch);
0x0000f22c cmp r5, 0 |
| if (r5 != 0) {
0x0000f22e bne.w 0xf404 | goto label_4;
| }
0x0000f232 movs r0, 0x2c | r0 = 0x2c;
0x0000f234 blx 0x8e30 | r0 = vfprintf_chk ()
0x0000f238 mov r4, r0 | r4 = r0;
0x0000f23a cmp r0, 0 |
| if (r0 == 0) {
0x0000f23c beq.w 0xf3ae | goto label_5;
| }
0x0000f240 mov.w r3, -1 | r3 = -1;
0x0000f244 ldr r2, [sp] | r2 = *(sp);
0x0000f246 strd r3, r5, [r0, 0x18] | __asm ("strd r3, r5, [r0, 0x18]");
0x0000f24a strd r5, r3, [r0, 0x20] | __asm ("strd r5, r3, [r0, 0x20]");
0x0000f24e strd r3, r3, [r0] | __asm ("strd r3, r3, [r0]");
0x0000f252 strd r3, r3, [r0, 8] | __asm ("strd r3, r3, [r0, 8]");
0x0000f256 strd r3, r3, [r0, 0x10] | __asm ("strd r3, r3, [r0, 0x10]");
0x0000f25a str r3, [r0, 0x28] | *((r0 + 0x28)) = r3;
0x0000f25c ldr r3, [sp, 4] | r3 = var_4h;
0x0000f25e ldrh r2, [r2] | r2 = *(r2);
0x0000f260 ldrh.w r1, [sb] | r1 = *(sb);
0x0000f264 ldrh r3, [r3] | r3 = *(r3);
0x0000f266 bl 0xecfc | r0 = fcn_0000ecfc (r0, r1, r2, r3);
0x0000f26a mov r5, r0 | r5 = r0;
0x0000f26c cbz r0, 0xf28e |
| while (1) {
0x0000f26e mov r0, r4 | r0 = r4;
0x0000f270 blx 0x894c | fcn_0000894c ();
| label_2:
0x0000f274 ldr r2, [pc, 0x1d0] |
0x0000f276 ldr r3, [pc, 0x1c4] | r3 = *(0xf43e);
0x0000f278 add r2, pc | r2 = 0x1e6c4;
0x0000f27a ldr r3, [r2, r3] | r3 = *(0x1e6c4);
0x0000f27c ldr r2, [r3] | r2 = *(0x1e6c4);
0x0000f27e ldr r3, [sp, 0x13c] | r3 = var_13ch;
0x0000f280 eors r2, r3 | r2 ^= r3;
0x0000f282 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000f286 beq.w 0xf42c | goto label_6;
| }
0x0000f28a blx 0x8b7c | fcn_00008b7c ();
0x0000f28e movs r1, 2 | r1 = 2;
0x0000f290 mov r2, r0 | r2 = r0;
0x0000f292 mov r0, r1 | r0 = r1;
0x0000f294 blx 0x9528 | r0 = fcn_00009528 ();
0x0000f298 adds r3, r0, 1 | r3 = r0 + 1;
0x0000f29a mov r6, r0 | r6 = r0;
| if (r3 != r0) {
0x0000f29c bne 0xf2c6 | goto label_7;
| }
0x0000f29e mvn r5, 0xcc | r5 = ~0xcc;
0x0000f2a2 blx 0x9094 | strncasecmp (r0, r1, r2);
0x0000f2a6 mov.w r2, 0x100 | r2 = 0x100;
0x0000f2aa ldr r0, [r0] | r0 = *(r0);
0x0000f2ac add r1, sp, 0x3c | r1 += var_3ch;
0x0000f2ae blx 0x9110 | fcn_00009110 ();
| label_0:
0x0000f2b2 ldr r0, [r4] | r0 = *(r4);
0x0000f2b4 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f2b8 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0000f2ba bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f2be ldr r0, [r4, 8] | r0 = *((r4 + 8));
| label_1:
0x0000f2c0 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f2c4 b 0xf26e |
| }
| label_7:
0x0000f2c6 add.w r8, sp, 0x2c | r8 += var_2ch;
0x0000f2ca mov r1, r5 | r1 = r5;
0x0000f2cc movs r2, 0x10 | r2 = 0x10;
0x0000f2ce mov r0, r8 | r0 = r8;
0x0000f2d0 blx 0x9144 | fcn_00009144 ();
0x0000f2d4 ldr r0, [pc, 0x174] |
0x0000f2d6 movs r2, 2 | r2 = 2;
0x0000f2d8 strh.w r2, [sp, 0x2c] | var_2ch = r2;
0x0000f2dc add r0, pc | r0 = 0x1e72c;
0x0000f2de blx 0x9574 | fcn_00009574 ();
0x0000f2e2 movs r2, 0x10 | r2 = 0x10;
0x0000f2e4 str r0, [sp, 0x30] | var_30h = r0;
0x0000f2e6 mov r1, r8 | r1 = r8;
0x0000f2e8 mov r0, r6 | r0 = r6;
0x0000f2ea blx 0x911c | fcn_0000911c ();
0x0000f2ee adds r0, 1 | r0++;
| if (r0 == 1) {
0x0000f2f0 bne 0xf2fe |
0x0000f2f2 mov r0, r6 | r0 = r6;
0x0000f2f4 mvn r5, 0xca | r5 = ~0xca;
0x0000f2f8 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f2fc b 0xf2b2 | goto label_0;
| }
0x0000f2fe ldr r3, [pc, 0x150] | r3 = *(0xf452);
0x0000f300 mov r0, r6 | r0 = r6;
0x0000f302 ldr.w r5, [sl, r3] | r5 = *((sl + r3));
0x0000f306 mov r1, r5 | r1 = r5;
0x0000f308 bl 0xe77c | r0 = fcn_0000e77c (r0);
0x0000f30c cmp r0, 0 |
| if (r0 < 0) {
0x0000f30e bge 0xf31a |
0x0000f310 mov r0, r6 | r0 = r6;
0x0000f312 ldr r5, [pc, 0x120] | r5 = *(0xf436);
0x0000f314 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f316 invalid |
| }
0x0000f31a ldrh r3, [r5] | r3 = *(r5);
0x0000f31c mov r0, r4 | r0 = r4;
0x0000f31e str r6, [r4, 0xc] | *((r4 + 0xc)) = r6;
0x0000f320 strh r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x0000f322 bl 0xd528 | r0 = fcn_0000d528 (r0);
0x0000f326 mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x0000f328 cbz r0, 0xf340 |
0x0000f32a ldr r0, [r4] | r0 = *(r4);
0x0000f32c bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f330 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0000f332 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f336 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0000f338 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f33c ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0000f33e b 0xf2c0 | goto label_1;
| }
0x0000f340 ldr r1, [pc, 0x110] |
0x0000f342 mov r2, r4 | r2 = r4;
0x0000f344 mov r0, r7 | r0 = r7;
0x0000f346 add r1, pc | r1 = 0x1e79e;
0x0000f348 bl 0xa7d4 | fcn_0000a7d4 (r0, r1, r2);
0x0000f34c movs r1, 1 | r1 = 1;
0x0000f34e mov r0, r7 | r0 = r7;
0x0000f350 bl 0xa7ec | fcn_0000a7ec (r0, r1);
0x0000f352 invalid |
0x0000f356 mov r0, r7 | r0 = r7;
0x0000f358 ldr.w r1, [sl, r3] | r1 = *((sl + r3));
0x0000f35c bl 0xa7fc | fcn_0000a7fc (r0, r1);
0x0000f360 ldr r3, [pc, 0xf8] | r3 = *(0xf45c);
0x0000f362 mov r2, r5 | r2 = r5;
0x0000f364 mov r1, r7 | r1 = r7;
0x0000f366 ldr.w r0, [sl, r3] | r0 = *((sl + r3));
0x0000f36a bl 0xa0b4 | r0 = fcn_0000a0b4 (r0, r1, r2);
0x0000f36e cmp r0, 0 |
| if (r0 >= 0) {
0x0000f370 bge 0xf408 | goto label_8;
| }
0x0000f372 ldr r0, [r4] | r0 = *(r4);
0x0000f374 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f378 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0000f37a bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f37e ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0000f380 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f384 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0000f386 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f38a ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x0000f38c bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f390 ldr r0, [r4, 0x14] | r0 = *((r4 + 0x14));
0x0000f392 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f396 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x0000f398 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f39c ldr r0, [r4, 0x24] | r0 = *((r4 + 0x24));
0x0000f39e bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f3a2 ldr r0, [r4, 0x28] | r0 = *((r4 + 0x28));
0x0000f3a4 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f3a8 mov r0, r4 | r0 = r4;
0x0000f3aa blx 0x894c | fcn_0000894c ();
| label_5:
0x0000f3ae mvn r5, 0x67 | r5 = ~0x67;
0x0000f3b2 b 0xf274 | goto label_2;
| do {
0x0000f3b4 adds r6, 1 | r6++;
0x0000f3b6 movs r1, 0 | r1 = 0;
0x0000f3b8 add r0, sp, 8 | r0 += var_8h;
0x0000f3ba strd r1, sl, [r0] | __asm ("strd r1, sl, [r0]");
0x0000f3be blx 0x89bc | ixmlNode_getNodeType ();
| label_3:
0x0000f3c2 ldr.w r3, [fp, 0xc] | r3 = *(arg_ch);
0x0000f3c6 cmp r3, 1 |
| if (r3 == 1) {
0x0000f3c8 beq 0xf414 | goto label_9;
| }
0x0000f3ca cmp r6, r7 |
0x0000f3cc bne 0xf3b4 |
| } while (r6 != r7);
| do {
0x0000f3ce ldr r0, [r4] | r0 = *(r4);
0x0000f3d0 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f3d4 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0000f3d6 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f3da ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0000f3dc bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f3e0 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0000f3e2 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f3e6 ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x0000f3e8 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f3ec ldr r0, [r4, 0x14] | r0 = *((r4 + 0x14));
0x0000f3ee bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f3f2 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x0000f3f4 bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f3f8 ldr r0, [r4, 0x24] | r0 = *((r4 + 0x24));
0x0000f3fa bl 0xeb0c | fcn_0000eb0c (r0);
0x0000f3fe ldr r0, [r4, 0x28] | r0 = *((r4 + 0x28));
0x0000f400 bl 0xeb0c | fcn_0000eb0c (r0);
| label_4:
0x0000f404 ldr r5, [pc, 0x2c] | r5 = *(0xf434);
0x0000f406 b 0xf274 | goto label_2;
| label_8:
0x0000f408 ldr.w sl, [pc, 0x54] | sl = *(0x0000f460);
0x0000f40c mov r6, r5 | r6 = r5;
0x0000f40e movw r7, 0x2710 | r7 = 0x2710;
0x0000f412 b 0xf3c2 | goto label_3;
| label_9:
0x0000f414 cmp r6, r7 |
0x0000f416 beq 0xf3ce |
| } while (r6 == r7);
0x0000f418 ldrh r3, [r4, 0x1e] | r3 = *((r4 + 0x1e));
0x0000f41a ldr r2, [sp] | r2 = *(sp);
0x0000f41c strh.w r3, [sb] | *(sb) = r3;
0x0000f420 ldrh r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0000f422 strh r3, [r2] | *(r2) = r3;
0x0000f424 ldrh r3, [r4, 0x22] | r3 = *((r4 + 0x22));
0x0000f426 ldr r2, [sp, 4] | r2 = var_4h;
0x0000f428 strh r3, [r2] | *(r2) = r3;
0x0000f42a b 0xf274 | goto label_2;
| label_6:
0x0000f42c mov r0, r5 | r0 = r5;
0x0000f42e add sp, 0x144 |
0x0000f430 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0xfd40 */
| #include <stdint.h>
|
; (fcn) fcn.0000fd40 () | void fcn_0000fd40 (int16_t 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_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0000fd40 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000fd44 mov fp, r2 |
0x0000fd46 ldr r2, [pc, 0x208] |
0x0000fd48 sub sp, 0x3c |
0x0000fd4a mov r4, r0 | r4 = r0;
0x0000fd4c movs r6, 0 | r6 = 0;
0x0000fd4e ldr r3, [pc, 0x204] | r3 = *(0xff56);
0x0000fd50 add r2, pc | r2 = 0x1fca6;
0x0000fd52 str r1, [sp] | *(sp) = r1;
0x0000fd54 mov r1, r0 | r1 = r0;
0x0000fd56 ldr r0, [pc, 0x200] |
0x0000fd58 ldr r3, [r2, r3] |
0x0000fd5a add r2, sp, 0x1c | r2 += var_1ch;
0x0000fd5c add r0, pc | r0 = 0x1fcba;
0x0000fd5e ldr r3, [r3] | r3 = *(0x1fca6);
0x0000fd60 str r3, [sp, 0x34] | var_34h = r3;
0x0000fd62 mov.w r3, 0 | r3 = 0;
0x0000fd66 strd r6, r6, [sp, 0x18] | __asm ("strd r6, r6, [var_1ch]");
0x0000fd6a strd r6, r6, [sp, 0x20] | __asm ("strd r6, r6, [var_20h]");
0x0000fd6e strd r6, r6, [sp, 0x28] | __asm ("strd r6, r6, [var_28h]");
0x0000fd72 str r6, [sp, 0x30] | var_30h = r6;
0x0000fd74 bl 0xfd02 | r0 = fcn_0000fd02 (r0, r1, r2);
0x0000fd78 cmp r0, 0 |
| if (r0 == 0) {
0x0000fd7a beq.w 0xff40 | goto label_8;
| }
0x0000fd7e ldr r0, [pc, 0x1dc] |
0x0000fd80 add r2, sp, 0x18 | r2 += var_18h;
0x0000fd82 mov r1, r4 | r1 = r4;
0x0000fd84 add r0, pc | r0 = 0x1fce6;
0x0000fd86 bl 0xfd02 | fcn_0000fd02 (r0, r1, r2);
0x0000fd88 vtbl.8 d2, {d12}, d0 | __asm ("vtbl.8 d2, {d12}, d0");
0x0000fd8a cmp r0, 0 |
| if (r0 == 0) {
0x0000fd8c beq.w 0xff40 | goto label_8;
| }
0x0000fd90 ldr r1, [pc, 0x1cc] |
0x0000fd92 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0000fd94 add r1, pc | r1 = 0x1fcf8;
0x0000fd96 blx 0x91c4 | r0 = fcn_000091c4 ();
0x0000fd9a mov r8, r0 | r8 = r0;
0x0000fd9c cmp r0, 0 |
| if (r0 == 0) {
0x0000fd9e beq.w 0xff3c | goto label_9;
| }
0x0000fda2 blx 0x9230 | fcn_00009230 ();
0x0000fda6 ldr r3, [pc, 0x1bc] |
0x0000fda8 mov r5, r6 | r5 = r6;
0x0000fdaa mov r7, r6 | r7 = r6;
0x0000fdac mov sb, r6 | sb = r6;
0x0000fdae str r0, [sp, 4] | var_4h = r0;
0x0000fdb0 add r3, pc | r3 = 0x1fd1a;
0x0000fdb2 str r3, [sp, 8] | var_8h = r3;
0x0000fdb4 ldr r3, [pc, 0x1b0] |
0x0000fdb6 add r3, pc | r3 = 0x1fd22;
0x0000fdb8 str r3, [sp, 0xc] | var_ch = r3;
0x0000fdba ldr r3, [pc, 0x1b0] |
0x0000fdbc add r3, pc | r3 = 0x1fd2e;
0x0000fdbe str r3, [sp, 0x10] | var_10h = r3;
| label_5:
0x0000fdc0 ldr r3, [sp, 4] | r3 = var_4h;
0x0000fdc2 cmp r6, r3 |
| if (r6 == r3) {
0x0000fdc4 bne 0xfdd6 |
0x0000fdc6 mov r0, r8 | r0 = r8;
0x0000fdc8 mov r8, sb | r8 = sb;
0x0000fdca blx 0x93f0 | fcn_000093f0 ();
| label_6:
0x0000fdce ldr r3, [sp] | r3 = *(sp);
0x0000fdd0 mov r4, r8 | r4 = r8;
0x0000fdd2 str r7, [r3] | *(r3) = r7;
0x0000fdd4 b 0xfdfa | goto label_7;
| }
0x0000fdd6 mov r1, r6 | r1 = r6;
0x0000fdd8 mov r0, r8 | r0 = r8;
0x0000fdda blx 0x9260 | r0 = fcn_00009260 ();
0x0000fdde mov sl, r0 | sl = r0;
0x0000fde0 movs r0, 0x28 | r0 = 0x28;
| if (r7 == 0) {
0x0000fde2 cbz r7, 0xfe14 | goto label_10;
| }
0x0000fde4 blx 0x8e30 | r0 = vfprintf_chk ()
0x0000fde8 mov r4, r0 | r4 = r0;
0x0000fdea str r0, [r7, 0x24] | *((r7 + 0x24)) = r0;
| if (r4 != 0) {
| do {
0x0000fdec cbnz r4, 0xfe20 | goto label_11;
| }
0x0000fdee mov r0, sb | r0 = sb;
0x0000fdf0 bl 0xfc7a | fcn_0000fc7a (r0);
0x0000fdf4 mov r0, r8 | r0 = r8;
0x0000fdf6 blx 0x93f0 | fcn_000093f0 ();
| label_7:
0x0000fdfa ldr r2, [pc, 0x174] |
0x0000fdfc ldr r3, [pc, 0x154] | r3 = *(0xff54);
0x0000fdfe add r2, pc | r2 = 0x1fd74;
0x0000fe00 ldr r3, [r2, r3] | r3 = *(0x1fd74);
0x0000fe02 ldr r2, [r3] | r2 = *(0x1fd74);
0x0000fe04 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0000fe06 eors r2, r3 | r2 ^= r3;
0x0000fe08 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000fe0c beq.w 0xff48 | goto label_12;
| }
0x0000fe10 blx 0x8b7c | fcn_00008b7c ();
| label_10:
0x0000fe14 blx 0x8e30 | vfprintf_chk ()
0x0000fe18 mov r7, r5 | r7 = r5;
0x0000fe1a mov sb, r0 | sb = r0;
0x0000fe1c mov r4, r0 | r4 = r0;
0x0000fe1e b 0xfdec |
| } while (1);
| label_11:
0x0000fe20 movs r3, 0 | r3 = 0;
0x0000fe22 movs r2, 1 | r2 = 1;
0x0000fe24 str r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
0x0000fe26 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0000fe28 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x0000fe2a strd r3, r3, [r4, 0xc] | __asm ("strd r3, r3, [r4, 0xc]");
0x0000fe2e strd r3, r3, [r4] | __asm ("strd r3, r3, [r4]");
0x0000fe32 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x0000fe34 strd r3, r3, [r4, 0x1c] | __asm ("strd r3, r3, [r4, 0x1c]");
0x0000fe38 bl 0xfcde | fcn_0000fcde ();
0x0000fe3c add r2, sp, 0x20 | r2 += var_20h;
0x0000fe3e mov r5, r0 | r5 = r0;
0x0000fe40 str r0, [r4, 0x14] | *((r4 + 0x14)) = r0;
0x0000fe42 mov r1, sl | r1 = sl;
0x0000fe44 ldr r0, [sp, 8] | r0 = var_8h;
0x0000fe46 bl 0xfd02 | r0 = fcn_0000fd02 (r0, r1, r2);
| if (r0 == 0) {
0x0000fe4a cbz r0, 0xfea0 | goto label_13;
| }
0x0000fe4c ldr r0, [sp, 0x20] | r0 = var_20h;
0x0000fe4e bl 0xfcde | fcn_0000fcde ();
0x0000fe52 str r0, [r4] | *(r4) = r0;
| if (r0 == 0) {
0x0000fe54 cbz r0, 0xfea0 | goto label_13;
| }
0x0000fe56 clz r5, r5 | r5 &= r5;
0x0000fe5a lsrs r5, r5, 5 | r5 >>= 5;
| do {
0x0000fe5c ldr r0, [sp, 0xc] | r0 = var_ch;
0x0000fe5e add r2, sp, 0x24 | r2 += var_24h;
0x0000fe60 mov r1, sl | r1 = sl;
0x0000fe62 bl 0xfd02 | r0 = fcn_0000fd02 (r0, r1, r2);
| if (r0 != 0) {
0x0000fe66 cbz r0, 0xfe72 |
0x0000fe68 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0000fe6a bl 0xfcde | fcn_0000fcde ();
0x0000fe6e str r0, [r4, 4] | *((r4 + 4)) = r0;
| if (r0 != 0) {
0x0000fe70 cbnz r0, 0xfe74 | goto label_14;
| }
| }
0x0000fe72 movs r5, 1 | r5 = 1;
| label_14:
0x0000fe74 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0000fe76 add r2, sp, 0x28 | r2 += var_28h;
0x0000fe78 mov r1, sl | r1 = sl;
0x0000fe7a bl 0xfd02 | r0 = fcn_0000fd02 (r0, r1, r2);
| if (r0 != 0) {
0x0000fe7e cbnz r0, 0xfea4 | goto label_15;
| }
| label_0:
0x0000fe80 movs r5, 1 | r5 = 1;
0x0000fe82 movs r1, 0 | r1 = 0;
| label_1:
0x0000fe84 mov r0, r1 | r0 = r1;
0x0000fe86 blx 0x8fa8 | fcn_00008fa8 ();
0x0000fe8a ldr r0, [pc, 0xe8] |
0x0000fe8c add r2, sp, 0x2c | r2 += var_2ch;
0x0000fe8e mov r1, sl | r1 = sl;
0x0000fe90 add r0, pc | r0 = 0x1fe0a;
0x0000fe92 bl 0xfd02 | r0 = fcn_0000fd02 (r0, r1, r2);
| if (r0 != 0) {
0x0000fe96 cbnz r0, 0xfec4 | goto label_16;
| }
| label_2:
0x0000fe98 movs r1, 0 | r1 = 0;
| label_3:
0x0000fe9a movs r5, 0 | r5 = 0;
0x0000fe9c str r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
0x0000fe9e b 0xfee0 | goto label_17;
| label_13:
0x0000fea0 movs r5, 1 | r5 = 1;
0x0000fea2 b 0xfe5c |
| } while (1);
| label_15:
0x0000fea4 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0000fea6 bl 0xfcde | r0 = fcn_0000fcde ();
0x0000feaa mov r1, r0 | r1 = r0;
0x0000feac cmp r0, 0 |
| if (r0 == 0) {
0x0000feae beq 0xfe80 | goto label_0;
| }
0x0000feb0 str r0, [sp, 0x14] | var_14h = r0;
0x0000feb2 mov r0, fp | r0 = fp;
0x0000feb4 bl 0x14b88 | r0 = fcn_00014b88 (r0, r1);
0x0000feb8 cmp r0, 0 |
0x0000feba ldr r1, [sp, 0x14] | r1 = var_14h;
0x0000febc it eq |
| if (r0 != 0) {
0x0000febe moveq r5, 1 | r5 = 1;
| }
0x0000fec0 str r0, [r4, 8] | *((r4 + 8)) = r0;
0x0000fec2 b 0xfe84 | goto label_1;
| label_16:
0x0000fec4 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0000fec6 bl 0xfcde | r0 = fcn_0000fcde ();
0x0000feca mov r1, r0 | r1 = r0;
0x0000fecc cmp r0, 0 |
| if (r0 == 0) {
0x0000fece beq 0xfe98 | goto label_2;
| }
0x0000fed0 str r0, [sp, 0x14] | var_14h = r0;
0x0000fed2 mov r0, fp | r0 = fp;
0x0000fed4 bl 0x14b88 | fcn_00014b88 (r0, r1);
0x0000fed8 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0000feda str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x0000fedc cmp r0, 0 |
| if (r0 == 0) {
0x0000fede beq 0xfe9a | goto label_3;
| }
| label_17:
0x0000fee0 mov r0, r1 | r0 = r1;
0x0000fee2 blx 0x8fa8 | fcn_00008fa8 ();
0x0000fee6 ldr r0, [pc, 0x90] |
0x0000fee8 add r2, sp, 0x30 | r2 += var_30h;
0x0000feea mov r1, sl | r1 = sl;
0x0000feec add r0, pc | r0 = 0x1fe6a;
0x0000feee bl 0xfd02 | r0 = fcn_0000fd02 (r0, r1, r2);
0x0000fef2 cbnz r0, 0xfefe |
| while (r0 == 0) {
0x0000fef4 mov.w sl, 0 | sl = 0;
| label_4:
0x0000fef8 movs r5, 0 | r5 = 0;
0x0000fefa str r5, [r4, 0x10] | *((r4 + 0x10)) = r5;
0x0000fefc b 0xff18 | goto label_18;
0x0000fefe ldr r0, [sp, 0x30] | r0 = var_30h;
0x0000ff00 bl 0xfcde | r0 = fcn_0000fcde ();
0x0000ff04 mov sl, r0 | sl = r0;
0x0000ff06 cmp r0, 0 |
0x0000ff08 beq 0xfef4 |
| }
0x0000ff0a mov r1, r0 | r1 = r0;
0x0000ff0c mov r0, fp | r0 = fp;
0x0000ff0e bl 0x14b88 | fcn_00014b88 (r0, r1);
0x0000ff12 str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x0000ff14 cmp r0, 0 |
| if (r0 == 0) {
0x0000ff16 beq 0xfef8 | goto label_4;
| }
| label_18:
0x0000ff18 mov r0, sl | r0 = sl;
0x0000ff1a blx 0x8fa8 | fcn_00008fa8 ();
| if (r5 == 0) {
0x0000ff1e cbz r5, 0xff2e | goto label_19;
| }
0x0000ff20 mov r0, r4 | r0 = r4;
0x0000ff22 bl 0xfc7a | fcn_0000fc7a (r0);
| if (r7 == 0) {
0x0000ff26 cbz r7, 0xff36 | goto label_20;
| }
0x0000ff28 mov r4, r7 | r4 = r7;
0x0000ff2a movs r3, 0 | r3 = 0;
0x0000ff2c str r3, [r7, 0x24] | *((r7 + 0x24)) = r3;
| do {
| label_19:
0x0000ff2e mov r5, r7 | r5 = r7;
0x0000ff30 adds r6, 1 | r6++;
0x0000ff32 mov r7, r4 | r7 = r4;
0x0000ff34 b 0xfdc0 | goto label_5;
| label_20:
0x0000ff36 mov r4, r7 | r4 = r7;
0x0000ff38 mov sb, r7 | sb = r7;
0x0000ff3a b 0xff2e |
| } while (1);
| label_9:
0x0000ff3c mov r7, r0 | r7 = r0;
0x0000ff3e b 0xfdce | goto label_6;
| label_8:
0x0000ff40 ldr r3, [sp] | r3 = *(sp);
0x0000ff42 movs r4, 0 | r4 = 0;
0x0000ff44 str r4, [r3] | *(r3) = r4;
0x0000ff46 b 0xfdfa | goto label_7;
| label_12:
0x0000ff48 mov r0, r4 | r0 = r4;
0x0000ff4a add sp, 0x3c |
0x0000ff4c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x10288 */
| #include <stdint.h>
|
; (fcn) fcn.00010288 () | void fcn_00010288 (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00010288 push {r4, r5, r6, lr} |
0x0001028a mov r6, r0 | r6 = r0;
0x0001028c adds r0, r1, 1 | r0 = r1 + 1;
0x0001028e mov r5, r1 | r5 = r1;
0x00010290 blx 0x8e30 | r0 = vfprintf_chk ()
0x00010294 mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x00010296 cbz r0, 0x102a4 |
0x00010298 mov r2, r5 | r2 = r5;
0x0001029a mov r1, r6 | r1 = r6;
0x0001029c blx 0x8a14 | fcn_00008a14 ();
0x000102a0 movs r3, 0 | r3 = 0;
0x000102a2 strb r3, [r4, r5] | *((r4 + r5)) = r3;
| }
0x000102a4 mov r0, r4 | r0 = r4;
0x000102a6 pop {r4, r5, r6, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x11170 */
| #include <stdint.h>
|
; (fcn) fcn.00011170 () | void fcn_00011170 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int32_t var_1ch_2;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
0x00011170 push {r1, r2, r5, r6, r8, sb, fp, lr} |
0x00011174 ldr r7, [pc, 0x3c0] | r7 = *(0x11538);
0x00011176 sub sp, 0x34 |
0x00011178 ldr r2, [pc, 0x194] |
0x0001117a mov r4, r0 | r4 = r0;
0x0001117c add r3, pc | r3 += pc;
0x0001117e add.w sl, r0, 0x144 | sl = r0 + 0x144;
0x00011182 str r3, [sp, 8] | var_8h = r3;
0x00011184 ldr r3, [pc, 0x18c] | r3 = *(0x11314);
0x00011186 add r2, pc | r2 = 0x2249a;
0x00011188 ldr r3, [r2, r3] |
0x0001118a ldr r3, [r3] | r3 = *(0x2249a);
0x0001118c str r3, [sp, 0x2c] | var_2ch = r3;
0x0001118e mov.w r3, 0 | r3 = 0;
0x00011192 ldr r3, [pc, 0x184] |
0x00011194 add r3, pc | r3 = 0x224b2;
0x00011196 str r3, [sp, 0xc] | var_ch = r3;
0x00011198 ldr r3, [pc, 0x180] |
0x0001119a add r3, pc | r3 = 0x224ba;
0x0001119c str r3, [sp, 0x10] | var_10h = r3;
0x0001119e ldr r3, [pc, 0x180] |
0x000111a0 add r3, pc | r3 = 0x224c6;
0x000111a2 str r3, [sp, 0x14] | var_14h = r3;
| label_3:
0x000111a4 add r2, sp, 0x18 | r2 += var_18h;
0x000111a6 add r1, sp, 0x1c | r1 += var_1ch;
0x000111a8 mov r0, sl | r0 = sl;
0x000111aa ldr.w r6, [r4, 0x148] | r6 = *((r4 + 0x148));
0x000111ae bl 0x1085a | r0 = fcn_0001085a (r0, r1, r2);
0x000111b2 cmp r0, 4 |
| if (r0 != 4) {
0x000111b4 beq 0x111bc |
| label_0:
0x000111b6 str.w r6, [r4, 0x148] | __asm ("str.w r6, aav.0x000000ff");
0x000111ba b 0x111d6 |
| } else {
0x000111bc ldr r5, [sp, 0x18] | r5 = var_18h;
| if (r5 == 0) {
0x000111be cbz r5, 0x111f8 | goto label_5;
| }
0x000111c0 cmp r5, 2 |
| if (r5 != 2) {
0x000111c2 bne 0x11256 | goto label_6;
| }
0x000111c4 ldr.w r3, [r4, 0xcc] | r3 = *((r4 + 0xcc));
| if (r3 == 0) {
0x000111c8 cbz r3, 0x111f0 | goto label_7;
| }
0x000111ca ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000111cc cmp r3, 4 |
| if (r3 != 4) {
0x000111ce bne 0x111f0 | goto label_7;
| }
0x000111d0 str.w r0, [r4, 0x130] | __asm ("str.w r0, aav.0x000000ff");
0x000111d4 movs r0, 0 | r0 = 0;
| }
| do {
| label_1:
0x000111d6 ldr r2, [pc, 0x14c] |
0x000111d8 ldr r3, [pc, 0x138] | r3 = *(0x11314);
0x000111da add r2, pc | r2 = 0x22504;
0x000111dc ldr r3, [r2, r3] | r3 = *(0x22504);
0x000111de ldr r2, [r3] | r2 = *(0x22504);
0x000111e0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000111e2 eors r2, r3 | r2 ^= r3;
0x000111e4 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000111e8 beq.w 0x11306 | goto label_8;
| }
0x000111ec blx 0x8b7c | fcn_00008b7c ();
| label_7:
0x000111f0 movs r3, 3 | r3 = 3;
0x000111f2 str.w r3, [r4, 0x130] | __asm ("str.w r3, aav.0x000000ff");
0x000111f6 b 0x111d6 |
| } while (1);
| label_5:
0x000111f8 ldr r1, [sp, 0xc] | r1 = var_ch;
0x000111fa add r2, sp, 0x24 | r2 += var_24h;
0x000111fc mov r0, sl | r0 = sl;
0x000111fe bl 0x10e58 | r0 = fcn_00010e58 (r0);
0x00011202 cmp r0, 4 |
| if (r0 != 4) {
0x00011204 bne 0x111b6 | goto label_0;
| }
0x00011206 ldr r2, [sp, 8] | r2 = var_8h;
0x00011208 ldr r3, [pc, 0x11c] | r3 = *(0x11328);
0x0001120a ldrd r7, r8, [sp, 0x1c] | __asm ("ldrd r7, r8, [var_1ch]");
0x0001120e ldr.w sb, [r2, r3] | sb = *((r2 + r3));
0x00011212 movs r3, 0x21 | r3 = 0x21;
0x00011214 mov r1, r8 | r1 = r8;
0x00011216 mov r0, r7 | r0 = r7;
0x00011218 str r5, [sp] | *(sp) = r5;
0x0001121a mov r2, sb | r2 = sb;
0x0001121c bl 0x10494 | r0 = fcn_00010494 (r0, r1, r2, r3, r4);
0x00011220 adds r3, r0, 1 | r3 = r0 + 1;
0x00011222 mov r6, r0 | r6 = r0;
| if (r3 == r0) {
0x00011224 beq 0x1125a | goto label_9;
| }
0x00011226 add.w sb, sb, r0, lsl 3 | sb += (r0 << 3);
0x0001122a movs r2, 0 | r2 = 0;
0x0001122c mov r0, r4 | r0 = r4;
0x0001122e ldr.w r6, [sb, 4] | r6 = *((sb + 4));
0x00011232 cmp r6, 0x13 |
0x00011234 mov r1, r6 | r1 = r6;
0x00011236 itt eq |
| if (r6 != 0x13) {
0x00011238 moveq r3, 0xb | r3 = 0xb;
| }
| if (r6 != 0x13) {
0x0001123a streq r3, [r4, 4] | *((r4 + 4)) = r3;
| }
0x0001123c bl 0x10f74 | r0 = fcn_00010f74 (r0, r1);
| do {
0x00011240 cmp r0, 0 |
| if (r0 != 0) {
0x00011242 bne 0x112da | goto label_10;
| }
0x00011244 movs r0, 0x2c | r0 = 0x2c;
0x00011246 blx 0x8e30 | r0 = vfprintf_chk ()
0x0001124a mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x0001124c cbnz r0, 0x11270 | goto label_11;
| }
| label_2:
0x0001124e mov.w r3, 0x1f4 | r3 = 0x1f4;
0x00011252 str.w r3, [r4, 0x128] | __asm ("str.w r3, aav.0x000000ff");
| label_6:
0x00011256 movs r0, 3 | r0 = 3;
0x00011258 b 0x111d6 | goto label_1;
| label_9:
0x0001125a ldrb.w sb, [r7, r8] | sb = *((r7 + r8));
0x0001125e mov r1, r7 | r1 = r7;
0x00011260 mov r0, r4 | r0 = r4;
0x00011262 strb.w r5, [r7, r8] | *((r7 + r8)) = r5;
0x00011266 bl 0x10f44 | fcn_00010f44 (r0, r1);
0x0001126a strb.w sb, [r7, r8] | *((r7 + r8)) = sb;
0x0001126c str r0, [sp, 0x20] | *((sp + 0x20)) = r0;
0x0001126e b 0x11240 |
| } while (1);
| label_11:
0x00011270 add.w sb, r0, 0x1c | sb = r0 + 0x1c;
0x00011274 add.w fp, r5, 0xc |
0x00011278 mov r0, sb | r0 = sb;
0x0001127a bl 0x1033a | fcn_0001033a (r0);
0x0001127e mov r0, fp | r0 = fp;
0x00011280 bl 0x1033a | fcn_0001033a (r0);
0x00011284 ldr r2, [sp, 0x28] | r2 = var_28h;
| if (r2 == 0) {
0x00011286 cbnz r2, 0x11290 |
0x00011288 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0001128a movs r2, 1 | r2 = 1;
0x0001128c str r2, [sp, 0x28] | var_28h = r2;
0x0001128e str r3, [sp, 0x24] | var_24h = r3;
| }
0x00011290 mov r2, r8 | r2 = r8;
0x00011292 mov r1, r7 | r1 = r7;
0x00011294 mov r0, sb | r0 = sb;
0x00011296 bl 0x10360 | r0 = fcn_00010360 (r0, r1, r2);
0x0001129a cbz r0, 0x112b0 |
| while (r0 != 0) {
| label_4:
0x0001129c mov r0, fp | r0 = fp;
0x0001129e bl 0x10348 | fcn_00010348 (r0);
0x000112a2 mov r0, sb | r0 = sb;
0x000112a4 bl 0x10348 | fcn_00010348 (r0);
0x000112a8 mov r0, r5 | r0 = r5;
0x000112aa blx 0x894c | fcn_0000894c ();
0x000112ae b 0x1124e | goto label_2;
0x000112b0 ldrd r1, r2, [sp, 0x24] | __asm ("ldrd r1, r2, [var_24h]");
0x000112b4 mov r0, fp | r0 = fp;
0x000112b6 bl 0x10360 | r0 = fcn_00010360 (r0, r1, r2);
0x000112ba cmp r0, 0 |
0x000112bc bne 0x1129c |
| }
0x000112be ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x000112c0 mov r1, r5 | r1 = r5;
0x000112c2 add.w r0, r4, 0xd8 | r0 = r4 + 0xd8;
0x000112c6 str r2, [r5] | *(r5) = r2;
0x000112c8 ldr r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x000112ca strd r2, r6, [r5, 4] | __asm ("strd r2, r6, [r5, 4]");
0x000112ce bl 0x992e | r0 = fcn_0000992e (r0, r1);
0x000112d2 cmp r0, 0 |
| if (r0 != 0) {
0x000112d4 bne.w 0x111a4 | goto label_3;
| }
0x000112d8 b 0x1129c | goto label_4;
| label_10:
0x000112da ldr r3, [sp, 0x28] | r3 = var_28h;
0x000112dc cmp r3, 0 |
| if (r3 == 0) {
0x000112de beq.w 0x111a4 | goto label_3;
| }
0x000112e2 add.w r5, r0, 0xc | r5 = r0 + 0xc;
0x000112e6 ldr r1, [sp, 0x10] | r1 = var_10h;
0x000112e8 mov r0, r5 | r0 = r5;
0x000112ea bl 0x10416 | fcn_00010416 (r0, r1);
0x000112ee ldrd r1, r2, [sp, 0x24] | __asm ("ldrd r1, r2, [var_24h]");
0x000112f2 mov r6, r0 | r6 = r0;
0x000112f4 mov r0, r5 | r0 = r5;
0x000112f6 bl 0x10410 | fcn_00010410 (r0, r1, r2);
0x000112fa adds r6, 0x68 | r6 += 0x68;
| if (r6 == 0x68) {
0x000112fc beq 0x1124e | goto label_2;
| }
0x000112fe adds r0, 0x68 | r0 += 0x68;
| if (r0 != 0x68) {
0x00011300 bne.w 0x111a4 | goto label_3;
| }
0x00011304 b 0x1124e | goto label_2;
| label_8:
0x00011306 add sp, 0x34 |
0x00011308 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x11ba4 */
| #include <stdint.h>
|
; (fcn) fcn.00011ba4 () | void fcn_00011ba4 (int16_t arg_30h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00011ba4 push.w {r0, r1, r2, r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00011ba8 mov sb, r3 | sb = r3;
0x00011baa ldr r6, [sp, 0x30] | r6 = *(arg_30h);
0x00011bac mov.w r3, 0x1f4 | r3 = 0x1f4;
0x00011bb0 mov r5, r1 | r5 = r1;
0x00011bb2 mov r7, r2 | r7 = r2;
0x00011bb4 ldr.w fp, [pc, 0xd4] |
0x00011bb8 str r0, [sp, 4] | var_4h = r0;
0x00011bba mov.w r0, 0x400 | r0 = 0x400;
0x00011bbe str r3, [r6] | *(r6) = r3;
0x00011bc0 add fp, pc | fp = 0x23850;
0x00011bc2 blx 0x8e30 | r0 = vfprintf_chk ()
0x00011bc6 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00011bc8 cbnz r0, 0x11bde |
| label_1:
0x00011bca movs r4, 0 | r4 = 0;
0x00011bcc mvn r8, 0x67 | r8 = ~0x67;
| label_2:
0x00011bd0 mov r0, r4 | r0 = r4;
0x00011bd2 blx 0x894c | fcn_0000894c ();
0x00011bd6 mov r0, r8 | r0 = r8;
0x00011bd8 add sp, 0xc |
0x00011bda pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00011bde cmp r7, 0xa |
| if (r7 != 0xa) {
0x00011be0 bne 0x11c1c | goto label_4;
| }
0x00011be2 mov r0, r5 | r0 = r5;
0x00011be4 bl 0x1132c | fcn_0001132c (r0);
| do {
0x00011be8 mov.w sl, 0 | sl = 0;
0x00011bec mov.w r7, 0x400 | r7 = 0x400;
| label_0:
0x00011bf0 ldr r0, [sp, 4] | r0 = var_4h;
0x00011bf2 mov r3, sb | r3 = sb;
0x00011bf4 mov r2, r7 | r2 = r7;
0x00011bf6 mov r1, r4 | r1 = r4;
0x00011bf8 bl 0x10790 | r0 = fcn_00010790 (r0, r1, r2, r3);
0x00011bfc subs.w r8, r0, 0 | r8 = r0 - 0;
| if (r8 <= r0) {
0x00011c00 ble 0x11c6e | goto label_5;
| }
0x00011c02 mov r2, r8 | r2 = r8;
0x00011c04 mov r1, r4 | r1 = r4;
0x00011c06 mov r0, r5 | r0 = r5;
0x00011c08 bl 0x118fc | r0 = fcn_000118fc (r0, r1, r2);
0x00011c0c cmp r0, 6 |
| if (r0 > 6) {
0x00011c0e bhi 0x11c2a | goto label_6;
| }
| /* switch table (7 cases) at 0x11c14 */
0x00011c10 tbb [pc, r0] | __asm ("tbb aav.0x000000ff");
| label_4:
0x00011c1c mov r1, r7 | r1 = r7;
0x00011c1e mov r0, r5 | r0 = r5;
0x00011c20 bl 0x11342 | fcn_00011342 (r0, r1);
0x00011c24 b 0x11be8 |
| } while (1);
0x00011c26 mov.w sl, 1 | sl = 1;
| label_6:
0x00011c2a cmp r8, r7 |
| if (r8 <= r7) {
0x00011c2c blo 0x11bf0 | goto label_0;
| }
0x00011c2e lsls r7, r7, 1 | r7 <<= 1;
0x00011c30 mov r0, r4 | r0 = r4;
0x00011c32 blx 0x894c | fcn_0000894c ();
0x00011c36 mov r0, r7 | r0 = r7;
0x00011c38 blx 0x8e30 | r0 = vfprintf_chk ()
0x00011c3c mov r4, r0 | r4 = r0;
0x00011c3e cmp r0, 0 |
| if (r0 != 0) {
0x00011c40 bne 0x11bf0 | goto label_0;
| }
0x00011c42 b 0x11bca | goto label_1;
0x00011c44 ldr r3, [pc, 0x48] | r3 = *(0x11c90);
0x00011c46 ldr.w r3, [fp, r3] | r3 = *((fp + r3));
0x00011c4a ldr r2, [r3] | r2 = *(0x11c90);
| if (r2 == 0) {
0x00011c4c cbz r2, 0x11c84 | goto label_7;
| }
0x00011c4e ldr.w r3, [r5, 0x138] | r3 = *((r5 + 0x138));
0x00011c52 cmp r2, r3 |
| if (r2 >= r3) {
0x00011c54 bhs 0x11c84 | goto label_7;
| }
0x00011c56 movw r3, 0x19d | r3 = 0x19d;
0x00011c5a ldr.w r8, [pc, 0x38] | r8 = *(0x00011c94);
0x00011c5e str r3, [r6] | *(r6) = r3;
0x00011c60 b 0x11bd0 | goto label_2;
0x00011c62 ldr.w r3, [r5, 0x128] | r3 = *((r5 + 0x128));
| label_3:
0x00011c66 mvn r8, 0x76 | r8 = ~0x76;
0x00011c6a str r3, [r6] | *(r6) = r3;
0x00011c6c b 0x11bd0 | goto label_2;
| if (r2 != r3) {
| label_5:
0x00011c6e bne 0x11c7c | goto label_8;
| }
0x00011c70 cmp.w sl, 0 |
| if (sl != 0) {
0x00011c74 bne 0x11bd0 | goto label_2;
| }
0x00011c76 mov.w r3, 0x190 | r3 = 0x190;
0x00011c7a b 0x11c66 | goto label_3;
| label_8:
0x00011c7c ldr.w r3, [r5, 0x128] | r3 = *((r5 + 0x128));
0x00011c80 str r3, [r6] | *(r6) = r3;
0x00011c82 b 0x11bd0 | goto label_2;
| label_7:
0x00011c84 mov.w r8, 0 | r8 = 0;
0x00011c88 b 0x11bd0 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x11c98 */
| #include <stdint.h>
|
; (fcn) fcn.00011c98 () | void fcn_00011c98 (int16_t arg1, int16_t arg2) {
| int16_t var_bp_0h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_34h;
| int16_t var_0h_2;
| int32_t var_38h;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_70h;
| int16_t var_4h_2;
| r0 = arg1;
| r1 = arg2;
0x00011c98 push {r2, r3} |
0x00011c9a push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00011c9e sub sp, 0x4c |
0x00011ca0 add r2, sp, 0x70 | r2 += var_70h;
0x00011ca2 movs r6, 0 | r6 = 0;
0x00011ca4 mov.w sb, 0x100000 | sb = 0x100000;
0x00011ca8 mov r5, r6 | r5 = r6;
0x00011caa strd r0, r1, [sp, 0x14] | __asm ("strd r0, r1, [var_18h]");
0x00011cae mov fp, r6 |
0x00011cb0 ldr r1, [pc, 0x2b4] |
0x00011cb2 mov r8, r6 | r8 = r6;
0x00011cb4 ldr r3, [pc, 0x2b4] | r3 = *(0x11f6c);
0x00011cb6 mov r4, r6 | r4 = r6;
0x00011cb8 ldr r7, [r2], 4 | r7 = *(r2);
| r2 += 4;
0x00011cbc add r1, pc | r1 = 0x23c28;
0x00011cbe ldr.w sl, [pc, 0x2b0] |
0x00011cc2 ldr r3, [r1, r3] |
0x00011cc4 add sl, pc | sl = 0x23c3a;
0x00011cc6 ldr r3, [r3] | r3 = *(0x23c28);
0x00011cc8 str r3, [sp, 0x44] | var_44h = r3;
0x00011cca mov.w r3, 0 | r3 = 0;
0x00011cce strd r6, r6, [sp, 0x38] | __asm ("strd r6, r6, [var_bp_0h]");
0x00011cd2 strh.w r6, [sp, 0x40] | var_40h = r6;
0x00011cd6 str r2, [sp, 0x34] | var_34h = r2;
0x00011cd8 str r6, [sp, 0x10] | var_10h = r6;
| do {
| label_0:
0x00011cda ldrb r3, [r7], 1 | r3 = *(r7);
| r7++;
0x00011cde cmp r3, 0 |
| if (r3 == 0) {
0x00011ce0 beq.w 0x11f4e | goto label_11;
| }
0x00011ce4 cmp r3, 0x49 |
| if (r3 != 0x49) {
0x00011ce6 bne 0x11d26 | goto label_12;
| }
0x00011ce8 cmp r6, 0 |
0x00011cea bne 0x11cda |
| } while (r6 != 0);
0x00011cec ldr r3, [sp, 0x34] | r3 = var_34h;
0x00011cee ldr r4, [r3] | r4 = *(r3);
0x00011cf0 adds r2, r3, 4 | r2 = r3 + 4;
0x00011cf2 str r2, [sp, 0x34] | var_34h = r2;
0x00011cf4 ldrd r5, fp, [r4, 0x1a8] | __asm ("ldrd r5, fp, aav.0x0000000c");
0x00011cf8 cmp.w fp, 0 |
0x00011cfc itt lt |
| if (fp >= 0) {
0x00011cfe movlt r5, sb | r5 = sb;
| }
| if (fp >= 0) {
0x00011d00 movlt fp, r6 |
| }
0x00011d02 cmp.w r5, 0x100000 |
0x00011d06 sbcs r3, fp, 0 | __asm ("sbcs r3, var_bp_0h");
0x00011d0a it lt |
| if (r5 >= 0x100000) {
0x00011d0c movlt sb, r5 | sb = r5;
| }
0x00011d0e add.w r0, sb, 0x14 | r0 = sb + 0x14;
0x00011d12 blx 0x8e30 | vfprintf_chk ()
0x00011d16 str r0, [sp, 0x10] | var_10h = r0;
0x00011d18 cmp r0, 0 |
| if (r0 == 0) {
0x00011d1a beq.w 0x11f52 | goto label_13;
| }
0x00011d1e add.w r8, r0, 0xa | r8 = r0 + 0xa;
0x00011d22 movs r6, 1 | r6 = 1;
0x00011d24 b 0x11cda | goto label_0;
| label_12:
0x00011d26 cmp r3, 0x66 |
| if (r3 != 0x66) {
0x00011d28 bne.w 0x11f24 | goto label_14;
| }
0x00011d2c ldr r3, [sp, 0x34] | r3 = var_34h;
0x00011d2e adds r2, r3, 4 | r2 = r3 + 4;
0x00011d30 ldr r0, [r3] | r0 = *(r3);
0x00011d32 str r2, [sp, 0x34] | var_34h = r2;
| if (r4 == 0) {
0x00011d34 cbz r4, 0x11d54 | goto label_15;
| }
0x00011d36 ldr r3, [r4] | r3 = *(r4);
| if (r3 == 0) {
0x00011d38 cbz r3, 0x11d54 | goto label_15;
| }
0x00011d3a ldr r3, [pc, 0x238] | r3 = *(0x11f76);
0x00011d3c movs r1, 0 | r1 = 0;
0x00011d3e ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x00011d42 ldr r6, [r3, 4] | r6 = *(0x11f7a);
0x00011d44 ldrd r2, r3, [r4, 0x1b4] | __asm ("ldrd r2, r3, aav.0x000000ff");
0x00011d48 blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
0x00011d4a mov r7, r0 | r7 = r0;
| if (r0 != 0) {
0x00011d4c cbnz r0, 0x11d66 | goto label_16;
| }
| do {
0x00011d4e mvn r5, 0x1f6 | r5 = ~0x1f6;
0x00011d52 b 0x11db0 | goto label_7;
| label_15:
0x00011d54 ldr r1, [pc, 0x220] |
0x00011d56 add r1, pc | r1 = 0x23cd2;
0x00011d58 blx 0x9420 | r0 = fcn_00009420 ();
0x00011d5c mov r7, r0 | r7 = r0;
0x00011d5e cmp r0, 0 |
0x00011d60 beq 0x11d4e |
| } while (r0 == 0);
0x00011d62 cmp r4, 0 |
| if (r4 == 0) {
0x00011d64 beq 0x11dd0 | goto label_17;
| }
| label_16:
0x00011d66 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00011d68 cmp r3, 0 |
| if (r3 == 0) {
0x00011d6a beq 0x11dd0 | goto label_17;
| }
0x00011d6c ldr r3, [r4] | r3 = *(r4);
0x00011d6e cmp r3, 0 |
| if (r3 == 0) {
0x00011d70 beq 0x11e4a | goto label_18;
| }
0x00011d72 ldr.w r2, [r4, 0x1b8] | r2 = *((r4 + 0x1b8));
0x00011d76 mov r0, r7 | r0 = r7;
0x00011d78 ldr r3, [pc, 0x1f8] | r3 = *(0x11f74);
0x00011d7a ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x00011d7e str r2, [sp, 8] | var_8h = r2;
0x00011d80 ldr.w r2, [r4, 0x1b4] | r2 = *((r4 + 0x1b4));
0x00011d84 str r2, [sp, 4] | var_4h = r2;
0x00011d86 movs r2, 1 | r2 = 1;
0x00011d88 str r2, [sp] | *(sp) = r2;
0x00011d8a ldr r1, [r3, 0x10] | r1 = *(0x11f84);
0x00011d8c ldrd r2, r3, [r4, 0x1a0] | __asm ("ldrd r2, r3, aav.0x000000ff");
0x00011d90 blx r1 | r0 = uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| label_2:
0x00011d92 cbz r0, 0x11dd0 |
| while (r3 == 0) {
0x00011d94 mvn r5, 0x1f6 | r5 = ~0x1f6;
| label_1:
0x00011d98 ldr r3, [r4] | r3 = *(r4);
0x00011d9a cmp r3, 0 |
| if (r3 == 0) {
0x00011d9c beq.w 0x11f0c | goto label_10;
| }
0x00011da0 ldr r3, [pc, 0x1d0] |
0x00011da2 mov r0, r7 | r0 = r7;
0x00011da4 ldrd r1, r2, [r4, 0x1b4] | __asm ("ldrd r1, r2, aav.0x000000ff");
0x00011da8 ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x00011dac ldr r3, [r3, 0x14] | r3 = *(0x11f88);
0x00011dae blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
| label_7:
0x00011db0 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00011db2 blx 0x894c | fcn_0000894c ();
0x00011db6 ldr r2, [pc, 0x1c4] |
0x00011db8 ldr r3, [pc, 0x1b0] | r3 = *(0x11f6c);
0x00011dba add r2, pc | r2 = 0x23d3c;
0x00011dbc ldr r3, [r2, r3] | r3 = *(0x23d3c);
0x00011dbe ldr r2, [r3] | r2 = *(0x23d3c);
0x00011dc0 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00011dc2 eors r2, r3 | r2 ^= r3;
0x00011dc4 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00011dc8 beq.w 0x11f58 | goto label_19;
| }
0x00011dcc blx 0x8b7c | fcn_00008b7c ();
| label_17:
0x00011dd0 ldr r3, [pc, 0x1ac] |
0x00011dd2 add r3, pc | r3 = 0x23d56;
0x00011dd4 str r3, [sp, 0x24] | var_24h = r3;
0x00011dd6 ldr r3, [pc, 0x1ac] |
0x00011dd8 add r3, pc | r3 = 0x23d62;
0x00011dda str r3, [sp, 0x28] | var_28h = r3;
| label_5:
0x00011ddc orrs.w r3, r5, fp | r3 = r5 | fp;
| if (r3 == r5) {
0x00011de0 beq.w 0x11f06 | goto label_9;
| }
0x00011de4 cmp r4, 0 |
| if (r4 == 0) {
0x00011de6 beq 0x11e66 | goto label_20;
| }
0x00011de8 movs r3, 0 | r3 = 0;
0x00011dea cmp r5, sb |
0x00011dec str r3, [sp, 0x20] | var_20h = r3;
0x00011dee sbcs r3, fp, 0 | __asm ("sbcs r3, var_bp_0h");
0x00011df2 ldr r3, [r4] | r3 = *(r4);
0x00011df4 ite lt |
| if (r5 >= sb) {
0x00011df6 movlt r2, r5 | r2 = r5;
| }
| if (r5 < sb) {
0x00011df8 movge r2, sb | r2 = sb;
| }
0x00011dfa str.w sb, [sp, 0x1c] | __asm ("str.w sb, [var_1ch]");
| if (r3 == 0) {
0x00011dfe cbz r3, 0x11e5a | goto label_21;
| }
0x00011e00 ldr r3, [pc, 0x170] | r3 = *(0x11f74);
0x00011e02 mov r0, r7 | r0 = r7;
0x00011e04 ldr.w r1, [r4, 0x1b8] | r1 = *((r4 + 0x1b8));
0x00011e08 ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x00011e0c str r1, [sp] | *(sp) = r1;
0x00011e0e mov r1, r8 | r1 = r8;
0x00011e10 ldr r6, [r3, 8] | r6 = *(0x11f7c);
0x00011e12 ldr.w r3, [r4, 0x1b4] | r3 = *((r4 + 0x1b4));
0x00011e16 blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
| label_3:
0x00011e18 ldr.w r3, [r4, 0x1ac] | r3 = *((r4 + 0x1ac));
0x00011e1c mov r6, r0 | r6 = r0;
0x00011e1e cmp r3, 0 |
| if (r3 >= 0) {
0x00011e20 blt 0x11e2c |
0x00011e22 subs r3, r5, r0 | r3 = r5 - r0;
0x00011e24 str r3, [sp, 0x1c] | var_1ch = r3;
0x00011e26 sbc r3, fp, 0 | __asm ("sbc r3, var_bp_0h");
0x00011e2a str r3, [sp, 0x20] | var_20h = r3;
| }
| if (r6 != 0) {
| label_4:
0x00011e2c cbnz r6, 0x11e7a | goto label_22;
| }
0x00011e2e cmp r4, 0 |
| if (r4 == 0) {
0x00011e30 beq 0x11f1e | goto label_23;
| }
0x00011e32 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00011e34 cmp r3, 0 |
0x00011e36 beq 0x11d94 |
| }
0x00011e38 ldr r1, [pc, 0x14c] |
0x00011e3a movs r2, 5 | r2 = 5;
0x00011e3c ldr r3, [sp, 0x18] | r3 = var_18h;
0x00011e3e ldr r0, [sp, 0x14] | r0 = var_14h;
0x00011e40 add r1, pc | r1 = 0x23dcc;
0x00011e42 bl 0x1079e | fcn_0001079e (r0, r1, r2, r3);
| label_6:
0x00011e46 movs r5, 0 | r5 = 0;
0x00011e48 b 0x11d98 | goto label_1;
| label_18:
0x00011e4a movs r3, 1 | r3 = 1;
0x00011e4c mov r0, r7 | r0 = r7;
0x00011e4e str r3, [sp] | *(sp) = r3;
0x00011e50 ldrd r2, r3, [r4, 0x1a0] | __asm ("ldrd r2, r3, aav.0x000000ff");
0x00011e54 blx 0x929c | fcn_0000929c ();
0x00011e58 b 0x11d92 | goto label_2;
| label_21:
0x00011e5a mov r3, r7 | r3 = r7;
0x00011e5c movs r1, 1 | r1 = 1;
0x00011e5e mov r0, r8 | r0 = r8;
0x00011e60 blx 0x8d8c | fcn_00008d8c ();
0x00011e64 b 0x11e18 | goto label_3;
| label_20:
0x00011e66 mov r3, r7 | r3 = r7;
0x00011e68 mov r2, sb | r2 = sb;
0x00011e6a movs r1, 1 | r1 = 1;
0x00011e6c mov r0, r8 | r0 = r8;
0x00011e6e blx 0x8d8c | fcn_00008d8c ();
0x00011e72 strd r5, fp, [sp, 0x1c] | __asm ("strd r5, fp, [var_0hx1c]");
0x00011e76 mov r6, r0 | r6 = r0;
0x00011e78 b 0x11e2c | goto label_4;
| label_22:
0x00011e7a cmp r4, 0 |
| if (r4 == 0) {
0x00011e7c beq 0x11ef6 | goto label_24;
| }
0x00011e7e ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00011e80 cmp r3, 0 |
| if (r3 == 0) {
0x00011e82 beq 0x11ef6 | goto label_24;
| }
0x00011e84 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00011e86 add.w fp, sp, 0x38 |
0x00011e8a movs r5, 0 | r5 = 0;
0x00011e8c movs r2, 1 | r2 = 1;
0x00011e8e mov r0, fp | r0 = fp;
0x00011e90 strd r5, r5, [sp, 0x38] | __asm ("strd r5, r5, [var_bp_0h]");
0x00011e94 ldrh r3, [r3] | r3 = *(r3);
0x00011e96 strh.w r5, [sp, 0x40] | var_40h = r5;
0x00011e9a strh.w r3, [r8, r6] | *((r8 + r6)) = r3;
0x00011e9e ldr r3, [sp, 0x28] | r3 = var_28h;
0x00011ea0 str r6, [sp, 4] | var_4h = r6;
0x00011ea2 str r3, [sp] | *(sp) = r3;
0x00011ea4 movs r3, 0xa | r3 = 0xa;
0x00011ea6 mov r1, r3 | r1 = r3;
0x00011ea8 blx 0x96fc | r0 = fcn_000096fc ();
0x00011eac cmp r0, 0xa |
| if (r0 == 0xa) {
0x00011eae beq 0x11f1a | goto label_25;
| }
0x00011eb0 mov r0, fp | r0 = fp;
0x00011eb2 adds r6, 2 | r6 += 2;
0x00011eb4 blx 0x8f9c | fcn_00008f9c ();
0x00011eb8 mov r1, fp | r1 = fp;
0x00011eba mov r2, r0 | r2 = r0;
0x00011ebc sub.w r0, r8, r0 | r0 = r8 - r0;
0x00011ec0 blx 0x8a14 | fcn_00008a14 ();
0x00011ec4 mov r0, fp | r0 = fp;
0x00011ec6 blx 0x8f9c | fcn_00008f9c ();
0x00011eca ldr r3, [sp, 0x18] | r3 = var_18h;
0x00011ecc adds r2, r6, r0 | r2 = r6 + r0;
0x00011ece sub.w r1, r8, r0 | r1 = r8 - r0;
0x00011ed2 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00011ed4 bl 0x1079e | r0 = fcn_0001079e (r0, r1, r2, r3);
0x00011ed8 subs r3, r0, 0 | r3 = r0 - 0;
0x00011eda str r3, [sp, 0x2c] | var_2ch = r3;
| if (r3 <= r0) {
0x00011edc ble.w 0x11d98 | goto label_1;
| }
0x00011ee0 mov r0, fp | r0 = fp;
0x00011ee2 blx 0x8f9c | fcn_00008f9c ();
0x00011ee6 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00011ee8 add r6, r0 | r6 += r0;
0x00011eea cmp r6, r3 |
| if (r6 != r3) {
0x00011eec bne.w 0x11d98 | goto label_1;
| }
| label_8:
0x00011ef0 ldrd r5, fp, [sp, 0x1c] | __asm ("ldrd r5, fp, [var_1ch]");
0x00011ef4 b 0x11ddc | goto label_5;
| label_24:
0x00011ef6 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00011ef8 mov r2, r6 | r2 = r6;
0x00011efa ldr r0, [sp, 0x14] | r0 = var_14h;
0x00011efc mov r1, r8 | r1 = r8;
0x00011efe bl 0x1079e | r0 = fcn_0001079e (r0, r1, r2, r3);
0x00011f02 cmp r0, 0 |
| if (r0 > 0) {
0x00011f04 bgt 0x11f14 | goto label_26;
| }
| label_9:
0x00011f06 cmp r4, 0 |
| if (r4 != 0) {
0x00011f08 bne 0x11e46 | goto label_6;
| }
0x00011f0a mov r5, r4 | r5 = r4;
| label_10:
0x00011f0c mov r0, r7 | r0 = r7;
0x00011f0e blx 0x926c | fcn_0000926c ();
0x00011f12 b 0x11db0 | goto label_7;
| label_26:
0x00011f14 cmp r6, r0 |
| if (r6 == r0) {
0x00011f16 beq 0x11ef0 | goto label_8;
| }
0x00011f18 b 0x11f06 | goto label_9;
| label_25:
0x00011f1a ldr r5, [pc, 0x48] | r5 = *(0x11f66);
0x00011f1c b 0x11d98 | goto label_1;
| label_23:
0x00011f1e mvn r5, 0x1f6 | r5 = ~0x1f6;
0x00011f22 b 0x11f0c | goto label_10;
| label_14:
0x00011f24 cmp r3, 0x62 |
| if (r3 != 0x62) {
0x00011f26 bne.w 0x11cda | goto label_0;
| }
0x00011f2a ldr r2, [sp, 0x34] | r2 = var_34h;
0x00011f2c mov r3, r2 | r3 = r2;
0x00011f2e ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00011f30 ldr r1, [r3], 8 | r1 = *(r3);
| r3 += 8;
0x00011f34 str r3, [sp, 0x34] | var_34h = r3;
0x00011f36 cmp r2, 0 |
| if (r2 == 0) {
0x00011f38 beq.w 0x11cda | goto label_0;
| }
0x00011f3c ldr r3, [sp, 0x18] | r3 = var_18h;
0x00011f3e ldr r0, [sp, 0x14] | r0 = var_14h;
0x00011f40 str r2, [sp, 0x1c] | var_1ch = r2;
0x00011f42 bl 0x1079e | fcn_0001079e (r0, r1, r2, r3);
0x00011f46 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00011f48 cmp r2, r0 |
| if (r2 == r0) {
0x00011f4a beq.w 0x11cda | goto label_0;
| }
| label_11:
0x00011f4e movs r5, 0 | r5 = 0;
0x00011f50 b 0x11db0 | goto label_7;
| label_13:
0x00011f52 mvn r5, 0x67 | r5 = ~0x67;
0x00011f56 b 0x11db0 | goto label_7;
| label_19:
0x00011f58 mov r0, r5 | r0 = r5;
0x00011f5a add sp, 0x4c |
0x00011f5c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00011f5e ldr r7, [pc, 0x3c0] | r7 = *(0x12322);
0x00011f60 add sp, 8 |
0x00011f62 bx lr | return;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x120a2 */
| #include <stdint.h>
|
; (fcn) fcn.000120a2 () | void fcn_000120a2 (uint32_t arg1, uint32_t arg2) {
| int16_t var_4h;
| int16_t var_2ch;
| int16_t var_ach;
| r0 = arg1;
| r1 = arg2;
0x000120a2 ldr r2, [pc, 0xd0] |
0x000120a4 ldr r3, [pc, 0xd0] | r3 = *(0x12178);
0x000120a6 push {r4, r5, r6, lr} |
0x000120a8 sub sp, 0xb0 |
0x000120aa add r2, pc | r2 = 0x24224;
0x000120ac mov r6, r1 | r6 = r1;
0x000120ae mov r4, r0 | r4 = r0;
0x000120b0 ldr r3, [r2, r3] |
0x000120b2 ldr r3, [r3] | r3 = *(0x24224);
0x000120b4 str r3, [sp, 0xac] | var_ach = r3;
0x000120b6 mov.w r3, 0 | r3 = 0;
0x000120ba cmp r0, 0 |
| if (r0 == 0) {
0x000120bc beq 0x12160 | goto label_1;
| }
0x000120be cmp r1, 0 |
| if (r1 == 0) {
0x000120c0 beq 0x12160 | goto label_1;
| }
0x000120c2 movs r3, 0 | r3 = 0;
0x000120c4 str r3, [r1] | *(r1) = r3;
0x000120c6 blx 0x8f9c | fcn_00008f9c ();
0x000120ca add r2, sp, 4 | r2 += var_4h;
0x000120cc mov r1, r0 | r1 = r0;
0x000120ce mov r0, r4 | r0 = r4;
0x000120d0 bl 0x11ab4 | r0 = fcn_00011ab4 (r0, r1, r2);
0x000120d2 ldc2l p6, c4, [r0], 0x10 | __asm ("ldc2l p6, c4, [r0], 0x10");
0x000120d6 cmp r0, 0 |
| if (r0 != 0) {
0x000120d8 bne 0x12148 | goto label_0;
| }
0x000120da mov.w r0, 0x1e0 | r0 = 0x1e0;
0x000120de blx 0x8e30 | r0 = vfprintf_chk ()
0x000120e2 mov r5, r0 | r5 = r0;
0x000120e4 cmp r0, 0 |
| if (r0 == 0) {
0x000120e6 beq 0x12166 | goto label_2;
| }
0x000120e8 mov.w r2, 0x150 | r2 = 0x150;
0x000120ec mov r1, r4 | r1 = r4;
0x000120ee str.w r4, [r0, 0x1d8] | __asm ("str.w r4, aav.0x000000ff");
0x000120f2 adds r0, 0x88 | r0 += 0x88;
0x000120f4 blx 0x9144 | fcn_00009144 ();
0x000120f8 mov r2, r4 | r2 = r4;
0x000120fa movs r1, 1 | r1 = 1;
0x000120fc ldrh.w r0, [sp, 0x2c] | r0 = var_2ch;
0x00012100 blx 0x9528 | r0 = fcn_00009528 ();
0x00012104 adds r2, r0, 1 | r2 = r0 + 1;
0x00012106 mov r1, r0 | r1 = r0;
| if (r2 != r0) {
0x00012108 beq 0x1211a |
0x0001210a mov r0, r5 | r0 = r5;
0x0001210c bl 0x106e0 | r0 = fcn_000106e0 (r0, r1);
| if (r0 == 0) {
0x00012110 cbz r0, 0x12120 | goto label_3;
| }
0x00012112 movs r1, 2 | r1 = 2;
0x00012114 mov r0, r5 | r0 = r5;
0x00012116 bl 0x10712 | fcn_00010712 (r0);
0x00012118 invalid |
| }
0x0001211a mvn r4, 0xcf | r4 = ~0xcf;
0x0001211e b 0x12146 | goto label_4;
| label_3:
0x00012120 ldrh.w r3, [sp, 0x2c] | r3 = var_2ch;
0x00012124 add r1, sp, 0x2c | r1 += var_2ch;
0x00012126 ldr r0, [r5] | r0 = *(r5);
0x00012128 cmp r3, 0xa |
0x0001212a ite eq |
| if (r3 != 0xa) {
0x0001212c moveq r2, 0x1c | r2 = 0x1c;
| }
| if (r3 == 0xa) {
0x0001212e movne r2, 0x10 | r2 = 0x10;
| }
0x00012130 blx 0x96c0 | r0 = fcn_000096c0 ();
0x00012134 adds r3, r0, 1 | r3 = r0 + 1;
0x00012136 mov r4, r0 | r4 = r0;
| if (r3 == r0) {
0x00012138 bne 0x12146 |
0x0001213a mvn r4, 0xcb | r4 = ~0xcb;
0x0001213e movs r1, 2 | r1 = 2;
0x00012140 mov r0, r5 | r0 = r5;
0x00012142 bl 0x10712 | fcn_00010712 (r0);
| }
| label_4:
0x00012146 str r5, [r6] | *(r6) = r5;
| do {
| label_0:
0x00012148 ldr r2, [pc, 0x30] |
0x0001214a ldr r3, [pc, 0x2c] | r3 = *(0x1217a);
0x0001214c add r2, pc | r2 = 0x242cc;
0x0001214e ldr r3, [r2, r3] | r3 = *(0x242cc);
0x00012150 ldr r2, [r3] | r2 = *(0x242cc);
0x00012152 ldr r3, [sp, 0xac] | r3 = var_ach;
0x00012154 eors r2, r3 | r2 ^= r3;
0x00012156 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0001215a beq 0x1216c | goto label_5;
| }
0x0001215c blx 0x8b7c | fcn_00008b7c ();
| label_1:
0x00012160 mvn r4, 0x64 | r4 = ~0x64;
0x00012164 b 0x12148 |
| } while (1);
| label_2:
0x00012166 mvn r4, 0x67 | r4 = ~0x67;
0x0001216a b 0x12148 | goto label_0;
| label_5:
0x0001216c mov r0, r4 | r0 = r4;
0x0001216e add sp, 0xb0 |
0x00012170 pop {r4, r5, r6, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x1331c */
| #include <stdint.h>
|
; (fcn) fcn.0001331c () | void fcn_0001331c (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_40h;
| int16_t var_50h;
| int16_t var_70h;
| int32_t var_70h_2;
| int16_t var_90h;
| int16_t var_a8h;
| int16_t var_c4h;
| r0 = arg1;
| r1 = arg2;
0x0001331c ldr r2, [pc, 0x1a0] |
0x0001331e ldr r3, [pc, 0x1a4] | r3 = *(0x134c6);
0x00013320 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00013324 mov r4, r1 | r4 = r1;
0x00013326 add r2, pc | r2 = 0x267ea;
0x00013328 sub sp, 0xcc |
0x0001332a mov r6, r0 | r6 = r0;
0x0001332c movs r1, 0 | r1 = 0;
0x0001332e ldr r3, [r2, r3] |
0x00013330 mov r0, r4 | r0 = r4;
0x00013332 ldr r3, [r3] | r3 = *(0x267ea);
0x00013334 str r3, [sp, 0xc4] | var_c4h = r3;
0x00013336 mov.w r3, 0 | r3 = 0;
0x0001333a blx 0x8c64 | fcn_00008c64 ();
0x0001333e ldr r1, [pc, 0x188] |
0x00013340 mov r0, r6 | r0 = r6;
0x00013342 add r1, pc | r1 = 0x26810;
0x00013344 blx 0x9420 | r0 = fcn_00009420 ();
0x00013348 subs r1, r0, 0 | r1 = r0 - 0;
0x0001334a mov r5, r0 | r5 = r0;
0x0001334c it ne |
| if (r1 == r0) {
0x0001334e movne r1, 1 | r1 = 1;
| }
0x00013350 mov r0, r4 | r0 = r4;
0x00013352 blx 0x87f0 | fcn_000087f0 ();
| if (r5 == 0) {
0x00013356 cbnz r5, 0x1335e |
| label_0:
0x00013358 mov.w r5, -1 | r5 = -1;
0x0001335c b 0x1346e | goto label_5;
| }
0x0001335e mov r0, r5 | r0 = r5;
0x00013360 blx 0x91dc | r0 = fcn_000091dc ();
0x00013364 adds r3, r0, 1 | r3 = r0 + 1;
| if (r3 == r0) {
0x00013366 beq.w 0x134ae | goto label_6;
| }
0x0001336a add r1, sp, 0x40 | r1 += var_40h;
0x0001336c blx 0x9540 | fcn_00009540 ();
0x00013370 adds r0, 1 | r0++;
| if (r0 == 1) {
0x00013372 beq.w 0x134ae | goto label_6;
| }
0x00013376 mov r0, r5 | r0 = r5;
0x00013378 blx 0x926c | fcn_0000926c ();
0x0001337c ldr r3, [sp, 0x50] | r3 = var_50h;
0x0001337e and r3, r3, 0xf000 | r3 &= 0xf000;
0x00013382 cmp.w r3, 0x4000 |
| if (r3 != 0x4000) {
0x00013386 bne 0x133f2 | goto label_7;
| }
0x00013388 movs r1, 1 | r1 = 1;
| label_1:
0x0001338a mov r0, r4 | r0 = r4;
0x0001338c blx 0x9414 | fcn_00009414 ();
0x00013390 ldrd r2, r3, [sp, 0x70] | __asm ("ldrd r2, r3, [var_70h]");
0x00013394 mov r0, r4 | r0 = r4;
0x00013396 blx 0x8f14 | fcn_00008f14 ();
0x0001339a ldr r1, [sp, 0x90] | r1 = var_90h;
0x0001339c mov r0, r4 | r0 = r4;
0x0001339e blx 0x9534 | fcn_00009534 ();
0x000133a2 movs r1, 0 | r1 = 0;
0x000133a4 mov r0, r4 | r0 = r4;
0x000133a6 blx 0x8c64 | fcn_00008c64 ();
0x000133aa movs r1, 0x2e | r1 = 0x2e;
0x000133ac mov r0, r6 | r0 = r6;
0x000133ae blx 0x9354 | r0 = fcn_00009354 ();
0x000133b2 cmp r0, 0 |
| if (r0 == 0) {
0x000133b4 beq 0x13486 | goto label_8;
| }
0x000133b6 ldr.w sl, [pc, 0x114] |
0x000133ba adds r5, r0, 1 | r5 = r0 + 1;
0x000133bc mov.w r8, 0x45 | r8 = 0x45;
0x000133c0 movs r7, 0 | r7 = 0;
0x000133c2 mov.w fp, 0xc |
0x000133c6 add sl, pc | sl = 0x26898;
| do {
0x000133c8 add.w r6, r7, r8 | r6 = r7 + r8;
0x000133cc mov r0, r5 | r0 = r5;
0x000133ce asrs r6, r6, 1 | r6 >>= 1;
0x000133d0 mla sb, fp, r6, sl | __asm ("mla sb, fp, r6, sl");
0x000133d4 ldr.w r1, [sb, 0x18] | r1 = *((sb + 0x18));
0x000133d8 blx 0x8c04 | r0 = fcn_00008c04 ();
0x000133dc cmp r0, 0 |
| if (r0 <= 0) {
0x000133de ble 0x133fc | goto label_9;
| }
0x000133e0 adds r7, r6, 1 | r7 = r6 + 1;
| label_2:
0x000133e2 cmp r8, r7 |
0x000133e4 bge 0x133c8 |
| } while (r8 >= r7);
0x000133e6 ldr.w r8, [pc, 0xe8] |
0x000133ea ldr r7, [pc, 0xe8] |
0x000133ec add r8, pc | r8 = 0x268c2;
0x000133ee add r7, pc | r7 = 0x268c8;
0x000133f0 b 0x13408 | goto label_10;
| label_7:
0x000133f2 cmp.w r3, 0x8000 |
| if (r3 != 0x8000) {
0x000133f6 bne 0x13358 | goto label_0;
| }
0x000133f8 movs r1, 0 | r1 = 0;
0x000133fa b 0x1338a | goto label_1;
| if (r1 != 0) {
| label_9:
0x000133fc beq 0x13404 |
0x000133fe add.w r8, r6, -1 | r8 = r6 + -1;
0x00013402 b 0x133e2 | goto label_2;
| }
0x00013404 ldrd r7, r8, [sb, 0x1c] | __asm ("ldrd r7, r8, [sb, 0x1c]");
| do {
| label_10:
0x00013408 mov r0, r7 | r0 = r7;
0x0001340a blx 0x8f9c | r0 = fcn_00008f9c ();
0x0001340e mov r5, r0 | r5 = r0;
0x00013410 mov r0, r8 | r0 = r8;
0x00013412 blx 0x8f9c | r0 = fcn_00008f9c ();
0x00013416 add r5, r0 | r5 += r0;
0x00013418 adds r5, 2 | r5 += 2;
0x0001341a mov r0, r5 | r0 = r5;
0x0001341c blx 0x8e30 | r0 = vfprintf_chk ()
0x00013420 mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x00013422 cbz r0, 0x13448 |
0x00013424 ldr r3, [pc, 0xb0] |
0x00013426 movs r2, 1 | r2 = 1;
0x00013428 mov r1, r5 | r1 = r5;
0x0001342a strd r7, r8, [sp, 4] | __asm ("strd r7, r8, [var_4h]");
0x0001342e add r3, pc | r3 = 0x2690a;
0x00013430 str r3, [sp] | *(sp) = r3;
0x00013432 mov.w r3, -1 | r3 = -1;
0x00013436 blx 0x96fc | r0 = fcn_000096fc ();
0x0001343a cmp r0, 0 |
| if (r0 >= 0) {
0x0001343c blt 0x13442 |
0x0001343e cmp r5, r0 |
| if (r5 > r0) {
0x00013440 bhi 0x13492 | goto label_11;
| }
| }
0x00013442 mov r0, r6 | r0 = r6;
0x00013444 blx 0x894c | fcn_0000894c ();
| }
| label_3:
0x00013448 mvn r5, 0x67 | r5 = ~0x67;
| label_4:
0x0001344c mov r0, r4 | r0 = r4;
0x0001344e blx 0x8b24 | ixmlNode_appendChild ();
0x00013452 str r0, [sp, 0x10] | var_10h = r0;
0x00013454 mov r0, r4 | r0 = r4;
0x00013456 blx 0x900c | fcn_0000900c ();
0x0001345a add r1, sp, 0x14 | r1 += var_14h;
0x0001345c add r0, sp, 0x10 | r0 += var_10h;
0x0001345e blx 0x8768 | fcn_00008768 ();
0x00013462 add r1, sp, 0xa8 | r1 += var_a8h;
0x00013464 blx 0x91e8 | fcn_000091e8 ();
0x00013468 mov r0, r4 | r0 = r4;
0x0001346a blx 0x87a8 | fcn_000087a8 ();
| label_5:
0x0001346e ldr r2, [pc, 0x6c] |
0x00013470 ldr r3, [pc, 0x50] | r3 = *(0x134c4);
0x00013472 add r2, pc | r2 = 0x26954;
0x00013474 ldr r3, [r2, r3] | r3 = *(0x26954);
0x00013476 ldr r2, [r3] | r2 = *(0x26954);
0x00013478 ldr r3, [sp, 0xc4] | r3 = var_c4h;
0x0001347a eors r2, r3 | r2 ^= r3;
0x0001347c mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00013480 beq 0x134b6 | goto label_12;
| }
0x00013482 blx 0x8b7c | fcn_00008b7c ();
| label_8:
0x00013486 ldr.w r8, [pc, 0x58] |
0x0001348a ldr r7, [pc, 0x58] |
0x0001348c add r8, pc | r8 = 0x26972;
0x0001348e add r7, pc | r7 = 0x26978;
0x00013490 b 0x13408 |
| } while (1);
| label_11:
0x00013492 mov r1, r6 | r1 = r6;
0x00013494 mov r0, r4 | r0 = r4;
0x00013496 blx 0x8c64 | fcn_00008c64 ();
0x0001349a mov r0, r6 | r0 = r6;
0x0001349c blx 0x894c | fcn_0000894c ();
0x000134a0 mov r0, r4 | r0 = r4;
0x000134a2 blx 0x8e08 | r0 = fcn_00008e08 ();
0x000134a6 cmp r0, 0 |
| if (r0 == 0) {
0x000134a8 beq 0x13448 | goto label_3;
| }
0x000134aa movs r5, 0 | r5 = 0;
0x000134ac b 0x1344c | goto label_4;
| label_6:
0x000134ae mov r0, r5 | r0 = r5;
0x000134b0 blx 0x926c | fcn_0000926c ();
0x000134b4 b 0x13358 | goto label_0;
| label_12:
0x000134b6 mov r0, r5 | r0 = r5;
0x000134b8 add sp, 0xcc |
0x000134ba pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x13574 */
| #include <stdint.h>
|
; (fcn) fcn.00013574 () | void fcn_00013574 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_14h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00013574 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00013578 mov sb, r2 | sb = r2;
0x0001357a ldr r2, [pc, 0xd4] |
0x0001357c mov r7, r3 | r7 = r3;
0x0001357e mov r6, r0 | r6 = r0;
0x00013580 sub sp, 0x34 |
0x00013582 ldr r3, [pc, 0xd0] | r3 = *(0x13656);
0x00013584 mov r8, r1 | r8 = r1;
0x00013586 ldr r0, [pc, 0xd0] |
0x00013588 add r2, pc | r2 = 0x26bde;
0x0001358a ldr r3, [r2, r3] |
0x0001358c add r0, pc |
0x0001358e add.w r0, r0, 0x360 | r0 = 0x26f4a;
0x00013592 ldr r3, [r3] | r3 = *(0x26bde);
0x00013594 str r3, [sp, 0x2c] | var_2ch = r3;
0x00013596 mov.w r3, 0 | r3 = 0;
0x0001359a bl 0x132d4 | fcn_000132d4 (r0);
0x0001359e cmp r6, 0 |
| if (r6 == 0) {
0x000135a0 beq 0x13630 | goto label_1;
| }
0x000135a2 add r4, sp, 0x14 | r4 += var_14h;
0x000135a4 add r5, sp, 4 | r5 += var_4h;
0x000135a6 mov r0, r4 | r0 = r4;
0x000135a8 bl 0x1033a | fcn_0001033a (r0);
0x000135ac mov r0, r5 | r0 = r5;
0x000135ae bl 0x1033a | fcn_0001033a (r0);
0x000135b2 movs r3, 0 | r3 = 0;
0x000135b4 str r3, [sp, 0x28] | var_28h = r3;
0x000135b6 ldrb r3, [r6] | r3 = *(r6);
0x000135b8 cmp r3, 0x2f |
0x000135ba bne 0x135e0 |
| while (r0 == 0) {
0x000135bc mov r1, r6 | r1 = r6;
0x000135be mov r0, r5 | r0 = r5;
0x000135c0 bl 0x10416 | r0 = fcn_00010416 (r0, r1);
0x000135c4 mov r6, r0 | r6 = r0;
| if (r0 == 0) {
0x000135c6 cbz r0, 0x135f0 | goto label_2;
| }
| label_0:
0x000135c8 mov r0, r5 | r0 = r5;
0x000135ca mvn r6, 0x67 | r6 = ~0x67;
0x000135ce bl 0x10348 | fcn_00010348 (r0);
0x000135d2 mov r0, r4 | r0 = r4;
0x000135d4 bl 0x10348 | fcn_00010348 (r0);
0x000135d8 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000135da blx 0x894c | fcn_0000894c ();
0x000135de b 0x13630 | goto label_1;
0x000135e0 ldr r1, [pc, 0x78] |
0x000135e2 mov r0, r5 | r0 = r5;
0x000135e4 add r1, pc | r1 = 0x26c44;
0x000135e6 bl 0x10394 | r0 = fcn_00010394 (r0, r1);
0x000135ea cmp r0, 0 |
0x000135ec beq 0x135bc |
| }
0x000135ee b 0x135c8 | goto label_0;
| label_2:
0x000135f0 movs r0, 4 | r0 = 4;
0x000135f2 blx 0x8e30 | vfprintf_chk ()
0x000135f6 str r0, [sp, 0x28] | var_28h = r0;
0x000135f8 cmp r0, 0 |
| if (r0 == 0) {
0x000135fa beq 0x135c8 | goto label_0;
| }
0x000135fc movs r3, 1 | r3 = 1;
0x000135fe mov r2, sb | r2 = sb;
0x00013600 str r3, [r0] | *(r0) = r3;
0x00013602 mov r1, r8 | r1 = r8;
0x00013604 mov r0, r4 | r0 = r4;
0x00013606 bl 0x1047e | fcn_0001047e (r0, r1, r2);
0x0001360a str r7, [sp, 0x24] | var_24h = r7;
0x0001360c ldr r7, [pc, 0x50] |
0x0001360e add r7, pc | r7 = 0x26c72;
0x00013610 mov r0, r7 | r0 = r7;
0x00013612 add.w r4, r7, 0x360 | r4 = r7 + 0x360;
0x00013616 blx 0x8994 | r0 = fcn_00008994 ();
0x0001361a ldm r5!, {r0, r1, r2, r3} | r0 = *(r5!);
| r1 = *((r5! + 4));
| r2 = *((r5! + 8));
| r3 = *((r5! + 12));
0x0001361c stm r4!, {r0, r1, r2, r3} | *(r4!) = r0;
| *((r4! + 4)) = r1;
| *((r4! + 8)) = r2;
| *((r4! + 12)) = r3;
0x0001361e ldm r5!, {r0, r1, r2, r3} | r0 = *(r5!);
| r1 = *((r5! + 4));
| r2 = *((r5! + 8));
| r3 = *((r5! + 12));
0x00013620 stm r4!, {r0, r1, r2, r3} | *(r4!) = r0;
| *((r4! + 4)) = r1;
| *((r4! + 8)) = r2;
| *((r4! + 12)) = r3;
0x00013622 ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x00013626 stm.w r4, {r0, r1} | *(r4) = r0;
| *((r4 + 4)) = r1;
0x0001362a mov r0, r7 | r0 = r7;
0x0001362c blx 0x869c | fcn_0000869c ();
| label_1:
0x00013630 ldr r2, [pc, 0x30] |
0x00013632 ldr r3, [pc, 0x20] | r3 = *(0x13656);
0x00013634 add r2, pc | r2 = 0x26c9c;
0x00013636 ldr r3, [r2, r3] | r3 = *(0x26c9c);
0x00013638 ldr r2, [r3] | r2 = *(0x26c9c);
0x0001363a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0001363c eors r2, r3 | r2 ^= r3;
0x0001363e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00013642 beq 0x13648 |
0x00013644 blx 0x8b7c | fcn_00008b7c ();
| }
0x00013648 mov r0, r6 | r0 = r6;
0x0001364a add sp, 0x34 |
0x0001364c pop.w {r4, r5, r6, r7, r8, sb, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x147e0 */
| #include <stdint.h>
|
; (fcn) fcn.000147e0 () | void fcn_000147e0 (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000147e0 invalid |
0x000147e4 mov r6, r0 | r6 = r0;
0x000147e6 ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x000147e8 mov r5, r1 | r5 = r1;
0x000147ea movs r7, 0 | r7 = 0;
0x000147ec mov.w r8, 0xa8 | r8 = 0xa8;
0x000147f0 blx 0x8f9c | r0 = fcn_00008f9c ();
0x000147f4 add.w sb, r0, 1 | sb = r0 + 1;
0x000147f8 str r7, [r5] | *(r5) = r7;
0x000147fa mov r0, sb | r0 = sb;
0x000147fc blx 0x8e30 | vfprintf_chk ()
0x00014800 str r0, [r5, 4] | *((r5 + 4)) = r0;
0x00014802 mov r4, r0 | r4 = r0;
0x00014804 ldr r0, [r6] | r0 = *(r6);
0x00014806 mul r0, r8, r0 | r0 = r8 * r0;
0x0001480a blx 0x8e30 | vfprintf_chk ()
0x0001480e str r0, [r5, 8] | *((r5 + 8)) = r0;
0x00014810 cmp r4, 0 |
| if (r4 == 0) {
0x00014812 beq 0x1488a | goto label_1;
| }
0x00014814 cmp r0, 0 |
| if (r0 == 0) {
0x00014816 beq 0x1488a | goto label_1;
| }
0x00014818 ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x0001481a mov r2, sb | r2 = sb;
0x0001481c mov r0, r4 | r0 = r4;
0x0001481e blx 0x8a14 | fcn_00008a14 ();
| do {
0x00014822 ldr r3, [r6] | r3 = *(r6);
0x00014824 cmp r3, r7 |
| if (r3 <= r7) {
0x00014826 bhi 0x14830 |
0x00014828 movs r0, 1 | r0 = 1;
0x0001482a str r3, [r5] | *(r5) = r3;
| label_0:
0x0001482c pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| }
0x00014830 mul r2, r8, r7 | r2 = r8 * r7;
0x00014834 ldr r0, [r6, 8] | r0 = *((r6 + 8));
0x00014836 ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x00014838 adds r7, 1 | r7++;
0x0001483a adds r4, r0, r2 | r4 = r0 + r2;
0x0001483c ldr r0, [r0, r2] | r0 = *((r0 + r2));
0x0001483e adds r3, r1, r2 | r3 = r1 + r2;
0x00014840 str r0, [r1, r2] | *((r1 + r2)) = r0;
0x00014842 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x00014844 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x00014846 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x00014848 str r1, [r3, 8] | *((r3 + 8)) = r1;
0x0001484a ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0001484c subs r1, r1, r0 | r1 -= r0;
0x0001484e add r1, r2 | r1 += r2;
0x00014850 str r1, [r3, 4] | *((r3 + 4)) = r1;
0x00014852 ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x00014854 str r1, [r3, 0xc] | *((r3 + 0xc)) = r1;
0x00014856 ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x00014858 str r1, [r3, 0x14] | *((r3 + 0x14)) = r1;
0x0001485a ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x0001485c subs r1, r1, r0 | r1 -= r0;
0x0001485e add r1, r2 | r1 += r2;
0x00014860 str r1, [r3, 0x10] | *((r3 + 0x10)) = r1;
0x00014862 ldr r1, [r4, 0x1c] | r1 = *((r4 + 0x1c));
0x00014864 str r1, [r3, 0x1c] | *((r3 + 0x1c)) = r1;
0x00014866 ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x00014868 subs r1, r1, r0 | r1 -= r0;
0x0001486a add r1, r2 | r1 += r2;
0x0001486c str r1, [r3, 0x18] | *((r3 + 0x18)) = r1;
0x0001486e ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x00014870 str r1, [r3, 0x24] | *((r3 + 0x24)) = r1;
0x00014872 ldr r1, [r4, 0x20] | r1 = *((r4 + 0x20));
0x00014874 subs r1, r1, r0 | r1 -= r0;
0x00014876 add.w r0, r3, 0x28 | r0 = r3 + 0x28;
0x0001487a add r2, r1 | r2 += r1;
0x0001487c add.w r1, r4, 0x28 | r1 = r4 + 0x28;
0x00014880 str r2, [r3, 0x20] | *((r3 + 0x20)) = r2;
0x00014882 movs r2, 0x80 | r2 = 0x80;
0x00014884 blx 0x8a14 | fcn_00008a14 ();
0x00014888 b 0x14822 |
| } while (1);
| label_1:
0x0001488a mvn r0, 0x67 | r0 = ~0x67;
0x0001488e b 0x1482c | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x14b88 */
| #include <stdint.h>
|
; (fcn) fcn.00014b88 () | void fcn_00014b88 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int32_t var_4h_2;
| int32_t var_8h_2;
| int32_t var_10h;
| int32_t var_14h_2;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int16_t var_bch;
| int16_t var_c8h;
| int16_t var_cch;
| int16_t var_d0h;
| int16_t var_d4h;
| int16_t var_d8h;
| int16_t var_e0h;
| int16_t var_164h;
| r0 = arg1;
| r1 = arg2;
| label_1:
0x00008b3c bx pc | return void (*pc)() ();
0x00014b88 ldr r2, [pc, 0x260] |
0x00014b8a ldr r3, [pc, 0x264] | r3 = *(0x14df2);
0x00014b8c push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00014b90 sub sp, 0x168 |
0x00014b92 add r2, pc | r2 = 0x29982;
0x00014b94 mov r7, r1 | r7 = r1;
0x00014b96 mov r5, r0 | r5 = r0;
0x00014b98 ldr r3, [r2, r3] |
0x00014b9a ldr r3, [r3] | r3 = *(0x29982);
0x00014b9c str r3, [sp, 0x164] | var_164h = r3;
0x00014b9e mov.w r3, 0 | r3 = 0;
| if (r0 != 0) {
0x00014ba2 cbnz r0, 0x14bdc | goto label_13;
| }
0x00014ba4 cbnz r1, 0x14bc4 |
| while (r0 != 1) {
| label_2:
0x00014ba6 movs r6, 0 | r6 = 0;
| label_6:
0x00014ba8 ldr r2, [pc, 0x248] |
0x00014baa ldr r3, [pc, 0x244] | r3 = *(0x14df2);
0x00014bac add r2, pc | r2 = 0x299a4;
0x00014bae ldr r3, [r2, r3] | r3 = *(0x299a4);
0x00014bb0 ldr r2, [r3] | r2 = *(0x299a4);
0x00014bb2 ldr r3, [sp, 0x164] | r3 = var_164h;
0x00014bb4 eors r2, r3 | r2 ^= r3;
0x00014bb6 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00014bba bne 0x14bd8 |
0x00014bbc mov r0, r6 | r0 = r6;
0x00014bbe add sp, 0x168 |
0x00014bc0 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
0x00014bc4 ldr r2, [pc, 0x230] |
0x00014bc6 add r2, pc | r2 = 0x299c2;
| label_0:
0x00014bc8 ldr r3, [pc, 0x224] | r3 = *(0x14df0);
0x00014bca ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00014bcc ldr r2, [r3] | r2 = *(0x14df0);
0x00014bce ldr r3, [sp, 0x164] | r3 = var_164h;
0x00014bd0 eors r2, r3 | r2 ^= r3;
0x00014bd2 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00014bd6 beq 0x14bfc | goto label_14;
| }
| }
| label_3:
0x00014bd8 blx 0x8b7c | fcn_00008b7c ();
| label_13:
0x00014bdc mov r0, r1 | r0 = r1;
0x00014bde blx 0x8f9c | fcn_00008f9c ();
0x00014be2 add r2, sp, 0xbc | r2 += var_bch;
0x00014be4 mov r1, r0 | r1 = r0;
0x00014be6 mov r4, r0 | r4 = r0;
0x00014be8 mov r0, r7 | r0 = r7;
0x00014bea bl 0x14a8c | r0 = fcn_00014a8c (r0, r1, r2);
0x00014bee cmp r0, 1 |
0x00014bf0 bne 0x14ba6 |
| }
0x00014bf2 ldr r3, [sp, 0xbc] | r3 = var_bch;
| if (r3 == 0) {
0x00014bf4 cbnz r3, 0x14c08 |
0x00014bf6 ldr r2, [pc, 0x204] |
0x00014bf8 add r2, pc | r2 = 0x299fa;
0x00014bfa b 0x14bc8 | goto label_0;
| label_14:
0x00014bfc mov r0, r7 | r0 = r7;
| label_4:
0x00014bfe add sp, 0x168 |
0x00014c00 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00014c04 b.w 0x8b3c | goto label_1;
| }
0x00014c08 mov r0, r5 | r0 = r5;
0x00014c0a add.w r8, sp, 0x14 | r8 += var_14h;
0x00014c0e blx 0x8f9c | fcn_00008f9c ();
0x00014c12 mov r2, r8 | r2 = r8;
0x00014c14 mov r1, r0 | r1 = r0;
0x00014c16 mov r6, r0 | r6 = r0;
0x00014c18 mov r0, r5 | r0 = r5;
0x00014c1a bl 0x14a8c | r0 = fcn_00014a8c (r0, r1, r2);
0x00014c1e cmp r0, 1 |
0x00014c20 mov sb, r0 | sb = r0;
| if (r0 != 1) {
0x00014c22 bne 0x14ba6 | goto label_2;
| }
0x00014c24 ldr.w sl, [r8] | sl = *(r8);
0x00014c28 cmp.w sl, 0 |
| if (sl != 0) {
0x00014c2c bne 0x14ba6 | goto label_2;
| }
| if (r4 != 0) {
0x00014c2e cbnz r4, 0x14c48 | goto label_15;
| }
0x00014c30 ldr r2, [pc, 0x1cc] |
0x00014c32 ldr r3, [pc, 0x1bc] | r3 = *(0x14df2);
0x00014c34 add r2, pc | r2 = 0x29a38;
0x00014c36 ldr r3, [r2, r3] | r3 = *(0x29a38);
0x00014c38 ldr r2, [r3] | r2 = *(0x29a38);
0x00014c3a ldr r3, [sp, 0x164] | r3 = var_164h;
0x00014c3c eors r2, r3 | r2 ^= r3;
0x00014c3e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00014c42 bne 0x14bd8 | goto label_3;
| }
0x00014c44 mov r0, r5 | r0 = r5;
0x00014c46 b 0x14bfe | goto label_4;
| label_15:
0x00014c48 adds r4, 2 | r4 += 2;
0x00014c4a add r4, r6 | r4 += r6;
0x00014c4c mov r0, r4 | r0 = r4;
0x00014c4e blx 0x8e30 | r0 = vfprintf_chk ()
0x00014c52 mov r6, r0 | r6 = r0;
0x00014c54 cmp r0, 0 |
| if (r0 == 0) {
0x00014c56 beq 0x14ba6 | goto label_2;
| }
0x00014c58 mov r2, r4 | r2 = r4;
0x00014c5a mov r1, sl | r1 = sl;
0x00014c5c blx 0x9144 | fcn_00009144 ();
0x00014c60 ldr.w r3, [r8, 4] | r3 = var_4h_2;
0x00014c64 mov r2, sb | r2 = sb;
0x00014c66 mov r1, r4 | r1 = r4;
0x00014c68 mov r0, r6 | r0 = r6;
0x00014c6a str r3, [sp, 8] | var_8h = r3;
0x00014c6c ldr.w r3, [r8, 8] | r3 = var_8h_2;
0x00014c70 str r3, [sp, 4] | var_4h = r3;
0x00014c72 ldr r3, [pc, 0x190] |
0x00014c74 add r3, pc | r3 = 0x29a7e;
0x00014c76 str r3, [sp] | *(sp) = r3;
0x00014c78 mov.w r3, -1 | r3 = -1;
0x00014c7c blx 0x96fc | r0 = fcn_000096fc ();
0x00014c80 cmp r0, 0 |
0x00014c82 bge 0x14c8c |
| while (r4 <= r0) {
| label_5:
0x00014c84 mov r0, r6 | r0 = r6;
0x00014c86 blx 0x894c | fcn_0000894c ();
0x00014c8a b 0x14ba6 | goto label_2;
0x00014c8c cmp r4, r0 |
0x00014c8e ble 0x14c84 |
| }
0x00014c90 ldr.w sb, [sp, 0xe0] | sb = var_e0h;
0x00014c94 adds r5, r6, r0 | r5 = r6 + r0;
0x00014c96 subs r4, r4, r0 | r4 -= r0;
0x00014c98 cmp.w sb, 0 |
| if (sb == 0) {
0x00014c9c beq 0x14cb8 | goto label_16;
| }
0x00014c9e ldr r2, [pc, 0x168] |
0x00014ca0 mov r3, r7 | r3 = r7;
0x00014ca2 mov r1, r4 | r1 = r4;
0x00014ca4 mov r0, r5 | r0 = r5;
0x00014ca6 add r2, pc | r2 = 0x29ab4;
0x00014ca8 blx 0x90f8 | r0 = fcn_000090f8 ();
0x00014cac cmp r0, 0 |
| if (r0 < 0) {
0x00014cae blt 0x14c84 | goto label_5;
| }
0x00014cb0 cmp r4, r0 |
| if (r4 > r0) {
0x00014cb2 bgt.w 0x14ba8 | goto label_6;
| }
0x00014cb6 b 0x14c84 | goto label_5;
| label_16:
0x00014cb8 ldr.w r3, [r8, 0x24] | r3 = var_24h;
| if (r3 == 0) {
0x00014cbc cbz r3, 0x14ce6 | goto label_17;
| }
0x00014cbe ldr.w r2, [r8, 0x20] | r2 = var_20h;
0x00014cc2 mov r1, r4 | r1 = r4;
0x00014cc4 mov r0, r5 | r0 = r5;
0x00014cc6 strd r3, r2, [sp, 4] | __asm ("strd r3, r2, [var_8h]");
0x00014cca movs r2, 1 | r2 = 1;
0x00014ccc ldr r3, [pc, 0x13c] |
0x00014cce add r3, pc | r3 = 0x29ade;
0x00014cd0 str r3, [sp] | *(sp) = r3;
0x00014cd2 mov.w r3, -1 | r3 = -1;
0x00014cd6 blx 0x96fc | r0 = fcn_000096fc ();
0x00014cda cmp r0, 0 |
| if (r0 < 0) {
0x00014cdc blt 0x14c84 | goto label_5;
| }
0x00014cde cmp r4, r0 |
| if (r4 <= r0) {
0x00014ce0 ble 0x14c84 | goto label_5;
| }
0x00014ce2 add r5, r0 | r5 += r0;
0x00014ce4 subs r4, r4, r0 | r4 -= r0;
| label_17:
0x00014ce6 ldr r3, [sp, 0xc8] | r3 = var_c8h;
| if (r3 != 0) {
0x00014ce8 cbnz r3, 0x14d14 | goto label_18;
| }
0x00014cea ldr r2, [pc, 0x124] |
0x00014cec mov r3, r7 | r3 = r7;
0x00014cee mov r1, r4 | r1 = r4;
0x00014cf0 mov r0, r5 | r0 = r5;
0x00014cf2 add r2, pc | r2 = 0x29b08;
0x00014cf4 blx 0x90f8 | fcn_000090f8 ();
| label_7:
0x00014cf8 mov r7, r5 | r7 = r5;
| label_8:
0x00014cfa cmp r0, 0 |
| if (r0 < 0) {
0x00014cfc blt 0x14c84 | goto label_5;
| }
| label_11:
0x00014cfe cmp r4, r0 |
| if (r4 <= r0) {
0x00014d00 ble 0x14c84 | goto label_5;
| }
0x00014d02 adds r1, r7, r0 | r1 = r7 + r0;
0x00014d04 mov r0, r5 | r0 = r5;
0x00014d06 subs r1, r1, r5 | r1 -= r5;
0x00014d08 bl 0x14900 | r0 = fcn_00014900 (r0, r1);
0x00014d0c cmp r0, 0 |
| if (r0 == 0) {
0x00014d0e beq.w 0x14ba8 | goto label_6;
| }
0x00014d12 b 0x14c84 | goto label_5;
| label_18:
0x00014d14 ldr.w r2, [r8, 0x14] | r2 = var_14h_2;
| if (r2 == 0) {
0x00014d18 cbnz r2, 0x14d32 |
0x00014d1a ldr r3, [pc, 0xf8] |
0x00014d1c movs r2, 1 | r2 = 1;
0x00014d1e mov r1, r4 | r1 = r4;
0x00014d20 mov r0, r5 | r0 = r5;
0x00014d22 str r7, [sp, 4] | var_4h = r7;
0x00014d24 add r3, pc | r3 = 0x29b3e;
0x00014d26 str r3, [sp] | *(sp) = r3;
0x00014d28 mov.w r3, -1 | r3 = -1;
0x00014d2c blx 0x96fc | fcn_000096fc ();
0x00014d30 b 0x14cf8 | goto label_7;
| }
0x00014d32 ldr r0, [sp, 0xd0] | r0 = var_d0h;
| if (r0 != 0) {
0x00014d34 cbnz r0, 0x14d82 | goto label_19;
| }
0x00014d36 ldr.w r3, [r8, 0x10] | r3 = var_10h;
0x00014d3a mov r7, r5 | r7 = r5;
0x00014d3c mov r1, r4 | r1 = r4;
0x00014d3e mov r0, r5 | r0 = r5;
0x00014d40 strd r2, r3, [sp, 4] | __asm ("strd r2, r3, [var_8h]");
0x00014d44 movs r2, 1 | r2 = 1;
0x00014d46 ldr r3, [pc, 0xd0] |
0x00014d48 add r3, pc | r3 = 0x29b66;
0x00014d4a str r3, [sp] | *(sp) = r3;
0x00014d4c mov.w r3, -1 | r3 = -1;
0x00014d50 blx 0x96fc | r0 = fcn_000096fc ();
| label_9:
0x00014d54 cmp r0, 0 |
| if (r0 < 0) {
0x00014d56 blt 0x14c84 | goto label_5;
| }
0x00014d58 cmp r4, r0 |
| if (r4 <= r0) {
0x00014d5a ble 0x14c84 | goto label_5;
| }
0x00014d5c ldr r3, [sp, 0xd8] | r3 = var_d8h;
0x00014d5e add r7, r0 | r7 += r0;
0x00014d60 subs r4, r4, r0 | r4 -= r0;
0x00014d62 cmp r3, 0 |
| if (r3 == 0) {
0x00014d64 beq 0x14dd6 | goto label_20;
| }
0x00014d66 ldr r2, [sp, 0xd4] | r2 = var_d4h;
0x00014d68 strd r3, r2, [sp, 4] | __asm ("strd r3, r2, [var_8h]");
0x00014d6a adds r2, 1 | r2++;
0x00014d6c ldr r3, [pc, 0xac] |
0x00014d6e add r3, pc | r3 = 0x29b8e;
| label_12:
0x00014d70 str r3, [sp] | *(sp) = r3;
0x00014d72 movs r2, 1 | r2 = 1;
0x00014d74 mov.w r3, -1 | r3 = -1;
0x00014d78 mov r1, r4 | r1 = r4;
0x00014d7a mov r0, r7 | r0 = r7;
0x00014d7c blx 0x96fc | fcn_000096fc ();
0x00014d80 b 0x14cfa | goto label_8;
| label_19:
0x00014d82 cmp r2, r4 |
| if (r2 > r4) {
0x00014d84 bhi.w 0x14c84 | goto label_5;
| }
0x00014d88 ldr.w r7, [r8, 0x10] | r7 = var_10h;
0x00014d8c movs r3, 1 | r3 = 1;
| do {
0x00014d8e ldrb.w r1, [r7, sb] | r1 = *((r7 + sb));
0x00014d92 mov ip, sb |
0x00014d94 cmp r1, 0x2f |
0x00014d96 strb.w r1, [r5, sb] | *((r5 + sb)) = r1;
0x00014d9a add.w sb, sb, 1 | sb++;
| if (r1 != 0x2f) {
0x00014d9e beq 0x14dce |
0x00014da0 cmp r1, 0x3f |
| if (r1 != 0x3f) {
0x00014da2 bne 0x14dd0 | goto label_21;
| }
0x00014da4 ldr r2, [sp, 0xcc] | r2 = var_cch;
0x00014da6 ldrb r2, [r2] | r2 = *(r2);
0x00014da8 cmp r2, 0x3f |
0x00014daa it eq |
| if (r2 != 0x3f) {
0x00014dac moveq r3, ip | r3 = ip;
| }
| label_10:
0x00014dae adds r7, r5, r3 | r7 = r5 + r3;
0x00014db0 subs r4, r4, r3 | r4 -= r3;
0x00014db2 ldr r3, [sp, 0xcc] | r3 = var_cch;
0x00014db4 movs r2, 1 | r2 = 1;
0x00014db6 mov r1, r4 | r1 = r4;
0x00014db8 strd r0, r3, [sp, 4] | __asm ("strd r0, r3, [var_8h]");
0x00014dbc mov r0, r7 | r0 = r7;
0x00014dbe ldr r3, [pc, 0x60] |
0x00014dc0 add r3, pc | r3 = 0x29be6;
0x00014dc2 str r3, [sp] | *(sp) = r3;
0x00014dc4 mov.w r3, -1 | r3 = -1;
0x00014dc8 blx 0x96fc | fcn_000096fc ();
0x00014dcc b 0x14d54 | goto label_9;
| }
0x00014dce mov r3, sb | r3 = sb;
| label_21:
0x00014dd0 cmp r2, sb |
0x00014dd2 bne 0x14d8e |
| } while (r2 != sb);
0x00014dd4 b 0x14dae | goto label_10;
| label_20:
0x00014dd6 ldr.w r0, [r8, 0x1c] | r0 = var_1ch;
0x00014dda cmp r0, 0 |
| if (r0 == 0) {
0x00014ddc beq 0x14cfe | goto label_11;
| }
0x00014dde ldr.w r3, [r8, 0x18] | r3 = var_18h;
0x00014de2 strd r0, r3, [sp, 4] | __asm ("strd r0, r3, [var_8h]");
0x00014de6 ldr r3, [pc, 0x3c] |
0x00014de8 add r3, pc | r3 = 0x29c12;
0x00014dea b 0x14d70 | goto label_12;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x1514c */
| #include <stdint.h>
|
; (fcn) fcn.0001514c () | void fcn_0001514c (int16_t arg1) {
| 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;
| r0 = arg1;
0x0001514c push {r4, r5, lr} |
0x0001514e mov r5, r0 | r5 = r0;
0x00015150 sub sp, 0x24 |
0x00015152 movs r0, 0x76 | r0 = 0x76;
0x00015154 blx 0x8e30 | r0 = vfprintf_chk ()
0x00015158 mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x0001515a cbz r0, 0x15196 |
0x0001515c mov r0, r5 | r0 = r5;
0x0001515e blx 0x8f9c | fcn_00008f9c ();
0x00015162 ldr r3, [pc, 0x38] |
0x00015164 adds r0, 2 | r0 += 2;
0x00015166 str r0, [sp, 0xc] | var_ch = r0;
0x00015168 movs r2, 1 | r2 = 1;
0x0001516a mov r0, r4 | r0 = r4;
0x0001516c add r3, pc | r3 = 0x2a30e;
0x0001516e str r3, [sp, 0x18] | var_18h = r3;
0x00015170 ldr r3, [pc, 0x2c] |
0x00015172 add r3, pc | r3 = 0x2a316;
0x00015174 str r3, [sp, 0x14] | var_14h = r3;
0x00015176 ldr r3, [pc, 0x2c] |
0x00015178 add r3, pc | r3 = 0x2a322;
0x0001517a str r3, [sp, 0x10] | var_10h = r3;
0x0001517c ldr r3, [pc, 0x28] |
0x0001517e add r3, pc | r3 = 0x2a32a;
0x00015180 str r3, [sp, 8] | var_8h = r3;
0x00015182 ldr r3, [pc, 0x28] |
0x00015184 add r3, pc | r3 = 0x2a336;
0x00015186 str r3, [sp, 4] | var_4h = r3;
0x00015188 ldr r3, [pc, 0x24] |
0x0001518a add r3, pc | r3 = 0x2a33e;
0x0001518c str r3, [sp] | *(sp) = r3;
0x0001518e movs r3, 0x76 | r3 = 0x76;
0x00015190 mov r1, r3 | r1 = r3;
0x00015192 blx 0x96fc | fcn_000096fc ();
| }
0x00015196 mov r0, r4 | r0 = r4;
0x00015198 add sp, 0x24 |
0x0001519a pop {r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x15740 */
| #include <stdint.h>
|
; (fcn) fcn.00015740 () | void fcn_00015740 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00015740 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00015744 mov r7, r0 | r7 = r0;
0x00015746 sub sp, 0x14 |
0x00015748 mov r8, r1 | r8 = r1;
0x0001574a mov r6, r2 | r6 = r2;
0x0001574c mov sb, r3 | sb = r3;
0x0001574e movs r4, 0x4b | r4 = 0x4b;
0x00015750 movs r5, 0 | r5 = 0;
| do {
0x00015752 cmp r5, r6 |
| if (r5 >= r6) {
0x00015754 blt 0x157aa |
0x00015756 adds r5, r4, 1 | r5 = r4 + 1;
0x00015758 mov r0, r5 | r0 = r5;
0x0001575a blx 0x8e30 | r0 = vfprintf_chk ()
0x0001575e mov r4, r0 | r4 = r0;
0x00015760 cmp r0, 0 |
| if (r0 == 0) {
0x00015762 beq 0x157f6 | goto label_2;
| }
0x00015764 mov r2, r5 | r2 = r5;
0x00015766 movs r1, 0 | r1 = 0;
0x00015768 ldr.w sl, [pc, 0x90] | sl = sym.imp.memset;
0x0001576c movs r5, 0 | r5 = 0;
0x0001576e ldr.w fp, [pc, 0x90] |
0x00015772 blx 0x9144 | fcn_00009144 ();
0x00015776 ldr r1, [pc, 0x8c] |
0x00015778 add sl, pc | sl += pc;
0x0001577a add fp, pc | fp = 0x2af80;
0x0001577c mov r0, r4 | r0 = r4;
0x0001577e add r1, pc | r1 = 0x2af88;
0x00015780 blx 0x8d68 | fcn_00008d68 ();
| label_0:
0x00015784 cmp r6, r5 |
| if (r6 > r5) {
0x00015786 bgt 0x157c8 | goto label_3;
| }
0x00015788 ldr r1, [pc, 0x7c] |
0x0001578a mov r0, r4 | r0 = r4;
0x0001578c add r1, pc | r1 = 0x2af98;
0x0001578e blx 0x8cec | fcn_00008cec ();
0x00015792 mov r0, r4 | r0 = r4;
0x00015794 blx 0x8924 | fcn_00008924 ();
0x00015798 str.w r0, [sb] | __asm ("str.w r0, [sb]");
0x0001579c mov r0, r4 | r0 = r4;
0x0001579e blx 0x894c | fcn_0000894c ();
0x000157a2 movs r0, 0 | r0 = 0;
| label_1:
0x000157a4 add sp, 0x14 |
0x000157a6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x000157aa ldr.w r0, [r7, r5, lsl 2] | offset_0 = r5 << 2;
| r0 = *((r7 + offset_0));
0x000157ae blx 0x8f9c | r0 = fcn_00008f9c ();
0x000157b2 mov sl, r0 | sl = r0;
0x000157b4 ldr.w r0, [r8, r5, lsl 2] | offset_1 = r5 << 2;
| r0 = *((r8 + offset_1));
0x000157b8 blx 0x8f9c | fcn_00008f9c ();
0x000157ba invalid |
0x000157be adds r5, 1 | r5++;
0x000157c0 add r4, r0 | r4 += r0;
0x000157c2 add.w r4, r4, sl, lsl 1 | r4 += (sl << 1);
0x000157c6 b 0x15752 |
| } while (1);
| label_3:
0x000157c8 mov r1, sl | r1 = sl;
0x000157ca mov r0, r4 | r0 = r4;
0x000157cc blx 0x8cec | fcn_00008cec ();
0x000157d0 mov r0, r4 | r0 = r4;
0x000157d2 blx 0x8f9c | fcn_00008f9c ();
0x000157d6 ldr.w r3, [r7, r5, lsl 2] | offset_2 = r5 << 2;
| r3 = *((r7 + offset_2));
0x000157da movs r1, 1 | r1 = 1;
0x000157dc ldr.w r2, [r8, r5, lsl 2] | offset_3 = r5 << 2;
| r2 = *((r8 + offset_3));
0x000157e0 add r0, r4 | r0 += r4;
0x000157e2 adds r5, 1 | r5++;
0x000157e4 str r3, [sp, 8] | var_8h = r3;
0x000157e6 strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x000157ea mov r3, fp | r3 = fp;
0x000157ec mov.w r2, -1 | r2 = -1;
0x000157f0 blx 0x90ec | fcn_000090ec ();
0x000157f4 b 0x15784 | goto label_0;
| label_2:
0x000157f6 mvn r0, 0x67 | r0 = ~0x67;
0x000157fa b 0x157a4 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x158c8 */
| #include <stdint.h>
|
; (fcn) fcn.000158c8 () | void fcn_000158c8 (int16_t arg_20h, int16_t arg_28h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_48h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| label_2:
0x000151b4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000151b8 sub sp, 0x24 |
0x000151ba str r3, [sp, 4] | var_4h_2 = r3;
0x000151bc mov sb, r2 | sb = r2;
0x000151be mov sl, r1 | sl = r1;
0x000151c0 movs r4, 0 | r4 = 0;
0x000151c2 ldr r3, [sp, 0x48] | r3 = var_48h;
0x000151c4 ldr r2, [pc, 0x1d0] |
0x000151c6 str r0, [sp, 0xc] | var_ch = r0;
0x000151c8 movs r0, 0x1c | r0 = 0x1c;
0x000151ca str r3, [sp, 0x10] | var_10h = r3;
0x000151cc ldr r3, [pc, 0x1cc] |
0x000151ce add r2, pc | r2 = 0x2a56a;
0x000151d0 add r3, pc | r3 = 0x2a570;
0x000151d2 str r3, [sp, 8] | var_8h = r3;
0x000151d4 ldr r3, [pc, 0x1c8] | r3 = *(0x153a0);
0x000151d6 ldr r3, [r2, r3] |
0x000151d8 ldr r3, [r3] | r3 = *(0x2a56a);
0x000151da str r3, [sp, 0x1c] | var_1ch = r3;
0x000151dc mov.w r3, 0 | r3 = 0;
0x000151e0 blx 0x8e30 | vfprintf_chk ()
0x000151e4 ldr r3, [pc, 0x1bc] | r3 = *(0x153a4);
0x000151e6 mov r7, r0 | r7 = r0;
0x000151e8 ldr r2, [sp, 8] | r2 = var_8h;
0x000151ea ldr r3, [r2, r3] | r3 = *(0x2a56a);
0x000151ec str r3, [sp, 0x14] | var_14h = r3;
0x000151ee cmp r0, 0 |
| if (r0 == 0) {
0x000151f0 beq.w 0x15356 | goto label_3;
| }
0x000151f4 movs r2, 0x1c | r2 = 0x1c;
0x000151f6 movs r1, 0 | r1 = 0;
0x000151f8 blx 0x9144 | fcn_00009144 ();
0x000151fc movs r0, 4 | r0 = 4;
0x000151fe blx 0x8e30 | r0 = vfprintf_chk ()
0x00015202 mov fp, r0 |
0x00015204 cmp r0, 0 |
| if (r0 == 0) {
0x00015206 beq.w 0x15356 | goto label_3;
| }
0x0001520a str r4, [r0] | *(r0) = r4;
0x0001520c mov r0, sl | r0 = sl;
0x0001520e blx 0x8b40 | r0 = fcn_00008b40 ();
0x00015212 mov r5, r0 | r5 = r0;
0x00015214 cmp r0, 0 |
| if (r0 == 0) {
0x00015216 beq.w 0x15364 | goto label_4;
| }
0x0001521a mov r0, sb | r0 = sb;
0x0001521c blx 0x8b40 | r0 = fcn_00008b40 ();
0x00015220 mov r6, r0 | r6 = r0;
0x00015222 cmp r0, 0 |
| if (r0 == 0) {
0x00015224 beq.w 0x1536c | goto label_5;
| }
0x00015228 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0001522a blx 0x8930 | fcn_00008930 ();
0x0001522e ldr r0, [sp, 0xc] | r0 = var_ch;
0x00015230 add r1, sp, 0x18 | r1 += var_18h;
0x00015232 bl 0x19470 | r0 = fcn_00019470 (r0, r1);
0x00015236 cmp r0, 1 |
0x00015238 mov r8, r0 | r8 = r0;
| if (r0 != 1) {
0x0001523a bne.w 0x15372 | goto label_6;
| }
0x0001523e ldr r0, [sp, 0x18] | r0 = var_18h;
0x00015240 mov r1, sb | r1 = sb;
0x00015242 mov r2, sl | r2 = sl;
0x00015244 add.w r0, r0, 0x248 | r0 += 0x248;
0x00015248 bl 0xfacc | r0 = fcn_0000facc (r0, r1, r2);
0x0001524c mov sb, r0 | sb = r0;
0x0001524e cmp r0, 0 |
| if (r0 == 0) {
0x00015250 beq.w 0x1537a | goto label_7;
| }
0x00015254 mov r1, r0 | r1 = r0;
0x00015256 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00015258 bl 0xf964 | r0 = fcn_0000f964 (r0, r1);
0x0001525c mov sl, r0 | sl = r0;
0x0001525e cmp r0, 0 |
| if (r0 == 0) {
0x00015260 beq.w 0x15382 | goto label_8;
| }
0x00015264 ldr r3, [r0, 0x34] | r3 = *((r0 + 0x34));
0x00015266 cmp r3, 0 |
| if (r3 != 0) {
0x00015268 bne.w 0x15384 | goto label_9;
| }
0x0001526c str.w r8, [r0, 0x34] | __asm ("str.w r8, [r0, 0x34]");
0x00015270 ldr r0, [sp, 4] | r0 = var_4h_2;
0x00015272 bl 0x1514c | r0 = fcn_0001514c (r0);
0x00015276 mov sb, r0 | sb = r0;
0x00015278 cmp r0, 0 |
| if (r0 == 0) {
0x0001527a beq.w 0x1538c | goto label_10;
| }
0x0001527e movs r0, 0x48 | r0 = 0x48;
0x00015280 blx 0x8e30 | r0 = vfprintf_chk ()
0x00015284 mov r4, r0 | r4 = r0;
0x00015286 cmp r0, 0 |
| if (r0 == 0) {
0x00015288 beq 0x1535e | goto label_0;
| }
0x0001528a movs r3, 1 | r3 = 1;
0x0001528c mov.w r8, 0 | r8 = 0;
0x00015290 str.w r3, [fp] | __asm ("str.w r3, [fp]");
0x00015294 movs r2, 0x2b | r2 = 0x2b;
0x00015296 ldr r3, [sp, 4] | r3 = var_4h_2;
0x00015298 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0001529a strb.w r8, [r0, 0x3b] | *((r0 + 0x3b)) = r8;
0x0001529e str r3, [r0, 4] | *((r0 + 4)) = r3;
0x000152a0 strd r6, r5, [r0, 8] | __asm ("strd r6, r5, [r0, 8]");
0x000152a4 adds r0, 0x10 | r0 += 0x10;
0x000152a6 str sb, [r0, -0x10] | *((r0 - 0x10)) = sb;
0x000152aa blx 0x9174 | fcn_00009174 ();
0x000152ae mov r0, r8 | r0 = r8;
0x000152b0 blx 0x8a6c | fcn_00008a6c ();
0x000152b4 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000152b6 mov r2, r4 | r2 = r4;
0x000152b8 ldr r1, [pc, 0xec] |
0x000152ba strd r0, fp, [r4, 0x3c] | __asm ("strd r0, fp, [r4, 0x3c]");
0x000152be mov r0, r7 | r0 = r7;
0x000152c0 str r3, [r4, 0x44] | *((r4 + 0x44)) = r3;
0x000152c2 add r1, pc | r1 = 0x2a66e;
0x000152c4 bl 0xa7d4 | fcn_0000a7d4 (r0, r1, r2);
0x000152c8 ldr r1, [pc, 0xe0] |
0x000152ca mov r0, r7 | r0 = r7;
0x000152cc add r1, pc | r1 = 0x2a67c;
0x000152ce bl 0xa7fc | fcn_0000a7fc (r0, r1);
0x000152d2 movs r3, 1 | r3 = 1;
0x000152d4 mov r0, r7 | r0 = r7;
0x000152d6 mov r1, r3 | r1 = r3;
0x000152d8 bl 0xa7ec | fcn_0000a7ec (r0, r1);
0x000152dc ldr r2, [sp, 8] | r2 = var_8h;
0x000152de mov r1, r7 | r1 = r7;
0x000152e0 ldr r3, [pc, 0xcc] | r3 = *(0x153b0);
0x000152e2 ldr r0, [r2, r3] | r0 = *((r2 + r3));
0x000152e4 mov r2, r8 | r2 = r8;
0x000152e6 bl 0xa174 | r0 = fcn_0000a174 (r0, r1, r2);
0x000152ea mov r8, r0 | r8 = r0;
| if (r0 == 0) {
0x000152ec cbz r0, 0x15324 | goto label_11;
| }
0x000152ee cmp.w r0, 0x20000000 |
0x000152f2 it eq |
0x000152f4 mvneq r8, 0x67 | r8 = ~0x67;
| while (1) {
| label_1:
0x000152f8 mov r0, r7 | r0 = r7;
0x000152fa blx 0x894c | fcn_0000894c ();
0x000152fe mov r0, r4 | r0 = r4;
0x00015300 blx 0x894c | fcn_0000894c ();
0x00015304 mov r0, sb | r0 = sb;
0x00015306 blx 0x894c | fcn_0000894c ();
0x0001530a ldr r0, [sp, 4] | r0 = var_4h_2;
0x0001530c blx 0x8fa8 | fcn_00008fa8 ();
0x00015310 mov r0, r6 | r0 = r6;
0x00015312 blx 0x894c | fcn_0000894c ();
0x00015316 mov r0, r5 | r0 = r5;
0x00015318 blx 0x894c | fcn_0000894c ();
0x0001531c mov r0, fp | r0 = fp;
0x0001531e blx 0x894c | fcn_0000894c ();
0x00015322 b 0x15338 | goto label_12;
| label_11:
0x00015324 mov r1, r7 | r1 = r7;
0x00015326 add.w r0, sl, 0x44 | r0 = sl + 0x44;
0x0001532a bl 0x992e | r0 = fcn_0000992e (r0, r1);
| if (r0 != 0) {
0x0001532e cbz r0, 0x1535e |
0x00015330 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x00015332 mvn r2, 0xe0000000 | r2 = ~0xe0000000;
0x00015336 str r2, [r3, 0x18] | *((r3 + 0x18)) = r2;
| label_12:
0x00015338 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0001533a blx 0x920c | fcn_0000920c ();
0x0001533e ldr r2, [pc, 0x74] |
0x00015340 ldr r3, [pc, 0x5c] | r3 = *(0x153a0);
0x00015342 add r2, pc | r2 = 0x2a6fc;
0x00015344 ldr r3, [r2, r3] | r3 = *(0x2a6fc);
0x00015346 ldr r2, [r3] | r2 = *(0x2a6fc);
0x00015348 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0001534a eors r2, r3 | r2 ^= r3;
0x0001534c mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00015350 beq 0x15390 | goto label_13;
| }
0x00015352 blx 0x8b7c | fcn_00008b7c ();
| label_3:
0x00015356 mov sb, r4 | sb = r4;
0x00015358 mov r6, r4 | r6 = r4;
0x0001535a mov r5, r4 | r5 = r4;
0x0001535c mov fp, r4 |
| }
| label_0:
0x0001535e mvn r8, 0x67 | r8 = ~0x67;
0x00015362 b 0x152f8 |
| }
| label_4:
0x00015364 mov r4, r0 | r4 = r0;
0x00015366 mov sb, r0 | sb = r0;
0x00015368 mov r6, r0 | r6 = r0;
0x0001536a b 0x1535e | goto label_0;
| label_5:
0x0001536c mov r4, r0 | r4 = r0;
0x0001536e mov sb, r0 | sb = r0;
0x00015370 b 0x1535e | goto label_0;
| label_6:
0x00015372 mov sb, r4 | sb = r4;
0x00015374 mvn r8, 0x63 | r8 = ~0x63;
0x00015378 b 0x152f8 | goto label_1;
| label_7:
0x0001537a mov r4, r0 | r4 = r0;
0x0001537c mvn r8, 0x6e | r8 = ~0x6e;
0x00015380 b 0x152f8 | goto label_1;
| label_8:
0x00015382 mov r4, r0 | r4 = r0;
| label_9:
0x00015384 mov sb, r4 | sb = r4;
0x00015386 mvn r8, 0x6c | r8 = ~0x6c;
0x0001538a b 0x152f8 | goto label_1;
| label_10:
0x0001538c mov r4, r0 | r4 = r0;
0x0001538e b 0x1535e | goto label_0;
| label_13:
0x00015390 mov r0, r8 | r0 = r8;
0x00015392 add sp, 0x24 |
0x00015394 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000158c8 push.w {r0, r1, r4, r5, r6, r7, r8, lr} |
0x000158cc mov r5, r0 | r5 = r0;
0x000158ce ldr r4, [pc, 0x74] |
0x000158d0 mov r0, r3 | r0 = r3;
0x000158d2 mov r6, r1 | r6 = r1;
0x000158d4 mov r7, r2 | r7 = r2;
0x000158d6 ldr r3, [pc, 0x70] | r3 = *(0x1594a);
0x000158d8 ldrd r1, r2, [sp, 0x20] | __asm ("ldrd r1, r2, [arg_20h]");
0x000158dc add r4, pc | r4 = 0x2b226;
0x000158de ldr.w r8, [sp, 0x28] | r8 = *(arg_28h);
0x000158e2 ldr r3, [r4, r3] |
0x000158e4 movs r4, 0 | r4 = 0;
0x000158e6 cmp r2, r4 |
0x000158e8 ldr r3, [r3] | r3 = *(0x2b226);
0x000158ea str r3, [sp, 4] | var_4h = r3;
0x000158ec mov.w r3, 0 | r3 = 0;
0x000158f0 str r4, [sp] | *(sp) = r4;
| if (r2 <= r4) {
0x000158f2 ble 0x15928 | goto label_14;
| }
0x000158f4 mov r3, sp | r3 = sp;
0x000158f6 bl 0x15740 | r0 = fcn_00015740 (r0, r1, r2, r3);
| if (r0 != 0) {
0x000158fa cbnz r0, 0x1592a | goto label_15;
| }
0x000158fc ldr r2, [pc, 0x4c] |
0x000158fe ldr r3, [pc, 0x48] | r3 = *(0x1594a);
0x00015900 add r2, pc | r2 = 0x2b250;
0x00015902 ldr r3, [r2, r3] | r3 = *(0x2b250);
0x00015904 ldr r2, [r3] | r2 = *(0x2b250);
0x00015906 ldr r3, [sp, 4] | r3 = var_4h;
0x00015908 eors r2, r3 | r2 ^= r3;
0x0001590a mov.w r3, 0 | r3 = 0;
0x0001590e beq 0x15914 |
| while (r2 != r3) {
0x00015910 blx 0x8b7c | fcn_00008b7c ();
0x00015914 ldr r3, [sp] | r3 = *(sp);
0x00015916 mov r2, r7 | r2 = r7;
0x00015918 mov r1, r6 | r1 = r6;
0x0001591a mov r0, r5 | r0 = r5;
0x0001591c str.w r8, [sp, 0x20] | __asm ("str.w r8, [arg_20h]");
0x00015920 add sp, 8 |
0x00015922 pop.w {r4, r5, r6, r7, r8, lr} |
0x00015926 b 0x151b4 | goto label_2;
| label_14:
0x00015928 mov r0, r4 | r0 = r4;
| label_15:
0x0001592a ldr r2, [pc, 0x24] |
0x0001592c ldr r3, [pc, 0x18] | r3 = *(0x15948);
0x0001592e add r2, pc | r2 = 0x2b284;
0x00015930 ldr r3, [r2, r3] | r3 = *(0x2b284);
0x00015932 ldr r2, [r3] | r2 = *(0x2b284);
0x00015934 ldr r3, [sp, 4] | r3 = var_4h;
0x00015936 eors r2, r3 | r2 ^= r3;
0x00015938 mov.w r3, 0 | r3 = 0;
0x0001593c bne 0x15910 |
| }
0x0001593e add sp, 8 |
0x00015940 pop.w {r4, r5, r6, r7, r8, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x159a6 */
| #include <stdint.h>
|
; (fcn) fcn.000159a6 () | void fcn_000159a6 (int16_t arg_1h, int16_t arg_18h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| label_4:
0x000153b8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000153bc mov r4, r2 | r4 = r2;
0x000153be sub sp, 0x34 |
0x000153c0 ldr r2, [pc, 0x240] |
0x000153c2 mov r5, r1 | r5 = r1;
0x000153c4 str r3, [sp, 4] | var_4h_2 = r3;
0x000153c6 ldr r3, [pc, 0x240] | r3 = *(0x1560a);
0x000153c8 add r2, pc | r2 = 0x2a9d0;
0x000153ca str r0, [sp, 0xc] | var_ch = r0;
0x000153cc movs r0, 4 | r0 = 4;
0x000153ce ldr.w sl, [pc, 0x23c] |
0x000153d2 ldr r3, [r2, r3] |
0x000153d4 add sl, pc | sl = 0x2a9e6;
0x000153d6 ldr r3, [r3] | r3 = *(0x2a9d0);
0x000153d8 str r3, [sp, 0x2c] | var_2ch = r3;
0x000153da mov.w r3, 0 | r3 = 0;
0x000153de blx 0x8e30 | vfprintf_chk ()
0x000153e2 ldr r3, [pc, 0x22c] | r3 = *(0x15612);
0x000153e4 mov r6, r0 | r6 = r0;
0x000153e6 ldr.w r3, [sl, r3] | r3 = *(0x2a9e6);
0x000153ea str r3, [sp, 0x10] | var_10h = r3;
0x000153ec cmp r0, 0 |
| if (r0 == 0) {
0x000153ee beq.w 0x155dc | goto label_5;
| }
0x000153f2 movs r3, 0 | r3 = 0;
0x000153f4 str r3, [r0] | *(r0) = r3;
0x000153f6 mov r0, r5 | r0 = r5;
0x000153f8 blx 0x8b40 | fcn_00008b40 ();
0x000153fc str r0, [sp] | *(sp) = r0;
0x000153fe cmp r0, 0 |
| if (r0 == 0) {
0x00015400 beq.w 0x155e2 | goto label_6;
| }
0x00015404 mov r0, r4 | r0 = r4;
0x00015406 blx 0x8b40 | r0 = fcn_00008b40 ();
0x0001540a mov r8, r0 | r8 = r0;
0x0001540c cmp r0, 0 |
| if (r0 == 0) {
0x0001540e beq.w 0x155ea | goto label_7;
| }
0x00015412 ldr r0, [sp, 4] | r0 = var_4h_2;
0x00015414 bl 0x1514c | fcn_0001514c (r0);
0x00015416 cdp2 p6, 9, c4, c10, c1, 4 | __asm ("cdp2 p6, 9, c4, c10, c1, 4");
0x0001541a cmp r0, 0 |
| if (r0 == 0) {
0x0001541c beq 0x154ea | goto label_2;
| }
0x0001541e ldr r0, [sp, 0x10] | r0 = var_10h;
0x00015420 blx 0x8930 | fcn_00008930 ();
0x00015424 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00015426 add r1, sp, 0x28 | r1 += var_28h;
0x00015428 bl 0x19470 | r0 = fcn_00019470 (r0, r1);
0x0001542c cmp r0, 1 |
| if (r0 != 1) {
0x0001542e bne.w 0x155ee | goto label_8;
| }
0x00015430 strh r6, [r3, 6] | *((r3 + 6)) = r6;
0x00015432 ldr r0, [sp, 0x28] | r0 = var_28h;
0x00015434 mov r2, r5 | r2 = r5;
0x00015436 mov r1, r4 | r1 = r4;
0x00015438 add.w r0, r0, 0x248 | r0 += 0x248;
0x0001543c bl 0xfacc | fcn_0000facc (r0, r1, r2);
0x00015440 str r0, [sp, 8] | var_8h = r0;
0x00015442 cmp r0, 0 |
| if (r0 == 0) {
0x00015444 beq.w 0x155f4 | goto label_9;
| }
0x00015448 bl 0xfa80 | fcn_0000fa80 (r0);
0x0001544c ldr r3, [pc, 0x1c4] |
0x0001544e mov r5, r0 | r5 = r0;
0x00015450 add r3, pc | r3 = 0x2aa68;
0x00015452 str r3, [sp, 0x18] | var_18h = r3;
0x00015454 ldr r3, [pc, 0x1c0] |
0x00015456 add r3, pc | r3 = 0x2aa72;
0x00015458 str r3, [sp, 0x1c] | var_1ch = r3;
0x0001545a ldr r3, [pc, 0x1c0] |
0x0001545c add r3, pc | r3 = 0x2aa7e;
0x0001545e str r3, [sp, 0x20] | var_20h = r3;
| label_1:
0x00015460 ldr.w fp, [r6] | fp = *(r6);
| if (r5 == 0) {
0x00015464 cbnz r5, 0x1546a |
0x00015466 mov fp, r5 |
0x00015468 b 0x15586 | goto label_3;
| }
0x0001546a movs r0, 0x48 | r0 = 0x48;
0x0001546c blx 0x8e30 | r0 = vfprintf_chk ()
0x00015470 mov r4, r0 | r4 = r0;
0x00015472 cmp r0, 0 |
| if (r0 == 0) {
0x00015474 beq 0x154ea | goto label_2;
| }
0x00015476 add.w r3, fp, 1 | r3 += arg_1h;
0x0001547a movs r2, 0x2b | r2 = 0x2b;
0x0001547c str r3, [r6] | *(r6) = r3;
0x0001547e mov r1, r5 | r1 = r5;
0x00015480 ldr r3, [sp] | r3 = *(sp);
0x00015482 movs r7, 0 | r7 = 0;
0x00015484 str r6, [r0, 0x40] | *((r0 + 0x40)) = r6;
0x00015486 add.w fp, r5, 0x44 |
0x0001548a str.w sb, [r0] | __asm ("str.w sb, [r0]");
0x0001548e strd r8, r3, [r0, 8] | __asm ("strd r8, r3, [r0, 8]");
0x00015492 adds r0, 0x10 | r0 += 0x10;
0x00015494 ldr r3, [sp, 4] | r3 = var_4h_2;
0x00015496 str r3, [r0, -0xc] | *((r0 - 0xc)) = r3;
0x0001549a blx 0x9174 | fcn_00009174 ();
0x0001549e mov r0, r7 | r0 = r7;
0x000154a0 strb.w r7, [r4, 0x3b] | *((r4 + 0x3b)) = r7;
0x000154a4 blx 0x8a6c | fcn_00008a6c ();
0x000154a8 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000154aa str r0, [r4, 0x3c] | *((r4 + 0x3c)) = r0;
0x000154ac mov r0, r7 | r0 = r7;
0x000154ae str r3, [r4, 0x44] | *((r4 + 0x44)) = r3;
0x000154b0 blx 0x8a6c | fcn_00008a6c ();
0x000154b4 str r0, [sp, 0x14] | var_14h = r0;
| label_0:
0x000154b6 mov r0, fp | r0 = fp;
0x000154b8 bl 0x9a28 | r0 = fcn_00009a28 (r0);
0x000154bc cmp r0, 1 |
| if (r0 <= 1) {
0x000154be ble 0x154da | goto label_10;
| }
0x000154c0 mov r0, fp | r0 = fp;
0x000154c2 bl 0x99ac | r0 = fcn_000099ac (r0);
| if (r0 != 0) {
0x000154c6 cbz r0, 0x154cc |
0x000154c8 ldr r7, [r0, 4] | r7 = *((r0 + 4));
| if (r7 != 0) {
0x000154ca cbnz r7, 0x154f0 | goto label_11;
| }
| }
0x000154cc ldr r3, [pc, 0x150] | r3 = *(0x15620);
0x000154ce ldr r0, [sp, 0x18] | r0 = var_18h;
0x000154d0 ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x000154d2 adds r0, 3 | r0 += 3;
0x000154d4 ldr r1, [r3] | r1 = *(0x15620);
0x000154d6 blx 0x9620 | fcn_00009620 ();
| do {
| label_10:
0x000154da movs r0, 0x1c | r0 = 0x1c;
0x000154dc blx 0x8e30 | r0 = vfprintf_chk ()
0x000154e0 mov r7, r0 | r7 = r0;
| if (r0 != 0) {
0x000154e2 cbnz r0, 0x15534 | goto label_12;
| }
0x000154e4 mov r0, r4 | r0 = r4;
0x000154e6 blx 0x894c | fcn_0000894c ();
| label_2:
0x000154ea mvn fp, 0x67 |
0x000154ee b 0x15586 | goto label_3;
| label_11:
0x000154f0 ldr r3, [r7, 8] | r3 = *((r7 + 8));
0x000154f2 mov r0, fp | r0 = fp;
0x000154f4 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x000154f6 str r2, [sp, 0x24] | var_24h = r2;
0x000154f8 bl 0x9a28 | fcn_00009a28 (r0);
0x000154fc ldr r3, [pc, 0x124] |
0x000154fe ldr r2, [sp, 0x24] | r2 = var_24h;
0x00015500 ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x00015502 adds r0, 3 | r0 += 3;
0x00015504 ldr r3, [r3] | r3 = *(0x15624);
0x00015506 cmp r0, r3 |
| if (r0 > r3) {
0x00015508 bgt 0x1551c | goto label_13;
| }
0x0001550a ldr r0, [pc, 0x11c] |
0x0001550c ldr r3, [r2, 0x3c] | r3 = *((r2 + 0x3c));
0x0001550e ldr r1, [sp, 0x14] | r1 = var_14h;
0x00015510 ldr.w r0, [sl, r0] | r0 = *((sl + r0));
0x00015514 subs r3, r1, r3 | r3 = r1 - r3;
0x00015516 ldr r0, [r0] | r0 = *(0x1562a);
0x00015518 cmp r3, r0 |
0x0001551a ble 0x154da |
| } while (r3 <= r0);
| label_13:
0x0001551c mov r0, r2 | r0 = r2;
0x0001551e bl 0x14e28 | fcn_00014e28 (r0);
0x00015522 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x00015524 blx 0x894c | fcn_0000894c ();
0x00015528 movs r2, 0 | r2 = 0;
0x0001552a mov r1, r7 | r1 = r7;
0x0001552c mov r0, fp | r0 = fp;
0x0001552e bl 0x993a | fcn_0000993a (r0, r1, r2, r3);
0x00015532 b 0x154b6 | goto label_0;
| label_12:
0x00015534 movs r2, 0x1c | r2 = 0x1c;
0x00015536 movs r1, 0 | r1 = 0;
0x00015538 blx 0x9144 | fcn_00009144 ();
0x0001553c mov r2, r4 | r2 = r4;
0x0001553e ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00015540 mov r0, r7 | r0 = r7;
0x00015542 bl 0xa7d4 | fcn_0000a7d4 (r0, r1, r2);
0x00015546 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00015548 mov r0, r7 | r0 = r7;
0x0001554a bl 0xa7fc | fcn_0000a7fc (r0, r1);
0x0001554e movs r1, 1 | r1 = 1;
0x00015550 mov r0, r7 | r0 = r7;
0x00015552 bl 0xa7ec | fcn_0000a7ec (r0, r1);
0x00015556 mov r1, r7 | r1 = r7;
0x00015558 mov r0, fp | r0 = fp;
0x0001555a bl 0x992e | r0 = fcn_0000992e (r0, r1);
0x0001555e mov r4, r0 | r4 = r0;
0x00015560 mov r0, fp | r0 = fp;
0x00015562 bl 0x9a28 | r0 = fcn_00009a28 (r0);
0x00015566 cmp r0, 1 |
| if (r0 != 1) {
0x00015568 bne 0x155d0 | goto label_14;
| }
0x0001556a ldr r2, [pc, 0xc0] | r2 = *(0x1562e);
0x0001556c mov r1, r7 | r1 = r7;
0x0001556e ldr.w r0, [sl, r2] | r0 = *((sl + r2));
0x00015572 movs r2, 0 | r2 = 0;
0x00015574 bl 0xa174 | r0 = fcn_0000a174 (r0, r1, r2);
0x00015578 mov fp, r0 |
| if (r0 == 0) {
0x0001557a cbz r0, 0x155c6 | goto label_15;
| }
0x0001557c cmp.w r0, 0x20000000 |
0x00015580 it eq |
| if (r0 != 0x20000000) {
0x00015582 mvneq fp, 0x67 |
| }
| label_3:
0x00015586 ldr r3, [r6] | r3 = *(r6);
| if (r3 != 0) {
0x00015588 cbnz r3, 0x155a8 | goto label_16;
| }
0x0001558a mov r0, sb | r0 = sb;
0x0001558c blx 0x894c | fcn_0000894c ();
0x00015590 ldr r0, [sp, 4] | r0 = var_4h_2;
0x00015592 blx 0x8fa8 | fcn_00008fa8 ();
0x00015596 mov r0, r8 | r0 = r8;
0x00015598 blx 0x894c | fcn_0000894c ();
0x0001559c ldr r0, [sp] | r0 = *(sp);
0x0001559e blx 0x894c | fcn_0000894c ();
0x000155a2 mov r0, r6 | r0 = r6;
0x000155a4 blx 0x894c | fcn_0000894c ();
| do {
| label_16:
0x000155a8 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000155aa blx 0x920c | fcn_0000920c ();
0x000155ae ldr r2, [pc, 0x80] |
0x000155b0 ldr r3, [pc, 0x54] | r3 = *(0x15608);
0x000155b2 add r2, pc | r2 = 0x2abe8;
0x000155b4 ldr r3, [r2, r3] | r3 = *(0x2abe8);
0x000155b6 ldr r2, [r3] | r2 = *(0x2abe8);
0x000155b8 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000155ba eors r2, r3 | r2 ^= r3;
0x000155bc mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000155c0 beq 0x155fa | goto label_17;
| }
0x000155c2 blx 0x8b7c | fcn_00008b7c ();
| if (r4 != 0) {
| label_15:
0x000155c6 cbz r4, 0x155d0 |
0x000155c8 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x000155ca mvn r2, 0xe0000000 | r2 = ~0xe0000000;
0x000155ce str r2, [r3, 0x18] | *((r3 + 0x18)) = r2;
| }
| label_14:
0x000155d0 mov r1, r5 | r1 = r5;
0x000155d2 ldr r0, [sp, 8] | r0 = var_8h;
0x000155d4 bl 0xf9f8 | r0 = fcn_0000f9f8 (r0, r1);
0x000155d8 mov r5, r0 | r5 = r0;
0x000155da b 0x15460 | goto label_1;
| label_5:
0x000155dc mvn fp, 0x67 |
0x000155e0 b 0x155a8 |
| } while (1);
| label_6:
0x000155e2 ldr.w sb, [sp] | sb = *(sp);
0x000155e6 mov r8, sb | r8 = sb;
0x000155e8 b 0x154ea | goto label_2;
| label_7:
0x000155ea mov sb, r0 | sb = r0;
0x000155ec b 0x154ea | goto label_2;
| label_8:
0x000155ee mvn fp, 0x63 |
0x000155f2 b 0x15586 | goto label_3;
| label_9:
0x000155f4 mvn fp, 0x6e |
0x000155f8 b 0x15586 | goto label_3;
| label_17:
0x000155fa mov r0, fp | r0 = fp;
0x000155fc add sp, 0x34 |
0x000155fe pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000159a6 push {r0, r1, r4, r5, r6, lr} |
0x000159a8 mov r6, r2 | r6 = r2;
0x000159aa ldr r2, [pc, 0x64] |
0x000159ac mov r4, r0 | r4 = r0;
0x000159ae mov r0, r3 | r0 = r3;
0x000159b0 mov r5, r1 | r5 = r1;
0x000159b2 ldr r3, [pc, 0x60] | r3 = *(0x15a16);
0x000159b4 add r2, pc | r2 = 0x2b3ca;
0x000159b6 ldr r3, [r2, r3] |
0x000159b8 ldrd r1, r2, [sp, 0x18] | __asm ("ldrd r1, r2, [arg_18h]");
0x000159bc ldr r3, [r3] | r3 = *(0x2b3ca);
0x000159be str r3, [sp, 4] | var_4h = r3;
0x000159c0 mov.w r3, 0 | r3 = 0;
0x000159c4 movs r3, 0 | r3 = 0;
0x000159c6 str r3, [sp] | *(sp) = r3;
0x000159c8 mov r3, sp | r3 = sp;
0x000159ca bl 0x15740 | r0 = fcn_00015740 (r0, r1, r2, r3);
| if (r0 != 0) {
0x000159ce cbnz r0, 0x159f8 | goto label_18;
| }
0x000159d0 ldr r2, [pc, 0x44] |
0x000159d2 ldr r3, [pc, 0x40] | r3 = *(0x15a16);
0x000159d4 add r2, pc | r2 = 0x2b3f0;
0x000159d6 ldr r3, [r2, r3] | r3 = *(0x2b3f0);
0x000159d8 ldr r2, [r3] | r2 = *(0x2b3f0);
0x000159da ldr r3, [sp, 4] | r3 = var_4h;
0x000159dc eors r2, r3 | r2 ^= r3;
0x000159de mov.w r3, 0 | r3 = 0;
0x000159e2 beq 0x159e8 |
| while (r2 != r3) {
0x000159e4 blx 0x8b7c | fcn_00008b7c ();
0x000159e8 ldr r3, [sp] | r3 = *(sp);
0x000159ea mov r2, r6 | r2 = r6;
0x000159ec mov r1, r5 | r1 = r5;
0x000159ee mov r0, r4 | r0 = r4;
0x000159f0 add sp, 8 |
0x000159f2 pop.w {r4, r5, r6, lr} |
0x000159f6 b 0x153b8 | goto label_4;
| label_18:
0x000159f8 ldr r2, [pc, 0x20] |
0x000159fa ldr r3, [pc, 0x18] | r3 = *(0x15a16);
0x000159fc add r2, pc | r2 = 0x2b41c;
0x000159fe ldr r3, [r2, r3] | r3 = *(0x2b41c);
0x00015a00 ldr r2, [r3] | r2 = *(0x2b41c);
0x00015a02 ldr r3, [sp, 4] | r3 = var_4h;
0x00015a04 eors r2, r3 | r2 ^= r3;
0x00015a06 mov.w r3, 0 | r3 = 0;
0x00015a0a bne 0x159e4 |
| }
0x00015a0c add sp, 8 |
0x00015a0e pop {r4, r5, r6, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x1633e */
| #include <stdint.h>
|
; (fcn) fcn.0001633e () | void fcn_0001633e (int16_t arg_0h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0001633e push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00016342 mov r6, r2 | r6 = r2;
0x00016344 ldr r2, [pc, 0xf4] |
0x00016346 sub sp, 0x2c |
0x00016348 add.w r8, sp, 8 | r8 += var_8h;
0x0001634c mov r7, r1 | r7 = r1;
0x0001634e ldr r3, [pc, 0xf0] | r3 = *(0x16442);
0x00016350 mov sl, r0 | sl = r0;
0x00016352 add r2, pc | r2 = 0x2c792;
0x00016354 ldr.w fp, [pc, 0xec] |
0x00016358 movs r1, 0 | r1 = 0;
0x0001635a mov r0, r8 | r0 = r8;
0x0001635c ldr r3, [r2, r3] |
0x0001635e movs r2, 0x1c | r2 = 0x1c;
0x00016360 add fp, pc | fp = 0x2c7a8;
0x00016362 ldr r3, [r3] | r3 = *(0x2c792);
0x00016364 str r3, [sp, 0x24] | var_24h = r3;
0x00016366 mov.w r3, 0 | r3 = 0;
0x0001636a blx 0x9144 | fcn_00009144 ();
0x0001636e adds r3, r7, 1 | r3 = r7 + 1;
| if (r3 == r7) {
0x00016370 beq 0x16430 | goto label_1;
| }
0x00016372 blx 0x9684 | r0 = fcn_00009684 ();
0x00016376 mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x00016378 cbz r0, 0x1638a |
0x0001637a movs r0, 0xc | r0 = 0xc;
0x0001637c blx 0x8e30 | r0 = vfprintf_chk ()
0x00016380 mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x00016382 cbnz r0, 0x16390 | goto label_2;
| }
0x00016384 mov r0, r5 | r0 = r5;
0x00016386 blx 0x894c | fcn_0000894c ();
| }
0x0001638a mvn r5, 0x67 | r5 = ~0x67;
0x0001638e b 0x1640e | goto label_0;
| label_2:
0x00016390 mov.w sb, 0 | sb = 0;
0x00016394 mov r1, sb | r1 = sb;
0x00016396 strd sb, sb, [r0] | __asm ("strd sb, sb, [r0]");
0x0001639a str.w sb, [r0, 8] | __asm ("str.w sb, [r0, 8]");
0x0001639e mov r0, r5 | r0 = r5;
0x000163a0 blx 0x8b00 | fcn_00008b00 ();
0x000163a4 mov r1, r7 | r1 = r7;
0x000163a6 mov r0, r5 | r0 = r5;
0x000163a8 blx 0x8d74 | fcn_00008d74 ();
0x000163ac mov r0, r6 | r0 = r6;
0x000163ae bl 0xf73e | fcn_0000f73e (r0);
0x000163b0 vst3.16 {d20[0], d21[0], d22[0]}, [r6], r1 | __asm ("vst3.16 {d20[0], d21[0], d22[0]}, [r6], r1");
0x000163b4 mov r0, r5 | r0 = r5;
0x000163b6 blx 0x8b94 | fcn_00008b94 ();
0x000163ba mov r0, r6 | r0 = r6;
0x000163bc bl 0xf7ce | r0 = fcn_0000f7ce (r0);
0x000163c0 mov r1, r0 | r1 = r0;
0x000163c2 mov r0, r5 | r0 = r5;
0x000163c4 blx 0x8f3c | fcn_00008f3c ();
0x000163c8 ldr r1, [pc, 0x7c] |
0x000163ca mov r2, r4 | r2 = r4;
0x000163cc str r5, [r4, 8] | *((r4 + 8)) = r5;
0x000163ce mov r0, r8 | r0 = r8;
0x000163d0 str.w sl, [r4] | __asm ("str.w sl, [r4]");
0x000163d4 add r1, pc | r1 = 0x2c820;
0x000163d6 bl 0xa7d4 | fcn_0000a7d4 (r0, r1, r2);
0x000163da ldr r1, [pc, 0x70] |
0x000163dc mov r0, r8 | r0 = r8;
0x000163de add r1, pc | r1 = 0x2c830;
0x000163e0 bl 0xa7fc | fcn_0000a7fc (r0, r1);
0x000163e4 movs r1, 1 | r1 = 1;
0x000163e6 mov r0, r8 | r0 = r8;
0x000163e8 bl 0xa7ec | fcn_0000a7ec (r0, r1);
0x000163ec ldr r3, [pc, 0x60] | r3 = *(0x16450);
0x000163ee movs r2, 1 | r2 = 1;
0x000163f0 sub.w r1, r7, 0xa | r1 = r7 - 0xa;
0x000163f4 ldr.w r0, [fp, r3] | r0 = *((fp + r3));
0x000163f8 adds r3, r4, 4 | r3 = r4 + 4;
0x000163fa strd sb, r3, [sp] | __asm ("strd sb, r3, [sp]");
0x000163fe mov r3, r8 | r3 = r8;
0x00016400 bl 0xac38 | r0 = fcn_0000ac38 (r0, r1, r2, r3, r4);
0x00016404 mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x00016406 cbz r0, 0x16426 | goto label_3;
| }
0x00016408 mov r0, r4 | r0 = r4;
0x0001640a bl 0x16324 | fcn_00016324 (r0);
| do {
| label_0:
0x0001640e ldr r2, [pc, 0x44] |
0x00016410 ldr r3, [pc, 0x2c] | r3 = *(0x16440);
0x00016412 add r2, pc | r2 = 0x2c86c;
0x00016414 ldr r3, [r2, r3] | r3 = *(0x2c86c);
0x00016416 ldr r2, [r3] | r2 = *(0x2c86c);
0x00016418 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0001641a eors r2, r3 | r2 ^= r3;
0x0001641c mov.w r3, 0 | r3 = 0;
0x0001641e lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 == r0) {
0x00016420 beq 0x16434 | goto label_4;
| }
0x00016422 blx 0x8b7c | fcn_00008b7c ();
| label_3:
0x00016426 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x00016428 mov r0, r6 | r0 = r6;
0x0001642a bl 0xf738 | fcn_0000f738 (r0, r1);
0x0001642e b 0x1640e |
| } while (1);
| label_1:
0x00016430 movs r5, 0 | r5 = 0;
0x00016432 b 0x1640e | goto label_0;
| label_4:
0x00016434 mov r0, r5 | r0 = r5;
0x00016436 add sp, 0x2c |
0x00016438 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x18e2e */
| #include <stdint.h>
|
; (fcn) fcn.00018e2e () | void fcn_00018e2e (int16_t arg_1d8h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_40h;
| int16_t var_60h;
| int16_t var_78h;
| int16_t var_7ah;
| int16_t var_7ch;
| int16_t var_f8h;
| int16_t var_1ach;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00018e2e push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00018e32 sub sp, 0x1b4 |
0x00018e34 ldrd r6, r3, [sp, 0x1d8] | __asm ("ldrd r6, r3, [arg_1d8h]");
0x00018e38 mov r8, r2 | r8 = r2;
0x00018e3a mov r5, r1 | r5 = r1;
0x00018e3c add.w sl, sp, 0xf8 | sl += var_f8h;
0x00018e40 ldr r2, [pc, 0x1fc] |
0x00018e42 mov r4, r0 | r4 = r0;
0x00018e44 str r3, [sp, 8] | var_8h = r3;
0x00018e46 movs r1, 0 | r1 = 0;
0x00018e48 ldr r3, [pc, 0x1f8] | r3 = *(0x19044);
0x00018e4a mov r0, sl | r0 = sl;
0x00018e4c add r2, pc | r2 = 0x31e90;
0x00018e4e ldr.w fp, [pc, 0x1f8] |
0x00018e52 ldr r3, [r2, r3] |
0x00018e54 movs r2, 0xb4 | r2 = 0xb4;
0x00018e56 add fp, pc | fp = 0x31ea4;
0x00018e58 ldr r3, [r3] | r3 = *(0x31e90);
0x00018e5a str r3, [sp, 0x1ac] | var_1ach = r3;
0x00018e5c mov.w r3, 0 | r3 = 0;
0x00018e60 blx 0x9144 | fcn_00009144 ();
| if (r5 != 0) {
0x00018e64 cbz r5, 0x18e6e |
| if (r4 == 0) {
0x00018e66 cbz r4, 0x18e74 | goto label_6;
| }
0x00018e68 cmp.w r8, 0 |
| if (r8 != 0) {
0x00018e6c bne 0x18ed2 | goto label_7;
| }
| }
| label_1:
0x00018e6e mvn r4, 0x64 | r4 = ~0x64;
0x00018e72 b 0x18f80 | goto label_2;
| label_6:
0x00018e74 mov r1, r6 | r1 = r6;
0x00018e76 mov r0, r5 | r0 = r5;
0x00018e78 blx 0x8c98 | r0 = ixmlDocument_createTextNode ();
0x00018e7c mov r4, r0 | r4 = r0;
0x00018e7e cmp r0, 0 |
| if (r0 != 0) {
0x00018e80 bne 0x18f80 | goto label_2;
| }
0x00018e82 blx 0x8a6c | r0 = fcn_00008a6c ();
0x00018e86 mov r7, r0 | r7 = r0;
0x00018e88 cmp.w r8, 0 |
0x00018e8a lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 == r0) {
0x00018e8c beq.w 0x18ffe | goto label_8;
| }
| do {
0x00018e90 movs r1, 0x2e | r1 = 0x2e;
0x00018e92 mov r0, r5 | r0 = r5;
0x00018e94 blx 0x9354 | r0 = fcn_00009354 ();
0x00018e98 cmp r0, 0 |
| if (r0 == 0) {
0x00018e9a beq.w 0x18fee | goto label_9;
| }
0x00018e9e ldr r1, [pc, 0x1ac] |
0x00018ea0 add r1, pc | r1 = 0x31ef2;
0x00018ea2 blx 0x8c04 | r0 = fcn_00008c04 ();
0x00018ea6 cmp r0, 0 |
| if (r0 != 0) {
0x00018ea8 bne.w 0x18fee | goto label_9;
| }
0x00018eac movs r1, 0x2f | r1 = 0x2f;
0x00018eae mov r0, r5 | r0 = r5;
0x00018eb0 blx 0x9354 | r0 = fcn_00009354 ();
0x00018eb4 cmp r0, 0 |
0x00018eb6 it ne |
| if (r0 == 0) {
0x00018eb8 movne r5, r0 | r5 = r0;
| }
0x00018eba mov r0, r5 | r0 = r5;
0x00018ebc blx 0x8f9c | r0 = fcn_00008f9c ();
0x00018ec0 cmp r0, 0xb3 |
| if (r0 < 0xb3) {
0x00018ec2 bls.w 0x18ff8 | goto label_10;
| }
| label_4:
0x00018ec6 ldr r0, [r6] | r0 = *(r6);
0x00018ec8 mvn r4, 0x75 | r4 = ~0x75;
0x00018ecc blx 0x8914 | ixmlCloneDOMString ();
0x00018ed0 b 0x18f80 | goto label_2;
| label_7:
0x00018ed2 cmp r4, 1 |
| if (r4 != 1) {
0x00018ed4 bne 0x18f5c | goto label_11;
| }
0x00018ed6 ldr r1, [pc, 0x178] |
0x00018ed8 mov r0, r5 | r0 = r5;
0x00018eda add r1, pc | r1 = 0x31f30;
0x00018edc blx 0x9420 | r0 = fcn_00009420 ();
0x00018ee0 mov sb, r0 | sb = r0;
0x00018ee2 cmp r0, 0 |
| if (r0 == 0) {
0x00018ee4 beq.w 0x1901c | goto label_12;
| }
0x00018ee8 blx 0x91dc | r0 = fcn_000091dc ();
0x00018eec adds r3, r0, 1 | r3 = r0 + 1;
| if (r3 == r0) {
0x00018eee beq.w 0x19020 | goto label_13;
| }
0x00018ef2 add.w r8, sp, 0x10 | r8 += var_10h;
0x00018ef6 mov r1, r8 | r1 = r8;
0x00018ef8 blx 0x9540 | fcn_00009540 ();
0x00018efc adds r0, 1 | r0++;
| if (r0 == 1) {
0x00018efe beq.w 0x19020 | goto label_13;
| }
0x00018f02 ldr r2, [sp, 0x40] | r2 = var_40h;
0x00018f04 ldr r7, [sp, 0x60] | r7 = var_60h;
0x00018f06 adds r0, r2, 1 | r0 = r2 + 1;
0x00018f08 str r2, [sp, 0xc] | var_ch = r2;
0x00018f0a blx 0x8e30 | r0 = vfprintf_chk ()
0x00018f0e mov r8, r0 | r8 = r0;
0x00018f10 cmp r0, 0 |
| if (r0 == 0) {
0x00018f12 beq.w 0x19026 | goto label_14;
| }
0x00018f16 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00018f18 mov r3, sb | r3 = sb;
0x00018f1a mov r1, r4 | r1 = r4;
0x00018f1c blx 0x8d8c | fcn_00008d8c ();
0x00018f20 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00018f22 cmp r2, r0 |
| if (r2 != r0) {
0x00018f24 bne 0x18f54 | goto label_15;
| }
0x00018f26 movs r3, 0 | r3 = 0;
0x00018f28 mov r1, r6 | r1 = r6;
0x00018f2a strb.w r3, [r8, r2] | *((r8 + r2)) = r3;
0x00018f2e mov r0, r8 | r0 = r8;
0x00018f30 blx 0x8bd0 | fcn_00008bd0 ();
0x00018f34 movs r3, 0 | r3 = 0;
0x00018f36 mov r4, r0 | r4 = r0;
| label_0:
0x00018f38 mov r0, r8 | r0 = r8;
0x00018f3a str r3, [sp, 0xc] | var_ch = r3;
0x00018f3c blx 0x894c | fcn_0000894c ();
0x00018f40 ldr r3, [sp, 0xc] | r3 = var_ch;
| label_5:
0x00018f42 mov r0, sb | r0 = sb;
0x00018f44 str r3, [sp, 0xc] | var_ch = r3;
0x00018f46 blx 0x926c | fcn_0000926c ();
0x00018f4a ldr r3, [sp, 0xc] | r3 = var_ch;
| if (r3 != 0) {
0x00018f4c cbnz r3, 0x18f80 | goto label_2;
| }
0x00018f4e cmp r4, 0 |
0x00018f50 beq 0x18e90 |
| } while (r4 == 0);
0x00018f52 b 0x18f74 | goto label_16;
| label_15:
0x00018f54 mov r3, r4 | r3 = r4;
0x00018f56 mvn r4, 0x1f6 | r4 = ~0x1f6;
0x00018f5a b 0x18f38 | goto label_0;
| label_11:
0x00018f5c cmp r4, 2 |
| if (r4 != 2) {
0x00018f5e bne 0x18e6e | goto label_1;
| }
0x00018f60 movs r0, 0 | r0 = 0;
0x00018f62 blx 0x8a6c | fcn_00008a6c ();
0x00018f66 mov r1, r6 | r1 = r6;
0x00018f68 mov r7, r0 | r7 = r0;
0x00018f6a mov r0, r5 | r0 = r5;
0x00018f6c blx 0x8bd0 | r0 = fcn_00008bd0 ();
0x00018f70 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00018f72 cbz r0, 0x18f98 | goto label_17;
| }
| label_16:
0x00018f74 cmp r4, 0x66 |
0x00018f76 ite eq |
| if (r4 != 0x66) {
0x00018f78 mvneq r4, 0x67 | r4 = ~0x67;
| }
| if (r4 != 0x66) {
0x00018f7c mvn r4, 0x6a | r4 = ~0x6a;
| }
0x00018f7e lsls r2, r5, 0x11 | r2 = r5 << 0x11;
| do {
| label_2:
0x00018f80 ldr r2, [pc, 0xd0] |
0x00018f82 ldr r3, [pc, 0xc0] | r3 = *(0x19046);
0x00018f84 add r2, pc | r2 = 0x31fdc;
0x00018f86 ldr r3, [r2, r3] | r3 = *(0x31fdc);
0x00018f88 ldr r2, [r3] | r2 = *(0x31fdc);
0x00018f8a ldr r3, [sp, 0x1ac] | r3 = var_1ach;
0x00018f8c eors r2, r3 | r2 ^= r3;
0x00018f8e mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00018f92 beq 0x1902e | goto label_18;
| }
0x00018f94 blx 0x8b7c | fcn_00008b7c ();
| label_17:
0x00018f98 ldr r1, [pc, 0xbc] |
0x00018f9a movs r2, 0xb3 | r2 = 0xb3;
0x00018f9c add r1, pc | r1 = 0x31ff8;
| label_3:
0x00018f9e add r4, sp, 0x78 | r4 += var_78h;
0x00018fa0 mov r0, sl | r0 = sl;
0x00018fa2 blx 0x9174 | fcn_00009174 ();
0x00018fa6 movs r2, 0x80 | r2 = 0x80;
0x00018fa8 movs r1, 0 | r1 = 0;
0x00018faa mov r0, r4 | r0 = r4;
0x00018fac blx 0x9144 | fcn_00009144 ();
0x00018fb0 ldr r3, [pc, 0xa8] | r3 = *(0x1905c);
0x00018fb2 movs r0, 2 | r0 = 2;
0x00018fb4 add r2, sp, 0x7c | r2 += var_7ch;
0x00018fb6 strh.w r0, [sp, 0x78] | var_78h = r0;
0x00018fba ldr.w r1, [fp, r3] | r1 = *((fp + r3));
0x00018fbe blx 0x89ec | pthread_self ();
0x00018fc2 ldr r3, [pc, 0x9c] | r3 = *(0x19062);
0x00018fc4 mov r1, r4 | r1 = r4;
0x00018fc6 mov r2, sl | r2 = sl;
0x00018fc8 ldr.w r3, [fp, r3] | r3 = *((fp + r3));
0x00018fcc ldrh r3, [r3] | r3 = *(r3);
0x00018fce rev16 r3, r3 | __asm ("rev16 r3, r3");
0x00018fd0 strh.w r3, [sp, 0x7a] | var_7ah = r3;
0x00018fd4 ldr r3, [sp, 8] | r3 = var_8h;
0x00018fd6 str r3, [sp] | *(sp) = r3;
0x00018fd8 mov r3, r7 | r3 = r7;
0x00018fda ldr r0, [r6] | r0 = *(r6);
0x00018fdc bl 0x1c7f4 | r0 = fcn_0001c7f4 (r0, r1, r2, r3, r4);
0x00018fe0 mov r4, r0 | r4 = r0;
0x00018fe2 cmp r0, 0 |
0x00018fe4 beq 0x18f80 |
| } while (r0 == 0);
0x00018fe6 ldr r0, [r6] | r0 = *(r6);
0x00018fe8 blx 0x8914 | ixmlCloneDOMString ();
0x00018fec b 0x18f80 | goto label_2;
| label_9:
0x00018fee ldr r0, [r6] | r0 = *(r6);
0x00018ff0 ldr r4, [pc, 0x44] | r4 = *(0x19038);
0x00018ff2 blx 0x8914 | ixmlCloneDOMString ();
0x00018ff6 b 0x18f80 | goto label_2;
| label_10:
0x00018ff8 movs r2, 0xb3 | r2 = 0xb3;
0x00018ffa mov r1, r5 | r1 = r5;
0x00018ffc b 0x18f9e | goto label_3;
| label_8:
0x00018ffe mov r0, r5 | r0 = r5;
0x00019000 blx 0x8f9c | r0 = fcn_00008f9c ();
0x00019004 cmp r0, 0xb3 |
| if (r0 > 0xb3) {
0x00019006 bhi.w 0x18ec6 | goto label_4;
| }
0x0001900a ldr r0, [sp, 8] | r0 = var_8h;
0x0001900c movs r2, 0xb3 | r2 = 0xb3;
0x0001900e mov r1, r5 | r1 = r5;
0x00019010 blx 0x9174 | fcn_00009174 ();
0x00019014 ldr r3, [sp, 8] | r3 = var_8h;
0x00019016 strb.w r4, [r3, 0xb3] | *((r3 + 0xb3)) = r4;
0x0001901a b 0x18f80 | goto label_2;
| label_12:
0x0001901c ldr r4, [pc, 0x1c] | r4 = *(0x1903c);
0x0001901e b 0x18f80 | goto label_2;
| label_13:
0x00019020 ldr r4, [pc, 0x18] | r4 = *(0x1903c);
0x00019022 movs r3, 1 | r3 = 1;
0x00019024 b 0x18f42 | goto label_5;
| label_14:
0x00019026 mov r3, r4 | r3 = r4;
0x00019028 mvn r4, 0x67 | r4 = ~0x67;
0x0001902c b 0x18f42 | goto label_5;
| label_18:
0x0001902e mov r0, r4 | r0 = r4;
0x00019030 add sp, 0x1b4 |
0x00019032 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x1b654 */
| #include <stdint.h>
|
; (fcn) fcn.0001b654 () | void fcn_0001b654 (int16_t arg_38h, int16_t arg_3ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int32_t var_8h;
| int32_t var_8h_2;
| char * src;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0001b654 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0001b658 mov r5, r2 | r5 = r2;
0x0001b65a ldr r2, [pc, 0xf0] |
0x0001b65c mov r7, r3 | r7 = r3;
0x0001b65e sub sp, 0x18 |
0x0001b660 mov sb, r0 | sb = r0;
0x0001b662 ldr r3, [pc, 0xec] | r3 = *(0x1b752);
0x0001b664 mov r4, r1 | r4 = r1;
0x0001b666 add r2, pc | r2 = 0x36db8;
0x0001b668 ldr.w r8, [sp, 0x38] | r8 = *(arg_38h);
0x0001b66c ldr r3, [r2, r3] |
0x0001b66e ldr r3, [r3] | r3 = *(0x36db8);
0x0001b670 str r3, [sp, 0x14] | var_14h = r3;
0x0001b672 mov.w r3, 0 | r3 = 0;
0x0001b676 cbnz r1, 0x1b692 |
| while (r5 == 0) {
| label_0:
0x0001b678 movs r0, 0 | r0 = 0;
| label_2:
0x0001b67a ldr r2, [pc, 0xd8] |
0x0001b67c ldr r3, [pc, 0xd0] | r3 = *(0x1b750);
0x0001b67e add r2, pc | r2 = 0x36dd8;
0x0001b680 ldr r3, [r2, r3] | r3 = *(0x36dd8);
0x0001b682 ldr r2, [r3] | r2 = *(0x36dd8);
0x0001b684 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0001b686 eors r2, r3 | r2 ^= r3;
0x0001b688 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0001b68c beq 0x1b744 | goto label_3;
| }
0x0001b68e blx 0x8b7c | fcn_00008b7c ();
0x0001b692 cmp r5, 0 |
0x0001b694 beq 0x1b678 |
| }
0x0001b696 mov.w r0, 0x7d0 | r0 = 0x7d0;
0x0001b69a blx 0x8e30 | r0 = vfprintf_chk ()
0x0001b69e mov r6, r0 | r6 = r0;
0x0001b6a0 cmp r0, 0 |
| if (r0 == 0) {
0x0001b6a2 beq 0x1b678 | goto label_0;
| }
0x0001b6a4 strd r5, r4, [sp, 8] | __asm ("strd r5, r4, [var_8h]");
0x0001b6a8 str r4, [sp, 4] | var_4h = r4;
0x0001b6aa cmp.w sb, 0 |
| if (sb == 0) {
0x0001b6ae beq 0x1b6d0 | goto label_4;
| }
0x0001b6b0 ldr r3, [pc, 0xa4] |
0x0001b6b2 add r3, pc | r3 = 0x36e0e;
| do {
0x0001b6b4 str r3, [sp] | *(sp) = r3;
0x0001b6b6 mov.w r3, 0x7d0 | r3 = 0x7d0;
0x0001b6ba movs r2, 1 | r2 = 1;
0x0001b6bc mov r1, r3 | r1 = r3;
0x0001b6be blx 0x96fc | r0 = fcn_000096fc ();
0x0001b6c2 cmp.w r0, 0x7d0 |
| if (r0 <= 0x7d0) {
0x0001b6c6 blo 0x1b6d6 | goto label_5;
| }
| label_1:
0x0001b6c8 mov r0, r6 | r0 = r6;
0x0001b6ca blx 0x894c | fcn_0000894c ();
0x0001b6ce b 0x1b678 | goto label_0;
| label_4:
0x0001b6d0 ldr r3, [pc, 0x88] |
0x0001b6d2 add r3, pc | r3 = 0x36e32;
0x0001b6d4 b 0x1b6b4 |
| } while (1);
| label_5:
0x0001b6d6 add r1, sp, 0x10 | r1 += src;
0x0001b6d8 mov r0, r6 | r0 = r6;
0x0001b6da blx 0x8bd0 | r0 = fcn_00008bd0 ();
0x0001b6de mov r5, r0 | r5 = r0;
0x0001b6e0 cmp r0, 0 |
| if (r0 != 0) {
0x0001b6e2 bne 0x1b6c8 | goto label_1;
| }
0x0001b6e4 mov r0, r6 | r0 = r6;
0x0001b6e6 blx 0x894c | fcn_0000894c ();
0x0001b6ea ldr r3, [sp, 0x10] | r3 = src;
0x0001b6ec cmp r3, 0 |
| if (r3 == 0) {
0x0001b6ee beq 0x1b678 | goto label_0;
| }
0x0001b6f0 cmp r7, 0 |
| if (r7 <= 0) {
0x0001b6f2 ble 0x1b740 | goto label_6;
| }
0x0001b6f4 ldr r4, [sp, 0x3c] | r4 = *(arg_3ch);
0x0001b6f6 adds r4, 8 | r4 += 8;
| do {
0x0001b6f8 cmp.w r8, 0 |
| if (r8 != 0) {
0x0001b6fc beq 0x1b732 |
0x0001b6fe ldr sl, [r4, -0x8] | sl = *((r4 - 0x8));
0x0001b702 ldr r0, [sp, 0x10] | r0 = src;
0x0001b704 blx 0x89c8 | strndup (r0, r1);
0x0001b708 mov r1, r8 | r1 = r8;
0x0001b70a mov sb, r0 | sb = r0;
0x0001b70c ldr r0, [sp, 0x10] | r0 = src;
0x0001b70e blx 0x8d98 | r0 = fcn_00008d98 ();
0x0001b712 mov r6, r0 | r6 = r0;
0x0001b714 cmp.w sl, 0 |
0x0001b716 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 != r0) {
0x0001b718 beq 0x1b72a |
0x0001b71a mov r1, sl | r1 = sl;
0x0001b71c ldr r0, [sp, 0x10] | r0 = src;
0x0001b71e blx 0x8cc8 | r0 = fcn_00008cc8 ();
0x0001b722 mov r1, r0 | r1 = r0;
0x0001b724 mov r0, r6 | r0 = r6;
0x0001b726 blx 0x8b4c | fcn_00008b4c ();
| }
0x0001b72a mov r1, r6 | r1 = r6;
0x0001b72c mov r0, sb | r0 = sb;
0x0001b72e blx 0x8b4c | fcn_00008b4c ();
| }
0x0001b732 adds r5, 1 | r5++;
0x0001b734 adds r4, 8 | r4 += 8;
0x0001b736 cmp r7, r5 |
| if (r7 == r5) {
0x0001b738 beq 0x1b740 | goto label_6;
| }
0x0001b73a ldr r8, [r4, -0xc] | r8 = *((r4 - 0xc));
0x0001b73e b 0x1b6f8 |
| } while (1);
| label_6:
0x0001b740 ldr r0, [sp, 0x10] | r0 = src;
0x0001b742 b 0x1b67a | goto label_2;
| label_3:
0x0001b744 add sp, 0x18 |
0x0001b746 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x1b760 */
| #include <stdint.h>
|
; (fcn) fcn.0001b760 () | void fcn_0001b760 (int16_t arg_30h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int32_t var_8h;
| int32_t var_8h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0001b760 push.w {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, lr} |
0x0001b764 mov sl, r0 | sl = r0;
0x0001b766 ldrd r4, r8, [sp, 0x30] | __asm ("ldrd r4, r8, [arg_30h]");
0x0001b76a mov r5, r1 | r5 = r1;
0x0001b76c mov sb, r3 | sb = r3;
0x0001b76e mov r6, r2 | r6 = r2;
0x0001b770 cmp r2, 0 |
| if (r2 == 0) {
0x0001b772 beq 0x1b816 | goto label_3;
| }
0x0001b774 cmp r3, 0 |
| if (r3 == 0) {
0x0001b776 beq 0x1b816 | goto label_3;
| }
0x0001b778 ldr r3, [r1] | r3 = *(r1);
| if (r3 != 0) {
0x0001b77a cbnz r3, 0x1b7e0 | goto label_4;
| }
0x0001b77c mov.w r0, 0x7d0 | r0 = 0x7d0;
0x0001b780 blx 0x8e30 | r0 = vfprintf_chk ()
0x0001b784 mov r7, r0 | r7 = r0;
0x0001b786 cbnz r0, 0x1b792 |
| while (1) {
| label_1:
0x0001b788 mvn r0, 0x67 | r0 = ~0x67;
| label_2:
0x0001b78c add sp, 0x10 |
0x0001b78e pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
0x0001b792 strd sb, r6, [sp, 8] | __asm ("strd sb, r6, [var_8h]");
0x0001b796 str r6, [sp, 4] | var_4h = r6;
0x0001b798 cmp.w sl, 0 |
| if (sl == 0) {
0x0001b79c beq 0x1b7be | goto label_5;
| }
0x0001b79e ldr r3, [pc, 0x80] |
0x0001b7a0 add r3, pc | r3 = 0x36fc6;
| label_0:
0x0001b7a2 str r3, [sp] | *(sp) = r3;
0x0001b7a4 mov.w r3, 0x7d0 | r3 = 0x7d0;
0x0001b7a8 movs r2, 1 | r2 = 1;
0x0001b7aa mov r1, r3 | r1 = r3;
0x0001b7ac blx 0x96fc | r0 = fcn_000096fc ();
0x0001b7b0 cmp.w r0, 0x7d0 |
| if (r0 <= 0x7d0) {
0x0001b7b4 blo 0x1b7c4 | goto label_6;
| }
0x0001b7b6 mov r0, r7 | r0 = r7;
0x0001b7b8 blx 0x894c | fcn_0000894c ();
0x0001b7bc b 0x1b788 |
| }
| label_5:
0x0001b7be ldr r3, [pc, 0x64] |
0x0001b7c0 add r3, pc | r3 = 0x36fea;
0x0001b7c2 b 0x1b7a2 | goto label_0;
| label_6:
0x0001b7c4 mov r1, r5 | r1 = r5;
0x0001b7c6 mov r0, r7 | r0 = r7;
0x0001b7c8 blx 0x8bd0 | r0 = fcn_00008bd0 ();
0x0001b7cc mov r6, r0 | r6 = r0;
0x0001b7ce mov r0, r7 | r0 = r7;
0x0001b7d0 blx 0x894c | fcn_0000894c ();
| if (r6 == 0) {
0x0001b7d4 cbz r6, 0x1b7e0 | goto label_4;
| }
0x0001b7d6 cmp r6, 0x66 |
| if (r6 == 0x66) {
0x0001b7d8 beq 0x1b788 | goto label_1;
| }
0x0001b7da mvn r0, 0x6a | r0 = ~0x6a;
0x0001b7de b 0x1b78c | goto label_2;
| if (r4 != 0) {
| label_4:
0x0001b7e0 cbz r4, 0x1b81c |
0x0001b7e2 ldr r0, [r5] | r0 = *(r5);
0x0001b7e4 blx 0x89c8 | strndup (r0, r1);
0x0001b7e8 mov r1, r4 | r1 = r4;
0x0001b7ea mov r6, r0 | r6 = r0;
0x0001b7ec ldr r0, [r5] | r0 = *(r5);
0x0001b7ee blx 0x8d98 | r0 = fcn_00008d98 ();
0x0001b7f2 mov r4, r0 | r4 = r0;
0x0001b7f4 cmp.w r8, 0 |
| if (r8 != 0) {
0x0001b7f8 beq 0x1b80a |
0x0001b7fa mov r1, r8 | r1 = r8;
0x0001b7fc ldr r0, [r5] | r0 = *(r5);
0x0001b7fe blx 0x8cc8 | r0 = fcn_00008cc8 ();
0x0001b802 mov r1, r0 | r1 = r0;
0x0001b804 mov r0, r4 | r0 = r4;
0x0001b806 blx 0x8b4c | fcn_00008b4c ();
| }
0x0001b80a mov r1, r4 | r1 = r4;
0x0001b80c mov r0, r6 | r0 = r6;
0x0001b80e blx 0x8b4c | fcn_00008b4c ();
0x0001b812 movs r0, 0 | r0 = 0;
0x0001b814 b 0x1b78c | goto label_2;
| label_3:
0x0001b816 mvn r0, 0x64 | r0 = ~0x64;
0x0001b81a b 0x1b78c | goto label_2;
| }
0x0001b81c mov r0, r4 | r0 = r4;
0x0001b81e b 0x1b78c | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x1c7f4 */
| #include <stdint.h>
|
; (fcn) fcn.0001c7f4 () | void fcn_0001c7f4 (int16_t arg_1f0h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int32_t var_8h;
| int32_t var_8h_2;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int32_t var_0h_2;
| int16_t var_28h;
| int16_t var_38h;
| int32_t var_4h_2;
| int32_t var_4h_3;
| int32_t var_10h_2;
| int32_t var_14h_2;
| int16_t var_e0h;
| int16_t var_110h;
| int16_t var_1c4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0001c7f4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001c7f8 sub sp, 0x1cc |
0x0001c7fa str r3, [sp, 0x10] | var_10h = r3;
0x0001c7fc mov sb, r2 | sb = r2;
0x0001c7fe mov r8, r0 | r8 = r0;
0x0001c800 mov r4, r1 | r4 = r1;
0x0001c802 ldr r3, [sp, 0x1f0] | r3 = *(arg_1f0h);
0x0001c804 ldr r2, [pc, 0x340] |
0x0001c806 ldrh r0, [r1] | r0 = *(r1);
0x0001c808 str r3, [sp, 0x14] | var_14h = r3;
0x0001c80a ldr r3, [pc, 0x340] | r3 = *(0x1cb4e);
0x0001c80c add r2, pc | r2 = 0x39358;
0x0001c80e cmp r0, 2 |
0x0001c810 ldr r3, [r2, r3] |
0x0001c812 ldr r3, [r3] | r3 = *(0x39358);
0x0001c814 str r3, [sp, 0x1c4] | var_1c4h = r3;
0x0001c816 mov.w r3, 0 | r3 = 0;
| if (r0 != 2) {
0x0001c81a bne.w 0x1ca02 | goto label_11;
| }
0x0001c81e add r5, sp, 0xe0 | r5 += var_e0h;
0x0001c820 movs r3, 0x2e | r3 = 0x2e;
0x0001c822 mov r2, r5 | r2 = r5;
0x0001c824 adds r1, 4 | r1 += 4;
0x0001c826 blx 0x9504 | fcn_00009504 ();
0x0001c82a ldrh r3, [r4, 2] | r3 = *((r4 + 2));
0x0001c82c rev16 r3, r3 | __asm ("rev16 r3, r3");
0x0001c82e uxth r3, r3 | r3 = (int16_t) r3;
0x0001c830 strd r5, r3, [sp, 4] | __asm ("strd r5, r3, [var_4h]");
0x0001c834 ldr r3, [pc, 0x318] |
0x0001c836 add r3, pc | r3 = 0x3938a;
| label_0:
0x0001c838 str r3, [sp] | *(sp) = r3;
0x0001c83a movs r3, 0xb4 | r3 = 0xb4;
0x0001c83c movs r2, 1 | r2 = 1;
0x0001c83e mov r1, r3 | r1 = r3;
0x0001c840 add r0, sp, 0x110 | r0 += var_110h;
0x0001c842 blx 0x96fc | fcn_000096fc ();
| do {
0x0001c846 ldr r4, [pc, 0x30c] |
0x0001c848 add r5, sp, 0x18 | r5 += var_18h;
0x0001c84a mov r0, r5 | r0 = r5;
0x0001c84c add.w sl, sp, 0x28 | sl += var_28h;
0x0001c850 bl 0x1033a | fcn_0001033a (r0);
0x0001c854 add r4, pc | r4 = 0x393ae;
0x0001c856 mov r0, sl | r0 = sl;
0x0001c858 bl 0x1033a | fcn_0001033a (r0);
0x0001c85c mov r1, r4 | r1 = r4;
0x0001c85e mov r0, r8 | r0 = r8;
0x0001c860 blx 0x8a84 | r0 = fcn_00008a84 ();
0x0001c864 mov fp, r0 |
0x0001c866 cmp r0, 0 |
| if (r0 != 0) {
0x0001c868 bne.w 0x1ca24 | goto label_12;
| }
0x0001c86c mov r1, r4 | r1 = r4;
0x0001c86e mov r0, r8 | r0 = r8;
0x0001c870 blx 0x8d98 | r0 = fcn_00008d98 ();
0x0001c874 mov r6, r0 | r6 = r0;
0x0001c876 cmp r0, 0 |
| if (r0 == 0) {
0x0001c878 beq.w 0x1cb08 | goto label_13;
| }
0x0001c87c ldr r1, [pc, 0x2d8] |
0x0001c87e mov r0, r5 | r0 = r5;
0x0001c880 add r1, pc | r1 = 0x393dc;
0x0001c882 bl 0x10416 | r0 = fcn_00010416 (r0, r1);
0x0001c886 cmp r0, 0 |
| if (r0 != 0) {
0x0001c888 bne.w 0x1cb08 | goto label_13;
| }
0x0001c88c add r1, sp, 0x110 | r1 += var_110h;
0x0001c88e mov r0, r5 | r0 = r5;
0x0001c890 bl 0x10416 | r0 = fcn_00010416 (r0, r1);
0x0001c894 cmp r0, 0 |
| if (r0 != 0) {
0x0001c896 bne.w 0x1cb08 | goto label_13;
| }
0x0001c89a ldr r4, [pc, 0x2c0] |
0x0001c89c mov r0, r5 | r0 = r5;
0x0001c89e add r4, pc | r4 = 0x39400;
0x0001c8a0 mov r1, r4 | r1 = r4;
0x0001c8a2 bl 0x10416 | r0 = fcn_00010416 (r0, r1);
0x0001c8a6 cmp r0, 0 |
| if (r0 != 0) {
0x0001c8a8 bne.w 0x1cb08 | goto label_13;
| }
0x0001c8ac mov r1, r4 | r1 = r4;
0x0001c8ae mov r0, sl | r0 = sl;
0x0001c8b0 bl 0x10416 | r0 = fcn_00010416 (r0, r1);
0x0001c8b4 cmp r0, 0 |
| if (r0 != 0) {
0x0001c8b6 bne.w 0x1cb08 | goto label_13;
| }
0x0001c8ba mov r0, r8 | r0 = r8;
0x0001c8bc blx 0x89c8 | r0 = strndup (r0, r1);
0x0001c8c0 cmp r0, 0 |
| if (r0 == 0) {
0x0001c8c2 beq.w 0x1cb12 | goto label_14;
| }
0x0001c8c6 mov r1, r6 | r1 = r6;
0x0001c8c8 blx 0x8b4c | r0 = fcn_00008b4c ();
0x0001c8cc mov r4, r0 | r4 = r0;
0x0001c8ce cmp r0, 0 |
| if (r0 != 0) {
0x0001c8d0 bne.w 0x1cb12 | goto label_14;
| }
0x0001c8d4 ldr r1, [r5] | r1 = *(r5);
0x0001c8d6 mov r0, r8 | r0 = r8;
0x0001c8d8 blx 0x8cc8 | r0 = fcn_00008cc8 ();
0x0001c8dc mov r7, r0 | r7 = r0;
| if (r0 != 0) {
0x0001c8de cbz r0, 0x1c8f8 |
0x0001c8e0 mov r1, r0 | r1 = r0;
0x0001c8e2 mov r0, r6 | r0 = r6;
0x0001c8e4 blx 0x8b4c | r0 = fcn_00008b4c ();
0x0001c8e8 cmp r0, 0 |
| if (r0 != 0) {
0x0001c8ea bne.w 0x1cb0e | goto label_15;
| }
| label_5:
0x0001c8ee mov r0, sl | r0 = sl;
0x0001c8f0 movs r4, 0 | r4 = 0;
0x0001c8f2 bl 0x10470 | r0 = fcn_00010470 (r0);
0x0001c8f6 mov r7, r0 | r7 = r0;
| }
| label_1:
0x0001c8f8 mov r0, fp | r0 = fp;
0x0001c8fa blx 0x93f0 | fcn_000093f0 ();
0x0001c8fe mov r0, sl | r0 = sl;
0x0001c900 bl 0x10348 | fcn_00010348 (r0);
0x0001c904 mov r0, r5 | r0 = r5;
0x0001c906 bl 0x10348 | fcn_00010348 (r0);
0x0001c90a cmp r4, 0 |
| if (r4 != 0) {
0x0001c90c bne.w 0x1cb28 | goto label_16;
| }
0x0001c910 mov r0, r7 | r0 = r7;
0x0001c912 blx 0x8f9c | r0 = fcn_00008f9c ();
0x0001c916 mov r5, r0 | r5 = r0;
0x0001c918 cmp r0, 0 |
| if (r0 == 0) {
0x0001c91a beq.w 0x1cb18 | goto label_17;
| }
0x0001c91e adds r3, r7, r0 | r3 = r7 + r0;
0x0001c920 ldrb r3, [r3, -0x1] | r3 = *((r3 - 0x1));
0x0001c924 cmp r3, 0x2f |
| if (r3 != 0x2f) {
0x0001c926 bne.w 0x1cb20 | goto label_18;
| }
0x0001c92a ldr.w sl, [pc, 0x234] |
0x0001c92e add sl, pc | sl = 0x39494;
| label_9:
0x0001c930 ldrb.w r3, [sb] | r3 = *(sb);
0x0001c934 mov r0, sl | r0 = sl;
0x0001c936 adds r5, 1 | r5++;
0x0001c938 cmp r3, 0x2f |
0x0001c93a it eq |
| if (r3 != 0x2f) {
0x0001c93c addeq sb, sb, 1 | sb++;
| }
0x0001c940 blx 0x8f9c | r0 = fcn_00008f9c ();
0x0001c944 mov r6, r0 | r6 = r0;
0x0001c946 mov r0, sb | r0 = sb;
0x0001c948 add r5, r6 | r5 += r6;
0x0001c94a blx 0x8f9c | r0 = fcn_00008f9c ();
0x0001c94e add r5, r0 | r5 += r0;
0x0001c950 mov r0, r5 | r0 = r5;
0x0001c952 blx 0x8e30 | r0 = vfprintf_chk ()
0x0001c956 mov r6, r0 | r6 = r0;
0x0001c958 cmp r0, 0 |
| if (r0 == 0) {
0x0001c95a beq.w 0x1cb2e | goto label_19;
| }
0x0001c95e mov r2, r5 | r2 = r5;
0x0001c960 movs r1, 0 | r1 = 0;
0x0001c962 blx 0x9144 | fcn_00009144 ();
0x0001c966 strd sl, sb, [sp, 8] | __asm ("strd sl, sb, [var_8h]");
0x0001c96a mov r1, r5 | r1 = r5;
0x0001c96c ldr.w sb, [pc, 0x1f4] |
0x0001c970 mov.w r3, -1 | r3 = -1;
0x0001c974 movs r2, 1 | r2 = 1;
0x0001c976 mov r0, r6 | r0 = r6;
0x0001c978 add.w sl, sp, 0x110 | sl += var_110h;
0x0001c97c str r7, [sp, 4] | var_4h = r7;
0x0001c97e add sb, pc | sb = 0x394e6;
0x0001c980 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0001c984 blx 0x96fc | fcn_000096fc ();
0x0001c988 mov r0, sl | r0 = sl;
0x0001c98a blx 0x8f9c | r0 = fcn_00008f9c ();
0x0001c98e mov r5, r0 | r5 = r0;
0x0001c990 mov r0, r6 | r0 = r6;
0x0001c992 blx 0x8f9c | r0 = fcn_00008f9c ();
0x0001c996 adds r1, r5, r0 | r1 = r5 + r0;
0x0001c998 adds r1, 8 | r1 += 8;
0x0001c99a cmp r1, 0xb4 |
| if (r1 > 0xb4) {
0x0001c99c bhi.w 0x1cb36 | goto label_20;
| }
0x0001c9a0 ldr r3, [pc, 0x1c4] |
0x0001c9a2 movs r2, 1 | r2 = 1;
0x0001c9a4 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0001c9a6 strd sl, r6, [sp, 8] | __asm ("strd sl, r6, [var_8h]");
0x0001c9aa add r3, pc | r3 = 0x39516;
0x0001c9ac strd sb, r3, [sp] | __asm ("strd sb, r3, [sp]");
0x0001c9b0 mov.w r3, -1 | r3 = -1;
0x0001c9b4 blx 0x96fc | fcn_000096fc ();
0x0001c9b8 mov r0, r8 | r0 = r8;
0x0001c9ba blx 0x875c | r0 = fcn_0000875c ();
0x0001c9be mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x0001c9c0 cbz r0, 0x1c9d4 |
0x0001c9c2 blx 0x8f9c | fcn_00008f9c ();
0x0001c9c6 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0001c9c8 mov r2, r0 | r2 = r0;
0x0001c9ca mov r1, r5 | r1 = r5;
0x0001c9cc mov r0, r6 | r0 = r6;
0x0001c9ce bl 0x13574 | r0 = fcn_00013574 (r0, r1, r2, r3);
0x0001c9d2 mov r4, r0 | r4 = r0;
| }
| label_10:
0x0001c9d4 mov r0, r7 | r0 = r7;
0x0001c9d6 blx 0x894c | fcn_0000894c ();
0x0001c9da mov r0, r6 | r0 = r6;
0x0001c9dc blx 0x894c | fcn_0000894c ();
| if (r4 != 0) {
0x0001c9e0 cbz r4, 0x1c9e8 |
0x0001c9e2 mov r0, r5 | r0 = r5;
0x0001c9e4 blx 0x8fa8 | fcn_00008fa8 ();
| }
0x0001c9e8 ldr r2, [pc, 0x180] |
0x0001c9ea ldr r3, [pc, 0x160] | r3 = *(0x1cb4e);
0x0001c9ec add r2, pc | r2 = 0x3955c;
0x0001c9ee ldr r3, [r2, r3] | r3 = *(0x3955c);
0x0001c9f0 ldr r2, [r3] | r2 = *(0x3955c);
0x0001c9f2 ldr r3, [sp, 0x1c4] | r3 = var_1c4h;
0x0001c9f4 eors r2, r3 | r2 ^= r3;
0x0001c9f6 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0001c9fa beq.w 0x1cb3c | goto label_21;
| }
0x0001c9fc strh r7, [r3, 4] | *((r3 + 4)) = r7;
0x0001c9fe blx 0x8b7c | r0 = fcn_00008b7c ();
| label_11:
0x0001ca02 cmp r0, 0xa |
0x0001ca04 bne.w 0x1c846 |
| } while (r0 != 0xa);
0x0001ca08 add r5, sp, 0xe0 | r5 += var_e0h;
0x0001ca0a movs r3, 0x2e | r3 = 0x2e;
0x0001ca0c mov r2, r5 | r2 = r5;
0x0001ca0e adds r1, 8 | r1 += 8;
0x0001ca10 blx 0x9504 | fcn_00009504 ();
0x0001ca14 ldrh r3, [r4, 2] | r3 = *((r4 + 2));
0x0001ca16 rev16 r3, r3 | __asm ("rev16 r3, r3");
0x0001ca18 uxth r3, r3 | r3 = (int16_t) r3;
0x0001ca1a strd r5, r3, [sp, 4] | __asm ("strd r5, r3, [var_4h]");
0x0001ca1e ldr r3, [pc, 0x150] |
0x0001ca20 add r3, pc | r3 = 0x39596;
0x0001ca22 b 0x1c838 | goto label_0;
| label_12:
0x0001ca24 movs r1, 0 | r1 = 0;
0x0001ca26 blx 0x9260 | fcn_00009260 ();
0x0001ca2a blx 0x89c8 | r0 = strndup (r0, r1);
0x0001ca2e mov r6, r0 | r6 = r0;
0x0001ca30 cmp r0, 0 |
| if (r0 == 0) {
0x0001ca32 beq 0x1cb12 | goto label_14;
| }
0x0001ca34 blx 0x8c8c | r0 = fcn_00008c8c ();
0x0001ca38 mov r7, r0 | r7 = r0;
0x0001ca3a cbnz r0, 0x1ca4c |
| while (r0 < 0) {
| label_2:
0x0001ca3c mvn r4, 0x6b | r4 = ~0x6b;
| label_3:
0x0001ca40 movs r6, 0 | r6 = 0;
| label_8:
0x0001ca42 mov r0, r6 | r0 = r6;
0x0001ca44 movs r7, 0 | r7 = 0;
0x0001ca46 blx 0x87e4 | fcn_000087e4 ();
0x0001ca4a b 0x1c8f8 | goto label_1;
0x0001ca4c add r4, sp, 0x38 | r4 += var_38h;
0x0001ca4e blx 0x8f9c | fcn_00008f9c ();
0x0001ca52 mov r2, r4 | r2 = r4;
0x0001ca54 mov r1, r0 | r1 = r0;
0x0001ca56 mov r0, r7 | r0 = r7;
0x0001ca58 bl 0x14a8c | r0 = fcn_00014a8c (r0, r1, r2);
0x0001ca5c cmp r0, 0 |
0x0001ca5e blt 0x1ca3c |
| }
0x0001ca60 ldr r3, [r4] | r3 = *(r4);
0x0001ca62 cmp r3, 0 |
| if (r3 != 0) {
0x0001ca64 bne 0x1ca3c | goto label_2;
| }
0x0001ca66 ldrd r1, r2, [r4, 4] | __asm ("ldrd r1, r2, [var_4h_2]");
0x0001ca6a mov r0, r5 | r0 = r5;
0x0001ca6c bl 0x10360 | r0 = fcn_00010360 (r0, r1, r2);
0x0001ca70 cbz r0, 0x1ca78 |
| while (r0 != 0) {
| label_4:
0x0001ca72 mvn r4, 0x67 | r4 = ~0x67;
0x0001ca76 b 0x1ca40 | goto label_3;
0x0001ca78 ldr r1, [pc, 0xf8] |
0x0001ca7a mov r0, r5 | r0 = r5;
0x0001ca7c add r1, pc | r1 = 0x395f4;
0x0001ca7e bl 0x10416 | r0 = fcn_00010416 (r0, r1);
0x0001ca82 cmp r0, 0 |
0x0001ca84 bne 0x1ca72 |
| }
0x0001ca86 add r1, sp, 0x110 | r1 += var_110h;
0x0001ca88 mov r0, r5 | r0 = r5;
0x0001ca8a bl 0x10416 | r0 = fcn_00010416 (r0, r1);
0x0001ca8e cmp r0, 0 |
| if (r0 != 0) {
0x0001ca90 bne 0x1ca72 | goto label_4;
| }
0x0001ca92 ldr r3, [r4, 0x14] | r3 = var_14h_2;
| if (r3 == 0) {
0x0001ca94 cbz r3, 0x1cad8 | goto label_22;
| }
0x0001ca96 ldr r3, [r4, 0x10] | r3 = var_10h_2;
0x0001ca98 ldrb r3, [r3] | r3 = *(r3);
0x0001ca9a cmp r3, 0x2f |
| if (r3 != 0x2f) {
0x0001ca9c bne 0x1cad8 | goto label_22;
| }
| label_6:
0x0001ca9e ldrd r1, r2, [r4, 0x10] | __asm ("ldrd r1, r2, [var_14h_2]");
0x0001caa2 mov r0, r5 | r0 = r5;
0x0001caa4 bl 0x10410 | r0 = fcn_00010410 (r0, r1, r2);
0x0001caa8 cmp r0, 0 |
| if (r0 != 0) {
0x0001caaa bne 0x1ca72 | goto label_4;
| }
0x0001caac ldrd r1, r2, [r4, 0x10] | __asm ("ldrd r1, r2, [var_14h_2]");
0x0001cab0 mov r0, sl | r0 = sl;
0x0001cab2 bl 0x10410 | r0 = fcn_00010410 (r0, r1, r2);
0x0001cab6 cmp r0, 0 |
| if (r0 != 0) {
0x0001cab8 bne 0x1ca72 | goto label_4;
| }
0x0001caba ldrd r3, r2, [r5] | __asm ("ldrd r3, r2, [r5]");
0x0001cabe add r3, r2 | r3 += r2;
0x0001cac0 ldrb r3, [r3, -0x1] | r3 = *((r3 - 0x1));
0x0001cac4 cmp r3, 0x2f |
| if (r3 != 0x2f) {
0x0001cac6 bne 0x1caf6 | goto label_23;
| }
| label_7:
0x0001cac8 ldr r1, [r5] | r1 = *(r5);
0x0001caca mov r0, r6 | r0 = r6;
0x0001cacc blx 0x8970 | r0 = fcn_00008970 ();
0x0001cad0 cmp r0, 0 |
| if (r0 == 0) {
0x0001cad2 beq.w 0x1c8ee | goto label_5;
| }
0x0001cad6 b 0x1ca72 | goto label_4;
| label_22:
0x0001cad8 ldr r7, [pc, 0x9c] |
0x0001cada mov r0, r5 | r0 = r5;
0x0001cadc add r7, pc | r7 = 0x39658;
0x0001cade mov r1, r7 | r1 = r7;
0x0001cae0 bl 0x10416 | r0 = fcn_00010416 (r0, r1);
0x0001cae4 cmp r0, 0 |
| if (r0 != 0) {
0x0001cae6 bne 0x1ca72 | goto label_4;
| }
0x0001cae8 mov r1, r7 | r1 = r7;
0x0001caea mov r0, sl | r0 = sl;
0x0001caec bl 0x10416 | r0 = fcn_00010416 (r0, r1);
0x0001caf0 cmp r0, 0 |
| if (r0 == 0) {
0x0001caf2 beq 0x1ca9e | goto label_6;
| }
0x0001caf4 b 0x1ca72 | goto label_4;
| label_23:
0x0001caf6 ldr r1, [pc, 0x84] |
0x0001caf8 movs r2, 1 | r2 = 1;
0x0001cafa mov r0, r5 | r0 = r5;
0x0001cafc add r1, pc | r1 = 0x3967e;
0x0001cafe bl 0x10410 | r0 = fcn_00010410 (r0, r1, r2);
0x0001cb02 cmp r0, 0 |
| if (r0 == 0) {
0x0001cb04 beq 0x1cac8 | goto label_7;
| }
0x0001cb06 b 0x1ca72 | goto label_4;
| label_13:
0x0001cb08 mvn r4, 0x67 | r4 = ~0x67;
0x0001cb0c b 0x1ca42 | goto label_8;
| label_15:
0x0001cb0e ldr r4, [pc, 0x34] | r4 = *(0x1cb46);
0x0001cb10 b 0x1ca42 | goto label_8;
| label_14:
0x0001cb12 mvn r4, 0x6a | r4 = ~0x6a;
0x0001cb16 b 0x1ca42 | goto label_8;
| label_17:
0x0001cb18 ldr.w sl, [pc, 0x64] |
0x0001cb1c add sl, pc | sl = 0x396a0;
0x0001cb1e b 0x1c930 | goto label_9;
| label_18:
0x0001cb20 ldr.w sl, [pc, 0x60] |
0x0001cb24 add sl, pc | sl = 0x396ac;
0x0001cb26 b 0x1c930 | goto label_9;
| label_16:
0x0001cb28 movs r6, 0 | r6 = 0;
| do {
0x0001cb2a movs r5, 0 | r5 = 0;
0x0001cb2c b 0x1c9d4 | goto label_10;
| label_19:
0x0001cb2e mov r5, r0 | r5 = r0;
0x0001cb30 mvn r4, 0x67 | r4 = ~0x67;
0x0001cb34 b 0x1c9d4 | goto label_10;
| label_20:
0x0001cb36 mvn r4, 0x75 | r4 = ~0x75;
0x0001cb3a b 0x1cb2a |
| } while (1);
| label_21:
0x0001cb3c mov r0, r4 | r0 = r4;
0x0001cb3e add sp, 0x1cc |
0x0001cb40 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x1ac34 */
| #include <stdint.h>
|
; (fcn) sym.UpnpAddVirtualDir () | void UpnpAddVirtualDir (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_4h;
| int16_t var_5h;
| int16_t var_104h;
| int8_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0001ac34 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x0001ac38 mov r7, r2 | r7 = r2;
0x0001ac3a ldr r2, [pc, 0x10c] |
0x0001ac3c sub sp, 0x10c |
0x0001ac3e add r6, sp, 4 | r6 += var_4h;
0x0001ac40 mov r4, r0 | r4 = r0;
0x0001ac42 ldr r3, [pc, 0x108] | r3 = *(0x1ad4e);
0x0001ac44 mov sb, r1 | sb = r1;
0x0001ac46 add r2, pc | r2 = 0x35994;
0x0001ac48 ldr r5, [pc, 0x104] |
0x0001ac4a movs r1, 0 | r1 = 0;
0x0001ac4c mov r0, r6 | r0 = r6;
0x0001ac4e ldr r3, [r2, r3] |
0x0001ac50 mov.w r2, 0x100 | r2 = 0x100;
0x0001ac54 add r5, pc | r5 = 0x359a8;
0x0001ac56 ldr r3, [r3] | r3 = *(0x35994);
0x0001ac58 str r3, [sp, 0x104] | var_104h = r3;
0x0001ac5a mov.w r3, 0 | r3 = 0;
0x0001ac5e blx 0x9144 | fcn_00009144 ();
0x0001ac62 ldr r3, [pc, 0xf0] | r3 = *(0x1ad56);
0x0001ac64 ldr r3, [r5, r3] |
0x0001ac66 ldr r3, [r3] | r3 = *(0x359a8);
0x0001ac68 cmp r3, 1 |
| if (r3 != 1) {
0x0001ac6a bne 0x1ad30 | goto label_2;
| }
0x0001ac6c cmp r4, 0 |
| if (r4 == 0) {
0x0001ac6e beq 0x1ad36 | goto label_3;
| }
0x0001ac70 ldrb.w r8, [r4] | r8 = *(r4);
0x0001ac74 cmp.w r8, 0 |
| if (r8 == 0) {
0x0001ac78 beq 0x1ad36 | goto label_3;
| }
0x0001ac7a mov r0, r4 | r0 = r4;
0x0001ac7c blx 0x8f9c | fcn_00008f9c ();
0x0001ac80 cmp.w r8, 0x2f |
| if (r8 == 0x2f) {
0x0001ac84 beq 0x1ace6 | goto label_4;
| }
0x0001ac86 cmp r0, 0xfe |
| if (r0 > 0xfe) {
0x0001ac88 bhi 0x1ad36 | goto label_3;
| }
0x0001ac8a movs r2, 0xfe | r2 = 0xfe;
0x0001ac8c mov r1, r4 | r1 = r4;
0x0001ac8e add.w r0, sp, 5 | r0 += var_5h;
0x0001ac92 movs r3, 0x2f | r3 = 0x2f;
0x0001ac94 strb r3, [r6] | *(r6) = r3;
| do {
0x0001ac96 blx 0x9174 | fcn_00009174 ();
0x0001ac9a ldr r3, [pc, 0xbc] | r3 = *(0x1ad5a);
0x0001ac9c ldr.w r8, [r5, r3] | r8 = *((r5 + r3));
0x0001aca0 ldr.w r5, [r8] | r5 = *(r8);
| if (r5 != 0) {
| label_0:
0x0001aca4 cbnz r5, 0x1acf2 | goto label_5;
| }
0x0001aca6 mov.w r0, 0x108 | r0 = 0x108;
0x0001acaa blx 0x8e30 | r0 = vfprintf_chk ()
0x0001acae mov r4, r0 | r4 = r0;
0x0001acb0 cmp r0, 0 |
| if (r0 == 0) {
0x0001acb2 beq 0x1ad3c | goto label_6;
| }
0x0001acb4 str r5, [r0] | *(r0) = r5;
| if (r7 != 0) {
0x0001acb6 cbz r7, 0x1acba |
0x0001acb8 str r5, [r7] | *(r7) = r5;
| }
0x0001acba add.w r5, r4, 8 | r5 = r4 + 8;
0x0001acbe movs r7, 0 | r7 = 0;
0x0001acc0 movs r2, 0xff | r2 = 0xff;
0x0001acc2 mov r1, r6 | r1 = r6;
0x0001acc4 mov r0, r5 | r0 = r5;
0x0001acc6 str.w sb, [r4, 4] | __asm ("str.w sb, [r4, 4]");
0x0001acca strb.w r7, [r4, 0x107] | *((r4 + 0x107)) = r7;
0x0001acce blx 0x9174 | fcn_00009174 ();
0x0001acd2 mov r0, r6 | r0 = r6;
0x0001acd4 blx 0x8f9c | fcn_00008f9c ();
0x0001acd8 strb r7, [r5, r0] | *((r5 + r0)) = r7;
0x0001acda ldr.w r0, [r8] | r0 = *(r8);
| if (r0 != 0) {
0x0001acde cbnz r0, 0x1ad24 | goto label_7;
| }
0x0001ace0 str.w r4, [r8] | __asm ("str.w r4, [r8]");
0x0001ace4 b 0x1ad08 | goto label_1;
| label_4:
0x0001ace6 cmp r0, 0xff |
| if (r0 > 0xff) {
0x0001ace8 bhi 0x1ad36 | goto label_3;
| }
0x0001acea movs r2, 0xff | r2 = 0xff;
0x0001acec mov r1, r4 | r1 = r4;
0x0001acee mov r0, r6 | r0 = r6;
0x0001acf0 b 0x1ac96 |
| } while (1);
| label_5:
0x0001acf2 mov r1, r6 | r1 = r6;
0x0001acf4 add.w r0, r5, 8 | r0 = r5 + 8;
0x0001acf8 blx 0x8790 | r0 = fcn_00008790 ();
| if (r0 == 0) {
0x0001acfc cbnz r0, 0x1ad20 |
| if (r7 != 0) {
0x0001acfe cbz r7, 0x1ad04 |
0x0001ad00 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0001ad02 str r3, [r7] | *(r7) = r3;
| }
0x0001ad04 str.w sb, [r5, 4] | __asm ("str.w sb, [r5, 4]");
| label_1:
0x0001ad08 ldr r2, [pc, 0x50] |
0x0001ad0a ldr r3, [pc, 0x40] | r3 = *(0x1ad4e);
0x0001ad0c add r2, pc | r2 = 0x35a6c;
0x0001ad0e ldr r3, [r2, r3] | r3 = *(0x35a6c);
0x0001ad10 ldr r2, [r3] | r2 = *(0x35a6c);
0x0001ad12 ldr r3, [sp, 0x104] | r3 = var_104h;
0x0001ad14 eors r2, r3 | r2 ^= r3;
0x0001ad16 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0001ad1a beq 0x1ad42 | goto label_8;
| }
0x0001ad1c blx 0x8b7c | fcn_00008b7c ();
| }
0x0001ad20 ldr r5, [r5] | r5 = *(r5);
0x0001ad22 b 0x1aca4 | goto label_0;
| do {
| label_7:
0x0001ad24 mov r3, r0 | r3 = r0;
0x0001ad26 ldr r0, [r0] | r0 = *(r0);
0x0001ad28 cmp r0, 0 |
0x0001ad2a bne 0x1ad24 |
| } while (r0 != 0);
0x0001ad2c str r4, [r3] | *(r3) = r4;
0x0001ad2e b 0x1ad08 | goto label_1;
| label_2:
0x0001ad30 mvn r0, 0x73 | r0 = ~0x73;
0x0001ad34 b 0x1ad08 | goto label_1;
| label_3:
0x0001ad36 mvn r0, 0x64 | r0 = ~0x64;
0x0001ad3a b 0x1ad08 | goto label_1;
| label_6:
0x0001ad3c mvn r0, 0x67 | r0 = ~0x67;
0x0001ad40 b 0x1ad08 | goto label_1;
| label_8:
0x0001ad42 add sp, 0x10c |
0x0001ad44 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x1a8dc */
| #include <stdint.h>
|
; (fcn) sym.UpnpGetServiceVarStatusAsync () | void UpnpGetServiceVarStatusAsync (int16_t arg_58h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0001a8dc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001a8e0 sub sp, 0x34 |
0x0001a8e2 str r3, [sp] | *(sp) = r3;
0x0001a8e4 mov r8, r2 | r8 = r2;
0x0001a8e6 add r6, sp, 0x10 | r6 += var_10h;
0x0001a8e8 mov sl, r0 | sl = r0;
0x0001a8ea ldr r3, [sp, 0x58] | r3 = *(arg_58h);
0x0001a8ec mov sb, r1 | sb = r1;
0x0001a8ee ldr r2, [pc, 0x110] |
0x0001a8f0 movs r1, 0 | r1 = 0;
0x0001a8f2 ldr r5, [pc, 0x110] |
0x0001a8f4 mov r0, r6 | r0 = r6;
0x0001a8f6 str r3, [sp, 4] | var_4h = r3;
0x0001a8f8 ldr r3, [pc, 0x10c] | r3 = *(0x1aa08);
0x0001a8fa add r2, pc | r2 = 0x35300;
0x0001a8fc add r5, pc | r5 = 0x35306;
0x0001a8fe ldr r3, [r2, r3] |
0x0001a900 movs r2, 0x1c | r2 = 0x1c;
0x0001a902 ldr r3, [r3] | r3 = *(0x35300);
0x0001a904 str r3, [sp, 0x2c] | var_2ch = r3;
0x0001a906 mov.w r3, 0 | r3 = 0;
0x0001a90a str r1, [sp, 0xc] | var_ch = r1;
0x0001a90c blx 0x9144 | fcn_00009144 ();
0x0001a910 ldr r3, [pc, 0xf8] | r3 = *(0x1aa0c);
0x0001a912 ldr r3, [r5, r3] | r3 = *(0x35306);
0x0001a914 ldr.w fp, [r3] | fp = *(0x35306);
0x0001a918 cmp.w fp, 1 |
| if (fp != 1) {
0x0001a91c bne 0x1a9e6 | goto label_1;
| }
0x0001a91e ldr r3, [pc, 0xf0] | r3 = *(0x1aa12);
0x0001a920 ldr r7, [r5, r3] | r7 = *((r5 + r3));
0x0001a922 mov r0, r7 | r0 = r7;
0x0001a924 blx 0x8d34 | strcpy (r0, r1);
0x0001a928 add r1, sp, 0xc | r1 += var_ch;
0x0001a92a mov r0, sl | r0 = sl;
0x0001a92c bl 0x19470 | r0 = fcn_00019470 (r0, r1);
0x0001a930 mov r4, r0 | r4 = r0;
0x0001a932 mov r0, r7 | r0 = r7;
| if (r4 == 0) {
0x0001a934 cbz r4, 0x1a956 | goto label_2;
| }
0x0001a936 blx 0x920c | fcn_0000920c ();
0x0001a93a mvn r0, 0x63 | r0 = ~0x63;
| do {
| label_0:
0x0001a93e ldr r2, [pc, 0xd4] |
0x0001a940 ldr r3, [pc, 0xc4] | r3 = *(0x1aa08);
0x0001a942 add r2, pc | r2 = 0x3535c;
0x0001a944 ldr r3, [r2, r3] | r3 = *(0x3535c);
0x0001a946 ldr r2, [r3] | r2 = *(0x3535c);
0x0001a948 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0001a94a eors r2, r3 | r2 ^= r3;
0x0001a94c mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0001a950 beq 0x1a9f8 | goto label_3;
| }
0x0001a952 blx 0x8b7c | fcn_00008b7c ();
| label_2:
0x0001a956 blx 0x920c | fcn_0000920c ();
0x0001a95a cmp.w sb, 0 |
| if (sb == 0) {
0x0001a95e beq 0x1a9ec | goto label_4;
| }
0x0001a960 cmp.w r8, 0 |
| if (r8 == 0) {
0x0001a964 beq 0x1a9ec | goto label_4;
| }
0x0001a966 ldr r3, [sp] | r3 = *(sp);
0x0001a968 cmp r3, 0 |
| if (r3 == 0) {
0x0001a96a beq 0x1a9ec | goto label_4;
| }
0x0001a96c movw r0, 0x74c | r0 = 0x74c;
0x0001a970 blx 0x8e30 | r0 = vfprintf_chk ()
0x0001a974 mov r7, r0 | r7 = r0;
0x0001a976 cmp r0, 0 |
| if (r0 == 0) {
0x0001a978 beq 0x1a9f2 | goto label_5;
| }
0x0001a97a movw r2, 0x74c | r2 = 0x74c;
0x0001a97e mov r1, r4 | r1 = r4;
0x0001a980 blx 0x9144 | fcn_00009144 ();
0x0001a984 movs r2, 5 | r2 = 5;
0x0001a986 mov r1, sb | r1 = sb;
0x0001a988 strd r2, sl, [r7] | __asm ("strd r2, sl, [r7]");
0x0001a98c addw r0, r7, 0x60c | __asm ("addw r0, r7, aav.0x000000ff");
0x0001a990 movs r2, 0xff | r2 = 0xff;
0x0001a992 blx 0x9174 | fcn_00009174 ();
0x0001a996 movs r2, 0xff | r2 = 0xff;
0x0001a998 mov r1, r8 | r1 = r8;
0x0001a99a add.w r0, r7, 0xc | r0 = r7 + 0xc;
0x0001a99e blx 0x9174 | fcn_00009174 ();
0x0001a9a2 ldr r3, [sp] | r3 = *(sp);
0x0001a9a4 mov r0, r6 | r0 = r6;
0x0001a9a6 ldr r2, [pc, 0x70] | r2 = *(0x1aa1a);
0x0001a9a8 str.w r3, [r7, 0x73c] | __asm ("str.w r3, aav.0x000000ff");
0x0001a9ac ldr r3, [sp, 4] | r3 = var_4h;
0x0001a9ae str.w r3, [r7, 0x738] | __asm ("str.w r3, aav.0x000000ff");
0x0001a9b2 ldr r1, [r5, r2] | r1 = *((r5 + r2));
0x0001a9b4 mov r2, r7 | r2 = r7;
0x0001a9b6 bl 0xa7d4 | fcn_0000a7d4 (r0, r1, r2);
0x0001a9ba ldr r2, [pc, 0x60] | r2 = *(0x1aa1e);
0x0001a9bc mov r0, r6 | r0 = r6;
0x0001a9be ldr r1, [r5, r2] | r1 = *((r5 + r2));
0x0001a9c0 bl 0xa7fc | fcn_0000a7fc (r0, r1);
0x0001a9c4 mov r1, fp | r1 = fp;
0x0001a9c6 mov r0, r6 | r0 = r6;
0x0001a9c8 bl 0xa7ec | fcn_0000a7ec (r0, r1);
0x0001a9cc ldr r2, [pc, 0x50] | r2 = *(0x1aa20);
0x0001a9ce mov r1, r6 | r1 = r6;
0x0001a9d0 ldr r0, [r5, r2] | r0 = *((r5 + r2));
0x0001a9d2 mov r2, r4 | r2 = r4;
0x0001a9d4 bl 0xa174 | r0 = fcn_0000a174 (r0, r1, r2);
0x0001a9d8 cmp r0, 0 |
0x0001a9da beq 0x1a93e |
| } while (r0 == 0);
0x0001a9dc mov r0, r7 | r0 = r7;
0x0001a9de blx 0x894c | fcn_0000894c ();
0x0001a9e2 mov r0, r4 | r0 = r4;
0x0001a9e4 b 0x1a93e | goto label_0;
| label_1:
0x0001a9e6 mvn r0, 0x73 | r0 = ~0x73;
0x0001a9ea b 0x1a93e | goto label_0;
| label_4:
0x0001a9ec mvn r0, 0x64 | r0 = ~0x64;
0x0001a9f0 b 0x1a93e | goto label_0;
| label_5:
0x0001a9f2 mvn r0, 0x67 | r0 = ~0x67;
0x0001a9f6 b 0x1a93e | goto label_0;
| label_3:
0x0001a9f8 add sp, 0x34 |
0x0001a9fa pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x1895c */
| #include <stdint.h>
|
; (fcn) sym.UpnpOpenHttpGetEx () | void UpnpOpenHttpGetEx (int16_t arg_28h, int16_t arg_2d0h, int16_t arg_2d8h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_14h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_28h;
| int16_t var_60h;
| int16_t var_e0h;
| int16_t var_f0h;
| int16_t var_2a4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| label_3:
0x00012fa0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00012fa4 mov r8, r2 | r8 = r2;
0x00012fa6 ldr r2, [pc, 0x1fc] |
0x00012fa8 mov r6, r3 | r6 = r3;
0x00012faa sub.w sp, sp, 0x2ac |
0x00012fae mov r4, r0 | r4 = r0;
0x00012fb0 ldr r3, [pc, 0x1f4] | r3 = *(0x131a8);
0x00012fb2 add r7, sp, 0x28 | r7 += var_28h;
0x00012fb4 add r2, pc | r2 = 0x2615e;
0x00012fb6 str r1, [sp, 0x14] | var_14h = r1;
0x00012fb8 mov r0, r7 | r0 = r7;
0x00012fba ldrd sl, fp, [sp, 0x2d0] | __asm ("ldrd sl, fp, [arg_2d0h]");
0x00012fbe ldr r3, [r2, r3] |
0x00012fc0 ldr.w sb, [sp, 0x2d8] | sb = *(arg_2d8h);
0x00012fc4 ldr r3, [r3] | r3 = *(0x2615e);
0x00012fc6 str r3, [sp, 0x2a4] | var_2a4h = r3;
0x00012fc8 mov.w r3, 0 | r3 = 0;
0x00012fcc bl 0x1033a | fcn_0001033a (r0);
0x00012fd0 cmp r4, 0 |
| if (r4 == 0) {
0x00012fd2 beq.w 0x13184 | goto label_4;
| }
0x00012fd6 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00012fd8 cmp r3, 0 |
| if (r3 == 0) {
0x00012fda beq.w 0x13184 | goto label_4;
| }
0x00012fde cmp.w r8, 0 |
| if (r8 == 0) {
0x00012fe2 beq.w 0x13184 | goto label_4;
| }
0x00012fe6 cmp.w sl, 0 |
| if (sl == 0) {
0x00012fea beq.w 0x13184 | goto label_4;
| }
0x00012fee cmp fp, sb |
0x00012ff0 mov.w r1, 0 | r1 = 0;
0x00012ff4 str.w r1, [sl] | __asm ("str.w r1, [sl]");
0x00012ff8 str r1, [r3] | *(r3) = r1;
0x00012ffa str.w r1, [r8] | __asm ("str.w r1, [r8]");
0x00012ffe str r1, [r6] | *(r6) = r1;
| if (fp > sb) {
0x00013000 bgt.w 0x1318a | goto label_5;
| }
0x00013004 add r5, sp, 0xe0 | r5 += var_e0h;
0x00013006 mov.w r2, 0x1c0 | r2 = 0x1c0;
0x0001300a mov r0, r5 | r0 = r5;
0x0001300c blx 0x9144 | fcn_00009144 ();
0x00013010 ldr r3, [pc, 0x198] |
0x00013012 movs r2, 1 | r2 = 1;
0x00013014 strd fp, sb, [sp, 4] | __asm ("strd fp, sb, [sp, 4]");
| if (r1 == 0) {
0x00013016 cbnz r1, 0x1301a |
0x00013018 add r0, sp, 0xf0 | r0 += var_f0h;
| }
0x0001301a add.w fp, sp, 0x38 |
0x0001301e add r3, pc | r3 = 0x261ce;
0x00013020 str r3, [sp] | *(sp) = r3;
0x00013022 movs r3, 0xc8 | r3 = 0xc8;
0x00013024 mov r1, r3 | r1 = r3;
0x00013026 blx 0x96fc | fcn_000096fc ();
0x0001302a mov r0, r7 | r0 = r7;
0x0001302c bl 0x1033a | fcn_0001033a (r0);
0x00013030 mov r3, r5 | r3 = r5;
0x00013032 mov r2, fp | r2 = fp;
0x00013034 mov r1, r7 | r1 = r7;
0x00013036 mov r0, r4 | r0 = r4;
0x00013038 bl 0x12eec | r0 = fcn_00012eec (r0, r1, r2, r3);
0x0001303c mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x0001303e cbnz r0, 0x13082 | goto label_0;
| }
0x00013040 mov.w r0, 0x1e0 | r0 = 0x1e0;
0x00013044 blx 0x8e30 | r0 = vfprintf_chk ()
0x00013048 mov r4, r0 | r4 = r0;
0x0001304a cmp r0, 0 |
| if (r0 == 0) {
0x0001304c beq.w 0x1318e | goto label_6;
| }
0x00013050 mov.w r2, 0x1e0 | r2 = 0x1e0;
0x00013054 mov r1, r5 | r1 = r5;
0x00013056 add.w sb, r4, 0x88 | sb = r4 + 0x88;
0x0001305a blx 0x9144 | fcn_00009144 ();
0x0001305e movs r1, 2 | r1 = 2;
0x00013060 mov r0, sb | r0 = sb;
0x00013062 bl 0x11342 | fcn_00011342 (r0, r1);
0x00013066 movs r1, 1 | r1 = 1;
0x00013068 ldrh.w r0, [fp, 0x28] | r0 = var_60h;
0x0001306c mov r2, r5 | r2 = r5;
0x0001306e blx 0x9528 | r0 = fcn_00009528 ();
0x00013072 mov r1, r0 | r1 = r0;
0x00013074 mov r0, r4 | r0 = r4;
0x00013076 adds r3, r1, 1 | r3 = r1 + 1;
0x00013078 bne 0x130a0 |
| while (1) {
0x0001307a mvn r5, 0xcf | r5 = ~0xcf;
0x0001307e blx 0x894c | fcn_0000894c ();
| label_0:
0x00013082 mov r0, r7 | r0 = r7;
0x00013084 bl 0x10348 | fcn_00010348 (r0);
0x00013088 ldr r2, [pc, 0x124] |
0x0001308a ldr r3, [pc, 0x11c] | r3 = *(0x131aa);
0x0001308c add r2, pc | r2 = 0x26240;
0x0001308e ldr r3, [r2, r3] | r3 = *(0x26240);
0x00013090 ldr r2, [r3] | r2 = *(0x26240);
0x00013092 ldr r3, [sp, 0x2a4] | r3 = var_2a4h;
0x00013094 eors r2, r3 | r2 ^= r3;
0x00013096 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0001309a beq 0x13194 | goto label_7;
| }
0x0001309c blx 0x8b7c | fcn_00008b7c ();
0x000130a0 bl 0x106e0 | r0 = fcn_000106e0 (r0, r1);
| if (r0 == 0) {
0x000130a4 cbz r0, 0x130b2 | goto label_8;
| }
0x000130a6 movs r1, 2 | r1 = 2;
0x000130a8 mov r0, r4 | r0 = r4;
0x000130aa bl 0x10712 | fcn_00010712 (r0);
0x000130ae mov r0, r4 | r0 = r4;
0x000130b0 b 0x1307a |
| }
| label_8:
0x000130b2 ldrh.w r3, [fp, 0x28] | r3 = *(arg_28h);
0x000130b6 add r1, sp, 0x60 | r1 += var_60h;
0x000130b8 ldr r0, [r4] | r0 = *(r4);
0x000130ba cmp r3, 0xa |
0x000130bc ite eq |
| if (r3 != 0xa) {
0x000130be moveq r2, 0x1c | r2 = 0x1c;
| }
| if (r3 == 0xa) {
0x000130c0 movne r2, 0x10 | r2 = 0x10;
| }
0x000130c2 blx 0x96c0 | fcn_000096c0 ();
0x000130c6 adds r0, 1 | r0++;
| if (r0 == 1) {
0x000130c8 bne 0x130de |
0x000130ca movs r1, 2 | r1 = 2;
0x000130cc mov r0, r4 | r0 = r4;
0x000130ce bl 0x10712 | fcn_00010712 (r0);
0x000130d2 mov r0, r4 | r0 = r4;
0x000130d4 mvn r5, 0xcb | r5 = ~0xcb;
0x000130d8 blx 0x894c | fcn_0000894c ();
0x000130dc b 0x13082 | goto label_0;
| }
0x000130de ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x000130e0 add.w fp, sp, 0x2dc |
0x000130e4 ldr r2, [pc, 0xcc] |
0x000130e6 mov r1, fp | r1 = fp;
0x000130e8 mov r0, r4 | r0 = r4;
0x000130ea str r3, [sp] | *(sp) = r3;
0x000130ec ldr r3, [r7] | r3 = *(r7);
0x000130ee add r2, pc | r2 = 0x262a6;
0x000130f0 bl 0x11c98 | r0 = fcn_00011c98 (r0, r1);
0x000130f4 mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x000130f6 cbz r0, 0x13108 |
0x000130f8 movs r1, 2 | r1 = 2;
0x000130fa mov r0, r4 | r0 = r4;
0x000130fc bl 0x10712 | fcn_00010712 (r0);
0x00013100 mov r0, r4 | r0 = r4;
0x00013102 blx 0x894c | fcn_0000894c ();
0x00013106 b 0x13082 | goto label_0;
| }
0x00013108 add r3, sp, 0x1c | r3 += var_1ch;
0x0001310a mov r2, fp | r2 = fp;
0x0001310c mov r1, sb | r1 = sb;
0x0001310e mov r0, r4 | r0 = r4;
0x00013110 bl 0x11978 | r0 = fcn_00011978 (r0, r1, r2, r3, r4);
0x00013114 cmp r0, 4 |
0x00013116 beq 0x13124 |
| while (r0 != 0) {
0x00013118 mov r0, r4 | r0 = r4;
0x0001311a mvn r5, 0x70 | r5 = ~0x70;
0x0001311e blx 0x894c | fcn_0000894c ();
0x00013122 b 0x13082 | goto label_0;
0x00013124 mov r0, sb | r0 = sb;
0x00013126 bl 0x11430 | r0 = fcn_00011430 (r0);
0x0001312a cmp r0, 6 |
| if (r0 == 6) {
0x0001312c beq 0x13132 | goto label_9;
| }
0x0001312e cmp r0, 0 |
0x00013130 bne 0x13118 |
| }
| label_9:
0x00013132 ldr.w r3, [r4, 0x13c] | r3 = *((r4 + 0x13c));
0x00013136 movs r1, 4 | r1 = 4;
0x00013138 mov r0, sb | r0 = sb;
0x0001313a str.w r3, [sl] | __asm ("str.w r3, [sl]");
0x0001313e add.w sl, sp, 0x20 | sl += var_20h;
0x00013142 mov r2, sl | r2 = sl;
0x00013144 bl 0x10f74 | r0 = fcn_00010f74 (r0, r1);
| if (r0 != 0) {
0x00013148 cbz r0, 0x1314c |
0x0001314a ldr r0, [sp, 0x20] | r0 = var_20h;
| }
0x0001314c ldr.w r3, [r4, 0x1b8] | r3 = *((r4 + 0x1b8));
0x00013150 str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x00013154 cmp r3, 4 |
| if (r3 != 4) {
0x00013156 bne 0x13162 | goto label_10;
| }
0x00013158 movs r3, 0 | r3 = 0;
| do {
| label_1:
0x0001315a str r3, [r6] | *(r6) = r3;
| label_2:
0x0001315c ldr r3, [sp, 0x14] | r3 = var_14h;
0x0001315e str r4, [r3] | *(r3) = r4;
0x00013160 b 0x13082 | goto label_0;
| label_10:
0x00013162 ldr.w r3, [r4, 0x1bc] | r3 = *((r4 + 0x1bc));
0x00013166 cmp r3, 3 |
| if (r3 != 3) {
0x00013168 bne 0x13170 | goto label_11;
| }
0x0001316a mvn r3, 2 | r3 = ~2;
0x0001316e b 0x1315a |
| } while (1);
| label_11:
0x00013170 cmp r3, 2 |
| if (r3 == 2) {
0x00013172 bne 0x1317a |
0x00013174 ldr.w r3, [r4, 0x1c0] | r3 = *((r4 + 0x1c0));
0x00013178 b 0x1315a | goto label_1;
| }
0x0001317a cmp r3, 4 |
| if (r3 != 4) {
0x0001317c bne 0x1315c | goto label_2;
| }
0x0001317e mvn r3, 3 | r3 = ~3;
0x00013182 b 0x1315a | goto label_1;
| label_4:
0x00013184 mvn r5, 0x64 | r5 = ~0x64;
0x00013188 b 0x13082 | goto label_0;
| label_5:
0x0001318a ldr r5, [pc, 0x14] | r5 = *(0x131a2);
0x0001318c b 0x13082 | goto label_0;
| label_6:
0x0001318e mvn r5, 0x67 | r5 = ~0x67;
0x00013192 b 0x13082 | goto label_0;
| label_7:
0x00013194 mov r0, r5 | r0 = r5;
0x00013196 add.w sp, sp, 0x2ac |
0x0001319a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0001895c b.w 0x12fa0 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x18814 */
| #include <stdint.h>
|
; (fcn) sym.UpnpRegisterClient () | void UpnpRegisterClient (uint32_t arg1, int16_t arg2, uint32_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00018814 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00018818 mov r8, r0 | r8 = r0;
0x0001881a ldr r4, [pc, 0xc4] |
0x0001881c mov sl, r1 | sl = r1;
0x0001881e mov r6, r2 | r6 = r2;
0x00018820 ldr r3, [pc, 0xc0] | r3 = *(0x188e4);
0x00018822 add r4, pc | r4 = 0x31108;
0x00018824 ldr r3, [r4, r3] |
0x00018826 ldr r3, [r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018828 cmp r3, 1 |
| if (r3 != 1) {
0x0001882a bne 0x188d2 | goto label_2;
| }
0x0001882c cmp r0, 0 |
| if (r0 == 0) {
0x0001882e beq 0x188d8 | goto label_3;
| }
0x00018830 cmp r2, 0 |
| if (r2 == 0) {
0x00018832 beq 0x188d8 | goto label_3;
| }
0x00018834 ldr r3, [pc, 0xb0] | r3 = *(0x188e8);
0x00018836 ldr r7, [r4, r3] | r7 = *((r4 + r3));
0x00018838 mov r0, r7 | r0 = r7;
0x0001883a blx 0x8930 | fcn_00008930 ();
0x0001883e ldr r3, [pc, 0xac] | r3 = *(0x188ee);
0x00018840 ldr.w sb, [r4, r3] | sb = *((r4 + r3));
0x00018844 ldr r3, [pc, 0xa8] | r3 = *(0x188f0);
0x00018846 ldr r2, [r4, r3] | r2 = *((r4 + r3));
0x00018848 ldr.w r3, [sb] | r3 = *(sb);
0x0001884c ldr r2, [r2] | r2 = *(r2);
0x0001884e add r3, r2 | r3 += r2;
0x00018850 ldr r2, [pc, 0xa0] |
0x00018852 ldr r2, [r4, r2] | r2 = *((r4 + r2));
0x00018854 ldr r2, [r2] | r2 = *(0x188f4);
0x00018856 add r3, r2 | r3 += r2;
0x00018858 cmp r3, 0xc6 |
| if (r3 <= 0xc6) {
0x0001885a ble 0x1886a | goto label_4;
| }
0x0001885c mov r0, r7 | r0 = r7;
0x0001885e blx 0x920c | fcn_0000920c ();
0x00018862 mvn r0, 0x77 | r0 = ~0x77;
| do {
| label_1:
0x00018866 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_4:
0x0001886a bl 0x184c4 | fcn_000184c4 ();
0x0001886e str r0, [r6] | *(r6) = r0;
0x00018870 adds r0, 0x66 | r0 += 0x66;
| if (r0 != 0x66) {
0x00018872 bne 0x18880 | goto label_5;
| }
| label_0:
0x00018874 mov r0, r7 | r0 = r7;
0x00018876 blx 0x920c | fcn_0000920c ();
0x0001887a mvn r0, 0x67 | r0 = ~0x67;
0x0001887e b 0x18866 |
| } while (1);
| label_5:
0x00018880 mov.w r0, 0x298 | r0 = 0x298;
0x00018884 blx 0x8e30 | r0 = vfprintf_chk ()
0x00018888 mov r5, r0 | r5 = r0;
0x0001888a cmp r0, 0 |
| if (r0 == 0) {
0x0001888c beq 0x18874 | goto label_0;
| }
0x0001888e movs r4, 0 | r4 = 0;
0x00018890 str.w sl, [r0, 8] | __asm ("str.w sl, [r0, 8]");
0x00018894 mov r2, r4 | r2 = r4;
0x00018896 mov r1, r4 | r1 = r4;
0x00018898 strd r4, r8, [r0] | __asm ("strd r4, r8, [r0]");
0x0001889c add.w r0, r0, 0x264 | r0 += 0x264;
0x000188a0 str r4, [r0, -0x4] | *((r0 - 0x4)) = r4;
0x000188a4 bl 0x9896 | fcn_00009896 (r0, r1, r2);
0x000188a8 mov.w r3, -1 | r3 = -1;
0x000188ac ldr r2, [r6] | r2 = *(r6);
0x000188ae strd r3, r3, [r5, 0x254] | __asm ("strd r3, r3, aav.0x000000ff");
0x000188b2 mov r0, r7 | r0 = r7;
0x000188b4 ldr r3, [pc, 0x40] |
0x000188b6 str.w r4, [r5, 0x22c] | __asm ("str.w r4, [r5, aav.0x0000022c]");
0x000188ba add r3, pc | r3 = 0x311b6;
0x000188bc str.w r5, [r3, r2, lsl 2] | __asm ("str.w r5, [r3, r2, lsl 2]");
0x000188c0 ldr.w r3, [sb] | r3 = *(sb);
0x000188c4 adds r3, 1 | r3++;
0x000188c6 str.w r3, [sb] | __asm ("str.w r3, [sb]");
0x000188ca blx 0x920c | fcn_0000920c ();
0x000188ce mov r0, r4 | r0 = r4;
0x000188d0 b 0x18866 | goto label_1;
| label_2:
0x000188d2 mvn r0, 0x73 | r0 = ~0x73;
0x000188d6 b 0x18866 | goto label_1;
| label_3:
0x000188d8 mvn r0, 0x64 | r0 = ~0x64;
0x000188dc b 0x18866 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x18b08 */
| #include <stdint.h>
|
; (fcn) sym.UpnpRegisterRootDevice () | void UpnpRegisterRootDevice (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00018b08 push.w {r0, r1, r2, r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00018b0c mov r5, r3 | r5 = r3;
0x00018b0e ldr r7, [pc, 0x154] |
0x00018b10 mov r6, r0 | r6 = r0;
0x00018b12 mov r8, r1 | r8 = r1;
0x00018b14 mov sl, r2 | sl = r2;
0x00018b16 ldr r3, [pc, 0x150] | r3 = *(0x18c6a);
0x00018b18 add r7, pc | r7 = 0x31782;
0x00018b1a ldr r3, [r7, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018b1c mov r0, r3 | r0 = r3;
0x00018b1e str r3, [sp, 4] | var_4h = r3;
0x00018b20 blx 0x8930 | fcn_00008930 ();
0x00018b24 ldr r3, [pc, 0x144] | r3 = *(0x18c6c);
0x00018b26 ldr r3, [r7, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018b28 ldr.w sb, [r3] | sb = imp._ITM_deregisterTMCloneTable;
0x00018b2c cmp.w sb, 1 |
| if (sb != 1) {
0x00018b30 bne.w 0x18c56 | goto label_1;
| }
0x00018b34 cmp r5, 0 |
| if (r5 == 0) {
0x00018b36 beq.w 0x18c5c | goto label_2;
| }
0x00018b3a cmp.w r8, 0 |
| if (r8 == 0) {
0x00018b3e beq.w 0x18c5c | goto label_2;
| }
0x00018b42 cmp r6, 0 |
| if (r6 == 0) {
0x00018b44 beq.w 0x18c5c | goto label_2;
| }
0x00018b48 ldrb r3, [r6] | r3 = *(r6);
0x00018b4a cmp r3, 0 |
| if (r3 == 0) {
0x00018b4c beq.w 0x18c5c | goto label_2;
| }
0x00018b50 bl 0x184c4 | fcn_000184c4 ();
0x00018b54 str r0, [r5] | *(r5) = r0;
0x00018b56 adds r0, 0x66 | r0 += 0x66;
0x00018b58 bne 0x18b6c |
| while (r0 == 0) {
0x00018b5a mvn r6, 0x67 | r6 = ~0x67;
| label_0:
0x00018b5e ldr r0, [sp, 4] | r0 = var_4h;
0x00018b60 blx 0x920c | fcn_0000920c ();
0x00018b64 mov r0, r6 | r0 = r6;
0x00018b66 add sp, 0xc |
0x00018b68 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00018b6c mov.w r0, 0x298 | r0 = 0x298;
0x00018b70 blx 0x8e30 | r0 = vfprintf_chk ()
0x00018b74 mov r4, r0 | r4 = r0;
0x00018b76 cmp r0, 0 |
0x00018b78 beq 0x18b5a |
| }
0x00018b7a mov.w r2, 0x298 | r2 = 0x298;
0x00018b7e movs r1, 0 | r1 = 0;
0x00018b80 blx 0x9144 | fcn_00009144 ();
0x00018b84 ldr r3, [pc, 0xe8] |
0x00018b86 mov fp, r4 |
0x00018b88 ldr r2, [r5] | r2 = *(r5);
0x00018b8a mov r1, r6 | r1 = r6;
0x00018b8c str sb, [fp], 0x10 | *(fp) = sb;
| fp += 0x10;
0x00018b90 mov r0, fp | r0 = fp;
0x00018b92 add r3, pc | r3 = 0x31806;
0x00018b94 str.w r4, [r3, r2, lsl 2] | __asm ("str.w r4, [r3, r2, lsl 2]");
0x00018b98 movs r2, 0xb3 | r2 = 0xb3;
0x00018b9a blx 0x9174 | fcn_00009174 ();
0x00018b9e mov r1, r6 | r1 = r6;
0x00018ba0 movs r2, 0xb3 | r2 = 0xb3;
0x00018ba2 add.w r0, r4, 0xc4 | r0 = r4 + 0xc4;
0x00018ba6 blx 0x9174 | fcn_00009174 ();
0x00018baa mov.w r2, 0x708 | r2 = 0x708;
0x00018bae strd r8, sl, [r4, 4] | __asm ("strd r8, sl, [r4, 4]");
0x00018bb0 ldrh r1, [r0, 0x10] | r1 = *((r0 + 0x10));
0x00018bb2 str.w r2, [r4, 0x22c] | __asm ("str.w r2, [r4, aav.0x0000022c]");
0x00018bb6 add.w r8, r4, 0x264 | r8 = r4 + 0x264;
0x00018bba movs r2, 0 | r2 = 0;
0x00018bbc mov r0, r8 | r0 = r8;
0x00018bbe mov r1, r2 | r1 = r2;
0x00018bc0 mov.w sl, 0 | sl = 0;
0x00018bc4 bl 0x9896 | fcn_00009896 (r0, r1, r2);
0x00018bc8 mov.w r2, -1 | r2 = -1;
0x00018bcc add.w r1, r4, 0x23c | r1 = r4 + 0x23c;
0x00018bd0 strd r2, r2, [r4, 0x254] | __asm ("strd r2, r2, aav.0x000000ff");
0x00018bd4 movs r2, 2 | r2 = 2;
0x00018bd6 mov r0, fp | r0 = fp;
0x00018bd8 str.w sl, [r4, 0x260] | __asm ("str.w sl, aav.0x000000ff");
0x00018bdc str.w r2, [r4, 0x25c] | __asm ("str.w r2, aav.0x000000ff");
0x00018be0 blx 0x8c98 | r0 = ixmlDocument_createTextNode ();
0x00018be4 mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x00018be6 cbz r0, 0x18bf8 |
0x00018be8 mov r1, sl | r1 = sl;
0x00018bea mov r0, r8 | r0 = r8;
0x00018bec bl 0x9978 | fcn_00009978 (r0, r1, r2);
0x00018bf0 ldr r0, [r5] | r0 = *(r5);
0x00018bf2 bl 0x18792 | fcn_00018792 (r0);
0x00018bf6 b 0x18b5e | goto label_0;
| }
0x00018bf8 ldr r1, [pc, 0x78] |
0x00018bfa ldr.w r0, [r4, 0x23c] | r0 = *((r4 + 0x23c));
0x00018bfe add r1, pc | r1 = 0x31876;
0x00018c00 blx 0x8a84 | fcn_00008a84 ();
0x00018c04 str.w r0, [r4, 0x240] | __asm ("str.w r0, aav.0x000000ff");
| if (r0 == 0) {
0x00018c08 cbnz r0, 0x18c26 |
0x00018c0a mov r1, r6 | r1 = r6;
0x00018c0c mov r0, r8 | r0 = r8;
0x00018c0e bl 0x9978 | fcn_00009978 (r0, r1, r2);
0x00018c12 ldr.w r0, [r4, 0x23c] | r0 = *((r4 + 0x23c));
0x00018c16 mvn r6, 0x6a | r6 = ~0x6a;
0x00018c1a blx 0x8914 | ixmlCloneDOMString ();
0x00018c1e ldr r0, [r5] | r0 = *(r5);
0x00018c20 bl 0x18792 | fcn_00018792 (r0);
0x00018c24 b 0x18b5e | goto label_0;
| }
0x00018c26 ldr r1, [pc, 0x50] |
0x00018c28 ldr.w r0, [r4, 0x23c] | r0 = *((r4 + 0x23c));
0x00018c2c add r1, pc | r1 = 0x318aa;
0x00018c2e blx 0x8a84 | fcn_00008a84 ();
0x00018c32 add.w r1, r4, 0x248 | r1 = r4 + 0x248;
0x00018c36 str.w r0, [r4, 0x244] | __asm ("str.w r0, aav.0x000000ff");
0x00018c3a str.w r6, [r4, 0x248] | __asm ("str.w r6, aav.0x000000ff");
0x00018c3e mov r2, fp | r2 = fp;
0x00018c40 strd r6, r6, [r1, 4] | __asm ("strd r6, r6, [r1, 4]");
0x00018c44 ldr.w r0, [r4, 0x23c] | r0 = *((r4 + 0x23c));
0x00018c48 bl 0x101ec | fcn_000101ec (r0, r1, r2);
0x00018c4c ldr r3, [pc, 0x2c] | r3 = *(0x18c7c);
0x00018c4e ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00018c50 str.w sb, [r3] | __asm ("str.w sb, [r3]");
0x00018c54 b 0x18b5e | goto label_0;
| label_1:
0x00018c56 mvn r6, 0x73 | r6 = ~0x73;
0x00018c5a b 0x18b5e | goto label_0;
| label_2:
0x00018c5c mvn r6, 0x64 | r6 = ~0x64;
0x00018c60 b 0x18b5e | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x18c80 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.UpnpRegisterRootDevice4 () | void UpnpRegisterRootDevice4 (int16_t arg_30h, int16_t arg_34h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00018c80 push.w {r0, r1, r2, r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00018c84 mov r4, r3 | r4 = r3;
0x00018c86 ldr r6, [pc, 0x174] |
0x00018c88 mov r5, r0 | r5 = r0;
0x00018c8a mov r8, r1 | r8 = r1;
0x00018c8c mov sl, r2 | sl = r2;
0x00018c8e ldr r3, [pc, 0x170] | r3 = *(0x18e02);
0x00018c90 add r6, pc | r6 = 0x31a92;
0x00018c92 ldr r3, [r6, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018c94 mov r0, r3 | r0 = r3;
0x00018c96 str r3, [sp, 4] | var_4h = r3;
0x00018c98 blx 0x8930 | fcn_00008930 ();
0x00018c9c ldr r3, [pc, 0x164] | r3 = *(0x18e04);
0x00018c9e ldr r3, [r6, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018ca0 ldr.w fp, [r3] | fp = imp._ITM_deregisterTMCloneTable;
0x00018ca4 cmp.w fp, 1 |
0x00018ca6 lsrs r1, r0, 0x1c | r1 = r0 >> 0x1c;
| if (r1 != r0) {
0x00018ca8 bne.w 0x18dee | goto label_1;
| }
0x00018cac cmp r4, 0 |
| if (r4 == 0) {
0x00018cae beq.w 0x18df4 | goto label_2;
| }
0x00018cb2 cmp.w r8, 0 |
| if (r8 == 0) {
0x00018cb6 beq.w 0x18df4 | goto label_2;
| }
0x00018cba cmp r5, 0 |
| if (r5 == 0) {
0x00018cbc beq.w 0x18df4 | goto label_2;
| }
0x00018cc0 ldrb r3, [r5] | r3 = *(r5);
0x00018cc2 cmp r3, 0 |
| if (r3 == 0) {
0x00018cc4 beq.w 0x18df4 | goto label_2;
| }
0x00018cc8 ldr r3, [sp, 0x30] | r3 = *(arg_30h);
0x00018cca bic r3, r3, 8 | r3 = BIT_MASK (r3, 8);
0x00018cce cmp r3, 2 |
| if (r3 != 2) {
0x00018cd0 bne.w 0x18df4 | goto label_2;
| }
0x00018cd4 bl 0x184c4 | fcn_000184c4 ();
0x00018cd8 str r0, [r4] | *(r4) = r0;
0x00018cda adds r0, 0x66 | r0 += 0x66;
0x00018cdc bne 0x18cf0 |
| while (r0 == 0) {
0x00018cde mvn r5, 0x67 | r5 = ~0x67;
| label_0:
0x00018ce2 ldr r0, [sp, 4] | r0 = var_4h;
0x00018ce4 blx 0x920c | fcn_0000920c ();
0x00018ce8 mov r0, r5 | r0 = r5;
0x00018cea add sp, 0xc |
0x00018cec pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00018cf0 mov.w r0, 0x298 | r0 = 0x298;
0x00018cf4 blx 0x8e30 | r0 = vfprintf_chk ()
0x00018cf8 mov sb, r0 | sb = r0;
0x00018cfa cmp r0, 0 |
0x00018cfc beq 0x18cde |
| }
0x00018cfe mov.w r2, 0x298 | r2 = 0x298;
0x00018d02 movs r1, 0 | r1 = 0;
0x00018d04 blx 0x9144 | fcn_00009144 ();
0x00018d08 ldr r2, [pc, 0xfc] |
0x00018d0a mov r7, sb | r7 = sb;
0x00018d0c ldr r1, [r4] | r1 = *(r4);
0x00018d0e str fp, [r7], 0x10 | *(r7) = fp;
| r7 += 0x10;
0x00018d12 mov r0, r7 | r0 = r7;
0x00018d14 add r2, pc | r2 = 0x31b20;
0x00018d16 str.w sb, [r2, r1, lsl 2] | __asm ("str.w sb, [r2, r1, lsl 2]");
0x00018d1a movs r2, 0xb3 | r2 = 0xb3;
0x00018d1c mov r1, r5 | r1 = r5;
0x00018d1e blx 0x9174 | fcn_00009174 ();
0x00018d22 ldr r3, [sp, 0x34] | r3 = *(arg_34h);
0x00018d24 add.w r0, sb, 0xc4 | r0 = sb + 0xc4;
0x00018d28 movs r2, 0xb3 | r2 = 0xb3;
| if (r3 != 0) {
0x00018d2a cbnz r3, 0x18d80 | goto label_3;
| }
0x00018d2c mov r1, r5 | r1 = r5;
| do {
0x00018d2e blx 0x9174 | fcn_00009174 ();
0x00018d32 mov.w r2, 0x708 | r2 = 0x708;
0x00018d36 strd r8, sl, [sb, 4] | __asm ("strd r8, sl, [sb, 4]");
0x00018d3a str.w r2, [sb, 0x22c] | __asm ("str.w r2, [sb, aav.0x0000022c]");
0x00018d3e add.w r8, sb, 0x264 | r8 = sb + 0x264;
0x00018d42 movs r2, 0 | r2 = 0;
0x00018d44 mov r0, r8 | r0 = r8;
0x00018d46 mov r1, r2 | r1 = r2;
0x00018d48 mov.w sl, 0 | sl = 0;
0x00018d4c bl 0x9896 | fcn_00009896 (r0, r1, r2);
0x00018d50 ldr r3, [sp, 0x30] | r3 = *(arg_30h);
0x00018d52 mov.w r2, -1 | r2 = -1;
0x00018d56 add.w r1, sb, 0x23c | r1 = sb + 0x23c;
0x00018d5a mov r0, r7 | r0 = r7;
0x00018d5c str.w sl, [sb, 0x260] | __asm ("str.w sl, aav.0x000000ff");
0x00018d60 strd r2, r2, [sb, 0x254] | __asm ("strd r2, r2, aav.0x000000ff");
0x00018d64 str.w r3, [sb, 0x25c] | __asm ("str.w r3, aav.0x000000ff");
0x00018d68 blx 0x8c98 | r0 = ixmlDocument_createTextNode ();
0x00018d6c mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x00018d6e cbz r0, 0x18d84 | goto label_4;
| }
0x00018d70 mov r1, sl | r1 = sl;
0x00018d72 mov r0, r8 | r0 = r8;
0x00018d74 bl 0x9978 | fcn_00009978 (r0, r1, r2);
0x00018d78 ldr r0, [r4] | r0 = *(r4);
0x00018d7a bl 0x18792 | fcn_00018792 (r0);
0x00018d7e b 0x18ce2 | goto label_0;
| label_3:
0x00018d80 ldr r1, [sp, 0x34] | r1 = *(arg_34h);
0x00018d82 b 0x18d2e |
| } while (1);
| label_4:
0x00018d84 ldr r1, [pc, 0x84] |
0x00018d86 ldr.w r0, [sb, 0x23c] | r0 = *((sb + 0x23c));
0x00018d8a add r1, pc | r1 = 0x31b9a;
0x00018d8c blx 0x8a84 | fcn_00008a84 ();
0x00018d90 str.w r0, [sb, 0x240] | __asm ("str.w r0, aav.0x000000ff");
| if (r0 == 0) {
0x00018d94 cbnz r0, 0x18db2 |
0x00018d96 mov r1, r5 | r1 = r5;
0x00018d98 mov r0, r8 | r0 = r8;
0x00018d9a bl 0x9978 | fcn_00009978 (r0, r1, r2);
0x00018d9e ldr.w r0, [sb, 0x23c] | r0 = *((sb + 0x23c));
0x00018da2 mvn r5, 0x6a | r5 = ~0x6a;
0x00018da6 blx 0x8914 | ixmlCloneDOMString ();
0x00018daa ldr r0, [r4] | r0 = *(r4);
0x00018dac bl 0x18792 | fcn_00018792 (r0);
0x00018db0 b 0x18ce2 | goto label_0;
| }
0x00018db2 ldr r1, [pc, 0x5c] |
0x00018db4 ldr.w r0, [sb, 0x23c] | r0 = *((sb + 0x23c));
0x00018db8 add r1, pc | r1 = 0x31bce;
0x00018dba blx 0x8a84 | fcn_00008a84 ();
0x00018dbe add.w r1, sb, 0x248 | r1 = sb + 0x248;
0x00018dc2 str.w r0, [sb, 0x244] | __asm ("str.w r0, aav.0x000000ff");
0x00018dc6 str.w r5, [sb, 0x248] | __asm ("str.w r5, aav.0x000000ff");
0x00018dca mov r2, r7 | r2 = r7;
0x00018dcc strd r5, r5, [r1, 4] | __asm ("strd r5, r5, [r1, 4]");
0x00018dd0 ldr.w r0, [sb, 0x23c] | r0 = *((sb + 0x23c));
0x00018dd4 bl 0x101ec | fcn_000101ec (r0, r1, r2);
0x00018dd8 ldr r3, [sp, 0x30] | r3 = *(arg_30h);
0x00018dda cmp r3, 2 |
0x00018ddc mov.w r3, 1 | r3 = 1;
| if (r3 != 2) {
0x00018de0 bne 0x18dea | goto label_5;
| }
0x00018de2 ldr r2, [pc, 0x30] | r2 = *(0x18e16);
| do {
0x00018de4 ldr r2, [r6, r2] | r2 = *((r6 + r2));
0x00018de6 str r3, [r2] | *(r2) = r3;
0x00018de8 b 0x18ce2 | goto label_0;
| label_5:
0x00018dea ldr r2, [pc, 0x2c] | r2 = *(0x18e1a);
0x00018dec b 0x18de4 |
| } while (1);
| label_1:
0x00018dee mvn r5, 0x73 | r5 = ~0x73;
0x00018df2 b 0x18ce2 | goto label_0;
| label_2:
0x00018df4 mvn r5, 0x64 | r5 = ~0x64;
0x00018df8 b 0x18ce2 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x18e1c */
| #include <stdint.h>
|
; (fcn) sym.UpnpRegisterRootDevice3 () | void UpnpRegisterRootDevice3 (int16_t arg_10h) {
| int16_t var_0h;
| int16_t var_4h;
0x00018e1c push {r0, r1, r4, lr} |
0x00018e1e movs r4, 0 | r4 = 0;
0x00018e20 str r4, [sp, 4] | var_4h = r4;
0x00018e22 ldr r4, [sp, 0x10] | r4 = *(arg_10h);
0x00018e24 str r4, [sp] | *(sp) = r4;
0x00018e26 blx 0x8f78 | fcn_00008f78 ();
0x00018e2a add sp, 8 |
0x00018e2c pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x19064 */
| #include <stdint.h>
|
; (fcn) sym.UpnpRegisterRootDevice2 () | void UpnpRegisterRootDevice2 (int16_t arg_38h, int16_t arg_3ch, int16_t arg_40h, int16_t arg1, int16_t arg2, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r3 = arg4;
0x00019064 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00019068 mov r5, r3 | r5 = r3;
0x0001906a ldr r7, [pc, 0x150] |
0x0001906c sub sp, 0x14 |
0x0001906e mov sl, r0 | sl = r0;
0x00019070 mov fp, r1 |
0x00019072 ldr r3, [pc, 0x14c] | r3 = *(0x191c2);
0x00019074 add r7, pc | r7 = 0x32236;
0x00019076 ldr r6, [sp, 0x40] | r6 = *(arg_40h);
0x00019078 ldr r3, [r7, r3] | r3 = *(0x32236);
0x0001907a mov r0, r3 | r0 = r3;
0x0001907c str r3, [sp, 0xc] | var_ch = r3;
0x0001907e blx 0x8930 | fcn_00008930 ();
0x00019082 ldr r3, [pc, 0x140] | r3 = *(0x191c6);
0x00019084 ldr r3, [r7, r3] | r3 = *(0x32236);
0x00019086 ldr.w r8, [r3] | r8 = *(0x32236);
0x0001908a cmp.w r8, 1 |
| if (r8 != 1) {
0x0001908e bne.w 0x191ae | goto label_1;
| }
0x00019092 cmp r6, 0 |
| if (r6 == 0) {
0x00019094 beq.w 0x191b4 | goto label_2;
| }
0x00019098 ldr r3, [sp, 0x38] | r3 = *(arg_38h);
0x0001909a cmp r3, 0 |
| if (r3 == 0) {
0x0001909c beq.w 0x191b4 | goto label_2;
| }
0x000190a0 bl 0x184c4 | fcn_000184c4 ();
0x000190a4 str r0, [r6] | *(r6) = r0;
0x000190a6 adds r0, 0x66 | r0 += 0x66;
0x000190a8 bne 0x190bc |
| while (r0 == 0) {
0x000190aa mvn sl, 0x67 | sl = ~0x67;
| label_0:
0x000190ae ldr r0, [sp, 0xc] | r0 = var_ch;
0x000190b0 blx 0x920c | fcn_0000920c ();
0x000190b4 mov r0, sl | r0 = sl;
0x000190b6 add sp, 0x14 |
0x000190b8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000190bc mov.w r0, 0x298 | r0 = 0x298;
0x000190c0 blx 0x8e30 | r0 = vfprintf_chk ()
0x000190c4 mov r4, r0 | r4 = r0;
0x000190c6 cmp r0, 0 |
0x000190c8 beq 0x190aa |
| }
0x000190ca mov.w r2, 0x298 | r2 = 0x298;
0x000190ce movs r1, 0 | r1 = 0;
0x000190d0 blx 0x9144 | fcn_00009144 ();
0x000190d4 ldr r3, [pc, 0xf0] |
0x000190d6 add.w sb, r4, 0x10 | sb = r4 + 0x10;
0x000190da ldr r2, [r6] | r2 = *(r6);
0x000190dc mov r0, sl | r0 = sl;
0x000190de mov r1, fp | r1 = fp;
0x000190e0 add r3, pc | r3 = 0x322ac;
0x000190e2 str.w r4, [r3, r2, lsl 2] | __asm ("str.w r4, [r3, r2, lsl 2]");
0x000190e6 add.w r3, r4, 0x23c | r3 = r4 + 0x23c;
0x000190ea str r3, [sp] | *(sp) = r3;
0x000190ec mov r2, r5 | r2 = r5;
0x000190ee movs r3, 2 | r3 = 2;
0x000190f0 str.w sb, [sp, 4] | __asm ("str.w sb, [var_4h]");
0x000190f4 bl 0x18e2e | r0 = fcn_00018e2e (r0, r1, r2, r3, r4);
0x000190f8 mov sl, r0 | sl = r0;
| if (r0 != 0) {
0x000190fa cbz r0, 0x19104 |
0x000190fc ldr r0, [r6] | r0 = *(r6);
0x000190fe bl 0x18792 | fcn_00018792 (r0);
0x00019102 b 0x190ae | goto label_0;
| }
0x00019104 movs r2, 0xb3 | r2 = 0xb3;
0x00019106 mov r1, sb | r1 = sb;
0x00019108 add.w r0, r4, 0xc4 | r0 = r4 + 0xc4;
0x0001910c blx 0x9174 | fcn_00009174 ();
0x00019110 ldr r3, [sp, 0x38] | r3 = *(arg_38h);
0x00019112 subs r5, 0 |
0x00019114 it ne |
| if (r5 == 0) {
0x00019116 movne r5, 1 | r5 = 1;
| }
0x00019118 mov r2, sl | r2 = sl;
0x0001911a str r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
0x0001911c add.w r5, r4, 0x264 | r5 = r4 + 0x264;
0x00019120 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00019122 mov r1, sl | r1 = sl;
0x00019124 ldr r3, [sp, 0x3c] | r3 = *(arg_3ch);
0x00019126 mov r0, r5 | r0 = r5;
0x00019128 str.w r8, [r4] | __asm ("str.w r8, [r4]");
0x0001912c strd sl, sl, [r4, 0x240] | __asm ("strd sl, sl, aav.0x000000ff");
0x00019130 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x00019132 mov.w r3, 0x708 | r3 = 0x708;
0x00019136 str.w r3, [r4, 0x22c] | __asm ("str.w r3, [r4, aav.0x0000022c]");
0x0001913a bl 0x9896 | fcn_00009896 (r0, r1, r2);
0x0001913e ldr r1, [pc, 0x8c] |
0x00019140 mov.w r3, -1 | r3 = -1;
0x00019144 strd r3, r3, [r4, 0x254] | __asm ("strd r3, r3, aav.0x000000ff");
0x00019148 movs r3, 2 | r3 = 2;
0x0001914a ldr.w r0, [r4, 0x23c] | r0 = *((r4 + 0x23c));
0x0001914e add r1, pc | r1 = 0x32320;
0x00019150 str.w sl, [r4, 0x260] | __asm ("str.w sl, aav.0x000000ff");
0x00019154 str.w r3, [r4, 0x25c] | __asm ("str.w r3, aav.0x000000ff");
0x00019158 blx 0x8a84 | fcn_00008a84 ();
0x0001915c str.w r0, [r4, 0x240] | __asm ("str.w r0, aav.0x000000ff");
| if (r0 == 0) {
0x00019160 cbnz r0, 0x1917e |
0x00019162 mov r1, sl | r1 = sl;
0x00019164 mov r0, r5 | r0 = r5;
0x00019166 bl 0x9978 | fcn_00009978 (r0, r1, r2);
0x0001916a ldr.w r0, [r4, 0x23c] | r0 = *((r4 + 0x23c));
0x0001916e mvn sl, 0x6a | sl = ~0x6a;
0x00019172 blx 0x8914 | ixmlCloneDOMString ();
0x00019176 ldr r0, [r6] | r0 = *(r6);
0x00019178 bl 0x18792 | fcn_00018792 (r0);
0x0001917c b 0x190ae | goto label_0;
| }
0x0001917e ldr r1, [pc, 0x50] |
0x00019180 ldr.w r0, [r4, 0x23c] | r0 = *((r4 + 0x23c));
0x00019182 lsls r4, r7, 8 | r4 = r7 << 8;
0x00019184 add r1, pc | r1 = 0x3235a;
0x00019186 blx 0x8a84 | fcn_00008a84 ();
0x0001918a add.w r1, r4, 0x248 | r1 = r4 + 0x248;
0x0001918e str.w r0, [r4, 0x244] | __asm ("str.w r0, aav.0x000000ff");
0x00019192 str.w sl, [r4, 0x248] | __asm ("str.w sl, aav.0x000000ff");
0x00019196 mov r2, sb | r2 = sb;
0x00019198 strd sl, sl, [r1, 4] | __asm ("strd sl, sl, [r1, 4]");
0x0001919c ldr.w r0, [r4, 0x23c] | r0 = *((r4 + 0x23c));
0x000191a0 bl 0x101ec | fcn_000101ec (r0, r1, r2);
0x000191a4 ldr r3, [pc, 0x2c] | r3 = *(0x191d4);
0x000191a6 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x000191a8 str.w r8, [r3] | __asm ("str.w r8, [r3]");
0x000191ac b 0x190ae | goto label_0;
| label_1:
0x000191ae mvn sl, 0x73 | sl = ~0x73;
0x000191b2 b 0x190ae | goto label_0;
| label_2:
0x000191b4 mvn sl, 0x64 | sl = ~0x64;
0x000191b8 b 0x190ae | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x19064 */
| #include <stdint.h>
|
; (fcn) sym.UpnpRegisterRootDevice2 () | void UpnpRegisterRootDevice2 (int16_t arg_38h, int16_t arg_3ch, int16_t arg_40h, int16_t arg1, int16_t arg2, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r3 = arg4;
0x00019064 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00019068 mov r5, r3 | r5 = r3;
0x0001906a ldr r7, [pc, 0x150] |
0x0001906c sub sp, 0x14 |
0x0001906e mov sl, r0 | sl = r0;
0x00019070 mov fp, r1 |
0x00019072 ldr r3, [pc, 0x14c] | r3 = *(0x191c2);
0x00019074 add r7, pc | r7 = 0x32236;
0x00019076 ldr r6, [sp, 0x40] | r6 = *(arg_40h);
0x00019078 ldr r3, [r7, r3] | r3 = *(0x32236);
0x0001907a mov r0, r3 | r0 = r3;
0x0001907c str r3, [sp, 0xc] | var_ch = r3;
0x0001907e blx 0x8930 | fcn_00008930 ();
0x00019082 ldr r3, [pc, 0x140] | r3 = *(0x191c6);
0x00019084 ldr r3, [r7, r3] | r3 = *(0x32236);
0x00019086 ldr.w r8, [r3] | r8 = *(0x32236);
0x0001908a cmp.w r8, 1 |
| if (r8 != 1) {
0x0001908e bne.w 0x191ae | goto label_1;
| }
0x00019092 cmp r6, 0 |
| if (r6 == 0) {
0x00019094 beq.w 0x191b4 | goto label_2;
| }
0x00019098 ldr r3, [sp, 0x38] | r3 = *(arg_38h);
0x0001909a cmp r3, 0 |
| if (r3 == 0) {
0x0001909c beq.w 0x191b4 | goto label_2;
| }
0x000190a0 bl 0x184c4 | fcn_000184c4 ();
0x000190a4 str r0, [r6] | *(r6) = r0;
0x000190a6 adds r0, 0x66 | r0 += 0x66;
0x000190a8 bne 0x190bc |
| while (r0 == 0) {
0x000190aa mvn sl, 0x67 | sl = ~0x67;
| label_0:
0x000190ae ldr r0, [sp, 0xc] | r0 = var_ch;
0x000190b0 blx 0x920c | fcn_0000920c ();
0x000190b4 mov r0, sl | r0 = sl;
0x000190b6 add sp, 0x14 |
0x000190b8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000190bc mov.w r0, 0x298 | r0 = 0x298;
0x000190c0 blx 0x8e30 | r0 = vfprintf_chk ()
0x000190c4 mov r4, r0 | r4 = r0;
0x000190c6 cmp r0, 0 |
0x000190c8 beq 0x190aa |
| }
0x000190ca mov.w r2, 0x298 | r2 = 0x298;
0x000190ce movs r1, 0 | r1 = 0;
0x000190d0 blx 0x9144 | fcn_00009144 ();
0x000190d4 ldr r3, [pc, 0xf0] |
0x000190d6 add.w sb, r4, 0x10 | sb = r4 + 0x10;
0x000190da ldr r2, [r6] | r2 = *(r6);
0x000190dc mov r0, sl | r0 = sl;
0x000190de mov r1, fp | r1 = fp;
0x000190e0 add r3, pc | r3 = 0x322ac;
0x000190e2 str.w r4, [r3, r2, lsl 2] | __asm ("str.w r4, [r3, r2, lsl 2]");
0x000190e6 add.w r3, r4, 0x23c | r3 = r4 + 0x23c;
0x000190ea str r3, [sp] | *(sp) = r3;
0x000190ec mov r2, r5 | r2 = r5;
0x000190ee movs r3, 2 | r3 = 2;
0x000190f0 str.w sb, [sp, 4] | __asm ("str.w sb, [var_4h]");
0x000190f4 bl 0x18e2e | r0 = fcn_00018e2e (r0, r1, r2, r3, r4);
0x000190f8 mov sl, r0 | sl = r0;
| if (r0 != 0) {
0x000190fa cbz r0, 0x19104 |
0x000190fc ldr r0, [r6] | r0 = *(r6);
0x000190fe bl 0x18792 | fcn_00018792 (r0);
0x00019102 b 0x190ae | goto label_0;
| }
0x00019104 movs r2, 0xb3 | r2 = 0xb3;
0x00019106 mov r1, sb | r1 = sb;
0x00019108 add.w r0, r4, 0xc4 | r0 = r4 + 0xc4;
0x0001910c blx 0x9174 | fcn_00009174 ();
0x00019110 ldr r3, [sp, 0x38] | r3 = *(arg_38h);
0x00019112 subs r5, 0 |
0x00019114 it ne |
| if (r5 == 0) {
0x00019116 movne r5, 1 | r5 = 1;
| }
0x00019118 mov r2, sl | r2 = sl;
0x0001911a str r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
0x0001911c add.w r5, r4, 0x264 | r5 = r4 + 0x264;
0x00019120 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00019122 mov r1, sl | r1 = sl;
0x00019124 ldr r3, [sp, 0x3c] | r3 = *(arg_3ch);
0x00019126 mov r0, r5 | r0 = r5;
0x00019128 str.w r8, [r4] | __asm ("str.w r8, [r4]");
0x0001912c strd sl, sl, [r4, 0x240] | __asm ("strd sl, sl, aav.0x000000ff");
0x00019130 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x00019132 mov.w r3, 0x708 | r3 = 0x708;
0x00019136 str.w r3, [r4, 0x22c] | __asm ("str.w r3, [r4, aav.0x0000022c]");
0x0001913a bl 0x9896 | fcn_00009896 (r0, r1, r2);
0x0001913e ldr r1, [pc, 0x8c] |
0x00019140 mov.w r3, -1 | r3 = -1;
0x00019144 strd r3, r3, [r4, 0x254] | __asm ("strd r3, r3, aav.0x000000ff");
0x00019148 movs r3, 2 | r3 = 2;
0x0001914a ldr.w r0, [r4, 0x23c] | r0 = *((r4 + 0x23c));
0x0001914e add r1, pc | r1 = 0x32320;
0x00019150 str.w sl, [r4, 0x260] | __asm ("str.w sl, aav.0x000000ff");
0x00019154 str.w r3, [r4, 0x25c] | __asm ("str.w r3, aav.0x000000ff");
0x00019158 blx 0x8a84 | fcn_00008a84 ();
0x0001915c str.w r0, [r4, 0x240] | __asm ("str.w r0, aav.0x000000ff");
| if (r0 == 0) {
0x00019160 cbnz r0, 0x1917e |
0x00019162 mov r1, sl | r1 = sl;
0x00019164 mov r0, r5 | r0 = r5;
0x00019166 bl 0x9978 | fcn_00009978 (r0, r1, r2);
0x0001916a ldr.w r0, [r4, 0x23c] | r0 = *((r4 + 0x23c));
0x0001916e mvn sl, 0x6a | sl = ~0x6a;
0x00019172 blx 0x8914 | ixmlCloneDOMString ();
0x00019176 ldr r0, [r6] | r0 = *(r6);
0x00019178 bl 0x18792 | fcn_00018792 (r0);
0x0001917c b 0x190ae | goto label_0;
| }
0x0001917e ldr r1, [pc, 0x50] |
0x00019180 ldr.w r0, [r4, 0x23c] | r0 = *((r4 + 0x23c));
0x00019182 lsls r4, r7, 8 | r4 = r7 << 8;
0x00019184 add r1, pc | r1 = 0x3235a;
0x00019186 blx 0x8a84 | fcn_00008a84 ();
0x0001918a add.w r1, r4, 0x248 | r1 = r4 + 0x248;
0x0001918e str.w r0, [r4, 0x244] | __asm ("str.w r0, aav.0x000000ff");
0x00019192 str.w sl, [r4, 0x248] | __asm ("str.w sl, aav.0x000000ff");
0x00019196 mov r2, sb | r2 = sb;
0x00019198 strd sl, sl, [r1, 4] | __asm ("strd sl, sl, [r1, 4]");
0x0001919c ldr.w r0, [r4, 0x23c] | r0 = *((r4 + 0x23c));
0x000191a0 bl 0x101ec | fcn_000101ec (r0, r1, r2);
0x000191a4 ldr r3, [pc, 0x2c] | r3 = *(0x191d4);
0x000191a6 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x000191a8 str.w r8, [r3] | __asm ("str.w r8, [r3]");
0x000191ac b 0x190ae | goto label_0;
| label_1:
0x000191ae mvn sl, 0x73 | sl = ~0x73;
0x000191b2 b 0x190ae | goto label_0;
| label_2:
0x000191b4 mvn sl, 0x64 | sl = ~0x64;
0x000191b8 b 0x190ae | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x18c80 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.UpnpRegisterRootDevice4 () | void UpnpRegisterRootDevice4 (int16_t arg_30h, int16_t arg_34h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00018c80 push.w {r0, r1, r2, r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00018c84 mov r4, r3 | r4 = r3;
0x00018c86 ldr r6, [pc, 0x174] |
0x00018c88 mov r5, r0 | r5 = r0;
0x00018c8a mov r8, r1 | r8 = r1;
0x00018c8c mov sl, r2 | sl = r2;
0x00018c8e ldr r3, [pc, 0x170] | r3 = *(0x18e02);
0x00018c90 add r6, pc | r6 = 0x31a92;
0x00018c92 ldr r3, [r6, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018c94 mov r0, r3 | r0 = r3;
0x00018c96 str r3, [sp, 4] | var_4h = r3;
0x00018c98 blx 0x8930 | fcn_00008930 ();
0x00018c9c ldr r3, [pc, 0x164] | r3 = *(0x18e04);
0x00018c9e ldr r3, [r6, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018ca0 ldr.w fp, [r3] | fp = imp._ITM_deregisterTMCloneTable;
0x00018ca4 cmp.w fp, 1 |
0x00018ca6 lsrs r1, r0, 0x1c | r1 = r0 >> 0x1c;
| if (r1 != r0) {
0x00018ca8 bne.w 0x18dee | goto label_1;
| }
0x00018cac cmp r4, 0 |
| if (r4 == 0) {
0x00018cae beq.w 0x18df4 | goto label_2;
| }
0x00018cb2 cmp.w r8, 0 |
| if (r8 == 0) {
0x00018cb6 beq.w 0x18df4 | goto label_2;
| }
0x00018cba cmp r5, 0 |
| if (r5 == 0) {
0x00018cbc beq.w 0x18df4 | goto label_2;
| }
0x00018cc0 ldrb r3, [r5] | r3 = *(r5);
0x00018cc2 cmp r3, 0 |
| if (r3 == 0) {
0x00018cc4 beq.w 0x18df4 | goto label_2;
| }
0x00018cc8 ldr r3, [sp, 0x30] | r3 = *(arg_30h);
0x00018cca bic r3, r3, 8 | r3 = BIT_MASK (r3, 8);
0x00018cce cmp r3, 2 |
| if (r3 != 2) {
0x00018cd0 bne.w 0x18df4 | goto label_2;
| }
0x00018cd4 bl 0x184c4 | fcn_000184c4 ();
0x00018cd8 str r0, [r4] | *(r4) = r0;
0x00018cda adds r0, 0x66 | r0 += 0x66;
0x00018cdc bne 0x18cf0 |
| while (r0 == 0) {
0x00018cde mvn r5, 0x67 | r5 = ~0x67;
| label_0:
0x00018ce2 ldr r0, [sp, 4] | r0 = var_4h;
0x00018ce4 blx 0x920c | fcn_0000920c ();
0x00018ce8 mov r0, r5 | r0 = r5;
0x00018cea add sp, 0xc |
0x00018cec pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00018cf0 mov.w r0, 0x298 | r0 = 0x298;
0x00018cf4 blx 0x8e30 | r0 = vfprintf_chk ()
0x00018cf8 mov sb, r0 | sb = r0;
0x00018cfa cmp r0, 0 |
0x00018cfc beq 0x18cde |
| }
0x00018cfe mov.w r2, 0x298 | r2 = 0x298;
0x00018d02 movs r1, 0 | r1 = 0;
0x00018d04 blx 0x9144 | fcn_00009144 ();
0x00018d08 ldr r2, [pc, 0xfc] |
0x00018d0a mov r7, sb | r7 = sb;
0x00018d0c ldr r1, [r4] | r1 = *(r4);
0x00018d0e str fp, [r7], 0x10 | *(r7) = fp;
| r7 += 0x10;
0x00018d12 mov r0, r7 | r0 = r7;
0x00018d14 add r2, pc | r2 = 0x31b20;
0x00018d16 str.w sb, [r2, r1, lsl 2] | __asm ("str.w sb, [r2, r1, lsl 2]");
0x00018d1a movs r2, 0xb3 | r2 = 0xb3;
0x00018d1c mov r1, r5 | r1 = r5;
0x00018d1e blx 0x9174 | fcn_00009174 ();
0x00018d22 ldr r3, [sp, 0x34] | r3 = *(arg_34h);
0x00018d24 add.w r0, sb, 0xc4 | r0 = sb + 0xc4;
0x00018d28 movs r2, 0xb3 | r2 = 0xb3;
| if (r3 != 0) {
0x00018d2a cbnz r3, 0x18d80 | goto label_3;
| }
0x00018d2c mov r1, r5 | r1 = r5;
| do {
0x00018d2e blx 0x9174 | fcn_00009174 ();
0x00018d32 mov.w r2, 0x708 | r2 = 0x708;
0x00018d36 strd r8, sl, [sb, 4] | __asm ("strd r8, sl, [sb, 4]");
0x00018d3a str.w r2, [sb, 0x22c] | __asm ("str.w r2, [sb, aav.0x0000022c]");
0x00018d3e add.w r8, sb, 0x264 | r8 = sb + 0x264;
0x00018d42 movs r2, 0 | r2 = 0;
0x00018d44 mov r0, r8 | r0 = r8;
0x00018d46 mov r1, r2 | r1 = r2;
0x00018d48 mov.w sl, 0 | sl = 0;
0x00018d4c bl 0x9896 | fcn_00009896 (r0, r1, r2);
0x00018d50 ldr r3, [sp, 0x30] | r3 = *(arg_30h);
0x00018d52 mov.w r2, -1 | r2 = -1;
0x00018d56 add.w r1, sb, 0x23c | r1 = sb + 0x23c;
0x00018d5a mov r0, r7 | r0 = r7;
0x00018d5c str.w sl, [sb, 0x260] | __asm ("str.w sl, aav.0x000000ff");
0x00018d60 strd r2, r2, [sb, 0x254] | __asm ("strd r2, r2, aav.0x000000ff");
0x00018d64 str.w r3, [sb, 0x25c] | __asm ("str.w r3, aav.0x000000ff");
0x00018d68 blx 0x8c98 | r0 = ixmlDocument_createTextNode ();
0x00018d6c mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x00018d6e cbz r0, 0x18d84 | goto label_4;
| }
0x00018d70 mov r1, sl | r1 = sl;
0x00018d72 mov r0, r8 | r0 = r8;
0x00018d74 bl 0x9978 | fcn_00009978 (r0, r1, r2);
0x00018d78 ldr r0, [r4] | r0 = *(r4);
0x00018d7a bl 0x18792 | fcn_00018792 (r0);
0x00018d7e b 0x18ce2 | goto label_0;
| label_3:
0x00018d80 ldr r1, [sp, 0x34] | r1 = *(arg_34h);
0x00018d82 b 0x18d2e |
| } while (1);
| label_4:
0x00018d84 ldr r1, [pc, 0x84] |
0x00018d86 ldr.w r0, [sb, 0x23c] | r0 = *((sb + 0x23c));
0x00018d8a add r1, pc | r1 = 0x31b9a;
0x00018d8c blx 0x8a84 | fcn_00008a84 ();
0x00018d90 str.w r0, [sb, 0x240] | __asm ("str.w r0, aav.0x000000ff");
| if (r0 == 0) {
0x00018d94 cbnz r0, 0x18db2 |
0x00018d96 mov r1, r5 | r1 = r5;
0x00018d98 mov r0, r8 | r0 = r8;
0x00018d9a bl 0x9978 | fcn_00009978 (r0, r1, r2);
0x00018d9e ldr.w r0, [sb, 0x23c] | r0 = *((sb + 0x23c));
0x00018da2 mvn r5, 0x6a | r5 = ~0x6a;
0x00018da6 blx 0x8914 | ixmlCloneDOMString ();
0x00018daa ldr r0, [r4] | r0 = *(r4);
0x00018dac bl 0x18792 | fcn_00018792 (r0);
0x00018db0 b 0x18ce2 | goto label_0;
| }
0x00018db2 ldr r1, [pc, 0x5c] |
0x00018db4 ldr.w r0, [sb, 0x23c] | r0 = *((sb + 0x23c));
0x00018db8 add r1, pc | r1 = 0x31bce;
0x00018dba blx 0x8a84 | fcn_00008a84 ();
0x00018dbe add.w r1, sb, 0x248 | r1 = sb + 0x248;
0x00018dc2 str.w r0, [sb, 0x244] | __asm ("str.w r0, aav.0x000000ff");
0x00018dc6 str.w r5, [sb, 0x248] | __asm ("str.w r5, aav.0x000000ff");
0x00018dca mov r2, r7 | r2 = r7;
0x00018dcc strd r5, r5, [r1, 4] | __asm ("strd r5, r5, [r1, 4]");
0x00018dd0 ldr.w r0, [sb, 0x23c] | r0 = *((sb + 0x23c));
0x00018dd4 bl 0x101ec | fcn_000101ec (r0, r1, r2);
0x00018dd8 ldr r3, [sp, 0x30] | r3 = *(arg_30h);
0x00018dda cmp r3, 2 |
0x00018ddc mov.w r3, 1 | r3 = 1;
| if (r3 != 2) {
0x00018de0 bne 0x18dea | goto label_5;
| }
0x00018de2 ldr r2, [pc, 0x30] | r2 = *(0x18e16);
| do {
0x00018de4 ldr r2, [r6, r2] | r2 = *((r6 + r2));
0x00018de6 str r3, [r2] | *(r2) = r3;
0x00018de8 b 0x18ce2 | goto label_0;
| label_5:
0x00018dea ldr r2, [pc, 0x2c] | r2 = *(0x18e1a);
0x00018dec b 0x18de4 |
| } while (1);
| label_1:
0x00018dee mvn r5, 0x73 | r5 = ~0x73;
0x00018df2 b 0x18ce2 | goto label_0;
| label_2:
0x00018df4 mvn r5, 0x64 | r5 = ~0x64;
0x00018df8 b 0x18ce2 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x19f9c */
| #include <stdint.h>
|
; (fcn) sym.UpnpRenewSubscriptionAsync () | void UpnpRenewSubscriptionAsync (int16_t arg_50h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00019f9c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00019fa0 mov sb, r2 | sb = r2;
0x00019fa2 ldr r2, [pc, 0x110] |
0x00019fa4 mov r8, r3 | r8 = r3;
0x00019fa6 sub sp, 0x2c |
0x00019fa8 mov sl, r0 | sl = r0;
0x00019faa ldr r3, [pc, 0x10c] | r3 = *(0x1a0ba);
0x00019fac add r6, sp, 8 | r6 += var_8h;
0x00019fae add r2, pc | r2 = 0x34068;
0x00019fb0 ldr r5, [pc, 0x108] |
0x00019fb2 mov r7, r1 | r7 = r1;
0x00019fb4 mov r0, r6 | r0 = r6;
0x00019fb6 ldr r3, [r2, r3] |
0x00019fb8 movs r1, 0 | r1 = 0;
0x00019fba movs r2, 0x1c | r2 = 0x1c;
0x00019fbc ldr.w fp, [sp, 0x50] | fp = *(arg_50h);
0x00019fc0 add r5, pc | r5 = 0x34080;
0x00019fc2 ldr r3, [r3] | r3 = *(0x34068);
0x00019fc4 str r3, [sp, 0x24] | var_24h = r3;
0x00019fc6 mov.w r3, 0 | r3 = 0;
0x00019fca str r1, [sp, 4] | var_4h = r1;
0x00019fcc blx 0x9144 | fcn_00009144 ();
0x00019fd0 ldr r3, [pc, 0xec] | r3 = *(0x1a0c0);
0x00019fd2 ldr r3, [r5, r3] |
0x00019fd4 ldr r3, [r3] | r3 = *(0x34080);
0x00019fd6 cmp r3, 1 |
| if (r3 != 1) {
0x00019fd8 bne 0x1a0a0 | goto label_2;
| }
0x00019fda ldr r3, [pc, 0xe8] | r3 = *(0x1a0c6);
0x00019fdc ldr r4, [r5, r3] | r4 = *((r5 + r3));
0x00019fde mov r0, r4 | r0 = r4;
0x00019fe0 blx 0x8d34 | strcpy (r0, r1);
0x00019fe4 add r1, sp, 4 | r1 += var_4h;
0x00019fe6 mov r0, sl | r0 = sl;
0x00019fe8 bl 0x19470 | r0 = fcn_00019470 (r0, r1);
| if (r0 == 0) {
0x00019fec cbz r0, 0x1a010 | goto label_3;
| }
0x00019fee mov r0, r4 | r0 = r4;
0x00019ff0 blx 0x920c | fcn_0000920c ();
0x00019ff4 mvn r0, 0x63 | r0 = ~0x63;
| do {
| label_1:
0x00019ff8 ldr r2, [pc, 0xcc] |
0x00019ffa ldr r3, [pc, 0xbc] | r3 = *(0x1a0ba);
0x00019ffc add r2, pc | r2 = 0x340c8;
0x00019ffe ldr r3, [r2, r3] | r3 = *(0x340c8);
0x0001a000 ldr r2, [r3] | r2 = *(0x340c8);
0x0001a002 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0001a004 eors r2, r3 | r2 ^= r3;
0x0001a006 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0001a00a beq 0x1a0ac | goto label_4;
| }
0x0001a00c blx 0x8b7c | fcn_00008b7c ();
| label_3:
0x0001a010 adds r3, r7, 1 | r3 = r7 + 1;
| if (r3 == r7) {
0x0001a012 beq 0x1a024 | goto label_5;
| }
0x0001a014 cmp r7, 0 |
| if (r7 > 0) {
0x0001a016 bgt 0x1a024 | goto label_5;
| }
| label_0:
0x0001a018 mov r0, r4 | r0 = r4;
0x0001a01a blx 0x920c | fcn_0000920c ();
0x0001a01e mvn r0, 0x64 | r0 = ~0x64;
0x0001a022 b 0x19ff8 |
| } while (1);
| label_5:
0x0001a024 cmp.w sb, 0 |
| if (sb == 0) {
0x0001a028 beq 0x1a018 | goto label_0;
| }
0x0001a02a cmp.w r8, 0 |
| if (r8 == 0) {
0x0001a02e beq 0x1a018 | goto label_0;
| }
0x0001a030 mov r0, r4 | r0 = r4;
0x0001a032 blx 0x920c | fcn_0000920c ();
0x0001a036 movw r0, 0x74c | r0 = 0x74c;
0x0001a03a blx 0x8e30 | r0 = vfprintf_chk ()
0x0001a03e mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0001a040 cbz r0, 0x1a0a6 | goto label_6;
| }
0x0001a042 movw r2, 0x74c | r2 = 0x74c;
0x0001a046 movs r1, 0 | r1 = 0;
0x0001a048 blx 0x9144 | fcn_00009144 ();
0x0001a04c movs r3, 9 | r3 = 9;
0x0001a04e movs r2, 0x2b | r2 = 0x2b;
0x0001a050 mov r1, sb | r1 = sb;
0x0001a052 strd r3, sl, [r4] | __asm ("strd r3, sl, [r4]");
0x0001a056 addw r0, r4, 0x70c | __asm ("addw r0, r4, aav.0x000000ff");
0x0001a05a blx 0x9174 | fcn_00009174 ();
0x0001a05e ldr r3, [pc, 0x6c] | r3 = *(0x1a0ce);
0x0001a060 mov r2, r4 | r2 = r4;
0x0001a062 str.w r8, [r4, 0x73c] | __asm ("str.w r8, aav.0x000000ff");
0x0001a066 mov r0, r6 | r0 = r6;
0x0001a068 str.w fp, [r4, 0x738] | __asm ("str.w fp, aav.0x000000ff");
0x0001a06c str r7, [r4, 8] | *((r4 + 8)) = r7;
0x0001a06e ldr r1, [r5, r3] | r1 = *((r5 + r3));
0x0001a070 bl 0xa7d4 | fcn_0000a7d4 (r0, r1, r2);
0x0001a074 ldr r3, [pc, 0x58] | r3 = *(0x1a0d0);
0x0001a076 mov r0, r6 | r0 = r6;
0x0001a078 ldr r1, [r5, r3] | r1 = *((r5 + r3));
0x0001a07a bl 0xa7fc | fcn_0000a7fc (r0, r1);
0x0001a07e movs r1, 1 | r1 = 1;
0x0001a080 mov r0, r6 | r0 = r6;
0x0001a082 bl 0xa7ec | fcn_0000a7ec (r0, r1);
0x0001a086 ldr r3, [pc, 0x4c] | r3 = *(0x1a0d6);
0x0001a088 movs r2, 0 | r2 = 0;
0x0001a08a mov r1, r6 | r1 = r6;
0x0001a08c ldr r0, [r5, r3] | r0 = *((r5 + r3));
0x0001a08e bl 0xa174 | r0 = fcn_0000a174 (r0, r1, r2);
0x0001a092 cmp r0, 0 |
| if (r0 == 0) {
0x0001a094 beq 0x19ff8 | goto label_1;
| }
0x0001a096 mov r0, r4 | r0 = r4;
0x0001a098 blx 0x894c | fcn_0000894c ();
0x0001a09c movs r0, 0 | r0 = 0;
0x0001a09e b 0x19ff8 | goto label_1;
| label_2:
0x0001a0a0 mvn r0, 0x73 | r0 = ~0x73;
0x0001a0a4 b 0x19ff8 | goto label_1;
| label_6:
0x0001a0a6 mvn r0, 0x67 | r0 = ~0x67;
0x0001a0aa b 0x19ff8 | goto label_1;
| label_4:
0x0001a0ac add sp, 0x2c |
0x0001a0ae pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0001a0b0 ldrh r0, [r6, 0x3e] | r0 = *((r6 + 0x3e));
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x1a564 */
| #include <stdint.h>
|
; (fcn) sym.UpnpSendActionAsync () | void UpnpSendActionAsync (int16_t arg_58h, int16_t arg_60h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0001a564 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001a568 sub sp, 0x34 |
0x0001a56a mov sl, r3 | sl = r3;
0x0001a56c ldrd r4, r3, [sp, 0x58] | __asm ("ldrd r4, r3, [arg_58h]");
0x0001a570 mov r7, r2 | r7 = r2;
0x0001a572 add r5, sp, 0x10 | r5 += var_10h;
0x0001a574 ldr r2, [pc, 0x154] |
0x0001a576 mov sb, r0 | sb = r0;
0x0001a578 str r3, [sp] | *(sp) = r3;
0x0001a57a mov r8, r1 | r8 = r1;
0x0001a57c ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x0001a57e movs r1, 0 | r1 = 0;
0x0001a580 add r2, pc | r2 = 0x34c50;
0x0001a582 ldr r6, [pc, 0x14c] |
0x0001a584 mov r0, r5 | r0 = r5;
0x0001a586 str r3, [sp, 4] | var_4h = r3;
0x0001a588 ldr r3, [pc, 0x148] | r3 = *(0x1a6d4);
0x0001a58a add r6, pc | r6 = 0x34c60;
0x0001a58c ldr r3, [r2, r3] |
0x0001a58e movs r2, 0x1c | r2 = 0x1c;
0x0001a590 ldr r3, [r3] | r3 = *(0x34c50);
0x0001a592 str r3, [sp, 0x2c] | var_2ch = r3;
0x0001a594 mov.w r3, 0 | r3 = 0;
0x0001a598 str r1, [sp, 0xc] | var_ch = r1;
0x0001a59a blx 0x9144 | fcn_00009144 ();
0x0001a59e ldr r3, [pc, 0x138] | r3 = *(0x1a6da);
0x0001a5a0 ldr r3, [r6, r3] |
0x0001a5a2 ldr r3, [r3] | r3 = *(0x34c60);
0x0001a5a4 cmp r3, 1 |
| if (r3 != 1) {
0x0001a5a6 bne.w 0x1a6ba | goto label_2;
| }
0x0001a5aa ldr r3, [pc, 0x130] | r3 = *(0x1a6de);
0x0001a5ac ldr.w fp, [r6, r3] | fp = *((r6 + r3));
0x0001a5b0 mov r0, fp | r0 = fp;
0x0001a5b2 blx 0x8d34 | strcpy (r0, r1);
0x0001a5b6 add r1, sp, 0xc | r1 += var_ch;
0x0001a5b8 mov r0, sb | r0 = sb;
0x0001a5ba bl 0x19470 | r0 = fcn_00019470 (r0, r1);
| if (r0 == 0) {
0x0001a5be cbz r0, 0x1a5e2 | goto label_3;
| }
0x0001a5c0 mov r0, fp | r0 = fp;
0x0001a5c2 blx 0x920c | fcn_0000920c ();
0x0001a5c6 mvn r0, 0x63 | r0 = ~0x63;
| do {
| label_1:
0x0001a5ca ldr r2, [pc, 0x114] |
0x0001a5cc ldr r3, [pc, 0x104] | r3 = *(0x1a6d4);
0x0001a5ce add r2, pc | r2 = 0x34cb4;
0x0001a5d0 ldr r3, [r2, r3] | r3 = *(0x34cb4);
0x0001a5d2 ldr r2, [r3] | r2 = *(0x34cb4);
0x0001a5d4 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0001a5d6 eors r2, r3 | r2 ^= r3;
0x0001a5d8 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0001a5dc beq 0x1a6c6 | goto label_4;
| }
0x0001a5de blx 0x8b7c | fcn_00008b7c ();
| label_3:
0x0001a5e2 mov r0, fp | r0 = fp;
0x0001a5e4 blx 0x920c | fcn_0000920c ();
0x0001a5e8 cmp.w r8, 0 |
| if (r8 == 0) {
0x0001a5ec beq 0x1a6c0 | goto label_5;
| }
0x0001a5ee cmp r7, 0 |
| if (r7 == 0) {
0x0001a5f0 beq 0x1a6c0 | goto label_5;
| }
0x0001a5f2 cmp r4, 0 |
| if (r4 == 0) {
0x0001a5f4 beq 0x1a6c0 | goto label_5;
| }
0x0001a5f6 ldr r3, [sp] | r3 = *(sp);
0x0001a5f8 cmp r3, 0 |
| if (r3 == 0) {
0x0001a5fa beq 0x1a6c0 | goto label_5;
| }
0x0001a5fc cmp.w sl, 0 |
| if (sl != 0) {
0x0001a600 bne 0x1a6c0 | goto label_5;
| }
0x0001a602 mov r0, r4 | r0 = r4;
0x0001a604 blx 0x8e60 | r0 = fcn_00008e60 ();
0x0001a608 mov fp, r0 |
| if (r0 == 0) {
0x0001a60a cbz r0, 0x1a66a | goto label_6;
| }
0x0001a60c movw r0, 0x74c | r0 = 0x74c;
0x0001a610 blx 0x8e30 | r0 = vfprintf_chk ()
0x0001a614 mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x0001a616 cbnz r0, 0x1a624 | goto label_7;
| }
0x0001a618 mov r0, fp | r0 = fp;
0x0001a61a blx 0x8fa8 | fcn_00008fa8 ();
| label_0:
0x0001a61e mvn r0, 0x67 | r0 = ~0x67;
0x0001a622 b 0x1a5ca |
| } while (1);
| label_7:
0x0001a624 movw r2, 0x74c | r2 = 0x74c;
0x0001a628 mov r1, sl | r1 = sl;
0x0001a62a blx 0x9144 | fcn_00009144 ();
0x0001a62e movs r2, 4 | r2 = 4;
0x0001a630 mov r1, r8 | r1 = r8;
0x0001a632 strd r2, sb, [r4] | __asm ("strd r2, sb, [r4]");
0x0001a636 addw r0, r4, 0x60c | __asm ("addw r0, r4, aav.0x000000ff");
0x0001a63a movs r2, 0xff | r2 = 0xff;
0x0001a63c blx 0x9174 | fcn_00009174 ();
0x0001a640 mov r1, r7 | r1 = r7;
0x0001a642 movs r2, 0xff | r2 = 0xff;
0x0001a644 addw r0, r4, 0x40c | __asm ("addw r0, r4, aav.0x000000ff");
0x0001a648 blx 0x9174 | fcn_00009174 ();
0x0001a64c addw r1, r4, 0x744 | __asm ("addw r1, r4, aav.0x000000ff");
0x0001a650 mov r0, fp | r0 = fp;
0x0001a652 blx 0x8bd0 | r0 = fcn_00008bd0 ();
0x0001a656 mov r7, r0 | r7 = r0;
| if (r0 == 0) {
0x0001a658 cbz r0, 0x1a670 | goto label_8;
| }
0x0001a65a mov r0, r4 | r0 = r4;
0x0001a65c blx 0x894c | fcn_0000894c ();
0x0001a660 mov r0, fp | r0 = fp;
0x0001a662 blx 0x8fa8 | fcn_00008fa8 ();
0x0001a666 cmp r7, 0x66 |
| if (r7 == 0x66) {
0x0001a668 beq 0x1a61e | goto label_0;
| }
| label_6:
0x0001a66a mvn r0, 0x72 | r0 = ~0x72;
0x0001a66e b 0x1a5ca | goto label_1;
| label_8:
0x0001a670 mov r0, fp | r0 = fp;
0x0001a672 blx 0x8fa8 | fcn_00008fa8 ();
0x0001a676 ldr r3, [sp, 4] | r3 = var_4h;
0x0001a678 mov r2, r4 | r2 = r4;
0x0001a67a mov r0, r5 | r0 = r5;
0x0001a67c str.w r3, [r4, 0x738] | __asm ("str.w r3, aav.0x000000ff");
0x0001a680 ldr r3, [sp] | r3 = *(sp);
0x0001a682 str.w r3, [r4, 0x73c] | __asm ("str.w r3, aav.0x000000ff");
0x0001a686 ldr r3, [pc, 0x5c] | r3 = *(0x1a6e6);
0x0001a688 ldr r1, [r6, r3] | r1 = *((r6 + r3));
0x0001a68a bl 0xa7d4 | fcn_0000a7d4 (r0, r1, r2);
0x0001a68e ldr r1, [pc, 0x58] |
0x0001a690 mov r0, r5 | r0 = r5;
0x0001a692 add r1, pc | r1 = 0x34d80;
0x0001a694 bl 0xa7fc | fcn_0000a7fc (r0, r1);
0x0001a698 movs r1, 1 | r1 = 1;
0x0001a69a mov r0, r5 | r0 = r5;
0x0001a69c bl 0xa7ec | fcn_0000a7ec (r0, r1);
0x0001a6a0 ldr r3, [pc, 0x48] | r3 = *(0x1a6ec);
0x0001a6a2 movs r2, 0 | r2 = 0;
0x0001a6a4 mov r1, r5 | r1 = r5;
0x0001a6a6 ldr r0, [r6, r3] | r0 = *((r6 + r3));
0x0001a6a8 bl 0xa174 | r0 = fcn_0000a174 (r0, r1, r2);
0x0001a6ac cmp r0, 0 |
| if (r0 == 0) {
0x0001a6ae beq 0x1a5ca | goto label_1;
| }
0x0001a6b0 mov r0, r4 | r0 = r4;
0x0001a6b2 bl 0x184fa | fcn_000184fa (r0);
0x0001a6b6 movs r0, 0 | r0 = 0;
0x0001a6b8 b 0x1a5ca | goto label_1;
| label_2:
0x0001a6ba mvn r0, 0x73 | r0 = ~0x73;
0x0001a6be b 0x1a5ca | goto label_1;
| label_5:
0x0001a6c0 mvn r0, 0x64 | r0 = ~0x64;
0x0001a6c4 b 0x1a5ca | goto label_1;
| label_4:
0x0001a6c6 add sp, 0x34 |
0x0001a6c8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x1a6f0 */
| #include <stdint.h>
|
; (fcn) sym.UpnpSendActionExAsync () | void UpnpSendActionExAsync (int16_t arg_70h, int16_t arg_78h, int16_t arg_7ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_44h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0001a6f0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001a6f4 sub sp, 0x4c |
0x0001a6f6 mov fp, r3 |
0x0001a6f8 ldr r3, [sp, 0x78] | r3 = *(arg_78h);
0x0001a6fa mov r8, r2 | r8 = r2;
0x0001a6fc add r6, sp, 0x28 | r6 += var_28h;
0x0001a6fe ldr r2, [pc, 0x1b8] |
0x0001a700 mov sl, r0 | sl = r0;
0x0001a702 str r3, [sp, 0x14] | var_14h = r3;
0x0001a704 mov sb, r1 | sb = r1;
0x0001a706 ldr r3, [sp, 0x7c] | r3 = *(arg_7ch);
0x0001a708 movs r1, 0 | r1 = 0;
0x0001a70a add r2, pc | r2 = 0x34fc8;
0x0001a70c ldr r7, [pc, 0x1ac] |
0x0001a70e mov r0, r6 | r0 = r6;
0x0001a710 ldrd r5, r4, [sp, 0x70] | __asm ("ldrd r5, r4, [arg_70h]");
0x0001a714 str r3, [sp, 0x1c] | var_1ch = r3;
0x0001a716 ldr r3, [pc, 0x1a8] | r3 = *(0x1a8c2);
0x0001a718 add r7, pc | r7 = 0x34fd8;
0x0001a71a ldr r3, [r2, r3] |
0x0001a71c movs r2, 0x1c | r2 = 0x1c;
0x0001a71e ldr r3, [r3] | r3 = *(0x34fc8);
0x0001a720 str r3, [sp, 0x44] | var_44h = r3;
0x0001a722 mov.w r3, 0 | r3 = 0;
0x0001a726 str r1, [sp, 0x24] | var_24h = r1;
0x0001a728 blx 0x9144 | fcn_00009144 ();
0x0001a72c ldr r3, [pc, 0x194] | r3 = *(0x1a8c4);
0x0001a72e ldr r3, [r7, r3] |
0x0001a730 ldr r3, [r3] | r3 = *(0x34fd8);
0x0001a732 cmp r3, 1 |
| if (r3 != 1) {
0x0001a734 bne.w 0x1a8a6 | goto label_3;
| }
| if (r5 != 0) {
0x0001a738 cbnz r5, 0x1a76a | goto label_4;
| }
0x0001a73a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0001a73c mov r2, r8 | r2 = r8;
0x0001a73e mov r1, sb | r1 = sb;
0x0001a740 mov r0, sl | r0 = sl;
0x0001a742 str r3, [sp, 8] | var_8h = r3;
0x0001a744 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0001a746 strd r4, r3, [sp] | __asm ("strd r4, r3, [sp]");
0x0001a74a mov r3, fp | r3 = fp;
0x0001a74c blx 0x9614 | fcn_00009614 ();
| do {
| label_0:
0x0001a750 ldr r2, [pc, 0x174] |
0x0001a752 ldr r3, [pc, 0x16c] | r3 = *(0x1a8c2);
0x0001a754 add r2, pc | r2 = 0x35020;
0x0001a756 ldr r3, [r2, r3] | r3 = *(0x35020);
0x0001a758 ldr r2, [r3] | r2 = *(0x35020);
0x0001a75a ldr r3, [sp, 0x44] | r3 = var_44h;
0x0001a75c eors r2, r3 | r2 ^= r3;
0x0001a75e mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0001a762 beq.w 0x1a8b2 | goto label_5;
| }
0x0001a766 blx 0x8b7c | fcn_00008b7c ();
| label_4:
0x0001a76a ldr r3, [pc, 0x160] | r3 = *(0x1a8ce);
0x0001a76c ldr.w fp, [r7, r3] | fp = *((r7 + r3));
0x0001a770 mov r0, fp | r0 = fp;
0x0001a772 blx 0x8d34 | strcpy (r0, r1);
0x0001a776 add r1, sp, 0x24 | r1 += var_24h;
0x0001a778 mov r0, sl | r0 = sl;
0x0001a77a bl 0x19470 | r0 = fcn_00019470 (r0, r1);
0x0001a77e mov r3, r0 | r3 = r0;
0x0001a780 str r0, [sp, 0x18] | var_18h = r0;
0x0001a782 mov r0, fp | r0 = fp;
| if (r3 == 0) {
0x0001a784 cbz r3, 0x1a790 | goto label_6;
| }
0x0001a786 blx 0x920c | fcn_0000920c ();
0x0001a78a mvn r0, 0x63 | r0 = ~0x63;
0x0001a78e b 0x1a750 |
| } while (1);
| label_6:
0x0001a790 blx 0x920c | fcn_0000920c ();
0x0001a794 cmp.w sb, 0 |
| if (sb == 0) {
0x0001a798 beq.w 0x1a8ac | goto label_7;
| }
0x0001a79c cmp.w r8, 0 |
| if (r8 == 0) {
0x0001a7a0 beq.w 0x1a8ac | goto label_7;
| }
0x0001a7a4 cmp r4, 0 |
| if (r4 == 0) {
0x0001a7a6 beq.w 0x1a8ac | goto label_7;
| }
0x0001a7aa ldr r3, [sp, 0x14] | r3 = var_14h;
0x0001a7ac cmp r3, 0 |
| if (r3 == 0) {
0x0001a7ae beq 0x1a8ac | goto label_7;
| }
0x0001a7b0 mov r0, r5 | r0 = r5;
0x0001a7b2 blx 0x8e60 | r0 = fcn_00008e60 ();
0x0001a7b6 mov r5, r0 | r5 = r0;
0x0001a7b8 mov r0, r4 | r0 = r4;
0x0001a7ba blx 0x8e60 | r0 = fcn_00008e60 ();
0x0001a7be mov fp, r0 |
| if (r0 != 0) {
0x0001a7c0 cbnz r0, 0x1a7ce | goto label_8;
| }
0x0001a7c2 mov r0, r5 | r0 = r5;
0x0001a7c4 blx 0x8fa8 | fcn_00008fa8 ();
| do {
0x0001a7c8 mvn r0, 0x72 | r0 = ~0x72;
0x0001a7cc b 0x1a750 | goto label_0;
| label_8:
0x0001a7ce movw r0, 0x74c | r0 = 0x74c;
0x0001a7d2 blx 0x8e30 | r0 = vfprintf_chk ()
0x0001a7d6 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0001a7d8 cbnz r0, 0x1a7ec |
0x0001a7da mov r0, fp | r0 = fp;
0x0001a7dc blx 0x8fa8 | fcn_00008fa8 ();
0x0001a7e0 mov r0, r5 | r0 = r5;
0x0001a7e2 blx 0x8fa8 | fcn_00008fa8 ();
| label_1:
0x0001a7e6 mvn r0, 0x67 | r0 = ~0x67;
0x0001a7ea b 0x1a750 | goto label_0;
| }
0x0001a7ec ldr r1, [sp, 0x18] | r1 = var_18h;
0x0001a7ee movw r2, 0x74c | r2 = 0x74c;
0x0001a7f2 blx 0x9144 | fcn_00009144 ();
0x0001a7f6 movs r2, 4 | r2 = 4;
0x0001a7f8 mov r1, sb | r1 = sb;
0x0001a7fa strd r2, sl, [r4] | __asm ("strd r2, sl, [r4]");
0x0001a7fe addw r0, r4, 0x60c | __asm ("addw r0, r4, aav.0x000000ff");
0x0001a802 movs r2, 0xff | r2 = 0xff;
0x0001a804 blx 0x9174 | fcn_00009174 ();
0x0001a808 mov r1, r8 | r1 = r8;
0x0001a80a movs r2, 0xff | r2 = 0xff;
0x0001a80c addw r0, r4, 0x40c | __asm ("addw r0, r4, aav.0x000000ff");
0x0001a810 blx 0x9174 | fcn_00009174 ();
0x0001a814 add.w r1, r4, 0x740 | r1 = r4 + 0x740;
0x0001a818 mov r0, r5 | r0 = r5;
0x0001a81a blx 0x8bd0 | r0 = fcn_00008bd0 ();
0x0001a81e mov r8, r0 | r8 = r0;
| if (r0 == 0) {
0x0001a820 cbz r0, 0x1a83c | goto label_9;
| }
| label_2:
0x0001a822 mov r0, r4 | r0 = r4;
0x0001a824 blx 0x894c | fcn_0000894c ();
0x0001a828 mov r0, fp | r0 = fp;
0x0001a82a blx 0x8fa8 | fcn_00008fa8 ();
0x0001a82e mov r0, r5 | r0 = r5;
0x0001a830 blx 0x8fa8 | fcn_00008fa8 ();
0x0001a834 cmp.w r8, 0x66 |
0x0001a838 bne 0x1a7c8 |
| } while (r8 != 0x66);
0x0001a83a b 0x1a7e6 | goto label_1;
| label_9:
0x0001a83c addw r1, r4, 0x744 | __asm ("addw r1, r4, aav.0x000000ff");
0x0001a840 mov r0, fp | r0 = fp;
0x0001a842 blx 0x8bd0 | r0 = fcn_00008bd0 ();
0x0001a846 mov r8, r0 | r8 = r0;
| if (r0 != 0) {
0x0001a848 cbz r0, 0x1a854 |
0x0001a84a ldr.w r0, [r4, 0x740] | r0 = *((r4 + 0x740));
0x0001a84e blx 0x8914 | ixmlCloneDOMString ();
0x0001a852 b 0x1a822 | goto label_2;
| }
0x0001a854 mov r0, fp | r0 = fp;
0x0001a856 blx 0x8fa8 | fcn_00008fa8 ();
0x0001a85a mov r0, r5 | r0 = r5;
0x0001a85c blx 0x8fa8 | fcn_00008fa8 ();
0x0001a860 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0001a862 mov r2, r4 | r2 = r4;
0x0001a864 mov r0, r6 | r0 = r6;
0x0001a866 str.w r3, [r4, 0x738] | __asm ("str.w r3, aav.0x000000ff");
0x0001a86a ldr r3, [sp, 0x14] | r3 = var_14h;
0x0001a86c str.w r3, [r4, 0x73c] | __asm ("str.w r3, aav.0x000000ff");
0x0001a870 ldr r3, [pc, 0x5c] | r3 = *(0x1a8d0);
0x0001a872 ldr r1, [r7, r3] | r1 = *((r7 + r3));
0x0001a874 bl 0xa7d4 | fcn_0000a7d4 (r0, r1, r2);
0x0001a878 ldr r1, [pc, 0x58] |
0x0001a87a mov r0, r6 | r0 = r6;
0x0001a87c add r1, pc | r1 = 0x35154;
0x0001a87e bl 0xa7fc | fcn_0000a7fc (r0, r1);
0x0001a882 movs r1, 1 | r1 = 1;
0x0001a884 mov r0, r6 | r0 = r6;
0x0001a886 bl 0xa7ec | fcn_0000a7ec (r0, r1);
0x0001a88a ldr r3, [pc, 0x4c] | r3 = *(0x1a8da);
0x0001a88c mov r2, r8 | r2 = r8;
0x0001a88e mov r1, r6 | r1 = r6;
0x0001a890 ldr r0, [r7, r3] | r0 = *((r7 + r3));
0x0001a892 bl 0xa174 | r0 = fcn_0000a174 (r0, r1, r2);
0x0001a896 cmp r0, 0 |
| if (r0 == 0) {
0x0001a898 beq.w 0x1a750 | goto label_0;
| }
0x0001a89c mov r0, r4 | r0 = r4;
0x0001a89e bl 0x184fa | fcn_000184fa (r0);
0x0001a8a2 mov r0, r8 | r0 = r8;
0x0001a8a4 b 0x1a750 | goto label_0;
| label_3:
0x0001a8a6 mvn r0, 0x73 | r0 = ~0x73;
0x0001a8aa b 0x1a750 | goto label_0;
| label_7:
0x0001a8ac mvn r0, 0x64 | r0 = ~0x64;
0x0001a8b0 b 0x1a750 | goto label_0;
| label_5:
0x0001a8b2 add sp, 0x4c |
0x0001a8b4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x196f4 */
| #include <stdint.h>
|
; (fcn) sym.UpnpSendAdvertisementLowPower () | void UpnpSendAdvertisementLowPower (int16_t arg_68h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000196f4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000196f8 mov r6, r2 | r6 = r2;
0x000196fa ldr r2, [pc, 0x170] |
0x000196fc mov r4, r3 | r4 = r3;
0x000196fe sub sp, 0x44 |
0x00019700 mov r8, r0 | r8 = r0;
0x00019702 ldr r3, [pc, 0x16c] | r3 = *(0x19872);
0x00019704 add.w sb, sp, 0x20 | sb += var_20h;
0x00019708 add r2, pc | r2 = 0x32f7a;
0x0001970a ldr.w sl, [pc, 0x168] |
0x0001970e mov r5, r1 | r5 = r1;
0x00019710 mov r0, sb | r0 = sb;
0x00019712 ldr r3, [r2, r3] |
0x00019714 movs r1, 0 | r1 = 0;
0x00019716 movs r2, 0x1c | r2 = 0x1c;
0x00019718 add sl, pc | sl = 0x32f92;
0x0001971a ldr r3, [r3] | r3 = *(0x32f7a);
0x0001971c str r3, [sp, 0x3c] | var_3ch = r3;
0x0001971e mov.w r3, 0 | r3 = 0;
0x00019722 str r1, [sp, 0x1c] | var_1ch = r1;
0x00019724 blx 0x9144 | fcn_00009144 ();
0x00019728 ldr r3, [pc, 0x14c] | r3 = *(0x19878);
0x0001972a ldr.w r3, [sl, r3] |
0x0001972e ldr r3, [r3] | r3 = *(0x32f92);
0x00019730 cmp r3, 1 |
| if (r3 != 1) {
0x00019732 bne.w 0x1985e | goto label_3;
| }
0x00019736 ldr r3, [pc, 0x144] | r3 = *(0x1987e);
0x00019738 ldr.w r7, [sl, r3] | r7 = *((sl + r3));
0x0001973c mov r0, r7 | r0 = r7;
0x0001973e blx 0x8930 | fcn_00008930 ();
0x00019742 add r3, sp, 0x1c | r3 += var_1ch;
0x00019744 mov r0, r8 | r0 = r8;
0x00019746 mov r1, r3 | r1 = r3;
0x00019748 str r3, [sp, 0x14] | var_14h = r3;
0x0001974a bl 0x19470 | r0 = fcn_00019470 (r0, r1);
0x0001974e cmp r0, 1 |
| if (r0 == 1) {
0x00019750 beq 0x19774 | goto label_4;
| }
0x00019752 mov r0, r7 | r0 = r7;
0x00019754 blx 0x920c | fcn_0000920c ();
| label_2:
0x00019758 mvn r4, 0x63 | r4 = ~0x63;
| do {
| label_0:
0x0001975c ldr r2, [pc, 0x120] |
0x0001975e ldr r3, [pc, 0x110] | r3 = *(0x19872);
0x00019760 add r2, pc | r2 = 0x32fe4;
0x00019762 ldr r3, [r2, r3] | r3 = *(0x32fe4);
0x00019764 ldr r2, [r3] | r2 = *(0x32fe4);
0x00019766 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00019768 eors r2, r3 | r2 ^= r3;
0x0001976a mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0001976e beq 0x19864 | goto label_5;
| }
0x00019770 blx 0x8b7c | fcn_00008b7c ();
| label_4:
0x00019774 cmp r5, 0 |
| if (r5 <= 0) {
0x00019776 ble 0x197d4 | goto label_6;
| }
0x00019778 cmp r5, 0x3c |
0x0001977a it le |
| if (r5 > 0x3c) {
0x0001977c movle r5, 0x3e | r5 = 0x3e;
| }
| label_1:
0x0001977e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00019780 orr.w r4, r4, r4, asr 31 | r4 |= (r4 >> 31);
0x00019784 ldr r2, [sp, 0x68] | r2 = *(arg_68h);
0x00019786 mov r0, r7 | r0 = r7;
0x00019788 str.w r4, [r3, 0x234] | __asm ("str.w r4, aav.0x000000ff");
0x0001978c str.w r2, [r3, 0x238] | __asm ("str.w r2, aav.0x000000ff");
0x00019790 strd r5, r6, [r3, 0x22c] | __asm ("strd r5, r6, [r3, aav.0x0000022c]");
0x00019794 blx 0x920c | fcn_0000920c ();
0x00019798 movs r3, 0 | r3 = 0;
0x0001979a mov r1, r8 | r1 = r8;
0x0001979c mov r2, r3 | r2 = r3;
0x0001979e movs r0, 1 | r0 = 1;
0x000197a0 str r5, [sp, 0xc] | var_ch = r5;
0x000197a2 strd r3, r3, [sp, 4] | __asm ("strd r3, r3, [var_4h]");
0x000197a6 str r3, [sp] | *(sp) = r3;
0x000197a8 bl 0xcc1c | r0 = fcn_0000cc1c (r0, r1, r2, r3, r4, r5, r6);
0x000197ac mov r4, r0 | r4 = r0;
0x000197ae cmp r0, 0 |
0x000197b0 bne 0x1975c |
| } while (r0 != 0);
0x000197b2 movs r0, 4 | r0 = 4;
0x000197b4 blx 0x8e30 | r0 = vfprintf_chk ()
0x000197b8 mov fp, r0 |
| if (r0 != 0) {
0x000197ba cbz r0, 0x197ce |
0x000197bc movw r0, 0x74c | r0 = 0x74c;
0x000197c0 blx 0x8e30 | r0 = vfprintf_chk ()
0x000197c4 mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x000197c6 cbnz r0, 0x197da | goto label_7;
| }
0x000197c8 mov r0, fp | r0 = fp;
0x000197ca blx 0x894c | fcn_0000894c ();
| }
0x000197ce mvn r4, 0x67 | r4 = ~0x67;
0x000197d2 b 0x1975c | goto label_0;
| label_6:
0x000197d4 mov.w r5, 0x708 | r5 = 0x708;
0x000197d8 b 0x1977e | goto label_1;
| label_7:
0x000197da str.w r8, [r0] | __asm ("str.w r8, [r0]");
0x000197de str.w fp, [r0, 8] | __asm ("str.w fp, [r0, 8]");
0x000197e2 mov r0, r7 | r0 = r7;
0x000197e4 str.w r5, [fp] | __asm ("str.w r5, [fp]");
0x000197e8 blx 0x8930 | fcn_00008930 ();
0x000197ec mov r0, r8 | r0 = r8;
0x000197ee ldr r1, [sp, 0x14] | r1 = var_14h;
0x000197f0 bl 0x19470 | r0 = fcn_00019470 (r0, r1);
0x000197f4 cmp r0, 1 |
0x000197f6 mov r8, r0 | r8 = r0;
| if (r0 != 1) {
0x000197f8 beq 0x1980e |
0x000197fa mov r0, r7 | r0 = r7;
0x000197fc blx 0x920c | fcn_0000920c ();
0x00019800 mov r0, r6 | r0 = r6;
0x00019802 blx 0x894c | fcn_0000894c ();
0x00019806 mov r0, fp | r0 = fp;
0x00019808 blx 0x894c | fcn_0000894c ();
0x0001980c b 0x19758 | goto label_2;
| }
0x0001980e ldr r3, [pc, 0x74] | r3 = *(0x19886);
0x00019810 mov r2, r6 | r2 = r6;
0x00019812 mov r0, sb | r0 = sb;
0x00019814 ldr.w r1, [sl, r3] | r1 = *((sl + r3));
0x00019816 asrs r3, r0, 0x20 | r3 = r0 >> 0x20;
0x00019818 bl 0xa7d4 | fcn_0000a7d4 (r0, r1, r2);
0x0001981c ldr r1, [pc, 0x68] |
0x0001981e mov r0, sb | r0 = sb;
0x00019820 add r1, pc | r1 = 0x330ac;
0x00019822 bl 0xa7fc | fcn_0000a7fc (r0, r1);
0x00019826 mov r1, r8 | r1 = r8;
0x00019828 mov r0, sb | r0 = sb;
0x0001982a bl 0xa7ec | fcn_0000a7ec (r0, r1);
0x0001982e ldr r3, [pc, 0x5c] | r3 = *(0x1988e);
0x00019830 asrs r1, r5, 1 | r1 = r5 >> 1;
0x00019832 mov r2, r8 | r2 = r8;
0x00019834 subs r1, 0x1e | r1 -= 0x1e;
0x00019836 ldr.w r0, [sl, r3] | r0 = *((sl + r3));
0x0001983a adds r3, r6, 4 | r3 = r6 + 4;
0x0001983c strd r4, r3, [sp] | __asm ("strd r4, r3, [sp]");
0x00019840 mov r3, sb | r3 = sb;
0x00019842 bl 0xac38 | r0 = fcn_0000ac38 (r0, r1, r2, r3, r4);
0x00019846 mov r4, r0 | r4 = r0;
0x00019848 mov r0, r7 | r0 = r7;
| if (r4 != 0) {
0x0001984a cbz r4, 0x19858 |
0x0001984c blx 0x920c | fcn_0000920c ();
0x00019850 mov r0, r6 | r0 = r6;
0x00019852 bl 0x184e4 | fcn_000184e4 (r0);
0x00019856 b 0x1975c | goto label_0;
| }
0x00019858 blx 0x920c | fcn_0000920c ();
0x0001985c b 0x1975c | goto label_0;
| label_3:
0x0001985e mvn r4, 0x73 | r4 = ~0x73;
0x00019862 b 0x1975c | goto label_0;
| label_5:
0x00019864 mov r0, r4 | r0 = r4;
0x00019866 add sp, 0x44 |
0x00019868 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x19aa8 */
| #include <stdint.h>
|
; (fcn) sym.UpnpSubscribeAsync () | void UpnpSubscribeAsync (int16_t arg_50h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00019aa8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00019aac mov r7, r2 | r7 = r2;
0x00019aae ldr r2, [pc, 0x10c] |
0x00019ab0 mov r8, r3 | r8 = r3;
0x00019ab2 sub sp, 0x2c |
0x00019ab4 mov sl, r0 | sl = r0;
0x00019ab6 ldr r3, [pc, 0x108] | r3 = *(0x19bc2);
0x00019ab8 add r6, sp, 8 | r6 += var_8h;
0x00019aba add r2, pc | r2 = 0x3367c;
0x00019abc ldr r5, [pc, 0x104] |
0x00019abe mov sb, r1 | sb = r1;
0x00019ac0 mov r0, r6 | r0 = r6;
0x00019ac2 ldr r3, [r2, r3] |
0x00019ac4 movs r1, 0 | r1 = 0;
0x00019ac6 movs r2, 0x1c | r2 = 0x1c;
0x00019ac8 ldr.w fp, [sp, 0x50] | fp = *(arg_50h);
0x00019acc add r5, pc | r5 = 0x33694;
0x00019ace ldr r3, [r3] | r3 = *(0x3367c);
0x00019ad0 str r3, [sp, 0x24] | var_24h = r3;
0x00019ad2 mov.w r3, 0 | r3 = 0;
0x00019ad6 str r1, [sp, 4] | var_4h = r1;
0x00019ad8 blx 0x9144 | fcn_00009144 ();
0x00019adc ldr r3, [pc, 0xe8] | r3 = *(0x19bc8);
0x00019ade ldr r3, [r5, r3] |
0x00019ae0 ldr r3, [r3] | r3 = *(0x33694);
0x00019ae2 cmp r3, 1 |
| if (r3 != 1) {
0x00019ae4 bne 0x19baa | goto label_2;
| }
0x00019ae6 ldr r3, [pc, 0xe4] | r3 = *(0x19bce);
0x00019ae8 ldr r4, [r5, r3] | r4 = *((r5 + r3));
0x00019aea mov r0, r4 | r0 = r4;
0x00019aec blx 0x8d34 | strcpy (r0, r1);
0x00019af0 add r1, sp, 4 | r1 += var_4h;
0x00019af2 mov r0, sl | r0 = sl;
0x00019af4 bl 0x19470 | r0 = fcn_00019470 (r0, r1);
| if (r0 == 0) {
0x00019af8 cbz r0, 0x19b1c | goto label_3;
| }
0x00019afa mov r0, r4 | r0 = r4;
0x00019afc blx 0x920c | fcn_0000920c ();
0x00019b00 mvn r0, 0x63 | r0 = ~0x63;
| do {
| label_1:
0x00019b04 ldr r2, [pc, 0xc8] |
0x00019b06 ldr r3, [pc, 0xb8] | r3 = *(0x19bc2);
0x00019b08 add r2, pc | r2 = 0x336dc;
0x00019b0a ldr r3, [r2, r3] | r3 = *(0x336dc);
0x00019b0c ldr r2, [r3] | r2 = *(0x336dc);
0x00019b0e ldr r3, [sp, 0x24] | r3 = var_24h;
0x00019b10 eors r2, r3 | r2 ^= r3;
0x00019b12 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00019b16 beq 0x19bb6 | goto label_4;
| }
0x00019b18 blx 0x8b7c | fcn_00008b7c ();
| label_3:
0x00019b1c cmp.w sb, 0 |
| if (sb != 0) {
0x00019b20 bne 0x19b2e | goto label_5;
| }
| label_0:
0x00019b22 mov r0, r4 | r0 = r4;
0x00019b24 blx 0x920c | fcn_0000920c ();
0x00019b28 mvn r0, 0x64 | r0 = ~0x64;
0x00019b2c b 0x19b04 |
| } while (1);
| label_5:
0x00019b2e adds r3, r7, 1 | r3 = r7 + 1;
| if (r3 == r7) {
0x00019b30 beq 0x19b36 | goto label_6;
| }
0x00019b32 cmp r7, 0 |
| if (r7 <= 0) {
0x00019b34 ble 0x19b22 | goto label_0;
| }
| label_6:
0x00019b36 cmp.w r8, 0 |
| if (r8 == 0) {
0x00019b3a beq 0x19b22 | goto label_0;
| }
0x00019b3c mov r0, r4 | r0 = r4;
0x00019b3e blx 0x920c | fcn_0000920c ();
0x00019b42 movw r0, 0x74c | r0 = 0x74c;
0x00019b46 blx 0x8e30 | r0 = vfprintf_chk ()
0x00019b4a mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00019b4c cbz r0, 0x19bb0 | goto label_7;
| }
0x00019b4e movw r2, 0x74c | r2 = 0x74c;
0x00019b52 movs r1, 0 | r1 = 0;
0x00019b54 blx 0x9144 | fcn_00009144 ();
0x00019b58 movs r2, 0xff | r2 = 0xff;
0x00019b5a mov r1, sb | r1 = sb;
0x00019b5c addw r0, r4, 0x60c | __asm ("addw r0, r4, aav.0x000000ff");
0x00019b60 str.w sl, [r4, 4] | __asm ("str.w sl, [r4, 4]");
0x00019b64 blx 0x9174 | fcn_00009174 ();
0x00019b68 ldr r3, [pc, 0x68] | r3 = *(0x19bd4);
0x00019b6a mov r2, r4 | r2 = r4;
0x00019b6c str r7, [r4, 8] | *((r4 + 8)) = r7;
0x00019b6e mov r0, r6 | r0 = r6;
0x00019b70 str.w r8, [r4, 0x73c] | __asm ("str.w r8, aav.0x000000ff");
0x00019b74 str.w fp, [r4, 0x738] | __asm ("str.w fp, aav.0x000000ff");
0x00019b78 ldr r1, [r5, r3] | r1 = *((r5 + r3));
0x00019b7a bl 0xa7d4 | fcn_0000a7d4 (r0, r1, r2);
0x00019b7e ldr r3, [pc, 0x58] | r3 = *(0x19bda);
0x00019b80 mov r0, r6 | r0 = r6;
0x00019b82 ldr r1, [r5, r3] | r1 = *((r5 + r3));
0x00019b84 bl 0xa7fc | fcn_0000a7fc (r0, r1);
0x00019b88 movs r1, 1 | r1 = 1;
0x00019b8a mov r0, r6 | r0 = r6;
0x00019b8c bl 0xa7ec | fcn_0000a7ec (r0, r1);
0x00019b90 ldr r3, [pc, 0x48] | r3 = *(0x19bdc);
0x00019b92 movs r2, 0 | r2 = 0;
0x00019b94 mov r1, r6 | r1 = r6;
0x00019b96 ldr r0, [r5, r3] | r0 = *((r5 + r3));
0x00019b98 bl 0xa174 | r0 = fcn_0000a174 (r0, r1, r2);
0x00019b9c cmp r0, 0 |
| if (r0 == 0) {
0x00019b9e beq 0x19b04 | goto label_1;
| }
0x00019ba0 mov r0, r4 | r0 = r4;
0x00019ba2 blx 0x894c | fcn_0000894c ();
0x00019ba6 movs r0, 0 | r0 = 0;
0x00019ba8 b 0x19b04 | goto label_1;
| label_2:
0x00019baa mvn r0, 0x73 | r0 = ~0x73;
0x00019bae b 0x19b04 | goto label_1;
| label_7:
0x00019bb0 mvn r0, 0x67 | r0 = ~0x67;
0x00019bb4 b 0x19b04 | goto label_1;
| label_4:
0x00019bb6 add sp, 0x2c |
0x00019bb8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x19da8 */
| #include <stdint.h>
|
; (fcn) sym.UpnpUnSubscribeAsync () | void UpnpUnSubscribeAsync (int16_t arg_70ch, int16_t arg_738h, int16_t arg_73ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00019da8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00019dac mov r7, r2 | r7 = r2;
0x00019dae sub sp, 0x34 |
0x00019db0 ldr r2, [pc, 0xfc] |
0x00019db2 add r6, sp, 0x10 | r6 += var_10h;
0x00019db4 mov sb, r0 | sb = r0;
0x00019db6 str r3, [sp, 4] | var_4h = r3;
0x00019db8 mov r8, r1 | r8 = r1;
0x00019dba ldr r3, [pc, 0xf8] | r3 = *(0x19eb6);
0x00019dbc add r2, pc | r2 = 0x33c70;
0x00019dbe movs r1, 0 | r1 = 0;
0x00019dc0 ldr r5, [pc, 0xf4] |
0x00019dc2 mov r0, r6 | r0 = r6;
0x00019dc4 ldr r3, [r2, r3] |
0x00019dc6 movs r2, 0x1c | r2 = 0x1c;
0x00019dc8 add r5, pc | r5 = 0x33c84;
0x00019dca ldr r3, [r3] | r3 = *(0x33c70);
0x00019dcc str r3, [sp, 0x2c] | var_2ch = r3;
0x00019dce mov.w r3, 0 | r3 = 0;
0x00019dd2 str r1, [sp, 0xc] | var_ch = r1;
0x00019dd4 blx 0x9144 | fcn_00009144 ();
0x00019dd8 ldr r3, [pc, 0xe0] | r3 = *(0x19ebc);
0x00019dda ldr r3, [r5, r3] | r3 = *(0x33c84);
0x00019ddc ldr.w sl, [r3] | sl = *(0x33c84);
0x00019de0 cmp.w sl, 1 |
| if (sl != 1) {
0x00019de4 bne 0x19e96 | goto label_1;
| }
0x00019de6 cmp.w r8, 0 |
| if (r8 == 0) {
0x00019dea beq 0x19e9c | goto label_2;
| }
0x00019dec cmp r7, 0 |
| if (r7 == 0) {
0x00019dee beq 0x19e9c | goto label_2;
| }
0x00019df0 ldr r3, [pc, 0xcc] | r3 = *(0x19ec0);
0x00019df2 ldr.w fp, [r5, r3] | fp = *((r5 + r3));
0x00019df6 mov r0, fp | r0 = fp;
0x00019df8 blx 0x8d34 | strcpy (r0, r1);
0x00019dfc add r1, sp, 0xc | r1 += var_ch;
0x00019dfe mov r0, sb | r0 = sb;
0x00019e00 bl 0x19470 | r0 = fcn_00019470 (r0, r1);
0x00019e04 mov r4, r0 | r4 = r0;
0x00019e06 mov r0, fp | r0 = fp;
| if (r4 == 0) {
0x00019e08 cbz r4, 0x19e2a | goto label_3;
| }
0x00019e0a blx 0x920c | fcn_0000920c ();
0x00019e0e mvn r0, 0x63 | r0 = ~0x63;
| do {
| label_0:
0x00019e12 ldr r2, [pc, 0xb0] |
0x00019e14 ldr r3, [pc, 0x9c] | r3 = *(0x19eb4);
0x00019e16 add r2, pc | r2 = 0x33ce0;
0x00019e18 ldr r3, [r2, r3] | r3 = *(0x33ce0);
0x00019e1a ldr r2, [r3] | r2 = *(0x33ce0);
0x00019e1c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00019e1e eors r2, r3 | r2 ^= r3;
0x00019e20 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00019e24 beq 0x19ea8 | goto label_4;
| }
0x00019e26 blx 0x8b7c | fcn_00008b7c ();
| label_3:
0x00019e2a blx 0x920c | fcn_0000920c ();
0x00019e2e movw r0, 0x74c | r0 = 0x74c;
0x00019e32 blx 0x8e30 | r0 = vfprintf_chk ()
0x00019e36 mov fp, r0 |
| if (r0 == 0) {
0x00019e38 cbz r0, 0x19ea2 | goto label_5;
| }
0x00019e3a movw r2, 0x74c | r2 = 0x74c;
0x00019e3e mov r1, r4 | r1 = r4;
0x00019e40 blx 0x9144 | fcn_00009144 ();
0x00019e44 movs r2, 0x2b | r2 = 0x2b;
0x00019e46 mov r1, r8 | r1 = r8;
0x00019e48 addw r0, fp, 0x70c | __asm ("addw r0, arg_70ch");
0x00019e4c strd sl, sb, [fp] | __asm ("strd sl, sb, [fp]");
0x00019e50 blx 0x9174 | fcn_00009174 ();
0x00019e54 ldr r3, [sp, 4] | r3 = var_4h;
0x00019e56 mov r0, r6 | r0 = r6;
0x00019e58 ldr r2, [pc, 0x6c] | r2 = *(0x19ec8);
0x00019e5a str.w r7, [fp, 0x73c] | __asm ("str.w r7, [arg_73ch]");
0x00019e5e str.w r3, [fp, 0x738] | __asm ("str.w r3, [arg_738h]");
0x00019e62 ldr r1, [r5, r2] | r1 = *((r5 + r2));
0x00019e64 mov r2, fp | r2 = fp;
0x00019e66 bl 0xa7d4 | fcn_0000a7d4 (r0, r1, r2);
0x00019e6a ldr r2, [pc, 0x60] | r2 = *(0x19ece);
0x00019e6c mov r0, r6 | r0 = r6;
0x00019e6e ldr r1, [r5, r2] | r1 = *((r5 + r2));
0x00019e70 bl 0xa7fc | fcn_0000a7fc (r0, r1);
0x00019e74 mov r1, sl | r1 = sl;
0x00019e76 mov r0, r6 | r0 = r6;
0x00019e78 bl 0xa7ec | fcn_0000a7ec (r0, r1);
0x00019e7c ldr r2, [pc, 0x50] | r2 = *(0x19ed0);
0x00019e7e mov r1, r6 | r1 = r6;
0x00019e80 ldr r0, [r5, r2] | r0 = *((r5 + r2));
0x00019e82 mov r2, r4 | r2 = r4;
0x00019e84 bl 0xa174 | r0 = fcn_0000a174 (r0, r1, r2);
0x00019e88 cmp r0, 0 |
0x00019e8a beq 0x19e12 |
| } while (r0 == 0);
0x00019e8c mov r0, fp | r0 = fp;
0x00019e8e blx 0x894c | fcn_0000894c ();
0x00019e92 mov r0, r4 | r0 = r4;
0x00019e94 b 0x19e12 | goto label_0;
| label_1:
0x00019e96 mvn r0, 0x73 | r0 = ~0x73;
0x00019e9a b 0x19e12 | goto label_0;
| label_2:
0x00019e9c mvn r0, 0x64 | r0 = ~0x64;
0x00019ea0 b 0x19e12 | goto label_0;
| label_5:
0x00019ea2 mvn r0, 0x67 | r0 = ~0x67;
0x00019ea6 b 0x19e12 | goto label_0;
| label_4:
0x00019ea8 add sp, 0x34 |
0x00019eaa pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libupnp.so.17.1.8 @ 0x1892c */
| #include <stdint.h>
|
; (fcn) sym.UpnpWriteHttpPost () | void UpnpWriteHttpPost (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| label_2:
0x00012180 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00012184 sub sp, 0x14 |
0x00012186 mov r6, r1 | r6 = r1;
0x00012188 mov r5, r2 | r5 = r2;
0x0001218a mov r8, r0 | r8 = r0;
0x0001218c str r3, [sp, 0xc] | var_ch = r3;
| if (r0 == 0) {
0x0001218e cbz r0, 0x1219a | goto label_3;
| }
| if (r2 == 0) {
0x00012190 cbz r2, 0x1219e | goto label_4;
| }
| if (r1 != 0) {
0x00012192 cbnz r1, 0x121a4 | goto label_5;
| }
| do {
0x00012194 movs r3, 0 | r3 = 0;
0x00012196 str r3, [r5] | *(r5) = r3;
0x00012198 b 0x1219e | goto label_4;
| label_3:
0x0001219a cmp r2, 0 |
0x0001219c bne 0x12194 |
| } while (r2 != 0);
| label_4:
0x0001219e mvn r4, 0x64 | r4 = ~0x64;
0x000121a2 b 0x12216 | goto label_1;
| label_5:
0x000121a4 ldr.w r3, [r0, 0x84] | r3 = *((r0 + 0x84));
0x000121a8 ldr r4, [r2] | r4 = *(r2);
0x000121aa adds r3, 3 | r3 += 3;
| if (r3 != 3) {
0x000121ac bne 0x1221e | goto label_6;
| }
0x000121ae cmp r4, 0 |
| if (r4 == 0) {
0x000121b0 beq 0x12222 | goto label_7;
| }
0x000121b2 add.w r0, r4, 0x14 | r0 = r4 + 0x14;
0x000121b6 blx 0x8e30 | r0 = vfprintf_chk ()
0x000121ba mov r7, r0 | r7 = r0;
| if (r0 == 0) {
0x000121bc cbz r0, 0x12228 | goto label_8;
| }
0x000121be ldr r3, [pc, 0x70] |
0x000121c0 mov.w r2, -1 | r2 = -1;
0x000121c4 movs r1, 1 | r1 = 1;
0x000121c6 str r4, [sp] | *(sp) = r4;
0x000121c8 add r3, pc | r3 = 0x243fe;
0x000121ca blx 0x90ec | fcn_000090ec ();
0x000121ce mov r0, r7 | r0 = r7;
0x000121d0 blx 0x8f9c | fcn_00008f9c ();
0x000121d4 ldr r4, [r5] | r4 = *(r5);
0x000121d6 mov sb, r0 | sb = r0;
0x000121d8 mov r1, r6 | r1 = r6;
0x000121da adds r0, r7, r0 | r0 = r7 + r0;
0x000121dc mov r6, r7 | r6 = r7;
0x000121de mov r2, r4 | r2 = r4;
0x000121e0 add r4, sb | r4 += sb;
0x000121e2 blx 0x8a14 | fcn_00008a14 ();
0x000121e6 ldr r3, [pc, 0x4c] |
0x000121e8 add r3, pc | r3 = 0x24422;
0x000121ea ldrh r3, [r3] | r3 = *(r3);
0x000121ec strh r3, [r7, r4] | *((r7 + r4)) = r3;
0x000121ee adds r4, 2 | r4 += 2;
0x000121f0 movs r7, 1 | r7 = 1;
| do {
| label_0:
0x000121f2 mov r2, r4 | r2 = r4;
0x000121f4 add r3, sp, 0xc | r3 += var_ch;
0x000121f6 mov r1, r6 | r1 = r6;
0x000121f8 mov r0, r8 | r0 = r8;
0x000121fa bl 0x1079e | r0 = fcn_0001079e (r0, r1, r2, r3);
0x000121fe mov r4, r0 | r4 = r0;
| if (r7 != 0) {
0x00012200 cbz r7, 0x12208 |
0x00012202 mov r0, r6 | r0 = r6;
0x00012204 blx 0x894c | fcn_0000894c ();
| }
0x00012208 cmp r4, 0 |
0x0001220a mov.w r3, 0 | r3 = 0;
0x0001220e itte ge |
| if (r4 < 0) {
0x00012210 strge r4, [r5] | *(r5) = r4;
| }
| if (r4 < 0) {
0x00012212 movge r4, r3 | r4 = r3;
| }
| if (r4 >= 0) {
0x00012214 strlt r3, [r5] | *(r5) = r3;
| }
| label_1:
0x00012216 mov r0, r4 | r0 = r4;
0x00012218 add sp, 0x14 |
0x0001221a pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_6:
0x0001221e movs r7, 0 | r7 = 0;
0x00012220 b 0x121f2 |
| } while (1);
| label_7:
0x00012222 mov r7, r4 | r7 = r4;
0x00012224 mov r6, r4 | r6 = r4;
0x00012226 b 0x121f2 | goto label_0;
| label_8:
0x00012228 mvn r4, 0x67 | r4 = ~0x67;
0x0001222c b 0x12216 | goto label_1;
0x0001892c b.w 0x12180 | goto label_2;
| }
[*] Function printf used 49 times libupnp.so.17.1.8