[*] Binary protection state of ip_vs.ko
No RELRO No Canary found NX disabled REL No RPATH No RUNPATH Symbols
[*] Function mmap tear down of ip_vs.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/net/netfilter/ipvs/ip_vs.ko @ 0x800bcf4 */
| #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;
0x0800bcf4 push {r4, r5, r6, r7, r8, sb, lr} |
0x0800bcf8 mov r5, r2 | r5 = r2;
0x0800bcfc ldr r2, [r0, 0x24] | r2 = *((r0 + 0x24));
0x0800bd00 sub sp, sp, 0xb4 |
0x0800bd04 cmp r2, 0 |
0x0800bd08 ldr r7, [r2, 0x888] | r7 = *((r2 + 0x888));
| if (r2 == 0) {
0x0800bd0c beq 0x800c138 | goto label_6;
| }
0x0800bd10 ldr r0, [r2, 0x30] | r0 = *((r2 + 0x30));
0x0800bd14 mov r4, r1 | r4 = r1;
0x0800bd18 mov r1, 0xc | r1 = 0xc;
0x0800bd1c mov r6, r3 | r6 = r3;
0x0800bd20 stmdaeq r2, {r2, r3, r4, r6, r7, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r4, r6, r7, sb, ip, sp, lr}");
0x0800bd24 cmp r0, 0 |
| if (r0 == 0) {
0x0800bd28 beq 0x800c334 | goto label_7;
| }
0x0800bd2c sub r8, r4, 0x480 | r8 = r4 - 0x480;
0x0800bd30 cmp r8, 7 |
| if (r8 > 7) {
0x0800bd34 bhi 0x800c32c | goto label_8;
| }
0x0800bd38 stmdaeq r1, {r4, r7, sl, ip, sp, lr} | __asm ("stmdaeq r1, {r4, r7, sl, ip, sp, lr}");
0x0800bd3c stmdaeq r1, {r4, r7, sl, ip, sp, lr} | __asm ("stmdaeq r1, {r4, r7, sl, ip, sp, lr}");
0x0800bd40 add r2, r2, r4 | r2 += r4;
0x0800bd44 ldr r3, [r6] | r3 = *(r6);
0x0800bd48 ldrb r2, [r2, -0x2a0] | r2 = *((r2 - 0x2a0));
0x0800bd4c cmp r3, r2 |
| if (r3 < r2) {
0x0800bd50 blt 0x800c32c | goto label_8;
| }
0x0800bd54 cmp r2, 0x68 |
| if (r2 > 0x68) {
0x0800bd58 bhi 0x800c13c | goto label_9;
| }
0x0800bd5c mov r3, sp | r3 = sp;
0x0800bd60 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x0800bd64 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x0800bd68 ldr ip, [r3, 8] | ip = *((r3 + 8));
0x0800bd6c adds r1, r5, r2 | r1 = r5 + r2;
0x0800bd70 sbcslo r1, r1, ip | __asm ("sbcslo r1, r1, ip");
| if (r1 >= r5) {
0x0800bd74 movlo ip, 0 |
| }
0x0800bd78 cmp ip, 0 |
| if (ip == 0) {
0x0800bd7c bne 0x800bdac |
0x0800bd80 mrc p15, 0, sb, c3, c0, 0 | __asm ("mrc p15, 0, sb, c3, c0, 0");
0x0800bd84 bic r3, sb, 0xc | r3 = BIT_MASK (sb, 0xc);
0x0800bd88 orr r3, r3, 4 | r3 |= 4;
0x0800bd8c mcr p15, 0, r3, c3, c0, 0 | __asm ("mcr p15, 0, r3, c3, c0, 0");
0x0800bd90 isb sy | __asm ("isb sy");
0x0800bd94 mov r1, r5 | r1 = r5;
0x0800bd98 add r0, sp, 0x48 | r0 += var_48h;
0x0800bd9c stmdaeq r2, {r5, r6, r7, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r5, r6, r7, sb, ip, sp, lr}");
0x0800bda0 mov r2, r0 | r2 = r0;
0x0800bda4 mcr p15, 0, sb, c3, c0, 0 | __asm ("mcr p15, 0, sb, c3, c0, 0");
0x0800bda8 isb sy | __asm ("isb sy");
| }
0x0800bdac cmp r2, 0 |
| if (r2 != 0) {
0x0800bdb0 bne 0x800c164 | goto label_10;
| }
0x0800bdb4 movw r3, 0x487 | r3 = 0x487;
0x0800bdb8 cmp r4, r3 |
| if (r4 == r3) {
0x0800bdbc beq 0x800c0c4 | goto label_11;
| }
0x0800bdc0 stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc} | __asm ("stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}");
0x0800bdc4 stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc} | __asm ("stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}");
0x0800bdc8 stmdaeq r2, {r2, r3, r5, r7, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r5, r7, sb, ip, sp, lr}");
0x0800bdcc cmp r8, 6 |
| if (r8 > 6) {
| /* switch table (7 cases) at 0x800bdd8 */
0x0800bdd0 ldrls pc, [pc, r8, lsl 2] | offset_0 = r8 << 2;
| pc = *((pc + offset_0));
| }
0x0800bdd4 b 0x800c358 | goto label_12;
| label_5:
0x0800be94 stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc} | __asm ("stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}");
0x0800be98 stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc} | __asm ("stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}");
0x0800be9c stmdaeq r2, {r4, r5, r7, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r4, r5, r7, sb, ip, sp, lr}");
| do {
| label_4:
0x0800bea0 mov r0, r4 | r0 = r4;
0x0800bea4 add sp, sp, 0xb4 |
0x0800bea8 pop {r4, r5, r6, r7, r8, sb, pc} |
| label_11:
0x0800c0c4 add r6, r7, 0x4a0 | r6 = r7 + 0x4a0;
0x0800c0c8 mov r1, r2 | r1 = r2;
0x0800c0cc add r6, r6, 0xc | r6 += 0xc;
0x0800c0d0 mov r2, 0x30 | r2 = 0x30;
0x0800c0d4 add r0, sp, 8 | r0 += var_8h;
0x0800c0d8 stmdaeq r2, {r2, r4, r5, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r4, r5, sb, ip, sp, lr}");
0x0800c0dc mov r0, r6 | r0 = r6;
0x0800c0e0 stmdaeq r2, {r2, r3, r5, r7, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r5, r7, sb, ip, sp, lr}");
0x0800c0e4 ldr r3, [r7, 0x4a8] | r3 = *((r7 + 0x4a8));
0x0800c0e8 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x0800c0ec bne 0x800c1d0 | goto label_13;
| }
| label_3:
0x0800c0f0 ldr r3, [r7, 0x4a8] | r3 = *((r7 + 0x4a8));
0x0800c0f4 tst r3, 2 |
| if ((r3 & 2) != 0) {
0x0800c0f8 bne 0x800c1a8 | goto label_14;
| }
| label_2:
0x0800c0fc mov r3, sp | r3 = sp;
0x0800c100 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x0800c104 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x0800c108 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x0800c10c adds r1, r5, 0x30 | r1 = r5 + 0x30;
0x0800c110 sbcslo r1, r1, r3 | __asm ("sbcslo r1, r1, r3");
| if (r1 >= r5) {
0x0800c114 movlo r3, 0 | r3 = 0;
| }
0x0800c118 cmp r3, 0 |
| if (r3 == 0) {
0x0800c11c beq 0x800c16c | goto label_15;
| }
| label_0:
0x0800c120 mvn r4, 0xd | r4 = ~0xd;
| label_1:
0x0800c124 mov r0, r6 | r0 = r6;
0x0800c128 stmdaeq r2, {r4, r5, r7, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r4, r5, r7, sb, ip, sp, lr}");
0x0800c12c mov r0, r4 | r0 = r4;
0x0800c130 add sp, sp, 0xb4 |
0x0800c134 pop {r4, r5, r6, r7, r8, sb, pc} |
| label_6:
0x0800c138 udf 0x12 | __asm ("udf 0x12");
| label_9:
0x0800c13c mov r3, 0x68 | r3 = 0x68;
0x0800c140 str r2, [sp, 4] | var_4h = r2;
0x0800c144 str r3, [sp] | *(sp) = r3;
0x0800c148 stmdaeq r1, {r2, r4, r6, r8, sl, pc} | __asm ("stmdaeq r1, {r2, r4, r6, r8, sl, pc}");
0x0800c14c stmdaeq r1, {r2, r4, r6, r8, sl, pc} | __asm ("stmdaeq r1, {r2, r4, r6, r8, sl, pc}");
0x0800c150 stmdaeq r1, {r2, r3, r5, r8, sl, pc} | __asm ("stmdaeq r1, {r2, r3, r5, r8, sl, pc}");
0x0800c154 stmdaeq r1, {r2, r3, r5, r8, sl, pc} | __asm ("stmdaeq r1, {r2, r3, r5, r8, sl, pc}");
0x0800c158 mov r2, 9 | r2 = 9;
0x0800c15c mov r1, 0x93 | r1 = 0x93;
0x0800c160 stmdaeq r2, {r3, r6, r7, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r6, r7, sb, ip, sp, lr}");
| label_10:
0x0800c164 mvn r4, 0xd | r4 = ~0xd;
0x0800c168 b 0x800bea0 |
| } while (1);
| label_15:
0x0800c16c mrc p15, 0, r4, c3, c0, 0 | __asm ("mrc p15, 0, r4, c3, c0, 0");
0x0800c170 bic r3, r4, 0xc | r3 = BIT_MASK (r4, 0xc);
0x0800c174 orr r3, r3, 4 | r3 |= 4;
0x0800c178 mcr p15, 0, r3, c3, c0, 0 | __asm ("mcr p15, 0, r3, c3, c0, 0");
0x0800c17c isb sy | __asm ("isb sy");
0x0800c180 mov r2, 0x30 | r2 = 0x30;
0x0800c184 add r1, sp, 8 | r1 += var_8h;
0x0800c188 mov r0, r5 | r0 = r5;
0x0800c18c stmdaeq r2, {r3, r4, r5, r7, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r4, r5, r7, sb, ip, sp, lr}");
0x0800c190 mcr p15, 0, r4, c3, c0, 0 | __asm ("mcr p15, 0, r4, c3, c0, 0");
0x0800c194 isb sy | __asm ("isb sy");
0x0800c198 cmp r0, 0 |
| if (r0 != 0) {
0x0800c19c bne 0x800c120 | goto label_0;
| }
0x0800c1a0 mov r4, r0 | r4 = r0;
0x0800c1a4 b 0x800c124 | goto label_1;
| label_14:
0x0800c1a8 add r1, r7, 0x4f0 | r1 = r7 + 0x4f0;
0x0800c1ac add r0, sp, 0x24 | r0 += var_24h;
0x0800c1b0 add r1, r1, 0xe | r1 += 0xe;
0x0800c1b4 mov r2, 0x10 | r2 = 0x10;
0x0800c1b8 mov r3, 2 | r3 = 2;
0x0800c1bc str r3, [sp, 0x20] | var_20h = r3;
0x0800c1c0 stmdaeq r2, {r2, r3, r4, r5, r6, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r4, r5, r6, sb, ip, sp, lr}");
0x0800c1c4 ldr r3, [r7, 0x4f4] | r3 = *((r7 + 0x4f4));
0x0800c1c8 str r3, [sp, 0x34] | var_34h = r3;
0x0800c1cc b 0x800c0fc | goto label_2;
| label_13:
0x0800c1d0 add r1, r7, 0x4d0 | r1 = r7 + 0x4d0;
0x0800c1d4 add r0, sp, 0xc | r0 += var_ch;
0x0800c1d8 add r1, r1, 2 | r1 += 2;
0x0800c1dc mov r2, 0x10 | r2 = 0x10;
0x0800c1e0 mov r3, 1 | r3 = 1;
0x0800c1e4 str r3, [sp, 8] | var_8h = r3;
0x0800c1e8 stmdaeq r2, {r2, r3, r4, r5, r6, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r4, r5, r6, sb, ip, sp, lr}");
0x0800c1ec ldr r3, [r7, 0x4c8] | r3 = *((r7 + 0x4c8));
0x0800c1f0 str r3, [sp, 0x1c] | var_1ch = r3;
0x0800c1f4 b 0x800c0f0 | goto label_3;
| label_8:
0x0800c32c mvn r4, 0x15 | r4 = ~0x15;
0x0800c330 b 0x800bea0 | goto label_4;
| label_7:
0x0800c334 mvn r4, 0 | r4 = ~0;
0x0800c338 b 0x800bea0 | goto label_4;
| label_12:
0x0800c358 mvn r4, 0x15 | r4 = ~0x15;
0x0800c35c b 0x800be94 | goto label_5;
| }
; 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/net/netfilter/ipvs/ip_vs.ko @ 0x800b724 */
| #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_0h_2;
| 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;
0x0800b724 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0800b728 mov r4, r1 | r4 = r1;
0x0800b72c mov r1, 0xc | r1 = 0xc;
0x0800b730 ldr r0, [r0, 0x24] | r0 = *(arg_e8hx24);
0x0800b734 sub sp, sp, 0xc4 |
0x0800b738 add ip, sp, 0x10 |
0x0800b73c ldr r7, [r0, 0x888] | r7 = *((r0 + 0x888));
0x0800b740 ldr r0, [r0, 0x30] | r0 = *((r0 + 0x30));
0x0800b744 ldr r8, [sp, 0xe8] | r8 = *(arg_e8h);
0x0800b748 stm ip, {r2, r3} | *(ip) = r2;
| *((ip + 4)) = r3;
0x0800b74c stmdaeq r2, {r2, r3, r4, r6, r7, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r4, r6, r7, sb, ip, sp, lr}");
0x0800b750 cmp r0, 0 |
| if (r0 == 0) {
0x0800b754 beq 0x800bcc8 | goto label_8;
| }
0x0800b758 sub r6, r4, 0x480 | r6 = r4 - 0x480;
0x0800b75c cmp r6, 0xf |
| if (r6 > 0xf) {
0x0800b760 bhi 0x800bcc0 | goto label_9;
| }
0x0800b764 stmdaeq r1, {r4, r7, sl, ip, sp, lr} | __asm ("stmdaeq r1, {r4, r7, sl, ip, sp, lr}");
0x0800b768 stmdaeq r1, {r4, r7, sl, ip, sp, lr} | __asm ("stmdaeq r1, {r4, r7, sl, ip, sp, lr}");
0x0800b76c add r3, r3, r4 | r3 += r4;
0x0800b770 ldrb r3, [r3, -0x2b0] | r3 = *((r3 - 0x2b0));
0x0800b774 cmp r3, r8 |
| if (r3 != r8) {
0x0800b778 bne 0x800bcc0 | goto label_9;
| }
0x0800b77c ldrb r2, [sp, 0x14] | r2 = var_14h;
0x0800b780 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0800b784 tst r2, 1 |
| if ((r2 & 1) != 0) {
0x0800b788 bne 0x800b850 | goto label_10;
| }
0x0800b78c cmp r3, 0x44 |
| if (r3 > 0x44) {
0x0800b790 bhi 0x800bc80 | goto label_11;
| }
0x0800b794 mov r3, sp | r3 = sp;
0x0800b798 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x0800b79c bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x0800b7a0 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x0800b7a4 adds r0, r1, r8 | r0 = r1 + r8;
0x0800b7a8 sbcslo r0, r0, r3 | __asm ("sbcslo r0, r0, r3");
| if (r0 >= r1) {
0x0800b7ac movlo r3, 0 | r3 = 0;
| }
0x0800b7b0 cmp r3, 0 |
| if (r3 != 0) {
0x0800b7b4 bne 0x800bc78 | goto label_12;
| }
0x0800b7b8 mrc p15, 0, sb, c3, c0, 0 | __asm ("mrc p15, 0, sb, c3, c0, 0");
0x0800b7bc bic r3, sb, 0xc | r3 = BIT_MASK (sb, 0xc);
0x0800b7c0 orr r3, r3, 4 | r3 |= 4;
0x0800b7c4 mcr p15, 0, r3, c3, c0, 0 | __asm ("mcr p15, 0, r3, c3, c0, 0");
0x0800b7c8 isb sy | __asm ("isb sy");
0x0800b7cc mov r2, r8 | r2 = r8;
0x0800b7d0 add r0, sp, 0x7c | r0 += var_7ch;
0x0800b7d4 stmdaeq r2, {r5, r6, r7, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r5, r6, r7, sb, ip, sp, lr}");
0x0800b7d8 mcr p15, 0, sb, c3, c0, 0 | __asm ("mcr p15, 0, sb, c3, c0, 0");
0x0800b7dc isb sy | __asm ("isb sy");
| label_6:
0x0800b7e0 cmp r0, 0 |
| if (r0 != 0) {
0x0800b7e4 bne 0x800bca4 | goto label_13;
| }
0x0800b7e8 sub r3, r6, 0xb | r3 = r6 - 0xb;
0x0800b7ec cmp r3, 1 |
| if (r3 > 1) {
0x0800b7f0 bhi 0x800b868 | goto label_14;
| }
| do {
0x0800b7f4 movw r3, 0x48b | r3 = 0x48b;
0x0800b7f8 cmp r4, r3 |
| if (r4 != r3) {
0x0800b7fc bne 0x800b8b0 | goto label_15;
| }
0x0800b800 mov r2, 0x2c | r2 = 0x2c;
0x0800b804 mov r1, 0 | r1 = 0;
0x0800b808 add r0, sp, 0x4c | r0 += var_4ch;
0x0800b80c stmdaeq r2, {r2, r4, r5, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r4, r5, sb, ip, sp, lr}");
0x0800b810 mov r2, 0x10 | r2 = 0x10;
0x0800b814 add r1, sp, 0x80 | r1 += var_80h;
0x0800b818 add r0, sp, 0x66 | r0 += var_66h;
0x0800b81c stmdaeq r2, {r2, r5, r6, r7, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r5, r6, r7, sb, ip, sp, lr}");
0x0800b820 cmp r0, 0 |
| if (r0 <= 0) {
0x0800b824 ble 0x800bcc0 | goto label_9;
| }
0x0800b828 ldr r3, [sp, 0x90] | r3 = var_90h;
0x0800b82c add r1, sp, 0x4c | r1 += var_4ch;
0x0800b830 ldr r2, [sp, 0x7c] | r2 = var_7ch;
0x0800b834 mov r0, r7 | r0 = r7;
0x0800b838 str r3, [sp, 0x5c] | var_5ch = r3;
0x0800b83c stmdaeq r1, {r2, r5, r6, sb, fp, ip} | __asm ("stmdaeq r1, {r2, r5, r6, sb, fp, ip}");
0x0800b840 mov r5, r0 | r5 = r0;
| label_7:
0x0800b844 mov r0, r5 | r0 = r5;
0x0800b848 add sp, sp, 0xc4 |
0x0800b84c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_10:
0x0800b850 mov r2, r8 | r2 = r8;
0x0800b854 add r0, sp, 0x7c | r0 += var_7ch;
0x0800b858 stmdaeq r2, {r2, r4, r5, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r4, r5, r7, r8, ip, sp, lr}");
0x0800b85c sub r3, r6, 0xb | r3 = r6 - 0xb;
0x0800b860 cmp r3, 1 |
0x0800b864 bls 0x800b7f4 |
| } while (r3 < 1);
| label_14:
0x0800b868 stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc} | __asm ("stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}");
0x0800b86c stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc} | __asm ("stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}");
0x0800b870 stmdaeq r2, {r2, r3, r5, r7, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r5, r7, sb, ip, sp, lr}");
0x0800b874 movw r3, 0x485 | r3 = 0x485;
0x0800b878 cmp r4, r3 |
| if (r4 == r3) {
0x0800b87c beq 0x800bc64 | goto label_16;
| }
0x0800b880 movw r3, 0x48a | r3 = 0x48a;
0x0800b884 cmp r4, r3 |
| if (r4 == r3) {
0x0800b888 beq 0x800bcac | goto label_17;
| }
0x0800b88c cmp r8, 0 |
0x0800b890 bne 0x800b8cc |
| while (r0 == 0x10) {
0x0800b894 mvn r5, 0x15 | r5 = ~0x15;
| label_1:
0x0800b898 stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc} | __asm ("stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}");
0x0800b89c stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc} | __asm ("stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}");
0x0800b8a0 stmdaeq r2, {r4, r5, r7, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r4, r5, r7, sb, ip, sp, lr}");
0x0800b8a4 mov r0, r5 | r0 = r5;
0x0800b8a8 add sp, sp, 0xc4 |
0x0800b8ac pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_15:
0x0800b8b0 ldr r1, [sp, 0x7c] | r1 = var_7ch;
0x0800b8b4 mov r0, r7 | r0 = r7;
0x0800b8b8 stmdaeq r1, {r2, r5, r6, sl, sp} | __asm ("stmdaeq r1, {r2, r5, r6, sl, sp}");
0x0800b8bc mov r5, r0 | r5 = r0;
0x0800b8c0 mov r0, r5 | r0 = r5;
0x0800b8c4 add sp, sp, 0xc4 |
0x0800b8c8 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0800b8cc ldr r2, [sp, 0xa0] | r2 = var_a0h;
0x0800b8d0 mov r1, 0 | r1 = 0;
0x0800b8d4 str r2, [sp, 0x74] | var_74h = r2;
0x0800b8d8 add r0, sp, 0x24 | r0 += var_24h;
0x0800b8dc ldr r2, [sp, 0xa4] | r2 = var_a4h;
0x0800b8e0 mov sl, 2 | sl = 2;
0x0800b8e4 str r2, [sp, 0x78] | var_78h = r2;
0x0800b8e8 ldr r2, [sp, 0x9c] | r2 = var_9ch;
0x0800b8ec ldr r3, [sp, 0x88] | r3 = var_88h;
0x0800b8f0 ldrh r8, [sp, 0x7c] | r8 = var_7ch;
0x0800b8f4 ldr sb, [sp, 0x80] | sb = var_80h;
0x0800b8f8 ldrh fp, [sp, 0x84] | fp = var_84h;
0x0800b8fc str r2, [sp, 0x70] | var_70h = r2;
0x0800b900 mov r2, 0x28 | r2 = 0x28;
0x0800b904 str r1, [sp, 0x60] | var_60h = r1;
0x0800b908 str r3, [sp, 0x64] | var_64h = r3;
0x0800b90c str r3, [sp, 0xc] | var_ch = r3;
0x0800b910 add r3, sp, 0x8c | r3 += var_8ch;
0x0800b914 str r1, [sp, 0x54] | var_54h = r1;
0x0800b918 str r3, [sp, 0x68] | var_68h = r3;
0x0800b91c str r1, [sp, 0x58] | var_58h = r1;
0x0800b920 str r1, [sp, 0x5c] | var_5ch = r1;
0x0800b924 str r1, [sp, 0x6c] | var_6ch = r1;
0x0800b928 strh sl, [sp, 0x4c] | var_4ch = sl;
0x0800b92c strh r8, [sp, 0x4e] | var_4eh = r8;
0x0800b930 str sb, [sp, 0x50] | var_50h = sb;
0x0800b934 strh fp, [sp, 0x60] | var_60h = fp;
0x0800b938 stmdaeq r2, {r2, r4, r5, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r4, r5, sb, ip, sp, lr}");
0x0800b93c ldr r2, [sp, 0xa8] | r2 = var_a8h;
0x0800b940 str r2, [sp, 0x20] | var_20h = r2;
0x0800b944 ldrh r2, [sp, 0xac] | r2 = var_ach;
0x0800b948 strh r2, [sp, 0x30] | var_30h = r2;
0x0800b94c ldr r2, [sp, 0xb0] | r2 = var_b0h;
0x0800b950 str r2, [sp, 0x34] | var_34h = r2;
0x0800b954 ldr r2, [sp, 0xb4] | r2 = var_b4h;
0x0800b958 str r2, [sp, 0x38] | var_38h = r2;
0x0800b95c ldr r2, [sp, 0xbc] | r2 = var_bch;
0x0800b960 str r2, [sp, 0x40] | var_40h = r2;
0x0800b964 ldr r2, [sp, 0xb8] | r2 = var_b8h;
0x0800b968 str r2, [sp, 0x3c] | var_3ch = r2;
0x0800b96c movw r2, 0x48f | r2 = 0x48f;
0x0800b970 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0800b974 cmp r4, r2 |
0x0800b978 strh sl, [sp, 0x44] | var_44h = sl;
| if (r4 == r2) {
0x0800b97c beq 0x800bb74 | goto label_18;
| }
0x0800b980 sub r2, r6, 2 | r2 = r6 - 2;
0x0800b984 cmp r2, 1 |
| if (r2 > 1) {
0x0800b988 bhi 0x800b9a0 | goto label_5;
| }
0x0800b98c add r0, sp, 0x8c | r0 += var_8ch;
0x0800b990 mov r1, 0x10 | r1 = 0x10;
0x0800b994 stmdaeq r2, {r3, r5, r6, r7, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r5, r6, r7, sb, ip, sp, lr}");
0x0800b998 cmp r0, 0x10 |
0x0800b99c beq 0x800b894 |
| }
| label_5:
0x0800b9a0 cmp r8, 6 |
0x0800b9a4 cmpne r8, 0x11 | __asm ("cmpne r8, 0x11");
| if (r8 == 6) {
0x0800b9a8 movne r3, 1 | r3 = 1;
| }
| if (r8 != 6) {
0x0800b9ac moveq r3, 0 | r3 = 0;
| }
0x0800b9b0 cmp r8, 0x84 |
| if (r8 != 0x84) {
0x0800b9b4 moveq r3, 0 | r3 = 0;
| }
| if (r8 == 0x84) {
0x0800b9b8 andne r3, r3, 1 | r3 &= 1;
| }
0x0800b9bc cmp r3, 0 |
| if (r3 != 0) {
0x0800b9c0 bne 0x800bcd0 | goto label_19;
| }
0x0800b9c4 stmdaeq r2, {r2, r3, r4, r5, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r4, r5, r7, r8, ip, sp, lr}");
0x0800b9c8 ldr r1, [sp, 0x64] | r1 = var_64h;
0x0800b9cc lsr r2, r7, 8 | r2 = r7 >> 8;
0x0800b9d0 cmp r1, 0 |
| if (r1 != 0) {
0x0800b9d4 bne 0x800bb08 | goto label_20;
| }
0x0800b9d8 ldrh r1, [sp, 0x4c] | r1 = var_4ch;
0x0800b9dc ldr r0, [sp, 0x50] | r0 = var_50h;
0x0800b9e0 cmp r1, 0xa |
0x0800b9e4 ldrh ip, [sp, 0x60] | ip = var_60h;
0x0800b9e8 ldrh lr, [sp, 0x4e] | lr = var_4eh;
| if (r1 == 0xa) {
0x0800b9ec movne r8, r0 | r8 = r0;
| }
0x0800b9f0 rev16 sb, ip | __asm ("rev16 sb, ip");
| if (r1 != 0xa) {
0x0800b9f4 ldreq r8, [sp, 0x54] | r8 = var_54h;
| }
| if (r1 != 0xa) {
0x0800b9f8 ldreq r3, [sp, 0x58] | r3 = var_58h;
| }
0x0800b9fc uxth sb, sb | sb = (int16_t) sb;
| if (r1 != 0xa) {
0x0800ba00 eoreq r8, r8, r0 | r8 ^= r0;
| }
| if (r1 != 0xa) {
0x0800ba04 eoreq r8, r8, r3 | r8 ^= r3;
| }
| if (r1 != 0xa) {
0x0800ba08 ldreq r3, [sp, 0x5c] | r3 = var_5ch;
| }
| if (r1 != 0xa) {
0x0800ba0c eoreq r8, r8, r3 | r8 ^= r3;
| }
0x0800ba10 uxtb r3, ip | r3 = (int8_t) ip;
0x0800ba14 eor r3, r3, lr | r3 ^= lr;
0x0800ba18 rev r8, r8 | r8 = SWAP32 (r8);
0x0800ba1c eor r3, r3, r2 | r3 ^= r2;
0x0800ba20 stmdaeq r1, {r2, r3, r5, fp, sp, pc} | __asm ("stmdaeq r1, {r2, r3, r5, fp, sp, pc}");
0x0800ba24 stmdaeq r1, {r2, r3, r5, fp, sp, pc} | __asm ("stmdaeq r1, {r2, r3, r5, fp, sp, pc}");
0x0800ba28 eor r3, r3, sb | r3 ^= sb;
0x0800ba2c eor r3, r3, r8 | r3 ^= r8;
0x0800ba30 uxtb r3, r3 | r3 = (int8_t) r3;
0x0800ba34 ldr r3, [r2, r3, lsl 2] | offset_0 = r3 << 2;
| r3 = *((r2 + offset_0));
0x0800ba38 cmp r3, 0 |
| if (r3 == 0) {
0x0800ba3c beq 0x800baa0 | goto label_3;
| }
0x0800ba40 ldr sl, [sp, 0x54] | sl = var_54h;
0x0800ba44 ldr sb, [sp, 0x58] | sb = var_58h;
0x0800ba48 ldr r8, [sp, 0x5c] | r8 = var_5ch;
0x0800ba4c b 0x800ba5c |
| while (r1 != r2) {
| label_0:
0x0800ba50 ldr r3, [r3] | r3 = *(r3);
0x0800ba54 cmp r3, 0 |
| if (r3 == 0) {
0x0800ba58 beq 0x800baa0 | goto label_3;
| }
0x0800ba5c ldrh r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x0800ba60 cmp r1, r2 |
0x0800ba64 bne 0x800ba50 |
| }
0x0800ba68 ldr r2, [r3, 0x18] | r2 = *((r3 + 0x18));
0x0800ba6c cmp r1, 0xa |
| if (r1 == 0xa) {
0x0800ba70 beq 0x800bad8 | goto label_21;
| }
0x0800ba74 cmp r2, r0 |
| if (r2 != r0) {
0x0800ba78 bne 0x800ba50 | goto label_0;
| }
| label_2:
0x0800ba7c ldrh r2, [r3, 0x28] | r2 = *((r3 + 0x28));
0x0800ba80 cmp r2, ip |
| if (r2 != ip) {
0x0800ba84 bne 0x800ba50 | goto label_0;
| }
0x0800ba88 ldrh r2, [r3, 0x16] | r2 = *((r3 + 0x16));
0x0800ba8c cmp r2, lr |
| if (r2 != lr) {
0x0800ba90 bne 0x800ba50 | goto label_0;
| }
0x0800ba94 ldr r2, [r3, 0x3c] | r2 = *((r3 + 0x3c));
0x0800ba98 cmp r7, r2 |
| if (r7 != r2) {
0x0800ba9c bne 0x800ba50 | goto label_0;
| }
| label_3:
0x0800baa0 str r3, [sp, 0x1c] | var_1ch = r3;
0x0800baa4 stmdaeq r2, {r2, r3, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r7, r8, ip, sp, lr}");
0x0800baa8 movw r3, 0x482 | r3 = 0x482;
0x0800baac cmp r4, r3 |
| if (r4 == r3) {
0x0800bab0 beq 0x800bc40 | goto label_22;
| }
0x0800bab4 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0800bab8 cmp r0, 0 |
| if (r0 != 0) {
0x0800babc beq 0x800bad0 |
0x0800bac0 ldrh r2, [r0, 0x16] | r2 = *((r0 + 0x16));
0x0800bac4 ldrh r3, [sp, 0x4e] | r3 = var_4eh;
0x0800bac8 cmp r2, r3 |
| if (r2 == r3) {
0x0800bacc beq 0x800bb94 | goto label_23;
| }
| }
0x0800bad0 mvn r5, 2 | r5 = ~2;
0x0800bad4 b 0x800b898 | goto label_1;
| label_21:
0x0800bad8 ldr fp, [r3, 0x1c] | fp = *((r3 + 0x1c));
0x0800badc eor r2, r2, r0 | r2 ^= r0;
0x0800bae0 eor fp, fp, sl |
0x0800bae4 orr r2, fp, r2 | r2 = fp | r2;
0x0800bae8 ldr fp, [r3, 0x20] | fp = *((r3 + 0x20));
0x0800baec eor fp, fp, sb |
0x0800baf0 orr r2, r2, fp | r2 |= fp;
0x0800baf4 ldr fp, [r3, 0x24] | fp = *((r3 + 0x24));
0x0800baf8 eor fp, fp, r8 |
0x0800bafc orrs fp, r2, fp |
| if (fp == r2) {
0x0800bb00 beq 0x800ba7c | goto label_2;
| }
0x0800bb04 b 0x800ba50 | goto label_0;
| label_20:
0x0800bb08 eor r2, r2, r1 | r2 ^= r1;
0x0800bb0c stmdaeq r1, {r2, r3, r5, fp, sp, pc} | __asm ("stmdaeq r1, {r2, r3, r5, fp, sp, pc}");
0x0800bb10 stmdaeq r1, {r2, r3, r5, fp, sp, pc} | __asm ("stmdaeq r1, {r2, r3, r5, fp, sp, pc}");
0x0800bb14 uxtb r2, r2 | r2 = (int8_t) r2;
0x0800bb18 add r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x0800bb1c ldr r3, [r3, 0x400] | r3 = *((r3 + 0x400));
0x0800bb20 cmp r3, 0 |
| if (r3 == 0) {
0x0800bb24 beq 0x800baa0 | goto label_3;
| }
0x0800bb28 ldrh r0, [sp, 0x4c] | r0 = var_4ch;
0x0800bb2c sub r3, r3, 8 | r3 -= 8;
0x0800bb30 b 0x800bb44 | goto label_24;
| label_4:
0x0800bb34 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0800bb38 cmp r3, 0 |
| if (r3 == 0) {
0x0800bb3c beq 0x800baa0 | goto label_3;
| }
0x0800bb40 sub r3, r3, 8 | r3 -= 8;
| label_24:
0x0800bb44 cmp r3, 0 |
| if (r3 == 0) {
0x0800bb48 beq 0x800baa0 | goto label_3;
| }
0x0800bb4c ldr r2, [r3, 0x2c] | r2 = *((r3 + 0x2c));
0x0800bb50 cmp r1, r2 |
| if (r1 != r2) {
0x0800bb54 bne 0x800bb34 | goto label_4;
| }
0x0800bb58 ldrh r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x0800bb5c cmp r2, r0 |
| if (r2 != r0) {
0x0800bb60 bne 0x800bb34 | goto label_4;
| }
0x0800bb64 ldr r2, [r3, 0x3c] | r2 = *((r3 + 0x3c));
0x0800bb68 cmp r7, r2 |
| if (r7 != r2) {
0x0800bb6c bne 0x800bb34 | goto label_4;
| }
0x0800bb70 b 0x800baa0 | goto label_3;
| label_18:
0x0800bb74 orr sb, sb, r3 | sb |= r3;
0x0800bb78 cmp fp, 0 |
0x0800bb7c cmpeq sb, 0 | __asm ("cmpeq sb, 0");
| if (fp != 0) {
0x0800bb80 bne 0x800b9a0 | goto label_5;
| }
0x0800bb84 mov r0, r7 | r0 = r7;
0x0800bb88 bl 0x80083e8 | r0 = ip_vs_zero_all ();
0x0800bb8c mov r5, r0 | r5 = r0;
0x0800bb90 b 0x800b898 | goto label_1;
| label_23:
0x0800bb94 sub r6, r6, 2 | r6 -= 2;
0x0800bb98 cmp r6, 0xd |
| if (r6 > 0xd) {
| /* switch table (14 cases) at 0x800bba4 */
0x0800bb9c ldrls pc, [pc, r6, lsl 2] | offset_1 = r6 << 2;
| pc = *((pc + offset_1));
| }
0x0800bba0 b 0x800b898 | goto label_1;
| do {
0x0800bbdc mvn r5, 0x10 | r5 = ~0x10;
0x0800bbe0 b 0x800b898 | goto label_1;
| label_22:
0x0800bc40 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0800bc44 cmp r3, 0 |
0x0800bc48 bne 0x800bbdc |
| } while (r3 != 0);
0x0800bc4c add r2, sp, 0x1c | r2 += var_1ch;
0x0800bc50 add r1, sp, 0x4c | r1 += var_4ch;
0x0800bc54 mov r0, r7 | r0 = r7;
0x0800bc58 bl 0x8007b08 | r0 = ip_vs_add_service ();
0x0800bc5c mov r5, r0 | r5 = r0;
0x0800bc60 b 0x800b898 | goto label_1;
| label_16:
0x0800bc64 mov r0, r7 | r0 = r7;
0x0800bc68 mov r1, 0 | r1 = 0;
0x0800bc6c bl 0x80097d8 | r0 = ip_vs_flush ();
0x0800bc70 mov r5, r0 | r5 = r0;
0x0800bc74 b 0x800b898 | goto label_1;
| label_12:
0x0800bc78 mov r0, r8 | r0 = r8;
0x0800bc7c b 0x800b7e0 | goto label_6;
| label_11:
0x0800bc80 mov r2, 0x44 | r2 = 0x44;
0x0800bc84 stmdaeq r1, {r2, r4, r6, r8, sl, pc} | __asm ("stmdaeq r1, {r2, r4, r6, r8, sl, pc}");
0x0800bc88 stmdaeq r1, {r2, r4, r6, r8, sl, pc} | __asm ("stmdaeq r1, {r2, r4, r6, r8, sl, pc}");
0x0800bc8c strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x0800bc90 mov r1, 0x93 | r1 = 0x93;
0x0800bc94 stmdaeq r1, {r2, r3, r5, r8, sl, pc} | __asm ("stmdaeq r1, {r2, r3, r5, r8, sl, pc}");
0x0800bc98 stmdaeq r1, {r2, r3, r5, r8, sl, pc} | __asm ("stmdaeq r1, {r2, r3, r5, r8, sl, pc}");
0x0800bc9c mov r2, 9 | r2 = 9;
0x0800bca0 stmdaeq r2, {r3, r6, r7, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r6, r7, sb, ip, sp, lr}");
| label_13:
0x0800bca4 mvn r5, 0xd | r5 = ~0xd;
0x0800bca8 b 0x800b844 | goto label_7;
| label_17:
0x0800bcac add r1, sp, 0x7c | r1 += var_7ch;
0x0800bcb0 mov r0, r7 | r0 = r7;
0x0800bcb4 bl 0x800779c | r0 = ip_vs_set_timeout ();
0x0800bcb8 mov r5, r0 | r5 = r0;
0x0800bcbc b 0x800b898 | goto label_1;
| label_9:
0x0800bcc0 mvn r5, 0x15 | r5 = ~0x15;
0x0800bcc4 b 0x800b844 | goto label_7;
| label_8:
0x0800bcc8 mvn r5, 0 | r5 = ~0;
0x0800bccc b 0x800b844 | goto label_7;
| label_19:
0x0800bcd0 rev16 r3, fp | __asm ("rev16 r3, fp");
0x0800bcd4 add r2, sp, 0x50 | r2 += var_50h;
0x0800bcd8 mov r1, r8 | r1 = r8;
0x0800bcdc stmdaeq r1, {r4, r5, r6, r8, sl, pc} | __asm ("stmdaeq r1, {r4, r5, r6, r8, sl, pc}");
0x0800bce0 stmdaeq r1, {r4, r5, r6, r8, sl, pc} | __asm ("stmdaeq r1, {r4, r5, r6, r8, sl, pc}");
0x0800bce4 uxth r3, r3 | r3 = (int16_t) r3;
0x0800bce8 mvn r5, 0xd | r5 = ~0xd;
0x0800bcec stmdaeq r2, {r2, r3, r4, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r4, r6, r7, r8, ip, sp, lr}");
0x0800bcf0 b 0x800b898 | 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/net/netfilter/ipvs/ip_vs.ko @ 0x8001f1c */
| #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_40h, int32_t arg_44h, int32_t arg_48h, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| r0 = arg1;
| r1 = arg2;
0x08001f1c push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x08001f20 stmdaeq r1, {r3, r5, r7, r8, sl, fp, ip, pc} | __asm ("stmdaeq r1, {r3, r5, r7, r8, sl, fp, ip, pc}");
0x08001f24 stmdaeq r1, {r3, r5, r7, r8, sl, fp, ip, pc} | __asm ("stmdaeq r1, {r3, r5, r7, r8, sl, fp, ip, pc}");
0x08001f28 sub sp, sp, 0x1c |
0x08001f2c ldr r8, [r0] | r8 = *(r0);
0x08001f30 mov r5, r0 | r5 = r0;
0x08001f34 mov r6, r1 | r6 = r1;
0x08001f38 ldrh r1, [r0, 0x10] | r1 = *(var_0hx10);
0x08001f3c mov r0, r8 | r0 = r8;
0x08001f40 mov sb, r2 | sb = r2;
0x08001f44 str lr, [sp, 0x14] | var_14h = lr;
0x08001f48 str r3, [sp, 0xc] | var_ch = r3;
0x08001f4c str r4, [sp, 0x10] | var_10h = r4;
0x08001f50 ldr r7, [sp, 0x44] | r7 = *(arg_44h);
0x08001f54 stmdaeq r1, {r3, r4, r5, sl, fp, sp} | __asm ("stmdaeq r1, {r3, r4, r5, sl, fp, sp}");
0x08001f58 mov r1, 0xa20 | r1 = 0xa20;
0x08001f5c str r0, [sp, 8] | var_8h = r0;
0x08001f60 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x08001f64 stmdaeq r2, {r2, r5, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r5, r6, r7, r8, ip, sp, lr}");
0x08001f68 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x08001f6c beq 0x80024a4 | goto label_11;
| }
0x08001f70 mov r0, r4 | r0 = r4;
0x08001f74 mov r3, 0 | r3 = 0;
0x08001f78 stmdaeq r0, {r3, r5, r6, r7, r8, fp} | __asm ("stmdaeq r0, {r3, r5, r6, r7, r8, fp}");
0x08001f7c stmdaeq r0, {r3, r5, r6, r7, r8, fp} | __asm ("stmdaeq r0, {r3, r5, r6, r7, r8, fp}");
0x08001f80 mov r2, r3 | r2 = r3;
0x08001f84 mov sl, 0 | sl = 0;
0x08001f88 mov fp, 0 |
0x08001f8c strd sl, fp, [r0], 0x50 | __asm ("strd sl, fp, [r0], 0x50");
0x08001f90 str r3, [sp] | *(sp) = r3;
0x08001f94 stmdaeq r2, {r3, r5, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r5, r6, r7, r8, ip, sp, lr}");
0x08001f98 ldrh r2, [r5, 0x12] | r2 = *((r5 + 0x12));
0x08001f9c ldrh r1, [r5, 0x10] | r1 = *((r5 + 0x10));
0x08001fa0 mov r3, 0 | r3 = 0;
0x08001fa4 cmp r2, 0xa |
0x08001fa8 strh r2, [r4, 0xe] | *((r4 + 0xe)) = r2;
0x08001fac str r8, [r4, 0x48] | *((r4 + 0x48)) = r8;
0x08001fb0 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x08001fb4 strh r6, [r4, 0x46] | *((r4 + 0x46)) = r6;
0x08001fb8 strh r1, [r4, 0x44] | *((r4 + 0x44)) = r1;
| if (r2 == 0xa) {
0x08001fbc beq 0x800239c | goto label_12;
| }
0x08001fc0 ldr r2, [r2] | r2 = *(r2);
0x08001fc4 ldr ip, [r5, 8] | ip = *((r5 + 8));
0x08001fc8 strd r2, r3, [r4, 0x10] | __asm ("strd r2, r3, [r4, 0x10]");
0x08001fcc str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x08001fd0 str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x08001fd4 ldrh r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x08001fd8 strh r3, [r4, 8] | *((r4 + 8)) = r3;
| label_3:
0x08001fdc ldr r3, [ip] | r3 = *(ip);
0x08001fe0 str r3, [r4, 0x20] | *((r4 + 0x20)) = r3;
0x08001fe4 mov r3, 0 | r3 = 0;
0x08001fe8 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x08001fec str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
0x08001ff0 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
| label_4:
0x08001ff4 uxth r6, r6 | r6 = (int16_t) r6;
0x08001ff8 ldrh r3, [r5, 0xe] | r3 = *((r5 + 0xe));
0x08001ffc cmp r6, 0xa |
0x08002000 strh r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
| if (r6 != 0xa) {
0x08002004 addeq ip, r4, 0x30 |
| }
| if (r6 == 0xa) {
0x08002008 ldrne r3, [sb] | r3 = *(sb);
| }
| if (r6 != 0xa) {
0x0800200c ldmeq sb, {r0, r1, r2, r3} | r0 = *(sb);
| r1 = *((sb + 4));
| r2 = *((sb + 8));
| r3 = *((sb + 12));
| }
| if (r6 != 0xa) {
0x08002010 stmeq ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
| }
| if (r6 == 0xa) {
0x08002014 strne r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
| }
| if (r6 == 0xa) {
0x08002018 movne r3, 0 | r3 = 0;
| }
| if (r6 == 0xa) {
0x0800201c strne r3, [r4, 0x34] | *((r4 + 0x34)) = r3;
| }
| if (r6 == 0xa) {
0x08002020 strne r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
| }
| if (r6 == 0xa) {
0x08002024 strne r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
| }
0x08002028 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0800202c strh r3, [r4, 0xa] | *((r4 + 0xa)) = r3;
0x08002030 ldr r3, [sp, 0x40] | r3 = *(arg_40h);
0x08002034 str r3, [r4, 0x40] | *((r4 + 0x40)) = r3;
0x08002038 tst r3, 0x1000 |
0x0800203c ldr r3, [sp, 0x48] | r3 = *(arg_48h);
0x08002040 str r3, [r4, 0x6c] | *((r4 + 0x6c)) = r3;
| if ((r3 & 0x1000) != 0) {
0x08002044 beq 0x800207c |
0x08002048 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x0800204c cmp r3, 0 |
| if (r3 != 0) {
0x08002050 beq 0x800207c |
0x08002054 ldr r0, [r3, 0x10] | r0 = *((r3 + 0x10));
0x08002058 cmp r0, 0 |
| if (r0 != 0) {
0x0800205c beq 0x8002068 |
0x08002060 stmdaeq r2, {r2, r3, r5, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r5, r6, r7, r8, ip, sp, lr}");
0x08002064 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
| }
0x08002068 str r3, [r4, 0xa8] | *((r4 + 0xa8)) = r3;
0x0800206c ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x08002070 str r3, [r4, 0xac] | *((r4 + 0xac)) = r3;
0x08002074 ldrb r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x08002078 b 0x800208c |
| }
| } else {
0x0800207c mov r0, 0 | r0 = 0;
0x08002080 mov r1, 0 | r1 = 0;
0x08002084 mov r3, 0 | r3 = 0;
0x08002088 strd r0, r1, [r4, 0xa8] | __asm ("strd r0, r1, [r4, 0xa8]");
| }
0x0800208c strb r3, [r4, 0xb0] | *((r4 + 0xb0)) = r3;
0x08002090 add r3, r8, 0x250 | r3 = r8 + 0x250;
0x08002094 mov r2, 0 | r2 = 0;
0x08002098 mov r1, 1 | r1 = 1;
0x0800209c mov r0, 0 | r0 = 0;
0x080020a0 pld [r3] | __asm ("pld [r3]");
0x080020a4 str r1, [r4, 0x4c] | *((r4 + 0x4c)) = r1;
0x080020a8 mov r1, 0 | r1 = 0;
0x080020ac str r2, [r4, 0x78] | *((r4 + 0x78)) = r2;
0x080020b0 str r2, [r4, 0x74] | *((r4 + 0x74)) = r2;
0x080020b4 str r2, [r4, 0x84] | *((r4 + 0x84)) = r2;
0x080020b8 str r2, [r4, 0x94] | *((r4 + 0x94)) = r2;
0x080020bc str r2, [r4, 0xa0] | *((r4 + 0xa0)) = r2;
0x080020c0 str r2, [r4, 0x80] | *((r4 + 0x80)) = r2;
0x080020c4 strd r0, r1, [r4, 0x88] | __asm ("strd r0, r1, [r4, 0x88]");
| do {
0x080020c8 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x080020cc add r2, r2, 1 | r2++;
0x080020d0 strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x080020d4 teq r1, 0 | __asm ("teq r1, 0");
0x080020d8 bne 0x80020c8 |
| } while (r0 != 0);
0x080020dc ldr r3, [sp, 0x40] | r3 = *(arg_40h);
0x080020e0 tst r3, 0x800 |
| if ((r3 & 0x800) != 0) {
0x080020e4 bne 0x8002260 | goto label_13;
| }
| label_0:
0x080020e8 mov r3, 0 | r3 = 0;
0x080020ec cmp r7, 0 |
0x080020f0 str r3, [r4, 0x7c] | *((r4 + 0x7c)) = r3;
| if (r7 == 0) {
0x080020f4 beq 0x80021b0 | goto label_14;
| }
0x080020f8 add r0, r7, 0x3c | r0 = r7 + 0x3c;
0x080020fc pld [r0] | __asm ("pld [r0]");
| do {
0x08002100 ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x08002104 add r2, r3, 1 | r2 = r3 + 1;
0x08002108 strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x0800210c teq r1, 0 | __asm ("teq r1, 0");
0x08002110 bne 0x8002100 |
| } while (r7 != 0);
0x08002114 cmp r3, 0 |
| if (r3 == 0) {
0x08002118 beq 0x800248c | goto label_15;
| }
0x0800211c add r2, r3, 1 | r2 = r3 + 1;
0x08002120 orrs r2, r2, r3 | r2 |= r3;
| if (r2 < r2) {
0x08002124 bmi 0x8002454 | goto label_16;
| }
| label_6:
0x08002128 ldrh r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x0800212c cmp r3, 0x11 |
0x08002130 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x08002134 ldr r2, [r4, 0x40] | r2 = *((r4 + 0x40));
0x08002138 bicne r3, r3, 0x2000 | __asm ("bicne r3, r3, 0x2000");
0x0800213c tst r2, 0x20 |
| if ((r2 & 0x20) != 0) {
0x08002140 beq 0x8002150 |
0x08002144 tst r2, 0x1000 |
0x08002148 bic r2, r2, 0x87 | r2 = BIT_MASK (r2, 0x87);
0x0800214c biceq r3, r3, 0x100 | __asm ("biceq r3, r3, 0x100");
| }
0x08002150 orr r3, r3, r2 | r3 |= r2;
0x08002154 str r7, [r4, 0x7c] | *((r4 + 0x7c)) = r7;
0x08002158 tst r3, 0x1000 |
0x0800215c str r3, [r4, 0x40] | *((r4 + 0x40)) = r3;
| if ((r3 & 0x1000) != 0) {
0x08002160 bne 0x8002284 | goto label_17;
| }
0x08002164 tst r3, 0x100 |
| if ((r3 & 0x100) != 0) {
0x08002168 addeq r3, r7, 0x144 | r3 = r7 + 0x144;
| }
| if ((r3 & 0x100) == 0) {
0x0800216c addne r3, r7, 0x148 | r3 = r7 + 0x148;
| }
0x08002170 pld [r3] | __asm ("pld [r3]");
| do {
0x08002174 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x08002178 add r2, r2, 1 | r2++;
0x0800217c strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x08002180 teq r1, 0 | __asm ("teq r1, 0");
0x08002184 bne 0x8002174 |
| } while ((r3 & 0x100) != 0);
| label_1:
0x08002188 ldr r3, [r7, 0x150] | r3 = *((r7 + 0x150));
0x0800218c cmp r3, 0 |
| if (r3 != 0) {
0x08002190 beq 0x80021b0 |
0x08002194 ldr r2, [r7, 0x144] | r2 = *((r7 + 0x144));
0x08002198 ldr r1, [r7, 0x148] | r1 = *((r7 + 0x148));
0x0800219c add r2, r2, r1 | r2 += r1;
0x080021a0 cmp r3, r2 |
| if (r3 > r2) {
0x080021a4 ldrls r3, [r7, 0x24] | r3 = *((r7 + 0x24));
| }
| if (r3 > r2) {
0x080021a8 orrls r3, r3, 2 | r3 |= 2;
| }
| if (r3 <= r2) {
0x080021ac strls r3, [r7, 0x24] | *((r7 + 0x24)) = r3;
| goto label_14;
| }
| }
| label_14:
0x080021b0 ldrh r3, [r5, 0x12] | r3 = *((r5 + 0x12));
0x080021b4 mov r2, 0 | r2 = 0;
0x080021b8 strh r2, [r4, 0x68] | *((r4 + 0x68)) = r2;
0x080021bc cmp r3, 0xa |
0x080021c0 stmdaeq r2, {r5, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r5, r7, r8, ip, sp, lr}");
0x080021c4 stmdaeq r2, {r5, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r5, r7, r8, ip, sp, lr}");
0x080021c8 strh r2, [r4, 0x6a] | *((r4 + 0x6a)) = r2;
0x080021cc mov r2, 0x12c | r2 = 0x12c;
0x080021d0 str r2, [r4, 0x64] | *((r4 + 0x64)) = r2;
0x080021d4 ldr r3, [r3] | r3 = *(r3);
0x080021d8 bic r3, r3, 3 | r3 = BIT_MASK (r3, 3);
0x080021dc str r3, [r4, 0x70] | *((r4 + 0x70)) = r3;
0x080021e0 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x080021e4 and r3, r3, 7 | r3 &= 7;
| if (r3 == 0xa) {
0x080021e8 beq 0x800237c | goto label_18;
| }
0x080021ec cmp r3, 4 |
| if (r3 > 4) {
| /* switch table (5 cases) at 0x80021f8 */
0x080021f0 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x080021f4 b 0x8002228 |
| label_2:
0x08002228 ldr r3, [sp, 8] | r3 = var_8h;
0x0800222c cmp r3, 0 |
| if (r3 != 0) {
0x08002230 bne 0x8002460 | goto label_19;
| }
| label_7:
0x08002234 ldr r3, [r8, 0x40c] | r3 = *((r8 + 0x40c));
0x08002238 cmp r3, 0 |
| if (r3 == 0) {
0x0800223c ldrne r3, [r4, 0x40] | r3 = *((r4 + 0x40));
| }
| if (r3 == 0) {
0x08002240 orrne r3, r3, 0x10000 | r3 |= 0x10000;
| }
| if (r3 == 0) {
0x08002244 strne r3, [r4, 0x40] | *((r4 + 0x40)) = r3;
| }
0x08002248 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x0800224c tst r3, 0x2000 |
| if ((r3 & 0x2000) == 0) {
0x08002250 beq 0x80022a4 | goto label_20;
| }
| label_9:
0x08002254 mov r0, r4 | r0 = r4;
0x08002258 add sp, sp, 0x1c |
0x0800225c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_13:
0x08002260 stmdaeq r1, {r2, fp, sp, pc} | __asm ("stmdaeq r1, {r2, fp, sp, pc}");
0x08002264 stmdaeq r1, {r2, fp, sp, pc} | __asm ("stmdaeq r1, {r2, fp, sp, pc}");
0x08002268 pld [r3] | __asm ("pld [r3]");
| do {
0x0800226c ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x08002270 add r2, r2, 1 | r2++;
0x08002274 strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x08002278 teq r1, 0 | __asm ("teq r1, 0");
0x0800227c bne 0x800226c |
| } while ((r3 & 0x2000) != 0);
0x08002280 b 0x80020e8 | goto label_0;
| label_17:
0x08002284 add r3, r7, 0x14c | r3 = r7 + 0x14c;
0x08002288 pld [r3] | __asm ("pld [r3]");
| do {
0x0800228c ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x08002290 add r2, r2, 1 | r2++;
0x08002294 strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x08002298 teq r1, 0 | __asm ("teq r1, 0");
0x0800229c bne 0x800228c |
| } while ((r3 & 0x2000) != 0);
0x080022a0 b 0x8002188 | goto label_1;
| label_20:
0x080022a4 mov r0, r4 | r0 = r4;
0x080022a8 bl 0x8000974 | ip_vs_conn_hashkey_conn ();
0x080022ac mov r3, sp | r3 = sp;
0x080022b0 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x080022b4 mov r5, r0 | r5 = r0;
0x080022b8 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x080022bc ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x080022c0 add r2, r2, 0x200 | r2 += 0x200;
0x080022c4 add r2, r2, 1 | r2++;
0x080022c8 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x080022cc ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x080022d0 add r2, r2, 1 | r2++;
0x080022d4 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x080022d8 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x080022dc tst r3, 0x40 |
| if ((r3 & 0x40) != 0) {
0x080022e0 bne 0x80024c4 | goto label_21;
| }
0x080022e4 add r0, r4, 0x4c | r0 = r4 + 0x4c;
0x080022e8 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x080022ec orr r3, r3, 0x40 | r3 |= 0x40;
0x080022f0 str r3, [r4, 0x40] | *((r4 + 0x40)) = r3;
0x080022f4 pld [r0] | __asm ("pld [r0]");
| do {
0x080022f8 ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x080022fc add r2, r3, 1 | r2 = r3 + 1;
0x08002300 strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x08002304 teq r1, 0 | __asm ("teq r1, 0");
0x08002308 bne 0x80022f8 |
| } while ((r3 & 0x40) != 0);
0x0800230c cmp r3, 0 |
| if (r3 == 0) {
0x08002310 beq 0x8002498 | goto label_22;
| }
0x08002314 add r2, r3, 1 | r2 = r3 + 1;
0x08002318 orrs r2, r2, r3 | r2 |= r3;
| if (r2 < r2) {
0x0800231c bmi 0x8002480 | goto label_23;
| }
| label_8:
0x08002320 ldr r3, [sp, 0x10] | r3 = var_10h;
0x08002324 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x08002328 ldr r2, [r3, r5, lsl 2] | offset_1 = r5 << 2;
| r2 = *((r3 + offset_1));
0x0800232c add r1, r3, r5, lsl 2 | r1 = r3 + (r5 << 2);
0x08002330 str r2, [r4] | *(r4) = r2;
0x08002334 str r1, [r4, 4] | *((r4 + 4)) = r1;
0x08002338 cmp r2, 0 |
0x0800233c str r4, [r3, r5, lsl 2] | offset_2 = r5 << 2;
| *((r3 + offset_2)) = r4;
| if (r2 == 0) {
0x08002340 strne r4, [r2, 4] | *((r2 + 4)) = r4;
| }
| label_10:
0x08002344 mov r3, sp | r3 = sp;
0x08002348 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x0800234c bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08002350 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08002354 sub r2, r2, 1 | r2--;
0x08002358 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0800235c cmp r2, 0 |
| if (r2 == 0) {
0x08002360 beq 0x8002440 | goto label_24;
| }
| label_5:
0x08002364 ldr r0, [pc, 0x174] | r0 = *(0x80024dc);
0x08002368 movw r1, 0x201 | r1 = 0x201;
0x0800236c stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
0x08002370 mov r0, r4 | r0 = r4;
0x08002374 add sp, sp, 0x1c |
0x08002378 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_18:
0x0800237c cmp r3, 4 |
| if (r3 > 4) {
| /* switch table (5 cases) at 0x8002388 */
0x08002380 ldrls pc, [pc, r3, lsl 2] | offset_3 = r3 << 2;
| pc = *((pc + offset_3));
| }
0x08002384 b 0x8002228 | goto label_2;
| label_12:
0x0800239c add lr, r4, 0x10 | lr = r4 + 0x10;
0x080023a0 ldrh sl, [r5, 0xc] | sl = *((r5 + 0xc));
0x080023a4 cmp r1, r3 |
0x080023a8 ldr ip, [r5, 8] | ip = *((r5 + 8));
0x080023ac ldm r2, {r0, r1, r2, r3} | r0 = *(r2);
| r1 = *((r2 + 4));
| r2 = *((r2 + 8));
| r3 = *((r2 + 12));
0x080023b0 stm lr, {r0, r1, r2, r3} | *(lr) = r0;
| *((lr + 4)) = r1;
| *((lr + 8)) = r2;
| *((lr + 12)) = r3;
0x080023b4 strh sl, [r4, 8] | *((r4 + 8)) = sl;
| if (r1 == r3) {
0x080023b8 beq 0x8001fdc | goto label_3;
| }
0x080023bc add lr, r4, 0x20 | lr = r4 + 0x20;
0x080023c0 ldm ip, {r0, r1, r2, r3} | r0 = *(ip);
| r1 = *((ip + 4));
| r2 = *((ip + 8));
| r3 = *((ip + 12));
0x080023c4 mov ip, lr |
0x080023c8 stm lr, {r0, r1, r2, r3} | *(lr) = r0;
| *((lr + 4)) = r1;
| *((lr + 8)) = r2;
| *((lr + 12)) = r3;
0x080023cc b 0x8001ff4 | goto label_4;
| label_24:
0x08002440 ldr r3, [r3] | r3 = *(r3);
0x08002444 tst r3, 2 |
| if ((r3 & 2) == 0) {
0x08002448 beq 0x8002364 | goto label_5;
| }
0x0800244c stmdaeq r2, {r3, r4, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r4, r6, r7, r8, ip, sp, lr}");
0x08002450 b 0x8002364 | goto label_5;
| label_16:
0x08002454 mov r1, 1 | r1 = 1;
0x08002458 stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}");
0x0800245c b 0x8002128 | goto label_6;
| label_19:
0x08002460 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x08002464 cmp r3, 0 |
| if (r3 == 0) {
0x08002468 beq 0x8002234 | goto label_7;
| }
0x0800246c ldr r3, [sp, 8] | r3 = var_8h;
0x08002470 mov r0, r4 | r0 = r4;
0x08002474 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x08002478 stmdaeq r1, {r4, r5, r6, r7, fp} | __asm ("stmdaeq r1, {r4, r5, r6, r7, fp}");
0x0800247c b 0x8002234 | goto label_7;
| label_23:
0x08002480 mov r1, 1 | r1 = 1;
0x08002484 stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}");
0x08002488 b 0x8002320 | goto label_8;
| label_15:
0x0800248c mov r1, 2 | r1 = 2;
0x08002490 stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}");
0x08002494 b 0x8002128 | goto label_6;
| label_22:
0x08002498 mov r1, 2 | r1 = 2;
0x0800249c stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}");
0x080024a0 b 0x8002320 | goto label_8;
| label_11:
0x080024a4 stmdaeq r2, {r4, r5, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r4, r5, r6, r7, r8, ip, sp, lr}");
0x080024a8 cmp r0, 0 |
| if (r0 == 0) {
0x080024ac beq 0x8002254 | goto label_9;
| }
0x080024b0 ldr r1, [pc, 0x2c] | r1 = .text;
0x080024b4 stmdaeq r1, {r3, sb, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r3, sb, sl, fp, ip, sp, lr}");
0x080024b8 stmdaeq r1, {r3, sb, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r3, sb, sl, fp, ip, sp, lr}");
0x080024bc stmdaeq r2, {r2, r3, r4, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r4, r6, r7, r8, ip, sp, lr}");
0x080024c0 b 0x8002254 | goto label_9;
| label_21:
0x080024c4 ldr r2, [sp, 0x14] | r2 = var_14h;
0x080024c8 stmdaeq r1, {r2, r4, r8, sb, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r4, r8, sb, ip, sp, lr}");
0x080024cc stmdaeq r1, {r2, r4, r8, sb, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r4, r8, sb, ip, sp, lr}");
0x080024d0 stmdaeq r1, {r2, r3, r6, r7, r8, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r3, r6, r7, r8, sl, fp, ip, sp, lr}");
0x080024d4 stmdaeq r1, {r2, r3, r6, r7, r8, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r3, r6, r7, r8, sl, fp, ip, sp, lr}");
0x080024d8 stmdaeq r2, {r2, r3, r4, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r4, r6, r7, r8, ip, sp, lr}");
0x080024dc b 0x8002344 | goto label_10;
| }
; 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/net/netfilter/ipvs/ip_vs.ko @ 0x8006bcc */
| #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;
0x08006bcc push {r4, r5, r6, lr} |
0x08006bd0 movw r4, 0x201 | r4 = 0x201;
0x08006bd4 mov r3, sp | r3 = sp;
0x08006bd8 bic ip, r3, 0x1fc0 | ip = BIT_MASK (r3, 0x1fc0);
0x08006bdc bic ip, ip, 0x3f | ip = BIT_MASK (ip, 0x3f);
0x08006be0 ldr lr, [ip, 4] |
0x08006be4 add lr, lr, r4 | lr += r4;
0x08006be8 str lr, [ip, 4] |
0x08006bec ldr lr, [r1, 0xb0] |
0x08006bf0 ldr ip, [r1] | ip = *(r1);
0x08006bf4 ldr r5, [r1, 0xb4] | r5 = *((r1 + 0xb4));
0x08006bf8 subs ip, ip, lr |
0x08006bfc ldr lr, [r1, 4] |
0x08006c00 str ip, [r0] | *(r0) = ip;
0x08006c04 sbc ip, lr, r5 | __asm ("sbc ip, lr, r5");
0x08006c08 str ip, [r0, 4] | *((r0 + 4)) = ip;
0x08006c0c ldr lr, [r1, 0xb8] |
0x08006c10 ldr ip, [r1, 8] | ip = *((r1 + 8));
0x08006c14 ldr r5, [r1, 0xbc] | r5 = *((r1 + 0xbc));
0x08006c18 subs ip, ip, lr |
0x08006c1c ldr lr, [r1, 0xc] |
0x08006c20 str ip, [r0, 8] | *((r0 + 8)) = ip;
0x08006c24 sbc ip, lr, r5 | __asm ("sbc ip, lr, r5");
0x08006c28 str ip, [r0, 0xc] | *((r0 + 0xc)) = ip;
0x08006c2c ldr lr, [r1, 0xc0] |
0x08006c30 ldr ip, [r1, 0x10] | ip = *((r1 + 0x10));
0x08006c34 ldr r5, [r1, 0xc4] | r5 = *((r1 + 0xc4));
0x08006c38 subs ip, ip, lr |
0x08006c3c ldr lr, [r1, 0x14] |
0x08006c40 str ip, [r0, 0x10] | *((r0 + 0x10)) = ip;
0x08006c44 sbc ip, lr, r5 | __asm ("sbc ip, lr, r5");
0x08006c48 str ip, [r0, 0x14] | *((r0 + 0x14)) = ip;
0x08006c4c ldr lr, [r1, 0xc8] |
0x08006c50 ldr ip, [r1, 0x18] | ip = *((r1 + 0x18));
0x08006c54 ldr r5, [r1, 0xcc] | r5 = *((r1 + 0xcc));
0x08006c58 subs ip, ip, lr |
0x08006c5c ldr lr, [r1, 0x1c] |
0x08006c60 str ip, [r0, 0x18] | *((r0 + 0x18)) = ip;
0x08006c64 sbc ip, lr, r5 | __asm ("sbc ip, lr, r5");
0x08006c68 str ip, [r0, 0x1c] | *((r0 + 0x1c)) = ip;
0x08006c6c ldr lr, [r1, 0xd0] |
0x08006c70 ldr ip, [r1, 0x20] | ip = *((r1 + 0x20));
0x08006c74 ldr r3, [r1, 0xd4] | r3 = *((r1 + 0xd4));
0x08006c78 subs ip, ip, lr |
0x08006c7c ldr lr, [r1, 0x24] |
0x08006c80 str ip, [r0, 0x20] | *((r0 + 0x20)) = ip;
0x08006c84 sbc r3, lr, r3 | __asm ("sbc r3, lr, r3");
0x08006c88 str r3, [r0, 0x24] | *((r0 + 0x24)) = r3;
0x08006c8c stmdaeq r1, {r2, r4, r6, r7, sb, fp, sp} | __asm ("stmdaeq r1, {r2, r4, r6, r7, sb, fp, sp}");
0x08006c90 mov r1, r4 | r1 = r4;
0x08006c94 ldr r0, [pc, 4] | r0 = sym.ip_vs_conn_seq_next;
0x08006c98 pop {r4, r5, r6, lr} |
0x08006c9c stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
0x08006ca0 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-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x800b1a0).
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-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x800dc48 */
| #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;
0x0800dc48 push {r4, r5, r6, r7, lr} |
0x0800dc4c mov r6, r3 | r6 = r3;
0x0800dc50 mov r4, r1 | r4 = r1;
0x0800dc54 ldrb r3, [r1, 0x67] | r3 = *((r1 + 0x67));
0x0800dc58 sub sp, sp, 0x24 |
0x0800dc5c mov r5, r2 | r5 = r2;
0x0800dc60 mov r7, r0 | r7 = r0;
0x0800dc64 orr r3, r3, 1 | r3 |= 1;
0x0800dc68 strb r3, [r1, 0x67] | *((r1 + 0x67)) = r3;
0x0800dc6c ldr r3, [r2, 0x40] | r3 = *((r2 + 0x40));
0x0800dc70 tst r3, 0x10000 |
| if ((r3 & 0x10000) != 0) {
0x0800dc74 bne 0x800de94 | goto label_5;
| }
0x0800dc78 ldr ip, [r1, 0x50] | ip = *((r1 + 0x50));
0x0800dc7c cmp ip, 7 |
| if (ip < 7) {
0x0800dc80 bls 0x800dcb0 | goto label_2;
| }
0x0800dc84 bic r0, ip, 7 | r0 = BIT_MASK (ip, 7);
0x0800dc88 pld [r0] | __asm ("pld [r0]");
| do {
0x0800dc8c ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x0800dc90 sub r3, r3, 1 | r3--;
0x0800dc94 strex r2, r3, [r0] | __asm ("strex r2, r3, [r0]");
0x0800dc98 teq r2, 0 | __asm ("teq r2, 0");
0x0800dc9c bne 0x800dc8c |
| } while (ip != 7);
0x0800dca0 cmp r3, 0 |
| if (r3 == 0) {
0x0800dca4 beq 0x800dea8 | goto label_6;
| }
| label_3:
0x0800dca8 mov r3, 7 | r3 = 7;
0x0800dcac str r3, [r4, 0x50] | *((r4 + 0x50)) = r3;
| label_2:
0x0800dcb0 cmp r6, 0 |
| if (r6 == 0) {
0x0800dcb4 beq 0x800dd0c | goto label_7;
| }
0x0800dcb8 ldrh r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x0800dcbc ldrh r3, [r5, 0xa] | r3 = *((r5 + 0xa));
0x0800dcc0 cmp r2, r3 |
| if (r2 == r3) {
0x0800dcc4 beq 0x800ddfc | goto label_8;
| }
| label_1:
0x0800dcc8 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0800dccc cmp r3, 0 |
| if (r3 == 0) {
0x0800dcd0 beq 0x800dd00 | goto label_0;
| }
0x0800dcd4 ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x0800dcd8 cmp r3, 0 |
| if (r3 == 0) {
0x0800dcdc beq 0x800de1c | goto label_9;
| }
| do {
0x0800dce0 mov r0, r4 | r0 = r4;
0x0800dce4 blx r3 | uint32_t (*r3)(uint32_t) (r0);
0x0800dce8 mov r3, 0 | r3 = 0;
0x0800dcec cmp r6, r3 |
0x0800dcf0 str r3, [r4, 0x4c] | *((r4 + 0x4c)) = r3;
0x0800dcf4 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
| if (r6 != r3) {
0x0800dcf8 ldreq r2, [r4, 8] | r2 = *((r4 + 8));
| }
| if (r6 == r3) {
0x0800dcfc beq 0x800dd30 | goto label_10;
| }
| label_0:
0x0800dd00 mov r0, 1 | r0 = 1;
0x0800dd04 add sp, sp, 0x24 |
0x0800dd08 pop {r4, r5, r6, r7, pc} |
| label_7:
0x0800dd0c ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0800dd10 cmp r2, 0 |
| if (r2 == 0) {
0x0800dd14 beq 0x800dd58 | goto label_11;
| }
0x0800dd18 ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x0800dd1c cmp r3, 0 |
0x0800dd20 bne 0x800dce0 |
| } while (r3 != 0);
0x0800dd24 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0800dd28 cmp r3, 0 |
| if (r3 != 0) {
0x0800dd2c bne 0x800de28 | goto label_12;
| }
| label_10:
0x0800dd30 ldrb r3, [r4, 0x64] | r3 = *((r4 + 0x64));
0x0800dd34 and r1, r3, 0x60 | r1 = r3 & 0x60;
0x0800dd38 cmp r1, 0x40 |
0x0800dd3c bfceq r3, 5, 2 | __asm ("bfceq r3, 5, 2");
| if (r1 != 0x40) {
0x0800dd40 strbeq r3, [r4, 0x64] | *((r4 + 0x64)) = r3;
| }
0x0800dd44 cmp r2, 0 |
| if (r2 == 0) {
0x0800dd48 movne r2, 0 | r2 = 0;
| }
| if (r2 == 0) {
0x0800dd4c movne r3, 0 | r3 = 0;
| }
0x0800dd50 strdne r2, r3, [r4, 0x10] | __asm ("strdne r2, r3, [r4, 0x10]");
0x0800dd54 b 0x800dd6c | goto label_13;
| label_11:
0x0800dd58 ldrb r3, [r4, 0x64] | r3 = *((r4 + 0x64));
0x0800dd5c and r2, r3, 0x60 | r2 = r3 & 0x60;
0x0800dd60 cmp r2, 0x40 |
0x0800dd64 bfieq r3, r6, 5, 2 | __asm ("bfieq r3, r6, 5, 2");
| if (r2 != 0x40) {
0x0800dd68 strbeq r3, [r4, 0x64] | *((r4 + 0x64)) = r3;
| }
| label_13:
0x0800dd6c ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x0800dd70 uxtb r7, r7 | r7 = (int8_t) r7;
0x0800dd74 ldr r2, [r5, 0x48] | r2 = *((r5 + 0x48));
0x0800dd78 bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x0800dd7c ldr r5, [r2, 0x510] | r5 = *((r2 + 0x510));
0x0800dd80 ldr r6, [r3] | r6 = *(r3);
0x0800dd84 stmdaeq r2, {r2, r3, r4, r5, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r4, r5, r7, r8, ip, sp, lr}");
0x0800dd88 sub r3, r7, 2 | r3 = r7 - 2;
0x0800dd8c cmp r3, 8 |
| if (r3 > 8) {
| /* switch table (9 cases) at 0x800dd98 */
0x0800dd90 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x0800dd94 b 0x800ddbc |
0x0800ddbc stmdaeq r1, {r2, sb, sl, fp, ip, pc} | __asm ("stmdaeq r1, {r2, sb, sl, fp, ip, pc}");
0x0800ddc0 stmdaeq r1, {r2, sb, sl, fp, ip, pc} | __asm ("stmdaeq r1, {r2, sb, sl, fp, ip, pc}");
0x0800ddc4 ldrb r3, [r2] | r3 = *(r2);
0x0800ddc8 cmp r3, 0 |
| if (r3 == 0) {
0x0800ddcc beq 0x800deb0 | goto label_14;
| }
| label_4:
0x0800ddd0 stmdaeq r2, {r2, r3, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r7, r8, ip, sp, lr}");
0x0800ddd4 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x0800ddd8 mov r2, r4 | r2 = r4;
0x0800dddc mov r0, r5 | r0 = r5;
0x0800dde0 mov r1, 0 | r1 = 0;
0x0800dde4 bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x0800dde8 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0800ddec blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x0800ddf0 mov r0, 2 | r0 = 2;
0x0800ddf4 add sp, sp, 0x24 |
0x0800ddf8 pop {r4, r5, r6, r7, pc} |
| label_8:
0x0800ddfc ldrh r3, [r5, 0xe] | r3 = *((r5 + 0xe));
0x0800de00 ldr r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x0800de04 cmp r3, 0xa |
0x0800de08 ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
| if (r3 == 0xa) {
0x0800de0c beq 0x800ded0 | goto label_15;
| }
0x0800de10 cmp r3, r2 |
| if (r3 == r2) {
0x0800de14 beq 0x800dd00 | goto label_0;
| }
0x0800de18 b 0x800dcc8 | goto label_1;
| label_9:
0x0800de1c ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0800de20 cmp r3, 0 |
| if (r3 == 0) {
0x0800de24 beq 0x800dd00 | goto label_0;
| }
| label_12:
0x0800de28 udf 0x12 | __asm ("udf 0x12");
| label_5:
0x0800de94 mov r1, r5 | r1 = r5;
0x0800de98 mov r0, r4 | r0 = r4;
0x0800de9c mov r2, 1 | r2 = 1;
0x0800dea0 stmdaeq r1, {r2, r4, r8, sl, fp, ip, lr} | __asm ("stmdaeq r1, {r2, r4, r8, sl, fp, ip, lr}");
0x0800dea4 b 0x800dcb0 | goto label_2;
| label_6:
0x0800dea8 stmdaeq r2, {r4, r5, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r4, r5, sb, ip, sp, lr}");
0x0800deac b 0x800dca8 | goto label_3;
| label_14:
0x0800deb0 mov r1, 1 | r1 = 1;
0x0800deb4 stmdaeq r1, {r2, r3, r4, r6, r7, r8, fp, pc} | __asm ("stmdaeq r1, {r2, r3, r4, r6, r7, r8, fp, pc}");
0x0800deb8 stmdaeq r1, {r2, r3, r4, r6, r7, r8, fp, pc} | __asm ("stmdaeq r1, {r2, r3, r4, r6, r7, r8, fp, pc}");
0x0800debc strb r1, [r2] | *(r2) = r1;
0x0800dec0 mov r2, 9 | r2 = 9;
0x0800dec4 mov r1, 0xf6 | r1 = 0xf6;
0x0800dec8 stmdaeq r2, {r3, r6, r7, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r6, r7, sb, ip, sp, lr}");
0x0800decc b 0x800ddd0 | goto label_4;
| label_15:
0x0800ded0 ldr r1, [r5, 0x34] | r1 = *((r5 + 0x34));
0x0800ded4 eor r3, r3, r2 | r3 ^= r2;
0x0800ded8 ldr r2, [r5, 0x24] | r2 = *((r5 + 0x24));
0x0800dedc eor r2, r2, r1 | r2 ^= r1;
0x0800dee0 ldr r1, [r5, 0x38] | r1 = *((r5 + 0x38));
0x0800dee4 orr r3, r2, r3 | r3 = r2 | r3;
0x0800dee8 ldr r2, [r5, 0x28] | r2 = *((r5 + 0x28));
0x0800deec eor r2, r2, r1 | r2 ^= r1;
0x0800def0 ldr r1, [r5, 0x3c] | r1 = *((r5 + 0x3c));
0x0800def4 orr r3, r3, r2 | r3 |= r2;
0x0800def8 ldr r2, [r5, 0x2c] | r2 = *((r5 + 0x2c));
0x0800defc eor r2, r2, r1 | r2 ^= r1;
0x0800df00 orrs r3, r3, r2 | r3 |= r2;
| if (r3 != r3) {
0x0800df04 bne 0x800dcc8 | goto label_1;
| }
0x0800df08 b 0x800dd00 | 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/net/netfilter/ipvs/ip_vs.ko @ 0x8002c3c */
| #include <stdint.h>
|
; (fcn) sym.ip_vs_proto_name () | void ip_vs_proto_name (uint32_t arg1) {
| r0 = arg1;
0x08002c3c mov r2, r0 | r2 = r0;
0x08002c40 cmp r0, 0x11 |
| if (r0 <= 0x11) {
0x08002c44 bhi 0x8002c9c |
0x08002c48 cmp r0, 0x11 |
| if (r0 > 0x11) {
| /* switch table (18 cases) at 0x8002c54 */
0x08002c4c ldrls pc, [pc, r0, lsl 2] | offset_0 = r0 << 2;
| pc = *((pc + offset_0));
| }
0x08002c50 b 0x8002cc4 |
| } else {
0x08002c9c cmp r0, 0x3a |
| if (r0 != 0x3a) {
0x08002ca0 beq 0x8002cb8 |
0x08002ca4 cmp r0, 0x84 |
| if (r0 != 0x84) {
0x08002ca8 bne 0x8002cc4 | goto label_0;
| }
0x08002cac stmdaeq r1, {r4, r7, sb, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r4, r7, sb, sl, fp, ip, sp, lr}");
0x08002cb0 stmdaeq r1, {r4, r7, sb, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r4, r7, sb, sl, fp, ip, sp, lr}");
0x08002cb4 bx lr | return;
| }
0x08002cb8 stmdaeq r1, {r5, r7, sb, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r5, r7, sb, sl, fp, ip, sp, lr}");
0x08002cbc stmdaeq r1, {r5, r7, sb, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r5, r7, sb, sl, fp, ip, sp, lr}");
0x08002cc0 bx lr | return;
| }
| label_0:
0x08002cc4 push {r4, lr} |
0x08002cc8 stmdaeq r1, {r2, r3, r5, r7, sb, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r3, r5, r7, sb, sl, fp, ip, sp, lr}");
0x08002ccc stmdaeq r1, {r2, r3, r5, r7, sb, sl, fp, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r3, r5, r7, sb, sl, fp, ip, sp, lr}");
0x08002cd0 ldr r0, [pc, 0x38] | r0 = *(0x8002d0c);
0x08002cd4 stmdaeq r2, {r3, r4, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r4, sb, ip, sp, lr}");
0x08002cd8 ldr r0, [pc, 0x30] | r0 = *(0x8002d0c);
0x08002cdc 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/net/netfilter/ipvs/ip_vs.ko @ 0x80129d8 */
| #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;
0x080129d8 str lr, [sp, -4]! |
0x080129dc add ip, r1, 0x50 |
0x080129e0 mov r2, r0 | r2 = r0;
0x080129e4 mov r3, sp | r3 = sp;
0x080129e8 str ip, [r1, 0x50] | *((r1 + 0x50)) = ip;
0x080129ec bic lr, r3, 0x1fc0 | lr = BIT_MASK (r3, 0x1fc0);
0x080129f0 str ip, [r1, 0x54] | *((r1 + 0x54)) = ip;
0x080129f4 bic lr, lr, 0x3f | lr = BIT_MASK (lr, 0x3f);
0x080129f8 mov r3, r1 | r3 = r1;
0x080129fc movw r1, 0x201 | r1 = 0x201;
0x08012a00 ldr r0, [lr, 4] | r0 = *((lr + 4));
0x08012a04 add r0, r0, r1 | r0 += r1;
0x08012a08 str r0, [lr, 4] | *((lr + 4)) = r0;
0x08012a0c ldr r0, [r2, 0x47c] | r0 = *((r2 + 0x47c));
0x08012a10 str ip, [r0, 4] | *((r0 + 4)) = ip;
0x08012a14 str r0, [r3, 0x50] | *((r3 + 0x50)) = r0;
0x08012a18 add r0, r2, 0x470 | r0 = r2 + 0x470;
0x08012a1c add r0, r0, 0xc | r0 += 0xc;
0x08012a20 str r0, [r3, 0x54] | *((r3 + 0x54)) = r0;
0x08012a24 str ip, [r2, 0x47c] | *((r2 + 0x47c)) = ip;
0x08012a28 ldr r0, [pc, 4] | r0 = sym.ip_vs_conn_seq_next;
0x08012a2c pop {lr} |
0x08012a30 stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
0x08012a34 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-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x8012a38 */
| #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;
0x08012a38 mov r3, sp | r3 = sp;
0x08012a3c bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08012a40 mov r3, r1 | r3 = r1;
0x08012a44 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08012a48 movw r1, 0x201 | r1 = 0x201;
0x08012a4c ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x08012a50 add r0, r0, r1 | r0 += r1;
0x08012a54 str r0, [r2, 4] | *((r2 + 4)) = r0;
0x08012a58 ldr r2, [r3, 0x54] | r2 = *((r3 + 0x54));
0x08012a5c mov ip, 0x100 |
0x08012a60 ldr r0, [r3, 0x50] | r0 = *((r3 + 0x50));
0x08012a64 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x08012a68 str r0, [r2] | *(r2) = r0;
0x08012a6c movw r2, 0x122 | r2 = 0x122;
0x08012a70 ldr r0, [pc, 8] | r0 = sym.ip_vs_conn_seq_next;
0x08012a74 str ip, [r3, 0x50] | *((r3 + 0x50)) = ip;
0x08012a78 str r2, [r3, 0x54] | *((r3 + 0x54)) = r2;
0x08012a7c stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
0x08012a80 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-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x80142d8 */
| #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;
0x080142d8 push {r4, lr} |
0x080142dc mov r1, 6 | r1 = 6;
0x080142e0 mov r4, r0 | r4 = r0;
0x080142e4 ldr r0, [r0, 0x48] | r0 = *((r0 + 0x48));
0x080142e8 stmdaeq r1, {r3, r4, r5, sl, fp, sp} | __asm ("stmdaeq r1, {r3, r4, r5, sl, fp, sp}");
0x080142ec mov r3, sp | r3 = sp;
0x080142f0 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x080142f4 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x080142f8 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x080142fc add r3, r3, 0x200 | r3 += 0x200;
0x08014300 add r3, r3, 1 | r3++;
0x08014304 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x08014308 cmp r0, 0 |
0x0801430c mov r3, 9 | r3 = 9;
0x08014310 strh r3, [r4, 0x68] | *((r4 + 0x68)) = r3;
0x08014314 movw r1, 0x201 | r1 = 0x201;
0x08014318 movweq r3, 0x2ee0 | __asm ("movweq r3, 0x2ee0");
| if (r0 == 0) {
0x0801431c ldrne r3, [r0, 8] | r3 = *((r0 + 8));
| }
0x08014320 ldr r0, [pc, 0xc] | r0 = *(0x8014330);
| if (r0 == 0) {
0x08014324 ldrne r3, [r3, 0x24] | r3 = *((r3 + 0x24));
| }
0x08014328 str r3, [r4, 0x64] | *((r4 + 0x64)) = r3;
0x0801432c pop {r4, lr} |
0x08014330 stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
0x08014334 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-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x8001948 */
| #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;
0x08001948 push {r4, r5, lr} |
0x0800194c mov r4, r0 | r4 = r0;
0x08001950 sub sp, sp, 0x1c |
0x08001954 stmdaeq r2, {r2, r3, r4, r5, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r4, r5, r7, r8, ip, sp, lr}");
0x08001958 add r2, r4, 0x20 | r2 = r4 + 0x20;
0x0800195c str r2, [sp, 4] | var_4h = r2;
0x08001960 add r3, r4, 0x30 | r3 = r4 + 0x30;
0x08001964 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x08001968 ldr r1, [r4, 0x6c] | r1 = *((r4 + 0x6c));
0x0800196c ldrh r2, [r4, 0xe] | r2 = *((r4 + 0xe));
0x08001970 str r0, [sp, 0x14] | var_14h = r0;
0x08001974 str r1, [sp, 0x10] | var_10h = r1;
0x08001978 ldrh r0, [r4, 0x44] | r0 = *((r4 + 0x44));
0x0800197c ldrh r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x08001980 str r1, [sp, 8] | var_8h = r1;
0x08001984 mov r1, r2 | r1 = r2;
0x08001988 str r0, [sp, 0xc] | var_ch = r0;
0x0800198c ldrh r0, [r4, 0xa] | r0 = *((r4 + 0xa));
0x08001990 str r0, [sp] | *(sp) = r0;
0x08001994 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x08001998 stmdaeq r0, {r2, r4, r7, r8, fp, lr, pc} | __asm ("stmdaeq r0, {r2, r4, r7, r8, fp, lr, pc}");
0x0800199c subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 == r0) {
0x080019a0 beq 0x8001ac0 | goto label_0;
| }
0x080019a4 mov r3, sp | r3 = sp;
0x080019a8 movw r1, 0x201 | r1 = 0x201;
0x080019ac bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x080019b0 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x080019b4 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x080019b8 add r2, r2, r1 | r2 += r1;
0x080019bc str r2, [r3, 4] | *((r3 + 4)) = r2;
0x080019c0 ldr r3, [r4, 0x7c] | r3 = *((r4 + 0x7c));
0x080019c4 cmp r3, 0 |
| if (r3 != 0) {
0x080019c8 bne 0x8001ab8 | goto label_6;
| }
0x080019cc ldr r3, [r4, 0x88] | r3 = *((r4 + 0x88));
0x080019d0 cmp r3, 0 |
| if (r3 != 0) {
0x080019d4 beq 0x80019e0 |
0x080019d8 mov r0, r4 | r0 = r4;
0x080019dc stmdaeq r1, {r3, r4, r5, r6, r7, fp} | __asm ("stmdaeq r1, {r3, r4, r5, r6, r7, fp}");
| }
0x080019e0 add r0, r5, 0x3c | r0 = r5 + 0x3c;
0x080019e4 pld [r0] | __asm ("pld [r0]");
| do {
0x080019e8 ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x080019ec add r2, r3, 1 | r2 = r3 + 1;
0x080019f0 strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x080019f4 teq r1, 0 | __asm ("teq r1, 0");
0x080019f8 bne 0x80019e8 |
| } while (r3 != 0);
0x080019fc cmp r3, 0 |
| if (r3 == 0) {
0x08001a00 beq 0x8001bdc | goto label_7;
| }
0x08001a04 add r2, r3, 1 | r2 = r3 + 1;
0x08001a08 orrs r2, r2, r3 | r2 |= r3;
| if (r2 < r2) {
0x08001a0c bmi 0x8001bd0 | goto label_8;
| }
| label_5:
0x08001a10 ldrh r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x08001a14 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x08001a18 cmp r2, 0x11 |
0x08001a1c ldr r2, [r4, 0x40] | r2 = *((r4 + 0x40));
0x08001a20 bicne r3, r3, 0x2000 | __asm ("bicne r3, r3, 0x2000");
0x08001a24 tst r2, 0x20 |
| if ((r2 & 0x20) != 0) {
0x08001a28 bne 0x8001b40 | goto label_9;
| }
| label_2:
0x08001a2c orr r3, r3, r2 | r3 |= r2;
0x08001a30 str r5, [r4, 0x7c] | *((r4 + 0x7c)) = r5;
0x08001a34 tst r3, 0x1000 |
0x08001a38 str r3, [r4, 0x40] | *((r4 + 0x40)) = r3;
| if ((r3 & 0x1000) != 0) {
0x08001a3c bne 0x8001bb0 | goto label_10;
| }
0x08001a40 tst r3, 0x100 |
| if ((r3 & 0x100) != 0) {
0x08001a44 addeq r3, r5, 0x144 | r3 = r5 + 0x144;
| }
| if ((r3 & 0x100) == 0) {
0x08001a48 addne r3, r5, 0x148 | r3 = r5 + 0x148;
| }
0x08001a4c pld [r3] | __asm ("pld [r3]");
| do {
0x08001a50 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x08001a54 add r2, r2, 1 | r2++;
0x08001a58 strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x08001a5c teq r1, 0 | __asm ("teq r1, 0");
0x08001a60 bne 0x8001a50 |
| } while ((r3 & 0x100) != 0);
| label_4:
0x08001a64 ldr r3, [r5, 0x150] | r3 = *((r5 + 0x150));
0x08001a68 cmp r3, 0 |
| if (r3 != 0) {
0x08001a6c bne 0x8001b20 | goto label_11;
| }
| label_1:
0x08001a70 ldr r0, [pc, 0x1a0] | r0 = *(0x8001c14);
0x08001a74 movw r1, 0x201 | r1 = 0x201;
0x08001a78 stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
0x08001a7c ldrh r3, [r4, 0xe] | r3 = *((r4 + 0xe));
0x08001a80 mov r2, 0 | r2 = 0;
0x08001a84 str r2, [r4, 0x84] | *((r4 + 0x84)) = r2;
0x08001a88 cmp r3, 0xa |
0x08001a8c ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x08001a90 and r3, r3, 7 | r3 &= 7;
| if (r3 == 0xa) {
0x08001a94 beq 0x8001b90 | goto label_12;
| }
0x08001a98 cmp r3, 4 |
| if (r3 > 4) {
| /* switch table (5 cases) at 0x8001aa4 */
0x08001a9c ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x08001aa0 b 0x8001ae8 | goto label_3;
| label_6:
0x08001ab8 ldr r0, [pc, 0x15c] | r0 = .text;
0x08001abc stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
| do {
| label_0:
0x08001ac0 add sp, sp, 0x1c |
0x08001ac4 pop {r4, r5, lr} |
0x08001ac8 stmdaeq r2, {r2, r3, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r7, r8, ip, sp, lr}");
0x08001acc ldrh r3, [r4, 0x46] | r3 = *((r4 + 0x46));
0x08001ad0 cmp r3, 0xa |
0x08001ad4 stmdaeq r0, {r4, r5, r6, sb, sl, ip, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r5, r6, sb, sl, ip, sp, lr, pc}");
0x08001ad8 stmdaeq r0, {r3, r4, r5, sb, ip, sp, lr, pc} | __asm ("stmdaeq r0, {r3, r4, r5, sb, ip, sp, lr, pc}");
0x08001adc stmdaeq r0, {r4, r5, r6, sb, sl, ip, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r5, r6, sb, sl, ip, sp, lr, pc}");
0x08001ae0 stmdaeq r0, {r3, r4, r5, sb, ip, sp, lr, pc} | __asm ("stmdaeq r0, {r3, r4, r5, sb, ip, sp, lr, pc}");
0x08001ae4 str r3, [r4, 0x84] | *((r4 + 0x84)) = r3;
| label_3:
0x08001ae8 ldrh r1, [r4, 0x44] | r1 = *((r4 + 0x44));
0x08001aec ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x08001af0 stmdaeq r1, {r3, r4, r5, sl, fp, sp} | __asm ("stmdaeq r1, {r3, r4, r5, sl, fp, sp}");
0x08001af4 cmp r0, 0 |
0x08001af8 beq 0x8001ac0 |
| } while (r0 == 0);
0x08001afc ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x08001b00 cmp r3, 0 |
| if (r3 == 0) {
0x08001b04 beq 0x8001ac0 | goto label_0;
| }
0x08001b08 ldr r1, [r0, 4] | r1 = *((r0 + 4));
0x08001b0c mov r0, r4 | r0 = r4;
0x08001b10 stmdaeq r1, {r4, r5, r6, r7, fp} | __asm ("stmdaeq r1, {r4, r5, r6, r7, fp}");
0x08001b14 add sp, sp, 0x1c |
0x08001b18 pop {r4, r5, lr} |
0x08001b1c stmdaeq r2, {r2, r3, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r3, r7, r8, ip, sp, lr}");
| label_11:
0x08001b20 ldr r2, [r5, 0x144] | r2 = *((r5 + 0x144));
0x08001b24 ldr r1, [r5, 0x148] | r1 = *((r5 + 0x148));
0x08001b28 add r2, r2, r1 | r2 += r1;
0x08001b2c cmp r3, r2 |
| if (r3 > r2) {
0x08001b30 ldrls r3, [r5, 0x24] | r3 = *((r5 + 0x24));
| }
| if (r3 > r2) {
0x08001b34 orrls r3, r3, 2 | r3 |= 2;
| }
| if (r3 > r2) {
0x08001b38 strls r3, [r5, 0x24] | *((r5 + 0x24)) = r3;
| }
0x08001b3c b 0x8001a70 | goto label_1;
| label_9:
0x08001b40 tst r2, 0x1000 |
0x08001b44 bic r2, r2, 0x87 | r2 = BIT_MASK (r2, 0x87);
0x08001b48 biceq r3, r3, 0x100 | __asm ("biceq r3, r3, 0x100");
0x08001b4c b 0x8001a2c | goto label_2;
| label_12:
0x08001b90 cmp r3, 4 |
| if (r3 > 4) {
| /* switch table (5 cases) at 0x8001b9c */
0x08001b94 ldrls pc, [pc, r3, lsl 2] | offset_1 = r3 << 2;
| pc = *((pc + offset_1));
| }
0x08001b98 b 0x8001ae8 | goto label_3;
| label_10:
0x08001bb0 add r3, r5, 0x14c | r3 = r5 + 0x14c;
0x08001bb4 pld [r3] | __asm ("pld [r3]");
| do {
0x08001bb8 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x08001bbc add r2, r2, 1 | r2++;
0x08001bc0 strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x08001bc4 teq r1, 0 | __asm ("teq r1, 0");
0x08001bc8 bne 0x8001bb8 |
| } while (r3 != 4);
0x08001bcc b 0x8001a64 | goto label_4;
| label_8:
0x08001bd0 mov r1, 1 | r1 = 1;
0x08001bd4 stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}");
0x08001bd8 b 0x8001a10 | goto label_5;
| label_7:
0x08001bdc mov r1, 2 | r1 = 2;
0x08001be0 stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}");
0x08001be4 b 0x8001a10 | goto label_5;
| }
; 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/net/netfilter/ipvs/ip_vs.ko @ 0x800787c */
| #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;
0x0800787c push {r4, r6, r7, lr} |
0x08007880 movw r4, 0x201 | r4 = 0x201;
0x08007884 mov r3, sp | r3 = sp;
0x08007888 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x0800788c bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08007890 ldr ip, [r2, 4] | ip = *((r2 + 4));
0x08007894 add ip, ip, r4 |
0x08007898 str ip, [r2, 4] | *((r2 + 4)) = ip;
0x0800789c ldrd r6, r7, [r0] | __asm ("ldrd r6, r7, [r0]");
0x080078a0 strd r6, r7, [r0, 0xb0] | __asm ("strd r6, r7, [r0, 0xb0]");
0x080078a4 ldrd r6, r7, [r0, 8] | __asm ("ldrd r6, r7, [r0, 8]");
0x080078a8 strd r6, r7, [r0, 0xb8] | __asm ("strd r6, r7, [r0, 0xb8]");
0x080078ac ldrd r6, r7, [r0, 0x10] | __asm ("ldrd r6, r7, [r0, 0x10]");
0x080078b0 strd r6, r7, [r0, 0xc0] | __asm ("strd r6, r7, [r0, 0xc0]");
0x080078b4 ldrd r6, r7, [r0, 0x18] | __asm ("ldrd r6, r7, [r0, 0x18]");
0x080078b8 strd r6, r7, [r0, 0xc8] | __asm ("strd r6, r7, [r0, 0xc8]");
0x080078bc ldrd r6, r7, [r0, 0x20] | __asm ("ldrd r6, r7, [r0, 0x20]");
0x080078c0 strd r6, r7, [r0, 0xd0] | __asm ("strd r6, r7, [r0, 0xd0]");
0x080078c4 stmdaeq r1, {r2, r7, sb, fp, sp} | __asm ("stmdaeq r1, {r2, r7, sb, fp, sp}");
0x080078c8 mov r1, r4 | r1 = r4;
0x080078cc ldr r0, [pc, 4] | r0 = sym.ip_vs_conn_seq_next;
0x080078d0 pop {r4, r6, r7, lr} |
0x080078d4 stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
0x080078d8 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-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x8010fdc */
| #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;
0x08010fdc push {r4, lr} |
0x08010fe0 mov r3, sp | r3 = sp;
0x08010fe4 ldr r1, [r0, 0x2c] | r1 = *((r0 + 0x2c));
0x08010fe8 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08010fec bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08010ff0 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x08010ff4 add r3, r3, 0x200 | r3 += 0x200;
0x08010ff8 add r3, r3, 1 | r3++;
0x08010ffc str r3, [r2, 4] | *((r2 + 4)) = r3;
0x08011000 ldr r3, [r0, -8] | r3 = *((r0 - 8));
0x08011004 cmp r3, 0 |
| if (r3 != 0) {
0x08011008 beq 0x8011018 |
0x0801100c ldr r3, [r0, -4] | r3 = *((r0 - 4));
0x08011010 cmp r3, 7 |
| if (r3 < 7) {
0x08011014 bls 0x8011028 | goto label_0;
| }
| }
0x08011018 pop {r4, lr} |
0x0801101c movw r1, 0x201 | r1 = 0x201;
0x08011020 ldr r0, [pc, 0x40] | r0 = *(0x8011064);
0x08011024 stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
| label_0:
0x08011028 ldr ip, [r1, 0x498] | ip = *((r1 + 0x498));
0x0801102c sub r3, r0, 0x14 | r3 = r0 - 0x14;
0x08011030 movw r2, 0xd2d4 |
0x08011034 movt r2, 0xd2d2 | r2 = 0xd2d2d2d4;
0x08011038 sub r3, r3, ip | r3 -= ip;
0x0801103c mov ip, 8 |
0x08011040 str ip, [r0, -4] | *((r0 - 4)) = ip;
0x08011044 asr r3, r3, 2 | r3 >>= 2;
0x08011048 ldr r1, [r1, 0x49c] | r1 = *((r1 + 0x49c));
0x0801104c mul r2, r3, r2 | r2 = r3 * r2;
0x08011050 ldr r0, [r1, r2] | r0 = *((r1 + r2));
0x08011054 stmdaeq r2, {r4, r5, r6, r8, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r4, r5, r6, r8, sb, ip, sp, lr}");
0x08011058 ldr r0, [pc, 8] | r0 = sym.ip_vs_conn_seq_next;
0x0801105c pop {r4, lr} |
0x08011060 movw r1, 0x201 | r1 = 0x201;
0x08011064 stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
0x08011068 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-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/netfilter/ipvs/ip_vs.ko @ 0x800714c */
| #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;
0x0800714c push {r4, r5, r6, r7, lr} |
0x08007150 mov r4, r0 | r4 = r0;
0x08007154 sub sp, sp, 0x44 |
0x08007158 mov r0, sp | r0 = sp;
0x0800715c stmdaeq r2, {r3, r5, r6, sb, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r5, r6, sb, ip, sp, lr}");
0x08007160 mov r3, sp | r3 = sp;
0x08007164 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08007168 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0800716c bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08007170 ldr r5, [sp, 0x14] | r5 = var_14h;
0x08007174 ldr r6, [r4, 0x3f8] | r6 = *((r4 + 0x3f8));
0x08007178 add r5, r5, r2 | r5 += r2;
0x0800717c ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08007180 add r2, r2, 0x200 | r2 += 0x200;
0x08007184 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08007188 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0800718c add r2, r2, 1 | r2++;
0x08007190 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08007194 ldr r3, [r4, 0x400] | r3 = *((r4 + 0x400));
0x08007198 cmp r3, 3 |
| if (r3 > 3) {
| /* switch table (4 cases) at 0x80071a4 */
0x0800719c ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x080071a0 b 0x80071c4 |
0x080071c4 mov r7, 0xe000 |
0x080071c8 movt r7, 0xffff | r7 = 0x-2000;
0x080071cc mov r3, sp | r3 = sp;
0x080071d0 and r3, r3, r7 | r3 &= r7;
0x080071d4 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x080071d8 sub r2, r2, 1 | r2--;
0x080071dc str r2, [r3, 4] | *((r3 + 4)) = r2;
0x080071e0 cmp r2, 0 |
| if (r2 == 0) {
0x080071e4 beq 0x8007390 | goto label_3;
| }
| label_1:
0x080071e8 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x080071ec add r2, r2, 1 | r2++;
0x080071f0 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x080071f4 ldr r3, [r4, 0x404] | r3 = *((r4 + 0x404));
0x080071f8 cmp r3, 3 |
| if (r3 > 3) {
| /* switch table (4 cases) at 0x8007204 */
0x080071fc ldrls pc, [pc, r3, lsl 2] | offset_1 = r3 << 2;
| pc = *((pc + offset_1));
| }
0x08007200 b 0x8007224 |
0x08007224 mov r7, 0xe000 |
0x08007228 movt r7, 0xffff | r7 = 0x-2000;
0x0800722c mov r3, sp | r3 = sp;
0x08007230 and r3, r3, r7 | r3 &= r7;
0x08007234 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08007238 sub r2, r2, 1 | r2--;
0x0800723c str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08007240 cmp r2, 0 |
0x08007244 beq 0x8007374 |
| while ((r2 & 2) == 0) {
| label_0:
0x08007248 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0800724c add r2, r2, 1 | r2++;
0x08007250 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08007254 ldr r3, [r4, 0x408] | r3 = *((r4 + 0x408));
0x08007258 cmp r3, 3 |
| if (r3 > 3) {
| /* switch table (4 cases) at 0x8007264 */
0x0800725c ldrls pc, [pc, r3, lsl 2] | offset_2 = r3 << 2;
| pc = *((pc + offset_2));
| }
0x08007260 b 0x8007280 |
0x08007280 str r3, [r4, 0x3e8] | *((r4 + 0x3e8)) = r3;
0x08007284 mov r3, sp | r3 = sp;
0x08007288 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x0800728c bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08007290 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08007294 sub r2, r2, 1 | r2--;
0x08007298 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0800729c cmp r2, 0 |
| if (r2 == 0) {
0x080072a0 beq 0x80073ac | goto label_4;
| }
| label_2:
0x080072a4 ldr r0, [pc, 0x1a0] | r0 = *(0x8007448);
0x080072a8 mov r1, 0x200 | r1 = 0x200;
0x080072ac stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
0x080072b0 add sp, sp, 0x44 |
0x080072b4 pop {r4, r5, r6, r7, pc} |
0x08007374 ldr r2, [r3] | r2 = *(r3);
0x08007378 tst r2, 2 |
0x0800737c beq 0x8007248 |
| }
0x08007380 stmdaeq r2, {r3, r4, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r4, r6, r7, r8, ip, sp, lr}");
0x08007384 mov r3, sp | r3 = sp;
0x08007388 and r3, r3, r7 | r3 &= r7;
0x0800738c b 0x8007248 | goto label_0;
| label_3:
0x08007390 ldr r2, [r3] | r2 = *(r3);
0x08007394 tst r2, 2 |
| if ((r2 & 2) == 0) {
0x08007398 beq 0x80071e8 | goto label_1;
| }
0x0800739c stmdaeq r2, {r3, r4, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r4, r6, r7, r8, ip, sp, lr}");
0x080073a0 mov r3, sp | r3 = sp;
0x080073a4 and r3, r3, r7 | r3 &= r7;
0x080073a8 b 0x80071e8 | goto label_1;
| label_4:
0x080073ac ldr r3, [r3] | r3 = *(r3);
0x080073b0 tst r3, 2 |
| if ((r3 & 2) == 0) {
0x080073b4 beq 0x80072a4 | goto label_2;
| }
0x080073b8 stmdaeq r2, {r3, r4, r6, r7, r8, ip, sp, lr} | __asm ("stmdaeq r2, {r3, r4, r6, r7, r8, ip, sp, lr}");
0x080073bc b 0x80072a4 | goto label_2;
| }
[*] Function mmap used 1 times ip_vs.ko