[*] Binary protection state of cifs.ko
No RELRO No Canary found NX disabled REL No RPATH No RUNPATH Symbols
[*] Function fprintf tear down of cifs.ko
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x802e070 */
| #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;
0x0802e070 push {r4, r5, r6, r7, r8, lr} |
0x0802e074 subs r5, r1, 0 | r5 = r1 - 0;
0x0802e078 sub sp, sp, 8 |
| if (r5 == r1) {
0x0802e07c beq 0x802e194 | goto label_3;
| }
0x0802e080 stmdaeq sb, {r2, r3, r4, r5, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r4, r5, r7, sb, sl, sp, pc}");
0x0802e084 stmdaeq sb, {r2, r3, r4, r5, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r4, r5, r7, sb, sl, sp, pc}");
0x0802e088 mov r8, r0 | r8 = r0;
0x0802e08c mov r1, 0xdc0 | r1 = 0xdc0;
0x0802e090 mov r7, r2 | r7 = r2;
0x0802e094 ldr r0, [r3, 0x18] | r0 = *((r3 + 0x18));
0x0802e098 stmdaeq sb, {r2, r4, r5, r6, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r4, r5, r6, sb, sl, sp, pc}");
0x0802e09c subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x0802e0a0 beq 0x802e170 | goto label_4;
| }
0x0802e0a4 ldr r1, [r5, 0xc0] | r1 = *((r5 + 0xc0));
0x0802e0a8 ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
0x0802e0ac stmdaeq r2, {r2, r7, r8, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r2, {r2, r7, r8, sb, sl, fp, ip, lr, pc}");
0x0802e0b0 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 == r0) {
0x0802e0b4 beq 0x802e178 | goto label_5;
| }
0x0802e0b8 sub r3, r6, 1 | r3 = r6 - 1;
0x0802e0bc cmp r3, 4 |
| if (r3 > 4) {
| /* switch table (5 cases) at 0x802e0c8 */
0x0802e0c0 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x0802e0c4 b 0x802e1e0 | goto label_6;
| do {
| label_1:
0x0802e118 mov r0, r4 | r0 = r4;
0x0802e11c stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc}");
| label_0:
0x0802e120 mov r0, r5 | r0 = r5;
0x0802e124 add sp, sp, 8 |
0x0802e128 pop {r4, r5, r6, r7, r8, pc} |
| label_2:
0x0802e168 mvn r5, 0x25 | r5 = ~0x25;
0x0802e16c b 0x802e118 |
| } while (1);
| label_4:
0x0802e170 mvn r5, 0xb | r5 = ~0xb;
0x0802e174 b 0x802e120 | goto label_0;
| label_5:
0x0802e178 ldr r1, [pc, 0x88] | r1 = *(0x802e204);
0x0802e17c ldr r0, [pc, 0x8c] | r0 = .data;
0x0802e180 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x0802e184 cmp r0, 0 |
0x0802e188 bne 0x802e1c0 |
| while (1) {
0x0802e18c mvn r5, 0x15 | r5 = ~0x15;
0x0802e190 b 0x802e118 | goto label_1;
| label_3:
0x0802e194 ldr r2, [pc, 0x78] | r2 = .data;
0x0802e198 stmdaeq r5, {r2, r4, fp, ip, pc} | __asm ("stmdaeq r5, {r2, r4, fp, ip, pc}");
0x0802e19c stmdaeq r5, {r2, r4, fp, ip, pc} | __asm ("stmdaeq r5, {r2, r4, fp, ip, pc}");
0x0802e1a0 str r2, [sp] | *(sp) = r2;
0x0802e1a4 movw r1, 0x6c5 | r1 = 0x6c5;
0x0802e1a8 mov r2, 9 | r2 = 9;
0x0802e1ac stmdaeq r5, {r8, sl, ip, pc} | __asm ("stmdaeq r5, {r8, sl, ip, pc}");
0x0802e1b0 stmdaeq r5, {r8, sl, ip, pc} | __asm ("stmdaeq r5, {r8, sl, ip, pc}");
0x0802e1b4 mvn r5, 0x15 | r5 = ~0x15;
0x0802e1b8 stmdaeq sb, {r2, r3, r6, r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r6, r8, sb, sl, sp, pc}");
0x0802e1bc b 0x802e120 | goto label_0;
0x0802e1c0 stmdaeq r5, {r3, r5, fp, ip, pc} | __asm ("stmdaeq r5, {r3, r5, fp, ip, pc}");
0x0802e1c4 stmdaeq r5, {r3, r5, fp, ip, pc} | __asm ("stmdaeq r5, {r3, r5, fp, ip, pc}");
0x0802e1c8 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x0802e1cc b 0x802e18c |
| }
| label_6:
0x0802e1e0 ldr r1, [pc, 0x20] | r1 = *(0x802e204);
0x0802e1e4 ldr r0, [pc, 0x2c] | r0 = "cifs_remap_file_range";
0x0802e1e8 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x0802e1ec cmp r0, 0 |
| if (r0 == 0) {
0x0802e1f0 beq 0x802e168 | goto label_2;
| }
0x0802e1f4 mov r1, r6 | r1 = r6;
0x0802e1f8 stmdaeq r5, {r2, r3, r5, r7, fp, ip, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r7, fp, ip, pc}");
0x0802e1fc stmdaeq r5, {r2, r3, r5, r7, fp, ip, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r7, fp, ip, pc}");
0x0802e200 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x0802e204 b 0x802e168 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x8041b88 */
| #include <stdint.h>
|
; (fcn) sym.SMB2_QFS_attr () | void SMB2_QFS_attr (int32_t arg_78h, int32_t arg_7ch, int32_t arg_80h, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| 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;
| int32_t var_38h;
| int32_t var_3ch;
| int32_t var_40h;
| int32_t var_44h;
| int32_t var_48h;
| int32_t var_4ch;
| int32_t var_54h;
| r0 = arg1;
| r1 = arg2;
0x08041b88 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x08041b8c mov r5, r1 | r5 = r1;
0x08041b90 sub sp, sp, 0x54 |
0x08041b94 ldr r8, [r5, 0x24] | r8 = *((r5 + 0x24));
0x08041b98 ldr r6, [sp, 0x80] | r6 = *(arg_80h);
0x08041b9c ldr r1, [sp, 0x78] | r1 = *(arg_78h);
0x08041ba0 str r0, [sp, 0x10] | var_10h = r0;
0x08041ba4 mov r0, r8 | r0 = r8;
0x08041ba8 ldr r7, [sp, 0x7c] | r7 = *(arg_7ch);
0x08041bac str r1, [sp, 0x1c] | var_1ch = r1;
0x08041bb0 strd r2, r3, [sp, 0x14] | __asm ("strd r2, r3, [var_14h]");
0x08041bb4 stmdaeq r2, {r2, r3, r4, r6, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r4, r6, r7, r8, sb, fp, sp, lr}");
0x08041bb8 cmp r6, 4 |
0x08041bbc mov fp, r0 |
| if (r6 == 4) {
0x08041bc0 beq 0x8041da8 | goto label_2;
| }
0x08041bc4 cmp r6, 5 |
| if (r6 == 5) {
0x08041bc8 beq 0x8041db4 | goto label_3;
| }
0x08041bcc cmp r6, 0xb |
| if (r6 == 0xb) {
0x08041bd0 beq 0x8041bf4 | goto label_4;
| }
0x08041bd4 cmp r6, 1 |
| if (r6 != 1) {
0x08041bd8 moveq sb, 0x12 | sb = 0x12;
| }
| if (r6 != 1) {
0x08041bdc moveq sl, 0x32 | sl = 0x32;
| }
| if (r6 == 1) {
0x08041be0 beq 0x8041bfc | goto label_1;
| }
0x08041be4 mvn r4, 0x15 | r4 = ~0x15;
| do {
| label_0:
0x08041be8 mov r0, r4 | r0 = r4;
0x08041bec add sp, sp, 0x54 |
0x08041bf0 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x08041bf4 mov sb, 0x1c | sb = 0x1c;
0x08041bf8 mov sl, sb | sl = sb;
| label_1:
0x08041bfc ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x08041c00 cmp r3, 0 |
| if (r3 == 0) {
0x08041c04 beq 0x8041e30 | goto label_5;
| }
0x08041c08 cmp fp, 0 |
| if (fp == 0) {
0x08041c0c beq 0x8041e30 | goto label_5;
| }
0x08041c10 mov r2, fp | r2 = fp;
0x08041c14 mov r1, r5 | r1 = r5;
0x08041c18 mov r0, 0x10 | r0 = 0x10;
0x08041c1c bl 0x803ae7c | r0 = smb2_reconnect ();
0x08041c20 subs r4, r0, 0 | r4 = r0 - 0;
0x08041c24 bne 0x8041be8 |
| } while (r4 != r0);
0x08041c28 add r3, sp, 0x34 | r3 += var_34h;
0x08041c2c mov r2, fp | r2 = fp;
0x08041c30 str r3, [sp] | *(sp) = r3;
0x08041c34 mov r1, r5 | r1 = r5;
0x08041c38 add r3, sp, 0x2c | r3 += var_2ch;
0x08041c3c mov r0, 0x10 | r0 = 0x10;
0x08041c40 bl 0x803b410 | r0 = smb2_plain_req_init ();
0x08041c44 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x08041c48 bne 0x8041be8 | goto label_0;
| }
0x08041c4c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x08041c50 add r1, sl, 0x48 | r1 = sl + 0x48;
0x08041c54 ldr r2, [sp, 0x14] | r2 = var_14h;
0x08041c58 mov r0, r5 | r0 = r5;
0x08041c5c str r3, [sp, 0x24] | var_24h = r3;
0x08041c60 str r2, [r3, 0x58] | *((r3 + 0x58)) = r2;
0x08041c64 ldr r2, [sp, 0x18] | r2 = var_18h;
0x08041c68 str r2, [r3, 0x5c] | *((r3 + 0x5c)) = r2;
0x08041c6c ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x08041c70 str r2, [r3, 0x60] | *((r3 + 0x60)) = r2;
0x08041c74 strb r4, [r3, 0x49] | *((r3 + 0x49)) = r4;
0x08041c78 str r1, [r3, 0x44] | *((r3 + 0x44)) = r1;
0x08041c7c mov r1, 2 | r1 = 2;
0x08041c80 str r7, [r3, 0x64] | *((r3 + 0x64)) = r7;
0x08041c84 strb r1, [r3, 0x42] | *((r3 + 0x42)) = r1;
0x08041c88 mov r1, 0x68 | r1 = 0x68;
0x08041c8c strb r6, [r3, 0x43] | *((r3 + 0x43)) = r6;
0x08041c90 strb r1, [r3, 0x48] | *((r3 + 0x48)) = r1;
0x08041c94 ldr r3, [sp, 0x34] | r3 = var_34h;
0x08041c98 str r3, [sp, 0x28] | var_28h = r3;
0x08041c9c stmdaeq r3, {r4, r5, r7, r8, sb, ip, sp, pc} | __asm ("stmdaeq r3, {r4, r5, r7, r8, sb, ip, sp, pc}");
0x08041ca0 subs ip, r0, 0 |
0x08041ca4 add r3, sp, 0x34 | r3 += var_34h;
0x08041ca8 mov r2, fp | r2 = fp;
0x08041cac mov r1, r8 | r1 = r8;
| if (ip == r0) {
0x08041cb0 movne ip, 1 |
| }
0x08041cb4 ldr r0, [sp, 0x10] | r0 = var_10h;
0x08041cb8 lsl ip, ip, 0xb |
0x08041cbc str ip, [sp, 4] | var_4h = ip;
0x08041cc0 add ip, sp, 0x2c |
0x08041cc4 str ip, [sp, 8] | var_8h = ip;
0x08041cc8 add ip, sp, 0x20 |
0x08041ccc str ip, [sp] | *(sp) = ip;
0x08041cd0 str r4, [sp, 0x3c] | var_3ch = r4;
0x08041cd4 add ip, sp, 0x24 |
0x08041cd8 str r4, [sp, 0x40] | var_40h = r4;
0x08041cdc str r4, [sp, 0x44] | var_44h = r4;
0x08041ce0 str r4, [sp, 0x48] | var_48h = r4;
0x08041ce4 str r4, [sp, 0x4c] | var_4ch = r4;
0x08041ce8 str ip, [sp, 0x34] | var_34h = ip;
0x08041cec mov ip, 1 |
0x08041cf0 str ip, [sp, 0x38] | var_38h = ip;
0x08041cf4 stmdaeq r2, {r4, r5, r7, r8, sl, ip, sp, lr} | __asm ("stmdaeq r2, {r4, r5, r7, r8, sl, ip, sp, lr}");
0x08041cf8 mov r4, r0 | r4 = r0;
0x08041cfc ldr r0, [sp, 0x24] | r0 = var_24h;
0x08041d00 stmdaeq r2, {r3, r5, r8, sb, sl, fp, sp} | __asm ("stmdaeq r2, {r3, r5, r8, sb, sl, fp, sp}");
0x08041d04 cmp r4, 0 |
| if (r4 == 0) {
0x08041d08 bne 0x8041d70 |
0x08041d0c ldr r7, [sp, 0x2c] | r7 = var_2ch;
0x08041d10 mov r3, sb | r3 = sb;
0x08041d14 add r2, sp, 0x2c | r2 += var_2ch;
0x08041d18 ldr sb, [r7, 0x44] | sb = *((r7 + 0x44));
0x08041d1c ldrh r8, [r7, 0x42] | r8 = *((r7 + 0x42));
0x08041d20 mov r1, sb | r1 = sb;
0x08041d24 mov r0, r8 | r0 = r8;
0x08041d28 stmdaeq r3, {r3, r5, r7, sb, ip, sp, lr, pc} | __asm ("stmdaeq r3, {r3, r5, r7, sb, ip, sp, lr, pc}");
0x08041d2c subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x08041d30 bne 0x8041d90 | goto label_6;
| }
0x08041d34 sub r6, r6, 1 | r6--;
0x08041d38 cmp r6, 0xa |
| if (r6 > 0xa) {
| /* switch table (11 cases) at 0x8041d44 */
0x08041d3c ldrls pc, [pc, r6, lsl 2] | offset_0 = r6 << 2;
| pc = *((pc + offset_0));
| }
0x08041d40 b 0x8041d90 | goto label_6;
| }
0x08041d70 add r5, r5, 0x5d0 | r5 += 0x5d0;
0x08041d74 add r5, r5, 4 | r5 += 4;
0x08041d78 pld [r5] | __asm ("pld [r5]");
| do {
0x08041d7c ldrex r3, [r5] | __asm ("ldrex r3, [r5]");
0x08041d80 add r3, r3, 1 | r3++;
0x08041d84 strex r2, r3, [r5] | __asm ("strex r2, r3, [r5]");
0x08041d88 teq r2, 0 | __asm ("teq r2, 0");
0x08041d8c bne 0x8041d7c |
| } while (r6 != 0xa);
| label_6:
0x08041d90 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x08041d94 ldr r0, [sp, 0x20] | r0 = var_20h;
0x08041d98 stmdaeq r2, {r3, r5, r6, r8, sb, sl, fp, sp} | __asm ("stmdaeq r2, {r3, r5, r6, r8, sb, sl, fp, sp}");
0x08041d9c mov r0, r4 | r0 = r4;
0x08041da0 add sp, sp, 0x54 |
0x08041da4 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_2:
0x08041da8 mov sb, 8 | sb = 8;
0x08041dac mov sl, sb | sl = sb;
0x08041db0 b 0x8041bfc | goto label_1;
| label_3:
0x08041db4 mov sb, 0xc | sb = 0xc;
0x08041db8 mov sl, 0x40 | sl = 0x40;
0x08041dbc b 0x8041bfc | goto label_1;
| label_5:
0x08041e30 mvn r4, 4 | r4 = ~4;
0x08041e34 b 0x8041be8 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x80289d4 */
| #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;
0x080289d4 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x080289d8 mov fp, r3 |
0x080289dc stmdaeq sb, {r2, r3, r4, r5, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r4, r5, r7, sb, sl, sp, pc}");
0x080289e0 stmdaeq sb, {r2, r3, r4, r5, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r4, r5, r7, sb, sl, sp, pc}");
0x080289e4 sub sp, sp, 0x24 |
0x080289e8 mov r7, r2 | r7 = r2;
0x080289ec mov sl, r0 | sl = r0;
0x080289f0 mov r6, r1 | r6 = r1;
0x080289f4 mov r1, 0xdc0 | r1 = 0xdc0;
0x080289f8 ldr r0, [r3, 0x18] | r0 = *((r3 + 0x18));
0x080289fc mov r5, 0 | r5 = 0;
0x08028a00 ldr sb, [sp, 0x48] | sb = *(arg_48h);
0x08028a04 stmdaeq sb, {r2, r4, r5, r6, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r4, r5, r6, sb, sl, sp, pc}");
0x08028a08 cmp r7, 0 |
0x08028a0c str r0, [sp, 0xc] | var_ch = r0;
| if (r7 <= 0) {
0x08028a10 ble 0x8028c20 | goto label_4;
| }
0x08028a14 stmdaeq r5, {r2, r3, r5, r6, sb, ip, lr} | __asm ("stmdaeq r5, {r2, r3, r5, r6, sb, ip, lr}");
0x08028a18 stmdaeq r5, {r2, r3, r5, r6, sb, ip, lr} | __asm ("stmdaeq r5, {r2, r3, r5, r6, sb, ip, lr}");
0x08028a1c mov r4, r5 | r4 = r5;
0x08028a20 str r2, [sp, 0x10] | var_10h = r2;
0x08028a24 b 0x8028aa4 |
| while (sb != 2) {
0x08028a28 cmp sb, 1 |
| if (sb == 1) {
0x08028a2c beq 0x8028b48 | goto label_5;
| }
| label_0:
0x08028a30 ldr r3, [fp, 0xc] | r3 = *(arg_ch);
0x08028a34 add r2, sp, 0x1a | r2 += var_1ah;
0x08028a38 sub r1, r7, r4 | r1 = r7 - r4;
0x08028a3c mov r0, r8 | r0 = r8;
0x08028a40 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x08028a44 ldrh r3, [sp, 0x1a] | r3 = var_1ah;
0x08028a48 cmp r0, 0 |
| if (r0 <= 0) {
0x08028a4c bgt 0x8028a8c |
0x08028a50 ldr r0, [fp] | r0 = *(fp);
0x08028a54 ldr r1, [sp, 0x10] | r1 = var_10h;
0x08028a58 stmdaeq sb, {r2, r3, r4, r5, fp, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r4, r5, fp, sp, pc}");
0x08028a5c subs r0, r0, 0 |
0x08028a60 ldr r3, [sp, 0xc] | r3 = var_ch;
| if (r0 == r0) {
0x08028a64 movne r0, 1 | r0 = 1;
| }
0x08028a68 cmp r3, 0 |
| if (r3 != 0) {
0x08028a6c orreq r0, r0, 1 | r0 |= 1;
| }
0x08028a70 cmp r0, 0 |
| if (r0 == 0) {
0x08028a74 bne 0x8028a84 |
0x08028a78 ldrsb r3, [r8] | r3 = *(r8);
0x08028a7c cmp r3, 0 |
| if (r3 < 0) {
0x08028a80 blt 0x8028c40 | goto label_6;
| }
| }
| label_2:
0x08028a84 mov r3, 0x3f | r3 = 0x3f;
0x08028a88 mov r0, 1 | r0 = 1;
| }
| label_1:
0x08028a8c lsl r2, r5, 1 | r2 = r5 << 1;
0x08028a90 add r4, r4, r0 | r4 += r0;
0x08028a94 strh r3, [sl, r2] | *((sl + r2)) = r3;
| label_3:
0x08028a98 add r5, r5, 1 | r5++;
0x08028a9c cmp r7, r4 |
| if (r7 <= r4) {
0x08028aa0 ble 0x8028c1c | goto label_7;
| }
0x08028aa4 ldrb r3, [r6, r4] | r3 = *((r6 + r4));
0x08028aa8 add r8, r6, r4 | r8 = r6 + r4;
0x08028aac cmp r3, 0 |
| if (r3 == 0) {
0x08028ab0 beq 0x8028c1c | goto label_7;
| }
0x08028ab4 cmp sb, 2 |
0x08028ab8 bne 0x8028a28 |
| }
0x08028abc cmp r3, 0x3f |
| if (r3 > 0x3f) {
0x08028ac0 bhi 0x8028b34 | goto label_8;
| }
0x08028ac4 cmp r3, 0x29 |
| if (r3 < 0x29) {
0x08028ac8 bls 0x8028a30 | goto label_0;
| }
0x08028acc sub r3, r3, 0x2a | r3 -= 0x2a;
0x08028ad0 cmp r3, 0x15 |
| if (r3 > 0x15) {
| /* switch table (22 cases) at 0x8028adc */
0x08028ad4 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x08028ad8 b 0x8028a30 | goto label_0;
| label_8:
0x08028b34 cmp r3, 0x7c |
0x08028b38 movweq r3, 0xf07c | __asm ("movweq r3, 0xf07c");
| if (r3 == 0x7c) {
0x08028b3c moveq r0, 1 | r0 = 1;
| goto label_9;
| }
| if (r3 == 0x7c) {
| label_9:
0x08028b40 beq 0x8028a8c | goto label_1;
| }
0x08028b44 b 0x8028a30 | goto label_0;
| label_5:
0x08028b48 sub r2, r7, 1 | r2 = r7 - 1;
0x08028b4c sub r1, r3, 1 | r1 = r3 - 1;
0x08028b50 cmp r2, r4 |
| if (r2 != r4) {
0x08028b54 moveq r2, sb | r2 = sb;
| }
| if (r2 == r4) {
0x08028b58 ldrbne r2, [r8, 1] | r2 = *((r8 + 1));
| }
| if (r2 == r4) {
0x08028b5c subne r2, r2, 0x5c | r2 -= 0x5c;
| }
0x08028b60 clzne r2, r2 | __asm ("clzne r2, r2");
| if (r2 == r4) {
0x08028b64 lsrne r2, r2, 5 | r2 >>= 5;
| }
0x08028b68 cmp r1, 0x1e |
| if (r1 < 0x1e) {
0x08028b6c bls 0x8028cc8 | goto label_10;
| }
0x08028b70 cmp r3, 0x3f |
| if (r3 <= 0x3f) {
0x08028b74 bhi 0x8028c08 |
0x08028b78 sub r3, r3, 0x20 | r3 -= 0x20;
0x08028b7c cmp r3, 0x1f |
| if (r3 > 0x1f) {
| /* switch table (32 cases) at 0x8028b88 */
0x08028b80 ldrls pc, [pc, r3, lsl 2] | offset_1 = r3 << 2;
| pc = *((pc + offset_1));
| }
0x08028b84 b 0x8028a30 | goto label_0;
| }
0x08028c08 cmp r3, 0x7c |
| if (r3 != 0x7c) {
0x08028c0c moveq r0, 1 | r0 = 1;
| }
0x08028c10 movweq r3, 0xf027 | __asm ("movweq r3, 0xf027");
| if (r3 == 0x7c) {
0x08028c14 beq 0x8028a8c | goto label_1;
| }
0x08028c18 b 0x8028a30 | goto label_0;
| label_7:
0x08028c1c add sl, sl, r5, lsl 1 | sl += (r5 << 1);
| label_4:
0x08028c20 mov r3, 0 | r3 = 0;
0x08028c24 ldr r0, [sp, 0xc] | r0 = var_ch;
0x08028c28 strb r3, [sl] | *(sl) = r3;
0x08028c2c strb r3, [sl, 1] | *((sl + 1)) = r3;
0x08028c30 stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc}");
0x08028c34 mov r0, r5 | r0 = r5;
0x08028c38 add sp, sp, 0x24 |
0x08028c3c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x08028c40 mov r1, 6 | r1 = 6;
0x08028c44 add r2, sp, 0x1c | r2 += var_1ch;
0x08028c48 mov r0, r8 | r0 = r8;
0x08028c4c stmdaeq sb, {r3, r6, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r3, r6, sb, fp, sp, pc}");
0x08028c50 subs r1, r0, 0 | r1 = r0 - 0;
| if (r1 < r0) {
0x08028c54 blt 0x8028a84 | goto label_2;
| }
0x08028c58 mov r0, r8 | r0 = r8;
0x08028c5c ldr r8, [sp, 0xc] | r8 = var_ch;
0x08028c60 mov r2, 6 | r2 = 6;
0x08028c64 str r2, [sp] | *(sp) = r2;
0x08028c68 mov r3, r8 | r3 = r8;
0x08028c6c mov r2, 1 | r2 = 1;
0x08028c70 str r1, [sp, 0x14] | var_14h = r1;
0x08028c74 stmdaeq sb, {r2, r3, r6, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r6, sb, fp, sp, pc}");
0x08028c78 cmp r0, 0 |
| if (r0 < 0) {
0x08028c7c blt 0x8028a84 | goto label_2;
| }
0x08028c80 ldr r1, [sp, 0x14] | r1 = var_14h;
0x08028c84 lsl r3, r5, 1 | r3 = r5 << 1;
0x08028c88 ldrh r2, [r8] | r2 = *(r8);
0x08028c8c add r0, sl, r3 | r0 = sl + r3;
0x08028c90 add r4, r4, r1 | r4 += r1;
0x08028c94 cmp r1, 3 |
| if (r1 > 3) {
0x08028c98 ble 0x8028d20 |
0x08028c9c cmp r1, 4 |
0x08028ca0 add r3, r3, 2 | r3 += 2;
0x08028ca4 strh r2, [r0] | *(r0) = r2;
| if (r1 != 4) {
0x08028ca8 beq 0x8028d14 |
0x08028cac ldr r1, [sp, 0xc] | r1 = var_ch;
0x08028cb0 add r5, r5, 2 | r5 += 2;
0x08028cb4 ldrh r2, [r1, 2] | r2 = *((r1 + 2));
0x08028cb8 strh r2, [sl, r3] | *((sl + r3)) = r2;
0x08028cbc ldrh r3, [r1, 4] | r3 = *((r1 + 4));
0x08028cc0 strh r3, [r0, 4] | *((r0 + 4)) = r3;
0x08028cc4 b 0x8028a98 | goto label_3;
| label_10:
0x08028cc8 sub r3, r3, 0x1000 | r3 -= 0x1000;
0x08028ccc mov r0, 1 | r0 = 1;
0x08028cd0 uxth r3, r3 | r3 = (int16_t) r3;
0x08028cd4 b 0x8028a8c | goto label_1;
| }
0x08028d14 ldr r2, [sp, 0xc] | r2 = var_ch;
0x08028d18 add r5, r5, 1 | r5++;
0x08028d1c ldrh r2, [r2, 2] | r2 = *((r2 + 2));
| }
0x08028d20 strh r2, [sl, r3] | *((sl + r3)) = r2;
0x08028d24 b 0x8028a98 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x801d658 */
| #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;
0x0801d658 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0801d65c mov r5, r1 | r5 = r1;
0x0801d660 mov r4, r0 | r4 = r0;
0x0801d664 ldr r7, [r2, 0x1f8] | r7 = *((r2 + 0x1f8));
0x0801d668 sub sp, sp, 0x14 |
0x0801d66c mov fp, r3 |
0x0801d670 mov r0, r7 | r0 = r7;
0x0801d674 ldrb sl, [sp, 0x38] | sl = *(arg_38h);
0x0801d678 ldr r8, [sp, 0x3c] | r8 = *(arg_3ch);
0x0801d67c stmdaeq r1, {r3, r7, fp, sp} | __asm ("stmdaeq r1, {r3, r7, fp, sp}");
0x0801d680 mov r2, 0x78 | r2 = 0x78;
0x0801d684 mov r1, 0 | r1 = 0;
0x0801d688 mov sb, r0 | sb = r0;
0x0801d68c mov r0, r4 | r0 = r4;
0x0801d690 stmdaeq sb, {r2, r4, r5, r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r4, r5, r8, sb, sl, sp, pc}");
0x0801d694 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x0801d698 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x0801d69c mov r6, sp | r6 = sp;
0x0801d6a0 ldrb r3, [r5, 0x3c] | r3 = *((r5 + 0x3c));
0x0801d6a4 cmp r3, 0 |
| if (r3 == 0) {
0x0801d6a8 movne r3, 2 | r3 = 2;
| }
| if (r3 == 0) {
0x0801d6ac strne r3, [r4] | *(r4) = r3;
| }
0x0801d6b0 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x0801d6b4 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0801d6b8 orrs r1, r2, r3 | r1 = r2 | r3;
| if (r1 == r2) {
0x0801d6bc beq 0x801d7bc | goto label_2;
| }
0x0801d6c0 mov r0, r6 | r0 = r6;
0x0801d6c4 stmdaeq r2, {r2, r4, fp, lr} | __asm ("stmdaeq r2, {r2, r4, fp, lr}");
0x0801d6c8 add ip, r4, 0x40 |
0x0801d6cc ldm r6, {r0, r1, r2, r3} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
| r3 = *((r6 + 12));
0x0801d6d0 stm ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
| do {
0x0801d6d4 ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x0801d6d8 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x0801d6dc mov r0, r6 | r0 = r6;
0x0801d6e0 stmdaeq r2, {r2, r4, fp, lr} | __asm ("stmdaeq r2, {r2, r4, fp, lr}");
0x0801d6e4 add ip, r4, 0x60 |
0x0801d6e8 ldm r6, {r0, r1, r2, r3} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
| r3 = *((r6 + 12));
0x0801d6ec stm ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x0801d6f0 mov r0, r6 | r0 = r6;
0x0801d6f4 ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x0801d6f8 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x0801d6fc stmdaeq r2, {r2, r4, fp, lr} | __asm ("stmdaeq r2, {r2, r4, fp, lr}");
0x0801d700 add ip, r4, 0x50 |
0x0801d704 ldm r6, {r0, r1, r2, r3} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
| r3 = *((r6 + 12));
0x0801d708 cmp fp, 0 |
0x0801d70c stm ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
| if (fp != 0) {
0x0801d710 beq 0x801d758 |
0x0801d714 ldr r3, [sb, 0x24] | r3 = *((sb + 0x24));
0x0801d718 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0801d71c ldr r2, [r3, 0x1c4] | r2 = *((r3 + 0x1c4));
0x0801d720 ldr r3, [r4, 0x60] | r3 = *((r4 + 0x60));
0x0801d724 adds r3, r3, r2 | r3 += r2;
0x0801d728 str r3, [r4, 0x60] | *((r4 + 0x60)) = r3;
0x0801d72c ldr r3, [r4, 0x64] | r3 = *((r4 + 0x64));
0x0801d730 adc r3, r3, r2, asr 31 | __asm ("adc r3, r3, r2, asr 31");
0x0801d734 str r3, [r4, 0x64] | *((r4 + 0x64)) = r3;
0x0801d738 ldr r2, [r4, 0x54] | r2 = *((r4 + 0x54));
0x0801d73c ldr r1, [sb, 0x24] | r1 = *((sb + 0x24));
0x0801d740 ldr r1, [r1, 0x20] | r1 = *((r1 + 0x20));
0x0801d744 ldr r1, [r1, 0x1c4] | r1 = *((r1 + 0x1c4));
0x0801d748 adds r3, r0, r1 | r3 = r0 + r1;
0x0801d74c str r3, [r4, 0x50] | *((r4 + 0x50)) = r3;
0x0801d750 adc r3, r2, r1, asr 31 | __asm ("adc r3, r2, r1, asr 31");
0x0801d754 str r3, [r4, 0x54] | *((r4 + 0x54)) = r3;
| }
0x0801d758 ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x0801d75c ldr r2, [r5, 0x34] | r2 = *((r5 + 0x34));
0x0801d760 str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x0801d764 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0801d768 mov r3, 0x1d |
0x0801d76c movt r3, 0xa000 | r3 = 0x-5fffffe3;
0x0801d770 ldr r2, [r5, 0x28] | r2 = *((r5 + 0x28));
0x0801d774 cmp r8, r3 |
0x0801d778 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x0801d77c strd r2, r3, [r4, 0x18] | __asm ("strd r2, r3, [r4, 0x18]");
0x0801d780 ldr r3, [r5] | r3 = *(r5);
0x0801d784 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x0801d788 str r2, [r4, 0x24] | *((r4 + 0x24)) = r2;
0x0801d78c str r3, [r4, 0x20] | *((r4 + 0x20)) = r3;
0x0801d790 ldr r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x0801d794 str r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
| if (r8 == r3) {
0x0801d798 beq 0x801d7c8 | goto label_3;
| }
0x0801d79c sub r8, r8, 0x80000023 | r8 -= 0x80000023;
0x0801d7a0 cmp r8, 3 |
| if (r8 > 3) {
| /* switch table (4 cases) at 0x801d7ac */
0x0801d7a4 ldrls pc, [pc, r8, lsl 2] | offset_0 = r8 << 2;
| pc = *((pc + offset_0));
| }
0x0801d7a8 b 0x801d880 | goto label_4;
| label_2:
0x0801d7bc add r0, r4, 0x40 | r0 = r4 + 0x40;
0x0801d7c0 stmdaeq sb, {r2, r7, r8, fp, sp, pc} | __asm ("stmdaeq sb, {r2, r7, r8, fp, sp, pc}");
0x0801d7c4 b 0x801d6d4 |
| } while (1);
| label_3:
0x0801d7c8 ldrh r2, [r7, 0x30] | r2 = *((r7 + 0x30));
0x0801d7cc mov r1, 0xa | r1 = 0xa;
0x0801d7d0 ldrh r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x0801d7d4 str r1, [r4, 0x3c] | *((r4 + 0x3c)) = r1;
0x0801d7d8 orr r3, r3, r2 | r3 |= r2;
0x0801d7dc orr r3, r3, 0xa000 | r3 |= 0xa000;
0x0801d7e0 strh r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
| do {
| label_0:
0x0801d7e4 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x0801d7e8 str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
0x0801d7ec ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x0801d7f0 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x0801d7f4 add sp, sp, 0x14 |
0x0801d7f8 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x0801d880 cmp sl, 0 |
| if (sl == 0) {
0x0801d884 beq 0x801d89c | goto label_5;
| }
0x0801d888 mov r2, 0xa000 | r2 = 0xa000;
0x0801d88c mov r3, 0xa | r3 = 0xa;
0x0801d890 strh r2, [r4, 0x30] | *((r4 + 0x30)) = r2;
0x0801d894 str r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
0x0801d898 b 0x801d7e4 |
| } while (1);
| label_5:
0x0801d89c ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0801d8a0 tst r2, 0x10 |
| if ((r2 & 0x10) == 0) {
0x0801d8a4 beq 0x801d8d8 | goto label_6;
| }
0x0801d8a8 ldrh r3, [r7, 0x32] | r3 = *((r7 + 0x32));
0x0801d8ac mov r2, 4 | r2 = 4;
0x0801d8b0 str r2, [r4, 0x3c] | *((r4 + 0x3c)) = r2;
0x0801d8b4 orr r3, r3, 0x4000 | r3 |= 0x4000;
0x0801d8b8 strh r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x0801d8bc ldrb r3, [sb, 0x645] | r3 = *((sb + 0x645));
0x0801d8c0 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x0801d8c4 bne 0x801d7e4 | goto label_0;
| }
| label_1:
0x0801d8c8 ldr r3, [r4] | r3 = *(r4);
0x0801d8cc orr r3, r3, 0x10 | r3 |= 0x10;
0x0801d8d0 str r3, [r4] | *(r4) = r3;
0x0801d8d4 b 0x801d7e4 | goto label_0;
| label_6:
0x0801d8d8 tst r2, 1 |
0x0801d8dc ldrh r2, [r7, 0x30] | r2 = *((r7 + 0x30));
0x0801d8e0 mov r1, 0x8000 |
0x0801d8e4 movt r1, 0xffff | r1 = 0x-8000;
0x0801d8e8 orr r0, r2, r1 | r0 = r2 | r1;
0x0801d8ec bicne r2, r2, 0x92 | __asm ("bicne r2, r2, 0x92");
| if ((r2 & 1) == 0) {
0x0801d8f0 orrne r2, r2, r1 | r2 |= r1;
| }
0x0801d8f4 strh r0, [r4, 0x30] | *((r4 + 0x30)) = r0;
0x0801d8f8 mov r0, 8 | r0 = 8;
0x0801d8fc strhne r2, [r4, 0x30] | __asm ("strhne r2, [r4, 0x30]");
0x0801d900 str r0, [r4, 0x3c] | *((r4 + 0x3c)) = r0;
0x0801d904 cmp r3, 0 |
| if (r3 != 0) {
0x0801d908 bne 0x801d7e4 | goto label_0;
| }
0x0801d90c ldrb r3, [sb, 0x645] | r3 = *((sb + 0x645));
0x0801d910 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x0801d914 bne 0x801d7e4 | goto label_0;
| }
0x0801d918 ldrb r3, [r5, 0x3c] | r3 = *((r5 + 0x3c));
0x0801d91c cmp r3, 0 |
| if (r3 != 0) {
0x0801d920 bne 0x801d7e4 | goto label_0;
| }
0x0801d924 stmdaeq r4, {ip, sp, lr} | __asm ("stmdaeq r4, {ip, sp, lr}");
0x0801d928 stmdaeq r4, {ip, sp, lr} | __asm ("stmdaeq r4, {ip, sp, lr}");
0x0801d92c stmdaeq r6, {r3, r4, r5, r6, r8, fp, sp, pc} | __asm ("stmdaeq r6, {r3, r4, r5, r6, r8, fp, sp, pc}");
0x0801d930 stmdaeq r6, {r3, r4, r5, r6, r8, fp, sp, pc} | __asm ("stmdaeq r6, {r3, r4, r5, r6, r8, fp, sp, pc}");
0x0801d934 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x0801d938 cmp r0, 0 |
| if (r0 == 0) {
0x0801d93c beq 0x801d8c8 | goto label_1;
| }
0x0801d940 ldr r1, [r4, 0x38] | r1 = *((r4 + 0x38));
0x0801d944 stmdaeq r5, {r3, r4, r5, r7, r8, sb, sl, lr} | __asm ("stmdaeq r5, {r3, r4, r5, r7, r8, sb, sl, lr}");
0x0801d948 stmdaeq r5, {r3, r4, r5, r7, r8, sb, sl, lr} | __asm ("stmdaeq r5, {r3, r4, r5, r7, r8, sb, sl, lr}");
0x0801d94c stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x0801d950 b 0x801d8c8 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x80138b4 */
| #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;
0x080138b4 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x080138b8 mov r8, r0 | r8 = r0;
0x080138bc mov r7, r1 | r7 = r1;
0x080138c0 sub sp, sp, 0x7c |
0x080138c4 ldr r5, [r3, 0x1c] | r5 = *((r3 + 0x1c));
0x080138c8 ldr r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x080138cc str r2, [sp, 0x10] | var_10h = r2;
0x080138d0 ldr sb, [r3, 0x1f8] | sb = *((r3 + 0x1f8));
0x080138d4 ldr r2, [sp, 0xa8] | r2 = *(arg_a8h);
0x080138d8 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x080138dc ldr r4, [sp, 0xa0] | r4 = *(arg_a0h);
0x080138e0 ldr sl, [r3, 0x20] | sl = *((r3 + 0x20));
0x080138e4 mov r3, 0 | r3 = 0;
0x080138e8 str r3, [r2] | *(r2) = r3;
0x080138ec str r3, [sp, 0x24] | var_24h = r3;
0x080138f0 ldrh r3, [sp, 0xa4] | r3 = *(arg_a4h);
0x080138f4 str r3, [sp, 0x14] | var_14h = r3;
0x080138f8 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x080138fc ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x08013900 ldrb r3, [r3, 0x1b0] | r3 = *((r3 + 0x1b0));
0x08013904 and r3, r3, 1 | r3 &= 1;
0x08013908 lsl r3, r3, 1 | r3 <<= 1;
0x0801390c str r3, [r2] | *(r2) = r3;
0x08013910 ldr r3, [r1, 0x5c] | r3 = *((r1 + 0x5c));
0x08013914 ldr r0, [r3, 0x1f8] | r0 = *((r3 + 0x1f8));
0x08013918 stmdaeq r1, {r3, r7, fp, sp} | __asm ("stmdaeq r1, {r3, r7, fp, sp}");
0x0801391c movw r3, 0x53c | r3 = 0x53c;
0x08013920 ldrh r1, [r0, r3] | r1 = *((r0 + r3));
0x08013924 mov r0, r7 | r0 = r7;
0x08013928 ubfx r1, r1, 1, 1 | r1 = (r1 >> 1) & ((1 << 1) - 1);
0x0801392c stmdaeq r1, {r3, r4, r6, r8, sl, ip, sp} | __asm ("stmdaeq r1, {r3, r4, r6, r8, sl, ip, sp}");
0x08013930 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 == r0) {
0x08013934 beq 0x8013de0 | goto label_5;
| }
0x08013938 ldrb r3, [r5, 0x645] | r3 = *((r5 + 0x645));
0x0801393c tst r3, 1 |
| if ((r3 & 1) != 0) {
0x08013940 beq 0x8013970 |
0x08013944 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x08013948 ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x0801394c ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x08013950 ldr r2, [r2, 0x28] | r2 = *((r2 + 0x28));
0x08013954 ldr r2, [r2, 0x30] | r2 = *((r2 + 0x30));
0x08013958 tst r2, r3 |
| if ((r2 & r3) == 0) {
0x0801395c beq 0x8013970 | goto label_2;
| }
0x08013960 ldrb r3, [r5, 0x648] | r3 = *((r5 + 0x648));
0x08013964 str r3, [sp, 0x1c] | var_1ch = r3;
0x08013968 cmp r3, 0 |
| if (r3 == 0) {
0x0801396c beq 0x8013cb4 | goto label_6;
| }
| }
| label_2:
0x08013970 add r3, r4, 1 | r3 = r4 + 1;
0x08013974 and r2, r4, 0xc0 | r2 = r4 & 0xc0;
0x08013978 tst r3, 2 |
0x0801397c lsl r3, r3, 0x1f | r3 <<= 0x1f;
| if ((r3 & 2) == 0) {
0x08013980 orrne r3, r3, 0x40000000 | r3 |= 0x40000000;
| }
0x08013984 cmp r2, 0xc0 |
| if (r2 != 0xc0) {
0x08013988 moveq fp, 2 |
| }
| if (r2 != 0xc0) {
0x0801398c beq 0x80139ac |
0x08013990 and r2, r4, 0x240 | r2 = r4 & 0x240;
0x08013994 cmp r2, 0x240 |
| if (r2 != 0x240) {
0x08013998 moveq fp, 5 |
| }
| if (r2 == 0x240) {
0x0801399c beq 0x80139ac | goto label_7;
| }
0x080139a0 tst r4, 0x40 |
| if ((r4 & 0x40) != 0) {
0x080139a4 moveq fp, 5 |
| }
| if ((r4 & 0x40) != 0) {
0x080139a8 movne fp, 3 | goto label_7;
| }
| }
| label_7:
0x080139ac ldr r2, [sl, 0x24] | r2 = *((sl + 0x24));
0x080139b0 str r3, [sp, 0x18] | var_18h = r3;
0x080139b4 ldr r4, [r2, 0xd8] | r4 = *((r2 + 0xd8));
0x080139b8 cmp r4, 0 |
| if (r4 != 0) {
0x080139bc mvneq fp, 0x25 |
| }
| if (r4 == 0) {
0x080139c0 beq 0x8013ba4 | goto label_0;
| }
0x080139c4 stmdaeq sb, {r2, r3, r4, r5, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r4, r5, r7, sb, sl, sp, pc}");
0x080139c8 stmdaeq sb, {r2, r3, r4, r5, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r4, r5, r7, sb, sl, sp, pc}");
0x080139cc mov r1, 0xcc0 | r1 = 0xcc0;
0x080139d0 ldr r0, [r2, 0x1c] | r0 = *((r2 + 0x1c));
0x080139d4 stmdaeq sb, {r2, r4, r5, r6, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r4, r5, r6, sb, sl, sp, pc}");
0x080139d8 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x080139dc beq 0x8013e10 | goto label_8;
| }
0x080139e0 ldrb r2, [r5, 0x645] | r2 = *((r5 + 0x645));
0x080139e4 ldr r3, [sp, 0x18] | r3 = var_18h;
0x080139e8 tst r2, 1 |
| if ((r2 & 1) == 0) {
0x080139ec movne r2, 0x40 | r2 = 0x40;
| }
| if ((r2 & 1) == 0) {
0x080139f0 bne 0x8013a08 |
0x080139f4 ldr r2, [sp, 0x14] | r2 = var_14h;
0x080139f8 tst r2, 0x92 |
0x080139fc mov r2, 0x40 |
0x08013a00 movt r2, 0x1000 | r2 = 0x10000040;
| if ((r2 & 0x92) != 0) {
0x08013a04 movne r2, 0x40 | r2 = 0x40;
| goto label_9;
| }
| }
| label_9:
0x08013a08 cmp sb, 0 |
0x08013a0c str r3, [sp, 0x34] | var_34h = r3;
0x08013a10 str r5, [sp, 0x28] | var_28h = r5;
0x08013a14 str sb, [sp, 0x2c] | var_2ch = sb;
| if (sb != 0) {
0x08013a18 beq 0x8013a34 |
0x08013a1c mov r0, sb | r0 = sb;
0x08013a20 str r2, [sp, 0x18] | var_18h = r2;
0x08013a24 stmdaeq r2, {r3, r4, r5, r8, fp, ip, sp} | __asm ("stmdaeq r2, {r3, r4, r5, r8, fp, ip, sp}");
0x08013a28 ldr r2, [sp, 0x18] | r2 = var_18h;
0x08013a2c cmp r0, 0 |
| if (r0 != 0) {
0x08013a30 orrne r2, r2, 0x4000 | r2 |= 0x4000;
| goto label_10;
| }
| }
| label_10:
0x08013a34 ldr r3, [sp, 0xac] | r3 = *(arg_ach);
0x08013a38 add r1, sp, 0x28 | r1 += var_28h;
0x08013a3c str r3, [sp, 0x40] | var_40h = r3;
0x08013a40 ldr r3, [sp, 0x14] | r3 = var_14h;
0x08013a44 strh r3, [sp, 0x44] | var_44h = r3;
0x08013a48 ldrb r3, [sp, 0x46] | r3 = var_46h;
0x08013a4c str r2, [sp, 0x38] | var_38h = r2;
0x08013a50 str fp, [sp, 0x30] | var_30h = fp;
0x08013a54 bfc r3, 0, 1 | value_0 = BIT_MASK (1, );
| value_0 = ~value_0;
| r3 &= value_0;
0x08013a58 strb r3, [sp, 0x46] | var_46h = r3;
0x08013a5c ldr r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x08013a60 ldr r2, [sp, 0xa8] | r2 = *(arg_a8h);
0x08013a64 ldr r0, [sp, 0x10] | r0 = var_10h;
0x08013a68 ldr fp, [r3, 0xd8] | fp = *((r3 + 0xd8));
0x08013a6c mov r3, r4 | r3 = r4;
0x08013a70 str r6, [sp, 0x3c] | var_3ch = r6;
0x08013a74 blx fp | r0 = fp (r0, r2, r3);
0x08013a78 subs fp, r0, 0 |
| if (fp != r0) {
0x08013a7c bne 0x8013ba4 | goto label_0;
| }
0x08013a80 ldrb r2, [r5, 0x645] | r2 = *((r5 + 0x645));
0x08013a84 tst r2, 1 |
| if ((r2 & 1) != 0) {
0x08013a88 addeq r3, sp, 0x24 | r3 += var_24h;
| }
| if ((r2 & 1) != 0) {
0x08013a8c streq r3, [sp, 0x18] | var_18h = r3;
| }
| if ((r2 & 1) == 0) {
0x08013a90 beq 0x8013bf8 | goto label_11;
| }
0x08013a94 ldr r3, [sp, 0xa8] | r3 = *(arg_a8h);
0x08013a98 ldr r2, [r3] | r2 = *(r3);
0x08013a9c tst r2, 0x20000 |
| if ((r2 & 0x20000) != 0) {
0x08013aa0 addeq r3, sp, 0x24 | r3 += var_24h;
| }
| if ((r2 & 0x20000) != 0) {
0x08013aa4 streq r3, [sp, 0x18] | var_18h = r3;
| }
| if ((r2 & 0x20000) != 0) {
0x08013aa8 beq 0x8013b58 |
0x08013aac str fp, [sp, 0x70] | var_70h = fp;
0x08013ab0 mvn r0, 0 | r0 = ~0;
0x08013ab4 str fp, [sp, 0x74] | var_74h = fp;
0x08013ab8 mvn r1, 0 | r1 = ~0;
0x08013abc ldr r3, [sp, 0x14] | r3 = var_14h;
0x08013ac0 str r3, [sp, 0x60] | var_60h = r3;
0x08013ac4 ldr r3, [sb, 0x34] | r3 = *((sb + 0x34));
0x08013ac8 str fp, [sp, 0x6c] | var_6ch = fp;
0x08013acc tst r3, 2 |
0x08013ad0 mov r3, sp | r3 = sp;
0x08013ad4 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08013ad8 str fp, [sp, 0x68] | var_68h = fp;
0x08013adc bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08013ae0 str fp, [sp, 0x64] | var_64h = fp;
0x08013ae4 strd r0, r1, [sp, 0x48] | __asm ("strd r0, r1, [var_48h]");
0x08013ae8 strd r0, r1, [sp, 0x50] | __asm ("strd r0, r1, [var_50h]");
0x08013aec strd r0, r1, [sp, 0x58] | __asm ("strd r0, r1, [var_58h]");
| if ((r3 & 2) == 0) {
0x08013af0 beq 0x8013d70 | goto label_12;
| }
0x08013af4 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x08013af8 ldr r2, [r2, 0x340] | r2 = *((r2 + 0x340));
0x08013afc ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x08013b00 str r2, [sp, 0x68] | var_68h = r2;
0x08013b04 ldrh r2, [r8] | r2 = *(r8);
0x08013b08 tst r2, 0x400 |
| if ((r2 & 0x400) != 0) {
0x08013b0c ldreq r2, [r3, 0xc] | r2 = *((r3 + 0xc));
| }
| if ((r2 & 0x400) == 0) {
0x08013b10 ldrne r2, [r8, 8] | r2 = *((r8 + 8));
| }
| if ((r2 & 0x400) != 0) {
0x08013b14 ldreq r2, [r2, 0x340] | r2 = *((r2 + 0x340));
| }
| if ((r2 & 0x400) != 0) {
0x08013b18 ldreq r2, [r2, 0x20] | r2 = *((r2 + 0x20));
| }
0x08013b1c str r2, [sp, 0x6c] | var_6ch = r2;
| label_3:
0x08013b20 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x08013b24 add r2, sp, 0x48 | r2 += var_48h;
0x08013b28 ldr r0, [sp, 0x10] | r0 = var_10h;
0x08013b2c mov r1, r5 | r1 = r5;
0x08013b30 ldr r3, [r3, 0x244] | r3 = *((r3 + 0x244));
0x08013b34 str r3, [sp] | *(sp) = r3;
0x08013b38 add r3, sp, 0x24 | r3 += var_24h;
0x08013b3c str r3, [sp, 0x18] | var_18h = r3;
0x08013b40 ldr r3, [sp, 0xac] | r3 = *(arg_ach);
0x08013b44 ldrh r3, [r3] | r3 = *(r3);
0x08013b48 stmdaeq r0, {r2, r5, r8, sb, sp, pc} | __asm ("stmdaeq r0, {r2, r5, r8, sb, sp, pc}");
0x08013b4c ldrb r3, [r5, 0x645] | r3 = *((r5 + 0x645));
0x08013b50 tst r3, 1 |
| if ((r3 & 1) == 0) {
0x08013b54 beq 0x8013bf8 | goto label_11;
| }
| }
0x08013b58 ldr r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x08013b5c mov r1, r6 | r1 = r6;
0x08013b60 ldr r0, [sp, 0x18] | r0 = var_18h;
0x08013b64 ldr r3, [sp, 0x10] | r3 = var_10h;
0x08013b68 stmdaeq r1, {r3, r6, r7, r8, fp, sp, lr, pc} | __asm ("stmdaeq r1, {r3, r6, r7, r8, fp, sp, lr, pc}");
0x08013b6c mov fp, r0 |
| label_1:
0x08013b70 cmp fp, 0 |
| if (fp != 0) {
0x08013b74 bne 0x8013bc4 | goto label_13;
| }
0x08013b78 ldr r3, [sp, 0x24] | r3 = var_24h;
0x08013b7c ldrh r3, [r3] | r3 = *(r3);
0x08013b80 and r3, r3, 0xf000 | r3 &= 0xf000;
0x08013b84 cmp r3, 0x4000 |
| if (r3 == 0x4000) {
0x08013b88 beq 0x8013bc0 | goto label_14;
| }
0x08013b8c mov r0, r7 | r0 = r7;
0x08013b90 mov fp, 0 |
0x08013b94 stmdaeq sb, {r3, r6, r7, fp, sp, pc} | __asm ("stmdaeq sb, {r3, r6, r7, fp, sp, pc}");
0x08013b98 mov r0, r7 | r0 = r7;
0x08013b9c ldr r1, [sp, 0x24] | r1 = var_24h;
0x08013ba0 stmdaeq sb, {r2, r3, r6, r7, fp, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r6, r7, fp, sp, pc}");
| do {
| label_0:
0x08013ba4 mov r0, r4 | r0 = r4;
0x08013ba8 stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc}");
0x08013bac mov r0, r6 | r0 = r6;
0x08013bb0 stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc}");
| label_4:
0x08013bb4 mov r0, fp | r0 = fp;
0x08013bb8 add sp, sp, 0x7c |
0x08013bbc pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_14:
0x08013bc0 mvn fp, 0x14 |
| label_13:
0x08013bc4 ldr r2, [sl, 0x24] | r2 = *((sl + 0x24));
0x08013bc8 ldr r7, [r2, 0xe0] | r7 = *((r2 + 0xe0));
0x08013bcc cmp r7, 0 |
| if (r7 != 0) {
0x08013bd0 beq 0x8013be4 |
0x08013bd4 ldr r2, [sp, 0xac] | r2 = *(arg_ach);
0x08013bd8 mov r1, r5 | r1 = r5;
0x08013bdc ldr r0, [sp, 0x10] | r0 = var_10h;
0x08013be0 blx r7 | uint32_t (*r7)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
| }
0x08013be4 ldr r0, [sp, 0x24] | r0 = var_24h;
0x08013be8 cmp r0, 0 |
0x08013bec beq 0x8013ba4 |
| } while (r0 == 0);
0x08013bf0 stmdaeq sb, {r4, r6, r7, fp, sp, pc} | __asm ("stmdaeq sb, {r4, r6, r7, fp, sp, pc}");
0x08013bf4 b 0x8013ba4 | goto label_0;
| label_11:
0x08013bf8 ldr r3, [sp, 0xac] | r3 = *(arg_ach);
0x08013bfc mov r2, r4 | r2 = r4;
0x08013c00 str r3, [sp, 4] | var_4h = r3;
0x08013c04 mov r1, r6 | r1 = r6;
0x08013c08 ldr r3, [sp, 0x10] | r3 = var_10h;
0x08013c0c str r3, [sp] | *(sp) = r3;
0x08013c10 ldr r0, [sp, 0x18] | r0 = var_18h;
0x08013c14 ldr r3, [r8, 0x1c] | r3 = *((r8 + 0x1c));
0x08013c18 stmdaeq r1, {r5, r6, r8, sb, fp, sp, lr, pc} | __asm ("stmdaeq r1, {r5, r6, r8, sb, fp, sp, lr, pc}");
0x08013c1c mov fp, r0 |
0x08013c20 ldr r0, [sp, 0x24] | r0 = var_24h;
0x08013c24 cmp r0, 0 |
| if (r0 == 0) {
0x08013c28 beq 0x8013b70 | goto label_1;
| }
0x08013c2c ldr r2, [sl, 0x24] | r2 = *((sl + 0x24));
0x08013c30 ldr r2, [r2, 0x12c] | r2 = *((r2 + 0x12c));
0x08013c34 cmp r2, 0 |
| if (r2 != 0) {
0x08013c38 beq 0x8013c44 |
0x08013c3c ldr r1, [sp, 0xac] | r1 = *(arg_ach);
0x08013c40 blx r2 | uint32_t (*r2)(uint32_t) (r1);
| }
0x08013c44 ldr r2, [sb, 0x34] | r2 = *((sb + 0x34));
0x08013c48 tst r2, 0x1000 |
| if ((r2 & 0x1000) == 0) {
0x08013c4c ldrne r2, [sp, 0x24] | r2 = var_24h;
| }
| if ((r2 & 0x1000) == 0) {
0x08013c50 ldrne r3, [sp, 0x14] | r3 = var_14h;
| }
0x08013c54 strhne r3, [r2] | __asm ("strhne r3, [r2]");
0x08013c58 ldr r3, [sp, 0xa8] | r3 = *(arg_a8h);
0x08013c5c ldr r2, [r3] | r2 = *(r3);
0x08013c60 tst r2, 0x20000 |
| if ((r2 & 0x20000) == 0) {
0x08013c64 beq 0x8013b70 | goto label_1;
| }
0x08013c68 ldr r2, [sb, 0x34] | r2 = *((sb + 0x34));
0x08013c6c tst r2, 2 |
| if ((r2 & 2) == 0) {
0x08013c70 beq 0x8013b70 | goto label_1;
| }
0x08013c74 mov r3, sp | r3 = sp;
0x08013c78 ldr r1, [sp, 0x24] | r1 = var_24h;
0x08013c7c bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08013c80 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08013c84 ldr r0, [r2, 0xc] | r0 = *((r2 + 0xc));
0x08013c88 ldr r0, [r0, 0x340] | r0 = *((r0 + 0x340));
0x08013c8c ldr r0, [r0, 0x1c] | r0 = *((r0 + 0x1c));
0x08013c90 str r0, [r1, 4] | *((r1 + 4)) = r0;
0x08013c94 ldrh r0, [r8] | r0 = *(r8);
0x08013c98 tst r0, 0x400 |
| if ((r0 & 0x400) != 0) {
0x08013c9c ldreq r2, [r2, 0xc] | r2 = *((r2 + 0xc));
| }
| if ((r0 & 0x400) == 0) {
0x08013ca0 ldrne r2, [r8, 8] | r2 = *((r8 + 8));
| }
| if ((r0 & 0x400) != 0) {
0x08013ca4 ldreq r2, [r2, 0x340] | r2 = *((r2 + 0x340));
| }
| if ((r0 & 0x400) != 0) {
0x08013ca8 ldreq r2, [r2, 0x20] | r2 = *((r2 + 0x20));
| }
0x08013cac str r2, [r1, 8] | *((r1 + 8)) = r2;
0x08013cb0 b 0x8013b70 | goto label_1;
| label_6:
0x08013cb4 ldr r3, [r5, 0x63c] | r3 = *((r5 + 0x63c));
0x08013cb8 tst r3, 0x20 |
| if ((r3 & 0x20) == 0) {
0x08013cbc beq 0x8013970 | goto label_2;
| }
0x08013cc0 ldr r3, [sp, 0x10] | r3 = var_10h;
0x08013cc4 str r3, [sp, 0xc] | var_ch = r3;
0x08013cc8 ldr r3, [sp, 0xac] | r3 = *(arg_ach);
0x08013ccc str r3, [sp, 8] | var_8h = r3;
0x08013cd0 ldr r3, [sp, 0xa8] | r3 = *(arg_a8h);
0x08013cd4 str r3, [sp, 4] | var_4h = r3;
0x08013cd8 add r3, sp, 0x24 | r3 += var_24h;
0x08013cdc str r4, [sp] | *(sp) = r4;
0x08013ce0 mov r1, r3 | r1 = r3;
0x08013ce4 str r3, [sp, 0x18] | var_18h = r3;
0x08013ce8 ldr r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x08013cec ldr r3, [sp, 0x14] | r3 = var_14h;
0x08013cf0 stmdaeq r1, {r3, r5, r7, r8, sb, sl, ip, lr} | __asm ("stmdaeq r1, {r3, r5, r7, r8, sb, sl, ip, lr}");
0x08013cf4 subs fp, r0, 0 |
| if (fp > r0) {
0x08013cf8 bgt 0x8013d88 | goto label_15;
| }
0x08013cfc cmn fp, 0x16 |
| if (fp >= 0x16) {
0x08013d00 blt 0x8013d78 |
0x08013d04 add r2, fp, 0x16 | r2 += arg_16h;
0x08013d08 cmp r2, 0x16 |
| if (r2 > 0x16) {
| /* switch table (23 cases) at 0x8013d14 */
0x08013d0c ldrls pc, [pc, r2, lsl 2] | offset_1 = r2 << 2;
| pc = *((pc + offset_1));
| }
0x08013d10 b 0x8013d88 | goto label_15;
| label_12:
0x08013d70 strd r0, r1, [sp, 0x68] | __asm ("strd r0, r1, [var_6ch]");
0x08013d74 b 0x8013b20 | goto label_3;
| }
0x08013d78 cmn fp, 0x5f |
| if (fp == 0x5f) {
0x08013d7c beq 0x8013970 | goto label_2;
| }
0x08013d80 cmn fp, 0x42 |
| if (fp == 0x42) {
0x08013d84 beq 0x8013970 | goto label_2;
| }
| label_15:
0x08013d88 mov r4, 0 | r4 = 0;
0x08013d8c b 0x8013ba4 | goto label_0;
| label_5:
0x08013de0 mvn fp, 0xb |
0x08013de4 b 0x8013bb4 | goto label_4;
| label_8:
0x08013e10 mvn fp, 0xb |
0x08013e14 b 0x8013ba4 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x802a5f8 */
| #include <stdint.h>
|
; (fcn) sym.cifs_fill_common_info () | void cifs_fill_common_info (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0802a5f8 ldr r3, [r1, 0x20] | r3 = *((r1 + 0x20));
0x0802a5fc str r3, [r0, 0x28] | *((r0 + 0x28)) = r3;
0x0802a600 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x0802a604 ldr r3, [r1, 0x24] | r3 = *((r1 + 0x24));
0x0802a608 tst r2, 0x10 |
0x0802a60c str lr, [sp, -4]! |
0x0802a610 str r3, [r0, 0x2c] | *((r0 + 0x2c)) = r3;
| if ((r2 & 0x10) == 0) {
0x0802a614 beq 0x802a6e8 | goto label_2;
| }
0x0802a618 ldrh r3, [r1, 0x32] | r3 = *((r1 + 0x32));
0x0802a61c mov ip, 4 |
0x0802a620 orr r3, r3, 0x4000 | r3 |= 0x4000;
| label_1:
0x0802a624 strh r3, [r0, 0x30] | *((r0 + 0x30)) = r3;
0x0802a628 tst r2, 0x400 |
0x0802a62c ldr r3, [r0] | r3 = *(r0);
0x0802a630 str ip, [r0, 0x3c] | *((r0 + 0x3c)) = ip;
| if ((r2 & 0x400) == 0) {
0x0802a634 beq 0x802a660 | goto label_0;
| }
0x0802a638 ldr ip, [r0, 0x70] | ip = *((r0 + 0x70));
0x0802a63c cmp ip, 0x80000014 |
| if (ip > 0x80000014) {
0x0802a640 bhi 0x802a6d8 | goto label_3;
| }
0x0802a644 cmp ip, 0x80000009 |
| if (ip < 0x80000009) {
0x0802a648 bls 0x802a720 | goto label_4;
| }
0x0802a64c sub ip, ip, 0x8000000a |
0x0802a650 movw lr, 0x501 | lr = 0x501;
0x0802a654 lsr ip, lr, ip |
0x0802a658 tst ip, 1 |
| if ((ip & 1) != 0) {
0x0802a65c bne 0x802a6e0 | goto label_5;
| }
| do {
| label_0:
0x0802a660 tst r2, 1 |
0x0802a664 orr ip, r3, 0x10 |
0x0802a668 str ip, [r0] | *(r0) = ip;
0x0802a66c mov lr, 0x200 |
0x0802a670 movt lr, 0x1000 | lr = 0x10000200;
0x0802a674 ldrhne ip, [r0, 0x30] | __asm ("ldrhne ip, [r0, 0x30]");
0x0802a678 bicne ip, ip, 0x92 | __asm ("bicne ip, ip, 0x92");
0x0802a67c strhne ip, [r0, 0x30] | __asm ("strhne ip, [r0, 0x30]");
0x0802a680 ldr ip, [r1, 0x34] | ip = *((r1 + 0x34));
0x0802a684 tst ip, lr |
| if ((ip & lr) == 0) {
0x0802a688 orrne r3, r3, 0x14 | r3 |= 0x14;
| }
| if ((ip & lr) == 0) {
0x0802a68c strne r3, [r0] | *(r0) = r3;
| }
| if ((ip & lr) == 0) {
0x0802a690 ldrne ip, [r1, 0x34] | ip = *((r1 + 0x34));
| }
0x0802a694 tst ip, 0x80 |
0x0802a698 popeq {pc} |
0x0802a69c tst r2, 4 |
0x0802a6a0 popeq {pc} |
0x0802a6a4 ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x0802a6a8 ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x0802a6ac orrs r3, r3, r2 | r3 |= r2;
| if (r3 != r3) {
0x0802a6b0 moveq r2, 1 | r2 = 1;
| }
| if (r3 != r3) {
0x0802a6b4 streq r2, [r0, 0x3c] | *((r0 + 0x3c)) = r2;
| }
0x0802a6b8 ldrheq r3, [r0, 0x30] | __asm ("ldrheq r3, [r0, 0x30]");
| if (r3 == r3) {
0x0802a6bc ldrne r3, [r0] | r3 = *(r0);
| }
0x0802a6c0 ubfxeq r3, r3, 0, 0xc | __asm ("ubfxeq r3, r3, 0, 0xc");
| if (r3 == r3) {
0x0802a6c4 orrne r3, r3, 4 | r3 |= 4;
| }
| if (r3 != r3) {
0x0802a6c8 orreq r3, r3, 0x1000 | r3 |= 0x1000;
| }
| if (r3 == r3) {
0x0802a6cc strne r3, [r0] | *(r0) = r3;
| }
0x0802a6d0 strheq r3, [r0, 0x30] | __asm ("strheq r3, [r0, 0x30]");
0x0802a6d4 pop {pc} |
| label_3:
0x0802a6d8 cmp ip, 0xa000000c |
0x0802a6dc bne 0x802a660 |
| } while (ip != 0xa000000c);
| label_5:
0x0802a6e0 orr r3, r3, 4 | r3 |= 4;
0x0802a6e4 b 0x802a660 | goto label_0;
| label_2:
0x0802a6e8 ldr ip, [r0, 0x70] | ip = *((r0 + 0x70));
0x0802a6ec mov lr, 0x1d |
0x0802a6f0 movt lr, 0xa000 | lr = 0x-5fffffe3;
0x0802a6f4 ldrh r3, [r1, 0x30] | r3 = *((r1 + 0x30));
0x0802a6f8 cmp ip, lr |
| if (ip == lr) {
0x0802a6fc beq 0x802a788 | goto label_6;
| }
0x0802a700 sub ip, ip, 0x80000023 |
0x0802a704 cmp ip, 3 |
| if (ip > 3) {
| /* switch table (4 cases) at 0x802a710 */
0x0802a708 ldrls pc, [pc, ip, lsl 2] | offset_0 = ip << 2;
| pc = *((pc + offset_0));
| }
0x0802a70c b 0x802a79c | goto label_7;
| label_4:
0x0802a720 cmp ip, 0 |
| if (ip != 0) {
0x0802a724 orreq r3, r3, 4 | r3 |= 4;
| }
0x0802a728 b 0x802a660 | goto label_0;
| do {
0x0802a73c strh r3, [r0, 0x30] | *((r0 + 0x30)) = r3;
0x0802a740 str ip, [r0, 0x3c] | *((r0 + 0x3c)) = ip;
0x0802a744 ldr r3, [r0] | r3 = *(r0);
0x0802a748 b 0x802a660 | goto label_0;
| label_6:
0x0802a788 ldrh ip, [r0, 0x30] | ip = *((r0 + 0x30));
0x0802a78c orr r3, r3, ip | r3 |= ip;
0x0802a790 mov ip, 0xa |
0x0802a794 orr r3, r3, 0xa000 | r3 |= 0xa000;
0x0802a798 b 0x802a73c |
| } while (1);
| label_7:
0x0802a79c orr r3, r3, 0x8000 | r3 |= 0x8000;
0x0802a7a0 mov ip, 8 |
0x0802a7a4 b 0x802a624 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x802a95c */
| #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;
0x0802a95c push {r4, r5, lr} |
0x0802a960 mov r4, r0 | r4 = r0;
0x0802a964 mov r5, r1 | r5 = r1;
0x0802a968 sub sp, sp, 0x9c |
0x0802a96c mov r0, r1 | r0 = r1;
0x0802a970 mov r2, sp | r2 = sp;
0x0802a974 mov r1, 0 | r1 = 0;
0x0802a978 stmdaeq r4, {r5, r7, r8, fp} | __asm ("stmdaeq r4, {r5, r7, r8, fp}");
0x0802a97c cmp r0, 0 |
| if (r0 < 0) {
0x0802a980 blt 0x802a9b0 | goto label_1;
| }
0x0802a984 ldr r2, [sp, 0x94] | r2 = var_94h;
0x0802a988 ldr r3, [sp, 0x90] | r3 = var_90h;
0x0802a98c strd r2, r3, [r4] | __asm ("strd r2, r3, [r4]");
0x0802a990 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0802a994 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x0802a998 ldr r3, [r5, 0x3c] | r3 = *((r5 + 0x3c));
0x0802a99c ldr r2, [r5, 0x40] | r2 = *((r5 + 0x40));
0x0802a9a0 str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x0802a9a4 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
| do {
| label_0:
0x0802a9a8 add sp, sp, 0x9c |
0x0802a9ac pop {r4, r5, pc} |
| label_1:
0x0802a9b0 ldr r1, [pc, 0x1c] | r1 = *(0x802a9d0);
0x0802a9b4 ldr r0, [pc, 0x1c] | r0 = "cifs_remap_file_range";
0x0802a9b8 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x0802a9bc cmp r0, 0 |
0x0802a9c0 beq 0x802a9a8 |
| } while (r0 == 0);
0x0802a9c4 stmdaeq r5, {r2, r3, r5, r8, sb, ip, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r8, sb, ip, pc}");
0x0802a9c8 stmdaeq r5, {r2, r3, r5, r8, sb, ip, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r8, sb, ip, pc}");
0x0802a9cc stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x0802a9d0 b 0x802a9a8 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x802a9dc */
| #include <stdint.h>
|
; (fcn) sym.cifs_fill_dirent () | void cifs_fill_dirent (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0802a9dc push {r4, r5, r6, lr} |
0x0802a9e0 mov ip, 0 |
0x0802a9e4 movw lr, 0x105 | lr = 0x105;
0x0802a9e8 mov r4, r0 | r4 = r0;
0x0802a9ec mov r5, r1 | r5 = r1;
0x0802a9f0 cmp r2, lr |
0x0802a9f4 str ip, [r0] | *(r0) = ip;
0x0802a9f8 str ip, [r0, 4] | *((r0 + 4)) = ip;
0x0802a9fc str ip, [r0, 8] | *((r0 + 8)) = ip;
0x0802aa00 str ip, [r0, 0xc] | *((r0 + 0xc)) = ip;
0x0802aa04 str ip, [r0, 0x10] | *((r0 + 0x10)) = ip;
0x0802aa08 str ip, [r0, 0x14] | *((r0 + 0x14)) = ip;
| if (r2 <= lr) {
0x0802aa0c bhi 0x802aa40 |
0x0802aa10 cmp r2, 0x100 |
| if (r2 < 0x100) {
0x0802aa14 bls 0x802aa88 | goto label_2;
| }
0x0802aa18 sub r2, r2, 0x100 | r2 -= 0x100;
0x0802aa1c sub r2, r2, 1 | r2--;
0x0802aa20 cmp r2, 4 |
| if (r2 > 4) {
| /* switch table (5 cases) at 0x802aa2c */
0x0802aa24 ldrls pc, [pc, r2, lsl 2] | offset_0 = r2 << 2;
| pc = *((pc + offset_0));
| }
0x0802aa28 b 0x802aaa4 | goto label_3;
| }
0x0802aa40 movw r1, 0x202 | r1 = 0x202;
0x0802aa44 cmp r2, r1 |
| if (r2 != r1) {
0x0802aa48 bne 0x802aaa4 | goto label_3;
| }
0x0802aa4c add r0, r5, 0x6c | r0 = r5 + 0x6c;
0x0802aa50 cmp r3, 0 |
0x0802aa54 str r0, [r4] | *(r4) = r0;
| if (r3 == 0) {
0x0802aa58 beq 0x802ab08 | goto label_4;
| }
0x0802aa5c add r3, r5, 0x6a | r3 = r5 + 0x6a;
0x0802aa60 movw r1, 0x1001 | r1 = 0x1001;
0x0802aa64 b 0x802aa74 |
| while (r2 != 0) {
0x0802aa68 add ip, ip, 1 |
0x0802aa6c cmp ip, r1 |
| if (ip == r1) {
0x0802aa70 beq 0x802ab4c | goto label_5;
| }
0x0802aa74 ldrh r2, [r3, 2]! | r2 = *((r3 += 2));
0x0802aa78 cmp r2, 0 |
0x0802aa7c bne 0x802aa68 |
| }
0x0802aa80 lsl r0, ip, 1 | r0 = ip << 1;
0x0802aa84 b 0x802ab10 | goto label_1;
| label_2:
0x0802aa88 cmp r2, 1 |
| if (r2 == 1) {
0x0802aa8c beq 0x802ab30 | goto label_6;
| }
0x0802aa90 cmp r2, 0x64 |
| if (r2 != 0x64) {
0x0802aa94 bne 0x802aaa4 | goto label_3;
| }
0x0802aa98 bl 0x802a95c | cifs_fill_dirent_posix ();
| do {
| label_0:
0x0802aa9c mov r0, 0 | r0 = 0;
0x0802aaa0 pop {r4, r5, r6, pc} |
| label_3:
0x0802aaa4 mvn r0, 0x15 | r0 = ~0x15;
0x0802aaa8 pop {r4, r5, r6, pc} |
| label_4:
0x0802ab08 mov r1, 0x1000 | r1 = 0x1000;
0x0802ab0c stmdaeq sb, {r5, r6, fp, sp, pc} | __asm ("stmdaeq sb, {r5, r6, fp, sp, pc}");
| label_1:
0x0802ab10 str r0, [r4, 4] | *((r4 + 4)) = r0;
0x0802ab14 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0802ab18 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x0802ab1c ldr r3, [r5, 0x54] | r3 = *((r5 + 0x54));
0x0802ab20 ldr r2, [r5, 0x58] | r2 = *((r5 + 0x58));
0x0802ab24 str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x0802ab28 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0802ab2c b 0x802aa9c |
| } while (1);
| label_6:
0x0802ab30 add r3, r1, 0x1b | r3 = r1 + 0x1b;
0x0802ab34 str r3, [r0] | *(r0) = r3;
0x0802ab38 ldrb r3, [r1, 0x1a] | r3 = *((r1 + 0x1a));
0x0802ab3c str r3, [r0, 4] | *((r0 + 4)) = r3;
0x0802ab40 ldr r3, [r1] | r3 = *(r1);
0x0802ab44 str r3, [r0, 8] | *((r0 + 8)) = r3;
0x0802ab48 b 0x802aa9c | goto label_0;
| label_5:
0x0802ab4c movw r0, 0x2002 | r0 = 0x2002;
0x0802ab50 b 0x802ab10 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x8028818 */
| #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;
0x08028818 push {r4, r5, r6, lr} |
0x0802881c cmp r3, 1 |
0x08028820 mov r6, r0 | r6 = r0;
0x08028824 sub sp, sp, 8 |
0x08028828 ldrh r0, [r1] | r0 = *(r1);
0x0802882c mov r4, r1 | r4 = r1;
0x08028830 mov r5, r2 | r5 = r2;
| if (r3 == 1) {
0x08028834 beq 0x8028888 | goto label_5;
| }
0x08028838 cmp r3, 2 |
| if (r3 == 2) {
0x0802883c beq 0x8028918 | goto label_6;
| }
| label_1:
0x08028840 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x08028844 mov r1, r6 | r1 = r6;
0x08028848 mov r2, 6 | r2 = 6;
0x0802884c blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
0x08028850 cmp r0, 0 |
0x08028854 ble 0x8028860 |
| while (1) {
| label_2:
0x08028858 add sp, sp, 8 |
0x0802885c pop {r4, r5, r6, pc} |
0x08028860 ldr r0, [r5] | r0 = *(r5);
0x08028864 stmdaeq r5, {r2, r3, r5, r6, sb, ip, lr} | __asm ("stmdaeq r5, {r2, r3, r5, r6, sb, ip, lr}");
0x08028868 stmdaeq r5, {r2, r3, r5, r6, sb, ip, lr} | __asm ("stmdaeq r5, {r2, r3, r5, r6, sb, ip, lr}");
0x0802886c stmdaeq sb, {r2, r3, r4, r5, fp, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r4, r5, fp, sp, pc}");
0x08028870 cmp r0, 0 |
| if (r0 == 0) {
0x08028874 beq 0x80288dc | goto label_7;
| }
| label_3:
0x08028878 mov r0, 0x3f | r0 = 0x3f;
| label_0:
0x0802887c strb r0, [r6] | *(r6) = r0;
0x08028880 mov r0, 1 | r0 = 1;
0x08028884 b 0x8028858 |
| }
| label_5:
0x08028888 sub r3, r0, 0xf000 | r3 = r0 - 0xf000;
0x0802888c sub r3, r3, 1 | r3--;
0x08028890 uxth r3, r3 | r3 = (int16_t) r3;
0x08028894 cmp r3, 0x1e |
0x08028898 uxtbls r0, r0 | __asm ("uxtbls r0, r0");
| if (r3 < 0x1e) {
0x0802889c bls 0x802887c | goto label_0;
| }
0x080288a0 sub r3, r0, 0xf000 | r3 = r0 - 0xf000;
0x080288a4 sub r3, r3, 0x20 | r3 -= 0x20;
0x080288a8 cmp r3, 9 |
| if (r3 > 9) {
| /* switch table (10 cases) at 0x80288b4 */
0x080288ac ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x080288b0 b 0x8028840 | goto label_1;
| label_7:
0x080288dc mov r1, 6 | r1 = 6;
0x080288e0 mov r3, r6 | r3 = r6;
0x080288e4 str r1, [sp] | *(sp) = r1;
0x080288e8 mov r0, r4 | r0 = r4;
0x080288ec mov r2, 1 | r2 = 1;
0x080288f0 mov r1, 3 | r1 = 3;
0x080288f4 stmdaeq sb, {r2, r6, sb, fp, sp, pc} | __asm ("stmdaeq sb, {r2, r6, sb, fp, sp, pc}");
0x080288f8 cmp r0, 0 |
| if (r0 > 0) {
0x080288fc bgt 0x8028858 | goto label_2;
| }
0x08028900 b 0x8028878 | goto label_3;
| label_4:
0x08028904 movw r3, 0xf07c | r3 = 0xf07c;
0x08028908 cmp r0, r3 |
| if (r0 != r3) {
0x0802890c bne 0x8028840 | goto label_1;
| }
0x08028910 mov r0, 0x7c | r0 = 0x7c;
0x08028914 b 0x802887c | goto label_0;
| label_6:
0x08028918 movw r3, 0xf03f | r3 = 0xf03f;
0x0802891c cmp r0, r3 |
| if (r0 > r3) {
0x08028920 bhi 0x8028904 | goto label_4;
| }
0x08028924 movw r3, 0xf029 | r3 = 0xf029;
0x08028928 cmp r0, r3 |
| if (r0 < r3) {
0x0802892c bls 0x8028840 | goto label_1;
| }
0x08028930 sub r3, r0, 0xf000 | r3 = r0 - 0xf000;
0x08028934 sub r3, r3, 0x2a | r3 -= 0x2a;
0x08028938 cmp r3, 0x15 |
| if (r3 > 0x15) {
| /* switch table (22 cases) at 0x8028944 */
0x0802893c ldrls pc, [pc, r3, lsl 2] | offset_1 = r3 << 2;
| pc = *((pc + offset_1));
| }
0x08028940 b 0x8028840 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x804586c */
| #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;
0x0804586c push {r4, r5, lr} |
0x08045870 mov r4, r1 | r4 = r1;
0x08045874 ldr r1, [pc, 0xe4] | r1 = *(0x804595c);
0x08045878 sub sp, sp, 0x1c |
0x0804587c mov r5, r0 | r5 = r0;
0x08045880 mov r2, sp | r2 = sp;
0x08045884 stmdaeq sb, {r2, r4, r5, r6, fp, sp, pc} | __asm ("stmdaeq sb, {r2, r4, r5, r6, fp, sp, pc}");
0x08045888 cmp r0, 4 |
| if (r0 > 4) {
| /* switch table (5 cases) at 0x8045894 */
0x0804588c ldrls pc, [pc, r0, lsl 2] | offset_0 = r0 << 2;
| pc = *((pc + offset_0));
| }
0x08045890 b 0x8045934 |
| while (1) {
0x080458dc add sp, sp, 0x1c |
0x080458e0 pop {r4, r5, pc} |
0x08045934 ldr r1, [pc, 0x28] | r1 = "cifs_remap_file_range";
0x08045938 ldr r0, [pc, 0x28] | r0 = "cifs_remap_file_range";
0x0804593c stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x08045940 cmp r0, 0 |
| if (r0 != 0) {
0x08045944 beq 0x8045958 |
0x08045948 stmdaeq r6, {r2, r3, r7, r8, sl, ip, pc} | __asm ("stmdaeq r6, {r2, r3, r7, r8, sl, ip, pc}");
0x0804594c stmdaeq r6, {r2, r3, r7, r8, sl, ip, pc} | __asm ("stmdaeq r6, {r2, r3, r7, r8, sl, ip, pc}");
0x08045950 mov r1, r5 | r1 = r5;
0x08045954 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
| }
0x08045958 mov r0, 1 | r0 = 1;
0x0804595c b 0x80458dc |
| }
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x8045740 */
| #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;
0x08045740 push {r4, r5, lr} |
0x08045744 mov r3, 0 | r3 = 0;
0x08045748 mov r4, r1 | r4 = r1;
0x0804574c sub sp, sp, 0x1c |
0x08045750 str r3, [r1, 0x4c] | *((r1 + 0x4c)) = r3;
0x08045754 strb r3, [r1, 0x50] | *((r1 + 0x50)) = r3;
0x08045758 mov r2, sp | r2 = sp;
0x0804575c ldr r1, [pc, 0xf8] | r1 = *(0x8045858);
0x08045760 mov r5, r0 | r5 = r0;
0x08045764 stmdaeq sb, {r2, r4, r5, r6, fp, sp, pc} | __asm ("stmdaeq sb, {r2, r4, r5, r6, fp, sp, pc}");
0x08045768 cmp r0, 0xa |
| if (r0 > 0xa) {
| /* switch table (11 cases) at 0x8045774 */
0x0804576c ldrls pc, [pc, r0, lsl 2] | offset_0 = r0 << 2;
| pc = *((pc + offset_0));
| }
0x08045770 b 0x8045824 | goto label_1;
| do {
0x080457b4 add sp, sp, 0x1c |
0x080457b8 pop {r4, r5, pc} |
| label_0:
0x0804581c mov r0, 1 | r0 = 1;
0x08045820 b 0x80457b4 |
| } while (1);
| label_1:
0x08045824 ldr r1, [pc, 0x34] | r1 = "cifs_remap_file_range";
0x08045828 ldr r0, [pc, 0x38] | r0 = .data;
0x0804582c stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x08045830 cmp r0, 0 |
| if (r0 == 0) {
0x08045834 beq 0x804581c | goto label_0;
| }
0x08045838 mov r1, r5 | r1 = r5;
0x0804583c stmdaeq r6, {r2, r5, r6, r8, sl, ip, pc} | __asm ("stmdaeq r6, {r2, r5, r6, r8, sl, ip, pc}");
0x08045840 stmdaeq r6, {r2, r5, r6, r8, sl, ip, pc} | __asm ("stmdaeq r6, {r2, r5, r6, r8, sl, ip, pc}");
0x08045844 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x08045848 b 0x804581c | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x804551c */
| #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_18h;
| r0 = arg1;
| r1 = arg2;
0x0804551c push {r4, r5, r6, lr} |
0x08045520 mov r5, r2 | r5 = r2;
0x08045524 mov r6, r1 | r6 = r1;
0x08045528 sub sp, sp, 0x18 |
0x0804552c stmdaeq r5, {r2, r7, sl, ip} | __asm ("stmdaeq r5, {r2, r7, sl, ip}");
0x08045530 stmdaeq r5, {r2, r7, sl, ip} | __asm ("stmdaeq r5, {r2, r7, sl, ip}");
0x08045534 mov r2, sp | r2 = sp;
0x08045538 mov r4, r0 | r4 = r0;
0x0804553c stmdaeq sb, {r2, r4, r5, r6, fp, sp, pc} | __asm ("stmdaeq sb, {r2, r4, r5, r6, fp, sp, pc}");
0x08045540 sub r3, r0, 1 | r3 = r0 - 1;
0x08045544 cmp r3, 7 |
| if (r3 > 7) {
| /* switch table (8 cases) at 0x8045550 */
0x08045548 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x0804554c b 0x80456f0 | goto label_1;
| do {
0x08045588 add sp, sp, 0x18 |
0x0804558c pop {r4, r5, r6, pc} |
| label_0:
0x08045678 mov r0, 1 | r0 = 1;
0x0804567c b 0x8045588 |
| } while (1);
| label_1:
0x080456f0 ldr r1, [pc, 0x30] | r1 = *(0x8045724);
0x080456f4 ldr r0, [pc, 0x40] | r0 = .data;
0x080456f8 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x080456fc cmp r0, 0 |
| if (r0 == 0) {
0x08045700 beq 0x8045678 | goto label_0;
| }
0x08045704 mov r1, r4 | r1 = r4;
0x08045708 stmdaeq r6, {r2, r8, sl, ip, pc} | __asm ("stmdaeq r6, {r2, r8, sl, ip, pc}");
0x0804570c stmdaeq r6, {r2, r8, sl, ip, pc} | __asm ("stmdaeq r6, {r2, r8, sl, ip, pc}");
0x08045710 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x08045714 b 0x8045678 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x8014ab4 */
| #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;
0x08014ab4 push {r4, lr} |
0x08014ab8 ldr lr, [sp, 0xc] |
0x08014abc ldr ip, [r0, 0x28] | ip = *(arg_8hx28);
0x08014ac0 tst ip, 0x80 |
| if ((ip & 0x80) == 0) {
0x08014ac4 movne ip, 1 |
| }
| if ((ip & 0x80) == 0) {
0x08014ac8 ldrne r4, [sp, 8] | r4 = *(arg_8h);
| }
| if ((ip & 0x80) == 0) {
0x08014acc strbne ip, [r4] | *(r4) = ip;
| }
0x08014ad0 ldr ip, [lr, 0x28] | ip = *((lr + 0x28));
0x08014ad4 ldr ip, [ip, 0xc] | ip = *((ip + 0xc));
0x08014ad8 str ip, [r1] | *(r1) = ip;
0x08014adc ldrb r0, [r0, 0x2c] | r0 = *((r0 + 0x2c));
0x08014ae0 cmp r0, 1 |
| if (r0 != 1) {
0x08014ae4 beq 0x8014b34 |
0x08014ae8 cmp r0, 8 |
| if (r0 > 8) {
| /* switch table (9 cases) at 0x8014af4 */
0x08014aec ldrls pc, [pc, r0, lsl 2] | offset_0 = r0 << 2;
| pc = *((pc + offset_0));
| }
0x08014af0 b 0x8014b30 |
0x08014b30 pop {r4, pc} |
| }
0x08014b34 ldr r3, [lr, 0x28] | r3 = *((lr + 0x28));
0x08014b38 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x08014b3c orr r3, r3, ip | r3 |= ip;
0x08014b40 str r3, [r1] | *(r1) = r3;
0x08014b44 str r0, [r2] | *(r2) = r0;
0x08014b48 pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x800fca4 */
| #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_0h, 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_36h;
| int32_t var_38h;
| int32_t var_40h;
| int32_t var_5ch;
| r0 = arg1;
| r1 = arg2;
0x0800fca4 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0800fca8 mov r4, r0 | r4 = r0;
0x0800fcac mov r8, r2 | r8 = r2;
0x0800fcb0 sub sp, sp, 0x5c |
0x0800fcb4 mov r2, 0x1b0 | r2 = 0x1b0;
0x0800fcb8 movw r6, 0xffed |
0x0800fcbc movt r6, 0xffff | r6 = 0xffffffed;
0x0800fcc0 add sb, r0, 0x13 | sb += arg_0hx13;
0x0800fcc4 sub r6, r6, r0 | r6 -= r0;
0x0800fcc8 str r3, [sp, 0x10] | var_10h = r3;
0x0800fccc mov r3, sp | r3 = sp;
0x0800fcd0 bic sl, r3, 0x1fc0 | sl = BIT_MASK (r3, 0x1fc0);
0x0800fcd4 str r1, [sp, 4] | var_4h = r1;
0x0800fcd8 bic sl, sl, 0x3f | sl = BIT_MASK (sl, 0x3f);
0x0800fcdc mov r1, 0 | r1 = 0;
0x0800fce0 str sb, [sp, 0xc] | var_ch = sb;
0x0800fce4 stmdaeq sb, {r2, r3, r4, r6, fp, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r4, r6, fp, sp, pc}");
0x0800fce8 stmdaeq sb, {r2, r3, r4, r6, fp, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r4, r6, fp, sp, pc}");
0x0800fcec ldr ip, [sl, 0xc] | ip = *((sl + 0xc));
0x0800fcf0 ldr ip, [ip, 0x37c] | ip = *((ip + 0x37c));
0x0800fcf4 ldr r5, [ip, 4] | r5 = *((ip + 4));
0x0800fcf8 mov ip, 0x2c |
0x0800fcfc strh ip, [sp, 0x36] | var_36h = ip;
0x0800fd00 stmdaeq sb, {r2, r4, r5, r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r4, r5, r8, sb, sl, sp, pc}");
0x0800fd04 add r7, r5, 0x45 | r7 = r5 + 0x45;
0x0800fd08 add r3, r4, 0x14 | r3 = r4 + 0x14;
0x0800fd0c movw r2, 0x2020 |
0x0800fd10 movt r2, 0x2020 | r2 = 0x20202020;
0x0800fd14 add r5, r5, 0x44 | r5 += 0x44;
0x0800fd18 str r2, [r4, 0x1c] | *((r4 + 0x1c)) = r2;
0x0800fd1c str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x0800fd20 str r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
0x0800fd24 str r2, [r4, 0x1f] | *((r4 + 0x1f)) = r2;
0x0800fd28 str r3, [sp, 8] | var_8h = r3;
0x0800fd2c b 0x800fd48 |
| while (r0 > r3) {
0x0800fd30 ldrb r3, [r5, 1]! | r3 = *((r5 += 1));
0x0800fd34 sub r1, r3, 0x20 | r1 = r3 - 0x20;
0x0800fd38 ldrb r2, [fp, r3] | r2 = *((fp + r3));
0x0800fd3c tst r2, 2 |
0x0800fd40 uxtbne r3, r1 | __asm ("uxtbne r3, r1");
0x0800fd44 strb r3, [sb, 1]! | *((sb += 1)) = r3;
0x0800fd48 mov r0, r7 | r0 = r7;
0x0800fd4c mov r1, 0xf | r1 = 0xf;
0x0800fd50 stmdaeq sb, {r5, r6, fp, sp, pc} | __asm ("stmdaeq sb, {r5, r6, fp, sp, pc}");
0x0800fd54 add r3, r6, sb | r3 = r6 + sb;
0x0800fd58 cmp r0, r3 |
0x0800fd5c bhi 0x800fd30 |
| }
0x0800fd60 mov r2, 0 | r2 = 0;
0x0800fd64 strb r2, [r4, 0x23] | *((r4 + 0x23)) = r2;
0x0800fd68 ldrb r2, [r4, 0x55] | r2 = *((r4 + 0x55));
0x0800fd6c ldr r1, [sl, 0xc] | r1 = *((sl + 0xc));
0x0800fd70 ldr ip, [sp, 4] | ip = var_4h;
0x0800fd74 bic r2, r2, 0x4a | r2 = BIT_MASK (r2, 0x4a);
0x0800fd78 orr r2, r2, 0x4a | r2 |= 0x4a;
0x0800fd7c ldr r1, [r1, 0x340] | r1 = *((r1 + 0x340));
0x0800fd80 cmp ip, 0 |
0x0800fd84 ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x0800fd88 str r1, [r4, 0x34] | *((r4 + 0x34)) = r1;
0x0800fd8c ldrb r1, [r4, 0x56] | r1 = *((r4 + 0x56));
0x0800fd90 ldr r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x0800fd94 orr r1, r1, 1 | r1 |= 1;
0x0800fd98 ldr r0, [r0, 0x340] | r0 = *((r0 + 0x340));
0x0800fd9c ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x0800fda0 str r0, [r4, 0x38] | *((r4 + 0x38)) = r0;
0x0800fda4 ldr r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x0800fda8 ldr r3, [r3, 0x340] | r3 = *((r3 + 0x340));
0x0800fdac ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0800fdb0 str r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
0x0800fdb4 mov r3, 0x100000 | r3 = 0x100000;
0x0800fdb8 strb r2, [r4, 0x55] | *((r4 + 0x55)) = r2;
0x0800fdbc str r3, [r4, 0x6c] | *((r4 + 0x6c)) = r3;
0x0800fdc0 movw r3, 0x1ed |
0x0800fdc4 movt r3, 0x1ed | r3 = 0x1ed01ed;
0x0800fdc8 strb r1, [r4, 0x56] | *((r4 + 0x56)) = r1;
0x0800fdcc str r3, [r4, 0x48] | *((r4 + 0x48)) = r3;
0x0800fdd0 mov r3, 0x64 | r3 = 0x64;
0x0800fdd4 str r3, [r4, 0x80] | *((r4 + 0x80)) = r3;
0x0800fdd8 stmdaeq r6, {r4, r5, sb, lr, pc} | __asm ("stmdaeq r6, {r4, r5, sb, lr, pc}");
0x0800fddc stmdaeq r6, {r4, r5, sb, lr, pc} | __asm ("stmdaeq r6, {r4, r5, sb, lr, pc}");
0x0800fde0 str r3, [r4, 0x84] | *((r4 + 0x84)) = r3;
0x0800fde4 stmdaeq r6, {r2, r5, r6, r8, sb, sl, fp, ip, sp, pc} | __asm ("stmdaeq r6, {r2, r5, r6, r8, sb, sl, fp, ip, sp, pc}");
0x0800fde8 stmdaeq r6, {r2, r5, r6, r8, sb, sl, fp, ip, sp, pc} | __asm ("stmdaeq r6, {r2, r5, r6, r8, sb, sl, fp, ip, sp, pc}");
0x0800fdec str r3, [r4, 0x88] | *((r4 + 0x88)) = r3;
0x0800fdf0 mov r3, 0x3c | r3 = 0x3c;
0x0800fdf4 str r3, [r4, 0x194] | *((r4 + 0x194)) = r3;
0x0800fdf8 mov r3, 1 | r3 = 1;
0x0800fdfc str r3, [r4, 0x1a8] | *((r4 + 0x1a8)) = r3;
| if (ip == 0) {
0x0800fe00 beq 0x801013c | goto label_15;
| }
0x0800fe04 mov r0, ip | r0 = ip;
0x0800fe08 mov r2, 0xcc0 | r2 = 0xcc0;
0x0800fe0c mov r1, 0x1000 | r1 = 0x1000;
0x0800fe10 stmdaeq sb, {r6, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r6, r7, sb, sl, sp, pc}");
0x0800fe14 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 == r0) {
0x0800fe18 beq 0x801013c | goto label_15;
| }
0x0800fe1c str r5, [sp, 0x38] | var_38h = r5;
0x0800fe20 stmdaeq sb, {r3, r4, r6, r7, r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r3, r4, r6, r7, r8, sb, sl, sp, pc}");
0x0800fe24 mov r2, 4 | r2 = 4;
0x0800fe28 add r3, r5, r0 | r3 = r5 + r0;
0x0800fe2c stmdaeq r5, {r2, r5, r6, r7, r8, ip, sp} | __asm ("stmdaeq r5, {r2, r5, r6, r7, r8, ip, sp}");
0x0800fe30 stmdaeq r5, {r2, r5, r6, r7, r8, ip, sp} | __asm ("stmdaeq r5, {r2, r5, r6, r7, r8, ip, sp}");
0x0800fe34 mov r0, r5 | r0 = r5;
0x0800fe38 mov sl, r3 | sl = r3;
0x0800fe3c stmdaeq sb, {r2, r4, r5, r7, r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r4, r5, r7, r8, sb, sl, sp, pc}");
0x0800fe40 cmp r0, 0 |
| if (r0 == 0) {
0x0800fe44 beq 0x8010124 | goto label_16;
| }
| label_0:
0x0800fe48 mov r3, 0 | r3 = 0;
0x0800fe4c cmp r8, 0 |
0x0800fe50 strh r3, [r4, 0x53] | *((r4 + 0x53)) = r3;
| if (r8 == 0) {
0x0800fe54 beq 0x8010160 | goto label_17;
| }
0x0800fe58 ldrb r3, [r8] | r3 = *(r8);
0x0800fe5c cmp r3, 0 |
| if (r3 == 0) {
0x0800fe60 beq 0x8010160 | goto label_17;
| }
0x0800fe64 mov r0, r8 | r0 = r8;
0x0800fe68 stmdaeq r5, {r2, r4, sb, ip, sp} | __asm ("stmdaeq r5, {r2, r4, sb, ip, sp}");
0x0800fe6c stmdaeq r5, {r2, r4, sb, ip, sp} | __asm ("stmdaeq r5, {r2, r4, sb, ip, sp}");
0x0800fe70 stmdaeq sb, {r2, r5, r6, fp, sp, pc} | __asm ("stmdaeq sb, {r2, r5, r6, fp, sp, pc}");
0x0800fe74 cmp r0, 2 |
| if (r0 != 2) {
0x0800fe78 bne 0x8010174 | goto label_14;
| }
0x0800fe7c add r0, r8, 2 | r0 = r8 + 2;
0x0800fe80 stmdaeq r5, {r2, r4, sb, ip, sp} | __asm ("stmdaeq r5, {r2, r4, sb, ip, sp}");
0x0800fe84 stmdaeq r5, {r2, r4, sb, ip, sp} | __asm ("stmdaeq r5, {r2, r4, sb, ip, sp}");
0x0800fe88 stmdaeq sb, {r3, r5, r6, fp, sp, pc} | __asm ("stmdaeq sb, {r3, r5, r6, fp, sp, pc}");
0x0800fe8c cmp r0, 0 |
| if (r0 == 0) {
0x0800fe90 beq 0x8010174 | goto label_14;
| }
0x0800fe94 add r6, r0, 1 | r6 = r0 + 1;
0x0800fe98 stmdaeq r5, {r2, r4, sb, ip, sp} | __asm ("stmdaeq r5, {r2, r4, sb, ip, sp}");
0x0800fe9c stmdaeq r5, {r2, r4, sb, ip, sp} | __asm ("stmdaeq r5, {r2, r4, sb, ip, sp}");
0x0800fea0 mov r0, r6 | r0 = r6;
0x0800fea4 stmdaeq sb, {r2, r3, r5, r6, fp, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r5, r6, fp, sp, pc}");
0x0800fea8 mov r7, r0 | r7 = r0;
0x0800feac add fp, r6, r7 |
0x0800feb0 mov r0, r8 | r0 = r8;
0x0800feb4 sub r1, fp, r8 | r1 = fp - r8;
0x0800feb8 mov r2, 0xcc0 | r2 = 0xcc0;
0x0800febc stmdaeq sb, {r6, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r6, r7, sb, sl, sp, pc}");
0x0800fec0 cmp r0, 0 |
0x0800fec4 str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
| if (r0 == 0) {
0x0800fec8 beq 0x80101ac | goto label_18;
| }
0x0800fecc mov r8, 0x5c | r8 = 0x5c;
0x0800fed0 b 0x800fed8 |
| while (r0 != 0) {
0x0800fed4 strb r8, [r0] | *(r0) = r8;
0x0800fed8 mov r1, 0x2f | r1 = 0x2f;
0x0800fedc stmdaeq sb, {r2, r3, r4, r6, r7, r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r4, r6, r7, r8, sb, sl, sp, pc}");
0x0800fee0 cmp r0, 0 |
0x0800fee4 bne 0x800fed4 |
| }
0x0800fee8 ldrb r3, [r6, r7] | r3 = *((r6 + r7));
0x0800feec cmp r3, 0x5c |
0x0800fef0 cmpne r3, 0x2f | __asm ("cmpne r3, 0x2f");
| if (r3 != 0x5c) {
0x0800fef4 ldrbeq r3, [fp, 1] | r3 = *(arg_1h);
| }
| if (r3 != 0x5c) {
0x0800fef8 addeq fp, fp, 1 |
| }
0x0800fefc cmp r3, 0 |
| if (r3 != 0) {
0x0800ff00 beq 0x800ff1c |
0x0800ff04 mov r0, fp | r0 = fp;
0x0800ff08 mov r1, 0xcc0 | r1 = 0xcc0;
0x0800ff0c stmdaeq sb, {r3, r6, fp, sp, pc} | __asm ("stmdaeq sb, {r3, r6, fp, sp, pc}");
0x0800ff10 cmp r0, 0 |
0x0800ff14 str r0, [r4, 0x8c] | *((r4 + 0x8c)) = r0;
| if (r0 == 0) {
0x0800ff18 beq 0x80101ac | goto label_18;
| }
| }
0x0800ff1c ldr r7, [pc, 0xfe8] | r7 = *(0x8010f08);
0x0800ff20 mov r6, 0 | r6 = 0;
0x0800ff24 add r3, r4, 0x90 | r3 = r4 + 0x90;
0x0800ff28 mvn fp, 0 |
0x0800ff2c str r3, [sp, 4] | var_4h = r3;
0x0800ff30 str r6, [sp, 0x2c] | var_2ch = r6;
0x0800ff34 str r6, [sp, 0x28] | var_28h = r6;
0x0800ff38 str r6, [sp, 0x1c] | var_1ch = r6;
0x0800ff3c str r6, [sp, 0x14] | var_14h = r6;
0x0800ff40 str r6, [sp, 0x24] | var_24h = r6;
0x0800ff44 str r6, [sp, 0x20] | var_20h = r6;
0x0800ff48 str fp, [sp, 0x18] | var_18h = fp;
| do {
| label_1:
0x0800ff4c add r1, sp, 0x36 | r1 += var_36h;
0x0800ff50 add r0, sp, 0x38 | r0 += var_38h;
0x0800ff54 stmdaeq sb, {r4, r5, r6, fp, sp, pc} | __asm ("stmdaeq sb, {r4, r5, r6, fp, sp, pc}");
0x0800ff58 subs r8, r0, 0 | r8 -= var_38h;
| if (r8 == var_38h) {
0x0800ff5c beq 0x80101d0 | goto label_19;
| }
0x0800ff60 ldrb r3, [r8] | r3 = *(r8);
0x0800ff64 cmp r3, 0 |
0x0800ff68 beq 0x800ff4c |
| } while (r3 == 0);
0x0800ff6c add r2, sp, 0x40 | r2 += var_40h;
0x0800ff70 mov r1, r7 | r1 = r7;
0x0800ff74 stmdaeq sb, {r2, r4, r5, r6, fp, sp, pc} | __asm ("stmdaeq sb, {r2, r4, r5, r6, fp, sp, pc}");
0x0800ff78 cmp r0, 0x67 |
| if (r0 > 0x67) {
| /* switch table (104 cases) at 0x800ff84 */
0x0800ff7c ldrls pc, [pc, r0, lsl 2] | offset_0 = r0 << 2;
| pc = *((pc + offset_0));
| }
0x0800ff80 b 0x80115e8 | goto label_20;
| label_16:
0x08010124 ldrb r3, [r5, 4] | r3 = *((r5 + 4));
0x08010128 cmp r3, 0 |
| if (r3 == 0) {
0x0801012c strbne r3, [sp, 0x36] | var_36h = r3;
| }
| if (r3 == 0) {
0x08010130 addne r3, r5, 5 | r3 = r5 + 5;
| }
| if (r3 == 0) {
0x08010134 strne r3, [sp, 0x38] | var_38h = r3;
| }
0x08010138 b 0x800fe48 | goto label_0;
| label_15:
0x0801013c mov r3, 0 | r3 = 0;
0x08010140 mov r5, r3 | r5 = r3;
| do {
| label_13:
0x08010144 mov r0, r3 | r0 = r3;
0x08010148 stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc}");
0x0801014c mov r0, r5 | r0 = r5;
0x08010150 stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc}");
| label_7:
0x08010154 mvn r0, 0x15 | r0 = ~0x15;
| label_6:
0x08010158 add sp, sp, 0x5c |
0x0801015c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_17:
0x08010160 ldr r1, [pc, 0xda8] | r1 = "cifs_remap_file_range";
0x08010164 ldr r0, [pc, 0xda8] | r0 = "cifs_remap_file_range";
0x08010168 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x0801016c cmp r0, 0 |
0x08010170 rscshs sp, sp, r0, lsl 8 | __asm ("rscshs sp, sp, r0, lsl 8");
| label_14:
0x08010174 ldr r1, [pc, 0xe2c] | r1 = .data;
0x08010178 ldr r0, [pc, 0xd98] | r0 = .data;
0x0801017c stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x08010180 cmp r0, 0 |
| if (r0 != 0) {
0x08010184 bne 0x8011698 | goto label_21;
| }
| label_2:
0x08010188 mov r3, 0 | r3 = 0;
0x0801018c b 0x8010144 |
| } while (1);
| label_9:
0x0801019c mov sb, 0 | sb = 0;
| label_10:
0x080101a0 mov r0, sb | r0 = sb;
0x080101a4 stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc}");
0x080101a8 b 0x800ff4c | goto label_1;
| label_18:
0x080101ac ldr r1, [pc, 0xdf4] | r1 = .data;
0x080101b0 ldr r0, [pc, 0xd64] | r0 = .data;
0x080101b4 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x080101b8 cmp r0, 0 |
| if (r0 == 0) {
0x080101bc beq 0x8010188 | goto label_2;
| }
0x080101c0 stmdaeq r5, {r3, r4, sb, ip, sp} | __asm ("stmdaeq r5, {r3, r4, sb, ip, sp}");
0x080101c4 stmdaeq r5, {r3, r4, sb, ip, sp} | __asm ("stmdaeq r5, {r3, r4, sb, ip, sp}");
0x080101c8 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x080101cc b 0x8010188 | goto label_2;
| label_19:
0x080101d0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x080101d4 eor r3, r3, 1 | r3 ^= 1;
0x080101d8 cmp r6, 0 |
| if (r6 != 0) {
0x080101dc moveq r3, 0 | r3 = 0;
| }
| if (r6 == 0) {
0x080101e0 andne r3, r3, 1 | r3 &= 1;
| }
0x080101e4 cmp r3, 0 |
| if (r3 != 0) {
0x080101e8 bne 0x8011634 | goto label_22;
| }
0x080101ec ldrb r3, [r4, 0x59] | r3 = *((r4 + 0x59));
0x080101f0 tst r3, 2 |
| if ((r3 & 2) != 0) {
0x080101f4 beq 0x8010208 |
0x080101f8 ldr r3, [r4, 0x88] | r3 = *((r4 + 0x88));
0x080101fc ldrh r3, [r3, 4] | r3 = *((r3 + 4));
0x08010200 cmp r3, 0x300 |
| if (r3 <= 0x300) {
0x08010204 blo 0x801114c | goto label_23;
| }
| }
0x08010208 ldr r6, [r4, 0xc] | r6 = *((r4 + 0xc));
0x0801020c cmp r6, 0 |
| if (r6 == 0) {
0x08010210 beq 0x80111c0 | goto label_24;
| }
0x08010214 add r0, r6, 3 | r0 = r6 + 3;
0x08010218 mov r1, 0x5c | r1 = 0x5c;
0x0801021c stmdaeq sb, {r2, r3, r4, r6, r7, r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r4, r6, r7, r8, sb, sl, sp, pc}");
0x08010220 cmp r0, 0 |
| if (r0 == 0) {
0x08010224 beq 0x8011208 | goto label_25;
| }
0x08010228 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0801022c cmp r3, 0 |
| if (r3 == 0) {
0x08010230 bne 0x801025c |
0x08010234 add r6, r6, 2 | r6 += 2;
0x08010238 mov r1, 0x5c | r1 = 0x5c;
0x0801023c mov r0, r6 | r0 = r6;
0x08010240 stmdaeq sb, {r2, r3, r4, r6, r7, r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r4, r6, r7, r8, sb, sl, sp, pc}");
0x08010244 mov r1, r6 | r1 = r6;
0x08010248 sub r2, r0, r6 | r2 = r0 - r6;
0x0801024c ldr r0, [sp, 4] | r0 = var_4h;
0x08010250 stmdaeq r2, {r4, r5, sl, lr} | __asm ("stmdaeq r2, {r4, r5, sl, lr}");
0x08010254 cmp r0, 0 |
| if (r0 == 0) {
0x08010258 beq 0x8011648 | goto label_26;
| }
| }
0x0801025c ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x08010260 ldr r0, [sp, 4] | r0 = var_4h;
0x08010264 stmdaeq r2, {r2, r4, r6, r8, sl, lr} | __asm ("stmdaeq r2, {r2, r4, r6, r8, sl, lr}");
0x08010268 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0801026c cmp r3, 0 |
0x08010270 ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r3 != 0) {
0x08010274 bne 0x8010318 | goto label_27;
| }
0x08010278 cmp r3, 1 |
| if (r3 == 1) {
0x0801027c beq 0x801160c | goto label_28;
| }
| do {
| label_11:
0x08010280 ldr r3, [sp, 0x24] | r3 = var_24h;
0x08010284 cmp r3, 0 |
| if (r3 == 0) {
0x08010288 beq 0x8011198 | goto label_29;
| }
0x0801028c ldrb r3, [r4, 0x51] | r3 = *((r4 + 0x51));
0x08010290 subs r2, fp, 0 | r2 -= arg_0h;
| if (r2 == arg_0h) {
0x08010294 movne r2, 1 | r2 = 1;
| }
0x08010298 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;
0x0801029c strb r3, [r4, 0x51] | *((r4 + 0x51)) = r3;
| label_5:
0x080102a0 ldr r3, [sp, 0x28] | r3 = var_28h;
0x080102a4 cmp r3, 0 |
| if (r3 == 0) {
0x080102a8 bne 0x80102c0 |
0x080102ac stmdaeq r6, {r1, r3, r4, r6, r7, r8, ip, lr, pc} | __asm ("stmdaeq r6, {r1, r3, r4, r6, r7, r8, ip, lr, pc}");
0x080102b0 stmdaeq r6, {r1, r3, r4, r6, r7, r8, ip, lr, pc} | __asm ("stmdaeq r6, {r1, r3, r4, r6, r7, r8, ip, lr, pc}");
0x080102b4 ldrb r2, [r3, 2] | r2 = *((r3 + 2));
0x080102b8 cmp r2, 0 |
| if (r2 == 0) {
0x080102bc beq 0x801161c | goto label_30;
| }
| }
| label_12:
0x080102c0 mov r0, r5 | r0 = r5;
0x080102c4 stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc}");
0x080102c8 ldrb r3, [r4, 0x56] | r3 = *((r4 + 0x56));
0x080102cc tst r3, 0x10 |
| if ((r3 & 0x10) != 0) {
0x080102d0 bne 0x8011170 | goto label_31;
| }
0x080102d4 ldr r3, [r4] | r3 = *(r4);
0x080102d8 cmp r3, 0 |
| if (r3 == 0) {
0x080102dc beq 0x801126c | goto label_32;
| }
0x080102e0 ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x080102e4 cmp r0, 0 |
| if (r0 == 0) {
0x080102e8 beq 0x801118c | goto label_33;
| }
| label_3:
0x080102ec stmdaeq sb, {r3, r4, r5, r6, fp, sp, pc} | __asm ("stmdaeq sb, {r3, r4, r5, r6, fp, sp, pc}");
0x080102f0 cmp r0, 0 |
0x080102f4 str r0, [r4, 0x190] | *((r4 + 0x190)) = r0;
| if (r0 == 0) {
0x080102f8 beq 0x8011250 | goto label_34;
| }
| label_4:
0x080102fc mov r0, 0 | r0 = 0;
0x08010300 add sp, sp, 0x5c |
0x08010304 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_27:
0x08010318 subs r2, r3, 0 | r2 = r3 - 0;
0x0801031c ldrb r3, [r4, 0x51] | r3 = *((r4 + 0x51));
| if (r2 == r3) {
0x08010320 movne r2, 1 | r2 = 1;
| }
0x08010324 bfi r3, r2, 5, 1 | value_3 = BIT_MASK (5, 1);
| value_4 = r2 & value_3;
| value_3 = ~value_3;
| r3 &= value_3;
| r3 |= value_4;
0x08010328 strb r3, [r4, 0x51] | *((r4 + 0x51)) = r3;
0x0801032c b 0x8010280 |
| } while (1);
| label_23:
0x0801114c ldr r1, [pc, -0x1ac] | r1 = loc..LANCHOR1;
0x08011150 ldr r0, [pc, -0x218] | r0 = loc..LANCHOR2;
0x08011154 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x08011158 cmp r0, 0 |
| if (r0 == 0) {
0x0801115c beq 0x8010188 | goto label_2;
| }
0x08011160 stmdaeq r5, {r3, r6, r7, r8, fp, ip, sp} | __asm ("stmdaeq r5, {r3, r6, r7, r8, fp, ip, sp}");
0x08011164 stmdaeq r5, {r3, r6, r7, r8, fp, ip, sp} | __asm ("stmdaeq r5, {r3, r6, r7, r8, fp, ip, sp}");
0x08011168 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x0801116c b 0x8010188 | goto label_2;
| label_31:
0x08011170 ldr r0, [r4] | r0 = *(r4);
0x08011174 stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc}");
0x08011178 ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x0801117c mov r3, 0 | r3 = 0;
0x08011180 str r3, [r4] | *(r4) = r3;
0x08011184 cmp r0, 0 |
| if (r0 != 0) {
0x08011188 bne 0x80102ec | goto label_3;
| }
| label_33:
0x0801118c stmdaeq sb, {r2, r3, r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r8, sb, sl, sp, pc}");
0x08011190 str r0, [r4, 0x190] | *((r4 + 0x190)) = r0;
0x08011194 b 0x80102fc | goto label_4;
| label_29:
0x08011198 cmp fp, 1 |
| if (fp != 1) {
0x0801119c bne 0x80102a0 | goto label_5;
| }
0x080111a0 stmdaeq r5, {r2, r3, r4, r5, r6, r7, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r2, r3, r4, r5, r6, r7, sb, fp, ip, sp}");
0x080111a4 stmdaeq r5, {r2, r3, r4, r5, r6, r7, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r2, r3, r4, r5, r6, r7, sb, fp, ip, sp}");
0x080111a8 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x080111ac b 0x80102a0 | goto label_5;
| label_24:
0x080111c0 ldr r1, [pc, -0x220] | r1 = loc..LANCHOR1;
0x080111c4 ldr r0, [pc, -0x288] | r0 = loc..LANCHOR2;
0x080111c8 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x080111cc cmp r0, 0 |
| if (r0 == 0) {
0x080111d0 beq 0x8010188 | goto label_2;
| }
0x080111d4 stmdaeq r5, {r3, r4, r5, r6, r7, r8, fp, ip, sp} | __asm ("stmdaeq r5, {r3, r4, r5, r6, r7, r8, fp, ip, sp}");
0x080111d8 stmdaeq r5, {r3, r4, r5, r6, r7, r8, fp, ip, sp} | __asm ("stmdaeq r5, {r3, r4, r5, r6, r7, r8, fp, ip, sp}");
0x080111dc stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x080111e0 b 0x8010188 | goto label_2;
| label_25:
0x08011208 ldr r1, [pc, -0x268] | r1 = loc..LANCHOR1;
0x0801120c ldr r0, [pc, -0x2c8] | r0 = loc..LANCHOR2;
0x08011210 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x08011214 cmp r0, 0 |
| if (r0 == 0) {
0x08011218 beq 0x8010188 | goto label_2;
| }
0x0801121c stmdaeq r5, {r3, r6, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r3, r6, sb, fp, ip, sp}");
0x08011220 stmdaeq r5, {r3, r6, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r3, r6, sb, fp, ip, sp}");
0x08011224 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x08011228 b 0x8010188 | goto label_2;
| label_34:
0x08011250 ldr r1, [pc, -0x300] | r1 = loc..LANCHOR1;
0x08011254 ldr r0, [pc, -0x308] | r0 = loc..LANCHOR2;
0x08011258 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x0801125c cmp r0, 0 |
| if (r0 != 0) {
0x08011260 bne 0x80115a0 | goto label_35;
| }
| label_8:
0x08011264 mvn r0, 0x4e | r0 = ~0x4e;
0x08011268 b 0x8010158 | goto label_6;
| label_32:
0x0801126c ldr r1, [pc, -0x31c] | r1 = loc..LANCHOR1;
0x08011270 ldr r0, [pc, -0x31c] | r0 = loc..LANCHOR2;
0x08011274 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x08011278 cmp r0, 0 |
| if (r0 == 0) {
0x0801127c beq 0x8010154 | goto label_7;
| }
0x08011280 stmdaeq r5, {r2, r3, r4, r6, sl, fp, ip, sp} | __asm ("stmdaeq r5, {r2, r3, r4, r6, sl, fp, ip, sp}");
0x08011284 stmdaeq r5, {r2, r3, r4, r6, sl, fp, ip, sp} | __asm ("stmdaeq r5, {r2, r3, r4, r6, sl, fp, ip, sp}");
0x08011288 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x0801128c b 0x8010154 | goto label_7;
| label_35:
0x080115a0 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x080115a4 stmdaeq r5, {r7, sl, fp, ip, sp} | __asm ("stmdaeq r5, {r7, sl, fp, ip, sp}");
0x080115a8 stmdaeq r5, {r7, sl, fp, ip, sp} | __asm ("stmdaeq r5, {r7, sl, fp, ip, sp}");
0x080115ac stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x080115b0 b 0x8011264 | goto label_8;
| label_20:
0x080115e8 cmp r6, 0 |
| if (r6 != 0) {
0x080115ec moveq sb, r6 | sb = r6;
| }
| if (r6 == 0) {
0x080115f0 moveq r6, r8 | r6 = r8;
| goto label_36;
| }
| if (r6 != 0) {
| label_36:
0x080115f4 bne 0x801019c | goto label_9;
| }
0x080115f8 b 0x80101a0 | goto label_10;
| label_28:
0x0801160c stmdaeq r5, {r2, r4, r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r2, r4, r5, r7, sb, fp, ip, sp}");
0x08011610 stmdaeq r5, {r2, r4, r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r2, r4, r5, r7, sb, fp, ip, sp}");
0x08011614 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x08011618 b 0x8010280 | goto label_11;
| label_30:
0x0801161c stmdaeq r5, {r2, r6, r8, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r2, r6, r8, sb, fp, ip, sp}");
0x08011620 stmdaeq r5, {r2, r6, r8, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r2, r6, r8, sb, fp, ip, sp}");
0x08011624 mov r2, 1 | r2 = 1;
0x08011628 strb r2, [r3, 2] | *((r3 + 2)) = r2;
0x0801162c stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x08011630 b 0x80102c0 | goto label_12;
| label_22:
0x08011634 mov r1, r6 | r1 = r6;
0x08011638 stmdaeq r5, {r2, r5, r7, r8, fp, ip, sp} | __asm ("stmdaeq r5, {r2, r5, r7, r8, fp, ip, sp}");
0x0801163c stmdaeq r5, {r2, r5, r7, r8, fp, ip, sp} | __asm ("stmdaeq r5, {r2, r5, r7, r8, fp, ip, sp}");
0x08011640 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x08011644 b 0x8010188 | goto label_2;
| label_26:
0x08011648 stmdaeq r5, {r7, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r7, sb, fp, ip, sp}");
0x0801164c stmdaeq r5, {r7, sb, fp, ip, sp} | __asm ("stmdaeq r5, {r7, sb, fp, ip, sp}");
0x08011650 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x08011654 b 0x8010188 | goto label_2;
| label_21:
0x08011698 stmdaeq r5, {r2, r3, r6, sb, ip, sp} | __asm ("stmdaeq r5, {r2, r3, r6, sb, ip, sp}");
0x0801169c stmdaeq r5, {r2, r3, r6, sb, ip, sp} | __asm ("stmdaeq r5, {r2, r3, r6, sb, ip, sp}");
0x080116a0 mov r3, 0 | r3 = 0;
0x080116a4 str r3, [sp, 4] | var_4h = r3;
0x080116a8 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x080116ac ldr r3, [sp, 4] | r3 = var_4h;
0x080116b0 b 0x8010144 | goto label_13;
0x080116b4 stmdaeq r5, {r2, r3, r5, r6, r7, r8, ip, sp} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, ip, sp}");
0x080116b8 stmdaeq r5, {r2, r3, r5, r6, r7, r8, ip, sp} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, ip, sp}");
0x080116bc stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x080116c0 b 0x8010174 | goto label_14;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x8025d20 */
| #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;
0x08025d20 push {r4, r5, r6, r7, lr} |
0x08025d24 mov r4, r0 | r4 = r0;
0x08025d28 sub sp, sp, 0x14 |
0x08025d2c mov r3, sp | r3 = sp;
0x08025d30 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08025d34 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08025d38 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08025d3c add r2, r2, 1 | r2++;
0x08025d40 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08025d44 ldr r3, [r0, 0x44] | r3 = *((r0 + 0x44));
0x08025d48 sub r3, r3, 4 | r3 -= 4;
0x08025d4c cmp r3, 0x1c |
| if (r3 > 0x1c) {
| /* switch table (29 cases) at 0x8025d58 */
0x08025d50 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x08025d54 b 0x8025dcc |
0x08025dcc ldr r3, [r0, 0x48] | r3 = *((r0 + 0x48));
0x08025dd0 tst r3, 2 |
| if ((r3 & 2) == 0) {
0x08025dd4 bne 0x8025df8 |
0x08025dd8 ldrd r2, r3, [r0] | __asm ("ldrd r2, r3, [r0]");
0x08025ddc str r3, [r2, 4] | *((r2 + 4)) = r3;
0x08025de0 str r2, [r3] | *(r3) = r2;
0x08025de4 str r0, [r4] | *(r4) = r0;
0x08025de8 str r0, [r4, 4] | *((r4 + 4)) = r0;
0x08025dec ldr r3, [r0, 0x48] | r3 = *((r0 + 0x48));
0x08025df0 orr r3, r3, 2 | r3 |= 2;
0x08025df4 str r3, [r0, 0x48] | *((r0 + 0x48)) = r3;
| }
0x08025df8 cmp r1, 0 |
| if (r1 == 0) {
0x08025dfc beq 0x8025ea4 | goto label_2;
| }
0x08025e00 ldr r5, [r1, 0x30] | r5 = *((r1 + 0x30));
0x08025e04 stmdaeq r5, {r2, r3, r4, r5, r8, sb, sl, fp, lr} | __asm ("stmdaeq r5, {r2, r3, r4, r5, r8, sb, sl, fp, lr}");
0x08025e08 stmdaeq r5, {r2, r3, r4, r5, r8, sb, sl, fp, lr} | __asm ("stmdaeq r5, {r2, r3, r4, r5, r8, sb, sl, fp, lr}");
0x08025e0c cmp r5, 0 |
0x08025e10 moveq r5, r3 | r5 = r3;
| while (1) {
0x08025e14 ldr r1, [pc, 0xd8] | r1 = *(0x8025ef0);
0x08025e18 ldr r0, [pc, 0xd8] | r0 = "cifs_remap_file_range";
0x08025e1c stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x08025e20 cmp r0, 0 |
| if (r0 != 0) {
0x08025e24 bne 0x8025ecc | goto label_3;
| }
| label_1:
0x08025e28 mvn r5, 4 | r5 = ~4;
0x08025e2c b 0x8025e70 |
0x08025e70 mov r3, sp | r3 = sp;
0x08025e74 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08025e78 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08025e7c ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08025e80 sub r2, r2, 1 | r2--;
0x08025e84 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08025e88 cmp r2, 0 |
| if (r2 == 0) {
0x08025e8c beq 0x8025eb0 | goto label_4;
| }
| label_0:
0x08025e90 mov r0, r4 | r0 = r4;
0x08025e94 stmdaeq r2, {r2, r3, r7, r8, sb, fp, ip, lr} | __asm ("stmdaeq r2, {r2, r3, r7, r8, sb, fp, ip, lr}");
0x08025e98 mov r0, r5 | r0 = r5;
0x08025e9c add sp, sp, 0x14 |
0x08025ea0 pop {r4, r5, r6, r7, pc} |
| label_2:
0x08025ea4 stmdaeq r5, {r2, r3, r4, r5, r8, sb, sl, fp, lr} | __asm ("stmdaeq r5, {r2, r3, r4, r5, r8, sb, sl, fp, lr}");
0x08025ea8 stmdaeq r5, {r2, r3, r4, r5, r8, sb, sl, fp, lr} | __asm ("stmdaeq r5, {r2, r3, r4, r5, r8, sb, sl, fp, lr}");
0x08025eac b 0x8025e14 |
| }
| label_4:
0x08025eb0 ldr r3, [r3] | r3 = *(r3);
0x08025eb4 tst r3, 2 |
| if ((r3 & 2) == 0) {
0x08025eb8 beq 0x8025e90 | goto label_0;
| }
0x08025ebc stmdaeq sb, {r5, r6, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r5, r6, sb, sl, sp, pc}");
0x08025ec0 b 0x8025e90 | goto label_0;
| label_3:
0x08025ecc ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x08025ed0 mov r1, r5 | r1 = r5;
0x08025ed4 ldrd r6, r7, [r4, 0x10] | __asm ("ldrd r6, r7, [r4, 0x10]");
0x08025ed8 stmdaeq r5, {r2, ip, lr} | __asm ("stmdaeq r5, {r2, ip, lr}");
0x08025edc stmdaeq r5, {r2, ip, lr} | __asm ("stmdaeq r5, {r2, ip, lr}");
0x08025ee0 ldr r2, [pc, 0xc] | r2 = *(0x8025ef0);
0x08025ee4 str r3, [sp, 8] | var_8h = r3;
0x08025ee8 strd r6, r7, [sp] | __asm ("strd r6, r7, [sp]");
0x08025eec stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x08025ef0 b 0x8025e28 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x801e56c */
| #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;
0x0801e56c push {r4, r5, r6, r7, lr} |
0x0801e570 mov r4, r1 | r4 = r1;
0x0801e574 mov r5, r0 | r5 = r0;
0x0801e578 mov r1, 0 | r1 = 0;
0x0801e57c sub sp, sp, 0x14 |
0x0801e580 mov r7, r2 | r7 = r2;
0x0801e584 mov r2, 0x78 | r2 = 0x78;
0x0801e588 stmdaeq sb, {r2, r4, r5, r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r4, r5, r8, sb, sl, sp, pc}");
0x0801e58c ldr r2, [r4, 0x4c] | r2 = *((r4 + 0x4c));
0x0801e590 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x0801e594 mov r6, sp | r6 = sp;
0x0801e598 strd r2, r3, [r5, 8] | __asm ("strd r2, r3, [r5, 8]");
0x0801e59c mov r0, r6 | r0 = r6;
0x0801e5a0 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0801e5a4 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0801e5a8 str r2, [r5, 0x1c] | *((r5 + 0x1c)) = r2;
0x0801e5ac str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x0801e5b0 ldr r3, [r4] | r3 = *(r4);
0x0801e5b4 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0801e5b8 str r2, [r5, 0x14] | *((r5 + 0x14)) = r2;
0x0801e5bc str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x0801e5c0 ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x0801e5c4 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0801e5c8 stmdaeq r2, {r2, r4, fp, lr} | __asm ("stmdaeq r2, {r2, r4, fp, lr}");
0x0801e5cc add ip, r5, 0x40 |
0x0801e5d0 ldm r6, {r0, r1, r2, r3} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
| r3 = *((r6 + 12));
0x0801e5d4 stm ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x0801e5d8 mov r0, r6 | r0 = r6;
0x0801e5dc ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x0801e5e0 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0801e5e4 stmdaeq r2, {r2, r4, fp, lr} | __asm ("stmdaeq r2, {r2, r4, fp, lr}");
0x0801e5e8 add ip, r5, 0x50 |
0x0801e5ec ldm r6, {r0, r1, r2, r3} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
| r3 = *((r6 + 12));
0x0801e5f0 stm ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x0801e5f4 mov r0, r6 | r0 = r6;
0x0801e5f8 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x0801e5fc ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0801e600 stmdaeq r2, {r2, r4, fp, lr} | __asm ("stmdaeq r2, {r2, r4, fp, lr}");
0x0801e604 add ip, r5, 0x60 |
0x0801e608 ldm r6, {r0, r1, r2, r3} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
| r3 = *((r6 + 12));
0x0801e60c stm ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x0801e610 ldr r3, [r4, 0x54] | r3 = *((r4 + 0x54));
0x0801e614 ubfx r3, r3, 0, 0xc | r3 = (r3 >> 0) & ((1 << 0xc) - 1);
0x0801e618 strh r3, [r5, 0x30] | *((r5 + 0x30)) = r3;
0x0801e61c ldr r2, [r4, 0x38] | r2 = *((r4 + 0x38));
0x0801e620 sub r2, r2, 1 | r2--;
0x0801e624 cmp r2, 5 |
| if (r2 > 5) {
| /* switch table (6 cases) at 0x801e630 */
0x0801e628 ldrls pc, [pc, r2, lsl 2] | offset_0 = r2 << 2;
| pc = *((pc + offset_0));
| }
0x0801e62c b 0x801e770 | goto label_1;
| label_0:
0x0801e65c ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x0801e660 str r3, [r5, 0x28] | *((r5 + 0x28)) = r3;
0x0801e664 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x0801e668 ands r3, r3, 0x400 | r3 &= 0x400;
| if (r3 != r3) {
0x0801e66c bne 0x801e688 | goto label_2;
| }
0x0801e670 ldr r1, [r4, 0x28] | r1 = *((r4 + 0x28));
0x0801e674 mvn r0, 1 | r0 = ~1;
0x0801e678 ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x0801e67c cmp r0, r1 |
0x0801e680 sbcs r3, r3, r2 | __asm ("sbcs r3, r3, r2");
0x0801e684 bhs 0x801e734 |
| while (1) {
| label_2:
0x0801e688 ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x0801e68c str r3, [r5, 0x2c] | *((r5 + 0x2c)) = r3;
0x0801e690 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x0801e694 ands r3, r3, 0x800 | r3 &= 0x800;
| if (r3 == r3) {
0x0801e698 bne 0x801e6b4 |
0x0801e69c ldr r1, [r4, 0x30] | r1 = *((r4 + 0x30));
0x0801e6a0 mvn r0, 1 | r0 = ~1;
0x0801e6a4 ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x0801e6a8 cmp r0, r1 |
0x0801e6ac sbcs r3, r3, r2 | __asm ("sbcs r3, r3, r2");
| if (r0 >= r1) {
0x0801e6b0 bhs 0x801e74c | goto label_3;
| }
| }
0x0801e6b4 ldr r3, [r4, 0x5c] | r3 = *((r4 + 0x5c));
0x0801e6b8 str r3, [r5, 0x38] | *((r5 + 0x38)) = r3;
0x0801e6bc add sp, sp, 0x14 |
0x0801e6c0 pop {r4, r5, r6, r7, pc} |
0x0801e734 stmdaeq sb, {r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r8, sb, sl, sp, pc}");
0x0801e738 stmdaeq sb, {r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r8, sb, sl, sp, pc}");
0x0801e73c stmdaeq sb, {r6, r7, r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r6, r7, r8, sb, sl, sp, pc}");
0x0801e740 cmn r0, 1 |
| if (r0 == 1) {
0x0801e744 strne r0, [r5, 0x28] | *((r5 + 0x28)) = r0;
| }
0x0801e748 b 0x801e688 |
| }
| label_3:
0x0801e74c stmdaeq sb, {r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r8, sb, sl, sp, pc}");
0x0801e750 stmdaeq sb, {r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r8, sb, sl, sp, pc}");
0x0801e754 stmdaeq sb, {r2, r6, r7, r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r6, r7, r8, sb, sl, sp, pc}");
0x0801e758 cmn r0, 1 |
| if (r0 == 1) {
0x0801e75c strne r0, [r5, 0x2c] | *((r5 + 0x2c)) = r0;
| }
0x0801e760 ldr r3, [r4, 0x5c] | r3 = *((r4 + 0x5c));
0x0801e764 str r3, [r5, 0x38] | *((r5 + 0x38)) = r3;
0x0801e768 add sp, sp, 0x14 |
0x0801e76c pop {r4, r5, r6, r7, pc} |
| label_1:
0x0801e770 mvn r3, r3, lsl 17 | r3 = ~r3;
0x0801e774 mov r2, 8 | r2 = 8;
0x0801e778 str r2, [r5, 0x3c] | *((r5 + 0x3c)) = r2;
0x0801e77c mvn r3, r3, lsr 17 | r3 = ~r3;
0x0801e780 strh r3, [r5, 0x30] | *((r5 + 0x30)) = r3;
0x0801e784 b 0x801e65c | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x8042188 */
| #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_e0h, int32_t arg_e4h, int32_t arg_e8h, int32_t arg_ech, int32_t arg_f4h, int32_t arg_f8h, int32_t arg1, int32_t arg2) {
| int32_t var_2ch;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_38h;
| int32_t var_47h;
| int32_t var_58h;
| int32_t var_60h;
| int32_t var_64h;
| int32_t var_68h;
| int32_t var_70h;
| int32_t var_bch;
| r0 = arg1;
| r1 = arg2;
0x08042188 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0804218c mov r7, r3 | r7 = r3;
0x08042190 stmdaeq r5, {r2, r4, sb, ip} | __asm ("stmdaeq r5, {r2, r4, sb, ip}");
0x08042194 stmdaeq r5, {r2, r4, sb, ip} | __asm ("stmdaeq r5, {r2, r4, sb, ip}");
0x08042198 sub sp, sp, 0xbc |
0x0804219c mov r6, r1 | r6 = r1;
0x080421a0 add sb, sp, 0x58 | sb += var_58h;
0x080421a4 mov r5, r2 | r5 = r2;
0x080421a8 stmdaeq sb, {r2, r3, r4, r5, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r4, r5, r7, sb, sl, sp, pc}");
0x080421ac stmdaeq sb, {r2, r3, r4, r5, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r4, r5, r7, sb, sl, sp, pc}");
0x080421b0 str r0, [sp, 0x34] | var_34h = r0;
0x080421b4 ldm r3, {r0, r1} | r0 = *(r3);
| r1 = *((r3 + 4));
0x080421b8 stm sb, {r0, r1} | *(sb) = r0;
| *((sb + 4)) = r1;
0x080421bc ldr r8, [r6, 0x24] | r8 = *((r6 + 0x24));
0x080421c0 mov r1, 0xb20 | r1 = 0xb20;
0x080421c4 ldr r0, [r2, 0x24] | r0 = *((r2 + 0x24));
0x080421c8 mov sl, 0 | sl = 0;
0x080421cc ldrh fp, [sp, 0xec] | fp = *(arg_ech);
0x080421d0 str r8, [sp, 0x30] | var_30h = r8;
0x080421d4 strb sl, [sp, 0x47] | var_47h = sl;
0x080421d8 stmdaeq sb, {r2, r4, r5, r6, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r4, r5, r6, sb, sl, sp, pc}");
0x080421dc subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x080421e0 beq 0x8042db0 | goto label_5;
| }
0x080421e4 mov r0, r8 | r0 = r8;
0x080421e8 stmdaeq r2, {r2, r3, r4, r6, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r4, r6, r7, r8, sb, fp, sp, lr}");
0x080421ec str r0, [sp, 0x2c] | var_2ch = r0;
0x080421f0 mov r0, r6 | r0 = r6;
0x080421f4 stmdaeq r3, {r4, r5, r7, r8, sb, ip, sp, pc} | __asm ("stmdaeq r3, {r4, r5, r7, r8, sb, ip, sp, pc}");
0x080421f8 subs r0, r0, sl | r0 -= sl;
0x080421fc ldr r3, [sp, 0xf8] | r3 = *(arg_f8h);
0x08042200 mov r2, 0 | r2 = 0;
| if (r0 == r0) {
0x08042204 movne r0, 1 | r0 = 1;
| }
0x08042208 str sl, [sp, 0x68] | var_68h = sl;
0x0804220c cmp r3, sl |
0x08042210 lsl r3, r0, 0xb | r3 = r0 << 0xb;
0x08042214 add sl, r4, 0x38 | sl = r4 + 0x38;
0x08042218 str r3, [sp, 0x38] | var_38h = r3;
0x0804221c mov r3, 0 | r3 = 0;
0x08042220 strd r2, r3, [sp, 0x60] | __asm ("strd r2, r3, [var_60h]");
| if (r3 != sl) {
0x08042224 beq 0x8042264 |
0x08042228 ldr r3, [sp, 0xf4] | r3 = *(arg_f4h);
0x0804222c sub r7, r3, 2 | r7 = r3 - 2;
0x08042230 cmp r7, 9 |
| if (r7 > 9) {
| /* switch table (10 cases) at 0x804223c */
0x08042234 ldrls pc, [pc, r7, lsl 2] | offset_0 = r7 << 2;
| pc = *((pc + offset_0));
| }
0x08042238 b 0x8042a94 | goto label_6;
| }
0x08042264 mov r0, r7 | r0 = r7;
0x08042268 mov r1, r5 | r1 = r5;
0x0804226c stmdaeq r3, {r2, r4, r5, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r3, {r2, r4, r5, r6, r7, sl, fp, ip, pc}");
0x08042270 subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 == r0) {
0x08042274 beq 0x80424f0 | goto label_7;
| }
0x08042278 ldr r3, [sp, 0xe0] | r3 = *(arg_e0h);
0x0804227c cmp r5, 0 |
0x08042280 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x08042284 ldr r3, [sp, 0xe4] | r3 = *(arg_e4h);
0x08042288 str r6, [r4] | *(r4) = r6;
0x0804228c str r3, [r4, 8] | *((r4 + 8)) = r3;
| if (r5 != 0) {
0x08042290 beq 0x80422a4 |
0x08042294 mov r0, r5 | r0 = r5;
0x08042298 stmdaeq r2, {r3, r4, r5, r8, fp, ip, sp} | __asm ("stmdaeq r2, {r3, r4, r5, r8, fp, ip, sp}");
0x0804229c cmp r0, 0 |
| if (r0 != 0) {
0x080422a0 bne 0x8042b24 | goto label_8;
| }
| }
0x080422a4 ldr r3, [sp, 0xe8] | r3 = *(arg_e8h);
| label_1:
0x080422a8 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x080422ac add r0, sp, 0x70 | r0 += var_70h;
0x080422b0 ldrb r3, [r4, 0x1e] | r3 = *((r4 + 0x1e));
0x080422b4 mov ip, 8 |
0x080422b8 str r5, [r4, 4] | *((r4 + 4)) = r5;
0x080422bc mov r2, sl | r2 = sl;
0x080422c0 str r0, [r4, 0x18] | *((r4 + 0x18)) = r0;
0x080422c4 add r0, r4, 0x8c | r0 = r4 + 0x8c;
0x080422c8 str ip, [r4, 0x3c] | *((r4 + 0x3c)) = ip;
0x080422cc bfc r3, 0, 1 | value_1 = BIT_MASK (1, );
| value_1 = ~value_1;
| r3 &= value_1;
0x080422d0 str r0, [r4, 0x38] | *((r4 + 0x38)) = r0;
0x080422d4 mov r0, r6 | r0 = r6;
0x080422d8 strb r3, [r4, 0x1e] | *((r4 + 0x1e)) = r3;
0x080422dc add r3, sp, 0x47 | r3 += var_47h;
0x080422e0 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x080422e4 strh fp, [r4, 0x1c] | *((r4 + 0x1c)) = fp;
0x080422e8 stm sp, {r4, r7} | *(sp) = r4;
| *((sp + 4)) = r7;
0x080422ec stmdaeq r3, {r2, r3, r5, r6, r7, r8, sl, ip, lr, pc} | __asm ("stmdaeq r3, {r2, r3, r5, r6, r7, r8, sl, ip, lr, pc}");
0x080422f0 mov r5, r0 | r5 = r0;
0x080422f4 mov r0, r7 | r0 = r7;
0x080422f8 stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc}");
0x080422fc cmp r5, 0 |
| if (r5 == 0) {
0x08042300 beq 0x8042adc | goto label_9;
| }
0x08042304 ldr r3, [sp, 0xf4] | r3 = *(arg_f4h);
0x08042308 sub r7, r3, 2 | r7 = r3 - 2;
0x0804230c mov r0, sl | r0 = sl;
0x08042310 stmdaeq r3, {r3, r5, r6, r7, r8, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r3, {r3, r5, r6, r7, r8, sb, sl, fp, ip, lr, pc}");
0x08042314 cmn r5, 0x4e |
| if (r5 == 0x4e) {
0x08042318 beq 0x80424b0 | goto label_10;
| }
0x0804231c cmp r7, 9 |
| if (r7 > 9) {
| /* switch table (10 cases) at 0x8042328 */
0x08042320 ldrls pc, [pc, r7, lsl 2] | offset_2 = r7 << 2;
| pc = *((pc + offset_2));
| }
0x08042324 b 0x804241c |
| while (1) {
0x0804241c ldr r1, [r4, 0x20] | r1 = *((r4 + 0x20));
0x08042420 ldr r0, [sp, 0x60] | r0 = var_60h;
0x08042424 stmdaeq r2, {r3, r5, r6, r8, sb, sl, fp, sp} | __asm ("stmdaeq r2, {r3, r5, r6, r8, sb, sl, fp, sp}");
0x08042428 ldr r1, [r4, 0x28] | r1 = *((r4 + 0x28));
0x0804242c ldr r0, [sp, 0x64] | r0 = var_64h;
0x08042430 stmdaeq r2, {r3, r5, r6, r8, sb, sl, fp, sp} | __asm ("stmdaeq r2, {r3, r5, r6, r8, sb, sl, fp, sp}");
0x08042434 ldr r1, [r4, 0x30] | r1 = *((r4 + 0x30));
0x08042438 ldr r0, [sp, 0x68] | r0 = var_68h;
0x0804243c stmdaeq r2, {r3, r5, r6, r8, sb, sl, fp, sp} | __asm ("stmdaeq r2, {r3, r5, r6, r8, sb, sl, fp, sp}");
0x08042440 mov r0, r4 | r0 = r4;
0x08042444 stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r6, r7, sb, sl, sp, pc}");
| label_2:
0x08042448 mov r0, r5 | r0 = r5;
0x0804244c add sp, sp, 0xbc |
0x08042450 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_10:
0x080424b0 stmdaeq r6, {r2, r3, r4, r5, r6, r7, r8, ip, lr, pc} | __asm ("stmdaeq r6, {r2, r3, r4, r5, r6, r7, r8, ip, lr, pc}");
0x080424b4 stmdaeq r6, {r2, r3, r4, r5, r6, r7, r8, ip, lr, pc} | __asm ("stmdaeq r6, {r2, r3, r4, r5, r6, r7, r8, ip, lr, pc}");
0x080424b8 ldrb r2, [r3] | r2 = *(r3);
0x080424bc cmp r2, 0 |
| if (r2 == 0) {
0x080424c0 beq 0x8042db8 | goto label_11;
| }
| label_3:
0x080424c4 ldrb r3, [r6, 0x64a] | r3 = *((r6 + 0x64a));
0x080424c8 mvn r5, 0x4d | r5 = ~0x4d;
0x080424cc orr r3, r3, 1 | r3 |= 1;
0x080424d0 strb r3, [r6, 0x64a] | *((r6 + 0x64a)) = r3;
0x080424d4 b 0x8042504 | goto label_0;
| label_7:
0x080424f0 ldr r3, [sp, 0xf4] | r3 = *(arg_f4h);
0x080424f4 mov r0, sl | r0 = sl;
0x080424f8 mvn r5, 0xb | r5 = ~0xb;
0x080424fc sub r7, r3, 2 | r7 = r3 - 2;
0x08042500 stmdaeq r3, {r3, r5, r6, r7, r8, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r3, {r3, r5, r6, r7, r8, sb, sl, fp, ip, lr, pc}");
| label_0:
0x08042504 cmp r7, 9 |
| if (r7 > 9) {
| /* switch table (10 cases) at 0x8042510 */
0x08042508 ldrls pc, [pc, r7, lsl 2] | offset_3 = r7 << 2;
| pc = *((pc + offset_3));
| }
0x0804250c b 0x804241c |
| }
| label_6:
0x08042a94 ldr r1, [pc, 0x35c] | r1 = *(0x8042df4);
0x08042a98 stmdaeq r6, {r2, r4, r6, r7, r8, sb, sl, fp, lr, pc} | __asm ("stmdaeq r6, {r2, r4, r6, r7, r8, sb, sl, fp, lr, pc}");
0x08042a9c stmdaeq r6, {r2, r4, r6, r7, r8, sb, sl, fp, lr, pc} | __asm ("stmdaeq r6, {r2, r4, r6, r7, r8, sb, sl, fp, lr, pc}");
0x08042aa0 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x08042aa4 cmp r0, 0 |
| if (r0 != 0) {
0x08042aa8 bne 0x8042dd4 | goto label_12;
| }
0x08042aac ldr r0, [sp, 0xf8] | r0 = *(arg_f8h);
0x08042ab0 stmdaeq r1, {r2, r4, r8, sb, fp, pc} | __asm ("stmdaeq r1, {r2, r4, r8, sb, fp, pc}");
0x08042ab4 mov r0, sl | r0 = sl;
0x08042ab8 stmdaeq r3, {r3, r5, r6, r7, r8, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r3, {r3, r5, r6, r7, r8, sb, sl, fp, ip, lr, pc}");
| do {
0x08042abc mvn r5, 0x15 | r5 = ~0x15;
0x08042ac0 b 0x8042504 | goto label_0;
| label_9:
0x08042adc mov r1, sl | r1 = sl;
0x08042ae0 mov r0, r6 | r0 = r6;
0x08042ae4 stmdaeq r3, {r2, r4, r8, ip, lr} | __asm ("stmdaeq r3, {r2, r4, r8, ip, lr}");
0x08042ae8 ldr r3, [sp, 0xf4] | r3 = *(arg_f4h);
0x08042aec sub r7, r3, 2 | r7 = r3 - 2;
0x08042af0 cmp r7, 9 |
| if (r7 > 9) {
| /* switch table (10 cases) at 0x8042afc */
0x08042af4 ldrls pc, [pc, r7, lsl 2] | offset_4 = r7 << 2;
| pc = *((pc + offset_4));
| }
0x08042af8 b 0x8042cc4 | goto label_13;
| label_8:
0x08042b24 ldr r3, [sp, 0xe8] | r3 = *(arg_e8h);
0x08042b28 orr r3, r3, 0x4000 | r3 |= 0x4000;
0x08042b2c b 0x80422a8 | goto label_1;
| label_13:
0x08042cc4 ldr r1, [pc, 0x12c] | r1 = *(0x8042df4);
0x08042cc8 stmdaeq r6, {r2, r4, r6, r7, r8, sb, sl, fp, lr, pc} | __asm ("stmdaeq r6, {r2, r4, r6, r7, r8, sb, sl, fp, lr, pc}");
0x08042ccc stmdaeq r6, {r2, r4, r6, r7, r8, sb, sl, fp, lr, pc} | __asm ("stmdaeq r6, {r2, r4, r6, r7, r8, sb, sl, fp, lr, pc}");
0x08042cd0 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x08042cd4 cmp r0, 0 |
| if (r0 != 0) {
0x08042cd8 bne 0x8042dd4 | goto label_12;
| }
| label_4:
0x08042cdc mov r0, sl | r0 = sl;
0x08042ce0 stmdaeq r3, {r3, r5, r6, r7, r8, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r3, {r3, r5, r6, r7, r8, sb, sl, fp, ip, lr, pc}");
0x08042ce4 b 0x8042abc |
| } while (1);
| label_5:
0x08042db0 mvn r5, 0xb | r5 = ~0xb;
0x08042db4 b 0x8042448 | goto label_2;
| label_11:
0x08042db8 add r1, r6, 0x28 | r1 = r6 + 0x28;
0x08042dbc stmdaeq r6, {r5, sb, ip, pc} | __asm ("stmdaeq r6, {r5, sb, ip, pc}");
0x08042dc0 stmdaeq r6, {r5, sb, ip, pc} | __asm ("stmdaeq r6, {r5, sb, ip, pc}");
0x08042dc4 mov r2, 1 | r2 = 1;
0x08042dc8 strb r2, [r3] | *(r3) = r2;
0x08042dcc stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x08042dd0 b 0x80424c4 | goto label_3;
| label_12:
0x08042dd4 stmdaeq r6, {sb, ip, pc} | __asm ("stmdaeq r6, {sb, ip, pc}");
0x08042dd8 stmdaeq r6, {sb, ip, pc} | __asm ("stmdaeq r6, {sb, ip, pc}");
0x08042ddc stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x08042de0 ldr r3, [sp, 0xf8] | r3 = *(arg_f8h);
0x08042de4 cmp r3, 0 |
| if (r3 == 0) {
0x08042de8 beq 0x8042cdc | goto label_4;
| }
0x08042dec mov r0, r3 | r0 = r3;
0x08042df0 stmdaeq r1, {r2, r4, r8, sb, fp, pc} | __asm ("stmdaeq r1, {r2, r4, r8, sb, fp, pc}");
0x08042df4 b 0x8042cdc | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x80394fc */
| #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;
0x080394fc push {r4, r5, r6, lr} |
| if (? != ?) {
0x08039500 andeq r0, r0, r0 | r0 &= r0;
| }
| if (? != ?) {
0x08039504 andeq r0, r0, r0 | r0 &= r0;
| }
0x08039508 str r3, [r0] | *(r0) = r3;
0x0803950c mov r6, r1 | r6 = r1;
| if (? != ?) {
0x08039510 andeq r0, r0, r1 | r0 &= r1;
| }
0x08039514 mov r4, r2 | r4 = r2;
0x08039518 ldr r0, [r2] | r0 = *(r2);
0x0803951c cmp r3, 0 |
0x08039520 cmpne r3, 0xc0000016 | __asm ("cmpne r3, 0xc0000016");
| if (r3 != 0) {
0x08039524 beq 0x8039534 |
0x08039528 ldrh r3, [r2, 0x40] | r3 = *((r2 + 0x40));
0x0803952c cmp r3, 9 |
| if (r3 == 9) {
0x08039530 beq 0x80395fc | goto label_4;
| }
| }
0x08039534 ldrh r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x08039538 cmp r3, 0x10 |
| if (r3 > 0x10) {
| /* switch table (17 cases) at 0x8039544 */
0x0803953c ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x08039540 b 0x803962c |
| while (r0 == 0) {
| label_0:
0x08039598 ldr r3, [r5] | r3 = *(r5);
0x0803959c cmp r3, 0x1000 |
| if (r3 <= 0x1000) {
0x080395a0 bgt 0x8039604 |
0x080395a4 cmp r3, 0 |
| if (r3 >= 0) {
0x080395a8 blt 0x80395d8 |
0x080395ac ldr r2, [r6] | r2 = *(r6);
0x080395b0 cmp r2, 0 |
| if (r2 < 0) {
0x080395b4 blt 0x80396b8 | goto label_5;
| }
0x080395b8 cmp r2, 0x20000 |
| if (r2 > 0x20000) {
0x080395bc bgt 0x80396e0 | goto label_6;
| }
0x080395c0 cmp r3, 0 |
| if (r3 == 0) {
0x080395c4 beq 0x80395fc | goto label_4;
| }
0x080395c8 cmp r2, 0 |
| if (r2 == 0) {
0x080395cc beq 0x80395fc | goto label_4;
| }
0x080395d0 add r0, r4, r3 | r0 = r4 + r3;
0x080395d4 pop {r4, r5, r6, pc} |
| }
0x080395d8 ldr r1, [pc, 0x150] | r1 = *(0x803972c);
0x080395dc ldr r0, [pc, 0x150] | r0 = "cifs_remap_file_range";
0x080395e0 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x080395e4 cmp r0, 0 |
| if (r0 != 0) {
0x080395e8 bne 0x803971c | goto label_7;
| }
| label_3:
0x080395ec mov r3, 0 | r3 = 0;
0x080395f0 str r3, [r5] | *(r5) = r3;
| label_1:
0x080395f4 mov r3, 0 | r3 = 0;
0x080395f8 str r3, [r6] | *(r6) = r3;
| label_4:
0x080395fc mov r0, 0 | r0 = 0;
0x08039600 pop {r4, r5, r6, pc} |
| }
0x08039604 ldr r1, [pc, 0x124] | r1 = *(0x803972c);
0x08039608 ldr r0, [pc, 0x128] | r0 = .data;
0x0803960c stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x08039610 cmp r0, 0 |
| if (r0 != 0) {
0x08039614 bne 0x8039708 | goto label_8;
| }
| label_2:
0x08039618 mov r3, 0 | r3 = 0;
0x0803961c mov r0, 0 | r0 = 0;
0x08039620 str r3, [r6] | *(r6) = r3;
0x08039624 str r3, [r5] | *(r5) = r3;
0x08039628 pop {r4, r5, r6, pc} |
0x0803962c ldr r1, [pc, 0xfc] | r1 = *(0x803972c);
0x08039630 ldr r0, [pc, 0x104] | r0 = .data;
0x08039634 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x08039638 cmp r0, 0 |
0x0803963c beq 0x8039598 |
| }
0x08039640 ldrh r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x08039644 stmdaeq r6, {r3, r8, pc} | __asm ("stmdaeq r6, {r3, r8, pc}");
0x08039648 stmdaeq r6, {r3, r8, pc} | __asm ("stmdaeq r6, {r3, r8, pc}");
0x0803964c stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x08039650 b 0x8039598 | goto label_0;
| label_5:
0x080396b8 ldr r1, [pc, 0x70] | r1 = *(0x803972c);
0x080396bc ldr r0, [pc, 0x7c] | r0 = .data;
0x080396c0 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x080396c4 cmp r0, 0 |
| if (r0 == 0) {
0x080396c8 beq 0x80395f4 | goto label_1;
| }
0x080396cc ldr r1, [r6] | r1 = *(r6);
0x080396d0 stmdaeq r6, {r2, r4, r5, r7, r8, pc} | __asm ("stmdaeq r6, {r2, r4, r5, r7, r8, pc}");
0x080396d4 stmdaeq r6, {r2, r4, r5, r7, r8, pc} | __asm ("stmdaeq r6, {r2, r4, r5, r7, r8, pc}");
0x080396d8 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x080396dc b 0x80395f4 | goto label_1;
| label_6:
0x080396e0 ldr r1, [pc, 0x48] | r1 = *(0x803972c);
0x080396e4 ldr r0, [pc, 0x58] | r0 = .data;
0x080396e8 stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r7, sb, sl, sp, pc}");
0x080396ec cmp r0, 0 |
| if (r0 == 0) {
0x080396f0 beq 0x80395f4 | goto label_1;
| }
0x080396f4 ldr r1, [r6] | r1 = *(r6);
0x080396f8 stmdaeq r6, {r3, r4, r5, r6, r7, r8, pc} | __asm ("stmdaeq r6, {r3, r4, r5, r6, r7, r8, pc}");
0x080396fc stmdaeq r6, {r3, r4, r5, r6, r7, r8, pc} | __asm ("stmdaeq r6, {r3, r4, r5, r6, r7, r8, pc}");
0x08039700 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x08039704 b 0x80395f4 | goto label_1;
| label_8:
0x08039708 ldr r1, [r5] | r1 = *(r5);
0x0803970c stmdaeq r6, {r3, r4, r5, r8, pc} | __asm ("stmdaeq r6, {r3, r4, r5, r8, pc}");
0x08039710 stmdaeq r6, {r3, r4, r5, r8, pc} | __asm ("stmdaeq r6, {r3, r4, r5, r8, pc}");
0x08039714 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x08039718 b 0x8039618 | goto label_2;
| label_7:
0x0803971c ldr r1, [r5] | r1 = *(r5);
0x08039720 stmdaeq r6, {r4, r5, r6, r8, pc} | __asm ("stmdaeq r6, {r4, r5, r6, r8, pc}");
0x08039724 stmdaeq r6, {r4, r5, r6, r8, pc} | __asm ("stmdaeq r6, {r4, r5, r6, r8, pc}");
0x08039728 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x0803972c b 0x80395ec | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x803abcc */
| #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;
0x0803abcc push {r4, r5, r6, r7, r8, sb, lr} |
0x0803abd0 mov r5, r0 | r5 = r0;
0x0803abd4 ldr r4, [r0, 0x34] | r4 = *((r0 + 0x34));
0x0803abd8 sub sp, sp, 0x34 |
0x0803abdc ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x0803abe0 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0803abe4 ldr r7, [r4, 0x68] | r7 = *((r4 + 0x68));
0x0803abe8 ldr r8, [r4, 0x58] | r8 = *((r4 + 0x58));
0x0803abec ldr r3, [r3, 0x74] | r3 = *((r3 + 0x74));
0x0803abf0 cmp r2, r7 |
0x0803abf4 ldr r6, [r3, 0x1c] | r6 = *((r3 + 0x1c));
0x0803abf8 ldr r3, [r4, 0x84] | r3 = *((r4 + 0x84));
0x0803abfc str r3, [sp, 0x1c] | var_1ch = r3;
0x0803ac00 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x0803ac04 str r3, [sp, 0x28] | var_28h = r3;
0x0803ac08 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x0803ac0c str r3, [sp, 0x2c] | var_2ch = r3;
0x0803ac10 ldr r3, [r4, 0x80] | r3 = *((r4 + 0x80));
0x0803ac14 str r3, [sp, 0x24] | var_24h = r3;
0x0803ac18 ldr r3, [r4, 0x70] | r3 = *((r4 + 0x70));
0x0803ac1c str r3, [sp, 0x20] | var_20h = r3;
0x0803ac20 mov r3, 0 | r3 = 0;
0x0803ac24 str r3, [sp, 0xc] | var_ch = r3;
0x0803ac28 str r3, [sp, 0x10] | var_10h = r3;
0x0803ac2c add r3, r4, 0x60 | r3 = r4 + 0x60;
0x0803ac30 str r3, [sp, 0x14] | var_14h = r3;
0x0803ac34 mov r3, 1 | r3 = 1;
0x0803ac38 str r3, [sp, 0x18] | var_18h = r3;
| if (r2 != r7) {
0x0803ac3c bne 0x803add0 | goto label_1;
| }
| label_0:
0x0803ac40 ldr r3, [r5, 0x44] | r3 = *((r5 + 0x44));
0x0803ac44 sub r3, r3, 2 | r3 -= 2;
0x0803ac48 cmp r3, 0xe |
| if (r3 > 0xe) {
| /* switch table (15 cases) at 0x803ac54 */
0x0803ac4c ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x0803ac50 b 0x803aca0 |
0x0803aca0 mvn r3, 4 | r3 = ~4;
0x0803aca4 str r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
0x0803aca8 add r3, r6, 0x5b0 | r3 = r6 + 0x5b0;
0x0803acac add r3, r3, 4 | r3 += 4;
0x0803acb0 pld [r3] | __asm ("pld [r3]");
| do {
0x0803acb4 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x0803acb8 add r2, r2, 1 | r2++;
0x0803acbc strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x0803acc0 teq r1, 0 | __asm ("teq r1, 0");
0x0803acc4 bne 0x803acb4 |
| } while (r3 != 0xe);
0x0803acc8 stmdaeq r6, {r2, r5, r6, r8, sb, fp, sp, lr, pc} | __asm ("stmdaeq r6, {r2, r5, r6, r8, sb, fp, sp, lr, pc}");
0x0803accc stmdaeq r6, {r2, r5, r6, r8, sb, fp, sp, lr, pc} | __asm ("stmdaeq r6, {r2, r5, r6, r8, sb, fp, sp, lr, pc}");
0x0803acd0 add r2, r4, 0x40 | r2 = r4 + 0x40;
0x0803acd4 mov r0, 1 | r0 = 1;
0x0803acd8 ldr r1, [r3] | r1 = *(r3);
0x0803acdc stmdaeq sb, {r3, r5, r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r3, r5, r8, sb, sl, sp, pc}");
0x0803ace0 mov r0, r5 | r0 = r5;
0x0803ace4 stmdaeq r2, {r2, r8, sl, fp, ip, lr} | __asm ("stmdaeq r2, {r2, r8, sl, fp, ip, lr}");
0x0803ace8 ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x0803acec add r1, sp, 0xc | r1 += var_ch;
0x0803acf0 mov r0, r7 | r0 = r7;
0x0803acf4 mov r2, 0 | r2 = 0;
0x0803acf8 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0803acfc blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0803ad00 add sp, sp, 0x34 |
0x0803ad04 pop {r4, r5, r6, r7, r8, sb, pc} |
| label_1:
0x0803add0 stmdaeq r6, {r2, r3, r5, r6, r7, r8, ip, lr, pc} | __asm ("stmdaeq r6, {r2, r3, r5, r6, r7, r8, ip, lr, pc}");
0x0803add4 stmdaeq r6, {r2, r3, r5, r6, r7, r8, ip, lr, pc} | __asm ("stmdaeq r6, {r2, r3, r5, r6, r7, r8, ip, lr, pc}");
0x0803add8 ldrb r0, [r1, 2] | r0 = *((r1 + 2));
0x0803addc cmp r0, 0 |
| if (r0 != 0) {
0x0803ade0 bne 0x803ac40 | goto label_0;
| }
0x0803ade4 strb r3, [r1, 2] | *((r1 + 2)) = r3;
0x0803ade8 stmdaeq r6, {sb, sl, pc} | __asm ("stmdaeq r6, {sb, sl, pc}");
0x0803adec stmdaeq r6, {sb, sl, pc} | __asm ("stmdaeq r6, {sb, sl, pc}");
0x0803adf0 str r2, [sp, 4] | var_4h = r2;
0x0803adf4 str r7, [sp] | *(sp) = r7;
0x0803adf8 stmdaeq r6, {r2, r3, r4, r5, sb, sl, pc} | __asm ("stmdaeq r6, {r2, r3, r4, r5, sb, sl, pc}");
0x0803adfc stmdaeq r6, {r2, r3, r4, r5, sb, sl, pc} | __asm ("stmdaeq r6, {r2, r3, r4, r5, sb, sl, pc}");
0x0803ae00 mov r2, 9 | r2 = 9;
0x0803ae04 movw r1, 0xf5d | r1 = 0xf5d;
0x0803ae08 stmdaeq sb, {r2, r3, r6, r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r6, r8, sb, sl, sp, pc}");
0x0803ae0c b 0x803ac40 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/cifs/cifs.ko @ 0x803a9e8 */
| #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_8h_2;
| int32_t var_10h;
| r0 = arg1;
0x0803a9e8 push {r4, r5, r6, r7, r8, lr} |
0x0803a9ec mov r2, 0 | r2 = 0;
0x0803a9f0 mov r3, 0 | r3 = 0;
0x0803a9f4 ldr r5, [r0, 0x34] | r5 = *((r0 + 0x34));
0x0803a9f8 sub sp, sp, 0x10 |
0x0803a9fc ldr r8, [r0, 0x3c] | r8 = *((r0 + 0x3c));
0x0803aa00 mov r4, r0 | r4 = r0;
0x0803aa04 strd r2, r3, [sp, 8] | __asm ("strd r2, r3, [var_8h]");
0x0803aa08 ldr r2, [r5, 0x2c] | r2 = *((r5 + 0x2c));
0x0803aa0c ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x0803aa10 ldr r6, [r5, 0x4c] | r6 = *((r5 + 0x4c));
0x0803aa14 ldr r2, [r2, 0x74] | r2 = *((r2 + 0x74));
0x0803aa18 cmp r3, r6 |
0x0803aa1c ldr r7, [r2, 0x1c] | r7 = *((r2 + 0x1c));
| if (r3 != r6) {
0x0803aa20 bne 0x803ab88 | goto label_2;
| }
| label_1:
0x0803aa24 ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x0803aa28 sub r3, r3, 2 | r3 -= 2;
0x0803aa2c cmp r3, 0xe |
| if (r3 > 0xe) {
| /* switch table (15 cases) at 0x803aa38 */
0x0803aa30 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x0803aa34 b 0x803aa84 |
0x0803aa84 mvn r3, 4 | r3 = ~4;
0x0803aa88 str r3, [r5, 0x48] | *((r5 + 0x48)) = r3;
0x0803aa8c add r3, r7, 0x5b0 | r3 = r7 + 0x5b0;
0x0803aa90 add r3, r3, 8 | r3 += 8;
0x0803aa94 pld [r3] | __asm ("pld [r3]");
| do {
0x0803aa98 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x0803aa9c add r2, r2, 1 | r2++;
0x0803aaa0 strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x0803aaa4 teq r1, 0 | __asm ("teq r1, 0");
0x0803aaa8 bne 0x803aa98 |
| } while (r3 != 0xe);
0x0803aaac ldr r3, [r5, 0x48] | r3 = *((r5 + 0x48));
0x0803aab0 cmn r3, 0x1c |
0x0803aab4 beq 0x803ab58 |
| while (r2 != 0) {
| label_0:
0x0803aab8 stmdaeq r6, {r2, r5, r6, r8, sb, fp, sp, lr, pc} | __asm ("stmdaeq r6, {r2, r5, r6, r8, sb, fp, sp, lr, pc}");
0x0803aabc stmdaeq r6, {r2, r5, r6, r8, sb, fp, sp, lr, pc} | __asm ("stmdaeq r6, {r2, r5, r6, r8, sb, fp, sp, lr, pc}");
0x0803aac0 add r2, r5, 0x1c | r2 = r5 + 0x1c;
0x0803aac4 mov r0, 1 | r0 = 1;
0x0803aac8 ldr r1, [r3] | r1 = *(r3);
0x0803aacc stmdaeq sb, {r3, r5, r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r3, r5, r8, sb, sl, sp, pc}");
0x0803aad0 mov r0, r4 | r0 = r4;
0x0803aad4 stmdaeq r2, {r2, r8, sl, fp, ip, lr} | __asm ("stmdaeq r2, {r2, r8, sl, fp, ip, lr}");
0x0803aad8 ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x0803aadc add r1, sp, 8 | r1 += var_8h;
0x0803aae0 mov r0, r6 | r0 = r6;
0x0803aae4 mov r2, 0 | r2 = 0;
0x0803aae8 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0803aaec blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0803aaf0 add sp, sp, 0x10 |
0x0803aaf4 pop {r4, r5, r6, r7, r8, pc} |
0x0803ab58 stmdaeq r6, {r2, r3, r5, r6, r7, r8, ip, lr, pc} | __asm ("stmdaeq r6, {r2, r3, r5, r6, r7, r8, ip, lr, pc}");
0x0803ab5c stmdaeq r6, {r2, r3, r5, r6, r7, r8, ip, lr, pc} | __asm ("stmdaeq r6, {r2, r3, r5, r6, r7, r8, ip, lr, pc}");
0x0803ab60 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x0803ab64 cmp r2, 0 |
0x0803ab68 bne 0x803aab8 |
| }
0x0803ab6c add r1, r7, 0x28 | r1 = r7 + 0x28;
0x0803ab70 stmdaeq r6, {r2, r4, sb, sl, pc} | __asm ("stmdaeq r6, {r2, r4, sb, sl, pc}");
0x0803ab74 stmdaeq r6, {r2, r4, sb, sl, pc} | __asm ("stmdaeq r6, {r2, r4, sb, sl, pc}");
0x0803ab78 mov r2, 1 | r2 = 1;
0x0803ab7c strb r2, [r3, 1] | *((r3 + 1)) = r2;
0x0803ab80 stmdaeq sb, {r4, r7, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r4, r7, sb, sl, sp, pc}");
0x0803ab84 b 0x803aab8 | goto label_0;
| label_2:
0x0803ab88 stmdaeq r6, {r2, r3, r5, r6, r7, r8, ip, lr, pc} | __asm ("stmdaeq r6, {r2, r3, r5, r6, r7, r8, ip, lr, pc}");
0x0803ab8c stmdaeq r6, {r2, r3, r5, r6, r7, r8, ip, lr, pc} | __asm ("stmdaeq r6, {r2, r3, r5, r6, r7, r8, ip, lr, pc}");
0x0803ab90 ldrb r2, [ip] | r2 = *(ip);
0x0803ab94 cmp r2, 0 |
| if (r2 != 0) {
0x0803ab98 bne 0x803aa24 | goto label_1;
| }
0x0803ab9c str r3, [sp, 4] | var_4h = r3;
0x0803aba0 mov lr, 1 | lr = 1;
0x0803aba4 str r6, [sp] | *(sp) = r6;
0x0803aba8 stmdaeq r6, {r2, r3, r4, r6, r7, r8, sl, pc} | __asm ("stmdaeq r6, {r2, r3, r4, r6, r7, r8, sl, pc}");
0x0803abac stmdaeq r6, {r2, r3, r4, r6, r7, r8, sl, pc} | __asm ("stmdaeq r6, {r2, r3, r4, r6, r7, r8, sl, pc}");
0x0803abb0 stmdaeq r6, {sb, sl, pc} | __asm ("stmdaeq r6, {sb, sl, pc}");
0x0803abb4 stmdaeq r6, {sb, sl, pc} | __asm ("stmdaeq r6, {sb, sl, pc}");
0x0803abb8 mov r2, 9 | r2 = 9;
0x0803abbc movw r1, 0x1049 | r1 = 0x1049;
0x0803abc0 strb lr, [ip] |
0x0803abc4 stmdaeq sb, {r2, r3, r6, r8, sb, sl, sp, pc} | __asm ("stmdaeq sb, {r2, r3, r6, r8, sb, sl, sp, pc}");
0x0803abc8 b 0x803aa24 | goto label_1;
| }
[*] Function fprintf used 1 times cifs.ko