[*] Binary protection state of ip_vs.ko
No RELRO No Canary found NX disabled REL No RPATH No RUNPATH Symbols
[*] Function fprintf tear down of ip_vs.ko
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x800bc48 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.do_ip_vs_get_ctl () | void do_ip_vs_get_ctl (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_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_34h;
| int32_t var_48h;
| int32_t var_b4h;
| r0 = arg1;
| r1 = arg2;
0x0800bc48 push {r4, r5, r6, r7, r8, sb, lr} |
0x0800bc4c mov r5, r2 | r5 = r2;
0x0800bc50 ldr r2, [r0, 0x24] | r2 = *((r0 + 0x24));
0x0800bc54 sub sp, sp, 0xb4 |
0x0800bc58 cmp r2, 0 |
0x0800bc5c ldr r7, [r2, 0x888] | r7 = *((r2 + 0x888));
| if (r2 == 0) {
0x0800bc60 beq 0x800c048 | goto label_4;
| }
0x0800bc64 ldr r0, [r2, 0x30] | r0 = *((r2 + 0x30));
0x0800bc68 mov r4, r1 | r4 = r1;
0x0800bc6c mov r1, 0xc | r1 = 0xc;
0x0800bc70 mov r6, r3 | r6 = r3;
0x0800bc74 stmdaeq r2, {r0, r3, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r3, r6, r7, r8, ip, sp, lr}");
0x0800bc78 cmp r0, 0 |
| if (r0 == 0) {
0x0800bc7c beq 0x800c23c | goto label_5;
| }
0x0800bc80 sub r8, r4, 0x480 | r8 = r4 - 0x480;
0x0800bc84 cmp r8, 7 |
| if (r8 > 7) {
0x0800bc88 bhi 0x800c234 | goto label_6;
| }
0x0800bc8c stmdaeq r1, {r2, r5, r7, sl, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r5, r7, sl, ip, sp, lr}");
0x0800bc90 stmdaeq r1, {r2, r5, r7, sl, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r5, r7, sl, ip, sp, lr}");
0x0800bc94 add r3, r3, r4 | r3 += r4;
0x0800bc98 ldrb r2, [r3, -0x2a0] | r2 = *((r3 - 0x2a0));
0x0800bc9c ldr r3, [r6] | r3 = *(r6);
0x0800bca0 cmp r3, r2 |
| if (r3 < r2) {
0x0800bca4 blt 0x800c234 | goto label_6;
| }
0x0800bca8 cmp r2, 0x68 |
| if (r2 > 0x68) {
0x0800bcac bhi 0x800c204 | goto label_7;
| }
0x0800bcb0 mov r3, sp | r3 = sp;
0x0800bcb4 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x0800bcb8 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x0800bcbc ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0800bcc0 adds r0, r5, r2 | r0 = r5 + r2;
0x0800bcc4 sbcslo r0, r0, r1 | __asm ("sbcslo r0, r0, r1");
| if (r0 >= r5) {
0x0800bcc8 movlo r1, 0 | r1 = 0;
| }
0x0800bccc cmp r1, 0 |
| if (r1 == 0) {
0x0800bcd0 bne 0x800bd00 |
0x0800bcd4 mrc p15, 0, sb, c3, c0, 0 | __asm ("mrc p15, 0, sb, c3, c0, 0");
0x0800bcd8 bic r3, sb, 0xc | r3 = BIT_MASK (sb, 0xc);
0x0800bcdc orr r3, r3, 4 | r3 |= 4;
0x0800bce0 mcr p15, 0, r3, c3, c0, 0 | __asm ("mcr p15, 0, r3, c3, c0, 0");
0x0800bce4 isb sy | __asm ("isb sy");
0x0800bce8 mov r1, r5 | r1 = r5;
0x0800bcec add r0, sp, 0x48 | r0 += var_48h;
0x0800bcf0 stmdaeq r2, {r0, r2, r3, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r3, r6, r7, r8, ip, sp, lr}");
0x0800bcf4 mov r2, r0 | r2 = r0;
0x0800bcf8 mcr p15, 0, sb, c3, c0, 0 | __asm ("mcr p15, 0, sb, c3, c0, 0");
0x0800bcfc isb sy | __asm ("isb sy");
| }
0x0800bd00 cmp r2, 0 |
| if (r2 != 0) {
0x0800bd04 bne 0x800c04c | goto label_8;
| }
0x0800bd08 movw r3, 0x487 | r3 = 0x487;
0x0800bd0c cmp r4, r3 |
| if (r4 == r3) {
0x0800bd10 beq 0x800bfd4 | goto label_9;
| }
0x0800bd14 stmdaeq r1, {r3, r6, r7, r8, sb, ip, pc} | __asm ("stmdaeq r1, {r3, r6, r7, r8, sb, ip, pc}");
0x0800bd18 stmdaeq r1, {r3, r6, r7, r8, sb, ip, pc} | __asm ("stmdaeq r1, {r3, r6, r7, r8, sb, ip, pc}");
0x0800bd1c stmdaeq r2, {r0, r3, r5, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r3, r5, r7, r8, ip, sp, lr}");
0x0800bd20 cmp r8, 6 |
| if (r8 > 6) {
| /* switch table (7 cases) at 0x800bd2c */
0x0800bd24 ldrls pc, [pc, r8, lsl 2] | offset_0 = r8 << 2;
| pc = *((pc + offset_0));
| }
0x0800bd28 b 0x800bfcc |
| while (1) {
0x0800bde8 stmdaeq r1, {r3, r6, r7, r8, sb, ip, pc} | __asm ("stmdaeq r1, {r3, r6, r7, r8, sb, ip, pc}");
0x0800bdec stmdaeq r1, {r3, r6, r7, r8, sb, ip, pc} | __asm ("stmdaeq r1, {r3, r6, r7, r8, sb, ip, pc}");
0x0800bdf0 stmdaeq r2, {r0, r2, r3, r5, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r3, r5, r7, r8, ip, sp, lr}");
| label_0:
0x0800bdf4 mov r0, r4 | r0 = r4;
0x0800bdf8 add sp, sp, 0xb4 |
0x0800bdfc pop {r4, r5, r6, r7, r8, sb, pc} |
0x0800bfcc mvn r4, 0x15 | r4 = ~0x15;
0x0800bfd0 b 0x800bde8 |
| }
| label_9:
0x0800bfd4 add r6, r7, 0x4a0 | r6 = r7 + 0x4a0;
0x0800bfd8 mov r1, r2 | r1 = r2;
0x0800bfdc add r6, r6, 0xc | r6 += 0xc;
0x0800bfe0 mov r2, 0x30 | r2 = 0x30;
0x0800bfe4 add r0, sp, 8 | r0 += var_8h;
0x0800bfe8 stmdaeq r2, {r0, r4, r5, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r4, r5, r8, ip, sp, lr}");
0x0800bfec mov r0, r6 | r0 = r6;
0x0800bff0 stmdaeq r2, {r0, r3, r5, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r3, r5, r7, r8, ip, sp, lr}");
0x0800bff4 ldr r3, [r7, 0x4a8] | r3 = *((r7 + 0x4a8));
0x0800bff8 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x0800bffc bne 0x800c0f4 | goto label_10;
| }
| label_3:
0x0800c000 ldr r3, [r7, 0x4a8] | r3 = *((r7 + 0x4a8));
0x0800c004 tst r3, 2 |
| if ((r3 & 2) != 0) {
0x0800c008 bne 0x800c0cc | goto label_11;
| }
| label_2:
0x0800c00c mov r3, sp | r3 = sp;
0x0800c010 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x0800c014 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x0800c018 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x0800c01c adds r1, r5, 0x30 | r1 = r5 + 0x30;
0x0800c020 sbcslo r1, r1, r3 | __asm ("sbcslo r1, r1, r3");
| if (r1 >= r5) {
0x0800c024 movlo r3, 0 | r3 = 0;
| }
0x0800c028 cmp r3, 0 |
0x0800c02c beq 0x800c090 |
| while (r0 != 0) {
0x0800c030 mvn r4, 0xd | r4 = ~0xd;
| label_1:
0x0800c034 mov r0, r6 | r0 = r6;
0x0800c038 stmdaeq r2, {r0, r2, r3, r5, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r3, r5, r7, r8, ip, sp, lr}");
0x0800c03c mov r0, r4 | r0 = r4;
0x0800c040 add sp, sp, 0xb4 |
0x0800c044 pop {r4, r5, r6, r7, r8, sb, pc} |
| label_4:
0x0800c048 udf 0x12 | __asm ("udf 0x12");
| label_8:
0x0800c04c mvn r4, 0xd | r4 = ~0xd;
0x0800c050 b 0x800bdf4 | goto label_0;
0x0800c090 mrc p15, 0, r4, c3, c0, 0 | __asm ("mrc p15, 0, r4, c3, c0, 0");
0x0800c094 bic r3, r4, 0xc | r3 = BIT_MASK (r4, 0xc);
0x0800c098 orr r3, r3, 4 | r3 |= 4;
0x0800c09c mcr p15, 0, r3, c3, c0, 0 | __asm ("mcr p15, 0, r3, c3, c0, 0");
0x0800c0a0 isb sy | __asm ("isb sy");
0x0800c0a4 mov r2, 0x30 | r2 = 0x30;
0x0800c0a8 add r1, sp, 8 | r1 += var_8h;
0x0800c0ac mov r0, r5 | r0 = r5;
0x0800c0b0 stmdaeq r2, {r0, r2, r4, r5, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r4, r5, r7, r8, ip, sp, lr}");
0x0800c0b4 mcr p15, 0, r4, c3, c0, 0 | __asm ("mcr p15, 0, r4, c3, c0, 0");
0x0800c0b8 isb sy | __asm ("isb sy");
0x0800c0bc cmp r0, 0 |
0x0800c0c0 bne 0x800c030 |
| }
0x0800c0c4 mov r4, r0 | r4 = r0;
0x0800c0c8 b 0x800c034 | goto label_1;
| label_11:
0x0800c0cc add r1, r7, 0x4f0 | r1 = r7 + 0x4f0;
0x0800c0d0 add r0, sp, 0x24 | r0 += var_24h;
0x0800c0d4 add r1, r1, 0xe | r1 += 0xe;
0x0800c0d8 mov r2, 0x10 | r2 = 0x10;
0x0800c0dc mov r3, 2 | r3 = 2;
0x0800c0e0 str r3, [sp, 0x20] | var_20h = r3;
0x0800c0e4 stmdaeq r2, {r0, r3, r4, r5, r6, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r3, r4, r5, r6, r8, ip, sp, lr}");
0x0800c0e8 ldr r3, [r7, 0x4f4] | r3 = *((r7 + 0x4f4));
0x0800c0ec str r3, [sp, 0x34] | var_34h = r3;
0x0800c0f0 b 0x800c00c | goto label_2;
| label_10:
0x0800c0f4 add r1, r7, 0x4d0 | r1 = r7 + 0x4d0;
0x0800c0f8 add r0, sp, 0xc | r0 += var_ch;
0x0800c0fc add r1, r1, 2 | r1 += 2;
0x0800c100 mov r2, 0x10 | r2 = 0x10;
0x0800c104 mov r3, 1 | r3 = 1;
0x0800c108 str r3, [sp, 8] | var_8h = r3;
0x0800c10c stmdaeq r2, {r0, r3, r4, r5, r6, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r3, r4, r5, r6, r8, ip, sp, lr}");
0x0800c110 ldr r3, [r7, 0x4c8] | r3 = *((r7 + 0x4c8));
0x0800c114 str r3, [sp, 0x1c] | var_1ch = r3;
0x0800c118 b 0x800c000 | goto label_3;
| label_7:
0x0800c204 str r2, [sp, 4] | var_4h = r2;
0x0800c208 stmdaeq r1, {r2, r5, r6, r7, sl, pc} | __asm ("stmdaeq r1, {r2, r5, r6, r7, sl, pc}");
0x0800c20c stmdaeq r1, {r2, r5, r6, r7, sl, pc} | __asm ("stmdaeq r1, {r2, r5, r6, r7, sl, pc}");
0x0800c210 mov r2, 0x68 | r2 = 0x68;
0x0800c214 mov r1, 0x93 | r1 = 0x93;
0x0800c218 str r2, [sp] | *(sp) = r2;
0x0800c21c stmdaeq r1, {r2, r3, r8, sl, pc} | __asm ("stmdaeq r1, {r2, r3, r8, sl, pc}");
0x0800c220 stmdaeq r1, {r2, r3, r8, sl, pc} | __asm ("stmdaeq r1, {r2, r3, r8, sl, pc}");
0x0800c224 mov r2, 9 | r2 = 9;
0x0800c228 mvn r4, 0xd | r4 = ~0xd;
0x0800c22c stmdaeq r2, {r0, r2, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r6, r7, r8, ip, sp, lr}");
0x0800c230 b 0x800bdf4 | goto label_0;
| label_6:
0x0800c234 mvn r4, 0x15 | r4 = ~0x15;
0x0800c238 b 0x800bdf4 | goto label_0;
| label_5:
0x0800c23c mvn r4, 0 | r4 = ~0;
0x0800c240 b 0x800bdf4 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x800a648 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) sym.do_ip_vs_set_ctl () | void do_ip_vs_set_ctl (int32_t arg_e8h, 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_1ch;
| int32_t var_20h;
| int32_t var_24h;
| 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_4ch;
| int32_t var_4eh;
| int32_t var_50h;
| int32_t var_54h;
| int32_t var_58h;
| int32_t var_5ch;
| int32_t var_60h;
| int32_t var_64h;
| int32_t var_66h;
| int32_t var_68h;
| int32_t var_6ch;
| int32_t var_70h;
| int32_t var_74h;
| int32_t var_78h;
| int32_t var_7ch;
| int32_t var_80h;
| int32_t var_84h;
| int32_t var_88h;
| int32_t var_8ch;
| int32_t var_90h;
| int32_t var_9ch;
| int32_t var_a0h;
| int32_t var_a4h;
| int32_t var_a8h;
| int32_t var_ach;
| int32_t var_b0h;
| int32_t var_b4h;
| int32_t var_b8h;
| int32_t var_bch;
| int32_t var_c4h;
| r0 = arg1;
| r1 = arg2;
0x0800a648 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0800a64c mov r4, r1 | r4 = r1;
0x0800a650 mov r1, 0xc | r1 = 0xc;
0x0800a654 ldr r0, [r0, 0x24] | r0 = *(arg_e8hx24);
0x0800a658 sub sp, sp, 0xc4 |
0x0800a65c add ip, sp, 0x10 |
0x0800a660 ldr r7, [r0, 0x888] | r7 = *((r0 + 0x888));
0x0800a664 ldr r0, [r0, 0x30] | r0 = *((r0 + 0x30));
0x0800a668 ldr r8, [sp, 0xe8] | r8 = *(arg_e8h);
0x0800a66c stm ip, {r2, r3} | *(ip) = r2;
| *((ip + 4)) = r3;
0x0800a670 stmdaeq r2, {r0, r3, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r3, r6, r7, r8, ip, sp, lr}");
0x0800a674 cmp r0, 0 |
| if (r0 == 0) {
0x0800a678 beq 0x800abec | goto label_9;
| }
0x0800a67c sub r6, r4, 0x480 | r6 = r4 - 0x480;
0x0800a680 cmp r6, 0xf |
| if (r6 > 0xf) {
0x0800a684 bhi 0x800ab04 | goto label_10;
| }
0x0800a688 stmdaeq r1, {r2, r5, r7, sl, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r5, r7, sl, ip, sp, lr}");
0x0800a68c stmdaeq r1, {r2, r5, r7, sl, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r5, r7, sl, ip, sp, lr}");
0x0800a690 add r3, r3, r4 | r3 += r4;
0x0800a694 ldrb r3, [r3, -0x368] | r3 = *((r3 - 0x368));
0x0800a698 cmp r3, r8 |
| if (r3 != r8) {
0x0800a69c bne 0x800ab04 | goto label_10;
| }
0x0800a6a0 ldrb r2, [sp, 0x14] | r2 = var_14h;
0x0800a6a4 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0800a6a8 tst r2, 1 |
| if ((r2 & 1) != 0) {
0x0800a6ac bne 0x800a778 | goto label_11;
| }
0x0800a6b0 cmp r3, 0x44 |
| if (r3 > 0x44) {
0x0800a6b4 bhi 0x800aa50 | goto label_12;
| }
0x0800a6b8 mov r3, sp | r3 = sp;
0x0800a6bc bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x0800a6c0 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x0800a6c4 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x0800a6c8 adds r0, r1, r8 | r0 = r1 + r8;
0x0800a6cc sbcslo r0, r0, r3 | __asm ("sbcslo r0, r0, r3");
| if (r0 >= r1) {
0x0800a6d0 movlo r3, 0 | r3 = 0;
| }
0x0800a6d4 cmp r3, 0 |
| if (r3 != 0) {
0x0800a6d8 bne 0x800abd0 | goto label_13;
| }
0x0800a6dc mrc p15, 0, sb, c3, c0, 0 | __asm ("mrc p15, 0, sb, c3, c0, 0");
0x0800a6e0 bic r3, sb, 0xc | r3 = BIT_MASK (sb, 0xc);
0x0800a6e4 orr r3, r3, 4 | r3 |= 4;
0x0800a6e8 mcr p15, 0, r3, c3, c0, 0 | __asm ("mcr p15, 0, r3, c3, c0, 0");
0x0800a6ec isb sy | __asm ("isb sy");
0x0800a6f0 mov r2, r8 | r2 = r8;
0x0800a6f4 add r0, sp, 0x7c | r0 += var_7ch;
0x0800a6f8 stmdaeq r2, {r0, r2, r3, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r3, r6, r7, r8, ip, sp, lr}");
0x0800a6fc mcr p15, 0, sb, c3, c0, 0 | __asm ("mcr p15, 0, sb, c3, c0, 0");
0x0800a700 isb sy | __asm ("isb sy");
| label_8:
0x0800a704 cmp r0, 0 |
| if (r0 == 0) {
0x0800a708 mvnne r5, 0xd | r5 = ~0xd;
| }
| if (r0 != 0) {
0x0800a70c bne 0x800a76c | goto label_2;
| }
0x0800a710 sub r3, r6, 0xb | r3 = r6 - 0xb;
0x0800a714 cmp r3, 1 |
| if (r3 > 1) {
0x0800a718 bhi 0x800a790 | goto label_14;
| }
| do {
0x0800a71c movw r3, 0x48b | r3 = 0x48b;
0x0800a720 cmp r4, r3 |
| if (r4 != r3) {
0x0800a724 bne 0x800a7d8 | goto label_15;
| }
0x0800a728 mov r2, 0x2c | r2 = 0x2c;
0x0800a72c mov r1, 0 | r1 = 0;
0x0800a730 add r0, sp, 0x4c | r0 += var_4ch;
0x0800a734 stmdaeq r2, {r0, r4, r5, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r4, r5, r8, ip, sp, lr}");
0x0800a738 mov r2, 0x10 | r2 = 0x10;
0x0800a73c add r1, sp, 0x80 | r1 += var_80h;
0x0800a740 add r0, sp, 0x66 | r0 += var_66h;
0x0800a744 stmdaeq r2, {r0, r4, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r4, r6, r7, r8, ip, sp, lr}");
0x0800a748 cmp r0, 0 |
| if (r0 <= 0) {
0x0800a74c ble 0x800ab04 | goto label_10;
| }
0x0800a750 ldr r3, [sp, 0x90] | r3 = var_90h;
0x0800a754 add r1, sp, 0x4c | r1 += var_4ch;
0x0800a758 ldr r2, [sp, 0x7c] | r2 = var_7ch;
0x0800a75c mov r0, r7 | r0 = r7;
0x0800a760 str r3, [sp, 0x5c] | var_5ch = r3;
0x0800a764 stmdaeq r1, {r2, r3, r4, r5, r6, r7, r8, fp, ip} | __asm ("stmdaeq r1, {r2, r3, r4, r5, r6, r7, r8, fp, ip}");
0x0800a768 mov r5, r0 | r5 = r0;
| label_2:
0x0800a76c mov r0, r5 | r0 = r5;
0x0800a770 add sp, sp, 0xc4 |
0x0800a774 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x0800a778 mov r2, r8 | r2 = r8;
0x0800a77c add r0, sp, 0x7c | r0 += var_7ch;
0x0800a780 stmdaeq r2, {r0, r2, r4, r5, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r4, r5, r7, ip, sp, lr}");
0x0800a784 sub r3, r6, 0xb | r3 = r6 - 0xb;
0x0800a788 cmp r3, 1 |
0x0800a78c bls 0x800a71c |
| } while (r3 < 1);
| label_14:
0x0800a790 stmdaeq r1, {r3, r6, r7, r8, sb, ip, pc} | __asm ("stmdaeq r1, {r3, r6, r7, r8, sb, ip, pc}");
0x0800a794 stmdaeq r1, {r3, r6, r7, r8, sb, ip, pc} | __asm ("stmdaeq r1, {r3, r6, r7, r8, sb, ip, pc}");
0x0800a798 stmdaeq r2, {r0, r3, r5, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r3, r5, r7, r8, ip, sp, lr}");
0x0800a79c movw r3, 0x485 | r3 = 0x485;
0x0800a7a0 cmp r4, r3 |
| if (r4 == r3) {
0x0800a7a4 beq 0x800abbc | goto label_16;
| }
0x0800a7a8 movw r3, 0x48a | r3 = 0x48a;
0x0800a7ac cmp r4, r3 |
| if (r4 == r3) {
0x0800a7b0 beq 0x800abd8 | goto label_17;
| }
0x0800a7b4 cmp r8, 0 |
| if (r8 == 0) {
0x0800a7b8 bne 0x800a7f4 |
| label_6:
0x0800a7bc mvn r5, 0x15 | r5 = ~0x15;
| label_1:
0x0800a7c0 stmdaeq r1, {r3, r6, r7, r8, sb, ip, pc} | __asm ("stmdaeq r1, {r3, r6, r7, r8, sb, ip, pc}");
0x0800a7c4 stmdaeq r1, {r3, r6, r7, r8, sb, ip, pc} | __asm ("stmdaeq r1, {r3, r6, r7, r8, sb, ip, pc}");
0x0800a7c8 stmdaeq r2, {r0, r2, r3, r5, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r3, r5, r7, r8, ip, sp, lr}");
0x0800a7cc mov r0, r5 | r0 = r5;
0x0800a7d0 add sp, sp, 0xc4 |
0x0800a7d4 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_15:
0x0800a7d8 ldr r1, [sp, 0x7c] | r1 = var_7ch;
0x0800a7dc mov r0, r7 | r0 = r7;
0x0800a7e0 stmdaeq r1, {r4, sl, sp} | __asm ("stmdaeq r1, {r4, sl, sp}");
0x0800a7e4 mov r5, r0 | r5 = r0;
0x0800a7e8 mov r0, r5 | r0 = r5;
0x0800a7ec add sp, sp, 0xc4 |
0x0800a7f0 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x0800a7f4 ldr r2, [sp, 0x9c] | r2 = var_9ch;
0x0800a7f8 mov r1, 0 | r1 = 0;
0x0800a7fc str r2, [sp, 0x70] | var_70h = r2;
0x0800a800 add r0, sp, 0x24 | r0 += var_24h;
0x0800a804 ldr r2, [sp, 0xa0] | r2 = var_a0h;
0x0800a808 mov fp, 2 |
0x0800a80c str r2, [sp, 0x74] | var_74h = r2;
0x0800a810 ldr r2, [sp, 0xa4] | r2 = var_a4h;
0x0800a814 ldr r3, [sp, 0x88] | r3 = var_88h;
0x0800a818 ldr r8, [sp, 0x80] | r8 = var_80h;
0x0800a81c ldrh sl, [sp, 0x84] | sl = var_84h;
0x0800a820 ldrh sb, [sp, 0x7c] | sb = var_7ch;
0x0800a824 str r2, [sp, 0x78] | var_78h = r2;
0x0800a828 mov r2, 0x28 | r2 = 0x28;
0x0800a82c str r1, [sp, 0x60] | var_60h = r1;
0x0800a830 str r8, [sp, 0x50] | var_50h = r8;
0x0800a834 str r3, [sp, 0x64] | var_64h = r3;
0x0800a838 str r3, [sp, 0xc] | var_ch = r3;
0x0800a83c add r3, sp, 0x8c | r3 += var_8ch;
0x0800a840 str r1, [sp, 0x54] | var_54h = r1;
0x0800a844 str r3, [sp, 0x68] | var_68h = r3;
0x0800a848 str r1, [sp, 0x58] | var_58h = r1;
0x0800a84c str r1, [sp, 0x5c] | var_5ch = r1;
0x0800a850 str r1, [sp, 0x6c] | var_6ch = r1;
0x0800a854 strh fp, [sp, 0x4c] | var_4ch = fp;
0x0800a858 strh sl, [sp, 0x60] | var_60h = sl;
0x0800a85c strh sb, [sp, 0x4e] | var_4eh = sb;
0x0800a860 stmdaeq r2, {r0, r4, r5, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r4, r5, r8, ip, sp, lr}");
0x0800a864 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0800a868 strh fp, [sp, 0x44] | var_44h = fp;
0x0800a86c orr r8, r8, r3 | r8 |= r3;
0x0800a870 ldr r3, [sp, 0xa8] | r3 = var_a8h;
0x0800a874 str r3, [sp, 0x20] | var_20h = r3;
0x0800a878 cmp sl, 0 |
0x0800a87c cmpeq r8, 0 | __asm ("cmpeq r8, 0");
0x0800a880 ldrh r3, [sp, 0xac] | r3 = var_ach;
0x0800a884 strh r3, [sp, 0x30] | var_30h = r3;
| if (sl != 0) {
0x0800a888 moveq r8, 1 | r8 = 1;
| }
0x0800a88c ldr r3, [sp, 0xb0] | r3 = var_b0h;
| if (sl == 0) {
0x0800a890 movne r8, 0 | r8 = 0;
| }
0x0800a894 str r3, [sp, 0x34] | var_34h = r3;
0x0800a898 ldr r3, [sp, 0xb4] | r3 = var_b4h;
0x0800a89c str r3, [sp, 0x38] | var_38h = r3;
0x0800a8a0 ldr r3, [sp, 0xb8] | r3 = var_b8h;
0x0800a8a4 str r3, [sp, 0x3c] | var_3ch = r3;
0x0800a8a8 ldr r3, [sp, 0xbc] | r3 = var_bch;
0x0800a8ac str r3, [sp, 0x40] | var_40h = r3;
0x0800a8b0 movw r3, 0x48f | r3 = 0x48f;
0x0800a8b4 cmp r4, r3 |
| if (r4 == r3) {
0x0800a8b8 movne r8, 0 | r8 = 0;
| }
| if (r4 != r3) {
0x0800a8bc andeq r8, r8, 1 | r8 &= 1;
| }
0x0800a8c0 cmp r8, 0 |
| if (r8 != 0) {
0x0800a8c4 bne 0x800abf4 | goto label_18;
| }
0x0800a8c8 sub r3, r6, 2 | r3 = r6 - 2;
0x0800a8cc cmp r3, 1 |
| if (r3 < 1) {
0x0800a8d0 bls 0x800aaec | goto label_19;
| }
| label_5:
0x0800a8d4 cmp sb, 6 |
0x0800a8d8 cmpne sb, 0x11 | __asm ("cmpne sb, 0x11");
| if (sb == 6) {
0x0800a8dc movne r3, 1 | r3 = 1;
| }
| if (sb != 6) {
0x0800a8e0 moveq r3, 0 | r3 = 0;
| }
0x0800a8e4 cmp sb, 0x84 |
| if (sb != 0x84) {
0x0800a8e8 moveq r3, 0 | r3 = 0;
| }
| if (sb == 0x84) {
0x0800a8ec andne r3, r3, 1 | r3 &= 1;
| }
0x0800a8f0 cmp r3, 0 |
| if (r3 != 0) {
0x0800a8f4 bne 0x800ac04 | goto label_20;
| }
0x0800a8f8 stmdaeq r2, {r0, r3, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r3, r7, ip, sp, lr}");
0x0800a8fc ldr r1, [sp, 0x64] | r1 = var_64h;
0x0800a900 lsr r3, r7, 8 | r3 = r7 >> 8;
0x0800a904 cmp r1, 0 |
| if (r1 != 0) {
0x0800a908 bne 0x800aa80 | goto label_21;
| }
0x0800a90c ldrh r1, [sp, 0x4c] | r1 = var_4ch;
0x0800a910 ldr r0, [sp, 0x50] | r0 = var_50h;
0x0800a914 cmp r1, 0xa |
0x0800a918 ldrh ip, [sp, 0x60] | ip = var_60h;
0x0800a91c ldrh lr, [sp, 0x4e] | lr = var_4eh;
| if (r1 == 0xa) {
0x0800a920 movne r2, r0 | r2 = r0;
| }
0x0800a924 rev16 r8, ip | __asm ("rev16 r8, ip");
| if (r1 != 0xa) {
0x0800a928 ldreq r2, [sp, 0x54] | r2 = var_54h;
| }
0x0800a92c eor r3, r3, lr | r3 ^= lr;
| if (r1 != 0xa) {
0x0800a930 ldreq sb, [sp, 0x58] | sb = var_58h;
| }
0x0800a934 uxth r8, r8 | r8 = (int16_t) r8;
| if (r1 != 0xa) {
0x0800a938 eoreq r2, r2, r0 | r2 ^= r0;
| }
0x0800a93c eor r3, r3, r8 | r3 ^= r8;
| if (r1 != 0xa) {
0x0800a940 eoreq r2, r2, sb | r2 ^= sb;
| }
| if (r1 != 0xa) {
0x0800a944 ldreq sb, [sp, 0x5c] | sb = var_5ch;
| }
0x0800a948 eor r3, r3, r8, lsr 8 | r3 ^= (r8 >> 8);
| if (r1 != 0xa) {
0x0800a94c eoreq r2, r2, sb | r2 ^= sb;
| }
0x0800a950 rev r2, r2 | r2 = SWAP32 (r2);
0x0800a954 eor r3, r3, r2 | r3 ^= r2;
0x0800a958 stmdaeq r1, {r2, r5, fp, sp, pc} | __asm ("stmdaeq r1, {r2, r5, fp, sp, pc}");
0x0800a95c stmdaeq r1, {r2, r5, fp, sp, pc} | __asm ("stmdaeq r1, {r2, r5, fp, sp, pc}");
0x0800a960 uxtb r3, r3 | r3 = (int8_t) r3;
0x0800a964 ldr r3, [r2, r3, lsl 2] | offset_0 = r3 << 2;
| r3 = *((r2 + offset_0));
0x0800a968 cmp r3, 0 |
| if (r3 == 0) {
0x0800a96c beq 0x800a9d0 | goto label_3;
| }
0x0800a970 ldr sl, [sp, 0x54] | sl = var_54h;
0x0800a974 ldr sb, [sp, 0x58] | sb = var_58h;
0x0800a978 ldr r8, [sp, 0x5c] | r8 = var_5ch;
0x0800a97c b 0x800a98c |
| while (r1 != r2) {
| label_0:
0x0800a980 ldr r3, [r3] | r3 = *(r3);
0x0800a984 cmp r3, 0 |
| if (r3 == 0) {
0x0800a988 beq 0x800a9d0 | goto label_3;
| }
0x0800a98c ldrh r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x0800a990 cmp r1, r2 |
0x0800a994 bne 0x800a980 |
| }
0x0800a998 ldr r2, [r3, 0x18] | r2 = *((r3 + 0x18));
0x0800a99c cmp r1, 0xa |
| if (r1 == 0xa) {
0x0800a9a0 beq 0x800ab8c | goto label_22;
| }
0x0800a9a4 cmp r2, r0 |
| if (r2 != r0) {
0x0800a9a8 bne 0x800a980 | goto label_0;
| }
| label_7:
0x0800a9ac ldrh r2, [r3, 0x28] | r2 = *((r3 + 0x28));
0x0800a9b0 cmp r2, ip |
| if (r2 != ip) {
0x0800a9b4 bne 0x800a980 | goto label_0;
| }
0x0800a9b8 ldrh r2, [r3, 0x16] | r2 = *((r3 + 0x16));
0x0800a9bc cmp r2, lr |
| if (r2 != lr) {
0x0800a9c0 bne 0x800a980 | goto label_0;
| }
0x0800a9c4 ldr r2, [r3, 0x3c] | r2 = *((r3 + 0x3c));
0x0800a9c8 cmp r7, r2 |
| if (r7 != r2) {
0x0800a9cc bne 0x800a980 | goto label_0;
| }
| do {
| label_3:
0x0800a9d0 str r3, [sp, 0x1c] | var_1ch = r3;
0x0800a9d4 stmdaeq r2, {r0, r2, r3, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r3, r7, ip, sp, lr}");
0x0800a9d8 movw r3, 0x482 | r3 = 0x482;
0x0800a9dc ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0800a9e0 cmp r4, r3 |
| if (r4 == r3) {
0x0800a9e4 beq 0x800ab0c | goto label_23;
| }
0x0800a9e8 cmp r0, 0 |
| if (r0 != 0) {
0x0800a9ec beq 0x800aa00 |
0x0800a9f0 ldrh r2, [r0, 0x16] | r2 = *((r0 + 0x16));
0x0800a9f4 ldrh r3, [sp, 0x4e] | r3 = var_4eh;
0x0800a9f8 cmp r2, r3 |
| if (r2 == r3) {
0x0800a9fc beq 0x800aa08 | goto label_24;
| }
| }
0x0800aa00 mvn r5, 2 | r5 = ~2;
0x0800aa04 b 0x800a7c0 | goto label_1;
| label_24:
0x0800aa08 sub r6, r6, 2 | r6 -= 2;
0x0800aa0c cmp r6, 0xd |
| if (r6 > 0xd) {
| /* switch table (14 cases) at 0x800aa18 */
0x0800aa10 ldrls pc, [pc, r6, lsl 2] | offset_1 = r6 << 2;
| pc = *((pc + offset_1));
| }
0x0800aa14 b 0x800a7c0 | goto label_1;
| label_12:
0x0800aa50 mov r2, 0x44 | r2 = 0x44;
0x0800aa54 str r3, [sp, 4] | var_4h = r3;
0x0800aa58 str r2, [sp] | *(sp) = r2;
0x0800aa5c stmdaeq r1, {r2, r5, r6, r7, sl, pc} | __asm ("stmdaeq r1, {r2, r5, r6, r7, sl, pc}");
0x0800aa60 stmdaeq r1, {r2, r5, r6, r7, sl, pc} | __asm ("stmdaeq r1, {r2, r5, r6, r7, sl, pc}");
0x0800aa64 mov r2, 9 | r2 = 9;
0x0800aa68 mov r1, 0x93 | r1 = 0x93;
0x0800aa6c stmdaeq r1, {r2, r3, r8, sl, pc} | __asm ("stmdaeq r1, {r2, r3, r8, sl, pc}");
0x0800aa70 stmdaeq r1, {r2, r3, r8, sl, pc} | __asm ("stmdaeq r1, {r2, r3, r8, sl, pc}");
0x0800aa74 mvn r5, 0xd | r5 = ~0xd;
0x0800aa78 stmdaeq r2, {r0, r2, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r6, r7, r8, ip, sp, lr}");
0x0800aa7c b 0x800a76c | goto label_2;
| label_21:
0x0800aa80 eor r3, r3, r1 | r3 ^= r1;
0x0800aa84 stmdaeq r1, {r2, r5, fp, sp, pc} | __asm ("stmdaeq r1, {r2, r5, fp, sp, pc}");
0x0800aa88 stmdaeq r1, {r2, r5, fp, sp, pc} | __asm ("stmdaeq r1, {r2, r5, fp, sp, pc}");
0x0800aa8c uxtb r3, r3 | r3 = (int8_t) r3;
0x0800aa90 add r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x0800aa94 ldr r3, [r2, 0x400] | r3 = *((r2 + 0x400));
0x0800aa98 cmp r3, 0 |
0x0800aa9c beq 0x800a9d0 |
| } while (r3 == 0);
0x0800aaa0 subs r3, r3, 8 | r3 -= 8;
| if (r3 == r3) {
0x0800aaa4 beq 0x800a9d0 | goto label_3;
| }
0x0800aaa8 ldrh r0, [sp, 0x4c] | r0 = var_4ch;
0x0800aaac b 0x800aac4 | goto label_25;
| label_4:
0x0800aab0 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0800aab4 cmp r3, 0 |
| if (r3 == 0) {
0x0800aab8 beq 0x800a9d0 | goto label_3;
| }
0x0800aabc subs r3, r3, 8 | r3 -= 8;
| if (r3 == r3) {
0x0800aac0 beq 0x800a9d0 | goto label_3;
| }
| label_25:
0x0800aac4 ldr r2, [r3, 0x2c] | r2 = *((r3 + 0x2c));
0x0800aac8 cmp r1, r2 |
| if (r1 != r2) {
0x0800aacc bne 0x800aab0 | goto label_4;
| }
0x0800aad0 ldrh r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x0800aad4 cmp r2, r0 |
| if (r2 != r0) {
0x0800aad8 bne 0x800aab0 | goto label_4;
| }
0x0800aadc ldr r2, [r3, 0x3c] | r2 = *((r3 + 0x3c));
0x0800aae0 cmp r7, r2 |
| if (r7 != r2) {
0x0800aae4 bne 0x800aab0 | goto label_4;
| }
0x0800aae8 b 0x800a9d0 | goto label_3;
| label_19:
0x0800aaec add r0, sp, 0x8c | r0 += var_8ch;
0x0800aaf0 mov r1, 0x10 | r1 = 0x10;
0x0800aaf4 stmdaeq r2, {r0, r2, r4, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r4, r6, r7, r8, ip, sp, lr}");
0x0800aaf8 cmp r0, 0x10 |
| if (r0 != 0x10) {
0x0800aafc bne 0x800a8d4 | goto label_5;
| }
0x0800ab00 b 0x800a7bc | goto label_6;
| label_10:
0x0800ab04 mvn r5, 0x15 | r5 = ~0x15;
0x0800ab08 b 0x800a76c | goto label_2;
| label_23:
0x0800ab0c cmp r0, 0 |
| if (r0 != 0) {
0x0800ab10 mvnne r5, 0x10 | r5 = ~0x10;
| goto label_26;
| }
| if (r0 != 0) {
| label_26:
0x0800ab14 bne 0x800a7c0 | goto label_1;
| }
0x0800ab18 add r2, sp, 0x1c | r2 += var_1ch;
0x0800ab1c add r1, sp, 0x4c | r1 += var_4ch;
0x0800ab20 mov r0, r7 | r0 = r7;
0x0800ab24 bl 0x8007afc | r0 = ip_vs_add_service ();
0x0800ab28 mov r5, r0 | r5 = r0;
0x0800ab2c b 0x800a7c0 | goto label_1;
| label_22:
0x0800ab8c ldr fp, [r3, 0x1c] | fp = *((r3 + 0x1c));
0x0800ab90 eor r2, r2, r0 | r2 ^= r0;
0x0800ab94 eor fp, fp, sl |
0x0800ab98 orr r2, fp, r2 | r2 = fp | r2;
0x0800ab9c ldr fp, [r3, 0x20] | fp = *((r3 + 0x20));
0x0800aba0 eor fp, fp, sb |
0x0800aba4 orr r2, r2, fp | r2 |= fp;
0x0800aba8 ldr fp, [r3, 0x24] | fp = *((r3 + 0x24));
0x0800abac eor fp, fp, r8 |
0x0800abb0 orrs fp, r2, fp |
| if (fp == r2) {
0x0800abb4 beq 0x800a9ac | goto label_7;
| }
0x0800abb8 b 0x800a980 | goto label_0;
| label_16:
0x0800abbc mov r0, r7 | r0 = r7;
0x0800abc0 mov r1, 0 | r1 = 0;
0x0800abc4 bl 0x80097c4 | r0 = ip_vs_flush ();
0x0800abc8 mov r5, r0 | r5 = r0;
0x0800abcc b 0x800a7c0 | goto label_1;
| label_13:
0x0800abd0 mov r0, r8 | r0 = r8;
0x0800abd4 b 0x800a704 | goto label_8;
| label_17:
0x0800abd8 add r1, sp, 0x7c | r1 += var_7ch;
0x0800abdc mov r0, r7 | r0 = r7;
0x0800abe0 bl 0x80077a4 | r0 = ip_vs_set_timeout ();
0x0800abe4 mov r5, r0 | r5 = r0;
0x0800abe8 b 0x800a7c0 | goto label_1;
| label_9:
0x0800abec mvn r5, 0 | r5 = ~0;
0x0800abf0 b 0x800a76c | goto label_2;
| label_18:
0x0800abf4 mov r0, r7 | r0 = r7;
0x0800abf8 bl 0x80083ec | r0 = ip_vs_zero_all ();
0x0800abfc mov r5, r0 | r5 = r0;
0x0800ac00 b 0x800a7c0 | goto label_1;
| label_20:
0x0800ac04 rev16 r3, sl | __asm ("rev16 r3, sl");
0x0800ac08 add r2, sp, 0x50 | r2 += var_50h;
0x0800ac0c mov r1, sb | r1 = sb;
0x0800ac10 stmdaeq r1, {r3, r5, r8, sl, pc} | __asm ("stmdaeq r1, {r3, r5, r8, sl, pc}");
0x0800ac14 stmdaeq r1, {r3, r5, r8, sl, pc} | __asm ("stmdaeq r1, {r3, r5, r8, sl, pc}");
0x0800ac18 uxth r3, r3 | r3 = (int16_t) r3;
0x0800ac1c mvn r5, 0xd | r5 = ~0xd;
0x0800ac20 stmdaeq r2, {r0, r3, r4, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r3, r4, r6, r7, ip, sp, lr}");
0x0800ac24 b 0x800a7c0 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x8001ed0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ip_vs_conn_new () | void ip_vs_conn_new (int32_t arg_ch, int32_t arg_40h, int32_t arg_44h, 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;
| r0 = arg1;
| r1 = arg2;
0x08001ed0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x08001ed4 stmdaeq r1, {r2, r3, r4, r5, r7, r8, sl, fp, ip, pc} | __asm ("stmdaeq r1, {r2, r3, r4, r5, r7, r8, sl, fp, ip, pc}");
0x08001ed8 stmdaeq r1, {r2, r3, r4, r5, r7, r8, sl, fp, ip, pc} | __asm ("stmdaeq r1, {r2, r3, r4, r5, r7, r8, sl, fp, ip, pc}");
0x08001edc sub sp, sp, 0x1c |
0x08001ee0 ldr r8, [r0] | r8 = *(r0);
0x08001ee4 mov r5, r0 | r5 = r0;
0x08001ee8 mov r6, r1 | r6 = r1;
0x08001eec ldrh r1, [r0, 0x10] | r1 = *(var_0hx10);
0x08001ef0 mov r0, r8 | r0 = r8;
0x08001ef4 mov sb, r2 | sb = r2;
0x08001ef8 str lr, [sp, 0x10] | var_10h = lr;
0x08001efc str r3, [sp, 0xc] | *(arg_ch) = r3;
0x08001f00 ldr r7, [sp, 0x44] | r7 = *(arg_44h);
0x08001f04 stmdaeq r1, {r2, r3, r4, r5, sl, fp, sp} | __asm ("stmdaeq r1, {r2, r3, r4, r5, sl, fp, sp}");
0x08001f08 mov r1, 0xa20 | r1 = 0xa20;
0x08001f0c mov fp, r0 |
0x08001f10 ldr r0, [sl, 8] | r0 = *((sl + 8));
0x08001f14 stmdaeq r2, {r0, r5, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r5, r6, r7, ip, sp, lr}");
0x08001f18 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x08001f1c beq 0x8002444 | goto label_11;
| }
0x08001f20 mov r3, 0 | r3 = 0;
0x08001f24 add r0, r4, 0x50 | r0 = r4 + 0x50;
0x08001f28 mov r2, r3 | r2 = r3;
0x08001f2c str r3, [r4] | *(r4) = r3;
0x08001f30 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x08001f34 stmdaeq r0, {r2, sb, fp} | __asm ("stmdaeq r0, {r2, sb, fp}");
0x08001f38 stmdaeq r0, {r2, sb, fp} | __asm ("stmdaeq r0, {r2, sb, fp}");
0x08001f3c str r3, [sp] | *(sp) = r3;
0x08001f40 stmdaeq r2, {r0, r2, r5, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r5, r6, r7, ip, sp, lr}");
0x08001f44 ldrh r2, [r5, 0x12] | r2 = *((r5 + 0x12));
0x08001f48 ldrh r1, [r5, 0x10] | r1 = *((r5 + 0x10));
0x08001f4c mov r3, 0 | r3 = 0;
0x08001f50 cmp r2, 0xa |
0x08001f54 strh r2, [r4, 0xe] | *((r4 + 0xe)) = r2;
0x08001f58 str r8, [r4, 0x48] | *((r4 + 0x48)) = r8;
0x08001f5c ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x08001f60 strh r6, [r4, 0x46] | *((r4 + 0x46)) = r6;
0x08001f64 strh r1, [r4, 0x44] | *((r4 + 0x44)) = r1;
| if (r2 == 0xa) {
0x08001f68 beq 0x8002338 | goto label_12;
| }
0x08001f6c ldr r2, [r2] | r2 = *(r2);
0x08001f70 ldr ip, [r5, 8] | ip = *((r5 + 8));
0x08001f74 strd r2, r3, [r4, 0x10] | __asm ("strd r2, r3, [r4, 0x10]");
0x08001f78 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x08001f7c str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x08001f80 ldrh r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x08001f84 strh r3, [r4, 8] | *((r4 + 8)) = r3;
| label_3:
0x08001f88 ldr r3, [ip] | r3 = *(ip);
0x08001f8c str r3, [r4, 0x20] | *((r4 + 0x20)) = r3;
0x08001f90 mov r3, 0 | r3 = 0;
0x08001f94 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x08001f98 str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
0x08001f9c str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
| label_4:
0x08001fa0 uxth r6, r6 | r6 = (int16_t) r6;
0x08001fa4 ldrh r3, [r5, 0xe] | r3 = *((r5 + 0xe));
0x08001fa8 cmp r6, 0xa |
0x08001fac strh r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
| if (r6 != 0xa) {
0x08001fb0 addeq ip, r4, 0x30 |
| }
| if (r6 == 0xa) {
0x08001fb4 ldrne r3, [sb] | r3 = *(sb);
| }
| if (r6 != 0xa) {
0x08001fb8 ldmeq sb, {r0, r1, r2, r3} | r0 = *(sb);
| r1 = *((sb + 4));
| r2 = *((sb + 8));
| r3 = *((sb + 12));
| }
| if (r6 != 0xa) {
0x08001fbc stmeq ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
| }
| if (r6 == 0xa) {
0x08001fc0 strne r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
| }
| if (r6 == 0xa) {
0x08001fc4 movne r3, 0 | r3 = 0;
| }
| if (r6 == 0xa) {
0x08001fc8 strne r3, [r4, 0x34] | *((r4 + 0x34)) = r3;
| }
| if (r6 == 0xa) {
0x08001fcc strne r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
| }
| if (r6 == 0xa) {
0x08001fd0 strne r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
| }
0x08001fd4 ldr r3, [sp, 0xc] | r3 = *(arg_ch);
0x08001fd8 strh r3, [r4, 0xa] | *((r4 + 0xa)) = r3;
0x08001fdc ldr r3, [sp, 0x40] | r3 = *(arg_40h);
0x08001fe0 str r3, [r4, 0x40] | *((r4 + 0x40)) = r3;
0x08001fe4 tst r3, 0x1000 |
0x08001fe8 ldr r3, [sp, 0x48] | r3 = *(arg_48h);
0x08001fec str r3, [r4, 0x6c] | *((r4 + 0x6c)) = r3;
| if ((r3 & 0x1000) != 0) {
0x08001ff0 beq 0x8002028 |
0x08001ff4 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x08001ff8 cmp r3, 0 |
| if (r3 != 0) {
0x08001ffc beq 0x8002028 |
0x08002000 ldr r0, [r3, 0x10] | r0 = *((r3 + 0x10));
0x08002004 cmp r0, 0 |
| if (r0 != 0) {
0x08002008 beq 0x8002014 |
0x0800200c stmdaeq r2, {r0, r3, r5, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r3, r5, r6, r7, ip, sp, lr}");
0x08002010 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
| }
0x08002014 str r3, [r4, 0xa8] | *((r4 + 0xa8)) = r3;
0x08002018 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x0800201c str r3, [r4, 0xac] | *((r4 + 0xac)) = r3;
0x08002020 ldrb r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x08002024 b 0x8002034 |
| }
| } else {
0x08002028 mov r3, 0 | r3 = 0;
0x0800202c str r3, [r4, 0xa8] | *((r4 + 0xa8)) = r3;
0x08002030 str r3, [r4, 0xac] | *((r4 + 0xac)) = r3;
| }
0x08002034 strb r3, [r4, 0xb0] | *((r4 + 0xb0)) = r3;
0x08002038 add r3, r8, 0x250 | r3 = r8 + 0x250;
0x0800203c mov r2, 0 | r2 = 0;
0x08002040 mov r1, 1 | r1 = 1;
0x08002044 pld [r3] | __asm ("pld [r3]");
0x08002048 str r1, [r4, 0x4c] | *((r4 + 0x4c)) = r1;
0x0800204c str r2, [r4, 0x74] | *((r4 + 0x74)) = r2;
0x08002050 str r2, [r4, 0x78] | *((r4 + 0x78)) = r2;
0x08002054 str r2, [r4, 0x84] | *((r4 + 0x84)) = r2;
0x08002058 str r2, [r4, 0x88] | *((r4 + 0x88)) = r2;
0x0800205c str r2, [r4, 0x8c] | *((r4 + 0x8c)) = r2;
0x08002060 str r2, [r4, 0x94] | *((r4 + 0x94)) = r2;
0x08002064 str r2, [r4, 0xa0] | *((r4 + 0xa0)) = r2;
0x08002068 str r2, [r4, 0x80] | *((r4 + 0x80)) = r2;
| do {
0x0800206c ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x08002070 add r2, r2, 1 | r2++;
0x08002074 strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x08002078 teq r1, 0 | __asm ("teq r1, 0");
0x0800207c bne 0x800206c |
| } while (r0 != 0);
0x08002080 ldr r3, [sp, 0x40] | r3 = *(arg_40h);
0x08002084 tst r3, 0x800 |
| if ((r3 & 0x800) != 0) {
0x08002088 bne 0x8002200 | goto label_13;
| }
| label_0:
0x0800208c mov r3, 0 | r3 = 0;
0x08002090 cmp r7, 0 |
0x08002094 str r3, [r4, 0x7c] | *((r4 + 0x7c)) = r3;
| if (r7 == 0) {
0x08002098 beq 0x8002154 | goto label_14;
| }
0x0800209c add r0, r7, 0x3c | r0 = r7 + 0x3c;
0x080020a0 pld [r0] | __asm ("pld [r0]");
| do {
0x080020a4 ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x080020a8 add r2, r3, 1 | r2 = r3 + 1;
0x080020ac strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x080020b0 teq r1, 0 | __asm ("teq r1, 0");
0x080020b4 bne 0x80020a4 |
| } while (r7 != 0);
0x080020b8 cmp r3, 0 |
| if (r3 == 0) {
0x080020bc beq 0x800242c | goto label_15;
| }
0x080020c0 add r2, r3, 1 | r2 = r3 + 1;
0x080020c4 orrs r2, r2, r3 | r2 |= r3;
| if (r2 < r2) {
0x080020c8 bmi 0x80023f8 | goto label_16;
| }
| label_6:
0x080020cc ldrh r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x080020d0 cmp r3, 0x11 |
0x080020d4 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x080020d8 ldr r2, [r4, 0x40] | r2 = *((r4 + 0x40));
0x080020dc bicne r3, r3, 0x2000 | __asm ("bicne r3, r3, 0x2000");
0x080020e0 tst r2, 0x20 |
| if ((r2 & 0x20) != 0) {
0x080020e4 beq 0x80020f4 |
0x080020e8 tst r2, 0x1000 |
0x080020ec bic r2, r2, 0x87 | r2 = BIT_MASK (r2, 0x87);
0x080020f0 biceq r3, r3, 0x100 | __asm ("biceq r3, r3, 0x100");
| }
0x080020f4 orr r3, r3, r2 | r3 |= r2;
0x080020f8 str r7, [r4, 0x7c] | *((r4 + 0x7c)) = r7;
0x080020fc tst r3, 0x1000 |
0x08002100 str r3, [r4, 0x40] | *((r4 + 0x40)) = r3;
| if ((r3 & 0x1000) != 0) {
0x08002104 bne 0x8002224 | goto label_17;
| }
0x08002108 tst r3, 0x100 |
| if ((r3 & 0x100) != 0) {
0x0800210c addeq r3, r7, 0x144 | r3 = r7 + 0x144;
| }
| if ((r3 & 0x100) == 0) {
0x08002110 addne r3, r7, 0x148 | r3 = r7 + 0x148;
| }
0x08002114 pld [r3] | __asm ("pld [r3]");
| do {
0x08002118 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x0800211c add r2, r2, 1 | r2++;
0x08002120 strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x08002124 teq r1, 0 | __asm ("teq r1, 0");
0x08002128 bne 0x8002118 |
| } while ((r3 & 0x100) != 0);
| label_1:
0x0800212c ldr r3, [r7, 0x150] | r3 = *((r7 + 0x150));
0x08002130 cmp r3, 0 |
| if (r3 != 0) {
0x08002134 beq 0x8002154 |
0x08002138 ldr r2, [r7, 0x144] | r2 = *((r7 + 0x144));
0x0800213c ldr r1, [r7, 0x148] | r1 = *((r7 + 0x148));
0x08002140 add r2, r2, r1 | r2 += r1;
0x08002144 cmp r3, r2 |
| if (r3 > r2) {
0x08002148 ldrls r3, [r7, 0x24] | r3 = *((r7 + 0x24));
| }
| if (r3 > r2) {
0x0800214c orrls r3, r3, 2 | r3 |= 2;
| }
| if (r3 <= r2) {
0x08002150 strls r3, [r7, 0x24] | *((r7 + 0x24)) = r3;
| goto label_14;
| }
| }
| label_14:
0x08002154 ldrh r3, [r5, 0x12] | r3 = *((r5 + 0x12));
0x08002158 mov r2, 0 | r2 = 0;
0x0800215c strh r2, [r4, 0x68] | *((r4 + 0x68)) = r2;
0x08002160 cmp r3, 0xa |
0x08002164 stmdaeq r2, {r0, r5, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r5, r7, ip, sp, lr}");
0x08002168 stmdaeq r2, {r0, r5, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r5, r7, ip, sp, lr}");
0x0800216c strh r2, [r4, 0x6a] | *((r4 + 0x6a)) = r2;
0x08002170 mov r2, 0x12c | r2 = 0x12c;
0x08002174 str r2, [r4, 0x64] | *((r4 + 0x64)) = r2;
0x08002178 ldr r3, [r3] | r3 = *(r3);
0x0800217c bic r3, r3, 3 | r3 = BIT_MASK (r3, 3);
0x08002180 str r3, [r4, 0x70] | *((r4 + 0x70)) = r3;
0x08002184 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x08002188 and r3, r3, 7 | r3 &= 7;
| if (r3 == 0xa) {
0x0800218c beq 0x8002318 | goto label_18;
| }
0x08002190 cmp r3, 4 |
| if (r3 > 4) {
| /* switch table (5 cases) at 0x800219c */
0x08002194 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x08002198 b 0x80021cc |
| label_2:
0x080021cc cmp fp, 0 |
| if (fp != 0) {
0x080021d0 bne 0x8002404 | goto label_19;
| }
| label_7:
0x080021d4 ldr r3, [r8, 0x40c] | r3 = *((r8 + 0x40c));
0x080021d8 cmp r3, 0 |
| if (r3 == 0) {
0x080021dc ldrne r3, [r4, 0x40] | r3 = *((r4 + 0x40));
| }
| if (r3 == 0) {
0x080021e0 orrne r3, r3, 0x10000 | r3 |= 0x10000;
| }
| if (r3 == 0) {
0x080021e4 strne r3, [r4, 0x40] | *((r4 + 0x40)) = r3;
| }
0x080021e8 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x080021ec tst r3, 0x2000 |
| if ((r3 & 0x2000) == 0) {
0x080021f0 beq 0x8002244 | goto label_20;
| }
| label_9:
0x080021f4 mov r0, r4 | r0 = r4;
0x080021f8 add sp, sp, 0x1c |
0x080021fc pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_13:
0x08002200 stmdaeq r1, {r2, r3, r4, r5, r6, r7, r8, sb, sl, sp, pc} | __asm ("stmdaeq r1, {r2, r3, r4, r5, r6, r7, r8, sb, sl, sp, pc}");
0x08002204 stmdaeq r1, {r2, r3, r4, r5, r6, r7, r8, sb, sl, sp, pc} | __asm ("stmdaeq r1, {r2, r3, r4, r5, r6, r7, r8, sb, sl, sp, pc}");
0x08002208 pld [r3] | __asm ("pld [r3]");
| do {
0x0800220c ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x08002210 add r2, r2, 1 | r2++;
0x08002214 strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x08002218 teq r1, 0 | __asm ("teq r1, 0");
0x0800221c bne 0x800220c |
| } while ((r3 & 0x2000) != 0);
0x08002220 b 0x800208c | goto label_0;
| label_17:
0x08002224 add r3, r7, 0x14c | r3 = r7 + 0x14c;
0x08002228 pld [r3] | __asm ("pld [r3]");
| do {
0x0800222c ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x08002230 add r2, r2, 1 | r2++;
0x08002234 strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x08002238 teq r1, 0 | __asm ("teq r1, 0");
0x0800223c bne 0x800222c |
| } while ((r3 & 0x2000) != 0);
0x08002240 b 0x800212c | goto label_1;
| label_20:
0x08002244 mov r0, r4 | r0 = r4;
0x08002248 bl 0x8000990 | ip_vs_conn_hashkey_conn ();
0x0800224c mov r3, sp | r3 = sp;
0x08002250 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08002254 mov r5, r0 | r5 = r0;
0x08002258 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x0800225c ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08002260 add r2, r2, 0x200 | r2 += 0x200;
0x08002264 add r2, r2, 1 | r2++;
0x08002268 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0800226c ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08002270 add r2, r2, 1 | r2++;
0x08002274 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08002278 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x0800227c tst r3, 0x40 |
| if ((r3 & 0x40) != 0) {
0x08002280 bne 0x8002464 | goto label_21;
| }
0x08002284 add r0, r4, 0x4c | r0 = r4 + 0x4c;
0x08002288 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x0800228c orr r3, r3, 0x40 | r3 |= 0x40;
0x08002290 str r3, [r4, 0x40] | *((r4 + 0x40)) = r3;
0x08002294 pld [r0] | __asm ("pld [r0]");
| do {
0x08002298 ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x0800229c add r2, r3, 1 | r2 = r3 + 1;
0x080022a0 strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x080022a4 teq r1, 0 | __asm ("teq r1, 0");
0x080022a8 bne 0x8002298 |
| } while ((r3 & 0x40) != 0);
0x080022ac cmp r3, 0 |
| if (r3 == 0) {
0x080022b0 beq 0x8002438 | goto label_22;
| }
0x080022b4 add r2, r3, 1 | r2 = r3 + 1;
0x080022b8 orrs r2, r2, r3 | r2 |= r3;
| if (r2 < r2) {
0x080022bc bmi 0x8002420 | goto label_23;
| }
| label_8:
0x080022c0 ldr r3, [sl, 4] | r3 = *((sl + 4));
0x080022c4 ldr r2, [r3, r5, lsl 2] | offset_1 = r5 << 2;
| r2 = *((r3 + offset_1));
0x080022c8 add r1, r3, r5, lsl 2 | r1 = r3 + (r5 << 2);
0x080022cc str r2, [r4] | *(r4) = r2;
0x080022d0 str r1, [r4, 4] | *((r4 + 4)) = r1;
0x080022d4 cmp r2, 0 |
0x080022d8 str r4, [r3, r5, lsl 2] | offset_2 = r5 << 2;
| *((r3 + offset_2)) = r4;
| if (r2 == 0) {
0x080022dc strne r4, [r2, 4] | *((r2 + 4)) = r4;
| }
| label_10:
0x080022e0 mov r3, sp | r3 = sp;
0x080022e4 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x080022e8 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x080022ec ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x080022f0 sub r2, r2, 1 | r2--;
0x080022f4 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x080022f8 cmp r2, 0 |
| if (r2 == 0) {
0x080022fc beq 0x80023e4 | goto label_24;
| }
| label_5:
0x08002300 ldr r0, [pc, 0x178] | r0 = *(0x800247c);
0x08002304 movw r1, 0x201 | r1 = 0x201;
0x08002308 stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr}");
0x0800230c mov r0, r4 | r0 = r4;
0x08002310 add sp, sp, 0x1c |
0x08002314 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_18:
0x08002318 cmp r3, 4 |
| if (r3 > 4) {
| /* switch table (5 cases) at 0x8002324 */
0x0800231c ldrls pc, [pc, r3, lsl 2] | offset_3 = r3 << 2;
| pc = *((pc + offset_3));
| }
0x08002320 b 0x80021cc | goto label_2;
| label_12:
0x08002338 add lr, r4, 0x10 | lr = r4 + 0x10;
0x0800233c cmp r1, r3 |
0x08002340 ldrh r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x08002344 str r3, [sp, 0x14] | var_14h = r3;
0x08002348 ldm r2, {r0, r1, r2, r3} | r0 = *(r2);
| r1 = *((r2 + 4));
| r2 = *((r2 + 8));
| r3 = *((r2 + 12));
0x0800234c stm lr, {r0, r1, r2, r3} | *(lr) = r0;
| *((lr + 4)) = r1;
| *((lr + 8)) = r2;
| *((lr + 12)) = r3;
0x08002350 ldr r3, [sp, 0x14] | r3 = var_14h;
0x08002354 ldr ip, [r5, 8] | ip = *((r5 + 8));
0x08002358 strh r3, [r4, 8] | *((r4 + 8)) = r3;
| if (r1 == r3) {
0x0800235c beq 0x8001f88 | goto label_3;
| }
0x08002360 add lr, r4, 0x20 | lr = r4 + 0x20;
0x08002364 ldm ip, {r0, r1, r2, r3} | r0 = *(ip);
| r1 = *((ip + 4));
| r2 = *((ip + 8));
| r3 = *((ip + 12));
0x08002368 mov ip, lr |
0x0800236c stm lr, {r0, r1, r2, r3} | *(lr) = r0;
| *((lr + 4)) = r1;
| *((lr + 8)) = r2;
| *((lr + 12)) = r3;
0x08002370 b 0x8001fa0 | goto label_4;
| label_24:
0x080023e4 ldr r3, [r3] | r3 = *(r3);
0x080023e8 tst r3, 2 |
| if ((r3 & 2) == 0) {
0x080023ec beq 0x8002300 | goto label_5;
| }
0x080023f0 stmdaeq r2, {r0, r2, r4, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r4, r6, r7, ip, sp, lr}");
0x080023f4 b 0x8002300 | goto label_5;
| label_16:
0x080023f8 mov r1, 1 | r1 = 1;
0x080023fc stmdaeq r2, {r0, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r6, r7, ip, sp, lr}");
0x08002400 b 0x80020cc | goto label_6;
| label_19:
0x08002404 ldr r3, [fp, 0xc] | r3 = *(arg_ch);
0x08002408 cmp r3, 0 |
| if (r3 == 0) {
0x0800240c beq 0x80021d4 | goto label_7;
| }
0x08002410 ldr r1, [fp, 4] | r1 = *(arg_44h);
0x08002414 mov r0, r4 | r0 = r4;
0x08002418 stmdaeq r1, {r2, r3, r4, r6, fp} | __asm ("stmdaeq r1, {r2, r3, r4, r6, fp}");
0x0800241c b 0x80021d4 | goto label_7;
| label_23:
0x08002420 mov r1, 1 | r1 = 1;
0x08002424 stmdaeq r2, {r0, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r6, r7, ip, sp, lr}");
0x08002428 b 0x80022c0 | goto label_8;
| label_15:
0x0800242c mov r1, 2 | r1 = 2;
0x08002430 stmdaeq r2, {r0, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r6, r7, ip, sp, lr}");
0x08002434 b 0x80020cc | goto label_6;
| label_22:
0x08002438 mov r1, 2 | r1 = 2;
0x0800243c stmdaeq r2, {r0, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r6, r7, ip, sp, lr}");
0x08002440 b 0x80022c0 | goto label_8;
| label_11:
0x08002444 stmdaeq r2, {r0, r2, r3, r5, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r3, r5, r6, r7, ip, sp, lr}");
0x08002448 cmp r0, 0 |
| if (r0 == 0) {
0x0800244c beq 0x80021f4 | goto label_9;
| }
0x08002450 ldr r1, [pc, 0x2c] | r1 = .text;
0x08002454 stmdaeq r1, {r2, r3, r4, sb, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r3, r4, sb, sl, fp, ip, sp, lr}");
0x08002458 stmdaeq r1, {r2, r3, r4, sb, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r3, r4, sb, sl, fp, ip, sp, lr}");
0x0800245c stmdaeq r2, {r0, r3, r4, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r3, r4, r6, r7, ip, sp, lr}");
0x08002460 b 0x80021f4 | goto label_9;
| label_21:
0x08002464 ldr r2, [sp, 0x10] | r2 = var_10h;
0x08002468 stmdaeq r1, {r3, r5, r8, sb, ip, sp, lr} | __asm ("stmdaeq r1, {r3, r5, r8, sb, ip, sp, lr}");
0x0800246c stmdaeq r1, {r3, r5, r8, sb, ip, sp, lr} | __asm ("stmdaeq r1, {r3, r5, r8, sb, ip, sp, lr}");
0x08002470 stmdaeq r1, {r5, r6, r7, r8, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r5, r6, r7, r8, sl, fp, ip, sp, lr}");
0x08002474 stmdaeq r1, {r5, r6, r7, r8, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r5, r6, r7, r8, sl, fp, ip, sp, lr}");
0x08002478 stmdaeq r2, {r0, r3, r4, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r3, r4, r6, r7, ip, sp, lr}");
0x0800247c b 0x80022e0 | goto label_10;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x8000190 */
| #include <stdint.h>
|
; (fcn) sym.ip_vs_conn_seq_start () | void ip_vs_conn_seq_start (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x08000190 push {r4, r5, r6, lr} |
0x08000194 mov r4, r1 | r4 = r1;
0x08000198 mov r2, 0 | r2 = 0;
0x0800019c ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x080001a0 mov r5, r0 | r5 = r0;
0x080001a4 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x080001a8 stmdaeq r2, {r0, r3, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r3, r7, ip, sp, lr}");
0x080001ac ldrd r2, r3, [r4] | __asm ("ldrd r2, r3, [r4]");
0x080001b0 orrs r1, r2, r3 | r1 = r2 | r3;
| if (r1 == r2) {
0x080001b4 bne 0x80001c0 |
0x080001b8 mov r0, 1 | r0 = 1;
0x080001bc pop {r4, r5, r6, pc} |
| }
0x080001c0 subs r2, r2, 1 | r2--;
0x080001c4 mov r0, r5 | r0 = r5;
0x080001c8 sbc r3, r3, 0 | __asm ("sbc r3, r3, 0");
0x080001cc pop {r4, r5, r6, lr} |
0x080001d0 b 0x8000070 | return void (*0x8000070)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x8006ba4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ip_vs_copy_stats () | void ip_vs_copy_stats (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| r0 = arg1;
| r1 = arg2;
0x08006ba4 push {r4, r5, r6, lr} |
0x08006ba8 movw r4, 0x201 | r4 = 0x201;
0x08006bac mov r3, sp | r3 = sp;
0x08006bb0 bic ip, r3, 0x1fc0 | ip = BIT_MASK (r3, 0x1fc0);
0x08006bb4 bic ip, ip, 0x3f | ip = BIT_MASK (ip, 0x3f);
0x08006bb8 ldr lr, [ip, 4] |
0x08006bbc add lr, lr, r4 | lr += r4;
0x08006bc0 str lr, [ip, 4] |
0x08006bc4 ldr lr, [r1, 0xb0] |
0x08006bc8 ldr ip, [r1] | ip = *(r1);
0x08006bcc ldr r5, [r1, 0xb4] | r5 = *((r1 + 0xb4));
0x08006bd0 subs ip, ip, lr |
0x08006bd4 ldr lr, [r1, 4] |
0x08006bd8 str ip, [r0] | *(r0) = ip;
0x08006bdc sbc ip, lr, r5 | __asm ("sbc ip, lr, r5");
0x08006be0 str ip, [r0, 4] | *((r0 + 4)) = ip;
0x08006be4 ldr lr, [r1, 0xb8] |
0x08006be8 ldr ip, [r1, 8] | ip = *((r1 + 8));
0x08006bec ldr r5, [r1, 0xbc] | r5 = *((r1 + 0xbc));
0x08006bf0 subs ip, ip, lr |
0x08006bf4 ldr lr, [r1, 0xc] |
0x08006bf8 str ip, [r0, 8] | *((r0 + 8)) = ip;
0x08006bfc sbc ip, lr, r5 | __asm ("sbc ip, lr, r5");
0x08006c00 str ip, [r0, 0xc] | *((r0 + 0xc)) = ip;
0x08006c04 ldr lr, [r1, 0xc0] |
0x08006c08 ldr ip, [r1, 0x10] | ip = *((r1 + 0x10));
0x08006c0c ldr r5, [r1, 0xc4] | r5 = *((r1 + 0xc4));
0x08006c10 subs ip, ip, lr |
0x08006c14 ldr lr, [r1, 0x14] |
0x08006c18 str ip, [r0, 0x10] | *((r0 + 0x10)) = ip;
0x08006c1c sbc ip, lr, r5 | __asm ("sbc ip, lr, r5");
0x08006c20 str ip, [r0, 0x14] | *((r0 + 0x14)) = ip;
0x08006c24 ldr lr, [r1, 0xc8] |
0x08006c28 ldr ip, [r1, 0x18] | ip = *((r1 + 0x18));
0x08006c2c ldr r5, [r1, 0xcc] | r5 = *((r1 + 0xcc));
0x08006c30 subs ip, ip, lr |
0x08006c34 ldr lr, [r1, 0x1c] |
0x08006c38 str ip, [r0, 0x18] | *((r0 + 0x18)) = ip;
0x08006c3c sbc ip, lr, r5 | __asm ("sbc ip, lr, r5");
0x08006c40 str ip, [r0, 0x1c] | *((r0 + 0x1c)) = ip;
0x08006c44 ldr lr, [r1, 0xd0] |
0x08006c48 ldr ip, [r1, 0x20] | ip = *((r1 + 0x20));
0x08006c4c ldr r3, [r1, 0xd4] | r3 = *((r1 + 0xd4));
0x08006c50 subs ip, ip, lr |
0x08006c54 ldr lr, [r1, 0x24] |
0x08006c58 str ip, [r0, 0x20] | *((r0 + 0x20)) = ip;
0x08006c5c sbc r3, lr, r3 | __asm ("sbc r3, lr, r3");
0x08006c60 str r3, [r0, 0x24] | *((r0 + 0x24)) = r3;
0x08006c64 stmdaeq r1, {r3, r4, r6, r7, sb, fp, sp} | __asm ("stmdaeq r1, {r3, r4, r6, r7, sb, fp, sp}");
0x08006c68 mov r1, r4 | r1 = r4;
0x08006c6c ldr r0, [pc, 4] | r0 = sym.ip_vs_conn_array;
0x08006c70 pop {r4, r5, r6, lr} |
0x08006c74 stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr}");
0x08006c78 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x800b738).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x800d8a4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ip_vs_nat_send_or_cont () | void ip_vs_nat_send_or_cont (int32_t arg1, int32_t arg2) {
| int32_t var_24h;
| r0 = arg1;
| r1 = arg2;
0x0800d8a4 push {r4, r5, r6, r7, lr} |
0x0800d8a8 mov r6, r3 | r6 = r3;
0x0800d8ac mov r4, r1 | r4 = r1;
0x0800d8b0 ldrb r3, [r1, 0x67] | r3 = *((r1 + 0x67));
0x0800d8b4 sub sp, sp, 0x24 |
0x0800d8b8 mov r5, r2 | r5 = r2;
0x0800d8bc mov r7, r0 | r7 = r0;
0x0800d8c0 orr r3, r3, 1 | r3 |= 1;
0x0800d8c4 strb r3, [r1, 0x67] | *((r1 + 0x67)) = r3;
0x0800d8c8 ldr r3, [r2, 0x40] | r3 = *((r2 + 0x40));
0x0800d8cc tst r3, 0x10000 |
| if ((r3 & 0x10000) != 0) {
0x0800d8d0 bne 0x800dae8 | goto label_7;
| }
0x0800d8d4 ldr r2, [r1, 0x50] | r2 = *((r1 + 0x50));
0x0800d8d8 bics r0, r2, 7 | __asm ("bics r0, r2, 7");
| if ((r3 & 0x10000) != 0) {
0x0800d8dc bne 0x800d9e8 | goto label_8;
| }
| label_0:
0x0800d8e0 cmp r6, 0 |
| if (r6 == 0) {
0x0800d8e4 beq 0x800d938 | goto label_9;
| }
0x0800d8e8 ldrh r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x0800d8ec ldrh r3, [r5, 0xa] | r3 = *((r5 + 0xa));
0x0800d8f0 cmp r2, r3 |
| if (r2 == r3) {
0x0800d8f4 beq 0x800da14 | goto label_10;
| }
| label_1:
0x0800d8f8 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0800d8fc cmp r3, 0 |
0x0800d900 beq 0x800d92c |
| while (r3 != 0) {
0x0800d904 ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x0800d908 cmp r3, 0 |
| if (r3 == 0) {
0x0800d90c beq 0x800daac | goto label_11;
| }
0x0800d910 mov r0, r4 | r0 = r4;
0x0800d914 blx r3 | uint32_t (*r3)(uint32_t) (r0);
0x0800d918 mov r3, 0 | r3 = 0;
0x0800d91c str r3, [r4, 0x4c] | *((r4 + 0x4c)) = r3;
0x0800d920 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
| label_4:
0x0800d924 cmp r6, 0 |
| if (r6 == 0) {
0x0800d928 beq 0x800dabc | goto label_12;
| }
| label_2:
0x0800d92c mov r0, 1 | r0 = 1;
0x0800d930 add sp, sp, 0x24 |
0x0800d934 pop {r4, r5, r6, r7, pc} |
| label_9:
0x0800d938 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0800d93c cmp r3, 0 |
0x0800d940 bne 0x800d904 |
| }
0x0800d944 ldrb r3, [r4, 0x64] | r3 = *((r4 + 0x64));
0x0800d948 and r2, r3, 0x60 | r2 = r3 & 0x60;
0x0800d94c cmp r2, 0x40 |
0x0800d950 bfieq r3, r6, 5, 2 | __asm ("bfieq r3, r6, 5, 2");
| if (r2 != 0x40) {
0x0800d954 strbeq r3, [r4, 0x64] | *((r4 + 0x64)) = r3;
| }
| label_5:
0x0800d958 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x0800d95c uxtb r7, r7 | r7 = (int8_t) r7;
0x0800d960 ldr r2, [r5, 0x48] | r2 = *((r5 + 0x48));
0x0800d964 bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x0800d968 ldr r5, [r2, 0x510] | r5 = *((r2 + 0x510));
0x0800d96c ldr r6, [r3] | r6 = *(r3);
0x0800d970 stmdaeq r2, {r0, r3, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r3, r7, ip, sp, lr}");
0x0800d974 sub r3, r7, 2 | r3 = r7 - 2;
0x0800d978 cmp r3, 8 |
| if (r3 > 8) {
| /* switch table (9 cases) at 0x800d984 */
0x0800d97c ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x0800d980 b 0x800d9a8 |
0x0800d9a8 stmdaeq r1, {r3, r4, sb, sl, fp, ip, pc} | __asm ("stmdaeq r1, {r3, r4, sb, sl, fp, ip, pc}");
0x0800d9ac stmdaeq r1, {r3, r4, sb, sl, fp, ip, pc} | __asm ("stmdaeq r1, {r3, r4, sb, sl, fp, ip, pc}");
0x0800d9b0 ldrb r3, [r2] | r3 = *(r2);
0x0800d9b4 cmp r3, 0 |
| if (r3 == 0) {
0x0800d9b8 beq 0x800dafc | goto label_13;
| }
| label_6:
0x0800d9bc stmdaeq r2, {r0, r2, r3, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r3, r7, ip, sp, lr}");
0x0800d9c0 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x0800d9c4 mov r2, r4 | r2 = r4;
0x0800d9c8 mov r0, r5 | r0 = r5;
0x0800d9cc mov r1, 0 | r1 = 0;
0x0800d9d0 bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x0800d9d4 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0800d9d8 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x0800d9dc mov r0, 2 | r0 = 2;
0x0800d9e0 add sp, sp, 0x24 |
0x0800d9e4 pop {r4, r5, r6, r7, pc} |
| label_8:
0x0800d9e8 pld [r0] | __asm ("pld [r0]");
| do {
0x0800d9ec ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x0800d9f0 sub r3, r3, 1 | r3--;
0x0800d9f4 strex r1, r3, [r0] | __asm ("strex r1, r3, [r0]");
0x0800d9f8 teq r1, 0 | __asm ("teq r1, 0");
0x0800d9fc bne 0x800d9ec |
| } while (r3 != 0);
0x0800da00 cmp r3, 0 |
| if (r3 == 0) {
0x0800da04 beq 0x800da34 | goto label_14;
| }
| label_3:
0x0800da08 mov r3, 7 | r3 = 7;
0x0800da0c str r3, [r4, 0x50] | *((r4 + 0x50)) = r3;
0x0800da10 b 0x800d8e0 | goto label_0;
| label_10:
0x0800da14 ldrh r2, [r5, 0xe] | r2 = *((r5 + 0xe));
0x0800da18 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x0800da1c cmp r2, 0xa |
0x0800da20 ldr r2, [r5, 0x30] | r2 = *((r5 + 0x30));
| if (r2 == 0xa) {
0x0800da24 beq 0x800db1c | goto label_15;
| }
0x0800da28 cmp r3, r2 |
| if (r3 != r2) {
0x0800da2c bne 0x800d8f8 | goto label_1;
| }
0x0800da30 b 0x800d92c | goto label_2;
| label_14:
0x0800da34 stmdaeq r2, {r0, r2, r3, r5, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r3, r5, r8, ip, sp, lr}");
0x0800da38 b 0x800da08 | goto label_3;
| label_11:
0x0800daac ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0800dab0 cmp r3, 0 |
| if (r3 == 0) {
0x0800dab4 beq 0x800d924 | goto label_4;
| }
0x0800dab8 udf 0x12 | __asm ("udf 0x12");
| label_12:
0x0800dabc ldrb r2, [r4, 0x64] | r2 = *((r4 + 0x64));
0x0800dac0 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0800dac4 and r1, r2, 0x60 | r1 = r2 & 0x60;
0x0800dac8 cmp r1, 0x40 |
0x0800dacc bfieq r2, r6, 5, 2 | __asm ("bfieq r2, r6, 5, 2");
| if (r1 != 0x40) {
0x0800dad0 strbeq r2, [r4, 0x64] | *((r4 + 0x64)) = r2;
| }
0x0800dad4 cmp r3, 0 |
| if (r3 == 0) {
0x0800dad8 movne r2, 0 | r2 = 0;
| }
| if (r3 == 0) {
0x0800dadc movne r3, 0 | r3 = 0;
| }
0x0800dae0 strdne r2, r3, [r4, 0x10] | __asm ("strdne r2, r3, [r4, 0x10]");
0x0800dae4 b 0x800d958 | goto label_5;
| label_7:
0x0800dae8 mov r1, r5 | r1 = r5;
0x0800daec mov r0, r4 | r0 = r4;
0x0800daf0 mov r2, 1 | r2 = 1;
0x0800daf4 stmdaeq r1, {r2, r4, r5, r8, sl, fp, ip, lr} | __asm ("stmdaeq r1, {r2, r4, r5, r8, sl, fp, ip, lr}");
0x0800daf8 b 0x800d8e0 | goto label_0;
| label_13:
0x0800dafc mov r1, 1 | r1 = 1;
0x0800db00 stmdaeq r1, {r4, r5, r6, r7, r8, fp, pc} | __asm ("stmdaeq r1, {r4, r5, r6, r7, r8, fp, pc}");
0x0800db04 stmdaeq r1, {r4, r5, r6, r7, r8, fp, pc} | __asm ("stmdaeq r1, {r4, r5, r6, r7, r8, fp, pc}");
0x0800db08 strb r1, [r2] | *(r2) = r1;
0x0800db0c mov r2, 9 | r2 = 9;
0x0800db10 mov r1, 0xf6 | r1 = 0xf6;
0x0800db14 stmdaeq r2, {r0, r2, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r6, r7, r8, ip, sp, lr}");
0x0800db18 b 0x800d9bc | goto label_6;
| label_15:
0x0800db1c ldr r1, [r5, 0x34] | r1 = *((r5 + 0x34));
0x0800db20 eor r3, r3, r2 | r3 ^= r2;
0x0800db24 ldr r2, [r5, 0x24] | r2 = *((r5 + 0x24));
0x0800db28 eor r2, r2, r1 | r2 ^= r1;
0x0800db2c ldr r1, [r5, 0x38] | r1 = *((r5 + 0x38));
0x0800db30 orr r3, r2, r3 | r3 = r2 | r3;
0x0800db34 ldr r2, [r5, 0x28] | r2 = *((r5 + 0x28));
0x0800db38 eor r2, r2, r1 | r2 ^= r1;
0x0800db3c ldr r1, [r5, 0x3c] | r1 = *((r5 + 0x3c));
0x0800db40 orr r3, r3, r2 | r3 |= r2;
0x0800db44 ldr r2, [r5, 0x2c] | r2 = *((r5 + 0x2c));
0x0800db48 eor r2, r2, r1 | r2 ^= r1;
0x0800db4c orrs r3, r3, r2 | r3 |= r2;
| if (r3 != r3) {
0x0800db50 bne 0x800d8f8 | goto label_1;
| }
0x0800db54 b 0x800d92c | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x8002b08 */
| #include <stdint.h>
|
; (fcn) sym.ip_vs_proto_name () | void ip_vs_proto_name (uint32_t arg1) {
| r0 = arg1;
0x08002b08 mov r2, r0 | r2 = r0;
0x08002b0c cmp r0, 0x11 |
| if (r0 <= 0x11) {
0x08002b10 bhi 0x8002b68 |
0x08002b14 cmp r0, 0x11 |
| if (r0 > 0x11) {
| /* switch table (18 cases) at 0x8002b20 */
0x08002b18 ldrls pc, [pc, r0, lsl 2] | offset_0 = r0 << 2;
| pc = *((pc + offset_0));
| }
0x08002b1c b 0x8002b90 |
| } else {
0x08002b68 cmp r0, 0x3a |
| if (r0 != 0x3a) {
0x08002b6c beq 0x8002b84 |
0x08002b70 cmp r0, 0x84 |
| if (r0 != 0x84) {
0x08002b74 bne 0x8002b90 | goto label_0;
| }
0x08002b78 stmdaeq r1, {r2, r5, r7, sb, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r5, r7, sb, sl, fp, ip, sp, lr}");
0x08002b7c stmdaeq r1, {r2, r5, r7, sb, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r5, r7, sb, sl, fp, ip, sp, lr}");
0x08002b80 bx lr | return;
| }
0x08002b84 stmdaeq r1, {r2, r4, r5, r7, sb, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r4, r5, r7, sb, sl, fp, ip, sp, lr}");
0x08002b88 stmdaeq r1, {r2, r4, r5, r7, sb, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r4, r5, r7, sb, sl, fp, ip, sp, lr}");
0x08002b8c bx lr | return;
| }
| label_0:
0x08002b90 push {r4, lr} |
0x08002b94 stmdaeq r1, {r6, r7, sb, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r6, r7, sb, sl, fp, ip, sp, lr}");
0x08002b98 stmdaeq r1, {r6, r7, sb, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r6, r7, sb, sl, fp, ip, sp, lr}");
0x08002b9c ldr r0, [pc, 0x38] | r0 = *(0x8002bd8);
0x08002ba0 stmdaeq r2, {r0, r2, r3, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r3, r8, ip, sp, lr}");
0x08002ba4 ldr r0, [pc, 0x30] | r0 = *(0x8002bd8);
0x08002ba8 pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x80129dc */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ip_vs_start_estimator () | void ip_vs_start_estimator (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| r0 = arg1;
| r1 = arg2;
0x080129dc str lr, [sp, -4]! |
0x080129e0 add ip, r1, 0x50 |
0x080129e4 mov r2, r0 | r2 = r0;
0x080129e8 mov r3, sp | r3 = sp;
0x080129ec str ip, [r1, 0x50] | *((r1 + 0x50)) = ip;
0x080129f0 bic lr, r3, 0x1fc0 | lr = BIT_MASK (r3, 0x1fc0);
0x080129f4 str ip, [r1, 0x54] | *((r1 + 0x54)) = ip;
0x080129f8 bic lr, lr, 0x3f | lr = BIT_MASK (lr, 0x3f);
0x080129fc mov r3, r1 | r3 = r1;
0x08012a00 movw r1, 0x201 | r1 = 0x201;
0x08012a04 ldr r0, [lr, 4] | r0 = *((lr + 4));
0x08012a08 add r0, r0, r1 | r0 += r1;
0x08012a0c str r0, [lr, 4] | *((lr + 4)) = r0;
0x08012a10 ldr r0, [r2, 0x47c] | r0 = *((r2 + 0x47c));
0x08012a14 str ip, [r0, 4] | *((r0 + 4)) = ip;
0x08012a18 str r0, [r3, 0x50] | *((r3 + 0x50)) = r0;
0x08012a1c add r0, r2, 0x470 | r0 = r2 + 0x470;
0x08012a20 add r0, r0, 0xc | r0 += 0xc;
0x08012a24 str r0, [r3, 0x54] | *((r3 + 0x54)) = r0;
0x08012a28 str ip, [r2, 0x47c] | *((r2 + 0x47c)) = ip;
0x08012a2c ldr r0, [pc, 4] | r0 = sym.ip_vs_conn_array;
0x08012a30 pop {lr} |
0x08012a34 stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr}");
0x08012a38 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x8012a3c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ip_vs_stop_estimator () | void ip_vs_stop_estimator (int32_t arg2) {
| r1 = arg2;
0x08012a3c mov r3, sp | r3 = sp;
0x08012a40 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08012a44 mov r3, r1 | r3 = r1;
0x08012a48 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08012a4c movw r1, 0x201 | r1 = 0x201;
0x08012a50 ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x08012a54 add r0, r0, r1 | r0 += r1;
0x08012a58 str r0, [r2, 4] | *((r2 + 4)) = r0;
0x08012a5c ldr r2, [r3, 0x54] | r2 = *((r3 + 0x54));
0x08012a60 mov ip, 0x100 |
0x08012a64 ldr r0, [r3, 0x50] | r0 = *((r3 + 0x50));
0x08012a68 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x08012a6c str r0, [r2] | *(r2) = r0;
0x08012a70 movw r2, 0x122 | r2 = 0x122;
0x08012a74 ldr r0, [pc, 8] | r0 = sym.ip_vs_conn_array;
0x08012a78 str ip, [r3, 0x50] | *((r3 + 0x50)) = ip;
0x08012a7c str r2, [r3, 0x54] | *((r3 + 0x54)) = r2;
0x08012a80 stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr}");
0x08012a84 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x80142c8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ip_vs_tcp_conn_listen () | void ip_vs_tcp_conn_listen (uint32_t arg1) {
| int32_t var_0h;
| r0 = arg1;
0x080142c8 push {r4, lr} |
0x080142cc mov r1, 6 | r1 = 6;
0x080142d0 mov r4, r0 | r4 = r0;
0x080142d4 ldr r0, [r0, 0x48] | r0 = *((r0 + 0x48));
0x080142d8 stmdaeq r1, {r2, r3, r4, r5, sl, fp, sp} | __asm ("stmdaeq r1, {r2, r3, r4, r5, sl, fp, sp}");
0x080142dc mov r3, sp | r3 = sp;
0x080142e0 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x080142e4 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x080142e8 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x080142ec add r3, r3, 0x200 | r3 += 0x200;
0x080142f0 add r3, r3, 1 | r3++;
0x080142f4 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x080142f8 cmp r0, 0 |
0x080142fc mov r3, 9 | r3 = 9;
0x08014300 strh r3, [r4, 0x68] | *((r4 + 0x68)) = r3;
0x08014304 movw r1, 0x201 | r1 = 0x201;
0x08014308 movweq r3, 0x2ee0 | __asm ("movweq r3, 0x2ee0");
| if (r0 == 0) {
0x0801430c ldrne r3, [r0, 8] | r3 = *((r0 + 8));
| }
0x08014310 ldr r0, [pc, 0xc] | r0 = *(0x8014320);
| if (r0 == 0) {
0x08014314 ldrne r3, [r3, 0x24] | r3 = *((r3 + 0x24));
| }
0x08014318 str r3, [r4, 0x64] | *((r4 + 0x64)) = r3;
0x0801431c pop {r4, lr} |
0x08014320 stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr}");
0x08014324 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x80018fc */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ip_vs_try_bind_dest () | void ip_vs_try_bind_dest (int32_t arg1) {
| 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_1ch;
| r0 = arg1;
0x080018fc push {r4, r5, lr} |
0x08001900 mov r4, r0 | r4 = r0;
0x08001904 sub sp, sp, 0x1c |
0x08001908 stmdaeq r2, {r0, r3, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r3, r7, ip, sp, lr}");
0x0800190c add r2, r4, 0x20 | r2 = r4 + 0x20;
0x08001910 str r2, [sp, 4] | var_4h = r2;
0x08001914 add r3, r4, 0x30 | r3 = r4 + 0x30;
0x08001918 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x0800191c ldr r1, [r4, 0x6c] | r1 = *((r4 + 0x6c));
0x08001920 ldrh r2, [r4, 0xe] | r2 = *((r4 + 0xe));
0x08001924 str r0, [sp, 0x14] | var_14h = r0;
0x08001928 str r1, [sp, 0x10] | var_10h = r1;
0x0800192c ldrh r0, [r4, 0x44] | r0 = *((r4 + 0x44));
0x08001930 ldrh r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x08001934 str r1, [sp, 8] | var_8h = r1;
0x08001938 mov r1, r2 | r1 = r2;
0x0800193c str r0, [sp, 0xc] | var_ch = r0;
0x08001940 ldrh r0, [r4, 0xa] | r0 = *((r4 + 0xa));
0x08001944 str r0, [sp] | *(sp) = r0;
0x08001948 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x0800194c stmdaeq r0, {r2, r7, fp, lr, pc} | __asm ("stmdaeq r0, {r2, r7, fp, lr, pc}");
0x08001950 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 == r0) {
0x08001954 beq 0x8001a9c | goto label_0;
| }
0x08001958 mov r3, sp | r3 = sp;
0x0800195c movw r1, 0x201 | r1 = 0x201;
0x08001960 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08001964 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08001968 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0800196c add r2, r2, r1 | r2 += r1;
0x08001970 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08001974 ldr r3, [r4, 0x7c] | r3 = *((r4 + 0x7c));
0x08001978 cmp r3, 0 |
| if (r3 != 0) {
0x0800197c bne 0x8001a94 | goto label_4;
| }
0x08001980 ldr r3, [r4, 0x88] | r3 = *((r4 + 0x88));
0x08001984 cmp r3, 0 |
| if (r3 != 0) {
0x08001988 beq 0x8001994 |
0x0800198c mov r0, r4 | r0 = r4;
0x08001990 stmdaeq r1, {r2, r5, r6, fp} | __asm ("stmdaeq r1, {r2, r5, r6, fp}");
| }
0x08001994 add r0, r5, 0x3c | r0 = r5 + 0x3c;
0x08001998 pld [r0] | __asm ("pld [r0]");
| do {
0x0800199c ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x080019a0 add r2, r3, 1 | r2 = r3 + 1;
0x080019a4 strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x080019a8 teq r1, 0 | __asm ("teq r1, 0");
0x080019ac bne 0x800199c |
| } while (r3 != 0);
0x080019b0 cmp r3, 0 |
| if (r3 == 0) {
0x080019b4 beq 0x8001b3c | goto label_5;
| }
0x080019b8 add r2, r3, 1 | r2 = r3 + 1;
0x080019bc orrs r2, r2, r3 | r2 |= r3;
| if (r2 < r2) {
0x080019c0 bmi 0x8001b88 | goto label_6;
| }
| label_2:
0x080019c4 ldrh r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x080019c8 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x080019cc cmp r2, 0x11 |
0x080019d0 ldr r2, [r4, 0x40] | r2 = *((r4 + 0x40));
0x080019d4 bicne r3, r3, 0x2000 | __asm ("bicne r3, r3, 0x2000");
0x080019d8 tst r2, 0x20 |
| if ((r2 & 0x20) != 0) {
0x080019dc beq 0x80019ec |
0x080019e0 tst r2, 0x1000 |
0x080019e4 bic r2, r2, 0x87 | r2 = BIT_MASK (r2, 0x87);
0x080019e8 biceq r3, r3, 0x100 | __asm ("biceq r3, r3, 0x100");
| }
0x080019ec orr r3, r3, r2 | r3 |= r2;
0x080019f0 str r5, [r4, 0x7c] | *((r4 + 0x7c)) = r5;
0x080019f4 tst r3, 0x1000 |
0x080019f8 str r3, [r4, 0x40] | *((r4 + 0x40)) = r3;
| if ((r3 & 0x1000) != 0) {
0x080019fc bne 0x8001b68 | goto label_7;
| }
0x08001a00 tst r3, 0x100 |
| if ((r3 & 0x100) != 0) {
0x08001a04 addeq r3, r5, 0x144 | r3 = r5 + 0x144;
| }
| if ((r3 & 0x100) == 0) {
0x08001a08 addne r3, r5, 0x148 | r3 = r5 + 0x148;
| }
0x08001a0c pld [r3] | __asm ("pld [r3]");
| do {
0x08001a10 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x08001a14 add r2, r2, 1 | r2++;
0x08001a18 strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x08001a1c teq r1, 0 | __asm ("teq r1, 0");
0x08001a20 bne 0x8001a10 |
| } while ((r3 & 0x100) != 0);
| label_3:
0x08001a24 ldr r3, [r5, 0x150] | r3 = *((r5 + 0x150));
0x08001a28 cmp r3, 0 |
| if (r3 != 0) {
0x08001a2c beq 0x8001a4c |
0x08001a30 ldr r2, [r5, 0x144] | r2 = *((r5 + 0x144));
0x08001a34 ldr r1, [r5, 0x148] | r1 = *((r5 + 0x148));
0x08001a38 add r2, r2, r1 | r2 += r1;
0x08001a3c cmp r3, r2 |
| if (r3 > r2) {
0x08001a40 ldrls r3, [r5, 0x24] | r3 = *((r5 + 0x24));
| }
| if (r3 > r2) {
0x08001a44 orrls r3, r3, 2 | r3 |= 2;
| }
| if (r3 <= r2) {
0x08001a48 strls r3, [r5, 0x24] | *((r5 + 0x24)) = r3;
| goto label_8;
| }
| }
| label_8:
0x08001a4c ldr r0, [pc, 0x170] | r0 = *(0x8001bc0);
0x08001a50 movw r1, 0x201 | r1 = 0x201;
0x08001a54 stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr}");
0x08001a58 ldrh r3, [r4, 0xe] | r3 = *((r4 + 0xe));
0x08001a5c mov r2, 0 | r2 = 0;
0x08001a60 str r2, [r4, 0x84] | *((r4 + 0x84)) = r2;
0x08001a64 cmp r3, 0xa |
0x08001a68 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x08001a6c and r3, r3, 7 | r3 &= 7;
| if (r3 == 0xa) {
0x08001a70 beq 0x8001b48 | goto label_9;
| }
0x08001a74 cmp r3, 4 |
| if (r3 > 4) {
| /* switch table (5 cases) at 0x8001a80 */
0x08001a78 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x08001a7c b 0x8001ac4 | goto label_1;
| label_4:
0x08001a94 ldr r0, [pc, 0x12c] | r0 = .text;
0x08001a98 stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr}");
| do {
| label_0:
0x08001a9c add sp, sp, 0x1c |
0x08001aa0 pop {r4, r5, lr} |
0x08001aa4 stmdaeq r2, {r0, r2, r3, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r3, r7, ip, sp, lr}");
0x08001aa8 ldrh r3, [r4, 0x46] | r3 = *((r4 + 0x46));
0x08001aac cmp r3, 0xa |
0x08001ab0 stmdaeq r0, {r2, r3, r5, r7, r8, sl, ip, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r5, r7, r8, sl, ip, sp, lr, pc}");
0x08001ab4 stmdaeq r0, {r4, r7, r8, ip, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r7, r8, ip, sp, lr, pc}");
0x08001ab8 stmdaeq r0, {r2, r3, r5, r7, r8, sl, ip, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r5, r7, r8, sl, ip, sp, lr, pc}");
0x08001abc stmdaeq r0, {r4, r7, r8, ip, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r7, r8, ip, sp, lr, pc}");
0x08001ac0 str r3, [r4, 0x84] | *((r4 + 0x84)) = r3;
| label_1:
0x08001ac4 ldrh r1, [r4, 0x44] | r1 = *((r4 + 0x44));
0x08001ac8 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x08001acc stmdaeq r1, {r2, r3, r4, r5, sl, fp, sp} | __asm ("stmdaeq r1, {r2, r3, r4, r5, sl, fp, sp}");
0x08001ad0 cmp r0, 0 |
0x08001ad4 beq 0x8001a9c |
| } while (r0 == 0);
0x08001ad8 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x08001adc cmp r3, 0 |
| if (r3 == 0) {
0x08001ae0 beq 0x8001a9c | goto label_0;
| }
0x08001ae4 ldr r1, [r0, 4] | r1 = *((r0 + 4));
0x08001ae8 mov r0, r4 | r0 = r4;
0x08001aec stmdaeq r1, {r2, r3, r4, r6, fp} | __asm ("stmdaeq r1, {r2, r3, r4, r6, fp}");
0x08001af0 add sp, sp, 0x1c |
0x08001af4 pop {r4, r5, lr} |
0x08001af8 stmdaeq r2, {r0, r2, r3, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r3, r7, ip, sp, lr}");
0x08001afc stmdaeq r0, {r4, r5, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r5, r7, fp, sp, lr, pc}");
0x08001b00 stmdaeq r0, {r4, r5, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r5, r7, fp, sp, lr, pc}");
0x08001b04 str r3, [r4, 0x84] | *((r4 + 0x84)) = r3;
0x08001b08 b 0x8001ac4 | goto label_1;
| label_5:
0x08001b3c mov r1, 2 | r1 = 2;
0x08001b40 stmdaeq r2, {r0, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r6, r7, ip, sp, lr}");
0x08001b44 b 0x80019c4 | goto label_2;
| label_9:
0x08001b48 cmp r3, 4 |
| if (r3 > 4) {
| /* switch table (5 cases) at 0x8001b54 */
0x08001b4c ldrls pc, [pc, r3, lsl 2] | offset_1 = r3 << 2;
| pc = *((pc + offset_1));
| }
0x08001b50 b 0x8001ac4 | goto label_1;
| label_7:
0x08001b68 add r3, r5, 0x14c | r3 = r5 + 0x14c;
0x08001b6c pld [r3] | __asm ("pld [r3]");
| do {
0x08001b70 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x08001b74 add r2, r2, 1 | r2++;
0x08001b78 strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x08001b7c teq r1, 0 | __asm ("teq r1, 0");
0x08001b80 bne 0x8001b70 |
| } while (r3 != 4);
0x08001b84 b 0x8001a24 | goto label_3;
| label_6:
0x08001b88 mov r1, 1 | r1 = 1;
0x08001b8c stmdaeq r2, {r0, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r6, r7, ip, sp, lr}");
0x08001b90 b 0x80019c4 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x8007874 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ip_vs_zero_stats () | void ip_vs_zero_stats (int32_t arg1) {
| int32_t var_0h;
| r0 = arg1;
0x08007874 push {r4, r6, r7, lr} |
0x08007878 movw r4, 0x201 | r4 = 0x201;
0x0800787c mov r3, sp | r3 = sp;
0x08007880 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08007884 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08007888 ldr ip, [r2, 4] | ip = *((r2 + 4));
0x0800788c add ip, ip, r4 |
0x08007890 str ip, [r2, 4] | *((r2 + 4)) = ip;
0x08007894 ldrd r6, r7, [r0] | __asm ("ldrd r6, r7, [r0]");
0x08007898 strd r6, r7, [r0, 0xb0] | __asm ("strd r6, r7, [r0, 0xb0]");
0x0800789c ldrd r6, r7, [r0, 8] | __asm ("ldrd r6, r7, [r0, 8]");
0x080078a0 strd r6, r7, [r0, 0xb8] | __asm ("strd r6, r7, [r0, 0xb8]");
0x080078a4 ldrd r6, r7, [r0, 0x10] | __asm ("ldrd r6, r7, [r0, 0x10]");
0x080078a8 strd r6, r7, [r0, 0xc0] | __asm ("strd r6, r7, [r0, 0xc0]");
0x080078ac ldrd r6, r7, [r0, 0x18] | __asm ("ldrd r6, r7, [r0, 0x18]");
0x080078b0 strd r6, r7, [r0, 0xc8] | __asm ("strd r6, r7, [r0, 0xc8]");
0x080078b4 ldrd r6, r7, [r0, 0x20] | __asm ("ldrd r6, r7, [r0, 0x20]");
0x080078b8 strd r6, r7, [r0, 0xd0] | __asm ("strd r6, r7, [r0, 0xd0]");
0x080078bc stmdaeq r1, {r3, r7, sb, fp, sp} | __asm ("stmdaeq r1, {r3, r7, sb, fp, sp}");
0x080078c0 mov r1, r4 | r1 = r4;
0x080078c4 ldr r0, [pc, 4] | r0 = sym.ip_vs_conn_array;
0x080078c8 pop {r4, r6, r7, lr} |
0x080078cc stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr}");
0x080078d0 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x8010f54 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.master_wakeup_work_handler () | void master_wakeup_work_handler (int32_t arg1) {
| int32_t var_0h;
| r0 = arg1;
0x08010f54 push {r4, lr} |
0x08010f58 mov r3, sp | r3 = sp;
0x08010f5c ldr r1, [r0, 0x2c] | r1 = *((r0 + 0x2c));
0x08010f60 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08010f64 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08010f68 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x08010f6c add r3, r3, 0x200 | r3 += 0x200;
0x08010f70 add r3, r3, 1 | r3++;
0x08010f74 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x08010f78 ldr r3, [r0, -8] | r3 = *((r0 - 8));
0x08010f7c cmp r3, 0 |
| if (r3 != 0) {
0x08010f80 beq 0x8010f90 |
0x08010f84 ldr r3, [r0, -4] | r3 = *((r0 - 4));
0x08010f88 cmp r3, 7 |
| if (r3 < 7) {
0x08010f8c bls 0x8010fa0 | goto label_0;
| }
| }
0x08010f90 pop {r4, lr} |
0x08010f94 movw r1, 0x201 | r1 = 0x201;
0x08010f98 ldr r0, [pc, 0x40] | r0 = *(0x8010fdc);
0x08010f9c stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr}");
| label_0:
0x08010fa0 ldr ip, [r1, 0x498] | ip = *((r1 + 0x498));
0x08010fa4 sub r3, r0, 0x14 | r3 = r0 - 0x14;
0x08010fa8 movw r2, 0xd2d4 |
0x08010fac movt r2, 0xd2d2 | r2 = 0xd2d2d2d4;
0x08010fb0 sub r3, r3, ip | r3 -= ip;
0x08010fb4 mov ip, 8 |
0x08010fb8 str ip, [r0, -4] | *((r0 - 4)) = ip;
0x08010fbc asr r3, r3, 2 | r3 >>= 2;
0x08010fc0 ldr r1, [r1, 0x49c] | r1 = *((r1 + 0x49c));
0x08010fc4 mul r2, r3, r2 | r2 = r3 * r2;
0x08010fc8 ldr r0, [r1, r2] | r0 = *((r1 + r2));
0x08010fcc stmdaeq r2, {r0, r2, r3, r5, r6, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r3, r5, r6, sb, ip, sp, lr}");
0x08010fd0 ldr r0, [pc, 8] | r0 = sym.ip_vs_conn_array;
0x08010fd4 pop {r4, lr} |
0x08010fd8 movw r1, 0x201 | r1 = 0x201;
0x08010fdc stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr}");
0x08010fe0 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x8007124 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.update_defense_level () | void update_defense_level (int32_t arg1) {
| int32_t var_14h;
| int32_t var_1ch;
| r0 = arg1;
0x08007124 push {r4, r5, r6, r7, lr} |
0x08007128 mov r4, r0 | r4 = r0;
0x0800712c sub sp, sp, 0x44 |
0x08007130 mov r0, sp | r0 = sp;
0x08007134 stmdaeq r2, {r0, r2, r5, r6, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r5, r6, r8, ip, sp, lr}");
0x08007138 mov r3, sp | r3 = sp;
0x0800713c bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08007140 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x08007144 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08007148 ldr r5, [sp, 0x14] | r5 = var_14h;
0x0800714c ldr r6, [r4, 0x3f8] | r6 = *((r4 + 0x3f8));
0x08007150 add r5, r5, r2 | r5 += r2;
0x08007154 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08007158 add r2, r2, 0x200 | r2 += 0x200;
0x0800715c str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08007160 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08007164 add r2, r2, 1 | r2++;
0x08007168 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0800716c ldr r3, [r4, 0x400] | r3 = *((r4 + 0x400));
0x08007170 cmp r3, 3 |
| if (r3 > 3) {
| /* switch table (4 cases) at 0x800717c */
0x08007174 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x08007178 b 0x800719c |
0x0800719c mov r7, 0xe000 |
0x080071a0 movt r7, 0xffff | r7 = 0x-2000;
0x080071a4 mov r3, sp | r3 = sp;
0x080071a8 and r3, r3, r7 | r3 &= r7;
0x080071ac ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x080071b0 sub r2, r2, 1 | r2--;
0x080071b4 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x080071b8 cmp r2, 0 |
0x080071bc beq 0x8007348 |
| while ((r2 & 2) == 0) {
| label_0:
0x080071c0 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x080071c4 add r2, r2, 1 | r2++;
0x080071c8 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x080071cc ldr r3, [r4, 0x404] | r3 = *((r4 + 0x404));
0x080071d0 cmp r3, 3 |
| if (r3 > 3) {
| /* switch table (4 cases) at 0x80071dc */
0x080071d4 ldrls pc, [pc, r3, lsl 2] | offset_1 = r3 << 2;
| pc = *((pc + offset_1));
| }
0x080071d8 b 0x80071fc |
0x080071fc mov r7, 0xe000 |
0x08007200 movt r7, 0xffff | r7 = 0x-2000;
0x08007204 mov r3, sp | r3 = sp;
0x08007208 and r3, r3, r7 | r3 &= r7;
0x0800720c ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08007210 sub r2, r2, 1 | r2--;
0x08007214 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08007218 cmp r2, 0 |
| if (r2 == 0) {
0x0800721c beq 0x8007378 | goto label_4;
| }
| label_2:
0x08007220 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08007224 add r2, r2, 1 | r2++;
0x08007228 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0800722c ldr r3, [r4, 0x408] | r3 = *((r4 + 0x408));
0x08007230 cmp r3, 3 |
| if (r3 > 3) {
| /* switch table (4 cases) at 0x800723c */
0x08007234 ldrls pc, [pc, r3, lsl 2] | offset_2 = r3 << 2;
| pc = *((pc + offset_2));
| }
0x08007238 b 0x8007444 | goto label_5;
| label_3:
0x08007274 mov r3, sp | r3 = sp;
0x08007278 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x0800727c bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08007280 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08007284 sub r2, r2, 1 | r2--;
0x08007288 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0800728c cmp r2, 0 |
| if (r2 == 0) {
0x08007290 beq 0x8007364 | goto label_6;
| }
| label_1:
0x08007294 ldr r0, [pc, 0x1b0] | r0 = *(0x8007448);
0x08007298 mov r1, 0x200 | r1 = 0x200;
0x0800729c stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r6, r7, ip, sp, lr}");
0x080072a0 add sp, sp, 0x44 |
0x080072a4 pop {r4, r5, r6, r7, pc} |
0x08007348 ldr r2, [r3] | r2 = *(r3);
0x0800734c tst r2, 2 |
0x08007350 beq 0x80071c0 |
| }
0x08007354 stmdaeq r2, {r0, r2, r4, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r4, r6, r7, ip, sp, lr}");
0x08007358 mov r3, sp | r3 = sp;
0x0800735c and r3, r3, r7 | r3 &= r7;
0x08007360 b 0x80071c0 | goto label_0;
| label_6:
0x08007364 ldr r3, [r3] | r3 = *(r3);
0x08007368 tst r3, 2 |
| if ((r3 & 2) == 0) {
0x0800736c beq 0x8007294 | goto label_1;
| }
0x08007370 stmdaeq r2, {r0, r2, r4, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r4, r6, r7, ip, sp, lr}");
0x08007374 b 0x8007294 | goto label_1;
| label_4:
0x08007378 ldr r2, [r3] | r2 = *(r3);
0x0800737c tst r2, 2 |
| if ((r2 & 2) == 0) {
0x08007380 beq 0x8007220 | goto label_2;
| }
0x08007384 stmdaeq r2, {r0, r2, r4, r6, r7, ip, sp, lr} | __asm ("stmdaeq r2, {r0, r2, r4, r6, r7, ip, sp, lr}");
0x08007388 mov r3, sp | r3 = sp;
0x0800738c and r3, r3, r7 | r3 &= r7;
0x08007390 b 0x8007220 | goto label_2;
| label_5:
0x08007444 str r3, [r4, 0x3e8] | *((r4 + 0x3e8)) = r3;
0x08007448 b 0x8007274 | goto label_3;
| }
[*] Function fprintf used 1 times ip_vs.ko