[*] Binary protection state of vxlan.ko
No RELRO No Canary found NX disabled REL No RPATH No RUNPATH Symbols
[*] Function popen tear down of vxlan.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/drivers/net/vxlan.ko @ 0x8005348 */
| #include <stdint.h>
|
; (fcn) sym.encap_bypass_if_local () | void encap_bypass_if_local (int32_t arg_20h, int32_t arg_24h, int32_t arg_28h, int32_t arg_2ch, int32_t arg_30h, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
0x08005348 push {r4, r5, r6, r7, r8, lr} |
0x0800534c mov r4, r3 | r4 = r3;
0x08005350 sub sp, sp, 8 |
0x08005354 ldr r3, [sp, 0x30] | r3 = *(arg_30h);
0x08005358 ldrh r8, [sp, 0x20] | r8 = *(arg_20h);
0x0800535c cmp r3, 0 |
0x08005360 blt 0x8005370 |
| while ((r3 & 0x30000000) != 0) {
0x08005364 mov r0, 0 | r0 = 0;
| label_0:
0x08005368 add sp, sp, 8 |
0x0800536c pop {r4, r5, r6, r7, r8, pc} |
0x08005370 tst r3, 0x30000000 |
0x08005374 bne 0x8005364 |
| }
0x08005378 mov r6, r0 | r6 = r0;
0x0800537c ldr r0, [sp, 0x2c] | r0 = *(arg_2ch);
0x08005380 mov r5, r2 | r5 = r2;
0x08005384 mov r7, r1 | r7 = r1;
0x08005388 stmdaeq r0, {r4, r5, r6, r7, r8, sb, sl, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r5, r6, r7, r8, sb, sl, sp, lr, pc}");
0x0800538c ldr r3, [sp, 0x24] | r3 = *(arg_24h);
0x08005390 ldrh r1, [r4] | r1 = *(r4);
0x08005394 mov r2, r8 | r2 = r8;
0x08005398 str r3, [sp] | *(sp) = r3;
0x0800539c ldr r3, [r5, 0xe0] | r3 = *((r5 + 0xe0));
0x080053a0 ldr r0, [r5, 0x2c] | r0 = *((r5 + 0x2c));
0x080053a4 bl 0x8001408 | r0 = vxlan_find_sock ();
0x080053a8 cmp r0, 0 |
| if (r0 != 0) {
0x080053ac beq 0x80053e8 |
0x080053b0 ldr r2, [sp, 0x28] | r2 = *(arg_28h);
0x080053b4 ldr r1, [sp, 0x24] | r1 = *(arg_24h);
0x080053b8 bl 0x8000070 | r0 = vxlan_vs_find_vni ();
0x080053bc subs r2, r0, 0 | r2 = r0 - 0;
| if (r2 == r0) {
0x080053c0 beq 0x80053e8 | goto label_1;
| }
0x080053c4 mov r0, r6 | r0 = r6;
0x080053c8 mov r4, 1 | r4 = 1;
0x080053cc ldr r3, [sp, 0x28] | r3 = *(arg_28h);
0x080053d0 mov r1, r5 | r1 = r5;
0x080053d4 str r4, [sp] | *(sp) = r4;
0x080053d8 bl 0x80051b4 | vxlan_encap_bypass ();
0x080053dc mov r0, r4 | r0 = r4;
0x080053e0 add sp, sp, 8 |
0x080053e4 pop {r4, r5, r6, r7, r8, pc} |
| }
| label_1:
0x080053e8 ldr r3, [r7, 0xc4] | r3 = *((r7 + 0xc4));
0x080053ec mov r0, r6 | r0 = r6;
0x080053f0 add r3, r3, 1 | r3++;
0x080053f4 str r3, [r7, 0xc4] | *((r7 + 0xc4)) = r3;
0x080053f8 stmdaeq r0, {r4, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r7, fp, sp, lr, pc}");
0x080053fc mvn r0, 1 | r0 = ~1;
0x08005400 b 0x8005368 | 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/drivers/net/vxlan.ko @ 0x8002d28 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.vxlan_err_lookup () | void vxlan_err_lookup (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x08002d28 push {r4, r5, r6, lr} |
0x08002d2c mov r4, r1 | r4 = r1;
0x08002d30 mov r5, r0 | r5 = r0;
0x08002d34 ldr ip, [r1, 0xa4] | ip = *((r1 + 0xa4));
0x08002d38 ldrh r2, [r1, 0x96] | r2 = *((r1 + 0x96));
0x08002d3c ldr r1, [r1, 0xa8] | r1 = *((r1 + 0xa8));
0x08002d40 add r3, ip, r2 | r3 = ip + r2;
0x08002d44 sub r3, r3, r1 | r3 -= r1;
0x08002d48 ldrd r0, r1, [r4, 0x54] | __asm ("ldrd r0, r1, [r4, 0x54]");
0x08002d4c add r3, r3, 0x10 | r3 += 0x10;
0x08002d50 sub lr, r0, r1 | lr = r0 - r1;
0x08002d54 cmp r3, lr |
0x08002d58 bhi 0x8002da4 |
| while (1) {
0x08002d5c add r2, r2, 8 | r2 += 8;
0x08002d60 add r1, ip, r2 | r1 = ip + r2;
0x08002d64 ldr r3, [ip, r2] | r3 = *((ip + r2));
0x08002d68 tst r3, 8 |
| if ((r3 & 8) == 0) {
0x08002d6c beq 0x8002dd8 | goto label_0;
| }
0x08002d70 ldr r3, [r5, 0x1b8] | r3 = *((r5 + 0x1b8));
0x08002d74 bic r0, r3, 3 | r0 = BIT_MASK (r3, 3);
0x08002d78 cmp r3, 3 |
| if (r3 < 3) {
0x08002d7c bls 0x8002dd0 | goto label_1;
| }
0x08002d80 ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x08002d84 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x08002d88 lsl r2, r2, 8 | r2 <<= 8;
0x08002d8c ldr r1, [r3, 0xa8] | r1 = *((r3 + 0xa8));
0x08002d90 bl 0x8000070 | r0 = vxlan_vs_find_vni ();
0x08002d94 cmp r0, 0 |
| if (r0 == 0) {
0x08002d98 beq 0x8002dd0 | goto label_1;
| }
0x08002d9c mov r0, 0 | r0 = 0;
0x08002da0 pop {r4, r5, r6, pc} |
0x08002da4 cmp r3, r0 |
| if (r3 > r0) {
0x08002da8 bhi 0x8002dd8 | goto label_0;
| }
0x08002dac sub r1, r1, r0 | r1 -= r0;
0x08002db0 mov r0, r4 | r0 = r4;
0x08002db4 add r1, r1, r3 | r1 += r3;
0x08002db8 stmdaeq r0, {r4, r5, r6, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r5, r6, fp, sp, lr, pc}");
0x08002dbc cmp r0, 0 |
| if (r0 == 0) {
0x08002dc0 beq 0x8002dd8 | goto label_0;
| }
0x08002dc4 ldr ip, [r4, 0xa4] | ip = *((r4 + 0xa4));
0x08002dc8 ldrh r2, [r4, 0x96] | r2 = *((r4 + 0x96));
0x08002dcc b 0x8002d5c |
| }
| label_1:
0x08002dd0 mvn r0, 1 | r0 = ~1;
0x08002dd4 pop {r4, r5, r6, pc} |
| label_0:
0x08002dd8 mvn r0, 0x15 | r0 = ~0x15;
0x08002ddc pop {r4, r5, r6, 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/drivers/net/vxlan.ko @ 0x8005fc0 */
| #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.vxlan_rcv () | void vxlan_rcv (int32_t arg1, int32_t arg2) {
| int32_t var_1h;
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_18h_2;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_25h;
| int32_t var_26h;
| int32_t var_2ch;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_4ch;
| r0 = arg1;
| r1 = arg2;
0x08005fc0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x08005fc4 mov r4, r1 | r4 = r1;
0x08005fc8 mov r6, r0 | r6 = r0;
0x08005fcc ldr r1, [r1, 0x54] | r1 = *((r1 + 0x54));
0x08005fd0 sub sp, sp, 0x4c |
0x08005fd4 ldr r3, [r4, 0x58] | r3 = *((r4 + 0x58));
0x08005fd8 sub r2, r1, r3 | r2 = r1 - r3;
0x08005fdc cmp r2, 0xf |
| if (r2 < 0xf) {
0x08005fe0 bls 0x80060bc | goto label_24;
| }
| label_1:
0x08005fe4 ldrh r2, [r4, 0x96] | r2 = *((r4 + 0x96));
0x08005fe8 add ip, sp, 0x24 |
0x08005fec ldr r3, [r4, 0xa4] | r3 = *((r4 + 0xa4));
0x08005ff0 add r2, r2, 8 | r2 += 8;
0x08005ff4 add r3, r3, r2 | r3 += r2;
0x08005ff8 ldm r3, {r0, r1} | r0 = *(r3);
| r1 = *((r3 + 4));
0x08005ffc stm ip, {r0, r1} | *(ip) = r0;
| *((ip + 4)) = r1;
0x08006000 mov fp, r0 |
0x08006004 mov r5, r1 | r5 = r1;
0x08006008 tst r0, 8 |
| if ((r0 & 8) == 0) {
0x0800600c beq 0x8006024 | goto label_0;
| }
0x08006010 ldr r6, [r6, 0x1b8] | r6 = *((r6 + 0x1b8));
0x08006014 bic r8, r0, 8 | r8 = BIT_MASK (r0, 8);
0x08006018 str r8, [sp, 0x24] | var_24h = r8;
0x0800601c cmp r6, 3 |
0x08006020 bhi 0x8006038 |
| while (r7 == r0) {
| label_0:
0x08006024 mov r0, r4 | r0 = r4;
0x08006028 stmdaeq r0, {r4, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r7, fp, sp, lr, pc}");
| label_2:
0x0800602c mov r0, 0 | r0 = 0;
0x08006030 add sp, sp, 0x4c |
0x08006034 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x08006038 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0800603c bic r6, r6, 3 | r6 = BIT_MASK (r6, 3);
0x08006040 lsl sl, r5, 8 | sl = r5 << 8;
0x08006044 mov r0, r6 | r0 = r6;
0x08006048 mov r2, sl | r2 = sl;
0x0800604c ldr r1, [r3, 0xa8] | r1 = *((r3 + 0xa8));
0x08006050 bl 0x8000070 | r0 = vxlan_vs_find_vni ();
0x08006054 subs r7, r0, 0 | r7 = r0 - 0;
0x08006058 beq 0x8006024 |
| }
0x0800605c add sb, r6, 0x1000 | sb = r6 + 0x1000;
0x08006060 ldr r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x08006064 ands r3, r3, 0x4000 | r3 &= 0x4000;
| if (r3 == r3) {
0x08006068 beq 0x80060e0 | goto label_25;
| }
0x0800606c tst r8, 4 |
0x08006070 uxtb r3, r8 | r3 = (int8_t) r8;
| if ((r8 & 4) == 0) {
0x08006074 beq 0x8006024 | goto label_0;
| }
0x08006078 tst r3, 0x31 |
| if ((r3 & 0x31) != 0) {
0x0800607c bne 0x8006024 | goto label_0;
| }
0x08006080 ubfx r3, r8, 0x18, 8 | r3 = (r8 >> 0x18) & ((1 << 8) - 1);
0x08006084 sub r3, r3, 1 | r3--;
0x08006088 uxtb r3, r3 | r3 = (int8_t) r3;
0x0800608c cmp r3, 4 |
| if (r3 > 4) {
0x08006090 bhi 0x8006024 | goto label_0;
| }
0x08006094 ldr r2, [pc, 0x828] | r2 = *(0x80068c0);
0x08006098 lsl r3, r3, 1 | r3 <<= 1;
0x0800609c ldrh r2, [r2, r3] | r2 = *((r2 + r3));
0x080060a0 cmp r2, 0 |
| if (r2 == 0) {
0x080060a4 beq 0x8006024 | goto label_0;
| }
0x080060a8 bic fp, fp, 0xff000000 | fp = BIT_MASK (fp, 0xff000000);
0x080060ac mov r8, 1 | r8 = 1;
0x080060b0 bic fp, fp, 0x3d | fp = BIT_MASK (fp, 0x3d);
0x080060b4 str fp, [sp, 0x24] | var_24h = fp;
0x080060b8 b 0x80060e8 | goto label_26;
| label_24:
0x080060bc cmp r1, 0xf |
| if (r1 < 0xf) {
0x080060c0 bls 0x8006024 | goto label_0;
| }
0x080060c4 add r3, r3, 0x10 | r3 += 0x10;
0x080060c8 mov r0, r4 | r0 = r4;
0x080060cc sub r1, r3, r1 | r1 = r3 - r1;
0x080060d0 stmdaeq r0, {r4, r5, r6, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r5, r6, fp, sp, lr, pc}");
0x080060d4 cmp r0, 0 |
| if (r0 == 0) {
0x080060d8 beq 0x8006024 | goto label_0;
| }
0x080060dc b 0x8005fe4 | goto label_1;
| label_25:
0x080060e0 mov r8, r3 | r8 = r3;
0x080060e4 movw r2, 0x5865 | r2 = 0x5865;
| label_26:
0x080060e8 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x080060ec mov r0, r4 | r0 = r4;
0x080060f0 ldr r1, [r7, 0x2c] | r1 = *((r7 + 0x2c));
0x080060f4 ldr r3, [r3, 0x2b4] | r3 = *((r3 + 0x2b4));
0x080060f8 subs r3, r3, r1 | r3 -= r1;
0x080060fc mov r1, 0x10 | r1 = 0x10;
| if (r3 == r3) {
0x08006100 movne r3, 1 | r3 = 1;
| }
0x08006104 str r3, [sp] | *(sp) = r3;
0x08006108 mov r3, r8 | r3 = r8;
0x0800610c stmdaeq r0, {r5, r6, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r5, r6, r7, fp, sp, lr, pc}");
0x08006110 cmp r0, 0 |
| if (r0 != 0) {
0x08006114 bne 0x8006024 | goto label_0;
| }
0x08006118 ldr r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x0800611c and fp, r5, 0xff000000 |
0x08006120 tst r2, 0x400 |
| if ((r2 & 0x400) != 0) {
0x08006124 bne 0x80062b0 | goto label_27;
| }
| label_4:
0x08006128 ands r1, r2, 0x2000 | r1 = r2 & 0x2000;
| if (r1 != r2) {
0x0800612c bne 0x800626c | goto label_28;
| }
0x08006130 stmdaeq r0, {r2, r5, r6, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r5, r6, r7, fp, sp, lr, pc}");
0x08006134 stmdaeq r0, {r2, r5, r6, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r5, r6, r7, fp, sp, lr, pc}");
0x08006138 ldr r3, [r3] | r3 = *(r3);
0x0800613c cmp r3, 0 |
| if (r3 > 0) {
0x08006140 bgt 0x800626c | goto label_28;
| }
0x08006144 add r0, sp, 0x20 | r0 += var_20h;
0x08006148 str r1, [sp, 0x20] | var_20h = r1;
| label_3:
0x0800614c ldr r3, [sp, 0x24] | r3 = var_24h;
0x08006150 tst r2, 0x800 |
| if ((r2 & 0x800) != 0) {
0x08006154 bne 0x80063ac | goto label_29;
| }
| label_5:
0x08006158 orrs r3, r3, fp | r3 |= fp;
| if (r3 != r3) {
0x0800615c bne 0x8006024 | goto label_0;
| }
0x08006160 ldr r0, [r4, 0xa8] | r0 = *((r4 + 0xa8));
0x08006164 cmp r8, 0 |
0x08006168 ldr ip, [r4, 0xa4] | ip = *((r4 + 0xa4));
0x0800616c sub r2, r0, ip | r2 = r0 - ip;
0x08006170 uxth r2, r2 | r2 = (int16_t) r2;
| if (r8 == 0) {
0x08006174 beq 0x8006420 | goto label_30;
| }
0x08006178 ldrb r1, [r4, 0x64] | r1 = *((r4 + 0x64));
0x0800617c strh r2, [r4, 0x9a] | *((r4 + 0x9a)) = r2;
0x08006180 ldrh lr, [r4, 0x98] |
0x08006184 bfi r1, r3, 0, 3 | value_0 = BIT_MASK (0, 3);
| value_1 = r3 & value_0;
| value_0 = ~value_0;
| r1 &= value_0;
| r1 |= value_1;
0x08006188 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x0800618c str r3, [r4, 8] | *((r4 + 8)) = r3;
0x08006190 strb r1, [r4, 0x64] | *((r4 + 0x64)) = r1;
| label_6:
0x08006194 strh r2, [r4, 0x98] | *((r4 + 0x98)) = r2;
0x08006198 add r8, ip, lr | r8 = ip + lr;
0x0800619c ldrh r3, [r4, 0x94] | r3 = *((r4 + 0x94));
0x080061a0 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x080061a4 ldrh r5, [r4, 0x5c] | r5 = *((r4 + 0x5c));
0x080061a8 ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x080061ac ldrh r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x080061b0 cmp r2, 2 |
| if (r2 == 2) {
0x080061b4 beq 0x80064f4 | goto label_31;
| }
0x080061b8 cmp r3, 0x81 |
| if (r3 == 0x81) {
0x080061bc beq 0x8006544 | goto label_32;
| }
0x080061c0 movw r2, 0xa888 | r2 = 0xa888;
0x080061c4 cmp r3, r2 |
| if (r3 == r2) {
0x080061c8 beq 0x8006544 | goto label_32;
| }
| label_9:
0x080061cc cmp r3, 8 |
| if (r3 == 8) {
0x080061d0 beq 0x80065d4 | goto label_33;
| }
0x080061d4 movw r2, 0xdd86 | r2 = 0xdd86;
0x080061d8 cmp r3, r2 |
| if (r3 == r2) {
0x080061dc bne 0x8006214 |
0x080061e0 ldrh r3, [r4, 0x98] | r3 = *((r4 + 0x98));
0x080061e4 ldr r2, [r4, 0xa4] | r2 = *((r4 + 0xa4));
0x080061e8 ldrh r2, [r2, r3] | r2 = *((r2 + r3));
0x080061ec rev16 r2, r2 | __asm ("rev16 r2, r2");
0x080061f0 ubfx r2, r2, 4, 8 | r2 = (r2 >> 4) & ((1 << 8) - 1);
| label_12:
0x080061f4 ldrh r1, [r8] | r1 = *(r8);
0x080061f8 mov r0, r4 | r0 = r4;
0x080061fc rev16 r1, r1 | __asm ("rev16 r1, r1");
0x08006200 ubfx r1, r1, 4, 8 | r1 = (r1 >> 4) & ((1 << 8) - 1);
0x08006204 bl 0x8002430 | r0 = INET_ECN_decapsulate ();
0x08006208 mov r5, r0 | r5 = r0;
| label_8:
0x0800620c cmp r5, 0 |
| if (r5 != 0) {
0x08006210 bne 0x8006694 | goto label_34;
| }
| }
| label_7:
0x08006214 stmdaeq r0, {r7, r8, sb, sl, sp, lr, pc} | __asm ("stmdaeq r0, {r7, r8, sb, sl, sp, lr, pc}");
0x08006218 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x0800621c ldr r2, [r3, 0x130] | r2 = *((r3 + 0x130));
0x08006220 tst r2, 1 |
| if ((r2 & 1) == 0) {
0x08006224 beq 0x8006798 | goto label_35;
| }
0x08006228 ldr r3, [r3, 0x2c0] | r3 = *((r3 + 0x2c0));
0x0800622c mov r1, r4 | r1 = r4;
0x08006230 ldr ip, [r4, 0x54] | ip = *((r4 + 0x54));
0x08006234 add r0, r7, 0x8c | r0 = r7 + 0x8c;
0x08006238 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0800623c ldr lr, [r3, 0xc] |
0x08006240 adds r2, r2, ip | r2 += ip;
0x08006244 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x08006248 ldm r3, {r2, ip} | r2 = *(r3);
| ip = *((r3 + 4));
0x0800624c adc lr, lr, 0 | __asm ("adc lr, lr, 0");
0x08006250 str lr, [r3, 0xc] |
0x08006254 adds r2, r2, 1 | r2++;
0x08006258 adc ip, ip, 0 | __asm ("adc ip, ip, 0");
0x0800625c stm r3, {r2, ip} | *(r3) = r2;
| *((r3 + 4)) = ip;
0x08006260 stmdaeq r0, {r3, r5, r6, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r3, r5, r6, r7, fp, sp, lr, pc}");
0x08006264 stmdaeq r0, {r2, r7, r8, sb, sl, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r7, r8, sb, sl, sp, lr, pc}");
0x08006268 b 0x800602c | goto label_2;
| label_28:
0x0800626c ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x08006270 mov r0, r4 | r0 = r4;
0x08006274 mov r2, 0x400 | r2 = 0x400;
0x08006278 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0800627c ldrh r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x08006280 mov r3, 4 | r3 = 4;
0x08006284 str sl, [sp, 4] | var_4h = sl;
0x08006288 str r3, [sp, 8] | var_8h = r3;
0x0800628c mov r3, 0 | r3 = 0;
0x08006290 str r3, [sp] | *(sp) = r3;
0x08006294 stmdaeq r0, {r2, r3, r5, r6, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r5, r6, r7, fp, sp, lr, pc}");
0x08006298 cmp r0, 0 |
| if (r0 == 0) {
0x0800629c beq 0x8006024 | goto label_0;
| }
0x080062a0 str r0, [r4, 0x48] | *((r4 + 0x48)) = r0;
0x080062a4 add r0, r0, 0x90 | r0 += 0x90;
0x080062a8 ldr r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x080062ac b 0x800614c | goto label_3;
| label_27:
0x080062b0 ldr r3, [sp, 0x24] | r3 = var_24h;
0x080062b4 tst r3, 0x2000 |
| if ((r3 & 0x2000) != 0) {
0x080062b8 beq 0x800639c |
0x080062bc ldrb r1, [r4, 0x67] | r1 = *((r4 + 0x67));
0x080062c0 tst r1, 4 |
| if ((r1 & 4) != 0) {
0x080062c4 bne 0x800639c | goto label_20;
| }
0x080062c8 and r1, r5, 0x7f000000 | r1 = r5 & 0x7f000000;
0x080062cc cmp fp, 0 |
0x080062d0 rev r1, r1 | r1 = SWAP32 (r1);
0x080062d4 ldr ip, [r4, 0x54] | ip = *((r4 + 0x54));
0x080062d8 ldr r0, [r4, 0x58] | r0 = *((r4 + 0x58));
0x080062dc lsl fp, r1, 1 |
| if (fp < 0) {
0x080062e0 movge r1, 0x10 | r1 = 0x10;
| }
| if (fp >= 0) {
0x080062e4 movlt r1, 6 | r1 = 6;
| }
0x080062e8 str r1, [sp, 0x14] | var_14h = r1;
0x080062ec add r1, fp, r1 | r1 = fp + r1;
0x080062f0 sub lr, ip, r0 | lr = ip - r0;
0x080062f4 str r1, [sp, 0x10] | var_10h = r1;
0x080062f8 add r1, r1, 2 | r1 += 2;
0x080062fc cmp r1, lr |
| if (r1 > lr) {
0x08006300 bhi 0x80067c0 | goto label_36;
| }
| label_21:
0x08006304 ldrh r5, [r4, 0x96] | r5 = *((r4 + 0x96));
0x08006308 tst r2, 0x1000 |
0x0800630c ldr r2, [r4, 0xa4] | r2 = *((r4 + 0xa4));
0x08006310 add r5, r5, 0x10 | r5 += 0x10;
0x08006314 add r5, r2, r5 | r5 = r2 + r5;
| if ((r2 & 0x1000) == 0) {
0x08006318 beq 0x8006770 | goto label_37;
| }
0x0800631c ldrb r2, [r4, 0x64] | r2 = *((r4 + 0x64));
0x08006320 and r2, r2, 0x60 | r2 &= 0x60;
0x08006324 cmp r2, 0x40 |
| if (r2 != 0x40) {
0x08006328 bne 0x800682c | goto label_38;
| }
| label_23:
0x0800632c mov r1, fp | r1 = fp;
0x08006330 ldr fp, [r4, 0x6c] | fp = *((r4 + 0x6c));
0x08006334 mov r2, 0 | r2 = 0;
0x08006338 mov r0, r5 | r0 = r5;
0x0800633c str r3, [sp, 0x14] | var_14h = r3;
0x08006340 stmdaeq r0, {r2, r3, r5, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r5, r7, fp, sp, lr, pc}");
0x08006344 sub r2, fp, 1 | r2 = fp - 1;
0x08006348 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0800634c sub r2, r2, r0 | r2 -= r0;
0x08006350 mvn r0, r0 | r0 = ~r0;
0x08006354 cmp r0, r2 |
| if (r0 <= r2) {
0x08006358 addhi r2, r2, 1 | r2++;
| }
0x0800635c add r2, r2, r2, ror 16 | r2 += (r2 >>> 16);
0x08006360 mvn r2, r2 | r2 = ~r2;
0x08006364 ldrh r1, [r5, r3] | r1 = *((r5 + r3));
0x08006368 lsr r2, r2, 0x10 | r2 >>= 0x10;
0x0800636c strh r2, [r5, r3] | *((r5 + r3)) = r2;
0x08006370 sub r2, r2, r1 | r2 -= r1;
0x08006374 mvn r1, r1 | r1 = ~r1;
0x08006378 sub r2, r2, 1 | r2--;
0x0800637c ldr r3, [sp, 0x14] | r3 = var_14h;
0x08006380 cmp r1, r2 |
| if (r1 <= r2) {
0x08006384 addhi r2, r2, 1 | r2++;
| }
0x08006388 ldr r1, [r4, 0x6c] | r1 = *((r4 + 0x6c));
0x0800638c adds r2, r1, r2 | r2 = r1 + r2;
0x08006390 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x08006394 str r2, [r4, 0x6c] | *((r4 + 0x6c)) = r2;
0x08006398 ldr r2, [sb, 0x10] | r2 = *((sb + 0x10));
| }
| label_20:
0x0800639c bic r3, r3, 0x2000 | r3 = BIT_MASK (r3, 0x2000);
0x080063a0 mov fp, 0 |
0x080063a4 str r3, [sp, 0x24] | var_24h = r3;
0x080063a8 b 0x8006128 | goto label_4;
| label_29:
0x080063ac tst r3, 0x80 |
| if ((r3 & 0x80) != 0) {
0x080063b0 beq 0x8006418 |
0x080063b4 ldrh r1, [sp, 0x26] | r1 = var_26h;
0x080063b8 rev16 r1, r1 | __asm ("rev16 r1, r1");
0x080063bc uxth r1, r1 | r1 = (int16_t) r1;
0x080063c0 str r1, [r0] | *(r0) = r1;
0x080063c4 ldr r1, [r4, 0x48] | r1 = *((r4 + 0x48));
0x080063c8 cmp r1, 1 |
| if (r1 >= 1) {
0x080063cc bls 0x80063e8 |
0x080063d0 bic r1, r1, 1 | r1 = BIT_MASK (r1, 1);
0x080063d4 mov ip, 4 |
0x080063d8 strb ip, [r1, 0x88] | *((r1 + 0x88)) = ip;
0x080063dc ldrh ip, [r1, 0x70] | ip = *((r1 + 0x70));
0x080063e0 orr ip, ip, 0x10 |
0x080063e4 strh ip, [r1, 0x70] | *((r1 + 0x70)) = ip;
| }
0x080063e8 ldrb r1, [sp, 0x25] | r1 = var_25h;
0x080063ec tst r1, 0x40 |
| if ((r1 & 0x40) == 0) {
0x080063f0 ldrne ip, [r0] | ip = *(r0);
| }
| if ((r1 & 0x40) == 0) {
0x080063f4 orrne ip, ip, 0x400000 |
| }
| if ((r1 & 0x40) == 0) {
0x080063f8 strne ip, [r0] | *(r0) = ip;
| }
0x080063fc tst r1, 8 |
| if ((r1 & 8) == 0) {
0x08006400 ldrne r1, [r0] | r1 = *(r0);
| }
| if ((r1 & 8) == 0) {
0x08006404 orrne r1, r1, 0x80000 | r1 |= 0x80000;
| }
| if ((r1 & 8) == 0) {
0x08006408 strne r1, [r0] | *(r0) = r1;
| }
0x0800640c tst r2, 0x2000 |
| if ((r2 & 0x2000) != 0) {
0x08006410 ldreq r2, [r0] | r2 = *(r0);
| }
| if ((r2 & 0x2000) == 0) {
0x08006414 streq r2, [r4, 0x88] | *((r4 + 0x88)) = r2;
| goto label_39;
| }
| }
| label_39:
0x08006418 and r3, r3, 0x7f | r3 &= 0x7f;
0x0800641c b 0x8006158 | goto label_5;
| label_30:
0x08006420 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x08006424 mov r0, r4 | r0 = r4;
0x08006428 ldr r5, [r3, 0xa8] | r5 = *((r3 + 0xa8));
0x0800642c strh r2, [r4, 0x9a] | *((r4 + 0x9a)) = r2;
0x08006430 ldr r1, [r7, 0x28] | r1 = *((r7 + 0x28));
0x08006434 stmdaeq r0, {r4, r5, r6, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r5, r6, r7, fp, sp, lr, pc}");
0x08006438 ldrb r2, [r4, 0x64] | r2 = *((r4 + 0x64));
0x0800643c ldr ip, [r4, 0xa4] | ip = *((r4 + 0xa4));
0x08006440 ldrh sb, [r4, 0x9a] | sb = *((r4 + 0x9a));
0x08006444 and r3, r2, 0x60 | r3 = r2 & 0x60;
0x08006448 cmp r3, 0x40 |
0x0800644c strh r0, [r4, 0x94] | *((r4 + 0x94)) = r0;
0x08006450 add sb, ip, sb | sb = ip + sb;
| if (r3 == 0x40) {
0x08006454 beq 0x8006734 | goto label_40;
| }
0x08006458 cmp r3, 0x60 |
| if (r3 == 0x60) {
0x0800645c bne 0x8006478 |
0x08006460 ldr r3, [r4, 0xa8] | r3 = *((r4 + 0xa8));
0x08006464 ldrh r1, [r4, 0x6c] | r1 = *((r4 + 0x6c));
0x08006468 sub r3, ip, r3 | r3 = ip - r3;
0x0800646c cmn r3, r1 |
0x08006470 bfimi r2, r8, 5, 2 | __asm ("bfimi r2, r8, 5, 2");
| if (r3 < r1) {
0x08006474 strbmi r2, [r4, 0x64] | *((r4 + 0x64)) = r2;
| goto label_19;
| }
| }
| label_19:
0x08006478 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x0800647c ldrh r2, [sb, 0xa] | r2 = *((sb + 0xa));
0x08006480 ldr r1, [r3, 0x1c8] | r1 = *((r3 + 0x1c8));
0x08006484 ldr r3, [sb, 6] | r3 = *((sb + 6));
0x08006488 ldr r0, [r1] | r0 = *(r1);
0x0800648c ldrh r1, [r1, 4] | r1 = *((r1 + 4));
0x08006490 eor r3, r3, r0 | r3 ^= r0;
0x08006494 eor r2, r2, r1 | r2 ^= r1;
0x08006498 orrs r3, r3, r2 | r3 |= r2;
| if (r3 == r3) {
0x0800649c beq 0x8006024 | goto label_0;
| }
0x080064a0 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x080064a4 ldrh lr, [r4, 0x98] |
0x080064a8 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x080064ac ldrh r8, [r3, 0x10] | r8 = *((r3 + 0x10));
0x080064b0 add r3, ip, lr | r3 = ip + lr;
0x080064b4 cmp r8, 2 |
| if (r8 == 2) {
0x080064b8 addne r3, r3, 8 | r3 += 8;
| }
| if (r8 == 2) {
0x080064bc addne fp, sp, 0x34 |
| }
| if (r8 == 2) {
0x080064c0 movne r8, 0xa | r8 = 0xa;
| }
| if (r8 != 2) {
0x080064c4 ldreq r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| }
| if (r8 == 2) {
0x080064c8 ldmne r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
| }
| if (r8 == 2) {
0x080064cc stmne fp, {r0, r1, r2, r3} | *(fp) = r0;
| *((fp + 4)) = r1;
| *((fp + 8)) = r2;
| *((fp + 12)) = r3;
| }
| if (r8 != 2) {
0x080064d0 streq r3, [sp, 0x30] | var_30h = r3;
| }
0x080064d4 strh r8, [sp, 0x2c] | var_2ch = r8;
0x080064d8 ldr r3, [r7, 0xe0] | r3 = *((r7 + 0xe0));
0x080064dc tst r3, 1 |
| if ((r3 & 1) != 0) {
0x080064e0 bne 0x80066fc | goto label_41;
| }
0x080064e4 ldr r0, [r4, 0xa8] | r0 = *((r4 + 0xa8));
0x080064e8 sub r2, r0, ip | r2 = r0 - ip;
0x080064ec uxth r2, r2 | r2 = (int16_t) r2;
0x080064f0 b 0x8006194 | goto label_6;
| label_31:
0x080064f4 cmp r3, 0x81 |
| if (r3 == 0x81) {
0x080064f8 beq 0x80065e8 | goto label_42;
| }
0x080064fc movw r2, 0xa888 | r2 = 0xa888;
0x08006500 cmp r3, r2 |
| if (r3 == r2) {
0x08006504 beq 0x80065e8 | goto label_42;
| }
| label_13:
0x08006508 cmp r3, 8 |
| if (r3 == 8) {
0x0800650c beq 0x8006680 | goto label_43;
| }
0x08006510 movw r2, 0xdd86 | r2 = 0xdd86;
0x08006514 cmp r3, r2 |
| if (r3 != r2) {
0x08006518 bne 0x8006214 | goto label_7;
| }
0x0800651c ldrh r3, [r4, 0x98] | r3 = *((r4 + 0x98));
0x08006520 ldr r2, [r4, 0xa4] | r2 = *((r4 + 0xa4));
0x08006524 ldrh r2, [r2, r3] | r2 = *((r2 + r3));
0x08006528 rev16 r2, r2 | __asm ("rev16 r2, r2");
0x0800652c ubfx r2, r2, 4, 8 | r2 = (r2 >> 4) & ((1 << 8) - 1);
| label_17:
0x08006530 ldrb r1, [r8, 1] | r1 = *((r8 + 1));
0x08006534 mov r0, r4 | r0 = r4;
0x08006538 bl 0x8002430 | r0 = INET_ECN_decapsulate ();
0x0800653c mov r5, r0 | r5 = r0;
0x08006540 b 0x800620c | goto label_8;
| label_32:
0x08006544 cmp r5, 0 |
| if (r5 == 0) {
0x08006548 beq 0x8006678 | goto label_44;
| }
0x0800654c cmp r5, 3 |
| if (r5 < 3) {
0x08006550 bls 0x80067ec | goto label_45;
| }
0x08006554 sub r5, r5, 4 | r5 -= 4;
| label_16:
0x08006558 add sb, r5, 0x1c | sb = r5 + 0x1c;
0x0800655c movw sl, 0xa888 | sl = 0xa888;
| label_10:
0x08006560 ldr ip, [r4, 0x54] | ip = *((r4 + 0x54));
0x08006564 mov r1, r5 | r1 = r5;
0x08006568 ldr lr, [r4, 0x58] |
0x0800656c add r2, sp, 0x2c | r2 += var_2ch;
0x08006570 mov r3, 4 | r3 = 4;
0x08006574 sub ip, ip, lr |
0x08006578 sub ip, ip, r5 |
0x0800657c cmp ip, 3 |
| if (ip > 3) {
0x08006580 bgt 0x80065c8 | goto label_46;
| }
0x08006584 cmp r4, 0 |
| if (r4 == 0) {
0x08006588 beq 0x8006214 | goto label_7;
| }
0x0800658c mov r0, r4 | r0 = r4;
0x08006590 stmdaeq r0, {r5, r6, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r5, r6, fp, sp, lr, pc}");
0x08006594 add r3, sp, 0x2c | r3 += var_2ch;
0x08006598 cmp r0, 0 |
| if (r0 < 0) {
0x0800659c blt 0x8006214 | goto label_7;
| }
| label_11:
0x080065a0 cmp sb, r5 |
| if (sb == r5) {
0x080065a4 beq 0x8006214 | goto label_7;
| }
0x080065a8 ldrh r3, [r3, 2] | r3 = *((r3 + 2));
0x080065ac add r5, r5, 4 | r5 += 4;
0x080065b0 cmp r3, 0x81 |
| if (r3 == 0x81) {
0x080065b4 beq 0x80065c0 | goto label_47;
| }
0x080065b8 cmp r3, sl |
| if (r3 != sl) {
0x080065bc bne 0x80061cc | goto label_9;
| }
| label_47:
0x080065c0 ldr r0, [r4, 0xa8] | r0 = *((r4 + 0xa8));
0x080065c4 b 0x8006560 | goto label_10;
| label_46:
0x080065c8 adds r3, r0, r5 | r3 = r0 + r5;
| if (r3 != r0) {
0x080065cc bne 0x80065a0 | goto label_11;
| }
0x080065d0 b 0x8006214 | goto label_7;
| label_33:
0x080065d4 ldrh r2, [r4, 0x98] | r2 = *((r4 + 0x98));
0x080065d8 ldr r3, [r4, 0xa4] | r3 = *((r4 + 0xa4));
0x080065dc add r3, r3, r2 | r3 += r2;
0x080065e0 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x080065e4 b 0x80061f4 | goto label_12;
| label_42:
0x080065e8 cmp r5, 0 |
| if (r5 == 0) {
0x080065ec beq 0x80066f4 | goto label_48;
| }
0x080065f0 cmp r5, 3 |
| if (r5 <= 3) {
0x080065f4 subhi r5, r5, 4 | r5 -= 4;
| }
| if (r5 < 3) {
0x080065f8 bls 0x80067ec | goto label_45;
| }
| label_18:
0x080065fc add sb, r5, 0x1c | sb = r5 + 0x1c;
0x08006600 movw sl, 0xa888 | sl = 0xa888;
| label_14:
0x08006604 ldr ip, [r4, 0x54] | ip = *((r4 + 0x54));
0x08006608 mov r1, r5 | r1 = r5;
0x0800660c ldr lr, [r4, 0x58] |
0x08006610 add r2, sp, 0x2c | r2 += var_2ch;
0x08006614 mov r3, 4 | r3 = 4;
0x08006618 sub ip, ip, lr |
0x0800661c sub ip, ip, r5 |
0x08006620 cmp ip, 3 |
| if (ip > 3) {
0x08006624 bgt 0x800666c | goto label_49;
| }
0x08006628 cmp r4, 0 |
| if (r4 == 0) {
0x0800662c beq 0x8006214 | goto label_7;
| }
0x08006630 mov r0, r4 | r0 = r4;
0x08006634 stmdaeq r0, {r5, r6, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r5, r6, fp, sp, lr, pc}");
0x08006638 add r3, sp, 0x2c | r3 += var_2ch;
0x0800663c cmp r0, 0 |
| if (r0 < 0) {
0x08006640 blt 0x8006214 | goto label_7;
| }
| label_15:
0x08006644 cmp r5, sb |
| if (r5 == sb) {
0x08006648 beq 0x8006214 | goto label_7;
| }
0x0800664c ldrh r3, [r3, 2] | r3 = *((r3 + 2));
0x08006650 add r5, r5, 4 | r5 += 4;
0x08006654 cmp r3, 0x81 |
| if (r3 == 0x81) {
0x08006658 beq 0x8006664 | goto label_50;
| }
0x0800665c cmp r3, sl |
| if (r3 != sl) {
0x08006660 bne 0x8006508 | goto label_13;
| }
| label_50:
0x08006664 ldr r0, [r4, 0xa8] | r0 = *((r4 + 0xa8));
0x08006668 b 0x8006604 | goto label_14;
| label_49:
0x0800666c adds r3, r0, r5 | r3 = r0 + r5;
| if (r3 != r0) {
0x08006670 bne 0x8006644 | goto label_15;
| }
0x08006674 b 0x8006214 | goto label_7;
| label_44:
0x08006678 mov r5, 0xe | r5 = 0xe;
0x0800667c b 0x8006558 | goto label_16;
| label_43:
0x08006680 ldrh r2, [r4, 0x98] | r2 = *((r4 + 0x98));
0x08006684 ldr r3, [r4, 0xa4] | r3 = *((r4 + 0xa4));
0x08006688 add r3, r3, r2 | r3 += r2;
0x0800668c ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x08006690 b 0x8006530 | goto label_17;
| label_34:
0x08006694 stmdaeq r0, {r2, r3, r6, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r0, {r2, r3, r6, r7, sb, sl, fp, ip, pc}");
0x08006698 stmdaeq r0, {r2, r3, r6, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r0, {r2, r3, r6, r7, sb, sl, fp, ip, pc}");
0x0800669c ldrb r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x080066a0 cmp r3, 0 |
| if (r3 != 0) {
0x080066a4 beq 0x80066c8 |
0x080066a8 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x080066ac ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x080066b0 ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x080066b4 cmp r3, 2 |
| if (r3 == 2) {
0x080066b8 beq 0x8006808 | goto label_51;
| }
0x080066bc stmdaeq r0, {r3, r4, r5, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r3, r4, r5, r7, fp, sp, lr, pc}");
0x080066c0 cmp r0, 0 |
| if (r0 != 0) {
0x080066c4 bne 0x80068b0 | goto label_52;
| }
| }
| label_22:
0x080066c8 cmp r5, 1 |
| if (r5 <= 1) {
0x080066cc ble 0x8006214 | goto label_7;
| }
0x080066d0 ldr r2, [r7, 0x28] | r2 = *((r7 + 0x28));
0x080066d4 ldr r3, [r2, 0xe4] | r3 = *((r2 + 0xe4));
0x080066d8 add r3, r3, 1 | r3++;
0x080066dc str r3, [r2, 0xe4] | *((r2 + 0xe4)) = r3;
0x080066e0 ldr r2, [r7, 0x28] | r2 = *((r7 + 0x28));
0x080066e4 ldr r3, [r2, 0xc0] | r3 = *((r2 + 0xc0));
0x080066e8 add r3, r3, 1 | r3++;
0x080066ec str r3, [r2, 0xc0] | *((r2 + 0xc0)) = r3;
0x080066f0 b 0x8006024 | goto label_0;
| label_48:
0x080066f4 mov r5, 0xe | r5 = 0xe;
0x080066f8 b 0x80065fc | goto label_18;
| label_41:
0x080066fc str sl, [sp] | *(sp) = sl;
0x08006700 mov r3, r5 | r3 = r5;
0x08006704 add r2, sb, 6 | r2 = sb + 6;
0x08006708 add r1, sp, 0x2c | r1 += var_2ch;
0x0800670c ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x08006710 bl 0x8004f7c | r0 = vxlan_snoop ();
0x08006714 cmp r0, 0 |
| if (r0 != 0) {
0x08006718 bne 0x8006024 | goto label_0;
| }
0x0800671c ldr r0, [r4, 0xa8] | r0 = *((r4 + 0xa8));
0x08006720 ldr ip, [r4, 0xa4] | ip = *((r4 + 0xa4));
0x08006724 ldrh lr, [r4, 0x98] |
0x08006728 sub r2, r0, ip | r2 = r0 - ip;
0x0800672c uxth r2, r2 | r2 = (int16_t) r2;
0x08006730 b 0x8006194 | goto label_6;
| label_40:
0x08006734 mov r2, r8 | r2 = r8;
0x08006738 ldr r8, [r4, 0x6c] | r8 = *((r4 + 0x6c));
0x0800673c mov r0, sb | r0 = sb;
0x08006740 mov r1, 0xe | r1 = 0xe;
0x08006744 stmdaeq r0, {r2, r3, r5, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r5, r7, fp, sp, lr, pc}");
0x08006748 ldr ip, [r4, 0xa4] | ip = *((r4 + 0xa4));
0x0800674c ldrh sb, [r4, 0x9a] | sb = *((r4 + 0x9a));
0x08006750 sub r3, r8, 1 | r3 = r8 - 1;
0x08006754 sub r3, r3, r0 | r3 -= r0;
0x08006758 mvn r0, r0 | r0 = ~r0;
0x0800675c cmp r0, r3 |
| if (r0 <= r3) {
0x08006760 addhi r3, r3, 1 | r3++;
| }
0x08006764 add sb, ip, sb | sb = ip + sb;
0x08006768 str r3, [r4, 0x6c] | *((r4 + 0x6c)) = r3;
0x0800676c b 0x8006478 | goto label_19;
| label_37:
0x08006770 add r5, r5, fp | r5 += fp;
0x08006774 ldr r1, [sp, 0x14] | r1 = var_14h;
0x08006778 sub r2, r5, r2 | r2 = r5 - r2;
0x0800677c strh r2, [r4, 0x6c] | *((r4 + 0x6c)) = r2;
0x08006780 ldrb r2, [r4, 0x64] | r2 = *((r4 + 0x64));
0x08006784 strh r1, [r4, 0x6e] | *((r4 + 0x6e)) = r1;
0x08006788 orr r2, r2, 0x60 | r2 |= 0x60;
0x0800678c strb r2, [r4, 0x64] | *((r4 + 0x64)) = r2;
0x08006790 ldr r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x08006794 b 0x800639c | goto label_20;
| label_35:
0x08006798 stmdaeq r0, {r2, r7, r8, sb, sl, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r7, r8, sb, sl, sp, lr, pc}");
0x0800679c ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x080067a0 add r3, r3, 0x10c | r3 += 0x10c;
0x080067a4 pld [r3] | __asm ("pld [r3]");
| do {
0x080067a8 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x080067ac add r2, r2, 1 | r2++;
0x080067b0 strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x080067b4 teq r1, 0 | __asm ("teq r1, 0");
0x080067b8 bne 0x80067a8 |
| } while (r0 != r3);
0x080067bc b 0x8006024 | goto label_0;
| label_36:
0x080067c0 cmp r1, ip |
0x080067c4 strd r2, r3, [sp, 0x18] | __asm ("strd r2, r3, [var_18h]");
| if (r1 > ip) {
0x080067c8 bhi 0x8006024 | goto label_0;
| }
0x080067cc sub r0, r0, ip | r0 -= ip;
0x080067d0 add r1, r0, r1 | r1 = r0 + r1;
0x080067d4 mov r0, r4 | r0 = r4;
0x080067d8 stmdaeq r0, {r4, r5, r6, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r5, r6, fp, sp, lr, pc}");
0x080067dc cmp r0, 0 |
0x080067e0 ldrd r2, r3, [sp, 0x18] | __asm ("ldrd r2, r3, [var_18h]");
| if (r0 == 0) {
0x080067e4 beq 0x8006024 | goto label_0;
| }
0x080067e8 b 0x8006304 | goto label_21;
| label_45:
0x080067ec mov r3, 0 | r3 = 0;
0x080067f0 mov r2, 9 | r2 = 9;
0x080067f4 movw r1, 0x251 | r1 = 0x251;
0x080067f8 stmdaeq r0, {r3, r4, r7, r8, sb, sl, fp, pc} | __asm ("stmdaeq r0, {r3, r4, r7, r8, sb, sl, fp, pc}");
0x080067fc stmdaeq r0, {r3, r4, r7, r8, sb, sl, fp, pc} | __asm ("stmdaeq r0, {r3, r4, r7, r8, sb, sl, fp, pc}");
0x08006800 stmdaeq r0, {r2, r3, r4, r6, r7, r8, sb, sl, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r4, r6, r7, r8, sb, sl, sp, lr, pc}");
0x08006804 b 0x8006214 | goto label_7;
| label_51:
0x08006808 stmdaeq r0, {r3, r4, r5, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r3, r4, r5, r7, fp, sp, lr, pc}");
0x0800680c cmp r0, 0 |
| if (r0 == 0) {
0x08006810 beq 0x80066c8 | goto label_22;
| }
0x08006814 ldrb r2, [r8, 1] | r2 = *((r8 + 1));
0x08006818 add r1, r8, 0xc | r1 = r8 + 0xc;
0x0800681c stmdaeq r0, {r2, r4, r6, ip, pc} | __asm ("stmdaeq r0, {r2, r4, r6, ip, pc}");
0x08006820 stmdaeq r0, {r2, r4, r6, ip, pc} | __asm ("stmdaeq r0, {r2, r4, r6, ip, pc}");
0x08006824 stmdaeq r0, {r2, r4, r5, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r4, r5, r7, fp, sp, lr, pc}");
0x08006828 b 0x80066c8 | goto label_22;
| label_38:
0x0800682c mov r0, r4 | r0 = r4;
0x08006830 str r3, [sp, 0x14] | var_14h = r3;
0x08006834 stmdaeq r0, {r2, r4, r5, r6, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r4, r5, r6, r7, fp, sp, lr, pc}");
0x08006838 ldrb r2, [r4, 0x64] | r2 = *((r4 + 0x64));
0x0800683c ldr r0, [r4, 0xa8] | r0 = *((r4 + 0xa8));
0x08006840 and r1, r2, 0x60 | r1 = r2 & 0x60;
0x08006844 ldr r3, [sp, 0x14] | r3 = var_14h;
0x08006848 cmp r1, 0x40 |
| if (r1 == 0x40) {
0x0800684c beq 0x8006874 | goto label_53;
| }
0x08006850 cmp r1, 0x60 |
| if (r1 != 0x60) {
0x08006854 bne 0x800632c | goto label_23;
| }
0x08006858 ldr r1, [r4, 0xa4] | r1 = *((r4 + 0xa4));
0x0800685c sub r1, r1, r0 | r1 -= r0;
0x08006860 ldrh r0, [r4, 0x6c] | r0 = *((r4 + 0x6c));
0x08006864 cmn r1, r0 |
0x08006868 bfcmi r2, 5, 2 | __asm ("bfcmi r2, 5, 2");
| if (r1 >= r0) {
0x0800686c strbmi r2, [r4, 0x64] | *((r4 + 0x64)) = r2;
| }
0x08006870 b 0x800632c | goto label_23;
| label_53:
0x08006874 sub r1, r5, r0 | r1 = r5 - r0;
0x08006878 str r3, [sp, 0x18] | var_18h = r3;
0x0800687c mov r2, 0 | r2 = 0;
0x08006880 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x08006884 str r3, [sp, 0x14] | var_14h = r3;
0x08006888 stmdaeq r0, {r2, r3, r5, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r5, r7, fp, sp, lr, pc}");
0x0800688c ldr r3, [sp, 0x14] | r3 = var_14h;
0x08006890 mvn r1, r0 | r1 = ~r0;
0x08006894 sub r2, r3, 1 | r2 = r3 - 1;
0x08006898 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0800689c sub r2, r2, r0 | r2 -= r0;
0x080068a0 cmp r1, r2 |
| if (r1 <= r2) {
0x080068a4 addhi r2, r2, 1 | r2++;
| }
0x080068a8 str r2, [r4, 0x6c] | *((r4 + 0x6c)) = r2;
0x080068ac b 0x800632c | goto label_23;
| label_52:
0x080068b0 add r1, r8, 8 | r1 = r8 + 8;
0x080068b4 stmdaeq r0, {r7, ip, pc} | __asm ("stmdaeq r0, {r7, ip, pc}");
0x080068b8 stmdaeq r0, {r7, ip, pc} | __asm ("stmdaeq r0, {r7, ip, pc}");
0x080068bc stmdaeq r0, {r2, r4, r5, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r4, r5, r7, fp, sp, lr, pc}");
0x080068c0 b 0x80066c8 | goto label_22;
| }
; 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/drivers/net/vxlan.ko @ 0x8003c78 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.vxlan_uninit () | void vxlan_uninit (int32_t arg1) {
| r0 = arg1;
0x08003c78 push {r4, r5, r6, lr} |
0x08003c7c add r5, r0, 0x540 | r5 = r0 + 0x540;
0x08003c80 mov r4, r0 | r4 = r0;
0x08003c84 add r0, r5, 0x8c | r0 = r5 + 0x8c;
0x08003c88 stmdaeq r0, {r2, r5, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r5, r7, fp, sp, lr, pc}");
0x08003c8c mov r3, sp | r3 = sp;
0x08003c90 bic r1, r3, 0x1fc0 | r1 = BIT_MASK (r3, 0x1fc0);
0x08003c94 ldr r2, [r4, 0x608] | r2 = *((r4 + 0x608));
0x08003c98 bic r1, r1, 0x3f | r1 = BIT_MASK (r1, 0x3f);
0x08003c9c ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x08003ca0 add r3, r3, 0x200 | r3 += 0x200;
0x08003ca4 add r3, r3, 1 | r3++;
0x08003ca8 str r3, [r1, 4] | *((r1 + 4)) = r3;
0x08003cac ldr r1, [pc, 0x34] | r1 = *(0x8003ce4);
0x08003cb0 mov r0, r5 | r0 = r5;
0x08003cb4 bl 0x8001d28 | r0 = vxlan_find_mac ();
0x08003cb8 subs r1, r0, 0 | r1 = r0 - 0;
| if (r1 != r0) {
0x08003cbc beq 0x8003cd0 |
0x08003cc0 mov r3, 1 | r3 = 1;
0x08003cc4 mov r0, r5 | r0 = r5;
0x08003cc8 mov r2, r3 | r2 = r3;
0x08003ccc bl 0x800380c | vxlan_fdb_destroy ();
| }
0x08003cd0 ldr r0, [pc, 0x14] | r0 = "Provided_link_layer_address_is_not_Ethernet";
0x08003cd4 movw r1, 0x201 | r1 = 0x201;
0x08003cd8 stmdaeq r0, {r2, r3, r6, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r6, fp, sp, lr, pc}");
0x08003cdc ldr r0, [r4, 0x2c0] | r0 = *((r4 + 0x2c0));
0x08003ce0 pop {r4, r5, r6, lr} |
0x08003ce4 stmdaeq r0, {r5, r7, r8, sb, sl, sp, lr, pc} | __asm ("stmdaeq r0, {r5, r7, r8, sb, sl, sp, lr, pc}");
0x08003ce8 stmdaeq r0, {r2, r3, r5, r7, ip, pc} | __asm ("stmdaeq r0, {r2, r3, r5, r7, ip, pc}");
0x08003cec stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
| }
[*] Function popen used 1 times vxlan.ko