[*] Binary protection state of cifs.ko
No RELRO No Canary found NX disabled REL No RPATH No RUNPATH Symbols
[*] Function strcat tear down of cifs.ko
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x802e358 */
| #include <stdint.h>
|
; (fcn) sym.CIFS_SessSetup () | void CIFS_SessSetup (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
0x0802e358 push {r4, r5, r6, r7, r8, lr} |
0x0802e35c subs r5, r1, 0 | r5 = r1 - 0;
0x0802e360 sub sp, sp, 8 |
| if (r5 == r1) {
0x0802e364 beq 0x802e480 | goto label_3;
| }
0x0802e368 stmdaeq sb, {r0, r2, r3, r4, r5, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r4, r5, r6, r7, sb, fp, sp, pc}");
0x0802e36c stmdaeq sb, {r0, r2, r3, r4, r5, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r4, r5, r6, r7, sb, fp, sp, pc}");
0x0802e370 mov r8, r0 | r8 = r0;
0x0802e374 mov r1, 0xdc0 | r1 = 0xdc0;
0x0802e378 mov r7, r2 | r7 = r2;
0x0802e37c ldr r0, [r3, 0x18] | r0 = *((r3 + 0x18));
0x0802e380 stmdaeq sb, {r0, r2, r4, r5, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r4, r5, r7, sb, fp, sp, pc}");
0x0802e384 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x0802e388 beq 0x802e44c | goto label_4;
| }
0x0802e38c ldr r1, [r5, 0xc0] | r1 = *((r5 + 0xc0));
0x0802e390 ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
0x0802e394 stmdaeq r2, {r2, r3, r5, r6, sb, sp, lr, pc} | __asm ("stmdaeq r2, {r2, r3, r5, r6, sb, sp, lr, pc}");
0x0802e398 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 == r0) {
0x0802e39c beq 0x802e454 | goto label_5;
| }
0x0802e3a0 sub r3, r6, 1 | r3 = r6 - 1;
0x0802e3a4 cmp r3, 4 |
| if (r3 > 4) {
| /* switch table (5 cases) at 0x802e3b0 */
0x0802e3a8 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x0802e3ac b 0x802e4c0 | goto label_6;
| do {
| label_1:
0x0802e3fc mov r0, r4 | r0 = r4;
0x0802e400 stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc}");
| label_0:
0x0802e404 mov r0, r5 | r0 = r5;
0x0802e408 add sp, sp, 8 |
0x0802e40c pop {r4, r5, r6, r7, r8, pc} |
| label_2:
0x0802e444 mvn r5, 0x25 | r5 = ~0x25;
0x0802e448 b 0x802e3fc |
| } while (1);
| label_4:
0x0802e44c mvn r5, 0xb | r5 = ~0xb;
0x0802e450 b 0x802e404 | goto label_0;
| label_5:
0x0802e454 ldr r1, [pc, 0x90] | r1 = *(0x802e4e8);
0x0802e458 ldr r0, [pc, 0x94] | r0 = .data;
0x0802e45c stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x0802e460 cmp r0, 0 |
| if (r0 == 0) {
0x0802e464 mvneq r5, 0x15 | r5 = ~0x15;
| goto label_7;
| }
| if (r0 == 0) {
| label_7:
0x0802e468 beq 0x802e3fc | goto label_1;
| }
0x0802e46c stmdaeq r5, {r2, r5, sp, pc} | __asm ("stmdaeq r5, {r2, r5, sp, pc}");
0x0802e470 stmdaeq r5, {r2, r5, sp, pc} | __asm ("stmdaeq r5, {r2, r5, sp, pc}");
0x0802e474 mvn r5, 0x15 | r5 = ~0x15;
0x0802e478 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x0802e47c b 0x802e3fc | goto label_1;
| label_3:
0x0802e480 ldr r2, [pc, 0x70] | r2 = .data;
0x0802e484 stmdaeq r5, {r4, sp, pc} | __asm ("stmdaeq r5, {r4, sp, pc}");
0x0802e488 stmdaeq r5, {r4, sp, pc} | __asm ("stmdaeq r5, {r4, sp, pc}");
0x0802e48c str r2, [sp] | *(sp) = r2;
0x0802e490 movw r1, 0x6ca | r1 = 0x6ca;
0x0802e494 mov r2, 9 | r2 = 9;
0x0802e498 stmdaeq r5, {r2, r3, r4, r5, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r5, {r2, r3, r4, r5, r6, r7, sl, fp, ip, pc}");
0x0802e49c stmdaeq r5, {r2, r3, r4, r5, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r5, {r2, r3, r4, r5, r6, r7, sl, fp, ip, pc}");
0x0802e4a0 mvn r5, 0x15 | r5 = ~0x15;
0x0802e4a4 stmdaeq sb, {r0, r2, r3, r7, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r7, r8, sb, fp, sp, pc}");
0x0802e4a8 b 0x802e404 | goto label_0;
| label_6:
0x0802e4c0 ldr r1, [pc, 0x24] | r1 = *(0x802e4e8);
0x0802e4c4 ldr r0, [pc, 0x30] | r0 = "cifs_remap_file_range";
0x0802e4c8 stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x0802e4cc cmp r0, 0 |
| if (r0 == 0) {
0x0802e4d0 beq 0x802e444 | goto label_2;
| }
0x0802e4d4 mov r1, r6 | r1 = r6;
0x0802e4d8 stmdaeq r5, {r3, r5, r7, sp, pc} | __asm ("stmdaeq r5, {r3, r5, r7, sp, pc}");
0x0802e4dc stmdaeq r5, {r3, r5, r7, sp, pc} | __asm ("stmdaeq r5, {r3, r5, r7, sp, pc}");
0x0802e4e0 mvn r5, 0x25 | r5 = ~0x25;
0x0802e4e4 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x0802e4e8 b 0x802e3fc | 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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x8028b88 */
| #include <stdint.h>
|
; (fcn) sym.cifsConvertToUTF16.part.0 () | void cifsConvertToUTF16_part_0 (int32_t arg_ch, int32_t arg_48h, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_1ah;
| int32_t var_1ch;
| int32_t var_24h;
| r0 = arg1;
| r1 = arg2;
0x08028b88 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x08028b8c mov fp, r3 |
0x08028b90 stmdaeq sb, {r0, r2, r3, r4, r5, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r4, r5, r6, r7, sb, fp, sp, pc}");
0x08028b94 stmdaeq sb, {r0, r2, r3, r4, r5, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r4, r5, r6, r7, sb, fp, sp, pc}");
0x08028b98 sub sp, sp, 0x24 |
0x08028b9c mov r7, r2 | r7 = r2;
0x08028ba0 mov sl, r0 | sl = r0;
0x08028ba4 mov r6, r1 | r6 = r1;
0x08028ba8 mov r1, 0xdc0 | r1 = 0xdc0;
0x08028bac ldr r0, [r3, 0x18] | r0 = *((r3 + 0x18));
0x08028bb0 mov r5, 0 | r5 = 0;
0x08028bb4 ldr sb, [sp, 0x48] | sb = *(arg_48h);
0x08028bb8 stmdaeq sb, {r0, r2, r4, r5, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r4, r5, r7, sb, fp, sp, pc}");
0x08028bbc cmp r7, 0 |
0x08028bc0 str r0, [sp, 0xc] | var_ch = r0;
| if (r7 <= 0) {
0x08028bc4 ble 0x8028dd4 | goto label_4;
| }
0x08028bc8 stmdaeq r5, {r3, r5, r6, sb, fp, ip, lr} | __asm ("stmdaeq r5, {r3, r5, r6, sb, fp, ip, lr}");
0x08028bcc stmdaeq r5, {r3, r5, r6, sb, fp, ip, lr} | __asm ("stmdaeq r5, {r3, r5, r6, sb, fp, ip, lr}");
0x08028bd0 mov r4, r5 | r4 = r5;
0x08028bd4 str r3, [sp, 0x10] | var_10h = r3;
0x08028bd8 b 0x8028c58 |
| while (sb != 2) {
0x08028bdc cmp sb, 1 |
| if (sb == 1) {
0x08028be0 beq 0x8028cfc | goto label_5;
| }
| label_0:
0x08028be4 ldr r3, [fp, 0xc] | r3 = *(arg_ch);
0x08028be8 add r2, sp, 0x1a | r2 += var_1ah;
0x08028bec sub r1, r7, r4 | r1 = r7 - r4;
0x08028bf0 mov r0, r8 | r0 = r8;
0x08028bf4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x08028bf8 ldrh r3, [sp, 0x1a] | r3 = var_1ah;
0x08028bfc cmp r0, 0 |
| if (r0 <= 0) {
0x08028c00 bgt 0x8028c40 |
0x08028c04 ldr r0, [fp] | r0 = *(fp);
0x08028c08 ldr r1, [sp, 0x10] | r1 = var_10h;
0x08028c0c stmdaeq sb, {r0, r2, r3, r4, r5, r6, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r4, r5, r6, sl, fp, sp, pc}");
0x08028c10 subs r0, r0, 0 |
0x08028c14 ldr r3, [sp, 0xc] | r3 = var_ch;
| if (r0 == r0) {
0x08028c18 movne r0, 1 | r0 = 1;
| }
0x08028c1c cmp r3, 0 |
| if (r3 != 0) {
0x08028c20 orreq r0, r0, 1 | r0 |= 1;
| }
0x08028c24 cmp r0, 0 |
| if (r0 == 0) {
0x08028c28 bne 0x8028c38 |
0x08028c2c ldrsb r3, [r8] | r3 = *(r8);
0x08028c30 cmp r3, 0 |
| if (r3 < 0) {
0x08028c34 blt 0x8028df4 | goto label_6;
| }
| }
| label_2:
0x08028c38 mov r3, 0x3f | r3 = 0x3f;
0x08028c3c mov r0, 1 | r0 = 1;
| }
| label_1:
0x08028c40 lsl r2, r5, 1 | r2 = r5 << 1;
0x08028c44 add r4, r4, r0 | r4 += r0;
0x08028c48 strh r3, [sl, r2] | *((sl + r2)) = r3;
| label_3:
0x08028c4c add r5, r5, 1 | r5++;
0x08028c50 cmp r7, r4 |
| if (r7 <= r4) {
0x08028c54 ble 0x8028dd0 | goto label_7;
| }
0x08028c58 ldrb r3, [r6, r4] | r3 = *((r6 + r4));
0x08028c5c add r8, r6, r4 | r8 = r6 + r4;
0x08028c60 cmp r3, 0 |
| if (r3 == 0) {
0x08028c64 beq 0x8028dd0 | goto label_7;
| }
0x08028c68 cmp sb, 2 |
0x08028c6c bne 0x8028bdc |
| }
0x08028c70 cmp r3, 0x3f |
| if (r3 > 0x3f) {
0x08028c74 bhi 0x8028ce8 | goto label_8;
| }
0x08028c78 cmp r3, 0x29 |
| if (r3 < 0x29) {
0x08028c7c bls 0x8028be4 | goto label_0;
| }
0x08028c80 sub r3, r3, 0x2a | r3 -= 0x2a;
0x08028c84 cmp r3, 0x15 |
| if (r3 > 0x15) {
| /* switch table (22 cases) at 0x8028c90 */
0x08028c88 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x08028c8c b 0x8028be4 | goto label_0;
| label_8:
0x08028ce8 cmp r3, 0x7c |
0x08028cec movweq r3, 0xf07c | __asm ("movweq r3, 0xf07c");
| if (r3 == 0x7c) {
0x08028cf0 moveq r0, 1 | r0 = 1;
| goto label_9;
| }
| if (r3 == 0x7c) {
| label_9:
0x08028cf4 beq 0x8028c40 | goto label_1;
| }
0x08028cf8 b 0x8028be4 | goto label_0;
| label_5:
0x08028cfc sub r2, r7, 1 | r2 = r7 - 1;
0x08028d00 cmp r2, r4 |
| if (r2 != r4) {
0x08028d04 moveq r2, sb | r2 = sb;
| }
| if (r2 == r4) {
0x08028d08 ldrbne r2, [r8, 1] | r2 = *((r8 + 1));
| }
| if (r2 == r4) {
0x08028d0c subne r2, r2, 0x5c | r2 -= 0x5c;
| }
0x08028d10 clzne r2, r2 | __asm ("clzne r2, r2");
| if (r2 == r4) {
0x08028d14 lsrne r2, r2, 5 | r2 >>= 5;
| }
0x08028d18 sub r1, r3, 1 | r1 = r3 - 1;
0x08028d1c cmp r1, 0x1e |
| if (r1 < 0x1e) {
0x08028d20 bls 0x8028f34 | goto label_10;
| }
0x08028d24 cmp r3, 0x3f |
| if (r3 <= 0x3f) {
0x08028d28 bhi 0x8028dbc |
0x08028d2c sub r3, r3, 0x20 | r3 -= 0x20;
0x08028d30 cmp r3, 0x1f |
| if (r3 > 0x1f) {
| /* switch table (32 cases) at 0x8028d3c */
0x08028d34 ldrls pc, [pc, r3, lsl 2] | offset_1 = r3 << 2;
| pc = *((pc + offset_1));
| }
0x08028d38 b 0x8028be4 | goto label_0;
| }
0x08028dbc cmp r3, 0x7c |
| if (r3 != 0x7c) {
0x08028dc0 moveq r0, 1 | r0 = 1;
| }
0x08028dc4 movweq r3, 0xf027 | __asm ("movweq r3, 0xf027");
| if (r3 == 0x7c) {
0x08028dc8 beq 0x8028c40 | goto label_1;
| }
0x08028dcc b 0x8028be4 | goto label_0;
| label_7:
0x08028dd0 add sl, sl, r5, lsl 1 | sl += (r5 << 1);
| label_4:
0x08028dd4 mov r3, 0 | r3 = 0;
0x08028dd8 ldr r0, [sp, 0xc] | r0 = var_ch;
0x08028ddc strb r3, [sl] | *(sl) = r3;
0x08028de0 strb r3, [sl, 1] | *((sl + 1)) = r3;
0x08028de4 stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc}");
0x08028de8 mov r0, r5 | r0 = r5;
0x08028dec add sp, sp, 0x24 |
0x08028df0 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x08028df4 mov r1, 6 | r1 = 6;
0x08028df8 add r2, sp, 0x1c | r2 += var_1ch;
0x08028dfc mov r0, r8 | r0 = r8;
0x08028e00 stmdaeq sb, {r0, r3, r7, sb, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r3, r7, sb, sl, fp, sp, pc}");
0x08028e04 subs r1, r0, 0 | r1 = r0 - 0;
| if (r1 < r0) {
0x08028e08 blt 0x8028c38 | goto label_2;
| }
0x08028e0c mov r0, r8 | r0 = r8;
0x08028e10 ldr r8, [sp, 0xc] | r8 = var_ch;
0x08028e14 mov r2, 6 | r2 = 6;
0x08028e18 str r2, [sp] | *(sp) = r2;
0x08028e1c mov r3, r8 | r3 = r8;
0x08028e20 mov r2, 1 | r2 = 1;
0x08028e24 str r1, [sp, 0x14] | var_14h = r1;
0x08028e28 stmdaeq sb, {r0, r2, r3, r7, sb, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r7, sb, sl, fp, sp, pc}");
0x08028e2c cmp r0, 0 |
| if (r0 < 0) {
0x08028e30 blt 0x8028c38 | goto label_2;
| }
0x08028e34 lsl r3, r5, 1 | r3 = r5 << 1;
0x08028e38 ldr r1, [sp, 0x14] | r1 = var_14h;
0x08028e3c ldrh r2, [r8] | r2 = *(r8);
0x08028e40 add r0, sl, r3 | r0 = sl + r3;
0x08028e44 cmp r1, 3 |
0x08028e48 add r4, r4, r1 | r4 += r1;
0x08028e4c strhle r2, [sl, r3] | __asm ("strhle r2, [sl, r3]");
| if (r1 <= 3) {
0x08028e50 ble 0x8028c4c | goto label_3;
| }
0x08028e54 cmp r1, 4 |
0x08028e58 ldr r1, [sp, 0xc] | r1 = var_ch;
0x08028e5c add r3, r3, 2 | r3 += 2;
0x08028e60 strh r2, [r0] | *(r0) = r2;
0x08028e64 add ip, r5, 1 |
| if (r1 == 4) {
0x08028e68 addne r5, r5, 2 | r5 += 2;
| }
0x08028e6c ldrh r1, [r1, 2] | r1 = *((r1 + 2));
| if (r1 != 4) {
0x08028e70 moveq r5, ip | r5 = ip;
| }
0x08028e74 strh r1, [sl, r3] | *((sl + r3)) = r1;
| if (r1 == 4) {
0x08028e78 ldrne r3, [sp, 0xc] | r3 = var_ch;
| }
0x08028e7c ldrhne r3, [r3, 4] | __asm ("ldrhne r3, [r3, 4]");
0x08028e80 strhne r3, [r0, 4] | __asm ("strhne r3, [r0, 4]");
0x08028e84 b 0x8028c4c | goto label_3;
| label_10:
0x08028f34 sub r3, r3, 0x1000 | r3 -= 0x1000;
0x08028f38 mov r0, 1 | r0 = 1;
0x08028f3c uxth r3, r3 | r3 = (int16_t) r3;
0x08028f40 b 0x8028c40 | 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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x801d6c8 */
| #include <stdint.h>
|
; (fcn) sym.cifs_all_info_to_fattr () | void cifs_all_info_to_fattr (int32_t arg_38h, int32_t arg_3ch, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_14h;
| r0 = arg1;
| r1 = arg2;
0x0801d6c8 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0801d6cc mov r5, r1 | r5 = r1;
0x0801d6d0 mov r4, r0 | r4 = r0;
0x0801d6d4 ldr r7, [r2, 0x1f0] | r7 = *((r2 + 0x1f0));
0x0801d6d8 sub sp, sp, 0x14 |
0x0801d6dc mov fp, r3 |
0x0801d6e0 mov r0, r7 | r0 = r7;
0x0801d6e4 ldrb sl, [sp, 0x38] | sl = *(arg_38h);
0x0801d6e8 ldr r8, [sp, 0x3c] | r8 = *(arg_3ch);
0x0801d6ec stmdaeq r1, {r7, fp, sp} | __asm ("stmdaeq r1, {r7, fp, sp}");
0x0801d6f0 mov r2, 0x78 | r2 = 0x78;
0x0801d6f4 mov r1, 0 | r1 = 0;
0x0801d6f8 mov sb, r0 | sb = r0;
0x0801d6fc mov r0, r4 | r0 = r4;
0x0801d700 stmdaeq sb, {r0, r2, r4, r5, r6, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r4, r5, r6, r8, sb, fp, sp, pc}");
0x0801d704 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x0801d708 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x0801d70c mov r6, sp | r6 = sp;
0x0801d710 ldrb r3, [r5, 0x3c] | r3 = *((r5 + 0x3c));
0x0801d714 cmp r3, 0 |
| if (r3 == 0) {
0x0801d718 movne r3, 2 | r3 = 2;
| }
| if (r3 == 0) {
0x0801d71c strne r3, [r4] | *(r4) = r3;
| }
0x0801d720 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x0801d724 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0801d728 orrs r1, r2, r3 | r1 = r2 | r3;
| if (r1 == r2) {
0x0801d72c beq 0x801d82c | goto label_2;
| }
0x0801d730 mov r0, r6 | r0 = r6;
0x0801d734 stmdaeq r2, {r5, r6, r8, fp, lr} | __asm ("stmdaeq r2, {r5, r6, r8, fp, lr}");
0x0801d738 add ip, r4, 0x40 |
0x0801d73c ldm r6, {r0, r1, r2, r3} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
| r3 = *((r6 + 12));
0x0801d740 stm ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
| do {
0x0801d744 ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x0801d748 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x0801d74c mov r0, r6 | r0 = r6;
0x0801d750 stmdaeq r2, {r5, r6, r8, fp, lr} | __asm ("stmdaeq r2, {r5, r6, r8, fp, lr}");
0x0801d754 add ip, r4, 0x60 |
0x0801d758 ldm r6, {r0, r1, r2, r3} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
| r3 = *((r6 + 12));
0x0801d75c stm ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x0801d760 mov r0, r6 | r0 = r6;
0x0801d764 ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x0801d768 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x0801d76c stmdaeq r2, {r5, r6, r8, fp, lr} | __asm ("stmdaeq r2, {r5, r6, r8, fp, lr}");
0x0801d770 add ip, r4, 0x50 |
0x0801d774 ldm r6, {r0, r1, r2, r3} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
| r3 = *((r6 + 12));
0x0801d778 cmp fp, 0 |
0x0801d77c stm ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
| if (fp != 0) {
0x0801d780 beq 0x801d7c8 |
0x0801d784 ldr r3, [sb, 0x24] | r3 = *((sb + 0x24));
0x0801d788 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0801d78c ldr r2, [r3, 0x1c0] | r2 = *((r3 + 0x1c0));
0x0801d790 ldr r3, [r4, 0x60] | r3 = *((r4 + 0x60));
0x0801d794 adds r3, r3, r2 | r3 += r2;
0x0801d798 str r3, [r4, 0x60] | *((r4 + 0x60)) = r3;
0x0801d79c ldr r3, [r4, 0x64] | r3 = *((r4 + 0x64));
0x0801d7a0 adc r3, r3, r2, asr 31 | __asm ("adc r3, r3, r2, asr 31");
0x0801d7a4 str r3, [r4, 0x64] | *((r4 + 0x64)) = r3;
0x0801d7a8 ldr r2, [r4, 0x54] | r2 = *((r4 + 0x54));
0x0801d7ac ldr r1, [sb, 0x24] | r1 = *((sb + 0x24));
0x0801d7b0 ldr r1, [r1, 0x20] | r1 = *((r1 + 0x20));
0x0801d7b4 ldr r1, [r1, 0x1c0] | r1 = *((r1 + 0x1c0));
0x0801d7b8 adds r3, r0, r1 | r3 = r0 + r1;
0x0801d7bc str r3, [r4, 0x50] | *((r4 + 0x50)) = r3;
0x0801d7c0 adc r3, r2, r1, asr 31 | __asm ("adc r3, r2, r1, asr 31");
0x0801d7c4 str r3, [r4, 0x54] | *((r4 + 0x54)) = r3;
| }
0x0801d7c8 ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x0801d7cc ldr r2, [r5, 0x34] | r2 = *((r5 + 0x34));
0x0801d7d0 str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x0801d7d4 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0801d7d8 mov r3, 0x1d |
0x0801d7dc movt r3, 0xa000 | r3 = 0x-5fffffe3;
0x0801d7e0 ldr r2, [r5, 0x28] | r2 = *((r5 + 0x28));
0x0801d7e4 cmp r8, r3 |
0x0801d7e8 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x0801d7ec strd r2, r3, [r4, 0x18] | __asm ("strd r2, r3, [r4, 0x18]");
0x0801d7f0 ldr r3, [r5] | r3 = *(r5);
0x0801d7f4 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x0801d7f8 str r2, [r4, 0x24] | *((r4 + 0x24)) = r2;
0x0801d7fc str r3, [r4, 0x20] | *((r4 + 0x20)) = r3;
0x0801d800 ldr r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x0801d804 str r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
| if (r8 == r3) {
0x0801d808 beq 0x801d838 | goto label_3;
| }
0x0801d80c sub r8, r8, 0x80000023 | r8 -= 0x80000023;
0x0801d810 cmp r8, 3 |
| if (r8 > 3) {
| /* switch table (4 cases) at 0x801d81c */
0x0801d814 ldrls pc, [pc, r8, lsl 2] | offset_0 = r8 << 2;
| pc = *((pc + offset_0));
| }
0x0801d818 b 0x801d8f0 | goto label_4;
| label_2:
0x0801d82c add r0, r4, 0x40 | r0 = r4 + 0x40;
0x0801d830 stmdaeq sb, {r0, r2, r6, r7, r8, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r6, r7, r8, sl, fp, sp, pc}");
0x0801d834 b 0x801d744 |
| } while (1);
| label_3:
0x0801d838 ldrh r2, [r7, 0x30] | r2 = *((r7 + 0x30));
0x0801d83c mov r1, 0xa | r1 = 0xa;
0x0801d840 ldrh r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x0801d844 str r1, [r4, 0x3c] | *((r4 + 0x3c)) = r1;
0x0801d848 orr r3, r3, r2 | r3 |= r2;
0x0801d84c orr r3, r3, 0xa000 | r3 |= 0xa000;
0x0801d850 strh r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
| do {
| label_0:
0x0801d854 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x0801d858 str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
0x0801d85c ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x0801d860 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x0801d864 add sp, sp, 0x14 |
0x0801d868 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x0801d8f0 cmp sl, 0 |
| if (sl == 0) {
0x0801d8f4 beq 0x801d90c | goto label_5;
| }
0x0801d8f8 mov r2, 0xa000 | r2 = 0xa000;
0x0801d8fc mov r3, 0xa | r3 = 0xa;
0x0801d900 strh r2, [r4, 0x30] | *((r4 + 0x30)) = r2;
0x0801d904 str r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
0x0801d908 b 0x801d854 |
| } while (1);
| label_5:
0x0801d90c ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0801d910 tst r2, 0x10 |
| if ((r2 & 0x10) == 0) {
0x0801d914 beq 0x801d948 | goto label_6;
| }
0x0801d918 ldrh r3, [r7, 0x32] | r3 = *((r7 + 0x32));
0x0801d91c mov r2, 4 | r2 = 4;
0x0801d920 str r2, [r4, 0x3c] | *((r4 + 0x3c)) = r2;
0x0801d924 orr r3, r3, 0x4000 | r3 |= 0x4000;
0x0801d928 strh r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x0801d92c ldrb r3, [sb, 0x645] | r3 = *((sb + 0x645));
0x0801d930 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x0801d934 bne 0x801d854 | goto label_0;
| }
| label_1:
0x0801d938 ldr r3, [r4] | r3 = *(r4);
0x0801d93c orr r3, r3, 0x10 | r3 |= 0x10;
0x0801d940 str r3, [r4] | *(r4) = r3;
0x0801d944 b 0x801d854 | goto label_0;
| label_6:
0x0801d948 tst r2, 1 |
0x0801d94c ldrh r2, [r7, 0x30] | r2 = *((r7 + 0x30));
0x0801d950 mov r1, 0x8000 |
0x0801d954 movt r1, 0xffff | r1 = 0x-8000;
0x0801d958 orr r0, r2, r1 | r0 = r2 | r1;
0x0801d95c bicne r2, r2, 0x92 | __asm ("bicne r2, r2, 0x92");
| if ((r2 & 1) == 0) {
0x0801d960 orrne r2, r2, r1 | r2 |= r1;
| }
0x0801d964 strh r0, [r4, 0x30] | *((r4 + 0x30)) = r0;
0x0801d968 mov r0, 8 | r0 = 8;
0x0801d96c strhne r2, [r4, 0x30] | __asm ("strhne r2, [r4, 0x30]");
0x0801d970 str r0, [r4, 0x3c] | *((r4 + 0x3c)) = r0;
0x0801d974 cmp r3, 0 |
| if (r3 != 0) {
0x0801d978 bne 0x801d854 | goto label_0;
| }
0x0801d97c ldrb r3, [sb, 0x645] | r3 = *((sb + 0x645));
0x0801d980 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x0801d984 bne 0x801d854 | goto label_0;
| }
0x0801d988 ldrb r3, [r5, 0x3c] | r3 = *((r5 + 0x3c));
0x0801d98c cmp r3, 0 |
| if (r3 != 0) {
0x0801d990 bne 0x801d854 | goto label_0;
| }
0x0801d994 stmdaeq r4, {fp, ip, sp, lr} | __asm ("stmdaeq r4, {fp, ip, sp, lr}");
0x0801d998 stmdaeq r4, {fp, ip, sp, lr} | __asm ("stmdaeq r4, {fp, ip, sp, lr}");
0x0801d99c stmdaeq r6, {r2, r4, r5, r6, r8, ip, sp, pc} | __asm ("stmdaeq r6, {r2, r4, r5, r6, r8, ip, sp, pc}");
0x0801d9a0 stmdaeq r6, {r2, r4, r5, r6, r8, ip, sp, pc} | __asm ("stmdaeq r6, {r2, r4, r5, r6, r8, ip, sp, pc}");
0x0801d9a4 stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x0801d9a8 cmp r0, 0 |
| if (r0 == 0) {
0x0801d9ac beq 0x801d938 | goto label_1;
| }
0x0801d9b0 ldr r1, [r4, 0x38] | r1 = *((r4 + 0x38));
0x0801d9b4 stmdaeq r5, {r2, r4, r5, r7, r8, sb, sl, fp, lr} | __asm ("stmdaeq r5, {r2, r4, r5, r7, r8, sb, sl, fp, lr}");
0x0801d9b8 stmdaeq r5, {r2, r4, r5, r7, r8, sb, sl, fp, lr} | __asm ("stmdaeq r5, {r2, r4, r5, r7, r8, sb, sl, fp, lr}");
0x0801d9bc stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x0801d9c0 b 0x801d938 | 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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x8013920 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.cifs_do_create () | void cifs_do_create (int32_t arg_16h, int32_t arg_a0h, int32_t arg_a4h, int32_t arg_a8h, int32_t arg_ach, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_38h;
| int32_t var_3ch;
| int32_t var_40h;
| int32_t var_44h;
| int32_t var_46h;
| int32_t var_48h;
| int32_t var_48h_2;
| int32_t var_50h;
| int32_t var_50h_2;
| int32_t var_58h;
| int32_t var_58h_2;
| int32_t var_60h;
| int32_t var_64h;
| int32_t var_68h;
| int32_t var_6ch;
| int32_t var_70h;
| int32_t var_74h;
| int32_t var_7ch;
| r0 = arg1;
| r1 = arg2;
0x08013920 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x08013924 mov r8, r0 | r8 = r0;
0x08013928 mov r7, r1 | r7 = r1;
0x0801392c sub sp, sp, 0x7c |
0x08013930 ldr r5, [r3, 0x1c] | r5 = *((r3 + 0x1c));
0x08013934 ldr r3, [r0, 0x14] | r3 = *((r0 + 0x14));
0x08013938 str r2, [sp, 0x10] | var_10h = r2;
0x0801393c ldr sb, [r3, 0x1f0] | sb = *((r3 + 0x1f0));
0x08013940 ldr r2, [sp, 0xa8] | r2 = *(arg_a8h);
0x08013944 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x08013948 ldr r4, [sp, 0xa0] | r4 = *(arg_a0h);
0x0801394c ldr sl, [r3, 0x20] | sl = *((r3 + 0x20));
0x08013950 mov r3, 0 | r3 = 0;
0x08013954 str r3, [r2] | *(r2) = r3;
0x08013958 str r3, [sp, 0x24] | var_24h = r3;
0x0801395c ldrh r3, [sp, 0xa4] | r3 = *(arg_a4h);
0x08013960 str r3, [sp, 0x14] | var_14h = r3;
0x08013964 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x08013968 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0801396c ldrb r3, [r3, 0x1ac] | r3 = *((r3 + 0x1ac));
0x08013970 and r3, r3, 1 | r3 &= 1;
0x08013974 lsl r3, r3, 1 | r3 <<= 1;
0x08013978 str r3, [r2] | *(r2) = r3;
0x0801397c ldr r3, [r1, 0x5c] | r3 = *((r1 + 0x5c));
0x08013980 ldr r0, [r3, 0x1f0] | r0 = *((r3 + 0x1f0));
0x08013984 stmdaeq r1, {r7, fp, sp} | __asm ("stmdaeq r1, {r7, fp, sp}");
0x08013988 movw r3, 0x53c | r3 = 0x53c;
0x0801398c ldrh r1, [r0, r3] | r1 = *((r0 + r3));
0x08013990 mov r0, r7 | r0 = r7;
0x08013994 ubfx r1, r1, 1, 1 | r1 = (r1 >> 1) & ((1 << 1) - 1);
0x08013998 stmdaeq r1, {r2, r4, r7, r8, sl, ip, sp} | __asm ("stmdaeq r1, {r2, r4, r7, r8, sl, ip, sp}");
0x0801399c subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 == r0) {
0x080139a0 beq 0x8013e5c | goto label_5;
| }
0x080139a4 ldrb r3, [r5, 0x645] | r3 = *((r5 + 0x645));
0x080139a8 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x080139ac beq 0x80139dc |
0x080139b0 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x080139b4 ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x080139b8 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x080139bc ldr r2, [r2, 0x28] | r2 = *((r2 + 0x28));
0x080139c0 ldr r2, [r2, 0x30] | r2 = *((r2 + 0x30));
0x080139c4 tst r2, r3 |
| if ((r2 & r3) == 0) {
0x080139c8 beq 0x80139dc | goto label_2;
| }
0x080139cc ldrb r3, [r5, 0x648] | r3 = *((r5 + 0x648));
0x080139d0 str r3, [sp, 0x1c] | var_1ch = r3;
0x080139d4 cmp r3, 0 |
| if (r3 == 0) {
0x080139d8 beq 0x8013d20 | goto label_6;
| }
| }
| label_2:
0x080139dc add r3, r4, 1 | r3 = r4 + 1;
0x080139e0 and r2, r4, 0xc0 | r2 = r4 & 0xc0;
0x080139e4 tst r3, 2 |
0x080139e8 lsl r3, r3, 0x1f | r3 <<= 0x1f;
| if ((r3 & 2) == 0) {
0x080139ec orrne r3, r3, 0x40000000 | r3 |= 0x40000000;
| }
0x080139f0 cmp r2, 0xc0 |
| if (r2 != 0xc0) {
0x080139f4 moveq fp, 2 |
| }
| if (r2 != 0xc0) {
0x080139f8 beq 0x8013a18 |
0x080139fc and r2, r4, 0x240 | r2 = r4 & 0x240;
0x08013a00 cmp r2, 0x240 |
| if (r2 != 0x240) {
0x08013a04 moveq fp, 5 |
| }
| if (r2 == 0x240) {
0x08013a08 beq 0x8013a18 | goto label_7;
| }
0x08013a0c tst r4, 0x40 |
| if ((r4 & 0x40) != 0) {
0x08013a10 moveq fp, 5 |
| }
| if ((r4 & 0x40) != 0) {
0x08013a14 movne fp, 3 | goto label_7;
| }
| }
| label_7:
0x08013a18 ldr r2, [sl, 0x24] | r2 = *((sl + 0x24));
0x08013a1c str r3, [sp, 0x18] | var_18h = r3;
0x08013a20 ldr r4, [r2, 0xd8] | r4 = *((r2 + 0xd8));
0x08013a24 cmp r4, 0 |
| if (r4 != 0) {
0x08013a28 mvneq fp, 0x25 |
| }
| if (r4 == 0) {
0x08013a2c beq 0x8013c10 | goto label_0;
| }
0x08013a30 stmdaeq sb, {r0, r2, r3, r4, r5, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r4, r5, r6, r7, sb, fp, sp, pc}");
0x08013a34 stmdaeq sb, {r0, r2, r3, r4, r5, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r4, r5, r6, r7, sb, fp, sp, pc}");
0x08013a38 mov r1, 0xcc0 | r1 = 0xcc0;
0x08013a3c ldr r0, [r2, 0x1c] | r0 = *((r2 + 0x1c));
0x08013a40 stmdaeq sb, {r0, r2, r4, r5, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r4, r5, r7, sb, fp, sp, pc}");
0x08013a44 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x08013a48 beq 0x8013e8c | goto label_8;
| }
0x08013a4c ldrb r2, [r5, 0x645] | r2 = *((r5 + 0x645));
0x08013a50 ldr r3, [sp, 0x18] | r3 = var_18h;
0x08013a54 tst r2, 1 |
| if ((r2 & 1) == 0) {
0x08013a58 movne r2, 0x40 | r2 = 0x40;
| }
| if ((r2 & 1) == 0) {
0x08013a5c bne 0x8013a74 |
0x08013a60 ldr r2, [sp, 0x14] | r2 = var_14h;
0x08013a64 tst r2, 0x92 |
0x08013a68 mov r2, 0x40 |
0x08013a6c movt r2, 0x1000 | r2 = 0x10000040;
| if ((r2 & 0x92) != 0) {
0x08013a70 movne r2, 0x40 | r2 = 0x40;
| goto label_9;
| }
| }
| label_9:
0x08013a74 cmp sb, 0 |
0x08013a78 str r3, [sp, 0x34] | var_34h = r3;
0x08013a7c str r5, [sp, 0x28] | var_28h = r5;
0x08013a80 str sb, [sp, 0x2c] | var_2ch = sb;
| if (sb != 0) {
0x08013a84 beq 0x8013aa0 |
0x08013a88 mov r0, sb | r0 = sb;
0x08013a8c str r2, [sp, 0x18] | var_18h = r2;
0x08013a90 stmdaeq r2, {r2, r5, sb, fp, ip, sp} | __asm ("stmdaeq r2, {r2, r5, sb, fp, ip, sp}");
0x08013a94 ldr r2, [sp, 0x18] | r2 = var_18h;
0x08013a98 cmp r0, 0 |
| if (r0 != 0) {
0x08013a9c orrne r2, r2, 0x4000 | r2 |= 0x4000;
| goto label_10;
| }
| }
| label_10:
0x08013aa0 ldr r3, [sp, 0xac] | r3 = *(arg_ach);
0x08013aa4 add r1, sp, 0x28 | r1 += var_28h;
0x08013aa8 str r3, [sp, 0x40] | var_40h = r3;
0x08013aac ldr r3, [sp, 0x14] | r3 = var_14h;
0x08013ab0 strh r3, [sp, 0x44] | var_44h = r3;
0x08013ab4 ldrb r3, [sp, 0x46] | r3 = var_46h;
0x08013ab8 str r2, [sp, 0x38] | var_38h = r2;
0x08013abc str fp, [sp, 0x30] | var_30h = fp;
0x08013ac0 bfc r3, 0, 1 | value_0 = BIT_MASK (1, );
| value_0 = ~value_0;
| r3 &= value_0;
0x08013ac4 strb r3, [sp, 0x46] | var_46h = r3;
0x08013ac8 ldr r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x08013acc ldr r2, [sp, 0xa8] | r2 = *(arg_a8h);
0x08013ad0 ldr r0, [sp, 0x10] | r0 = var_10h;
0x08013ad4 ldr fp, [r3, 0xd8] | fp = *((r3 + 0xd8));
0x08013ad8 mov r3, r4 | r3 = r4;
0x08013adc str r6, [sp, 0x3c] | var_3ch = r6;
0x08013ae0 blx fp | r0 = fp (r0, r2, r3);
0x08013ae4 subs fp, r0, 0 |
| if (fp != r0) {
0x08013ae8 bne 0x8013c10 | goto label_0;
| }
0x08013aec ldrb r2, [r5, 0x645] | r2 = *((r5 + 0x645));
0x08013af0 tst r2, 1 |
| if ((r2 & 1) != 0) {
0x08013af4 addeq r3, sp, 0x24 | r3 += var_24h;
| }
| if ((r2 & 1) != 0) {
0x08013af8 streq r3, [sp, 0x18] | var_18h = r3;
| }
| if ((r2 & 1) == 0) {
0x08013afc beq 0x8013c64 | goto label_11;
| }
0x08013b00 ldr r3, [sp, 0xa8] | r3 = *(arg_a8h);
0x08013b04 ldr r2, [r3] | r2 = *(r3);
0x08013b08 tst r2, 0x20000 |
| if ((r2 & 0x20000) != 0) {
0x08013b0c addeq r3, sp, 0x24 | r3 += var_24h;
| }
| if ((r2 & 0x20000) != 0) {
0x08013b10 streq r3, [sp, 0x18] | var_18h = r3;
| }
| if ((r2 & 0x20000) != 0) {
0x08013b14 beq 0x8013bc4 |
0x08013b18 str fp, [sp, 0x70] | var_70h = fp;
0x08013b1c mvn r0, 0 | r0 = ~0;
0x08013b20 str fp, [sp, 0x74] | var_74h = fp;
0x08013b24 mvn r1, 0 | r1 = ~0;
0x08013b28 ldr r3, [sp, 0x14] | r3 = var_14h;
0x08013b2c str r3, [sp, 0x60] | var_60h = r3;
0x08013b30 ldr r3, [sb, 0x34] | r3 = *((sb + 0x34));
0x08013b34 str fp, [sp, 0x6c] | var_6ch = fp;
0x08013b38 tst r3, 2 |
0x08013b3c mov r3, sp | r3 = sp;
0x08013b40 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08013b44 str fp, [sp, 0x68] | var_68h = fp;
0x08013b48 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08013b4c str fp, [sp, 0x64] | var_64h = fp;
0x08013b50 strd r0, r1, [sp, 0x48] | __asm ("strd r0, r1, [var_48h]");
0x08013b54 strd r0, r1, [sp, 0x50] | __asm ("strd r0, r1, [var_50h]");
0x08013b58 strd r0, r1, [sp, 0x58] | __asm ("strd r0, r1, [var_58h]");
| if ((r3 & 2) == 0) {
0x08013b5c beq 0x8013ddc | goto label_12;
| }
0x08013b60 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x08013b64 ldr r2, [r2, 0x340] | r2 = *((r2 + 0x340));
0x08013b68 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x08013b6c str r2, [sp, 0x68] | var_68h = r2;
0x08013b70 ldrh r2, [r8] | r2 = *(r8);
0x08013b74 tst r2, 0x400 |
| if ((r2 & 0x400) != 0) {
0x08013b78 ldreq r2, [r3, 0xc] | r2 = *((r3 + 0xc));
| }
| if ((r2 & 0x400) == 0) {
0x08013b7c ldrne r2, [r8, 8] | r2 = *((r8 + 8));
| }
| if ((r2 & 0x400) != 0) {
0x08013b80 ldreq r2, [r2, 0x340] | r2 = *((r2 + 0x340));
| }
| if ((r2 & 0x400) != 0) {
0x08013b84 ldreq r2, [r2, 0x20] | r2 = *((r2 + 0x20));
| }
0x08013b88 str r2, [sp, 0x6c] | var_6ch = r2;
| label_3:
0x08013b8c ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x08013b90 add r2, sp, 0x48 | r2 += var_48h;
0x08013b94 ldr r0, [sp, 0x10] | r0 = var_10h;
0x08013b98 mov r1, r5 | r1 = r5;
0x08013b9c ldr r3, [r3, 0x244] | r3 = *((r3 + 0x244));
0x08013ba0 str r3, [sp] | *(sp) = r3;
0x08013ba4 ldr r3, [sp, 0xac] | r3 = *(arg_ach);
0x08013ba8 ldrh r3, [r3] | r3 = *(r3);
0x08013bac stmdaeq r0, {r2, r3, r4, r7, r8, sp, pc} | __asm ("stmdaeq r0, {r2, r3, r4, r7, r8, sp, pc}");
0x08013bb0 add r3, sp, 0x24 | r3 += var_24h;
0x08013bb4 str r3, [sp, 0x18] | var_18h = r3;
0x08013bb8 ldrb r3, [r5, 0x645] | r3 = *((r5 + 0x645));
0x08013bbc tst r3, 1 |
| if ((r3 & 1) == 0) {
0x08013bc0 beq 0x8013c64 | goto label_11;
| }
| }
0x08013bc4 ldr r2, [r8, 0x14] | r2 = *((r8 + 0x14));
0x08013bc8 mov r1, r6 | r1 = r6;
0x08013bcc ldr r0, [sp, 0x18] | r0 = var_18h;
0x08013bd0 ldr r3, [sp, 0x10] | r3 = var_10h;
0x08013bd4 stmdaeq r1, {r2, r3, r4, r6, sb, fp, sp, lr, pc} | __asm ("stmdaeq r1, {r2, r3, r4, r6, sb, fp, sp, lr, pc}");
0x08013bd8 mov fp, r0 |
| label_1:
0x08013bdc cmp fp, 0 |
| if (fp != 0) {
0x08013be0 bne 0x8013c30 | goto label_13;
| }
0x08013be4 ldr r3, [sp, 0x24] | r3 = var_24h;
0x08013be8 ldrh r3, [r3] | r3 = *(r3);
0x08013bec and r3, r3, 0xf000 | r3 &= 0xf000;
0x08013bf0 cmp r3, 0x4000 |
| if (r3 == 0x4000) {
0x08013bf4 beq 0x8013c2c | goto label_14;
| }
0x08013bf8 mov r0, r7 | r0 = r7;
0x08013bfc mov fp, 0 |
0x08013c00 stmdaeq sb, {r0, r3, r8, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r3, r8, sl, fp, sp, pc}");
0x08013c04 mov r0, r7 | r0 = r7;
0x08013c08 ldr r1, [sp, 0x24] | r1 = var_24h;
0x08013c0c stmdaeq sb, {r0, r2, r3, r8, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r8, sl, fp, sp, pc}");
| do {
| label_0:
0x08013c10 mov r0, r4 | r0 = r4;
0x08013c14 stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc}");
0x08013c18 mov r0, r6 | r0 = r6;
0x08013c1c stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc}");
| label_4:
0x08013c20 mov r0, fp | r0 = fp;
0x08013c24 add sp, sp, 0x7c |
0x08013c28 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_14:
0x08013c2c mvn fp, 0x14 |
| label_13:
0x08013c30 ldr r2, [sl, 0x24] | r2 = *((sl + 0x24));
0x08013c34 ldr r7, [r2, 0xe0] | r7 = *((r2 + 0xe0));
0x08013c38 cmp r7, 0 |
| if (r7 != 0) {
0x08013c3c beq 0x8013c50 |
0x08013c40 ldr r2, [sp, 0xac] | r2 = *(arg_ach);
0x08013c44 mov r1, r5 | r1 = r5;
0x08013c48 ldr r0, [sp, 0x10] | r0 = var_10h;
0x08013c4c blx r7 | uint32_t (*r7)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
| }
0x08013c50 ldr r0, [sp, 0x24] | r0 = var_24h;
0x08013c54 cmp r0, 0 |
0x08013c58 beq 0x8013c10 |
| } while (r0 == 0);
0x08013c5c stmdaeq sb, {r0, r4, r8, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r8, sl, fp, sp, pc}");
0x08013c60 b 0x8013c10 | goto label_0;
| label_11:
0x08013c64 ldr r3, [sp, 0xac] | r3 = *(arg_ach);
0x08013c68 mov r2, r4 | r2 = r4;
0x08013c6c str r3, [sp, 4] | var_4h = r3;
0x08013c70 mov r1, r6 | r1 = r6;
0x08013c74 ldr r3, [sp, 0x10] | r3 = var_10h;
0x08013c78 str r3, [sp] | *(sp) = r3;
0x08013c7c ldr r0, [sp, 0x18] | r0 = var_18h;
0x08013c80 ldr r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x08013c84 stmdaeq r1, {r4, r5, r6, r7, r8, sb, fp, sp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r6, r7, r8, sb, fp, sp, lr, pc}");
0x08013c88 mov fp, r0 |
0x08013c8c ldr r0, [sp, 0x24] | r0 = var_24h;
0x08013c90 cmp r0, 0 |
| if (r0 == 0) {
0x08013c94 beq 0x8013bdc | goto label_1;
| }
0x08013c98 ldr r2, [sl, 0x24] | r2 = *((sl + 0x24));
0x08013c9c ldr r2, [r2, 0x12c] | r2 = *((r2 + 0x12c));
0x08013ca0 cmp r2, 0 |
| if (r2 != 0) {
0x08013ca4 beq 0x8013cb0 |
0x08013ca8 ldr r1, [sp, 0xac] | r1 = *(arg_ach);
0x08013cac blx r2 | uint32_t (*r2)(uint32_t) (r1);
| }
0x08013cb0 ldr r2, [sb, 0x34] | r2 = *((sb + 0x34));
0x08013cb4 tst r2, 0x1000 |
| if ((r2 & 0x1000) == 0) {
0x08013cb8 ldrne r2, [sp, 0x24] | r2 = var_24h;
| }
| if ((r2 & 0x1000) == 0) {
0x08013cbc ldrne r3, [sp, 0x14] | r3 = var_14h;
| }
0x08013cc0 strhne r3, [r2] | __asm ("strhne r3, [r2]");
0x08013cc4 ldr r3, [sp, 0xa8] | r3 = *(arg_a8h);
0x08013cc8 ldr r2, [r3] | r2 = *(r3);
0x08013ccc tst r2, 0x20000 |
| if ((r2 & 0x20000) == 0) {
0x08013cd0 beq 0x8013bdc | goto label_1;
| }
0x08013cd4 ldr r2, [sb, 0x34] | r2 = *((sb + 0x34));
0x08013cd8 tst r2, 2 |
| if ((r2 & 2) == 0) {
0x08013cdc beq 0x8013bdc | goto label_1;
| }
0x08013ce0 mov r3, sp | r3 = sp;
0x08013ce4 ldr r1, [sp, 0x24] | r1 = var_24h;
0x08013ce8 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08013cec bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08013cf0 ldr r0, [r2, 0xc] | r0 = *((r2 + 0xc));
0x08013cf4 ldr r0, [r0, 0x340] | r0 = *((r0 + 0x340));
0x08013cf8 ldr r0, [r0, 0x1c] | r0 = *((r0 + 0x1c));
0x08013cfc str r0, [r1, 4] | *((r1 + 4)) = r0;
0x08013d00 ldrh r0, [r8] | r0 = *(r8);
0x08013d04 tst r0, 0x400 |
| if ((r0 & 0x400) != 0) {
0x08013d08 ldreq r2, [r2, 0xc] | r2 = *((r2 + 0xc));
| }
| if ((r0 & 0x400) == 0) {
0x08013d0c ldrne r2, [r8, 8] | r2 = *((r8 + 8));
| }
| if ((r0 & 0x400) != 0) {
0x08013d10 ldreq r2, [r2, 0x340] | r2 = *((r2 + 0x340));
| }
| if ((r0 & 0x400) != 0) {
0x08013d14 ldreq r2, [r2, 0x20] | r2 = *((r2 + 0x20));
| }
0x08013d18 str r2, [r1, 8] | *((r1 + 8)) = r2;
0x08013d1c b 0x8013bdc | goto label_1;
| label_6:
0x08013d20 ldr r3, [r5, 0x63c] | r3 = *((r5 + 0x63c));
0x08013d24 tst r3, 0x20 |
| if ((r3 & 0x20) == 0) {
0x08013d28 beq 0x80139dc | goto label_2;
| }
0x08013d2c ldr r3, [sp, 0x10] | r3 = var_10h;
0x08013d30 str r3, [sp, 0xc] | var_ch = r3;
0x08013d34 ldr r3, [sp, 0xac] | r3 = *(arg_ach);
0x08013d38 str r3, [sp, 8] | var_8h = r3;
0x08013d3c ldr r3, [sp, 0xa8] | r3 = *(arg_a8h);
0x08013d40 str r3, [sp, 4] | var_4h = r3;
0x08013d44 add r3, sp, 0x24 | r3 += var_24h;
0x08013d48 str r4, [sp] | *(sp) = r4;
0x08013d4c mov r1, r3 | r1 = r3;
0x08013d50 str r3, [sp, 0x18] | var_18h = r3;
0x08013d54 ldr r2, [r8, 0x14] | r2 = *((r8 + 0x14));
0x08013d58 ldr r3, [sp, 0x14] | r3 = var_14h;
0x08013d5c stmdaeq r1, {r2, r3, r7, fp, ip, lr} | __asm ("stmdaeq r1, {r2, r3, r7, fp, ip, lr}");
0x08013d60 subs fp, r0, 0 |
| if (fp > r0) {
0x08013d64 bgt 0x8013dfc | goto label_15;
| }
0x08013d68 cmn fp, 0x16 |
| if (fp >= 0x16) {
0x08013d6c blt 0x8013dec |
0x08013d70 add r2, fp, 0x16 | r2 += arg_16h;
0x08013d74 cmp r2, 0x16 |
| if (r2 > 0x16) {
| /* switch table (23 cases) at 0x8013d80 */
0x08013d78 ldrls pc, [pc, r2, lsl 2] | offset_1 = r2 << 2;
| pc = *((pc + offset_1));
| }
0x08013d7c b 0x8013dfc | goto label_15;
| label_12:
0x08013ddc mvn r2, 0 | r2 = ~0;
0x08013de0 str r2, [sp, 0x68] | var_68h = r2;
0x08013de4 str r2, [sp, 0x6c] | var_6ch = r2;
0x08013de8 b 0x8013b8c | goto label_3;
| }
0x08013dec cmn fp, 0x5f |
| if (fp == 0x5f) {
0x08013df0 beq 0x80139dc | goto label_2;
| }
0x08013df4 cmn fp, 0x42 |
| if (fp == 0x42) {
0x08013df8 beq 0x80139dc | goto label_2;
| }
| label_15:
0x08013dfc mov r4, 0 | r4 = 0;
0x08013e00 b 0x8013c10 | goto label_0;
| label_5:
0x08013e5c mvn fp, 0xb |
0x08013e60 b 0x8013c20 | goto label_4;
| label_8:
0x08013e8c mvn fp, 0xb |
0x08013e90 b 0x8013c10 | 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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x802abd8 */
| #include <stdint.h>
|
; (fcn) sym.cifs_fill_common_info () | void cifs_fill_common_info (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0802abd8 ldr r3, [r1, 0x20] | r3 = *((r1 + 0x20));
0x0802abdc str r3, [r0, 0x28] | *((r0 + 0x28)) = r3;
0x0802abe0 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x0802abe4 ldr r3, [r1, 0x24] | r3 = *((r1 + 0x24));
0x0802abe8 tst r2, 0x10 |
0x0802abec str lr, [sp, -4]! |
0x0802abf0 str r3, [r0, 0x2c] | *((r0 + 0x2c)) = r3;
| if ((r2 & 0x10) == 0) {
0x0802abf4 beq 0x802acc8 | goto label_2;
| }
0x0802abf8 ldrh r3, [r1, 0x32] | r3 = *((r1 + 0x32));
0x0802abfc mov ip, 4 |
0x0802ac00 orr r3, r3, 0x4000 | r3 |= 0x4000;
| label_1:
0x0802ac04 strh r3, [r0, 0x30] | *((r0 + 0x30)) = r3;
0x0802ac08 tst r2, 0x400 |
0x0802ac0c ldr r3, [r0] | r3 = *(r0);
0x0802ac10 str ip, [r0, 0x3c] | *((r0 + 0x3c)) = ip;
| if ((r2 & 0x400) == 0) {
0x0802ac14 beq 0x802ac40 | goto label_0;
| }
0x0802ac18 ldr ip, [r0, 0x70] | ip = *((r0 + 0x70));
0x0802ac1c cmp ip, 0x80000014 |
| if (ip > 0x80000014) {
0x0802ac20 bhi 0x802acb8 | goto label_3;
| }
0x0802ac24 cmp ip, 0x80000009 |
| if (ip < 0x80000009) {
0x0802ac28 bls 0x802ad00 | goto label_4;
| }
0x0802ac2c sub ip, ip, 0x8000000a |
0x0802ac30 movw lr, 0x501 | lr = 0x501;
0x0802ac34 lsr ip, lr, ip |
0x0802ac38 tst ip, 1 |
| if ((ip & 1) != 0) {
0x0802ac3c bne 0x802acc0 | goto label_5;
| }
| do {
| label_0:
0x0802ac40 tst r2, 1 |
0x0802ac44 orr ip, r3, 0x10 |
0x0802ac48 str ip, [r0] | *(r0) = ip;
0x0802ac4c mov lr, 0x200 |
0x0802ac50 movt lr, 0x1000 | lr = 0x10000200;
0x0802ac54 ldrhne ip, [r0, 0x30] | __asm ("ldrhne ip, [r0, 0x30]");
0x0802ac58 bicne ip, ip, 0x92 | __asm ("bicne ip, ip, 0x92");
0x0802ac5c strhne ip, [r0, 0x30] | __asm ("strhne ip, [r0, 0x30]");
0x0802ac60 ldr ip, [r1, 0x34] | ip = *((r1 + 0x34));
0x0802ac64 tst ip, lr |
| if ((ip & lr) == 0) {
0x0802ac68 orrne r3, r3, 0x14 | r3 |= 0x14;
| }
| if ((ip & lr) == 0) {
0x0802ac6c strne r3, [r0] | *(r0) = r3;
| }
| if ((ip & lr) == 0) {
0x0802ac70 ldrne ip, [r1, 0x34] | ip = *((r1 + 0x34));
| }
0x0802ac74 tst ip, 0x80 |
0x0802ac78 popeq {pc} |
0x0802ac7c tst r2, 4 |
0x0802ac80 popeq {pc} |
0x0802ac84 ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x0802ac88 ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x0802ac8c orrs r3, r3, r2 | r3 |= r2;
| if (r3 != r3) {
0x0802ac90 moveq r2, 1 | r2 = 1;
| }
| if (r3 != r3) {
0x0802ac94 streq r2, [r0, 0x3c] | *((r0 + 0x3c)) = r2;
| }
0x0802ac98 ldrheq r3, [r0, 0x30] | __asm ("ldrheq r3, [r0, 0x30]");
| if (r3 == r3) {
0x0802ac9c ldrne r3, [r0] | r3 = *(r0);
| }
0x0802aca0 ubfxeq r3, r3, 0, 0xc | __asm ("ubfxeq r3, r3, 0, 0xc");
| if (r3 == r3) {
0x0802aca4 orrne r3, r3, 4 | r3 |= 4;
| }
| if (r3 != r3) {
0x0802aca8 orreq r3, r3, 0x1000 | r3 |= 0x1000;
| }
| if (r3 == r3) {
0x0802acac strne r3, [r0] | *(r0) = r3;
| }
0x0802acb0 strheq r3, [r0, 0x30] | __asm ("strheq r3, [r0, 0x30]");
0x0802acb4 pop {pc} |
| label_3:
0x0802acb8 cmp ip, 0xa000000c |
0x0802acbc bne 0x802ac40 |
| } while (ip != 0xa000000c);
| label_5:
0x0802acc0 orr r3, r3, 4 | r3 |= 4;
0x0802acc4 b 0x802ac40 | goto label_0;
| label_2:
0x0802acc8 ldr ip, [r0, 0x70] | ip = *((r0 + 0x70));
0x0802accc mov lr, 0x1d |
0x0802acd0 movt lr, 0xa000 | lr = 0x-5fffffe3;
0x0802acd4 ldrh r3, [r1, 0x30] | r3 = *((r1 + 0x30));
0x0802acd8 cmp ip, lr |
| if (ip == lr) {
0x0802acdc beq 0x802ad68 | goto label_6;
| }
0x0802ace0 sub ip, ip, 0x80000023 |
0x0802ace4 cmp ip, 3 |
| if (ip > 3) {
| /* switch table (4 cases) at 0x802acf0 */
0x0802ace8 ldrls pc, [pc, ip, lsl 2] | offset_0 = ip << 2;
| pc = *((pc + offset_0));
| }
0x0802acec b 0x802ad7c | goto label_7;
| label_4:
0x0802ad00 cmp ip, 0 |
| if (ip != 0) {
0x0802ad04 orreq r3, r3, 4 | r3 |= 4;
| }
0x0802ad08 b 0x802ac40 | goto label_0;
| do {
0x0802ad1c strh r3, [r0, 0x30] | *((r0 + 0x30)) = r3;
0x0802ad20 str ip, [r0, 0x3c] | *((r0 + 0x3c)) = ip;
0x0802ad24 ldr r3, [r0] | r3 = *(r0);
0x0802ad28 b 0x802ac40 | goto label_0;
| label_6:
0x0802ad68 ldrh ip, [r0, 0x30] | ip = *((r0 + 0x30));
0x0802ad6c orr r3, r3, ip | r3 |= ip;
0x0802ad70 mov ip, 0xa |
0x0802ad74 orr r3, r3, 0xa000 | r3 |= 0xa000;
0x0802ad78 b 0x802ad1c |
| } while (1);
| label_7:
0x0802ad7c orr r3, r3, 0x8000 | r3 |= 0x8000;
0x0802ad80 mov ip, 8 |
0x0802ad84 b 0x802ac04 | 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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x802a9d0 */
| #include <stdint.h>
|
; (fcn) sym.cifs_fill_dirent_posix () | void cifs_fill_dirent_posix (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_90h;
| int32_t var_94h;
| int32_t var_9ch;
| r0 = arg1;
| r1 = arg2;
0x0802a9d0 push {r4, r5, lr} |
0x0802a9d4 mov r4, r0 | r4 = r0;
0x0802a9d8 mov r5, r1 | r5 = r1;
0x0802a9dc sub sp, sp, 0x9c |
0x0802a9e0 mov r0, r1 | r0 = r1;
0x0802a9e4 mov r2, sp | r2 = sp;
0x0802a9e8 mov r1, 0 | r1 = 0;
0x0802a9ec stmdaeq r4, {r2, r3, r6, r8, ip} | __asm ("stmdaeq r4, {r2, r3, r6, r8, ip}");
0x0802a9f0 cmp r0, 0 |
| if (r0 < 0) {
0x0802a9f4 blt 0x802aa24 | goto label_1;
| }
0x0802a9f8 ldr r2, [sp, 0x94] | r2 = var_94h;
0x0802a9fc ldr r3, [sp, 0x90] | r3 = var_90h;
0x0802aa00 strd r2, r3, [r4] | __asm ("strd r2, r3, [r4]");
0x0802aa04 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0802aa08 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x0802aa0c ldr r3, [r5, 0x3c] | r3 = *((r5 + 0x3c));
0x0802aa10 ldr r2, [r5, 0x40] | r2 = *((r5 + 0x40));
0x0802aa14 str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x0802aa18 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
| do {
| label_0:
0x0802aa1c add sp, sp, 0x9c |
0x0802aa20 pop {r4, r5, pc} |
| label_1:
0x0802aa24 ldr r1, [pc, 0x1c] | r1 = *(0x802aa44);
0x0802aa28 ldr r0, [pc, 0x1c] | r0 = "cifs_remap_file_range";
0x0802aa2c stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x0802aa30 cmp r0, 0 |
0x0802aa34 beq 0x802aa1c |
| } while (r0 == 0);
0x0802aa38 stmdaeq r5, {r3, r5, r8, sb, fp, ip, pc} | __asm ("stmdaeq r5, {r3, r5, r8, sb, fp, ip, pc}");
0x0802aa3c stmdaeq r5, {r3, r5, r8, sb, fp, ip, pc} | __asm ("stmdaeq r5, {r3, r5, r8, sb, fp, ip, pc}");
0x0802aa40 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x0802aa44 b 0x802aa1c | 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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x802aa50 */
| #include <stdint.h>
|
; (fcn) sym.cifs_fill_dirent () | void cifs_fill_dirent (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0802aa50 push {r4, r5, r6, lr} |
0x0802aa54 movw ip, 0x105 | ip = 0x105;
0x0802aa58 mov r4, 0 | r4 = 0;
0x0802aa5c mov r5, r0 | r5 = r0;
0x0802aa60 mov r6, r1 | r6 = r1;
0x0802aa64 cmp r2, ip |
0x0802aa68 str r4, [r0] | *(r0) = r4;
0x0802aa6c str r4, [r0, 4] | *((r0 + 4)) = r4;
0x0802aa70 str r4, [r0, 8] | *((r0 + 8)) = r4;
0x0802aa74 str r4, [r0, 0xc] | *((r0 + 0xc)) = r4;
0x0802aa78 str r4, [r0, 0x10] | *((r0 + 0x10)) = r4;
0x0802aa7c str r4, [r0, 0x14] | *((r0 + 0x14)) = r4;
| if (r2 <= ip) {
0x0802aa80 bhi 0x802aab4 |
0x0802aa84 cmp r2, 0x100 |
| if (r2 < 0x100) {
0x0802aa88 bls 0x802aafc | goto label_0;
| }
0x0802aa8c sub r2, r2, 0x100 | r2 -= 0x100;
0x0802aa90 sub r2, r2, 1 | r2--;
0x0802aa94 cmp r2, 4 |
| if (r2 > 4) {
| /* switch table (5 cases) at 0x802aaa0 */
0x0802aa98 ldrls pc, [pc, r2, lsl 2] | offset_0 = r2 << 2;
| pc = *((pc + offset_0));
| }
0x0802aa9c b 0x802ab18 | goto label_1;
| }
0x0802aab4 movw r1, 0x202 | r1 = 0x202;
0x0802aab8 cmp r2, r1 |
| if (r2 != r1) {
0x0802aabc bne 0x802ab18 | goto label_1;
| }
0x0802aac0 add r0, r6, 0x6c | r0 = r6 + 0x6c;
0x0802aac4 cmp r3, 0 |
0x0802aac8 str r0, [r5] | *(r5) = r0;
| if (r3 == 0) {
0x0802aacc beq 0x802ab80 | goto label_2;
| }
0x0802aad0 add r3, r6, 0x6a | r3 = r6 + 0x6a;
0x0802aad4 movw r1, 0x1001 | r1 = 0x1001;
0x0802aad8 b 0x802aae8 |
| while (r2 != 0) {
0x0802aadc add r4, r4, 1 | r4++;
0x0802aae0 cmp r4, r1 |
| if (r4 == r1) {
0x0802aae4 beq 0x802abd0 | goto label_3;
| }
0x0802aae8 ldrh r2, [r3, 2]! | r2 = *((r3 += 2));
0x0802aaec cmp r2, 0 |
0x0802aaf0 bne 0x802aadc |
| }
0x0802aaf4 lsl r4, r4, 1 | r4 <<= 1;
0x0802aaf8 b 0x802ab8c | goto label_4;
| label_0:
0x0802aafc cmp r2, 1 |
| if (r2 == 1) {
0x0802ab00 beq 0x802abb0 | goto label_5;
| }
0x0802ab04 cmp r2, 0x64 |
| if (r2 == 0x64) {
0x0802ab08 bne 0x802ab18 |
0x0802ab0c bl 0x802a9d0 | cifs_fill_dirent_posix ();
0x0802ab10 mov r0, r4 | r0 = r4;
0x0802ab14 pop {r4, r5, r6, pc} |
| }
| label_1:
0x0802ab18 mvn r0, 0x15 | r0 = ~0x15;
0x0802ab1c pop {r4, r5, r6, pc} |
| label_2:
0x0802ab80 mov r1, 0x1000 | r1 = 0x1000;
0x0802ab84 stmdaeq sb, {r0, r5, r7, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r5, r7, sl, fp, sp, pc}");
0x0802ab88 mov r4, r0 | r4 = r0;
| do {
| label_4:
0x0802ab8c str r4, [r5, 4] | *((r5 + 4)) = r4;
0x0802ab90 mov r0, 0 | r0 = 0;
0x0802ab94 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0802ab98 str r3, [r5, 8] | *((r5 + 8)) = r3;
0x0802ab9c ldr r3, [r6, 0x54] | r3 = *((r6 + 0x54));
0x0802aba0 ldr r2, [r6, 0x58] | r2 = *((r6 + 0x58));
0x0802aba4 str r2, [r5, 0x14] | *((r5 + 0x14)) = r2;
0x0802aba8 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x0802abac pop {r4, r5, r6, pc} |
| label_5:
0x0802abb0 add r3, r1, 0x1b | r3 = r1 + 0x1b;
0x0802abb4 str r3, [r0] | *(r0) = r3;
0x0802abb8 mov r0, r4 | r0 = r4;
0x0802abbc ldrb r3, [r1, 0x1a] | r3 = *((r1 + 0x1a));
0x0802abc0 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x0802abc4 ldr r3, [r1] | r3 = *(r1);
0x0802abc8 str r3, [r5, 8] | *((r5 + 8)) = r3;
0x0802abcc pop {r4, r5, r6, pc} |
| label_3:
0x0802abd0 movw r4, 0x2002 | r4 = 0x2002;
0x0802abd4 b 0x802ab8c |
| } while (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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x8028980 */
| #include <stdint.h>
|
; (fcn) sym.cifs_mapchar () | void cifs_mapchar (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
0x08028980 push {r4, r5, r6, lr} |
0x08028984 cmp r3, 1 |
0x08028988 mov r6, r2 | r6 = r2;
0x0802898c sub sp, sp, 8 |
0x08028990 ldrh r2, [r1] | r2 = *(r1);
0x08028994 mov r5, r1 | r5 = r1;
0x08028998 mov r4, r0 | r4 = r0;
| if (r3 == 1) {
0x0802899c beq 0x80289f8 | goto label_3;
| }
0x080289a0 cmp r3, 2 |
| if (r3 == 2) {
0x080289a4 beq 0x8028a78 | goto label_4;
| }
| label_0:
0x080289a8 mov r0, r2 | r0 = r2;
0x080289ac ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x080289b0 mov r1, r4 | r1 = r4;
0x080289b4 mov r2, 6 | r2 = 6;
0x080289b8 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x080289bc cmp r0, 0 |
0x080289c0 ble 0x80289cc |
| while (r1 < 0x1e) {
| label_1:
0x080289c4 add sp, sp, 8 |
0x080289c8 pop {r4, r5, r6, pc} |
0x080289cc ldr r0, [r6] | r0 = *(r6);
0x080289d0 stmdaeq r5, {r3, r5, r6, sb, fp, ip, lr} | __asm ("stmdaeq r5, {r3, r5, r6, sb, fp, ip, lr}");
0x080289d4 stmdaeq r5, {r3, r5, r6, sb, fp, ip, lr} | __asm ("stmdaeq r5, {r3, r5, r6, sb, fp, ip, lr}");
0x080289d8 stmdaeq sb, {r0, r2, r3, r4, r5, r6, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r4, r5, r6, sl, fp, sp, pc}");
0x080289dc cmp r0, 0 |
| if (r0 == 0) {
0x080289e0 beq 0x8028a50 | goto label_5;
| }
| label_2:
0x080289e4 mov r3, 0x3f | r3 = 0x3f;
0x080289e8 mov r0, 1 | r0 = 1;
0x080289ec strb r3, [r4] | *(r4) = r3;
0x080289f0 add sp, sp, 8 |
0x080289f4 pop {r4, r5, r6, pc} |
| label_3:
0x080289f8 sub r1, r2, 0xf000 | r1 = r2 - 0xf000;
0x080289fc sub r1, r1, 1 | r1--;
0x08028a00 uxth r1, r1 | r1 = (int16_t) r1;
0x08028a04 cmp r1, 0x1e |
| if (r1 > 0x1e) {
0x08028a08 strbls r2, [r4] | *(r4) = r2;
| }
| if (r1 > 0x1e) {
0x08028a0c movls r0, r3 | r0 = r3;
| }
0x08028a10 bls 0x80289c4 |
| }
0x08028a14 sub r3, r2, 0xf000 | r3 = r2 - 0xf000;
0x08028a18 sub r3, r3, 0x20 | r3 -= 0x20;
0x08028a1c cmp r3, 9 |
| if (r3 > 9) {
| /* switch table (10 cases) at 0x8028a28 */
0x08028a20 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x08028a24 b 0x80289a8 | goto label_0;
| label_5:
0x08028a50 mov r1, 6 | r1 = 6;
0x08028a54 mov r3, r4 | r3 = r4;
0x08028a58 str r1, [sp] | *(sp) = r1;
0x08028a5c mov r0, r5 | r0 = r5;
0x08028a60 mov r2, 1 | r2 = 1;
0x08028a64 mov r1, 3 | r1 = 3;
0x08028a68 stmdaeq sb, {r0, r2, r7, sb, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r7, sb, sl, fp, sp, pc}");
0x08028a6c cmp r0, 0 |
| if (r0 > 0) {
0x08028a70 bgt 0x80289c4 | goto label_1;
| }
0x08028a74 b 0x80289e4 | goto label_2;
| label_4:
0x08028a78 movw r3, 0xf03f | r3 = 0xf03f;
0x08028a7c cmp r2, r3 |
| if (r2 > r3) {
0x08028a80 bhi 0x8028afc | goto label_6;
| }
0x08028a84 movw r3, 0xf029 | r3 = 0xf029;
0x08028a88 cmp r2, r3 |
| if (r2 < r3) {
0x08028a8c bls 0x80289a8 | goto label_0;
| }
0x08028a90 sub r3, r2, 0xf000 | r3 = r2 - 0xf000;
0x08028a94 sub r3, r3, 0x2a | r3 -= 0x2a;
0x08028a98 cmp r3, 0x15 |
| if (r3 > 0x15) {
| /* switch table (22 cases) at 0x8028aa4 */
0x08028a9c ldrls pc, [pc, r3, lsl 2] | offset_1 = r3 << 2;
| pc = *((pc + offset_1));
| }
0x08028aa0 b 0x80289a8 | goto label_0;
| label_6:
0x08028afc movw r3, 0xf07c | r3 = 0xf07c;
0x08028b00 cmp r2, r3 |
| if (r2 != r3) {
0x08028b04 bne 0x80289a8 | goto label_0;
| }
0x08028b08 mov r3, 0x7c | r3 = 0x7c;
0x08028b0c mov r0, 1 | r0 = 1;
0x08028b10 strb r3, [r4] | *(r4) = r3;
0x08028b14 b 0x80289c4 | 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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x8046070 */
| #include <stdint.h>
|
; (fcn) sym.cifs_parse_cache_flavor () | void cifs_parse_cache_flavor (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_1ch;
| r0 = arg1;
| r1 = arg2;
0x08046070 push {r4, r5, lr} |
0x08046074 mov r5, r1 | r5 = r1;
0x08046078 ldr r1, [pc, 0xe0] | r1 = *(0x804615c);
0x0804607c sub sp, sp, 0x1c |
0x08046080 mov r4, r0 | r4 = r0;
0x08046084 mov r2, sp | r2 = sp;
0x08046088 stmdaeq sb, {r0, r2, r4, r5, r7, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r4, r5, r7, sl, fp, sp, pc}");
0x0804608c cmp r0, 4 |
| if (r0 > 4) {
| /* switch table (5 cases) at 0x8046098 */
0x08046090 ldrls pc, [pc, r0, lsl 2] | offset_0 = r0 << 2;
| pc = *((pc + offset_0));
| }
0x08046094 b 0x8046130 |
| while (r0 == 0) {
| label_0:
0x080460c0 add sp, sp, 0x1c |
0x080460c4 pop {r4, r5, pc} |
0x08046130 ldr r1, [pc, 0x2c] | r1 = "cifs_remap_file_range";
0x08046134 ldr r0, [pc, 0x2c] | r0 = "cifs_remap_file_range";
0x08046138 stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x0804613c cmp r0, 0 |
| if (r0 != 0) {
0x08046140 moveq r0, 1 | r0 = 1;
| }
0x08046144 beq 0x80460c0 |
| }
0x08046148 mov r1, r4 | r1 = r4;
0x0804614c stmdaeq r6, {r3, r7, r8, sl, fp, ip, pc} | __asm ("stmdaeq r6, {r3, r7, r8, sl, fp, ip, pc}");
0x08046150 stmdaeq r6, {r3, r7, r8, sl, fp, ip, pc} | __asm ("stmdaeq r6, {r3, r7, r8, sl, fp, ip, pc}");
0x08046154 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x08046158 mov r0, 1 | r0 = 1;
0x0804615c b 0x80460c0 | 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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x8045f20 */
| #include <stdint.h>
|
; (fcn) sym.cifs_parse_security_flavors () | void cifs_parse_security_flavors (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_1ch;
| r0 = arg1;
| r1 = arg2;
0x08045f20 push {r4, r5, lr} |
0x08045f24 mov r3, 0 | r3 = 0;
0x08045f28 mov r4, r1 | r4 = r1;
0x08045f2c sub sp, sp, 0x1c |
0x08045f30 str r3, [r1, 0x4c] | *((r1 + 0x4c)) = r3;
0x08045f34 strb r3, [r1, 0x50] | *((r1 + 0x50)) = r3;
0x08045f38 mov r2, sp | r2 = sp;
0x08045f3c ldr r1, [pc, 0x11c] | r1 = *(0x804605c);
0x08045f40 mov r5, r0 | r5 = r0;
0x08045f44 stmdaeq sb, {r0, r2, r4, r5, r7, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r4, r5, r7, sl, fp, sp, pc}");
0x08045f48 cmp r0, 0xa |
| if (r0 > 0xa) {
| /* switch table (11 cases) at 0x8045f54 */
0x08045f4c ldrls pc, [pc, r0, lsl 2] | offset_0 = r0 << 2;
| pc = *((pc + offset_0));
| }
0x08045f50 b 0x8046024 |
| while (r0 == 0) {
| label_0:
0x08046018 mov r0, 1 | r0 = 1;
0x0804601c add sp, sp, 0x1c |
0x08046020 pop {r4, r5, pc} |
0x08046024 ldr r1, [pc, 0x38] | r1 = "cifs_remap_file_range";
0x08046028 ldr r0, [pc, 0x3c] | r0 = .data;
0x0804602c stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x08046030 cmp r0, 0 |
0x08046034 beq 0x8046018 |
| }
0x08046038 mov r1, r5 | r1 = r5;
0x0804603c stmdaeq r6, {r5, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r6, {r5, r6, r8, sl, fp, ip, pc}");
0x08046040 stmdaeq r6, {r5, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r6, {r5, r6, r8, sl, fp, ip, pc}");
0x08046044 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x08046048 b 0x8046018 | 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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x8045c78 */
| #include <stdint.h>
|
; (fcn) sym.cifs_parse_smb_version () | void cifs_parse_smb_version (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_1ch;
| r0 = arg1;
| r1 = arg2;
0x08045c78 push {r4, r5, r6, r7, lr} |
0x08045c7c mov r6, r2 | r6 = r2;
0x08045c80 mov r5, r1 | r5 = r1;
0x08045c84 sub sp, sp, 0x1c |
0x08045c88 stmdaeq r5, {r2, r7, sl, fp, ip} | __asm ("stmdaeq r5, {r2, r7, sl, fp, ip}");
0x08045c8c stmdaeq r5, {r2, r7, sl, fp, ip} | __asm ("stmdaeq r5, {r2, r7, sl, fp, ip}");
0x08045c90 mov r2, sp | r2 = sp;
0x08045c94 mov r7, r0 | r7 = r0;
0x08045c98 stmdaeq sb, {r0, r2, r4, r5, r7, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r4, r5, r7, sl, fp, sp, pc}");
0x08045c9c sub r3, r0, 1 | r3 = r0 - 1;
0x08045ca0 cmp r3, 7 |
| if (r3 > 7) {
| /* switch table (8 cases) at 0x8045cac */
0x08045ca4 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x08045ca8 b 0x8045edc | goto label_1;
| label_0:
0x08045ce4 mov r0, r4 | r0 = r4;
0x08045ce8 add sp, sp, 0x1c |
0x08045cec pop {r4, r5, r6, r7, pc} |
| do {
0x08045e40 mov r4, 1 | r4 = 1;
0x08045e44 mov r0, r4 | r0 = r4;
0x08045e48 add sp, sp, 0x1c |
0x08045e4c pop {r4, r5, r6, r7, pc} |
| label_1:
0x08045edc ldr r1, [pc, 0x24] | r1 = *(0x8045f04);
0x08045ee0 ldr r0, [pc, 0x34] | r0 = .data;
0x08045ee4 stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x08045ee8 cmp r0, 0 |
0x08045eec beq 0x8045e40 |
| } while (r0 == 0);
0x08045ef0 mov r1, r7 | r1 = r7;
0x08045ef4 stmdaeq r6, {r8, sl, fp, ip, pc} | __asm ("stmdaeq r6, {r8, sl, fp, ip, pc}");
0x08045ef8 stmdaeq r6, {r8, sl, fp, ip, pc} | __asm ("stmdaeq r6, {r8, sl, fp, ip, pc}");
0x08045efc mov r4, 1 | r4 = 1;
0x08045f00 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x08045f04 b 0x8045ce4 | 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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x8014b4c */
| #include <stdint.h>
|
; (fcn) sym.cifs_read_flock.constprop.0 () | void cifs_read_flock_constprop_0 (int32_t arg_8h, int32_t arg_ch, int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x08014b4c push {r4, lr} |
0x08014b50 ldr lr, [sp, 0xc] |
0x08014b54 ldr ip, [r0, 0x28] | ip = *(arg_8hx28);
0x08014b58 tst ip, 0x80 |
| if ((ip & 0x80) == 0) {
0x08014b5c movne ip, 1 |
| }
| if ((ip & 0x80) == 0) {
0x08014b60 ldrne r4, [sp, 8] | r4 = *(arg_8h);
| }
| if ((ip & 0x80) == 0) {
0x08014b64 strbne ip, [r4] | *(r4) = ip;
| }
0x08014b68 ldr ip, [lr, 0x28] | ip = *((lr + 0x28));
0x08014b6c ldr ip, [ip, 0xc] | ip = *((ip + 0xc));
0x08014b70 str ip, [r1] | *(r1) = ip;
0x08014b74 ldrb r0, [r0, 0x2c] | r0 = *((r0 + 0x2c));
0x08014b78 cmp r0, 1 |
| if (r0 != 1) {
0x08014b7c beq 0x8014bcc |
0x08014b80 cmp r0, 8 |
| if (r0 > 8) {
| /* switch table (9 cases) at 0x8014b8c */
0x08014b84 ldrls pc, [pc, r0, lsl 2] | offset_0 = r0 << 2;
| pc = *((pc + offset_0));
| }
0x08014b88 b 0x8014bc8 |
0x08014bc8 pop {r4, pc} |
| }
0x08014bcc ldr r3, [lr, 0x28] | r3 = *((lr + 0x28));
0x08014bd0 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x08014bd4 orr r3, r3, ip | r3 |= ip;
0x08014bd8 str r3, [r1] | *(r1) = r3;
0x08014bdc str r0, [r2] | *(r2) = r0;
0x08014be0 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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x800fb2c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.cifs_setup_volume_info () | void cifs_setup_volume_info (int32_t arg_1h, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_3eh;
| int32_t var_3fh;
| int32_t var_40h;
| int32_t var_48h;
| int32_t var_64h;
| r0 = arg1;
| r1 = arg2;
0x0800fb2c push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0800fb30 mov r4, r0 | r4 = r0;
0x0800fb34 mov fp, r1 |
0x0800fb38 sub sp, sp, 0x64 |
0x0800fb3c mov r1, 0 | r1 = 0;
0x0800fb40 mov sb, r2 | sb = r2;
0x0800fb44 movw r6, 0xffed |
0x0800fb48 movt r6, 0xffff | r6 = 0xffffffed;
0x0800fb4c mov r2, 0x1b0 | r2 = 0x1b0;
0x0800fb50 str r3, [sp, 8] | var_8h = r3;
0x0800fb54 mov r3, sp | r3 = sp;
0x0800fb58 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x0800fb5c add sl, r0, 0x13 | sl = r0 + 0x13;
0x0800fb60 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x0800fb64 sub r6, r6, r0 | r6 -= r0;
0x0800fb68 strb r1, [sp, 0x3f] | var_3fh = r1;
0x0800fb6c stmdaeq sb, {r0, r2, r3, r4, r7, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r4, r7, sl, fp, sp, pc}");
0x0800fb70 stmdaeq sb, {r0, r2, r3, r4, r7, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r4, r7, sl, fp, sp, pc}");
0x0800fb74 str sl, [sp, 4] | var_4h = sl;
0x0800fb78 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0800fb7c ldr r3, [r3, 0x37c] | r3 = *((r3 + 0x37c));
0x0800fb80 ldr r5, [r3, 4] | r5 = *((r3 + 4));
0x0800fb84 mov r3, 0x2c | r3 = 0x2c;
0x0800fb88 strb r3, [sp, 0x3e] | var_3eh = r3;
0x0800fb8c stmdaeq sb, {r0, r2, r4, r5, r6, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r4, r5, r6, r8, sb, fp, sp, pc}");
0x0800fb90 add r8, r5, 0x45 | r8 = r5 + 0x45;
0x0800fb94 movw r3, 0x2020 |
0x0800fb98 movt r3, 0x2020 | r3 = 0x20202020;
0x0800fb9c add r5, r5, 0x44 | r5 += 0x44;
0x0800fba0 str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x0800fba4 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x0800fba8 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x0800fbac str r3, [r4, 0x1f] | *((r4 + 0x1f)) = r3;
0x0800fbb0 add r3, r4, 0x14 | r3 = r4 + 0x14;
0x0800fbb4 str r3, [sp] | *(sp) = r3;
0x0800fbb8 b 0x800fbd4 |
| while (r0 > r3) {
0x0800fbbc ldrb r3, [r5, 1]! | r3 = *((r5 += 1));
0x0800fbc0 sub r1, r3, 0x20 | r1 = r3 - 0x20;
0x0800fbc4 ldrb r2, [r7, r3] | r2 = *((r7 + r3));
0x0800fbc8 tst r2, 2 |
0x0800fbcc uxtbne r3, r1 | __asm ("uxtbne r3, r1");
0x0800fbd0 strb r3, [sl, 1]! | *((sl += 1)) = r3;
0x0800fbd4 mov r0, r8 | r0 = r8;
0x0800fbd8 mov r1, 0xf | r1 = 0xf;
0x0800fbdc stmdaeq sb, {r0, r5, r7, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r5, r7, sl, fp, sp, pc}");
0x0800fbe0 add r3, r6, sl | r3 = r6 + sl;
0x0800fbe4 cmp r0, r3 |
0x0800fbe8 bhi 0x800fbbc |
| }
0x0800fbec mov r3, sp | r3 = sp;
0x0800fbf0 cmp fp, 0 |
0x0800fbf4 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x0800fbf8 mov r3, 0 | r3 = 0;
0x0800fbfc bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x0800fc00 strb r3, [r4, 0x23] | *((r4 + 0x23)) = r3;
0x0800fc04 ldrb r3, [r4, 0x55] | r3 = *((r4 + 0x55));
0x0800fc08 ldr r1, [r2, 0xc] | r1 = *((r2 + 0xc));
0x0800fc0c bic r3, r3, 0x4a | r3 = BIT_MASK (r3, 0x4a);
0x0800fc10 orr r3, r3, 0x4a | r3 |= 0x4a;
0x0800fc14 ldr r1, [r1, 0x340] | r1 = *((r1 + 0x340));
0x0800fc18 ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x0800fc1c str r1, [r4, 0x34] | *((r4 + 0x34)) = r1;
0x0800fc20 ldrb r1, [r4, 0x56] | r1 = *((r4 + 0x56));
0x0800fc24 ldr r0, [r2, 0xc] | r0 = *((r2 + 0xc));
0x0800fc28 orr r1, r1, 1 | r1 |= 1;
0x0800fc2c ldr r0, [r0, 0x340] | r0 = *((r0 + 0x340));
0x0800fc30 ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x0800fc34 str r0, [r4, 0x38] | *((r4 + 0x38)) = r0;
0x0800fc38 ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x0800fc3c ldr r2, [r2, 0x340] | r2 = *((r2 + 0x340));
0x0800fc40 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x0800fc44 str r2, [r4, 0x3c] | *((r4 + 0x3c)) = r2;
0x0800fc48 strb r3, [r4, 0x55] | *((r4 + 0x55)) = r3;
0x0800fc4c mov r3, 0x100000 | r3 = 0x100000;
0x0800fc50 strb r1, [r4, 0x56] | *((r4 + 0x56)) = r1;
0x0800fc54 str r3, [r4, 0x6c] | *((r4 + 0x6c)) = r3;
0x0800fc58 movw r3, 0x1ed |
0x0800fc5c movt r3, 0x1ed | r3 = 0x1ed01ed;
0x0800fc60 str r3, [r4, 0x48] | *((r4 + 0x48)) = r3;
0x0800fc64 mov r3, 0x64 | r3 = 0x64;
0x0800fc68 str r3, [r4, 0x80] | *((r4 + 0x80)) = r3;
0x0800fc6c stmdaeq r6, {r2, r3, r5, sb, fp, lr, pc} | __asm ("stmdaeq r6, {r2, r3, r5, sb, fp, lr, pc}");
0x0800fc70 stmdaeq r6, {r2, r3, r5, sb, fp, lr, pc} | __asm ("stmdaeq r6, {r2, r3, r5, sb, fp, lr, pc}");
0x0800fc74 str r3, [r4, 0x84] | *((r4 + 0x84)) = r3;
0x0800fc78 stmdaeq r6, {r5, r6, r8, sb, sl, lr, pc} | __asm ("stmdaeq r6, {r5, r6, r8, sb, sl, lr, pc}");
0x0800fc7c stmdaeq r6, {r5, r6, r8, sb, sl, lr, pc} | __asm ("stmdaeq r6, {r5, r6, r8, sb, sl, lr, pc}");
0x0800fc80 str r3, [r4, 0x88] | *((r4 + 0x88)) = r3;
0x0800fc84 mov r3, 0x3c | r3 = 0x3c;
0x0800fc88 str r3, [r4, 0x194] | *((r4 + 0x194)) = r3;
0x0800fc8c mov r3, 1 | r3 = 1;
0x0800fc90 str r3, [r4, 0x1a8] | *((r4 + 0x1a8)) = r3;
| if (fp == 0) {
0x0800fc94 beq 0x800fff0 | goto label_10;
| }
0x0800fc98 mov r0, fp | r0 = fp;
0x0800fc9c mov r2, 0xcc0 | r2 = 0xcc0;
0x0800fca0 mov r1, 0x1000 | r1 = 0x1000;
0x0800fca4 stmdaeq sb, {r0, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r8, sb, fp, sp, pc}");
0x0800fca8 subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 == r0) {
0x0800fcac beq 0x800fff0 | goto label_10;
| }
0x0800fcb0 str r7, [sp, 0x40] | var_40h = r7;
0x0800fcb4 stmdaeq sb, {r0, r3, r4, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r3, r4, sl, fp, sp, pc}");
0x0800fcb8 mov r2, 4 | r2 = 4;
0x0800fcbc add r3, r7, r0 | r3 = r7 + r0;
0x0800fcc0 stmdaeq r5, {r5, r6, r7, r8, fp, ip, sp} | __asm ("stmdaeq r5, {r5, r6, r7, r8, fp, ip, sp}");
0x0800fcc4 stmdaeq r5, {r5, r6, r7, r8, fp, ip, sp} | __asm ("stmdaeq r5, {r5, r6, r7, r8, fp, ip, sp}");
0x0800fcc8 mov r0, r7 | r0 = r7;
0x0800fccc str r3, [sp, 0xc] | var_ch = r3;
0x0800fcd0 stmdaeq sb, {r0, r2, r4, r5, r6, r7, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r4, r5, r6, r7, r8, sb, fp, sp, pc}");
0x0800fcd4 cmp r0, 0 |
| if (r0 == 0) {
0x0800fcd8 beq 0x800ffd8 | goto label_11;
| }
| label_0:
0x0800fcdc mov r3, 0 | r3 = 0;
0x0800fce0 cmp sb, 0 |
0x0800fce4 strb r3, [r4, 0x53] | *((r4 + 0x53)) = r3;
0x0800fce8 strb r3, [r4, 0x54] | *((r4 + 0x54)) = r3;
| if (sb == 0) {
0x0800fcec beq 0x8010014 | goto label_12;
| }
0x0800fcf0 ldrb r3, [sb] | r3 = *(sb);
0x0800fcf4 cmp r3, 0 |
| if (r3 == 0) {
0x0800fcf8 beq 0x8010014 | goto label_12;
| }
0x0800fcfc mov r0, sb | r0 = sb;
0x0800fd00 stmdaeq r5, {r4, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r4, sb, fp, ip, sp}");
0x0800fd04 stmdaeq r5, {r4, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r4, sb, fp, ip, sp}");
0x0800fd08 stmdaeq sb, {r0, r2, r5, r7, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r5, r7, sl, fp, sp, pc}");
0x0800fd0c cmp r0, 2 |
| if (r0 != 2) {
0x0800fd10 bne 0x8010028 | goto label_6;
| }
0x0800fd14 add r0, sb, 2 | r0 = sb + 2;
0x0800fd18 stmdaeq r5, {r4, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r4, sb, fp, ip, sp}");
0x0800fd1c stmdaeq r5, {r4, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r4, sb, fp, ip, sp}");
0x0800fd20 stmdaeq sb, {r0, r3, r5, r7, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r3, r5, r7, sl, fp, sp, pc}");
0x0800fd24 cmp r0, 0 |
| if (r0 == 0) {
0x0800fd28 beq 0x8010028 | goto label_6;
| }
0x0800fd2c add r6, r0, 1 | r6 = r0 + 1;
0x0800fd30 stmdaeq r5, {r4, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r4, sb, fp, ip, sp}");
0x0800fd34 stmdaeq r5, {r4, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r4, sb, fp, ip, sp}");
0x0800fd38 mov r0, r6 | r0 = r6;
0x0800fd3c stmdaeq sb, {r0, r2, r3, r5, r7, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r5, r7, sl, fp, sp, pc}");
0x0800fd40 mov r8, r0 | r8 = r0;
0x0800fd44 add fp, r6, r8 |
0x0800fd48 mov r0, sb | r0 = sb;
0x0800fd4c sub r1, fp, sb | r1 = fp - sb;
0x0800fd50 mov r2, 0xcc0 | r2 = 0xcc0;
0x0800fd54 stmdaeq sb, {r0, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r8, sb, fp, sp, pc}");
0x0800fd58 cmp r0, 0 |
0x0800fd5c str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
| if (r0 == 0) {
0x0800fd60 beq 0x8010050 | goto label_13;
| }
0x0800fd64 mov sb, 0x5c | sb = 0x5c;
0x0800fd68 b 0x800fd70 |
| while (r0 != 0) {
0x0800fd6c strb sb, [r0] | *(r0) = sb;
0x0800fd70 mov r1, 0x2f | r1 = 0x2f;
0x0800fd74 stmdaeq sb, {r0, r2, r3, r4, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r4, sl, fp, sp, pc}");
0x0800fd78 cmp r0, 0 |
0x0800fd7c bne 0x800fd6c |
| }
0x0800fd80 ldrb r3, [r6, r8] | r3 = *((r6 + r8));
0x0800fd84 mov r5, r0 | r5 = r0;
0x0800fd88 cmp r3, 0x5c |
0x0800fd8c cmpne r3, 0x2f | __asm ("cmpne r3, 0x2f");
| if (r3 != 0x5c) {
0x0800fd90 ldrbeq r3, [fp, 1] | r3 = *(arg_1h);
| }
| if (r3 != 0x5c) {
0x0800fd94 addeq fp, fp, 1 |
| }
0x0800fd98 cmp r3, 0 |
| if (r3 != 0) {
0x0800fd9c beq 0x800fdb8 |
0x0800fda0 mov r0, fp | r0 = fp;
0x0800fda4 mov r1, 0xcc0 | r1 = 0xcc0;
0x0800fda8 stmdaeq sb, {r0, r3, r7, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r3, r7, sl, fp, sp, pc}");
0x0800fdac cmp r0, 0 |
0x0800fdb0 str r0, [r4, 0x8c] | *((r4 + 0x8c)) = r0;
| if (r0 == 0) {
0x0800fdb4 beq 0x8010050 | goto label_13;
| }
| }
0x0800fdb8 ldr sb, [pc, 0xfe4] | sb = loc..LANCHOR1;
0x0800fdbc movw fp, 0x2020 |
0x0800fdc0 movt fp, 0x2020 | fp = 0x20202020;
0x0800fdc4 mov r8, 0 | r8 = 0;
0x0800fdc8 mvn r3, 0 | r3 = ~0;
0x0800fdcc stmdaeq r5, {r2, r4, r6, r7, lr} | __asm ("stmdaeq r5, {r2, r4, r6, r7, lr}");
0x0800fdd0 stmdaeq r5, {r2, r4, r6, r7, lr} | __asm ("stmdaeq r5, {r2, r4, r6, r7, lr}");
0x0800fdd4 str r3, [sp, 0x20] | var_20h = r3;
0x0800fdd8 str r2, [sp, 0x34] | var_34h = r2;
0x0800fddc add r2, r4, 0x90 | r2 = r4 + 0x90;
0x0800fde0 str r8, [sp, 0x30] | var_30h = r8;
0x0800fde4 str r2, [sp, 0x10] | var_10h = r2;
0x0800fde8 str r8, [sp, 0x2c] | var_2ch = r8;
0x0800fdec str r8, [sp, 0x18] | var_18h = r8;
0x0800fdf0 str r8, [sp, 0x14] | var_14h = r8;
0x0800fdf4 str r8, [sp, 0x28] | var_28h = r8;
0x0800fdf8 str r8, [sp, 0x24] | var_24h = r8;
0x0800fdfc str r3, [sp, 0x1c] | var_1ch = r3;
| do {
0x0800fe00 add r1, sp, 0x3e | r1 += var_3eh;
0x0800fe04 add r0, sp, 0x40 | r0 += var_40h;
0x0800fe08 stmdaeq sb, {r0, r4, r5, r7, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r5, r7, sl, fp, sp, pc}");
0x0800fe0c subs r6, r0, 0 | r6 -= var_40h;
| if (r6 == var_40h) {
0x0800fe10 beq 0x8010078 | goto label_14;
| }
0x0800fe14 ldrb r3, [r6] | r3 = *(r6);
0x0800fe18 cmp r3, 0 |
0x0800fe1c beq 0x800fe00 |
| } while (r3 == 0);
0x0800fe20 mov r1, sb | r1 = sb;
0x0800fe24 add r2, sp, 0x48 | r2 += var_48h;
0x0800fe28 stmdaeq sb, {r0, r2, r4, r5, r7, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r4, r5, r7, sl, fp, sp, pc}");
0x0800fe2c cmp r0, 0x67 |
| if (r0 > 0x67) {
| /* switch table (104 cases) at 0x800fe38 */
0x0800fe30 ldrls pc, [pc, r0, lsl 2] | offset_0 = r0 << 2;
| pc = *((pc + offset_0));
| }
0x0800fe34 b 0x8011610 | goto label_15;
| label_11:
0x0800ffd8 ldrb r3, [r7, 4] | r3 = *((r7 + 4));
0x0800ffdc cmp r3, 0 |
| if (r3 == 0) {
0x0800ffe0 strbne r3, [sp, 0x3e] | var_3eh = r3;
| }
| if (r3 == 0) {
0x0800ffe4 addne r3, r7, 5 | r3 = r7 + 5;
| }
| if (r3 == 0) {
0x0800ffe8 strne r3, [sp, 0x40] | var_40h = r3;
| }
0x0800ffec b 0x800fcdc | goto label_0;
| label_10:
0x0800fff0 mov r5, 0 | r5 = 0;
0x0800fff4 mov r7, r5 | r7 = r5;
| do {
| label_1:
0x0800fff8 mov r0, r5 | r0 = r5;
0x0800fffc stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc}");
0x08010000 mov r0, r7 | r0 = r7;
0x08010004 stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc}");
0x08010008 mvn r0, 0x15 | r0 = ~0x15;
| label_2:
0x0801000c add sp, sp, 0x64 |
0x08010010 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_12:
0x08010014 ldr r1, [pc, 0xd8c] | r1 = "cifs_remap_file_range";
0x08010018 ldr r0, [pc, 0xd8c] | r0 = "cifs_remap_file_range";
0x0801001c stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x08010020 cmp r0, 0 |
| if (r0 != 0) {
0x08010024 bne 0x8011600 | goto label_16;
| }
| label_6:
0x08010028 ldr r1, [pc, 0xe10] | r1 = .data;
0x0801002c ldr r0, [pc, 0xd7c] | r0 = .data;
0x08010030 stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x08010034 subs r5, r0, 0 | r5 = r0 - 0;
0x08010038 beq 0x800fff8 |
| } while (r5 == r0);
0x0801003c stmdaeq r5, {r3, r6, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r3, r6, sb, fp, ip, sp}");
0x08010040 stmdaeq r5, {r3, r6, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r3, r6, sb, fp, ip, sp}");
0x08010044 mov r5, 0 | r5 = 0;
0x08010048 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x0801004c b 0x800fff8 | goto label_1;
| label_13:
0x08010050 ldr r1, [pc, 0xde8] | r1 = .data;
0x08010054 ldr r0, [pc, 0xd58] | r0 = .data;
0x08010058 stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x0801005c subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 == r0) {
0x08010060 beq 0x800fff8 | goto label_1;
| }
0x08010064 stmdaeq r5, {r2, r4, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r2, r4, sb, fp, ip, sp}");
0x08010068 stmdaeq r5, {r2, r4, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r2, r4, sb, fp, ip, sp}");
0x0801006c mov r5, 0 | r5 = 0;
0x08010070 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x08010074 b 0x800fff8 | goto label_1;
| label_14:
0x08010078 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0801007c eor sb, r3, 1 | sb = r3 ^ 1;
0x08010080 cmp r8, 0 |
| if (r8 != 0) {
0x08010084 moveq sb, 0 | sb = 0;
| }
| if (r8 == 0) {
0x08010088 andne sb, sb, 1 | sb &= 1;
| }
0x0801008c cmp sb, 0 |
| if (sb != 0) {
0x08010090 bne 0x801164c | goto label_17;
| }
0x08010094 ldrb r3, [r4, 0x59] | r3 = *((r4 + 0x59));
0x08010098 tst r3, 2 |
| if ((r3 & 2) != 0) {
0x0801009c beq 0x80100b0 |
0x080100a0 ldr r3, [r4, 0x88] | r3 = *((r4 + 0x88));
0x080100a4 ldrh r3, [r3, 4] | r3 = *((r3 + 4));
0x080100a8 cmp r3, 0x300 |
| if (r3 <= 0x300) {
0x080100ac blo 0x8011138 | goto label_18;
| }
| }
0x080100b0 ldr r5, [r4, 0xc] | r5 = *((r4 + 0xc));
0x080100b4 cmp r5, 0 |
| if (r5 == 0) {
0x080100b8 beq 0x80111b4 | goto label_19;
| }
0x080100bc add r0, r5, 3 | r0 = r5 + 3;
0x080100c0 mov r1, 0x5c | r1 = 0x5c;
0x080100c4 stmdaeq sb, {r0, r2, r3, r4, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r4, sl, fp, sp, pc}");
0x080100c8 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 == r0) {
0x080100cc beq 0x80111d8 | goto label_20;
| }
0x080100d0 ldr r3, [sp, 0x18] | r3 = var_18h;
0x080100d4 cmp r3, 0 |
| if (r3 == 0) {
0x080100d8 bne 0x8010104 |
0x080100dc add r5, r5, 2 | r5 += 2;
0x080100e0 mov r1, 0x5c | r1 = 0x5c;
0x080100e4 mov r0, r5 | r0 = r5;
0x080100e8 stmdaeq sb, {r0, r2, r3, r4, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r4, sl, fp, sp, pc}");
0x080100ec mov r1, r5 | r1 = r5;
0x080100f0 sub r2, r0, r5 | r2 = r0 - r5;
0x080100f4 ldr r0, [sp, 0x10] | r0 = var_10h;
0x080100f8 stmdaeq r2, {r7, r8, sl, lr} | __asm ("stmdaeq r2, {r7, r8, sl, lr}");
0x080100fc cmp r0, 0 |
| if (r0 == 0) {
0x08010100 beq 0x8011678 | goto label_21;
| }
| }
0x08010104 ldr r1, [sp, 0x30] | r1 = var_30h;
0x08010108 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0801010c stmdaeq r2, {r2, r3, r4, r7, sb, sl, lr} | __asm ("stmdaeq r2, {r2, r3, r4, r7, sb, sl, lr}");
0x08010110 ldr r3, [sp, 0x24] | r3 = var_24h;
0x08010114 cmp r3, 0 |
0x08010118 ldr r3, [sp, 0x1c] | r3 = var_1ch;
| if (r3 != 0) {
0x0801011c bne 0x80101f0 | goto label_22;
| }
0x08010120 cmp r3, 1 |
| if (r3 == 1) {
0x08010124 beq 0x8011624 | goto label_23;
| }
| label_8:
0x08010128 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0801012c cmp r3, 0 |
| if (r3 == 0) {
0x08010130 beq 0x8011188 | goto label_24;
| }
0x08010134 ldr r2, [sp, 0x20] | r2 = var_20h;
0x08010138 ldrb r3, [r4, 0x51] | r3 = *((r4 + 0x51));
0x0801013c subs r2, r2, 0 |
| if (r2 == r2) {
0x08010140 movne r2, 1 | r2 = 1;
| }
0x08010144 bfi r3, r2, 6, 1 | value_1 = BIT_MASK (6, 1);
| value_2 = r2 & value_1;
| value_1 = ~value_1;
| r3 &= value_1;
| r3 |= value_2;
0x08010148 strb r3, [r4, 0x51] | *((r4 + 0x51)) = r3;
| label_4:
0x0801014c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x08010150 cmp r3, 0 |
| if (r3 == 0) {
0x08010154 bne 0x801016c |
0x08010158 stmdaeq r6, {r1, r2, r4, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r6, {r1, r2, r4, r6, r7, r8, fp, ip, lr, pc}");
0x0801015c stmdaeq r6, {r1, r2, r4, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r6, {r1, r2, r4, r6, r7, r8, fp, ip, lr, pc}");
0x08010160 ldrb r2, [r3, 2] | r2 = *((r3 + 2));
0x08010164 cmp r2, 0 |
| if (r2 == 0) {
0x08010168 beq 0x8011634 | goto label_25;
| }
| }
| label_9:
0x0801016c mov r0, r7 | r0 = r7;
0x08010170 stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc}");
0x08010174 ldrb r3, [r4, 0x56] | r3 = *((r4 + 0x56));
0x08010178 tst r3, 0x10 |
| if ((r3 & 0x10) != 0) {
0x0801017c bne 0x8011154 | goto label_26;
| }
0x08010180 ldr r3, [r4] | r3 = *(r4);
0x08010184 cmp r3, 0 |
| if (r3 == 0) {
0x08010188 beq 0x80112e0 | goto label_27;
| }
0x0801018c ldr r5, [r4, 0x10] | r5 = *((r4 + 0x10));
0x08010190 cmp r5, 0 |
| if (r5 == 0) {
0x08010194 beq 0x8011170 | goto label_28;
| }
| label_3:
0x08010198 mov r0, r5 | r0 = r5;
0x0801019c stmdaeq sb, {r0, r3, r4, r5, r7, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r3, r4, r5, r7, sl, fp, sp, pc}");
0x080101a0 cmp r0, 0 |
0x080101a4 str r0, [r4, 0x190] | *((r4 + 0x190)) = r0;
| if (r0 != 0) {
0x080101a8 movne r0, 0 | r0 = 0;
| goto label_29;
| }
| if (r0 != 0) {
| label_29:
0x080101ac bne 0x801000c | goto label_2;
| }
0x080101b0 ldr r1, [pc, 0xc40] | r1 = .data;
0x080101b4 ldr r0, [pc, 0xbfc] | r0 = .data;
0x080101b8 stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
| if (r0 != 0) {
0x080101bc andeq r0, r0, r0 | r0 &= r0;
| }
| if (r0 == 0) {
0x080101c0 mvneq r0, 0x4d | r0 = ~0x4d;
| goto label_30;
| }
| if (r0 == 0) {
| label_30:
0x080101c4 beq 0x801000c | goto label_2;
| }
0x080101c8 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x080101cc stmdaeq r5, {r2, r3, r4, r5, r6, sl, lr} | __asm ("stmdaeq r5, {r2, r3, r4, r5, r6, sl, lr}");
0x080101d0 stmdaeq r5, {r2, r3, r4, r5, r6, sl, lr} | __asm ("stmdaeq r5, {r2, r3, r4, r5, r6, sl, lr}");
0x080101d4 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x080101d8 andsne sp, pc, lr, asr 32 | __asm ("andsne sp, pc, lr, asr 32");
0x080101dc smlabbeq r1, r0, ip, pc | __asm ("smlabbeq r1, r0, ip, pc");
| label_7:
0x080101e4 strbteq r4, [r6], -0 | __asm ("strbteq r4, [r6], -0");
0x080101e8 invalid |
| if (r0 != 0) {
0x080101ec andeq r0, r0, sl, ror 1 | r0 &= (sl >>> 1);
| }
| label_22:
0x080101f0 mrseq pc, apsr | __asm ("mrseq pc, apsr");
| if (r0 == 0) {
0x080101f4 strne r0, [r0, r8] | *((r0 + r8)) = r0;
| }
| if (r0 == 0) {
0x080101f8 ldrbne sp, [pc, -r0, lsl 24]! | offset_3 = -r0 << 24;
| sp = *((pc += offset_3));
| }
0x080101fc movteq sb, 0x4000 | __asm ("movteq sb, 0x4000");
0x08010200 strb r3, [r4, 8] | *((r4 + 8)) = r3;
| if (r0 != 0) {
0x08010204 andeq r0, r0, r0, lsr 32 | r0 &= (r0 >> 32);
| }
| label_18:
0x08011138 ldr r1, [pc, -0x300] | r1 = loc..LANCHOR1;
0x0801113c ldr r0, [pc, -0x368] | r0 = loc..LANCHOR2;
0x08011140 stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x08011144 cmp r0, 0 |
| if (r0 != 0) {
0x08011148 bne 0x80115c8 | goto label_31;
| }
| label_5:
0x0801114c mov r5, r0 | r5 = r0;
0x08011150 b 0x800fff8 | goto label_1;
| label_26:
0x08011154 ldr r0, [r4] | r0 = *(r4);
0x08011158 stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc}");
0x0801115c ldr r5, [r4, 0x10] | r5 = *((r4 + 0x10));
0x08011160 mov r3, 0 | r3 = 0;
0x08011164 str r3, [r4] | *(r4) = r3;
0x08011168 cmp r5, 0 |
| if (r5 != 0) {
0x0801116c bne 0x8010198 | goto label_3;
| }
| label_28:
0x08011170 stmdaeq sb, {r0, r2, r3, r6, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r8, sb, fp, sp, pc}");
0x08011174 mov r3, r0 | r3 = r0;
0x08011178 mov r0, r5 | r0 = r5;
0x0801117c str r3, [r4, 0x190] | *((r4 + 0x190)) = r3;
0x08011180 add sp, sp, 0x64 |
0x08011184 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_24:
0x08011188 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0801118c cmp r3, 1 |
| if (r3 != 1) {
0x08011190 bne 0x801014c | goto label_4;
| }
0x08011194 stmdaeq r5, {r3, r4, r5, r6, r7, sb, lr} | __asm ("stmdaeq r5, {r3, r4, r5, r6, r7, sb, lr}");
0x08011198 stmdaeq r5, {r3, r4, r5, r6, r7, sb, lr} | __asm ("stmdaeq r5, {r3, r4, r5, r6, r7, sb, lr}");
0x0801119c stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x080111a0 b 0x801014c | goto label_4;
| label_19:
0x080111b4 ldr r1, [pc, -0x37c] | r1 = loc..LANCHOR1;
0x080111b8 ldr r0, [pc, -0x3e0] | r0 = loc..LANCHOR2;
0x080111bc stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x080111c0 cmp r0, 0 |
| if (r0 == 0) {
0x080111c4 beq 0x800fff8 | goto label_1;
| }
0x080111c8 stmdaeq r5, {r2, r4, r5, r6, r7, r8, lr} | __asm ("stmdaeq r5, {r2, r4, r5, r6, r7, r8, lr}");
0x080111cc stmdaeq r5, {r2, r4, r5, r6, r7, r8, lr} | __asm ("stmdaeq r5, {r2, r4, r5, r6, r7, r8, lr}");
0x080111d0 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x080111d4 b 0x800fff8 | goto label_1;
| label_20:
0x080111d8 ldr r1, [pc, -0x3a0] | r1 = loc..LANCHOR1;
0x080111dc ldr r0, [pc, -0x400] | r0 = loc..LANCHOR2;
0x080111e0 stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x080111e4 cmp r0, 0 |
| if (r0 == 0) {
0x080111e8 beq 0x801114c | goto label_5;
| }
0x080111ec stmdaeq r5, {r2, r6, sb, lr} | __asm ("stmdaeq r5, {r2, r6, sb, lr}");
0x080111f0 stmdaeq r5, {r2, r6, sb, lr} | __asm ("stmdaeq r5, {r2, r6, sb, lr}");
0x080111f4 mov r5, r6 | r5 = r6;
0x080111f8 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x080111fc b 0x800fff8 | goto label_1;
| label_27:
0x080112e0 ldr r1, [pc, -0x4f0] | r1 = loc..LANCHOR1;
0x080112e4 ldr r0, [pc, -0x4f0] | r0 = loc..LANCHOR2;
0x080112e8 stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x080112ec cmp r0, 0 |
| if (r0 == 0) {
0x080112f0 mvneq r0, 0x15 | r0 = ~0x15;
| goto label_32;
| }
| if (r0 == 0) {
| label_32:
0x080112f4 beq 0x801000c | goto label_2;
| }
0x080112f8 stmdaeq r5, {r3, r4, r6, sl, lr} | __asm ("stmdaeq r5, {r3, r4, r6, sl, lr}");
0x080112fc stmdaeq r5, {r3, r4, r6, sl, lr} | __asm ("stmdaeq r5, {r3, r4, r6, sl, lr}");
0x08011300 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x08011304 mvn r0, 0x15 | r0 = ~0x15;
0x08011308 b 0x801000c | goto label_2;
| label_31:
0x080115c8 stmdaeq r5, {r2, r6, r7, r8, lr} | __asm ("stmdaeq r5, {r2, r6, r7, r8, lr}");
0x080115cc stmdaeq r5, {r2, r6, r7, r8, lr} | __asm ("stmdaeq r5, {r2, r6, r7, r8, lr}");
0x080115d0 mov r5, sb | r5 = sb;
0x080115d4 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x080115d8 b 0x800fff8 | goto label_1;
| label_16:
0x08011600 stmdaeq r5, {r3, r5, r6, r7, r8, fp, ip, sp} | __asm ("stmdaeq r5, {r3, r5, r6, r7, r8, fp, ip, sp}");
0x08011604 stmdaeq r5, {r3, r5, r6, r7, r8, fp, ip, sp} | __asm ("stmdaeq r5, {r3, r5, r6, r7, r8, fp, ip, sp}");
0x08011608 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x0801160c b 0x8010028 | goto label_6;
| label_15:
0x08011610 cmp r8, 0 |
| if (r8 != 0) {
0x08011614 moveq sl, r8 | sl = r8;
| }
| if (r8 != 0) {
0x08011618 moveq r8, r6 | r8 = r6;
| }
| if (r8 == 0) {
0x0801161c movne sl, 0 | sl = 0;
| }
0x08011620 b 0x80101e4 | goto label_7;
| label_23:
0x08011624 stmdaeq r5, {r4, r5, r7, sb, lr} | __asm ("stmdaeq r5, {r4, r5, r7, sb, lr}");
0x08011628 stmdaeq r5, {r4, r5, r7, sb, lr} | __asm ("stmdaeq r5, {r4, r5, r7, sb, lr}");
0x0801162c stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x08011630 b 0x8010128 | goto label_8;
| label_25:
0x08011634 stmdaeq r5, {r6, r8, sb, lr} | __asm ("stmdaeq r5, {r6, r8, sb, lr}");
0x08011638 stmdaeq r5, {r6, r8, sb, lr} | __asm ("stmdaeq r5, {r6, r8, sb, lr}");
0x0801163c mov r2, 1 | r2 = 1;
0x08011640 strb r2, [r3, 2] | *((r3 + 2)) = r2;
0x08011644 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x08011648 b 0x801016c | goto label_9;
| label_17:
0x0801164c mov r1, r8 | r1 = r8;
0x08011650 stmdaeq r5, {r5, r7, r8, lr} | __asm ("stmdaeq r5, {r5, r7, r8, lr}");
0x08011654 stmdaeq r5, {r5, r7, r8, lr} | __asm ("stmdaeq r5, {r5, r7, r8, lr}");
0x08011658 mov r5, r6 | r5 = r6;
0x0801165c stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x08011660 b 0x800fff8 | goto label_1;
| label_21:
0x08011678 stmdaeq r5, {r2, r3, r4, r5, r6, sb, lr} | __asm ("stmdaeq r5, {r2, r3, r4, r5, r6, sb, lr}");
0x0801167c stmdaeq r5, {r2, r3, r4, r5, r6, sb, lr} | __asm ("stmdaeq r5, {r2, r3, r4, r5, r6, sb, lr}");
0x08011680 ldr r5, [sp, 0x18] | r5 = var_18h;
0x08011684 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x08011688 b 0x800fff8 | 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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x8025e48 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.cifs_sync_mid_result () | void cifs_sync_mid_result (int32_t arg1) {
| int32_t var_8h;
| r0 = arg1;
0x08025e48 push {r4, r5, r6, r7, lr} |
0x08025e4c mov r4, r0 | r4 = r0;
0x08025e50 sub sp, sp, 0x14 |
0x08025e54 mov r3, sp | r3 = sp;
0x08025e58 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08025e5c bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08025e60 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08025e64 add r2, r2, 1 | r2++;
0x08025e68 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08025e6c ldr r3, [r0, 0x44] | r3 = *((r0 + 0x44));
0x08025e70 sub r3, r3, 4 | r3 -= 4;
0x08025e74 cmp r3, 0x1c |
| if (r3 > 0x1c) {
| /* switch table (29 cases) at 0x8025e80 */
0x08025e78 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x08025e7c b 0x8025ef4 |
0x08025ef4 ldr r3, [r0, 0x48] | r3 = *((r0 + 0x48));
0x08025ef8 tst r3, 2 |
| if ((r3 & 2) == 0) {
0x08025efc bne 0x8025f20 |
0x08025f00 ldrd r2, r3, [r0] | __asm ("ldrd r2, r3, [r0]");
0x08025f04 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x08025f08 str r2, [r3] | *(r3) = r2;
0x08025f0c str r0, [r4] | *(r4) = r0;
0x08025f10 str r0, [r4, 4] | *((r4 + 4)) = r0;
0x08025f14 ldr r3, [r0, 0x48] | r3 = *((r0 + 0x48));
0x08025f18 orr r3, r3, 2 | r3 |= 2;
0x08025f1c str r3, [r0, 0x48] | *((r0 + 0x48)) = r3;
| }
0x08025f20 cmp r1, 0 |
| if (r1 == 0) {
0x08025f24 beq 0x8025fec | goto label_3;
| }
0x08025f28 ldr r5, [r1, 0x30] | r5 = *((r1 + 0x30));
0x08025f2c stmdaeq r5, {r3, r4, r5, r8, sb, sl, ip, lr} | __asm ("stmdaeq r5, {r3, r4, r5, r8, sb, sl, ip, lr}");
0x08025f30 stmdaeq r5, {r3, r4, r5, r8, sb, sl, ip, lr} | __asm ("stmdaeq r5, {r3, r4, r5, r8, sb, sl, ip, lr}");
0x08025f34 cmp r5, 0 |
| if (r5 != 0) {
0x08025f38 moveq r5, r3 | r5 = r3;
| }
| label_1:
0x08025f3c ldr r1, [pc, 0xe0] | r1 = *(0x8026020);
0x08025f40 ldr r0, [pc, 0xe0] | r0 = "cifs_remap_file_range";
0x08025f44 stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x08025f48 cmp r0, 0 |
| if (r0 != 0) {
0x08025f4c bne 0x8025ff8 | goto label_4;
| }
0x08025f50 mvn r5, 4 | r5 = ~4;
| label_2:
0x08025f54 mov r3, sp | r3 = sp;
0x08025f58 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08025f5c bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08025f60 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08025f64 sub r2, r2, 1 | r2--;
0x08025f68 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08025f6c cmp r2, 0 |
0x08025f70 beq 0x8025fd0 |
| while ((r3 & 2) == 0) {
| label_0:
0x08025f74 mov r0, r4 | r0 = r4;
0x08025f78 stmdaeq r2, {r2, r4, r5, r7, sl, fp, ip, lr} | __asm ("stmdaeq r2, {r2, r4, r5, r7, sl, fp, ip, lr}");
0x08025f7c mov r0, r5 | r0 = r5;
0x08025f80 add sp, sp, 0x14 |
0x08025f84 pop {r4, r5, r6, r7, pc} |
0x08025fd0 ldr r3, [r3] | r3 = *(r3);
0x08025fd4 tst r3, 2 |
0x08025fd8 beq 0x8025f74 |
| }
0x08025fdc stmdaeq sb, {r0, r5, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r5, r7, sb, fp, sp, pc}");
0x08025fe0 b 0x8025f74 | goto label_0;
| label_3:
0x08025fec stmdaeq r5, {r3, r4, r5, r8, sb, sl, ip, lr} | __asm ("stmdaeq r5, {r3, r4, r5, r8, sb, sl, ip, lr}");
0x08025ff0 stmdaeq r5, {r3, r4, r5, r8, sb, sl, ip, lr} | __asm ("stmdaeq r5, {r3, r4, r5, r8, sb, sl, ip, lr}");
0x08025ff4 b 0x8025f3c | goto label_1;
| label_4:
0x08025ff8 ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x08025ffc mov r1, r5 | r1 = r5;
0x08026000 ldrd r6, r7, [r4, 0x10] | __asm ("ldrd r6, r7, [r4, 0x10]");
0x08026004 strd r6, r7, [sp] | __asm ("strd r6, r7, [sp]");
0x08026008 ldr r2, [pc, 0x14] | r2 = *(0x8026020);
0x0802600c stmdaeq r5, {fp, ip, lr} | __asm ("stmdaeq r5, {fp, ip, lr}");
0x08026010 stmdaeq r5, {fp, ip, lr} | __asm ("stmdaeq r5, {fp, ip, lr}");
0x08026014 str r3, [sp, 8] | var_8h = r3;
0x08026018 mvn r5, 4 | r5 = ~4;
0x0802601c stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x08026020 b 0x8025f54 | 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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x801e600 */
| #include <stdint.h>
|
; (fcn) sym.cifs_unix_basic_to_fattr () | void cifs_unix_basic_to_fattr (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_14h;
| r0 = arg1;
| r1 = arg2;
0x0801e600 push {r4, r5, r6, r7, lr} |
0x0801e604 mov r4, r1 | r4 = r1;
0x0801e608 mov r5, r0 | r5 = r0;
0x0801e60c mov r1, 0 | r1 = 0;
0x0801e610 sub sp, sp, 0x14 |
0x0801e614 mov r7, r2 | r7 = r2;
0x0801e618 mov r2, 0x78 | r2 = 0x78;
0x0801e61c stmdaeq sb, {r0, r2, r4, r5, r6, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r4, r5, r6, r8, sb, fp, sp, pc}");
0x0801e620 ldr r2, [r4, 0x4c] | r2 = *((r4 + 0x4c));
0x0801e624 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x0801e628 mov r6, sp | r6 = sp;
0x0801e62c strd r2, r3, [r5, 8] | __asm ("strd r2, r3, [r5, 8]");
0x0801e630 mov r0, r6 | r0 = r6;
0x0801e634 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0801e638 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0801e63c str r2, [r5, 0x1c] | *((r5 + 0x1c)) = r2;
0x0801e640 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x0801e644 ldr r3, [r4] | r3 = *(r4);
0x0801e648 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0801e64c str r2, [r5, 0x14] | *((r5 + 0x14)) = r2;
0x0801e650 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x0801e654 ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x0801e658 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0801e65c stmdaeq r2, {r5, r6, r8, fp, lr} | __asm ("stmdaeq r2, {r5, r6, r8, fp, lr}");
0x0801e660 add ip, r5, 0x40 |
0x0801e664 ldm r6, {r0, r1, r2, r3} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
| r3 = *((r6 + 12));
0x0801e668 stm ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x0801e66c mov r0, r6 | r0 = r6;
0x0801e670 ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x0801e674 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0801e678 stmdaeq r2, {r5, r6, r8, fp, lr} | __asm ("stmdaeq r2, {r5, r6, r8, fp, lr}");
0x0801e67c add ip, r5, 0x50 |
0x0801e680 ldm r6, {r0, r1, r2, r3} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
| r3 = *((r6 + 12));
0x0801e684 stm ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x0801e688 mov r0, r6 | r0 = r6;
0x0801e68c ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x0801e690 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0801e694 stmdaeq r2, {r5, r6, r8, fp, lr} | __asm ("stmdaeq r2, {r5, r6, r8, fp, lr}");
0x0801e698 add ip, r5, 0x60 |
0x0801e69c ldm r6, {r0, r1, r2, r3} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
| r3 = *((r6 + 12));
0x0801e6a0 stm ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x0801e6a4 ldr r3, [r4, 0x54] | r3 = *((r4 + 0x54));
0x0801e6a8 ubfx r3, r3, 0, 0xc | r3 = (r3 >> 0) & ((1 << 0xc) - 1);
0x0801e6ac strh r3, [r5, 0x30] | *((r5 + 0x30)) = r3;
0x0801e6b0 ldr r2, [r4, 0x38] | r2 = *((r4 + 0x38));
0x0801e6b4 sub r2, r2, 1 | r2--;
0x0801e6b8 cmp r2, 5 |
| if (r2 > 5) {
| /* switch table (6 cases) at 0x801e6c4 */
0x0801e6bc ldrls pc, [pc, r2, lsl 2] | offset_0 = r2 << 2;
| pc = *((pc + offset_0));
| }
0x0801e6c0 b 0x801e804 | goto label_1;
| label_0:
0x0801e6f0 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x0801e6f4 str r3, [r5, 0x28] | *((r5 + 0x28)) = r3;
0x0801e6f8 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x0801e6fc ands r3, r3, 0x400 | r3 &= 0x400;
| if (r3 != r3) {
0x0801e700 bne 0x801e71c | goto label_2;
| }
0x0801e704 ldr r1, [r4, 0x28] | r1 = *((r4 + 0x28));
0x0801e708 mvn r0, 1 | r0 = ~1;
0x0801e70c ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x0801e710 cmp r0, r1 |
0x0801e714 sbcs r3, r3, r2 | __asm ("sbcs r3, r3, r2");
0x0801e718 bhs 0x801e7c8 |
| while (1) {
| label_2:
0x0801e71c ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x0801e720 str r3, [r5, 0x2c] | *((r5 + 0x2c)) = r3;
0x0801e724 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x0801e728 ands r3, r3, 0x800 | r3 &= 0x800;
| if (r3 == r3) {
0x0801e72c bne 0x801e748 |
0x0801e730 ldr r1, [r4, 0x30] | r1 = *((r4 + 0x30));
0x0801e734 mvn r0, 1 | r0 = ~1;
0x0801e738 ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x0801e73c cmp r0, r1 |
0x0801e740 sbcs r3, r3, r2 | __asm ("sbcs r3, r3, r2");
| if (r0 >= r1) {
0x0801e744 bhs 0x801e7e0 | goto label_3;
| }
| }
0x0801e748 ldr r3, [r4, 0x5c] | r3 = *((r4 + 0x5c));
0x0801e74c str r3, [r5, 0x38] | *((r5 + 0x38)) = r3;
0x0801e750 add sp, sp, 0x14 |
0x0801e754 pop {r4, r5, r6, r7, pc} |
0x0801e7c8 stmdaeq sb, {r0, r6, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r6, r8, sb, fp, sp, pc}");
0x0801e7cc stmdaeq sb, {r0, r6, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r6, r8, sb, fp, sp, pc}");
0x0801e7d0 stmdaeq sb, {r0, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, sl, fp, sp, pc}");
0x0801e7d4 cmn r0, 1 |
| if (r0 == 1) {
0x0801e7d8 strne r0, [r5, 0x28] | *((r5 + 0x28)) = r0;
| }
0x0801e7dc b 0x801e71c |
| }
| label_3:
0x0801e7e0 stmdaeq sb, {r0, r6, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r6, r8, sb, fp, sp, pc}");
0x0801e7e4 stmdaeq sb, {r0, r6, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r6, r8, sb, fp, sp, pc}");
0x0801e7e8 stmdaeq sb, {r0, r2, sl, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, sl, fp, sp, pc}");
0x0801e7ec cmn r0, 1 |
| if (r0 == 1) {
0x0801e7f0 strne r0, [r5, 0x2c] | *((r5 + 0x2c)) = r0;
| }
0x0801e7f4 ldr r3, [r4, 0x5c] | r3 = *((r4 + 0x5c));
0x0801e7f8 str r3, [r5, 0x38] | *((r5 + 0x38)) = r3;
0x0801e7fc add sp, sp, 0x14 |
0x0801e800 pop {r4, r5, r6, r7, pc} |
| label_1:
0x0801e804 mvn r3, r3, lsl 17 | r3 = ~r3;
0x0801e808 mov r2, 8 | r2 = 8;
0x0801e80c str r2, [r5, 0x3c] | *((r5 + 0x3c)) = r2;
0x0801e810 mvn r3, r3, lsr 17 | r3 = ~r3;
0x0801e814 strh r3, [r5, 0x30] | *((r5 + 0x30)) = r3;
0x0801e818 b 0x801e6f0 | 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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x8042a18 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.smb2_compound_op () | void smb2_compound_op (int32_t arg_d0h, int32_t arg_d4h, int32_t arg_d8h, int32_t arg_dch, int32_t arg_e4h, int32_t arg_e8h, int32_t arg1, int32_t arg2) {
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_3bh;
| int32_t var_4ch;
| int32_t var_54h;
| int32_t var_58h;
| int32_t var_5ch;
| int32_t var_60h;
| int32_t var_ach;
| r0 = arg1;
| r1 = arg2;
0x08042a18 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x08042a1c mov r8, r3 | r8 = r3;
0x08042a20 stmdaeq r5, {r2, r4, sb, fp, ip} | __asm ("stmdaeq r5, {r2, r4, sb, fp, ip}");
0x08042a24 stmdaeq r5, {r2, r4, sb, fp, ip} | __asm ("stmdaeq r5, {r2, r4, sb, fp, ip}");
0x08042a28 sub sp, sp, 0xac |
0x08042a2c mov r5, r1 | r5 = r1;
0x08042a30 add sb, sp, 0x4c | sb += var_4ch;
0x08042a34 mov r7, r2 | r7 = r2;
0x08042a38 stmdaeq sb, {r0, r2, r3, r4, r5, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r4, r5, r6, r7, sb, fp, sp, pc}");
0x08042a3c stmdaeq sb, {r0, r2, r3, r4, r5, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r4, r5, r6, r7, sb, fp, sp, pc}");
0x08042a40 ldrh r1, [sp, 0xdc] | r1 = *(arg_dch);
0x08042a44 str r0, [sp, 0x30] | var_30h = r0;
0x08042a48 mov sl, 0 | sl = 0;
0x08042a4c mov r6, r1 | r6 = r1;
0x08042a50 ldr fp, [r5, 0x24] | fp = *((r5 + 0x24));
0x08042a54 ldm r3, {r0, r1} | r0 = *(r3);
| r1 = *((r3 + 4));
0x08042a58 stm sb, {r0, r1} | *(sb) = r0;
| *((sb + 4)) = r1;
0x08042a5c ldr r0, [r2, 0x24] | r0 = *((r2 + 0x24));
0x08042a60 mov r1, 0xb20 | r1 = 0xb20;
0x08042a64 strb sl, [sp, 0x3b] | var_3bh = sl;
0x08042a68 stmdaeq sb, {r0, r2, r4, r5, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r4, r5, r7, sb, fp, sp, pc}");
0x08042a6c subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x08042a70 beq 0x80434cc | goto label_5;
| }
0x08042a74 mov r0, fp | r0 = fp;
0x08042a78 stmdaeq r2, {r2, r3, r4, r6, r8, sl, fp, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r4, r6, r8, sl, fp, sp, lr}");
0x08042a7c str r0, [sp, 0x28] | var_28h = r0;
0x08042a80 mov r0, r5 | r0 = r5;
0x08042a84 stmdaeq r3, {r4, r7, fp, ip, sp, pc} | __asm ("stmdaeq r3, {r4, r7, fp, ip, sp, pc}");
0x08042a88 subs r0, r0, sl | r0 -= sl;
0x08042a8c ldr r3, [sp, 0xe8] | r3 = *(arg_e8h);
| if (r0 == r0) {
0x08042a90 movne r0, 1 | r0 = 1;
| }
0x08042a94 str sl, [sp, 0x5c] | var_5ch = sl;
0x08042a98 cmp r3, sl |
0x08042a9c str sl, [sp, 0x58] | var_58h = sl;
0x08042aa0 lsl r3, r0, 0xb | r3 = r0 << 0xb;
0x08042aa4 str sl, [sp, 0x54] | var_54h = sl;
0x08042aa8 str r3, [sp, 0x2c] | var_2ch = r3;
0x08042aac add sl, r4, 0x38 | sl = r4 + 0x38;
| if (r3 != sl) {
0x08042ab0 beq 0x8042af0 |
0x08042ab4 ldr r3, [sp, 0xe4] | r3 = *(arg_e4h);
0x08042ab8 sub r8, r3, 2 | r8 = r3 - 2;
0x08042abc cmp r8, 9 |
| if (r8 > 9) {
| /* switch table (10 cases) at 0x8042ac8 */
0x08042ac0 ldrls pc, [pc, r8, lsl 2] | offset_0 = r8 << 2;
| pc = *((pc + offset_0));
| }
0x08042ac4 b 0x8043190 | goto label_6;
| }
0x08042af0 mov r0, r8 | r0 = r8;
0x08042af4 mov r1, r7 | r1 = r7;
0x08042af8 stmdaeq r3, {r4, r6, r7, r8, sp, pc} | __asm ("stmdaeq r3, {r4, r6, r7, r8, sp, pc}");
0x08042afc subs r8, r0, 0 | r8 = r0 - 0;
| if (r8 == r0) {
0x08042b00 beq 0x8042ce4 | goto label_7;
| }
0x08042b04 ldr r3, [sp, 0xd0] | r3 = *(arg_d0h);
0x08042b08 cmp r7, 0 |
0x08042b0c str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x08042b10 ldr r3, [sp, 0xd4] | r3 = *(arg_d4h);
0x08042b14 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x08042b18 str r5, [r4] | *(r4) = r5;
0x08042b1c ldr r3, [sp, 0xd8] | r3 = *(arg_d8h);
| if (r7 != 0) {
0x08042b20 beq 0x8042b3c |
0x08042b24 mov r0, r7 | r0 = r7;
0x08042b28 str r3, [sp, 0x34] | var_34h = r3;
0x08042b2c stmdaeq r2, {r2, r5, sb, fp, ip, sp} | __asm ("stmdaeq r2, {r2, r5, sb, fp, ip, sp}");
0x08042b30 ldr r3, [sp, 0x34] | r3 = var_34h;
0x08042b34 cmp r0, 0 |
| if (r0 != 0) {
0x08042b38 orrne r3, r3, 0x4000 | r3 |= 0x4000;
| goto label_8;
| }
| }
| label_8:
0x08042b3c str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x08042b40 add r0, sp, 0x60 | r0 += var_60h;
0x08042b44 ldrb r3, [r4, 0x1e] | r3 = *((r4 + 0x1e));
0x08042b48 mov ip, 8 |
0x08042b4c str r7, [r4, 4] | *((r4 + 4)) = r7;
0x08042b50 mov r2, sl | r2 = sl;
0x08042b54 str r0, [r4, 0x18] | *((r4 + 0x18)) = r0;
0x08042b58 add r0, r4, 0x8c | r0 = r4 + 0x8c;
0x08042b5c str ip, [r4, 0x3c] | *((r4 + 0x3c)) = ip;
0x08042b60 bfc r3, 0, 1 | value_1 = BIT_MASK (1, );
| value_1 = ~value_1;
| r3 &= value_1;
0x08042b64 str r0, [r4, 0x38] | *((r4 + 0x38)) = r0;
0x08042b68 mov r0, r5 | r0 = r5;
0x08042b6c strb r3, [r4, 0x1e] | *((r4 + 0x1e)) = r3;
0x08042b70 add r3, sp, 0x3b | r3 += var_3bh;
0x08042b74 ldr r1, [sp, 0x28] | r1 = var_28h;
0x08042b78 strh r6, [r4, 0x1c] | *((r4 + 0x1c)) = r6;
0x08042b7c stm sp, {r4, r8} | *(sp) = r4;
| *((sp + 4)) = r8;
0x08042b80 stmdaeq r3, {r4, r5, r6, r8, sb, fp, ip, lr, pc} | __asm ("stmdaeq r3, {r4, r5, r6, r8, sb, fp, ip, lr, pc}");
0x08042b84 mov r7, r0 | r7 = r0;
0x08042b88 mov r0, r8 | r0 = r8;
0x08042b8c stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc}");
0x08042b90 cmp r7, 0 |
| if (r7 == 0) {
0x08042b94 beq 0x80431e4 | goto label_9;
| }
0x08042b98 ldr r3, [sp, 0xe4] | r3 = *(arg_e4h);
0x08042b9c sub r8, r3, 2 | r8 = r3 - 2;
0x08042ba0 mov r0, sl | r0 = sl;
0x08042ba4 stmdaeq r3, {r7, r8, sl, sp, lr, pc} | __asm ("stmdaeq r3, {r7, r8, sl, sp, lr, pc}");
0x08042ba8 cmn r7, 0x4e |
| if (r7 == 0x4e) {
0x08042bac beq 0x8042ca8 | goto label_10;
| }
| label_0:
0x08042bb0 cmp r8, 9 |
| if (r8 > 9) {
| /* switch table (10 cases) at 0x8042bbc */
0x08042bb4 ldrls pc, [pc, r8, lsl 2] | offset_2 = r8 << 2;
| pc = *((pc + offset_2));
| }
0x08042bb8 b 0x8042c0c |
| while (1) {
0x08042c0c ldr r1, [r4, 0x20] | r1 = *((r4 + 0x20));
0x08042c10 ldr r0, [sp, 0x54] | r0 = var_54h;
0x08042c14 stmdaeq r2, {r4, ip, sp} | __asm ("stmdaeq r2, {r4, ip, sp}");
0x08042c18 ldr r1, [r4, 0x28] | r1 = *((r4 + 0x28));
0x08042c1c ldr r0, [sp, 0x58] | r0 = var_58h;
0x08042c20 stmdaeq r2, {r4, ip, sp} | __asm ("stmdaeq r2, {r4, ip, sp}");
0x08042c24 ldr r1, [r4, 0x30] | r1 = *((r4 + 0x30));
0x08042c28 ldr r0, [sp, 0x5c] | r0 = var_5ch;
0x08042c2c stmdaeq r2, {r4, ip, sp} | __asm ("stmdaeq r2, {r4, ip, sp}");
0x08042c30 mov r0, r4 | r0 = r4;
0x08042c34 stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r8, sb, fp, sp, pc}");
| label_2:
0x08042c38 mov r0, r7 | r0 = r7;
0x08042c3c add sp, sp, 0xac |
0x08042c40 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_10:
0x08042ca8 stmdaeq r6, {r3, r4, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r6, {r3, r4, r5, r6, r7, r8, fp, ip, lr, pc}");
0x08042cac stmdaeq r6, {r3, r4, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r6, {r3, r4, r5, r6, r7, r8, fp, ip, lr, pc}");
0x08042cb0 ldrb r2, [r3] | r2 = *(r3);
0x08042cb4 cmp r2, 0 |
| if (r2 == 0) {
0x08042cb8 beq 0x80434d4 | goto label_11;
| }
| label_3:
0x08042cbc ldrb r3, [r5, 0x64a] | r3 = *((r5 + 0x64a));
0x08042cc0 orr r3, r3, 1 | r3 |= 1;
0x08042cc4 strb r3, [r5, 0x64a] | *((r5 + 0x64a)) = r3;
0x08042cc8 b 0x8042cf8 | goto label_1;
| label_7:
0x08042ce4 ldr r3, [sp, 0xe4] | r3 = *(arg_e4h);
0x08042ce8 mov r0, sl | r0 = sl;
0x08042cec mvn r7, 0xb | r7 = ~0xb;
0x08042cf0 sub r8, r3, 2 | r8 = r3 - 2;
0x08042cf4 stmdaeq r3, {r7, r8, sl, sp, lr, pc} | __asm ("stmdaeq r3, {r7, r8, sl, sp, lr, pc}");
| label_1:
0x08042cf8 cmp r8, 9 |
| if (r8 > 9) {
| /* switch table (10 cases) at 0x8042d04 */
0x08042cfc ldrls pc, [pc, r8, lsl 2] | offset_3 = r8 << 2;
| pc = *((pc + offset_3));
| }
0x08042d00 b 0x8042c0c |
| }
| do {
| label_6:
0x08043190 ldr r1, [pc, 0x368] | r1 = *(0x80434fc);
0x08043194 stmdaeq r6, {r4, r6, r7, r8, sb, sl, ip, lr, pc} | __asm ("stmdaeq r6, {r4, r6, r7, r8, sb, sl, ip, lr, pc}");
0x08043198 stmdaeq r6, {r4, r6, r7, r8, sb, sl, ip, lr, pc} | __asm ("stmdaeq r6, {r4, r6, r7, r8, sb, sl, ip, lr, pc}");
0x0804319c stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x080431a0 cmp r0, 0 |
| if (r0 != 0) {
0x080431a4 bne 0x80434f0 | goto label_12;
| }
| label_4:
0x080431a8 ldr r3, [sp, 0xe8] | r3 = *(arg_e8h);
0x080431ac cmp r3, 0 |
| if (r3 == 0) {
0x080431b0 beq 0x80432cc | goto label_13;
| }
0x080431b4 mov r0, r3 | r0 = r3;
0x080431b8 mvn r7, 0x15 | r7 = ~0x15;
0x080431bc stmdaeq r1, {r3, r5, r7, r8, sb, fp, pc} | __asm ("stmdaeq r1, {r3, r5, r7, r8, sb, fp, pc}");
0x080431c0 mov r0, sl | r0 = sl;
0x080431c4 stmdaeq r3, {r7, r8, sl, sp, lr, pc} | __asm ("stmdaeq r3, {r7, r8, sl, sp, lr, pc}");
0x080431c8 b 0x8042bb0 | goto label_0;
| label_9:
0x080431e4 mov r1, sl | r1 = sl;
0x080431e8 mov r0, r5 | r0 = r5;
0x080431ec stmdaeq r3, {r5, r6, r8, sl, ip, lr} | __asm ("stmdaeq r3, {r5, r6, r8, sl, ip, lr}");
0x080431f0 ldr r3, [sp, 0xe4] | r3 = *(arg_e4h);
0x080431f4 sub r8, r3, 2 | r8 = r3 - 2;
0x080431f8 cmp r8, 9 |
| if (r8 > 9) {
| /* switch table (10 cases) at 0x8043204 */
0x080431fc ldrls pc, [pc, r8, lsl 2] | offset_4 = r8 << 2;
| pc = *((pc + offset_4));
| }
0x08043200 b 0x8043190 |
| } while (1);
| label_13:
0x080432cc mov r0, sl | r0 = sl;
0x080432d0 mvn r7, 0x15 | r7 = ~0x15;
0x080432d4 stmdaeq r3, {r7, r8, sl, sp, lr, pc} | __asm ("stmdaeq r3, {r7, r8, sl, sp, lr, pc}");
0x080432d8 b 0x8042cf8 | goto label_1;
| label_5:
0x080434cc mvn r7, 0xb | r7 = ~0xb;
0x080434d0 b 0x8042c38 | goto label_2;
| label_11:
0x080434d4 add r1, r5, 0x28 | r1 = r5 + 0x28;
0x080434d8 stmdaeq r6, {r2, r3, r4, sb, fp, ip, pc} | __asm ("stmdaeq r6, {r2, r3, r4, sb, fp, ip, pc}");
0x080434dc stmdaeq r6, {r2, r3, r4, sb, fp, ip, pc} | __asm ("stmdaeq r6, {r2, r3, r4, sb, fp, ip, pc}");
0x080434e0 mov r2, 1 | r2 = 1;
0x080434e4 strb r2, [r3] | *(r3) = r2;
0x080434e8 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x080434ec b 0x8042cbc | goto label_3;
| label_12:
0x080434f0 stmdaeq r6, {r2, r3, r4, r5, r6, r7, r8, fp, ip, pc} | __asm ("stmdaeq r6, {r2, r3, r4, r5, r6, r7, r8, fp, ip, pc}");
0x080434f4 stmdaeq r6, {r2, r3, r4, r5, r6, r7, r8, fp, ip, pc} | __asm ("stmdaeq r6, {r2, r3, r4, r5, r6, r7, r8, fp, ip, pc}");
0x080434f8 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x080434fc b 0x80431a8 | goto label_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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x80399a4 */
| #include <stdint.h>
|
; (fcn) sym.smb2_get_data_area_len () | void smb2_get_data_area_len (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x080399a4 push {r4, r5, r6, lr} |
0x080399a8 mov r3, 0 | r3 = 0;
0x080399ac mov r5, r0 | r5 = r0;
0x080399b0 str r3, [r0] | *(r0) = r3;
0x080399b4 mov r6, r1 | r6 = r1;
0x080399b8 str r3, [r1] | *(r1) = r3;
0x080399bc mov r4, r2 | r4 = r2;
0x080399c0 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x080399c4 cmp r3, 0 |
0x080399c8 cmpne r3, 0xc0000016 | __asm ("cmpne r3, 0xc0000016");
| if (r3 != 0) {
0x080399cc beq 0x80399dc |
0x080399d0 ldrh r3, [r2, 0x40] | r3 = *((r2 + 0x40));
0x080399d4 cmp r3, 9 |
| if (r3 == 9) {
0x080399d8 beq 0x8039bb0 | goto label_4;
| }
| }
0x080399dc ldrh r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x080399e0 cmp r3, 0x10 |
| if (r3 > 0x10) {
| /* switch table (17 cases) at 0x80399ec */
0x080399e4 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x080399e8 b 0x8039aa8 |
| while (r0 == 0) {
| label_0:
0x08039a40 ldr r3, [r5] | r3 = *(r5);
0x08039a44 cmp r3, 0x1000 |
| if (r3 <= 0x1000) {
0x08039a48 bgt 0x8039a80 |
0x08039a4c cmp r3, 0 |
| if (r3 < 0) {
0x08039a50 blt 0x8039b34 | goto label_5;
| }
0x08039a54 ldr r2, [r6] | r2 = *(r6);
0x08039a58 cmp r2, 0 |
| if (r2 < 0) {
0x08039a5c blt 0x8039b60 | goto label_6;
| }
0x08039a60 cmp r2, 0x20000 |
| if (r2 > 0x20000) {
0x08039a64 bgt 0x8039b88 | goto label_7;
| }
0x08039a68 cmp r3, 0 |
| if (r3 == 0) {
0x08039a6c beq 0x8039bb0 | goto label_4;
| }
0x08039a70 cmp r2, 0 |
| if (r2 == 0) {
0x08039a74 beq 0x8039bb0 | goto label_4;
| }
0x08039a78 add r0, r4, r3 | r0 = r4 + r3;
0x08039a7c pop {r4, r5, r6, pc} |
| }
0x08039a80 ldr r1, [pc, 0x158] | r1 = *(0x8039bdc);
0x08039a84 ldr r0, [pc, 0x158] | r0 = "cifs_remap_file_range";
0x08039a88 stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x08039a8c cmp r0, 0 |
| if (r0 != 0) {
0x08039a90 bne 0x8039bb8 | goto label_8;
| }
| label_2:
0x08039a94 mov r3, 0 | r3 = 0;
0x08039a98 str r3, [r6] | *(r6) = r3;
0x08039a9c mov r0, r3 | r0 = r3;
0x08039aa0 str r3, [r5] | *(r5) = r3;
0x08039aa4 pop {r4, r5, r6, pc} |
0x08039aa8 ldr r1, [pc, 0x130] | r1 = *(0x8039bdc);
0x08039aac ldr r0, [pc, 0x134] | r0 = .data;
0x08039ab0 stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x08039ab4 cmp r0, 0 |
0x08039ab8 beq 0x8039a40 |
| }
0x08039abc ldrh r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x08039ac0 stmdaeq r6, {r2, r8, fp, pc} | __asm ("stmdaeq r6, {r2, r8, fp, pc}");
0x08039ac4 stmdaeq r6, {r2, r8, fp, pc} | __asm ("stmdaeq r6, {r2, r8, fp, pc}");
0x08039ac8 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x08039acc b 0x8039a40 | goto label_0;
| label_5:
0x08039b34 ldr r1, [pc, 0xa4] | r1 = *(0x8039bdc);
0x08039b38 ldr r0, [pc, 0xac] | r0 = .data;
0x08039b3c stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x08039b40 cmp r0, 0 |
| if (r0 != 0) {
0x08039b44 bne 0x8039bcc | goto label_9;
| }
| label_3:
0x08039b48 mov r3, 0 | r3 = 0;
0x08039b4c str r3, [r5] | *(r5) = r3;
| do {
| label_1:
0x08039b50 mov r3, 0 | r3 = 0;
0x08039b54 mov r0, r3 | r0 = r3;
0x08039b58 str r3, [r6] | *(r6) = r3;
0x08039b5c pop {r4, r5, r6, pc} |
| label_6:
0x08039b60 ldr r1, [pc, 0x78] | r1 = *(0x8039bdc);
0x08039b64 ldr r0, [pc, 0x84] | r0 = .data;
0x08039b68 stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x08039b6c cmp r0, 0 |
0x08039b70 beq 0x8039b50 |
| } while (r0 == 0);
0x08039b74 ldr r1, [r6] | r1 = *(r6);
0x08039b78 stmdaeq r6, {r4, r5, r7, r8, fp, pc} | __asm ("stmdaeq r6, {r4, r5, r7, r8, fp, pc}");
0x08039b7c stmdaeq r6, {r4, r5, r7, r8, fp, pc} | __asm ("stmdaeq r6, {r4, r5, r7, r8, fp, pc}");
0x08039b80 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x08039b84 b 0x8039b50 | goto label_1;
| label_7:
0x08039b88 ldr r1, [pc, 0x50] | r1 = *(0x8039bdc);
0x08039b8c ldr r0, [pc, 0x60] | r0 = .data;
0x08039b90 stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r6, r7, sb, fp, sp, pc}");
0x08039b94 cmp r0, 0 |
| if (r0 == 0) {
0x08039b98 beq 0x8039b50 | goto label_1;
| }
0x08039b9c ldr r1, [r6] | r1 = *(r6);
0x08039ba0 stmdaeq r6, {r2, r4, r5, r6, r7, r8, fp, pc} | __asm ("stmdaeq r6, {r2, r4, r5, r6, r7, r8, fp, pc}");
0x08039ba4 stmdaeq r6, {r2, r4, r5, r6, r7, r8, fp, pc} | __asm ("stmdaeq r6, {r2, r4, r5, r6, r7, r8, fp, pc}");
0x08039ba8 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x08039bac b 0x8039b50 | goto label_1;
| label_4:
0x08039bb0 mov r0, 0 | r0 = 0;
0x08039bb4 pop {r4, r5, r6, pc} |
| label_8:
0x08039bb8 ldr r1, [r5] | r1 = *(r5);
0x08039bbc stmdaeq r6, {r2, r4, r5, r8, fp, pc} | __asm ("stmdaeq r6, {r2, r4, r5, r8, fp, pc}");
0x08039bc0 stmdaeq r6, {r2, r4, r5, r8, fp, pc} | __asm ("stmdaeq r6, {r2, r4, r5, r8, fp, pc}");
0x08039bc4 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x08039bc8 b 0x8039a94 | goto label_2;
| label_9:
0x08039bcc ldr r1, [r5] | r1 = *(r5);
0x08039bd0 stmdaeq r6, {r2, r3, r5, r6, r8, fp, pc} | __asm ("stmdaeq r6, {r2, r3, r5, r6, r8, fp, pc}");
0x08039bd4 stmdaeq r6, {r2, r3, r5, r6, r8, fp, pc} | __asm ("stmdaeq r6, {r2, r3, r5, r6, r8, fp, pc}");
0x08039bd8 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x08039bdc b 0x8039b48 | 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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x803b09c */
| #include <stdint.h>
|
; (fcn) sym.smb2_readv_callback () | void smb2_readv_callback (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_34h;
| r0 = arg1;
| r1 = arg2;
0x0803b09c push {r4, r5, r6, r7, r8, sb, lr} |
0x0803b0a0 mov r5, r0 | r5 = r0;
0x0803b0a4 ldr r4, [r0, 0x34] | r4 = *((r0 + 0x34));
0x0803b0a8 sub sp, sp, 0x34 |
0x0803b0ac ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x0803b0b0 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0803b0b4 ldr r7, [r4, 0x68] | r7 = *((r4 + 0x68));
0x0803b0b8 ldr r8, [r4, 0x58] | r8 = *((r4 + 0x58));
0x0803b0bc ldr r3, [r3, 0x74] | r3 = *((r3 + 0x74));
0x0803b0c0 cmp r2, r7 |
0x0803b0c4 ldr r6, [r3, 0x1c] | r6 = *((r3 + 0x1c));
0x0803b0c8 ldr r3, [r4, 0x84] | r3 = *((r4 + 0x84));
0x0803b0cc str r3, [sp, 0x1c] | var_1ch = r3;
0x0803b0d0 ldr r3, [r4, 0x70] | r3 = *((r4 + 0x70));
0x0803b0d4 str r3, [sp, 0x20] | var_20h = r3;
0x0803b0d8 ldr r3, [r4, 0x80] | r3 = *((r4 + 0x80));
0x0803b0dc str r3, [sp, 0x24] | var_24h = r3;
0x0803b0e0 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x0803b0e4 str r3, [sp, 0x28] | var_28h = r3;
0x0803b0e8 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x0803b0ec str r3, [sp, 0x2c] | var_2ch = r3;
0x0803b0f0 mov r3, 0 | r3 = 0;
0x0803b0f4 str r3, [sp, 0xc] | var_ch = r3;
0x0803b0f8 str r3, [sp, 0x10] | var_10h = r3;
0x0803b0fc add r3, r4, 0x60 | r3 = r4 + 0x60;
0x0803b100 str r3, [sp, 0x14] | var_14h = r3;
0x0803b104 mov r3, 1 | r3 = 1;
0x0803b108 str r3, [sp, 0x18] | var_18h = r3;
| if (r2 != r7) {
0x0803b10c bne 0x803b29c | goto label_1;
| }
| label_0:
0x0803b110 ldr r3, [r5, 0x44] | r3 = *((r5 + 0x44));
0x0803b114 sub r3, r3, 2 | r3 -= 2;
0x0803b118 cmp r3, 0xe |
| if (r3 > 0xe) {
| /* switch table (15 cases) at 0x803b124 */
0x0803b11c ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x0803b120 b 0x803b170 |
0x0803b170 mvn r3, 4 | r3 = ~4;
0x0803b174 str r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
0x0803b178 add r3, r6, 0x5b0 | r3 = r6 + 0x5b0;
0x0803b17c add r3, r3, 4 | r3 += 4;
0x0803b180 pld [r3] | __asm ("pld [r3]");
| do {
0x0803b184 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x0803b188 add r2, r2, 1 | r2++;
0x0803b18c strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x0803b190 teq r1, 0 | __asm ("teq r1, 0");
0x0803b194 bne 0x803b184 |
| } while (r3 != 0xe);
0x0803b198 stmdaeq r6, {r2, r3, r5, r6, r8, sb, ip, sp, lr, pc} | __asm ("stmdaeq r6, {r2, r3, r5, r6, r8, sb, ip, sp, lr, pc}");
0x0803b19c stmdaeq r6, {r2, r3, r5, r6, r8, sb, ip, sp, lr, pc} | __asm ("stmdaeq r6, {r2, r3, r5, r6, r8, sb, ip, sp, lr, pc}");
0x0803b1a0 add r2, r4, 0x40 | r2 = r4 + 0x40;
0x0803b1a4 mov r0, 1 | r0 = 1;
0x0803b1a8 ldr r1, [r3] | r1 = *(r3);
0x0803b1ac stmdaeq sb, {r0, r3, r5, r6, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r3, r5, r6, r8, sb, fp, sp, pc}");
0x0803b1b0 mov r0, r5 | r0 = r5;
0x0803b1b4 stmdaeq r2, {r2, r3, r5, sb, sl, fp, ip, lr} | __asm ("stmdaeq r2, {r2, r3, r5, sb, sl, fp, ip, lr}");
0x0803b1b8 ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x0803b1bc add r1, sp, 0xc | r1 += var_ch;
0x0803b1c0 mov r0, r7 | r0 = r7;
0x0803b1c4 mov r2, 0 | r2 = 0;
0x0803b1c8 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0803b1cc blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0803b1d0 add sp, sp, 0x34 |
0x0803b1d4 pop {r4, r5, r6, r7, r8, sb, pc} |
| label_1:
0x0803b29c stmdaeq r6, {r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r6, {r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0803b2a0 stmdaeq r6, {r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r6, {r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0803b2a4 ldrb r0, [r1, 2] | r0 = *((r1 + 2));
0x0803b2a8 cmp r0, 0 |
| if (r0 != 0) {
0x0803b2ac bne 0x803b110 | goto label_0;
| }
0x0803b2b0 strb r3, [r1, 2] | *((r1 + 2)) = r3;
0x0803b2b4 stmdaeq r6, {r2, r3, r4, r5, r6, r7, r8, sl, fp, pc} | __asm ("stmdaeq r6, {r2, r3, r4, r5, r6, r7, r8, sl, fp, pc}");
0x0803b2b8 stmdaeq r6, {r2, r3, r4, r5, r6, r7, r8, sl, fp, pc} | __asm ("stmdaeq r6, {r2, r3, r4, r5, r6, r7, r8, sl, fp, pc}");
0x0803b2bc str r2, [sp, 4] | var_4h = r2;
0x0803b2c0 str r7, [sp] | *(sp) = r7;
0x0803b2c4 stmdaeq r6, {r3, r4, r5, sb, sl, fp, pc} | __asm ("stmdaeq r6, {r3, r4, r5, sb, sl, fp, pc}");
0x0803b2c8 stmdaeq r6, {r3, r4, r5, sb, sl, fp, pc} | __asm ("stmdaeq r6, {r3, r4, r5, sb, sl, fp, pc}");
0x0803b2cc mov r2, 9 | r2 = 9;
0x0803b2d0 movw r1, 0xf61 | r1 = 0xf61;
0x0803b2d4 stmdaeq sb, {r0, r2, r3, r7, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r7, r8, sb, fp, sp, pc}");
0x0803b2d8 b 0x803b110 | 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/modules/5.10.52-axis8/kernel/fs/cifs/cifs.ko @ 0x803aeb8 */
| #include <stdint.h>
|
; (fcn) sym.smb2_writev_callback () | void smb2_writev_callback (int32_t arg1) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_10h;
| r0 = arg1;
0x0803aeb8 push {r4, r5, r6, r7, r8, lr} |
0x0803aebc mov r3, 0 | r3 = 0;
0x0803aec0 mov r4, r0 | r4 = r0;
0x0803aec4 ldr r5, [r0, 0x34] | r5 = *((r0 + 0x34));
0x0803aec8 sub sp, sp, 0x10 |
0x0803aecc ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x0803aed0 ldr r7, [r0, 0x3c] | r7 = *((r0 + 0x3c));
0x0803aed4 str r3, [sp, 8] | var_8h = r3;
0x0803aed8 str r3, [sp, 0xc] | var_ch = r3;
0x0803aedc ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x0803aee0 ldr r6, [r5, 0x4c] | r6 = *((r5 + 0x4c));
0x0803aee4 ldr r3, [r3, 0x74] | r3 = *((r3 + 0x74));
0x0803aee8 cmp r2, r6 |
0x0803aeec ldr r8, [r3, 0x1c] | r8 = *((r3 + 0x1c));
| if (r2 != r6) {
0x0803aef0 bne 0x803b058 | goto label_2;
| }
| label_1:
0x0803aef4 ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x0803aef8 sub r3, r3, 2 | r3 -= 2;
0x0803aefc cmp r3, 0xe |
| if (r3 > 0xe) {
| /* switch table (15 cases) at 0x803af08 */
0x0803af00 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x0803af04 b 0x803af54 |
0x0803af54 mvn r3, 4 | r3 = ~4;
0x0803af58 str r3, [r5, 0x48] | *((r5 + 0x48)) = r3;
0x0803af5c add r3, r8, 0x5b0 | r3 = r8 + 0x5b0;
0x0803af60 add r3, r3, 8 | r3 += 8;
0x0803af64 pld [r3] | __asm ("pld [r3]");
| do {
0x0803af68 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x0803af6c add r2, r2, 1 | r2++;
0x0803af70 strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x0803af74 teq r1, 0 | __asm ("teq r1, 0");
0x0803af78 bne 0x803af68 |
| } while (r3 != 0xe);
0x0803af7c ldr r3, [r5, 0x48] | r3 = *((r5 + 0x48));
0x0803af80 cmn r3, 0x1c |
0x0803af84 beq 0x803b028 |
| while (r2 != 0) {
| label_0:
0x0803af88 stmdaeq r6, {r2, r3, r5, r6, r8, sb, ip, sp, lr, pc} | __asm ("stmdaeq r6, {r2, r3, r5, r6, r8, sb, ip, sp, lr, pc}");
0x0803af8c stmdaeq r6, {r2, r3, r5, r6, r8, sb, ip, sp, lr, pc} | __asm ("stmdaeq r6, {r2, r3, r5, r6, r8, sb, ip, sp, lr, pc}");
0x0803af90 add r2, r5, 0x1c | r2 = r5 + 0x1c;
0x0803af94 mov r0, 1 | r0 = 1;
0x0803af98 ldr r1, [r3] | r1 = *(r3);
0x0803af9c stmdaeq sb, {r0, r3, r5, r6, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r3, r5, r6, r8, sb, fp, sp, pc}");
0x0803afa0 mov r0, r4 | r0 = r4;
0x0803afa4 stmdaeq r2, {r2, r3, r5, sb, sl, fp, ip, lr} | __asm ("stmdaeq r2, {r2, r3, r5, sb, sl, fp, ip, lr}");
0x0803afa8 ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x0803afac add r1, sp, 8 | r1 += var_8h;
0x0803afb0 mov r0, r6 | r0 = r6;
0x0803afb4 mov r2, 0 | r2 = 0;
0x0803afb8 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0803afbc blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0803afc0 add sp, sp, 0x10 |
0x0803afc4 pop {r4, r5, r6, r7, r8, pc} |
0x0803b028 stmdaeq r6, {r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r6, {r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0803b02c stmdaeq r6, {r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r6, {r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0803b030 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x0803b034 cmp r2, 0 |
0x0803b038 bne 0x803af88 |
| }
0x0803b03c add r1, r8, 0x28 | r1 = r8 + 0x28;
0x0803b040 stmdaeq r6, {r4, sb, sl, fp, pc} | __asm ("stmdaeq r6, {r4, sb, sl, fp, pc}");
0x0803b044 stmdaeq r6, {r4, sb, sl, fp, pc} | __asm ("stmdaeq r6, {r4, sb, sl, fp, pc}");
0x0803b048 mov r2, 1 | r2 = 1;
0x0803b04c strb r2, [r3, 1] | *((r3 + 1)) = r2;
0x0803b050 stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r4, r6, r7, sb, fp, sp, pc}");
0x0803b054 b 0x803af88 | goto label_0;
| label_2:
0x0803b058 stmdaeq r6, {r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r6, {r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0803b05c stmdaeq r6, {r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r6, {r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0803b060 ldrb r3, [ip] | r3 = *(ip);
0x0803b064 cmp r3, 0 |
| if (r3 != 0) {
0x0803b068 bne 0x803aef4 | goto label_1;
| }
0x0803b06c str r2, [sp, 4] | var_4h = r2;
0x0803b070 mov lr, 1 | lr = 1;
0x0803b074 str r6, [sp] | *(sp) = r6;
0x0803b078 stmdaeq r6, {r3, r4, r6, r7, r8, sl, fp, pc} | __asm ("stmdaeq r6, {r3, r4, r6, r7, r8, sl, fp, pc}");
0x0803b07c stmdaeq r6, {r3, r4, r6, r7, r8, sl, fp, pc} | __asm ("stmdaeq r6, {r3, r4, r6, r7, r8, sl, fp, pc}");
0x0803b080 stmdaeq r6, {r2, r3, r4, r5, r6, r7, r8, sl, fp, pc} | __asm ("stmdaeq r6, {r2, r3, r4, r5, r6, r7, r8, sl, fp, pc}");
0x0803b084 stmdaeq r6, {r2, r3, r4, r5, r6, r7, r8, sl, fp, pc} | __asm ("stmdaeq r6, {r2, r3, r4, r5, r6, r7, r8, sl, fp, pc}");
0x0803b088 mov r2, 9 | r2 = 9;
0x0803b08c movw r1, 0x104d | r1 = 0x104d;
0x0803b090 strb lr, [ip] |
0x0803b094 stmdaeq sb, {r0, r2, r3, r7, r8, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r0, r2, r3, r7, r8, sb, fp, sp, pc}");
0x0803b098 b 0x803aef4 | goto label_1;
| }
[*] Function strcat used 1 times cifs.ko