[*] Binary protection state of libarchive.so.13.6.2
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function strcat tear down of libarchive.so.13.6.2
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libarchive.so.13.6.2 @ 0xe018 */
| #include <stdint.h>
|
; (fcn) fcn.0000e018 () | void fcn_0000e018 (int16_t arg_290h, int16_t arg_3c0h, int16_t arg1, uint32_t arg2, uint32_t arg3, uint32_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| uint32_t var_8h;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_54h;
| int16_t var_94h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0000e018 ldr.w ip, [pc, 0x108] |
0x0000e01c push {r4, r5, lr} |
0x0000e01e mov r5, r0 | r5 = r0;
0x0000e020 ldr r4, [r0] | r4 = *(r0);
0x0000e022 sub sp, 0x9c |
0x0000e024 add ip, pc | ip = 0x1c14c;
0x0000e026 ldr r0, [pc, 0x100] | r0 = *(0xe12a);
0x0000e028 ldr.w r0, [ip, r0] |
0x0000e02c ldr r0, [r0] | r0 = *(0x1c14c);
0x0000e02e str r0, [sp, 0x94] | var_94h = r0;
0x0000e030 mov.w r0, 0 | r0 = 0;
0x0000e034 movw r0, 0x11c9 |
0x0000e038 movt r0, 0xcad | r0 = 0xcad11c9;
0x0000e03c cmp r4, r0 |
| if (r4 == r0) {
0x0000e03e beq 0xe0ae | goto label_2;
| }
| if (r4 < r0) {
0x0000e040 bls 0xe084 | goto label_3;
| }
0x0000e042 movw r0, 0xc0de |
0x0000e046 movt r0, 0xb0c5 | r0 = 0xb0c5c0de;
0x0000e04a cmp r4, r0 |
| if (r4 == r0) {
0x0000e04c beq 0xe0a2 | goto label_4;
| }
0x0000e04e movw r0, 0xb0c5 |
0x0000e052 movt r0, 0xc001 | r0 = 0xc001b0c5;
0x0000e056 cmp r4, r0 |
| if (r4 != r0) {
0x0000e058 bne 0xe106 | goto label_5;
| }
0x0000e05a ldr r0, [pc, 0xd0] |
0x0000e05c add r0, pc | r0 = 0x1c18e;
| do {
| label_0:
0x0000e05e cmp r4, r1 |
| if (r4 != r1) {
0x0000e060 bne 0xe0f0 | goto label_6;
| }
0x0000e062 ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x0000e064 tst r1, r2 |
0x0000e066 it ne |
| if ((r1 & r2) == 0) {
0x0000e068 movne r0, 0 | r0 = 0;
| }
| if ((r1 & r2) == 0) {
0x0000e06a beq 0xe0b4 | goto label_7;
| }
| label_1:
0x0000e06c ldr r2, [pc, 0xc0] |
0x0000e06e ldr r3, [pc, 0xb8] | r3 = *(0xe12a);
0x0000e070 add r2, pc | r2 = 0x1c1a4;
0x0000e072 ldr r3, [r2, r3] | r3 = *(0x1c1a4);
0x0000e074 ldr r2, [r3] | r2 = *(0x1c1a4);
0x0000e076 ldr r3, [sp, 0x94] | r3 = var_94h;
0x0000e078 eors r2, r3 | r2 ^= r3;
0x0000e07a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000e07e bne 0xe102 | goto label_8;
| }
0x0000e080 add sp, 0x9c |
0x0000e082 pop {r4, r5, pc} |
| label_3:
0x0000e084 movw r0, 0xb0c5 |
0x0000e088 movt r0, 0xde | r0 = 0xdeb0c5;
0x0000e08c cmp r4, r0 |
| if (r4 == r0) {
0x0000e08e beq 0xe0a8 | goto label_9;
| }
0x0000e090 movw r0, 0xb0c5 |
0x0000e094 movt r0, 0xbad | r0 = 0xbadb0c5;
0x0000e098 cmp r4, r0 |
| if (r4 != r0) {
0x0000e09a bne 0xe106 | goto label_5;
| }
0x0000e09c ldr r0, [pc, 0x94] |
0x0000e09e add r0, pc | r0 = 0x1c1d6;
0x0000e0a0 b 0xe05e |
| } while (1);
| label_4:
0x0000e0a2 ldr r0, [pc, 0x94] |
0x0000e0a4 add r0, pc | r0 = 0x1c1e2;
0x0000e0a6 b 0xe05e | goto label_0;
| label_9:
0x0000e0a8 ldr r0, [pc, 0x90] |
0x0000e0aa add r0, pc | r0 = 0x1c1ea;
0x0000e0ac b 0xe05e | goto label_0;
| label_2:
0x0000e0ae ldr r0, [pc, 0x90] |
0x0000e0b0 add r0, pc | r0 = 0x1c1f6;
0x0000e0b2 b 0xe05e | goto label_0;
| label_7:
0x0000e0b4 cmp.w r1, 0x8000 |
0x0000e0b8 strd r2, r3, [sp, 8] | __asm ("strd r2, r3, [var_8h]");
| if (r1 == 0x8000) {
0x0000e0bc beq 0xe0e4 | goto label_10;
| }
0x0000e0be add r0, sp, 0x14 | r0 += var_14h;
0x0000e0c0 bl 0xdf34 | fcn_0000df34 (r0, r1);
0x0000e0c4 ldr r2, [sp, 8] | r2 = var_8h;
0x0000e0c6 mov r4, r0 | r4 = r0;
0x0000e0c8 add r0, sp, 0x54 | r0 += var_54h;
0x0000e0ca mov r1, r2 | r1 = r2;
0x0000e0cc bl 0xdf34 | fcn_0000df34 (r0, r1);
0x0000e0d0 ldr r2, [pc, 0x70] |
0x0000e0d2 mov.w r1, -1 | r1 = -1;
0x0000e0d6 strd r4, r0, [sp] | __asm ("strd r4, r0, [sp]");
0x0000e0da mov r0, r5 | r0 = r5;
0x0000e0dc ldr r3, [sp, 0xc] | r3 = var_ch;
0x0000e0de add r2, pc | r2 = 0x1c226;
0x0000e0e0 blx 0xad24 | fcn_0000ad24 ();
| do {
| label_10:
0x0000e0e4 mov.w r3, 0x8000 | r3 = 0x8000;
0x0000e0e8 mvn r0, 0x1d | r0 = ~0x1d;
0x0000e0ec str r3, [r5, 4] | *((r5 + 4)) = r3;
0x0000e0ee b 0xe06c | goto label_1;
| label_6:
0x0000e0f0 ldr r2, [pc, 0x54] |
0x0000e0f2 mov.w r1, -1 | r1 = -1;
0x0000e0f6 str r0, [sp] | *(sp) = r0;
0x0000e0f8 mov r0, r5 | r0 = r5;
0x0000e0fa add r2, pc | r2 = 0x1c246;
0x0000e0fc blx 0xad24 | fcn_0000ad24 ();
0x0000e100 b 0xe0e4 |
| } while (1);
| label_8:
0x0000e102 blx 0xa9ec | fcn_0000a9ec ();
| label_5:
0x0000e106 ldr r0, [pc, 0x44] |
0x0000e108 str r3, [sp, 8] | var_8h = r3;
0x0000e10a add r0, pc | r0 = 0x1c25c;
0x0000e10c bl 0xb290 | entry0 (r0);
0x0000e110 ldr r3, [sp, 8] | r3 = var_8h;
0x0000e112 mov r0, r3 | r0 = r3;
0x0000e114 bl 0xb290 | entry0 (r0);
0x0000e118 ldr r0, [pc, 0x34] |
0x0000e11a add r0, pc | r0 = 0x1c26e;
0x0000e11c bl 0xb290 | r0 = entry0 (r0);
0x0000e120 blx 0xa64c | ZSTD_maxCLevel ();
0x0000e124 add r0, sp, 0x3c0 | r0 += arg_3c0h;
0x0000e126 movs r6, r0 | r6 = r0;
0x0000e128 lsls r0, r0, 0x1b | r0 <<= 0x1b;
0x0000e12a movs r0, r0 |
0x0000e12c rsbs r4, r7, 0 | r4 = r7 - ;
0x0000e12e movs r5, r0 | r5 = r0;
0x0000e130 add r0, sp, 0x290 | r0 += arg_290h;
0x0000e132 movs r6, r0 | r6 = r0;
0x0000e134 tst r6, r4 |
0x0000e136 movs r5, r0 | r5 = r0;
0x0000e138 tst r0, r0 |
0x0000e13a movs r5, r0 | r5 = r0;
0x0000e13c rors r2, r5 | __asm ("rors r2, r5");
0x0000e13e movs r5, r0 | r5 = r0;
0x0000e140 tst r4, r0 |
0x0000e142 movs r5, r0 | r5 = r0;
0x0000e144 cmp r2, r5 |
0x0000e146 movs r5, r0 | r5 = r0;
0x0000e148 tst r6, r6 |
0x0000e14a movs r5, r0 | r5 = r0;
0x0000e14c rors r2, r4 | __asm ("rors r2, r4");
0x0000e14e movs r5, r0 | r5 = r0;
0x0000e150 rors r6, r5 | __asm ("rors r6, r5");
0x0000e152 movs r5, r0 | r5 = r0;
| }
[*] Function strcat used 1 times libarchive.so.13.6.2