[*] Binary protection state of libopkg.so.1.0.0
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function mmap tear down of libopkg.so.1.0.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/libopkg.so.1.0.0 @ 0x15bbc */
| #include <stdint.h>
|
; (fcn) fcn.00015bbc () | void fcn_00015bbc (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| r0 = arg1;
| r1 = arg2;
0x00015bbc push {r0, r1, r7, r8, sb, fp, sp, lr} |
0x00015bc0 ldr r7, [pc, 0x3c0] | r7 = *(0x15f84);
0x00015bc2 mov r4, r0 | r4 = r0;
0x00015bc4 sub sp, 0x14 |
0x00015bc6 ldr r0, [r0] | r0 = *(r0);
0x00015bc8 ands r5, r3, 2 | r5 = r3 & 2;
| if (r5 != r3) {
0x00015bcc bne 0x15c60 | goto label_1;
| }
0x00015bce ands r8, r3, 4 | r8 = r3 & 4;
| if (r8 == r3) {
0x00015bd2 bne 0x15c4c |
0x00015bd4 mov r7, r1 | r7 = r1;
0x00015bd6 blx 0x61b0 | r0 = fcn_000061b0 ();
0x00015bda mov r6, r0 | r6 = r0;
0x00015bdc mov r0, r4 | r0 = r4;
0x00015bde cmp r6, 0 |
| if (r6 == 0) {
0x00015be0 beq 0x15c9e | goto label_2;
| }
0x00015be2 blx 0x63fc | r0 = fcn_000063fc ();
0x00015be6 mov sb, r0 | sb = r0;
0x00015be8 mov r0, r6 | r0 = r6;
0x00015bea blx 0x63fc | fcn_000063fc ();
0x00015bee ldr.w fp, [pc, 0xe0] |
0x00015bf2 mov sl, r0 | sl = r0;
0x00015bf4 mov r1, r6 | r1 = r6;
0x00015bf6 mov r0, r4 | r0 = r4;
0x00015bf8 blx 0x6c3c | fcn_00006c3c ();
0x00015bfc ldr r1, [pc, 0xd4] |
0x00015bfe add fp, pc | fp = 0x2b8d4;
0x00015c00 strd sl, r0, [sp, 4] | __asm ("strd sl, r0, [var_4h]");
0x00015c04 mov r5, r0 | r5 = r0;
0x00015c06 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00015c0a mov r2, fp | r2 = fp;
0x00015c0c ldr r3, [r4] | r3 = *(r4);
0x00015c0e add r1, pc | r1 = 0x2b8e6;
0x00015c10 movs r0, 3 | r0 = 3;
0x00015c12 blx 0x5a60 | fcn_00005a60 ();
0x00015c16 cmp r5, 0 |
| if (r5 == 0) {
0x00015c18 beq 0x15cbc | goto label_3;
| }
0x00015c1a ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
| if (r5 > 0) {
0x00015c1c bgt 0x15c76 | goto label_4;
| }
0x00015c1e str r3, [r6, 0x18] | *((r6 + 0x18)) = r3;
0x00015c20 movs r3, 3 | r3 = 3;
0x00015c22 str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x00015c24 mov r0, sb | r0 = sb;
0x00015c26 blx 0x5c30 | archive_entry_free ();
0x00015c2a mov r0, sl | r0 = sl;
0x00015c2c movs r5, 1 | r5 = 1;
0x00015c2e blx 0x5c30 | archive_entry_free ();
0x00015c32 ldr r2, [r4, 0x38] | r2 = *((r4 + 0x38));
0x00015c34 movs r1, 2 | r1 = 2;
0x00015c36 ldr.w r3, [r4, 0xe0] | r3 = *((r4 + 0xe0));
0x00015c3a mov r0, r5 | r0 = r5;
0x00015c3c str r1, [r6, 0x30] | *((r6 + 0x30)) = r1;
0x00015c3e str r2, [r6, 0x38] | *((r6 + 0x38)) = r2;
0x00015c40 str.w r3, [r6, 0xe0] | __asm ("str.w r3, [r6, 0xe0]");
0x00015c44 str r6, [r7] | *(r7) = r6;
0x00015c46 add sp, 0x14 |
0x00015c48 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00015c4c ldr r1, [pc, 0x88] |
0x00015c4e mov r2, r0 | r2 = r0;
0x00015c50 movs r0, 1 | r0 = 1;
0x00015c52 add r1, pc | r1 = 0x2b92e;
0x00015c54 blx 0x5a60 | fcn_00005a60 ();
| do {
0x00015c58 mov r0, r5 | r0 = r5;
0x00015c5a add sp, 0x14 |
0x00015c5c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_1:
0x00015c60 ldr r1, [pc, 0x78] |
0x00015c62 mov r2, r0 | r2 = r0;
0x00015c64 movs r5, 0 | r5 = 0;
0x00015c66 movs r0, 1 | r0 = 1;
0x00015c68 add r1, pc | r1 = 0x2b948;
0x00015c6a blx 0x5a60 | fcn_00005a60 ();
0x00015c6e mov r0, r5 | r0 = r5;
0x00015c70 add sp, 0x14 |
0x00015c72 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x00015c76 ldr r1, [pc, 0x68] |
0x00015c78 mov r5, r8 | r5 = r8;
0x00015c7a movs r0, 1 | r0 = 1;
0x00015c7c ldr r3, [r3] | r3 = *(r3);
0x00015c7e ldr r2, [r4] | r2 = *(r4);
0x00015c80 add r1, pc | r1 = 0x2b966;
0x00015c82 strd sb, sl, [sp] | __asm ("strd sb, sl, [sp]");
| label_0:
0x00015c86 blx 0x5a60 | fcn_00005a60 ();
0x00015c8a mov r0, sb | r0 = sb;
0x00015c8c blx 0x5c30 | archive_entry_free ();
0x00015c90 mov r0, sl | r0 = sl;
0x00015c92 blx 0x5c30 | archive_entry_free ();
0x00015c96 mov r0, r5 | r0 = r5;
0x00015c98 add sp, 0x14 |
0x00015c9a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_2:
0x00015c9e blx 0x63fc | fcn_000063fc ();
0x00015ca2 ldr r1, [pc, 0x40] |
0x00015ca4 mov r3, r0 | r3 = r0;
0x00015ca6 ldr r2, [r4] | r2 = *(r4);
0x00015ca8 mov r5, r6 | r5 = r6;
0x00015caa mov r6, r0 | r6 = r0;
0x00015cac movs r0, 1 | r0 = 1;
0x00015cae add r1, pc | r1 = 0x2b998;
0x00015cb0 blx 0x5a60 | fcn_00005a60 ();
0x00015cb4 mov r0, r6 | r0 = r6;
0x00015cb6 blx 0x5c30 | archive_entry_free ();
0x00015cba b 0x15c58 |
| } while (1);
| label_3:
0x00015cbc ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x00015cbe mov r2, fp | r2 = fp;
0x00015cc0 ldr r3, [r4] | r3 = *(r4);
0x00015cc2 movs r0, 2 | r0 = 2;
0x00015cc4 ldr r1, [r1] | r1 = *(r1);
0x00015cc6 strd sb, r1, [sp] | __asm ("strd sb, r1, [sp]");
0x00015cca ldr r1, [pc, 0x1c] |
0x00015ccc add r1, pc | r1 = 0x2b9ba;
0x00015cce b 0x15c86 | 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/libopkg.so.1.0.0 @ 0x1602c */
| #include <stdint.h>
|
; (fcn) fcn.0001602c () | void fcn_0001602c (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0001602c ldrd r3, r2, [r0, 0x7c] | __asm ("ldrd r3, r2, [r0, 0x7c]");
0x00016030 cmp r3, 0 |
| if (r3 <= 0) {
0x00016032 ble.w 0x16154 | goto label_6;
| }
0x00016036 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0001603a push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001603e sub sp, 0x14 |
0x00016040 mov r4, r0 | r4 = r0;
0x00016042 mov sb, r1 | sb = r1;
0x00016044 str r3, [sp, 8] | var_8h = r3;
0x00016046 add.w r3, r2, 8 | r3 = r2 + 8;
0x0001604a movs r7, 0 | r7 = 0;
0x0001604c str r3, [sp, 4] | var_4h = r3;
0x0001604e b 0x16058 |
| while (r8 == 0) {
| label_0:
0x00016050 ldr r3, [sp, 8] | r3 = var_8h;
0x00016052 adds r7, 3 | r7 += 3;
0x00016054 cmp r3, r7 |
| if (r3 == r7) {
0x00016056 beq 0x1614e | goto label_7;
| }
0x00016058 ldr r3, [sp, 4] | r3 = var_4h;
0x0001605a ldr.w r3, [r3, r7, lsl 2] | offset_0 = r7 << 2;
| r3 = *((r3 + offset_0));
0x0001605e ldr r3, [r3] | r3 = *(r3);
0x00016060 ldr.w r8, [r3, 8] | r8 = *((r3 + 8));
0x00016064 ldr.w r3, [r8, 0x18] | r3 = *((r8 + 0x18));
| if (r3 != 0) {
0x00016068 cbz r3, 0x16074 |
0x0001606a mov r1, r8 | r1 = r8;
0x0001606c mov r0, r4 | r0 = r4;
0x0001606e blx 0x6c30 | r0 = fcn_00006c30 ();
| if (r0 != 0) {
0x00016072 cbnz r0, 0x160d8 | goto label_8;
| }
| }
| label_2:
0x00016074 ldr.w r8, [r8, 8] | r8 = *((r8 + 8));
0x00016078 cmp.w r8, 0 |
0x0001607c beq 0x16050 |
| }
0x0001607e ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x00016082 cmp r3, 0 |
| if (r3 == 0) {
0x00016084 beq 0x16050 | goto label_0;
| }
0x00016086 ldr.w sl, [sp, 4] | sl = var_4h;
0x0001608a movs r5, 0 | r5 = 0;
0x0001608c b 0x16096 | goto label_9;
| label_1:
0x0001608e ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x00016092 cmp r5, r3 |
| if (r5 >= r3) {
0x00016094 bhs 0x16050 | goto label_0;
| }
| label_9:
0x00016096 ldr.w r3, [r8] | r3 = *(r8);
0x0001609a mov r0, r4 | r0 = r4;
0x0001609c ldr.w r6, [r3, r5, lsl 2] | offset_1 = r5 << 2;
| r6 = *((r3 + offset_1));
0x000160a0 adds r5, 1 | r5++;
0x000160a2 mov r1, r6 | r1 = r6;
0x000160a4 blx 0x6b2c | r0 = fcn_00006b2c ();
0x000160a8 cmp r0, 0 |
| if (r0 == 0) {
0x000160aa beq 0x1608e | goto label_1;
| }
0x000160ac ldr r3, [r6, 0x3c] | r3 = *((r6 + 0x3c));
0x000160ae cmp r3, 4 |
| if (r3 != 4) {
0x000160b0 bne 0x1608e | goto label_1;
| }
0x000160b2 ldr.w r3, [sl, r7, lsl 2] | offset_2 = r7 << 2;
| r3 = *((sl + offset_2));
0x000160b6 mov r1, r4 | r1 = r4;
0x000160b8 ldr r0, [r3] | r0 = *(r3);
0x000160ba blx 0x6560 | r0 = fcn_00006560 ();
0x000160be cmp r0, 0 |
| if (r0 == 0) {
0x000160c0 beq 0x1608e | goto label_1;
| }
0x000160c2 mov r1, r6 | r1 = r6;
0x000160c4 mov r0, sb | r0 = sb;
0x000160c6 blx 0x59f0 | r0 = fcn_000059f0 ();
0x000160ca cmp r0, 0 |
| if (r0 != 0) {
0x000160cc bne 0x1608e | goto label_1;
| }
0x000160ce mov r1, r6 | r1 = r6;
0x000160d0 mov r0, sb | r0 = sb;
0x000160d2 blx 0x65e4 | fcn_000065e4 ();
0x000160d6 b 0x1608e | goto label_1;
| label_8:
0x000160d8 ldr.w sl, [r8, 0x18] | sl = *((r8 + 0x18));
0x000160dc ldr.w r1, [sl, 4] | r1 = *((sl + 4));
0x000160e0 cmp r1, 0 |
| if (r1 == 0) {
0x000160e2 beq 0x16074 | goto label_2;
| }
0x000160e4 movs r3, 0 | r3 = 0;
0x000160e6 str r7, [sp, 0xc] | var_ch = r7;
0x000160e8 mov fp, r3 |
| label_5:
0x000160ea ldr.w r3, [sl] | r3 = *(sl);
0x000160ee ldr.w r6, [r3, fp, lsl 2] | offset_3 = fp << 2;
| r6 = *((r3 + offset_3));
0x000160f2 ldr r3, [r6, 8] | r3 = *((r6 + 8));
| if (r3 == 0) {
0x000160f4 cbz r3, 0x16142 | goto label_10;
| }
0x000160f6 ldr r2, [r3, 4] | r2 = *((r3 + 4));
| if (r2 == 0) {
0x000160f8 cbz r2, 0x16142 | goto label_10;
| }
0x000160fa movs r5, 0 | r5 = 0;
0x000160fc b 0x16106 |
| while (r7 == r0) {
| label_3:
0x000160fe ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00016100 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00016102 cmp r2, r5 |
| if (r2 < r5) {
0x00016104 bls 0x1613e | goto label_11;
| }
| label_4:
0x00016106 ldr r3, [r3] | r3 = *(r3);
0x00016108 ldr r0, [r4] | r0 = *(r4);
0x0001610a ldr.w r7, [r3, r5, lsl 2] | offset_4 = r5 << 2;
| r7 = *((r3 + offset_4));
0x0001610e adds r5, 1 | r5++;
0x00016110 blx 0x5a6c | r0 = fcn_00005a6c ();
0x00016114 cmp r7, r0 |
0x00016116 beq 0x160fe |
| }
0x00016118 ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x0001611a subs r3, 2 | r3 -= 2;
0x0001611c bics r3, r3, 2 | __asm ("bics r3, r3, 2");
| if (r3 != 2) {
0x00016120 bne 0x160fe | goto label_3;
| }
0x00016122 mov r1, r7 | r1 = r7;
0x00016124 mov r0, sb | r0 = sb;
0x00016126 blx 0x59f0 | r0 = fcn_000059f0 ();
0x0001612a cmp r0, 0 |
| if (r0 != 0) {
0x0001612c bne 0x160fe | goto label_3;
| }
0x0001612e mov r1, r7 | r1 = r7;
0x00016130 mov r0, sb | r0 = sb;
0x00016132 blx 0x65e4 | fcn_000065e4 ();
0x00016136 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00016138 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0001613a cmp r2, r5 |
| if (r2 > r5) {
0x0001613c bhi 0x16106 | goto label_4;
| }
| label_11:
0x0001613e ldr.w r1, [sl, 4] | r1 = *((sl + 4));
| label_10:
0x00016142 add.w fp, fp, 1 |
0x00016146 cmp r1, fp |
| if (r1 > fp) {
0x00016148 bhi 0x160ea | goto label_5;
| }
0x0001614a ldr r7, [sp, 0xc] | r7 = var_ch;
0x0001614c b 0x16074 | goto label_2;
| label_7:
0x0001614e add sp, 0x14 |
0x00016150 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x00016154 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/libopkg.so.1.0.0 @ 0x169e4 */
| #include <stdint.h>
|
; (fcn) fcn.000169e4 () | void fcn_000169e4 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
0x000169e4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000169e8 mov r7, r1 | r7 = r1;
0x000169ea ldr r4, [pc, 0x1f8] |
0x000169ec sub sp, 0x24 |
0x000169ee add r3, sp, 0x18 | r3 += var_18h;
0x000169f0 add r2, sp, 0x10 | r2 += var_10h;
0x000169f2 ldr r1, [pc, 0x1f4] | r1 = *(0x16bea);
0x000169f4 mov r6, r0 | r6 = r0;
0x000169f6 add r4, pc | r4 = 0x2d5e0;
0x000169f8 ldr.w r8, [pc, 0x1f0] |
0x000169fc ldr r1, [r4, r1] |
0x000169fe add r8, pc | r8 = 0x2d5ee;
0x00016a00 ldr r1, [r1] | r1 = *(0x2d5e0);
0x00016a02 str r1, [sp, 0x1c] | var_1ch = r1;
0x00016a04 mov.w r1, 0 | r1 = 0;
0x00016a08 add r1, sp, 0x14 | r1 += var_14h;
0x00016a0a blx 0x6430 | fcn_00006430 ();
0x00016a0e ldr r0, [sp, 0x14] | r0 = var_14h;
0x00016a10 blx 0x690c | r0 = fcn_0000690c ();
0x00016a14 mov r4, r0 | r4 = r0;
0x00016a16 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00016a18 blx 0x5a6c | r0 = fcn_00005a6c ();
0x00016a1c mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x00016a1e cbz r0, 0x16a30 |
0x00016a20 ldr r2, [pc, 0x1cc] |
0x00016a22 ldr r1, [pc, 0x1d0] |
0x00016a24 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x00016a26 movs r0, 4 | r0 = 4;
0x00016a28 add r2, pc | r2 = 0x2d61c;
0x00016a2a add r1, pc | r1 = 0x2d624;
0x00016a2c blx 0x5a60 | fcn_00005a60 ();
| }
0x00016a30 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00016a32 cmp r3, 0 |
| if (r3 == 0) {
0x00016a34 beq.w 0x16b86 | goto label_4;
| }
0x00016a38 movs r0, 0xc | r0 = 0xc;
0x00016a3a blx 0x5f84 | waitpid ();
0x00016a3e ldr r3, [sp, 0x18] | r3 = var_18h;
0x00016a40 mov sb, r0 | sb = r0;
0x00016a42 str r4, [r0, 8] | *((r0 + 8)) = r4;
0x00016a44 mov r2, sb | r2 = sb;
0x00016a46 mov r0, r4 | r0 = r4;
0x00016a48 str.w r3, [sb] | __asm ("str.w r3, [sb]");
0x00016a4c ldr r3, [sp, 0x10] | r3 = var_10h;
0x00016a4e str.w r3, [sb, 4] | __asm ("str.w r3, [sb, 4]");
0x00016a52 ldr r3, [pc, 0x1a4] | r3 = *(0x16bfa);
0x00016a54 ldr.w r1, [r8, r3] | r1 = *((r8 + r3));
0x00016a58 movs r3, 1 | r3 = 1;
0x00016a5a str r3, [sp] | *(sp) = r3;
0x00016a5c movs r3, 0 | r3 = 0;
0x00016a5e blx 0x60a0 | r0 = fcn_000060a0 ();
0x00016a62 mov r4, r0 | r4 = r0;
0x00016a64 mov r0, sb | r0 = sb;
0x00016a66 blx 0x5c30 | archive_entry_free ();
| label_0:
0x00016a6a ldr r0, [sp, 0x14] | r0 = var_14h;
0x00016a6c blx 0x5c30 | archive_entry_free ();
0x00016a70 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00016a72 blx 0x5c30 | archive_entry_free ();
0x00016a76 cmp r4, 0 |
| if (r4 == 0) {
0x00016a78 beq.w 0x16b90 | goto label_5;
| }
0x00016a7c ldr.w fp, [pc, 0x17c] | fp = fcn.00006c0c;
0x00016a80 movs r0, 4 | r0 = 4;
0x00016a82 ldr r1, [pc, 0x17c] |
0x00016a84 add fp, pc |
0x00016a86 add r1, pc | r1 = 0x2d68c;
0x00016a88 mov r2, fp | r2 = fp;
0x00016a8a blx 0x5a60 | fcn_00005a60 ();
0x00016a8e cmp r5, 0 |
| if (r5 != 0) {
0x00016a90 beq 0x16b1c |
0x00016a92 ldr r1, [pc, 0x170] |
0x00016a94 movs r0, 4 | r0 = 4;
0x00016a96 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x00016a98 add r1, pc | r1 = 0x2d6a2;
0x00016a9a blx 0x5a60 | fcn_00005a60 ();
0x00016a9e ldr r1, [pc, 0x168] |
0x00016aa0 movs r0, 4 | r0 = 4;
0x00016aa2 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00016aa4 add r1, pc | r1 = 0x2d6b2;
0x00016aa6 blx 0x5a60 | fcn_00005a60 ();
0x00016aaa ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00016aac mov r0, r5 | r0 = r5;
0x00016aae orr r3, r3, 0x100 | r3 |= 0x100;
0x00016ab2 str r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
0x00016ab4 blx 0x63fc | r0 = fcn_000063fc ();
0x00016ab8 mov sb, r0 | sb = r0;
0x00016aba mov r0, r4 | r0 = r4;
0x00016abc blx 0x63fc | fcn_000063fc ();
0x00016ac0 mov r1, r4 | r1 = r4;
0x00016ac2 mov sl, r0 | sl = r0;
0x00016ac4 mov r0, r5 | r0 = r5;
0x00016ac6 blx 0x6c3c | fcn_00006c3c ();
0x00016aca ldr r3, [pc, 0x140] |
0x00016acc ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00016ad0 ldr r3, [r3] |
0x00016ad2 ldr.w r3, [r3, 0x88] | r3 = *(0x16c96);
0x00016ad6 cmp r3, 1 |
| if (r3 == 1) {
0x00016ad8 beq 0x16b52 | goto label_6;
| }
0x00016ada ldr r1, [pc, 0x134] |
0x00016adc mov r3, r6 | r3 = r6;
0x00016ade strd sl, r0, [sp, 4] | __asm ("strd sl, r0, [var_8h]");
0x00016ae2 mov r6, r0 | r6 = r0;
0x00016ae4 mov r2, fp | r2 = fp;
0x00016ae6 movs r0, 3 | r0 = 3;
0x00016ae8 add r1, pc | r1 = 0x2d6fe;
0x00016aea str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00016aee blx 0x5a60 | fcn_00005a60 ();
0x00016af2 cmp r6, 0 |
| if (r6 == 0) {
0x00016af4 beq 0x16ba2 | goto label_7;
| }
0x00016af6 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
| if (r6 <= 0) {
0x00016af8 ble 0x16b72 | goto label_3;
| }
0x00016afa ldr r1, [pc, 0x118] |
0x00016afc movs r0, 1 | r0 = 1;
0x00016afe ldr r3, [r3] | r3 = *(r3);
0x00016b00 ldr r2, [r5] | r2 = *(r5);
0x00016b02 add r1, pc | r1 = 0x2d71c;
0x00016b04 strd sb, sl, [sp] | __asm ("strd sb, sl, [sp]");
0x00016b08 blx 0x5a60 | fcn_00005a60 ();
| label_2:
0x00016b0c mov r0, sb | r0 = sb;
0x00016b0e blx 0x5c30 | archive_entry_free ();
0x00016b12 mov r0, sl | r0 = sl;
0x00016b14 blx 0x5c30 | archive_entry_free ();
0x00016b16 invalid |
0x00016b1a b 0x16b38 | goto label_1;
| }
0x00016b1c ldr r1, [pc, 0xf8] |
0x00016b1e movs r0, 4 | r0 = 4;
0x00016b20 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00016b22 add r1, pc | r1 = 0x2d73e;
0x00016b24 blx 0x5a60 | fcn_00005a60 ();
0x00016b28 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00016b2a orr r3, r3, 0x100 | r3 |= 0x100;
0x00016b2e str r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
| do {
0x00016b30 movs r0, 1 | r0 = 1;
0x00016b32 movs r3, 2 | r3 = 2;
0x00016b34 str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x00016b36 str r4, [r7] | *(r7) = r4;
| label_1:
0x00016b38 ldr r2, [pc, 0xe0] |
0x00016b3a ldr r3, [pc, 0xac] | r3 = *(0x16bea);
0x00016b3c add r2, pc | r2 = 0x2d75c;
0x00016b3e ldr r3, [r2, r3] | r3 = *(0x2d75c);
0x00016b40 ldr r2, [r3] | r2 = *(0x2d75c);
0x00016b42 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00016b44 eors r2, r3 | r2 ^= r3;
0x00016b46 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00016b4a bne 0x16be0 | goto label_8;
| }
0x00016b4c add sp, 0x24 |
0x00016b4e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x00016b52 cmp r0, 0 |
| if (r0 > 0) {
0x00016b54 bgt 0x16bb8 | goto label_9;
| }
0x00016b56 ldr r1, [pc, 0xc8] |
0x00016b58 mov r3, r6 | r3 = r6;
0x00016b5a mov r6, r0 | r6 = r0;
0x00016b5c strd sl, r0, [sp, 4] | __asm ("strd sl, r0, [var_8h]");
0x00016b60 mov r2, fp | r2 = fp;
0x00016b62 movs r0, 3 | r0 = 3;
0x00016b64 add r1, pc | r1 = 0x2d78a;
0x00016b66 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00016b6a blx 0x5a60 | fcn_00005a60 ();
| if (r6 == 0) {
0x00016b6e cbz r6, 0x16ba2 | goto label_7;
| }
0x00016b70 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
| label_3:
0x00016b72 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x00016b74 movs r3, 3 | r3 = 3;
0x00016b76 mov r0, sb | r0 = sb;
0x00016b78 str r3, [r5, 0x30] | *((r5 + 0x30)) = r3;
0x00016b7a blx 0x5c30 | archive_entry_free ();
0x00016b7e mov r0, sl | r0 = sl;
0x00016b80 blx 0x5c30 | archive_entry_free ();
0x00016b84 b 0x16b30 |
| } while (1);
| label_4:
0x00016b86 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00016b88 blx 0x61b0 | r0 = fcn_000061b0 ();
0x00016b8c mov r4, r0 | r4 = r0;
0x00016b8e b 0x16a6a | goto label_0;
| label_5:
0x00016b90 ldr r1, [pc, 0x90] |
0x00016b92 movs r0, 1 | r0 = 1;
0x00016b94 mov r2, r6 | r2 = r6;
0x00016b96 add r1, pc | r1 = 0x2d7be;
0x00016b98 blx 0x5a60 | fcn_00005a60 ();
0x00016b9c mov.w r0, -1 | r0 = -1;
0x00016ba0 b 0x16b38 | goto label_1;
| label_7:
0x00016ba2 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x00016ba4 mov r3, sb | r3 = sb;
0x00016ba6 ldr r2, [r5] | r2 = *(r5);
0x00016ba8 movs r0, 1 | r0 = 1;
0x00016baa ldr r1, [r1] | r1 = *(r1);
0x00016bac str r1, [sp] | *(sp) = r1;
0x00016bae ldr r1, [pc, 0x78] |
0x00016bb0 add r1, pc | r1 = 0x2d7de;
0x00016bb2 blx 0x5a60 | fcn_00005a60 ();
0x00016bb6 b 0x16b0c | goto label_2;
| label_9:
0x00016bb8 ldr r1, [pc, 0x70] |
0x00016bba mov r2, fp | r2 = fp;
0x00016bbc movs r0, 3 | r0 = 3;
0x00016bbe add r1, pc | r1 = 0x2d7ee;
0x00016bc0 blx 0x5a60 | fcn_00005a60 ();
0x00016bc4 mov.w r1, -1 | r1 = -1;
0x00016bc8 mov r3, r6 | r3 = r6;
0x00016bca str r1, [sp, 8] | var_8h = r1;
0x00016bcc mov r2, fp | r2 = fp;
0x00016bce ldr r1, [pc, 0x60] |
0x00016bd0 movs r0, 3 | r0 = 3;
0x00016bd2 strd sb, sl, [sp] | __asm ("strd sb, sl, [sp]");
0x00016bd6 add r1, pc | r1 = 0x2d80c;
0x00016bd8 blx 0x5a60 | fcn_00005a60 ();
0x00016bdc ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x00016bde b 0x16b72 | goto label_3;
| label_8:
0x00016be0 blx 0x5dac | fcn_00005dac ();
0x00016be4 ldrb r2, [r2, 0x1f] | r2 = *((r2 + 0x1f));
0x00016be6 movs r1, r0 | r1 = r0;
0x00016be8 lsls r4, r1, 0x18 | r4 = r1 << 0x18;
0x00016bea movs r0, r0 |
0x00016bec ldrb r2, [r1, 0x1f] | r2 = *((r1 + 0x1f));
0x00016bee movs r1, r0 | r1 = r0;
0x00016bf0 ldr r0, [r5, 0x44] | r0 = *((r5 + 0x44));
0x00016bf2 movs r0, r0 |
0x00016bf4 ldr r2, [r4, 0x38] | r2 = *((r4 + 0x38));
0x00016bf6 movs r0, r0 |
0x00016bf8 lsls r0, r7, 0x17 | r0 = r7 << 0x17;
0x00016bfa movs r0, r0 |
0x00016bfc ldr r4, [r1, 0x40] | r4 = *((r1 + 0x40));
0x00016bfe movs r0, r0 |
0x00016c00 ldr r2, [r1, 0x38] | r2 = *((r1 + 0x38));
0x00016c02 movs r0, r0 |
0x00016c04 ldr r4, [r3, 0x38] | r4 = *((r3 + 0x38));
0x00016c06 movs r0, r0 |
0x00016c08 ldr r4, [r3, 0x38] | r4 = *((r3 + 0x38));
0x00016c0a movs r0, r0 |
0x00016c0c lsls r0, r1, 0x18 | r0 = r1 << 0x18;
0x00016c0e movs r0, r0 |
0x00016c10 str r4, [r6, 0x5c] | *((r6 + 0x5c)) = r4;
0x00016c12 movs r0, r0 |
0x00016c14 str r2, [r7, 0x64] | *((r7 + 0x64)) = r2;
0x00016c16 movs r0, r0 |
0x00016c18 ldr r6, [r3, 0x30] | r6 = *((r3 + 0x30));
0x00016c1a movs r0, r0 |
0x00016c1c ldrb r4, [r1, 0x1a] | r4 = *((r1 + 0x1a));
0x00016c1e movs r1, r0 | r1 = r0;
0x00016c20 str r0, [r7, 0x54] | *((r7 + 0x54)) = r0;
0x00016c22 movs r0, r0 |
0x00016c24 ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x00016c26 movs r0, r0 |
0x00016c28 str r4, [r3, 0x58] | *((r3 + 0x58)) = r4;
0x00016c2a movs r0, r0 |
0x00016c2c ldr r6, [r1, 0x28] | r6 = *((r1 + 0x28));
0x00016c2e movs r0, r0 |
0x00016c30 str r6, [r0, 0x50] | *((r0 + 0x50)) = r6;
0x00016c32 movs r0, r0 |
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libopkg.so.1.0.0 @ 0x8f80).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libopkg.so.1.0.0 @ 0xfbf4).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libopkg.so.1.0.0 @ 0x10378 */
| #include <stdint.h>
|
; (fcn) sym.pkg_hash_fetch_best_installation_candidate_by_name () | void pkg_hash_fetch_best_installation_candidate_by_name () {
| int16_t var_0h;
0x00010378 push {lr} |
0x0001037a sub sp, 0xc |
0x0001037c blx 0x690c | r0 = fcn_0000690c ();
0x00010380 mov r3, r0 | r3 = r0;
| if (r0 != 0) {
0x00010382 cbz r0, 0x10392 |
0x00010384 movs r3, 0 | r3 = 0;
0x00010386 mov r2, r3 | r2 = r3;
0x00010388 mov r1, r3 | r1 = r3;
0x0001038a str r3, [sp] | *(sp) = r3;
0x0001038c blx 0x60a0 | r0 = fcn_000060a0 ();
0x00010390 mov r3, r0 | r3 = r0;
| }
0x00010392 mov r0, r3 | r0 = r3;
0x00010394 add sp, 0xc |
0x00010396 ldr pc, [sp], 4 | pc = *(sp);
| sp += 4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libopkg.so.1.0.0 @ 0x11df8 */
| #include <stdint.h>
|
; (fcn) sym.pkg_src_verify () | void pkg_src_verify (int16_t arg_c8h, int16_t arg_100h, int16_t arg_270h, int16_t arg_278h, int16_t arg_280h, int16_t arg1) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| if (? >= ?) {
0x00011df8 addlt fp, r4, r0, ror r5 |
| }
0x00011dfc ldr r4, [pc, 0xf0] |
0x00011dfe ldr r1, [pc, 0xf4] | r1 = *(0x11ef6);
0x00011e00 add r4, pc | r4 = 0x23cf4;
0x00011e02 ldr r3, [pc, 0xf4] |
0x00011e04 ldr r2, [pc, 0xf4] | r2 = *(0x11efc);
0x00011e06 ldr r1, [r4, r1] |
0x00011e08 mov r4, r0 | r4 = r0;
0x00011e0a add r3, pc | r3 = 0x23d08;
0x00011e0c ldr r1, [r1] | r1 = *(0x23cf4);
0x00011e0e str r1, [sp, 0xc] | var_ch = r1;
0x00011e10 mov.w r1, 0 | r1 = 0;
0x00011e14 ldr r1, [pc, 0xe8] |
0x00011e16 ldr r2, [r3, r2] | r2 = *(0x23d08);
0x00011e18 add r1, pc | r1 = 0x23d1c;
0x00011e1a ldr r5, [r2] | r5 = *(0x23d08);
0x00011e1c ldr.w r0, [r5, 0xbc] | r0 = *(0x23dc4);
0x00011e20 blx 0x5abc | r0 = fcn_00005abc ();
0x00011e24 cmp r0, 0 |
| if (r0 == 0) {
0x00011e26 beq 0x11eb8 | goto label_1;
| }
0x00011e28 ldr r6, [pc, 0xd8] |
0x00011e2a add r6, pc | r6 = 0x23d32;
| do {
0x00011e2c ldr r1, [pc, 0xd8] |
0x00011e2e add r0, sp, 4 | r0 += var_4h;
0x00011e30 ldr r2, [r5, 0x50] | r2 = *((r5 + 0x50));
0x00011e32 ldr r3, [r4] | r3 = *(r4);
0x00011e34 add r1, pc | r1 = 0x23d40;
0x00011e36 ldr r5, [pc, 0xd4] |
0x00011e38 blx 0x5f44 | fcn_00005f44 ();
0x00011e3c ldr r1, [pc, 0xd0] |
0x00011e3e mov r3, r6 | r3 = r6;
0x00011e40 ldr r2, [sp, 4] | r2 = var_4h;
0x00011e42 add r0, sp, 8 | r0 += var_8h;
0x00011e44 add r5, pc | r5 = 0x23d56;
0x00011e46 add r1, pc | r1 = 0x23d5a;
0x00011e48 blx 0x5f44 | fcn_00005f44 ();
0x00011e4c ldr r1, [pc, 0xc4] |
0x00011e4e movs r0, 3 | r0 = 3;
0x00011e50 ldr r3, [sp, 4] | r3 = var_4h;
0x00011e52 mov r2, r5 | r2 = r5;
0x00011e54 add r1, pc | r1 = 0x23d6c;
0x00011e56 blx 0x5a60 | fcn_00005a60 ();
0x00011e5a ldr r1, [pc, 0xbc] |
0x00011e5c movs r0, 3 | r0 = 3;
0x00011e5e ldr r3, [sp, 8] | r3 = var_8h;
0x00011e60 mov r2, r5 | r2 = r5;
0x00011e62 add r1, pc | r1 = 0x23d80;
0x00011e64 blx 0x5a60 | fcn_00005a60 ();
0x00011e68 ldr r0, [sp, 8] | r0 = var_8h;
0x00011e6a blx 0x5ba8 | r0 = fcn_00005ba8 ();
0x00011e6e cmp r0, 0 |
| if (r0 == 0) {
0x00011e70 beq 0x11ed8 | goto label_2;
| }
0x00011e72 ldrd r0, r1, [sp, 4] | __asm ("ldrd r0, r1, [var_4h]");
0x00011e76 blx 0x5b30 | fcn_00005b30 ();
0x00011e7a ldr r3, [r4] | r3 = *(r4);
0x00011e7c mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x00011e7e cbnz r0, 0x11ebe | goto label_3;
| }
0x00011e80 ldr r1, [pc, 0x98] |
0x00011e82 mov r2, r5 | r2 = r5;
0x00011e84 movs r0, 3 | r0 = 3;
0x00011e86 add r1, pc | r1 = 0x23da6;
0x00011e88 blx 0x5a60 | fcn_00005a60 ();
0x00011e8c ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00011e8e movs r2, 1 | r2 = 1;
0x00011e90 str r2, [r3] | *(r3) = r2;
| label_0:
0x00011e92 ldr r0, [sp, 8] | r0 = var_8h;
0x00011e94 blx 0x5c30 | archive_entry_free ();
0x00011e98 ldr r0, [sp, 4] | r0 = var_4h;
0x00011e9a blx 0x5c30 | archive_entry_free ();
0x00011e9e ldr r2, [pc, 0x80] |
0x00011ea0 ldr r3, [pc, 0x50] | r3 = *(0x11ef4);
0x00011ea2 add r2, pc | r2 = 0x23dc8;
0x00011ea4 ldr r3, [r2, r3] | r3 = *(0x23dc8);
0x00011ea6 ldr r2, [r3] | r2 = *(0x23dc8);
0x00011ea8 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00011eaa eors r2, r3 | r2 ^= r3;
0x00011eac mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00011eb0 bne 0x11eea | goto label_4;
| }
0x00011eb2 mov r0, r6 | r0 = r6;
0x00011eb4 add sp, 0x10 |
0x00011eb6 pop {r4, r5, r6, pc} |
| label_1:
0x00011eb8 ldr r6, [pc, 0x68] |
0x00011eba add r6, pc | r6 = 0x23de2;
0x00011ebc b 0x11e2c |
| } while (1);
| label_3:
0x00011ebe ldr r1, [pc, 0x68] |
0x00011ec0 mov r2, r5 | r2 = r5;
0x00011ec2 movs r0, 0 | r0 = 0;
0x00011ec4 add r1, pc | r1 = 0x23df2;
0x00011ec6 blx 0x5a60 | fcn_00005a60 ();
| do {
0x00011eca ldr r0, [sp, 4] | r0 = var_4h;
0x00011ecc blx 0x5df4 | fcn_00005df4 ();
0x00011ed0 ldr r0, [sp, 8] | r0 = var_8h;
0x00011ed2 blx 0x5df4 | fcn_00005df4 ();
0x00011ed6 b 0x11e92 | goto label_0;
| label_2:
0x00011ed8 ldr r1, [pc, 0x50] |
0x00011eda mov r2, r5 | r2 = r5;
0x00011edc ldr r3, [r4] | r3 = *(r4);
0x00011ede mov.w r6, -1 | r6 = -1;
0x00011ee2 add r1, pc | r1 = 0x23e12;
0x00011ee4 blx 0x5a60 | fcn_00005a60 ();
0x00011ee8 b 0x11eca |
| } while (1);
| label_4:
0x00011eea blx 0x5dac | fcn_00005dac ();
0x00011eee nop |
0x00011ef0 ldm r3, {r3, r6, r7} | r3 = *(r3);
| r6 = *((r3 + 4));
| r7 = *((r3 + 8));
0x00011ef2 movs r1, r0 | r1 = r0;
0x00011ef4 lsls r4, r1, 0x18 | r4 = r1 << 0x18;
0x00011ef6 movs r0, r0 |
0x00011ef8 ldm r3, {r1, r2, r3, r4, r5, r7} | r1 = *(r3);
| r2 = *((r3 + 4));
| r3 = *((r3 + 8));
| r4 = *((r3 + 12));
| r5 = *((r3 + 16));
| r7 = *((r3 + 20));
0x00011efa movs r1, r0 | r1 = r0;
0x00011efc lsls r0, r1, 0x18 | r0 = r1 << 0x18;
0x00011efe movs r0, r0 |
0x00011f00 ldr r0, [r1, 0x44] | r0 = *((r1 + 0x44));
0x00011f02 movs r0, r0 |
0x00011f04 ldr r2, [r6, 0x40] | r2 = *((r6 + 0x40));
0x00011f06 movs r0, r0 |
0x00011f08 str r4, [r0, 0x14] | *((r0 + 0x14)) = r4;
0x00011f0a movs r0, r0 |
0x00011f0c ldr r7, [sp, 0x100] | r7 = *(arg_100h);
0x00011f0e movs r0, r0 |
0x00011f10 ldr r2, [r4, 0x40] | r2 = *((r4 + 0x40));
0x00011f12 movs r0, r0 |
0x00011f14 ldr r5, [sp, 0x270] | r5 = *(arg_270h);
0x00011f16 movs r0, r0 |
0x00011f18 ldr r5, [sp, 0x278] | r5 = *(arg_278h);
0x00011f1a movs r0, r0 |
0x00011f1c ldrh r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x00011f1e movs r0, r0 |
0x00011f20 ldm r3!, {r1, r2, r5} | r1 = *(r3!);
| r2 = *((r3! + 4));
| r5 = *((r3! + 8));
0x00011f22 movs r1, r0 | r1 = r0;
0x00011f24 ldr r2, [r5, 0x38] | r2 = *((r5 + 0x38));
0x00011f26 movs r0, r0 |
0x00011f28 ldr r5, [sp, 0x280] | r5 = *(arg_280h);
0x00011f2a movs r0, r0 |
0x00011f2c ldr r5, [sp, 0xc8] | r5 = *(arg_c8h);
0x00011f2e movs r0, r0 |
| }
[*] Function mmap used 1 times libopkg.so.1.0.0