[*] Binary protection state of vxlan.ko
No RELRO No Canary found NX disabled REL No RPATH No RUNPATH Symbols
[*] Function sprintf tear down of vxlan.ko
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/drivers/net/vxlan.ko @ 0x8005428 */
| #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;
0x08005428 push {r4, r5, r6, r7, r8, lr} |
0x0800542c mov r4, r3 | r4 = r3;
0x08005430 sub sp, sp, 8 |
0x08005434 ldr r3, [sp, 0x30] | r3 = *(arg_30h);
0x08005438 ldrh r8, [sp, 0x20] | r8 = *(arg_20h);
0x0800543c cmp r3, 0 |
0x08005440 blt 0x8005450 |
| while ((r3 & 0x30000000) != 0) {
0x08005444 mov r0, 0 | r0 = 0;
| label_0:
0x08005448 add sp, sp, 8 |
0x0800544c pop {r4, r5, r6, r7, r8, pc} |
0x08005450 tst r3, 0x30000000 |
0x08005454 bne 0x8005444 |
| }
0x08005458 mov r6, r0 | r6 = r0;
0x0800545c ldr r0, [sp, 0x2c] | r0 = *(arg_2ch);
0x08005460 mov r5, r2 | r5 = r2;
0x08005464 mov r7, r1 | r7 = r1;
0x08005468 stmdaeq r0, {r0, r2, r3, r6, r7, r8, sb, sl, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r6, r7, r8, sb, sl, sp, lr, pc}");
0x0800546c ldr r3, [sp, 0x24] | r3 = *(arg_24h);
0x08005470 ldrh r1, [r4] | r1 = *(r4);
0x08005474 mov r2, r8 | r2 = r8;
0x08005478 str r3, [sp] | *(sp) = r3;
0x0800547c ldr r3, [r5, 0xe0] | r3 = *((r5 + 0xe0));
0x08005480 ldr r0, [r5, 0x2c] | r0 = *((r5 + 0x2c));
0x08005484 bl 0x8001468 | r0 = vxlan_find_sock ();
0x08005488 cmp r0, 0 |
| if (r0 != 0) {
0x0800548c beq 0x80054c8 |
0x08005490 ldr r2, [sp, 0x28] | r2 = *(arg_28h);
0x08005494 ldr r1, [sp, 0x24] | r1 = *(arg_24h);
0x08005498 bl 0x8000070 | r0 = vxlan_vs_find_vni ();
0x0800549c subs r2, r0, 0 | r2 = r0 - 0;
| if (r2 == r0) {
0x080054a0 beq 0x80054c8 | goto label_1;
| }
0x080054a4 mov r0, r6 | r0 = r6;
0x080054a8 mov r4, 1 | r4 = 1;
0x080054ac ldr r3, [sp, 0x28] | r3 = *(arg_28h);
0x080054b0 mov r1, r5 | r1 = r5;
0x080054b4 str r4, [sp] | *(sp) = r4;
0x080054b8 bl 0x8005294 | vxlan_encap_bypass ();
0x080054bc mov r0, r4 | r0 = r4;
0x080054c0 add sp, sp, 8 |
0x080054c4 pop {r4, r5, r6, r7, r8, pc} |
| }
| label_1:
0x080054c8 ldr r3, [r7, 0xc4] | r3 = *((r7 + 0xc4));
0x080054cc mov r0, r6 | r0 = r6;
0x080054d0 add r3, r3, 1 | r3++;
0x080054d4 str r3, [r7, 0xc4] | *((r7 + 0xc4)) = r3;
0x080054d8 stmdaeq r0, {r0, r2, r3, r5, r6, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r5, r6, fp, sp, lr, pc}");
0x080054dc mvn r0, 1 | r0 = ~1;
0x080054e0 b 0x8005448 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/drivers/net/vxlan.ko @ 0x8002df8 */
| #include <stdint.h>
|
; (fcn) sym.vxlan_err_lookup () | void vxlan_err_lookup (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x08002df8 push {r4, r5, r6, lr} |
0x08002dfc mov r4, r1 | r4 = r1;
0x08002e00 mov r5, r0 | r5 = r0;
0x08002e04 ldr ip, [r1, 0xa4] | ip = *((r1 + 0xa4));
0x08002e08 ldrh r2, [r1, 0x96] | r2 = *((r1 + 0x96));
0x08002e0c ldr r1, [r1, 0xa8] | r1 = *((r1 + 0xa8));
0x08002e10 add r3, ip, r2 | r3 = ip + r2;
0x08002e14 sub r3, r3, r1 | r3 -= r1;
0x08002e18 ldrd r0, r1, [r4, 0x54] | __asm ("ldrd r0, r1, [r4, 0x54]");
0x08002e1c add r3, r3, 0x10 | r3 += 0x10;
0x08002e20 sub lr, r0, r1 | lr = r0 - r1;
0x08002e24 cmp r3, lr |
0x08002e28 bhi 0x8002e70 |
| while (1) {
0x08002e2c add r2, r2, 8 | r2 += 8;
0x08002e30 add r1, ip, r2 | r1 = ip + r2;
0x08002e34 ldr r3, [ip, r2] | r3 = *((ip + r2));
0x08002e38 tst r3, 8 |
| if ((r3 & 8) == 0) {
0x08002e3c beq 0x8002ea4 | goto label_0;
| }
0x08002e40 ldr r0, [r5, 0x1b8] | r0 = *((r5 + 0x1b8));
0x08002e44 bics r0, r0, 3 | __asm ("bics r0, r0, 3");
| if ((r3 & 8) == 0) {
0x08002e48 beq 0x8002e9c | goto label_1;
| }
0x08002e4c ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x08002e50 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x08002e54 lsl r2, r2, 8 | r2 <<= 8;
0x08002e58 ldr r1, [r3, 0xa8] | r1 = *((r3 + 0xa8));
0x08002e5c bl 0x8000070 | r0 = vxlan_vs_find_vni ();
0x08002e60 cmp r0, 0 |
| if (r0 == 0) {
0x08002e64 beq 0x8002e9c | goto label_1;
| }
0x08002e68 mov r0, 0 | r0 = 0;
0x08002e6c pop {r4, r5, r6, pc} |
0x08002e70 cmp r3, r0 |
| if (r3 > r0) {
0x08002e74 bhi 0x8002ea4 | goto label_0;
| }
0x08002e78 sub r1, r1, r0 | r1 -= r0;
0x08002e7c mov r0, r4 | r0 = r4;
0x08002e80 add r1, r1, r3 | r1 += r3;
0x08002e84 stmdaeq r0, {r0, r2, r3, r6, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r6, fp, sp, lr, pc}");
0x08002e88 cmp r0, 0 |
| if (r0 == 0) {
0x08002e8c beq 0x8002ea4 | goto label_0;
| }
0x08002e90 ldr ip, [r4, 0xa4] | ip = *((r4 + 0xa4));
0x08002e94 ldrh r2, [r4, 0x96] | r2 = *((r4 + 0x96));
0x08002e98 b 0x8002e2c |
| }
| label_1:
0x08002e9c mvn r0, 1 | r0 = ~1;
0x08002ea0 pop {r4, r5, r6, pc} |
| label_0:
0x08002ea4 mvn r0, 0x15 | r0 = ~0x15;
0x08002ea8 pop {r4, r5, r6, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/drivers/net/vxlan.ko @ 0x8006068 */
| #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_2h;
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| 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;
0x08006068 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0800606c mov r4, r1 | r4 = r1;
0x08006070 mov r6, r0 | r6 = r0;
0x08006074 ldr r1, [r1, 0x54] | r1 = *((r1 + 0x54));
0x08006078 sub sp, sp, 0x4c |
0x0800607c ldr r3, [r4, 0x58] | r3 = *((r4 + 0x58));
0x08006080 sub r2, r1, r3 | r2 = r1 - r3;
0x08006084 cmp r2, 0xf |
| if (r2 < 0xf) {
0x08006088 bls 0x8006160 | goto label_24;
| }
| label_1:
0x0800608c ldrh r2, [r4, 0x96] | r2 = *((r4 + 0x96));
0x08006090 add ip, sp, 0x24 |
0x08006094 ldr r3, [r4, 0xa4] | r3 = *((r4 + 0xa4));
0x08006098 add r2, r2, 8 | r2 += 8;
0x0800609c add r3, r3, r2 | r3 += r2;
0x080060a0 ldm r3, {r0, r1} | r0 = *(r3);
| r1 = *((r3 + 4));
0x080060a4 stm ip, {r0, r1} | *(ip) = r0;
| *((ip + 4)) = r1;
0x080060a8 mov fp, r0 |
0x080060ac mov r5, r1 | r5 = r1;
0x080060b0 tst r0, 8 |
| if ((r0 & 8) == 0) {
0x080060b4 beq 0x80060cc | goto label_0;
| }
0x080060b8 ldr r6, [r6, 0x1b8] | r6 = *((r6 + 0x1b8));
0x080060bc bic r8, r0, 8 | r8 = BIT_MASK (r0, 8);
0x080060c0 str r8, [sp, 0x24] | var_24h = r8;
0x080060c4 bics r6, r6, 3 | __asm ("bics r6, r6, 3");
0x080060c8 bne 0x80060e0 |
| while (r7 == r0) {
| label_0:
0x080060cc mov r0, r4 | r0 = r4;
0x080060d0 stmdaeq r0, {r0, r2, r3, r5, r6, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r5, r6, fp, sp, lr, pc}");
| label_2:
0x080060d4 mov r0, 0 | r0 = 0;
0x080060d8 add sp, sp, 0x4c |
0x080060dc pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x080060e0 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x080060e4 lsl sl, r5, 8 | sl = r5 << 8;
0x080060e8 mov r2, sl | r2 = sl;
0x080060ec mov r0, r6 | r0 = r6;
0x080060f0 ldr r1, [r3, 0xa8] | r1 = *((r3 + 0xa8));
0x080060f4 bl 0x8000070 | r0 = vxlan_vs_find_vni ();
0x080060f8 subs r7, r0, 0 | r7 = r0 - 0;
0x080060fc beq 0x80060cc |
| }
0x08006100 add sb, r6, 0x1000 | sb = r6 + 0x1000;
0x08006104 ldr r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x08006108 ands r3, r3, 0x4000 | r3 &= 0x4000;
| if (r3 == r3) {
0x0800610c beq 0x8006184 | goto label_25;
| }
0x08006110 tst r8, 4 |
0x08006114 uxtb r3, r8 | r3 = (int8_t) r8;
| if ((r8 & 4) == 0) {
0x08006118 beq 0x80060cc | goto label_0;
| }
0x0800611c tst r3, 0x31 |
| if ((r3 & 0x31) != 0) {
0x08006120 bne 0x80060cc | goto label_0;
| }
0x08006124 ubfx r3, r8, 0x18, 8 | r3 = (r8 >> 0x18) & ((1 << 8) - 1);
0x08006128 sub r3, r3, 1 | r3--;
0x0800612c uxtb r3, r3 | r3 = (int8_t) r3;
0x08006130 cmp r3, 4 |
| if (r3 > 4) {
0x08006134 bhi 0x80060cc | goto label_0;
| }
0x08006138 ldr r2, [pc, 0x824] | r2 = *(0x8006960);
0x0800613c lsl r3, r3, 1 | r3 <<= 1;
0x08006140 ldrh r2, [r2, r3] | r2 = *((r2 + r3));
0x08006144 cmp r2, 0 |
| if (r2 == 0) {
0x08006148 beq 0x80060cc | goto label_0;
| }
0x0800614c bic fp, fp, 0xff000000 | fp = BIT_MASK (fp, 0xff000000);
0x08006150 mov r8, 1 | r8 = 1;
0x08006154 bic fp, fp, 0x3d | fp = BIT_MASK (fp, 0x3d);
0x08006158 str fp, [sp, 0x24] | var_24h = fp;
0x0800615c b 0x800618c | goto label_26;
| label_24:
0x08006160 cmp r1, 0xf |
| if (r1 < 0xf) {
0x08006164 bls 0x80060cc | goto label_0;
| }
0x08006168 add r3, r3, 0x10 | r3 += 0x10;
0x0800616c mov r0, r4 | r0 = r4;
0x08006170 sub r1, r3, r1 | r1 = r3 - r1;
0x08006174 stmdaeq r0, {r0, r2, r3, r6, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r6, fp, sp, lr, pc}");
0x08006178 cmp r0, 0 |
| if (r0 == 0) {
0x0800617c beq 0x80060cc | goto label_0;
| }
0x08006180 b 0x800608c | goto label_1;
| label_25:
0x08006184 mov r8, r3 | r8 = r3;
0x08006188 movw r2, 0x5865 | r2 = 0x5865;
| label_26:
0x0800618c ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x08006190 mov r0, r4 | r0 = r4;
0x08006194 ldr r1, [r7, 0x2c] | r1 = *((r7 + 0x2c));
0x08006198 ldr r3, [r3, 0x2b4] | r3 = *((r3 + 0x2b4));
0x0800619c subs r3, r3, r1 | r3 -= r1;
0x080061a0 mov r1, 0x10 | r1 = 0x10;
| if (r3 == r3) {
0x080061a4 movne r3, 1 | r3 = 1;
| }
0x080061a8 str r3, [sp] | *(sp) = r3;
0x080061ac mov r3, r8 | r3 = r8;
0x080061b0 stmdaeq r0, {r0, r2, r3, r4, r5, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r4, r5, r7, fp, sp, lr, pc}");
0x080061b4 cmp r0, 0 |
| if (r0 != 0) {
0x080061b8 bne 0x80060cc | goto label_0;
| }
0x080061bc ldr r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x080061c0 and fp, r5, 0xff000000 |
0x080061c4 tst r2, 0x400 |
| if ((r2 & 0x400) != 0) {
0x080061c8 bne 0x8006354 | goto label_27;
| }
| label_4:
0x080061cc ands r0, r2, 0x2000 | r0 = r2 & 0x2000;
| if (r0 != r2) {
0x080061d0 bne 0x8006310 | goto label_28;
| }
0x080061d4 stmdaeq r0, {r0, r6, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r6, r7, fp, sp, lr, pc}");
0x080061d8 stmdaeq r0, {r0, r6, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r6, r7, fp, sp, lr, pc}");
0x080061dc ldr r1, [r1] | r1 = *(r1);
0x080061e0 cmp r1, 0 |
| if (r1 > 0) {
0x080061e4 strle r0, [sp, 0x20] | var_20h = r0;
| }
| if (r1 > 0) {
0x080061e8 addle r0, sp, 0x20 | r0 += var_20h;
| }
| if (r1 > 0) {
0x080061ec bgt 0x8006310 | goto label_28;
| }
| label_3:
0x080061f0 ldr r1, [sp, 0x24] | r1 = var_24h;
0x080061f4 tst r2, 0x800 |
| if ((r2 & 0x800) != 0) {
0x080061f8 bne 0x8006454 | goto label_29;
| }
| label_5:
0x080061fc orrs r1, r1, fp | r1 |= fp;
| if (r1 != r1) {
0x08006200 bne 0x80060cc | goto label_0;
| }
0x08006204 ldr r0, [r4, 0xa8] | r0 = *((r4 + 0xa8));
0x08006208 cmp r8, 0 |
0x0800620c ldr ip, [r4, 0xa4] | ip = *((r4 + 0xa4));
0x08006210 sub r3, r0, ip | r3 = r0 - ip;
0x08006214 uxth r3, r3 | r3 = (int16_t) r3;
| if (r8 == 0) {
0x08006218 beq 0x80064c0 | goto label_30;
| }
0x0800621c ldrb r2, [r4, 0x64] | r2 = *((r4 + 0x64));
0x08006220 strh r3, [r4, 0x9a] | *((r4 + 0x9a)) = r3;
0x08006224 ldrh lr, [r4, 0x98] |
0x08006228 bfi r2, r1, 0, 3 | value_0 = BIT_MASK (0, 3);
| value_1 = r1 & value_0;
| value_0 = ~value_0;
| r2 &= value_0;
| r2 |= value_1;
0x0800622c ldr r1, [r7, 0x28] | r1 = *((r7 + 0x28));
0x08006230 str r1, [r4, 8] | *((r4 + 8)) = r1;
0x08006234 strb r2, [r4, 0x64] | *((r4 + 0x64)) = r2;
| label_6:
0x08006238 strh r3, [r4, 0x98] | *((r4 + 0x98)) = r3;
0x0800623c add r8, ip, lr | r8 = ip + lr;
0x08006240 ldrh r3, [r4, 0x94] | r3 = *((r4 + 0x94));
0x08006244 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x08006248 ldrh r5, [r4, 0x5c] | r5 = *((r4 + 0x5c));
0x0800624c ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x08006250 ldrh r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x08006254 cmp r2, 2 |
| if (r2 == 2) {
0x08006258 beq 0x8006594 | goto label_31;
| }
0x0800625c cmp r3, 0x81 |
| if (r3 == 0x81) {
0x08006260 beq 0x80065e4 | goto label_32;
| }
0x08006264 movw r2, 0xa888 | r2 = 0xa888;
0x08006268 cmp r3, r2 |
| if (r3 == r2) {
0x0800626c beq 0x80065e4 | goto label_32;
| }
| label_9:
0x08006270 cmp r3, 8 |
| if (r3 == 8) {
0x08006274 beq 0x8006668 | goto label_33;
| }
0x08006278 movw r2, 0xdd86 | r2 = 0xdd86;
0x0800627c cmp r3, r2 |
| if (r3 == r2) {
0x08006280 bne 0x80062b8 |
0x08006284 ldrh r3, [r4, 0x98] | r3 = *((r4 + 0x98));
0x08006288 ldr r2, [r4, 0xa4] | r2 = *((r4 + 0xa4));
0x0800628c ldrh r2, [r2, r3] | r2 = *((r2 + r3));
0x08006290 rev16 r2, r2 | __asm ("rev16 r2, r2");
0x08006294 ubfx r2, r2, 4, 8 | r2 = (r2 >> 4) & ((1 << 8) - 1);
| label_11:
0x08006298 ldrh r1, [r8] | r1 = *(r8);
0x0800629c mov r0, r4 | r0 = r4;
0x080062a0 rev16 r1, r1 | __asm ("rev16 r1, r1");
0x080062a4 ubfx r1, r1, 4, 8 | r1 = (r1 >> 4) & ((1 << 8) - 1);
0x080062a8 bl 0x80024b4 | r0 = INET_ECN_decapsulate ();
0x080062ac mov r5, r0 | r5 = r0;
| label_8:
0x080062b0 cmp r5, 0 |
| if (r5 != 0) {
0x080062b4 bne 0x8006728 | goto label_34;
| }
| }
| label_7:
0x080062b8 stmdaeq r0, {r0, r2, r3, r4, r6, r8, sb, sl, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r4, r6, r8, sb, sl, sp, lr, pc}");
0x080062bc ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x080062c0 ldr r2, [r3, 0x130] | r2 = *((r3 + 0x130));
0x080062c4 tst r2, 1 |
| if ((r2 & 1) == 0) {
0x080062c8 beq 0x8006838 | goto label_35;
| }
0x080062cc ldr r3, [r3, 0x2c0] | r3 = *((r3 + 0x2c0));
0x080062d0 mov r1, r4 | r1 = r4;
0x080062d4 ldr ip, [r4, 0x54] | ip = *((r4 + 0x54));
0x080062d8 add r0, r7, 0x8c | r0 = r7 + 0x8c;
0x080062dc ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x080062e0 ldr lr, [r3, 0xc] |
0x080062e4 adds r2, r2, ip | r2 += ip;
0x080062e8 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x080062ec ldm r3, {r2, ip} | r2 = *(r3);
| ip = *((r3 + 4));
0x080062f0 adc lr, lr, 0 | __asm ("adc lr, lr, 0");
0x080062f4 str lr, [r3, 0xc] |
0x080062f8 adds r2, r2, 1 | r2++;
0x080062fc adc ip, ip, 0 | __asm ("adc ip, ip, 0");
0x08006300 stm r3, {r2, ip} | *(r3) = r2;
| *((r3 + 4)) = ip;
0x08006304 stmdaeq r0, {r0, r2, r6, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r6, r7, fp, sp, lr, pc}");
0x08006308 stmdaeq r0, {r0, r5, r6, r8, sb, sl, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r5, r6, r8, sb, sl, sp, lr, pc}");
0x0800630c b 0x80060d4 | goto label_2;
| label_28:
0x08006310 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x08006314 mov r0, r4 | r0 = r4;
0x08006318 ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x0800631c ldrh r1, [r2, 0x10] | r1 = *((r2 + 0x10));
0x08006320 mov r2, 4 | r2 = 4;
0x08006324 str sl, [sp, 4] | var_4h = sl;
0x08006328 str r2, [sp, 8] | var_8h = r2;
0x0800632c mov r2, 0 | r2 = 0;
0x08006330 str r2, [sp] | *(sp) = r2;
0x08006334 mov r2, 0x400 | r2 = 0x400;
0x08006338 stmdaeq r0, {r0, r3, r6, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r6, r7, fp, sp, lr, pc}");
0x0800633c cmp r0, 0 |
| if (r0 == 0) {
0x08006340 beq 0x80060cc | goto label_0;
| }
0x08006344 str r0, [r4, 0x48] | *((r4 + 0x48)) = r0;
0x08006348 add r0, r0, 0x90 | r0 += 0x90;
0x0800634c ldr r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x08006350 b 0x80061f0 | goto label_3;
| label_27:
0x08006354 ldr r3, [sp, 0x24] | r3 = var_24h;
0x08006358 str r3, [sp, 0x14] | var_14h = r3;
0x0800635c tst r3, 0x2000 |
| if ((r3 & 0x2000) != 0) {
0x08006360 beq 0x8006440 |
0x08006364 ldrb r1, [r4, 0x67] | r1 = *((r4 + 0x67));
0x08006368 tst r1, 4 |
| if ((r1 & 4) != 0) {
0x0800636c bne 0x8006440 | goto label_20;
| }
0x08006370 and r5, r5, 0x7f000000 | r5 &= 0x7f000000;
0x08006374 cmp fp, 0 |
0x08006378 rev r5, r5 | r5 = SWAP32 (r5);
0x0800637c ldr r0, [r4, 0x54] | r0 = *((r4 + 0x54));
| if (fp < 0) {
0x08006380 movge r3, 0x10 | r3 = 0x10;
| }
| if (fp >= 0) {
0x08006384 movlt r3, 6 | r3 = 6;
| }
0x08006388 lsl r5, r5, 1 | r5 <<= 1;
0x0800638c mov r1, r3 | r1 = r3;
0x08006390 str r3, [sp, 0x18] | var_18h = r3;
0x08006394 add fp, r5, r1 |
0x08006398 ldr r3, [r4, 0x58] | r3 = *((r4 + 0x58));
0x0800639c add r1, fp, 2 | r1 += var_2h;
0x080063a0 sub ip, r0, r3 |
0x080063a4 cmp r1, ip |
| if (r1 > ip) {
0x080063a8 bhi 0x8006860 | goto label_36;
| }
| label_21:
0x080063ac ldrh r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x080063b0 tst r2, 0x1000 |
0x080063b4 ldr r2, [r4, 0xa4] | r2 = *((r4 + 0xa4));
0x080063b8 add r3, r3, 0x10 | r3 += 0x10;
0x080063bc add r3, r2, r3 | r3 = r2 + r3;
| if ((r2 & 0x1000) == 0) {
0x080063c0 beq 0x8006810 | goto label_37;
| }
0x080063c4 ldrb r2, [r4, 0x64] | r2 = *((r4 + 0x64));
0x080063c8 and r2, r2, 0x60 | r2 &= 0x60;
0x080063cc cmp r2, 0x40 |
| if (r2 != 0x40) {
0x080063d0 bne 0x80068cc | goto label_38;
| }
| label_23:
0x080063d4 mov r1, r5 | r1 = r5;
0x080063d8 ldr r5, [r4, 0x6c] | r5 = *((r4 + 0x6c));
0x080063dc mov r0, r3 | r0 = r3;
0x080063e0 mov r2, 0 | r2 = 0;
0x080063e4 str r3, [sp, 0x18] | var_18h = r3;
0x080063e8 stmdaeq r0, {r0, r3, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r7, fp, sp, lr, pc}");
0x080063ec sub r2, r5, 1 | r2 = r5 - 1;
0x080063f0 ldr r3, [sp, 0x18] | r3 = var_18h;
0x080063f4 sub r2, r2, r0 | r2 -= r0;
0x080063f8 mvn r0, r0 | r0 = ~r0;
0x080063fc cmp r0, r2 |
| if (r0 <= r2) {
0x08006400 addhi r2, r2, 1 | r2++;
| }
0x08006404 add r2, r2, r2, ror 16 | r2 += (r2 >>> 16);
0x08006408 mvn r2, r2 | r2 = ~r2;
0x0800640c ldrh r1, [r3, fp] | r1 = *((r3 + fp));
0x08006410 lsr r2, r2, 0x10 | r2 >>= 0x10;
0x08006414 strh r2, [r3, fp] | *((r3 + fp)) = r2;
0x08006418 sub r3, r2, r1 | r3 = r2 - r1;
0x0800641c mvn r1, r1 | r1 = ~r1;
0x08006420 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x08006424 sub r3, r3, 1 | r3--;
0x08006428 cmp r1, r3 |
| if (r1 <= r3) {
0x0800642c addhi r3, r3, 1 | r3++;
| }
0x08006430 adds r3, r2, r3 | r3 = r2 + r3;
0x08006434 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x08006438 str r3, [r4, 0x6c] | *((r4 + 0x6c)) = r3;
0x0800643c ldr r2, [sb, 0x10] | r2 = *((sb + 0x10));
| }
| label_20:
0x08006440 ldr r3, [sp, 0x14] | r3 = var_14h;
0x08006444 bic fp, r3, 0x2000 | fp = BIT_MASK (r3, 0x2000);
0x08006448 str fp, [sp, 0x24] | var_24h = fp;
0x0800644c mov fp, 0 |
0x08006450 b 0x80061cc | goto label_4;
| label_29:
0x08006454 tst r1, 0x80 |
| if ((r1 & 0x80) != 0) {
0x08006458 beq 0x80064b8 |
0x0800645c ldrh ip, [sp, 0x26] | ip = var_26h;
0x08006460 rev16 ip, ip | __asm ("rev16 ip, ip");
0x08006464 uxth ip, ip | ip = (int16_t) ip;
0x08006468 str ip, [r0] | *(r0) = ip;
0x0800646c ldr ip, [r4, 0x48] | ip = *((r4 + 0x48));
0x08006470 bics ip, ip, 1 | __asm ("bics ip, ip, 1");
0x08006474 ldrhne lr, [ip, 0x70] | __asm ("ldrhne lr, [ip, 0x70]");
| if ((r1 & 0x80) == 0) {
0x08006478 orrne lr, lr, 0x10 | lr |= 0x10;
| }
0x0800647c strhne lr, [ip, 0x70] | __asm ("strhne lr, [ip, 0x70]");
| if ((r1 & 0x80) == 0) {
0x08006480 movne lr, 4 | lr = 4;
| }
| if ((r1 & 0x80) == 0) {
0x08006484 strbne lr, [ip, 0x88] |
| }
0x08006488 ldrb ip, [sp, 0x25] | ip = var_25h;
0x0800648c tst ip, 0x40 |
| if ((ip & 0x40) == 0) {
0x08006490 ldrne lr, [r0] |
| }
| if ((ip & 0x40) == 0) {
0x08006494 orrne lr, lr, 0x400000 | lr |= 0x400000;
| }
| if ((ip & 0x40) == 0) {
0x08006498 strne lr, [r0] |
| }
0x0800649c tst ip, 8 |
| if ((ip & 8) == 0) {
0x080064a0 ldrne ip, [r0] | ip = *(r0);
| }
| if ((ip & 8) == 0) {
0x080064a4 orrne ip, ip, 0x80000 |
| }
| if ((ip & 8) == 0) {
0x080064a8 strne ip, [r0] | *(r0) = ip;
| }
0x080064ac tst r2, 0x2000 |
| if ((r2 & 0x2000) != 0) {
0x080064b0 ldreq r2, [r0] | r2 = *(r0);
| }
| if ((r2 & 0x2000) == 0) {
0x080064b4 streq r2, [r4, 0x88] | *((r4 + 0x88)) = r2;
| goto label_39;
| }
| }
| label_39:
0x080064b8 and r1, r1, 0x7f | r1 &= 0x7f;
0x080064bc b 0x80061fc | goto label_5;
| label_30:
0x080064c0 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x080064c4 mov r0, r4 | r0 = r4;
0x080064c8 ldr r5, [r2, 0xa8] | r5 = *((r2 + 0xa8));
0x080064cc strh r3, [r4, 0x9a] | *((r4 + 0x9a)) = r3;
0x080064d0 ldr r1, [r7, 0x28] | r1 = *((r7 + 0x28));
0x080064d4 stmdaeq r0, {r0, r2, r3, r6, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r6, r7, fp, sp, lr, pc}");
0x080064d8 ldrb r2, [r4, 0x64] | r2 = *((r4 + 0x64));
0x080064dc ldr ip, [r4, 0xa4] | ip = *((r4 + 0xa4));
0x080064e0 ldrh sb, [r4, 0x9a] | sb = *((r4 + 0x9a));
0x080064e4 and r3, r2, 0x60 | r3 = r2 & 0x60;
0x080064e8 cmp r3, 0x40 |
0x080064ec strh r0, [r4, 0x94] | *((r4 + 0x94)) = r0;
0x080064f0 add sb, ip, sb | sb = ip + sb;
| if (r3 == 0x40) {
0x080064f4 beq 0x80067d4 | goto label_40;
| }
0x080064f8 cmp r3, 0x60 |
| if (r3 == 0x60) {
0x080064fc bne 0x8006518 |
0x08006500 ldr r3, [r4, 0xa8] | r3 = *((r4 + 0xa8));
0x08006504 ldrh r1, [r4, 0x6c] | r1 = *((r4 + 0x6c));
0x08006508 sub r3, ip, r3 | r3 = ip - r3;
0x0800650c cmn r3, r1 |
0x08006510 bfimi r2, r8, 5, 2 | __asm ("bfimi r2, r8, 5, 2");
| if (r3 < r1) {
0x08006514 strbmi r2, [r4, 0x64] | *((r4 + 0x64)) = r2;
| goto label_19;
| }
| }
| label_19:
0x08006518 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x0800651c ldrh r2, [sb, 0xa] | r2 = *((sb + 0xa));
0x08006520 ldr r1, [r3, 0x1c8] | r1 = *((r3 + 0x1c8));
0x08006524 ldr r3, [sb, 6] | r3 = *((sb + 6));
0x08006528 ldr r0, [r1] | r0 = *(r1);
0x0800652c ldrh r1, [r1, 4] | r1 = *((r1 + 4));
0x08006530 eor r3, r3, r0 | r3 ^= r0;
0x08006534 eor r2, r2, r1 | r2 ^= r1;
0x08006538 orrs r3, r3, r2 | r3 |= r2;
| if (r3 == r3) {
0x0800653c beq 0x80060cc | goto label_0;
| }
0x08006540 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x08006544 ldrh lr, [r4, 0x98] |
0x08006548 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0800654c ldrh r8, [r3, 0x10] | r8 = *((r3 + 0x10));
0x08006550 add r3, ip, lr | r3 = ip + lr;
0x08006554 cmp r8, 2 |
| if (r8 == 2) {
0x08006558 addne r3, r3, 8 | r3 += 8;
| }
| if (r8 == 2) {
0x0800655c addne fp, sp, 0x34 |
| }
| if (r8 == 2) {
0x08006560 movne r8, 0xa | r8 = 0xa;
| }
| if (r8 != 2) {
0x08006564 ldreq r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| }
| if (r8 == 2) {
0x08006568 ldmne r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
| }
| if (r8 == 2) {
0x0800656c stmne fp, {r0, r1, r2, r3} | *(fp) = r0;
| *((fp + 4)) = r1;
| *((fp + 8)) = r2;
| *((fp + 12)) = r3;
| }
| if (r8 != 2) {
0x08006570 streq r3, [sp, 0x30] | var_30h = r3;
| }
0x08006574 strh r8, [sp, 0x2c] | var_2ch = r8;
0x08006578 ldr r3, [r7, 0xe0] | r3 = *((r7 + 0xe0));
0x0800657c tst r3, 1 |
| if ((r3 & 1) != 0) {
0x08006580 bne 0x800679c | goto label_41;
| }
0x08006584 ldr r0, [r4, 0xa8] | r0 = *((r4 + 0xa8));
0x08006588 sub r3, r0, ip | r3 = r0 - ip;
0x0800658c uxth r3, r3 | r3 = (int16_t) r3;
0x08006590 b 0x8006238 | goto label_6;
| label_31:
0x08006594 cmp r3, 0x81 |
| if (r3 == 0x81) {
0x08006598 beq 0x8006688 | goto label_42;
| }
0x0800659c movw r2, 0xa888 | r2 = 0xa888;
0x080065a0 cmp r3, r2 |
| if (r3 == r2) {
0x080065a4 beq 0x8006688 | goto label_42;
| }
| label_13:
0x080065a8 cmp r3, 8 |
| if (r3 == 8) {
0x080065ac beq 0x8006714 | goto label_43;
| }
0x080065b0 movw r2, 0xdd86 | r2 = 0xdd86;
0x080065b4 cmp r3, r2 |
| if (r3 != r2) {
0x080065b8 bne 0x80062b8 | goto label_7;
| }
0x080065bc ldrh r3, [r4, 0x98] | r3 = *((r4 + 0x98));
0x080065c0 ldr r2, [r4, 0xa4] | r2 = *((r4 + 0xa4));
0x080065c4 ldrh r2, [r2, r3] | r2 = *((r2 + r3));
0x080065c8 rev16 r2, r2 | __asm ("rev16 r2, r2");
0x080065cc ubfx r2, r2, 4, 8 | r2 = (r2 >> 4) & ((1 << 8) - 1);
| label_16:
0x080065d0 ldrb r1, [r8, 1] | r1 = *((r8 + 1));
0x080065d4 mov r0, r4 | r0 = r4;
0x080065d8 bl 0x80024b4 | r0 = INET_ECN_decapsulate ();
0x080065dc mov r5, r0 | r5 = r0;
0x080065e0 b 0x80062b0 | goto label_8;
| label_32:
0x080065e4 cmp r5, 0 |
| if (r5 == 0) {
0x080065e8 beq 0x800670c | goto label_44;
| }
0x080065ec cmp r5, 3 |
| if (r5 <= 3) {
0x080065f0 subhi r5, r5, 4 | r5 -= 4;
| }
| if (r5 < 3) {
0x080065f4 bls 0x800688c | goto label_45;
| }
| label_15:
0x080065f8 add sb, r5, 0x1c | sb = r5 + 0x1c;
0x080065fc movw sl, 0xa888 | sl = 0xa888;
| label_10:
0x08006600 ldr ip, [r4, 0x54] | ip = *((r4 + 0x54));
0x08006604 mov r1, r5 | r1 = r5;
0x08006608 ldr lr, [r4, 0x58] |
0x0800660c add r2, sp, 0x2c | r2 += var_2ch;
0x08006610 mov r3, 4 | r3 = 4;
0x08006614 sub ip, ip, lr |
0x08006618 sub ip, ip, r5 |
0x0800661c cmp ip, 3 |
| if (ip > 3) {
0x08006620 bgt 0x800667c | goto label_46;
| }
0x08006624 cmp r4, 0 |
| if (r4 == 0) {
0x08006628 beq 0x80062b8 | goto label_7;
| }
0x0800662c mov r0, r4 | r0 = r4;
0x08006630 stmdaeq r0, {r0, r2, r3, r4, r5, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r4, r5, fp, sp, lr, pc}");
0x08006634 add r3, sp, 0x2c | r3 += var_2ch;
0x08006638 cmp r0, 0 |
| if (r0 < 0) {
0x0800663c blt 0x80062b8 | goto label_7;
| }
| label_12:
0x08006640 cmp r5, sb |
| if (r5 == sb) {
0x08006644 beq 0x80062b8 | goto label_7;
| }
0x08006648 ldrh r3, [r3, 2] | r3 = *((r3 + 2));
0x0800664c add r5, r5, 4 | r5 += 4;
0x08006650 cmp r3, 0x81 |
| if (r3 == 0x81) {
0x08006654 beq 0x8006660 | goto label_47;
| }
0x08006658 cmp r3, sl |
| if (r3 != sl) {
0x0800665c bne 0x8006270 | goto label_9;
| }
| label_47:
0x08006660 ldr r0, [r4, 0xa8] | r0 = *((r4 + 0xa8));
0x08006664 b 0x8006600 | goto label_10;
| label_33:
0x08006668 ldrh r2, [r4, 0x98] | r2 = *((r4 + 0x98));
0x0800666c ldr r3, [r4, 0xa4] | r3 = *((r4 + 0xa4));
0x08006670 add r3, r3, r2 | r3 += r2;
0x08006674 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x08006678 b 0x8006298 | goto label_11;
| label_46:
0x0800667c adds r3, r0, r5 | r3 = r0 + r5;
| if (r3 != r0) {
0x08006680 bne 0x8006640 | goto label_12;
| }
0x08006684 b 0x80062b8 | goto label_7;
| label_42:
0x08006688 cmp r5, 0 |
| if (r5 == 0) {
0x0800668c beq 0x8006794 | goto label_48;
| }
0x08006690 cmp r5, 3 |
| if (r5 <= 3) {
0x08006694 subhi r5, r5, 4 | r5 -= 4;
| }
| if (r5 < 3) {
0x08006698 bls 0x800688c | goto label_45;
| }
| label_18:
0x0800669c add sl, r5, 0x1c | sl = r5 + 0x1c;
0x080066a0 movw sb, 0xa888 | sb = 0xa888;
| label_14:
0x080066a4 ldr ip, [r4, 0x54] | ip = *((r4 + 0x54));
0x080066a8 mov r1, r5 | r1 = r5;
0x080066ac ldr lr, [r4, 0x58] |
0x080066b0 add r2, sp, 0x2c | r2 += var_2ch;
0x080066b4 mov r3, 4 | r3 = 4;
0x080066b8 sub ip, ip, lr |
0x080066bc sub ip, ip, r5 |
0x080066c0 cmp ip, 3 |
| if (ip > 3) {
0x080066c4 bgt 0x8006788 | goto label_49;
| }
0x080066c8 cmp r4, 0 |
| if (r4 == 0) {
0x080066cc beq 0x80062b8 | goto label_7;
| }
0x080066d0 mov r0, r4 | r0 = r4;
0x080066d4 stmdaeq r0, {r0, r2, r3, r4, r5, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r4, r5, fp, sp, lr, pc}");
0x080066d8 add r3, sp, 0x2c | r3 += var_2ch;
0x080066dc cmp r0, 0 |
| if (r0 < 0) {
0x080066e0 blt 0x80062b8 | goto label_7;
| }
| label_17:
0x080066e4 cmp r5, sl |
| if (r5 == sl) {
0x080066e8 beq 0x80062b8 | goto label_7;
| }
0x080066ec ldrh r3, [r3, 2] | r3 = *((r3 + 2));
0x080066f0 add r5, r5, 4 | r5 += 4;
0x080066f4 cmp r3, 0x81 |
| if (r3 == 0x81) {
0x080066f8 beq 0x8006704 | goto label_50;
| }
0x080066fc cmp r3, sb |
| if (r3 != sb) {
0x08006700 bne 0x80065a8 | goto label_13;
| }
| label_50:
0x08006704 ldr r0, [r4, 0xa8] | r0 = *((r4 + 0xa8));
0x08006708 b 0x80066a4 | goto label_14;
| label_44:
0x0800670c mov r5, 0xe | r5 = 0xe;
0x08006710 b 0x80065f8 | goto label_15;
| label_43:
0x08006714 ldrh r2, [r4, 0x98] | r2 = *((r4 + 0x98));
0x08006718 ldr r3, [r4, 0xa4] | r3 = *((r4 + 0xa4));
0x0800671c add r3, r3, r2 | r3 += r2;
0x08006720 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x08006724 b 0x80065d0 | goto label_16;
| label_34:
0x08006728 stmdaeq r0, {r5, r6, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r0, {r5, r6, r7, sb, sl, fp, ip, pc}");
0x0800672c stmdaeq r0, {r5, r6, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r0, {r5, r6, r7, sb, sl, fp, ip, pc}");
0x08006730 ldrb r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x08006734 cmp r3, 0 |
| if (r3 != 0) {
0x08006738 beq 0x800675c |
0x0800673c ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x08006740 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x08006744 ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x08006748 cmp r3, 2 |
| if (r3 == 2) {
0x0800674c beq 0x80068a8 | goto label_51;
| }
0x08006750 stmdaeq r0, {r0, r2, r4, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r4, r7, fp, sp, lr, pc}");
0x08006754 cmp r0, 0 |
| if (r0 != 0) {
0x08006758 bne 0x8006950 | goto label_52;
| }
| }
| label_22:
0x0800675c cmp r5, 1 |
| if (r5 <= 1) {
0x08006760 ble 0x80062b8 | goto label_7;
| }
0x08006764 ldr r2, [r7, 0x28] | r2 = *((r7 + 0x28));
0x08006768 ldr r3, [r2, 0xe4] | r3 = *((r2 + 0xe4));
0x0800676c add r3, r3, 1 | r3++;
0x08006770 str r3, [r2, 0xe4] | *((r2 + 0xe4)) = r3;
0x08006774 ldr r2, [r7, 0x28] | r2 = *((r7 + 0x28));
0x08006778 ldr r3, [r2, 0xc0] | r3 = *((r2 + 0xc0));
0x0800677c add r3, r3, 1 | r3++;
0x08006780 str r3, [r2, 0xc0] | *((r2 + 0xc0)) = r3;
0x08006784 b 0x80060cc | goto label_0;
| label_49:
0x08006788 adds r3, r0, r5 | r3 = r0 + r5;
| if (r3 != r0) {
0x0800678c bne 0x80066e4 | goto label_17;
| }
0x08006790 b 0x80062b8 | goto label_7;
| label_48:
0x08006794 mov r5, 0xe | r5 = 0xe;
0x08006798 b 0x800669c | goto label_18;
| label_41:
0x0800679c str sl, [sp] | *(sp) = sl;
0x080067a0 mov r3, r5 | r3 = r5;
0x080067a4 add r2, sb, 6 | r2 = sb + 6;
0x080067a8 add r1, sp, 0x2c | r1 += var_2ch;
0x080067ac ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x080067b0 bl 0x800503c | r0 = vxlan_snoop ();
0x080067b4 cmp r0, 0 |
| if (r0 != 0) {
0x080067b8 bne 0x80060cc | goto label_0;
| }
0x080067bc ldr r0, [r4, 0xa8] | r0 = *((r4 + 0xa8));
0x080067c0 ldr ip, [r4, 0xa4] | ip = *((r4 + 0xa4));
0x080067c4 ldrh lr, [r4, 0x98] |
0x080067c8 sub r3, r0, ip | r3 = r0 - ip;
0x080067cc uxth r3, r3 | r3 = (int16_t) r3;
0x080067d0 b 0x8006238 | goto label_6;
| label_40:
0x080067d4 mov r2, r8 | r2 = r8;
0x080067d8 ldr r8, [r4, 0x6c] | r8 = *((r4 + 0x6c));
0x080067dc mov r0, sb | r0 = sb;
0x080067e0 mov r1, 0xe | r1 = 0xe;
0x080067e4 stmdaeq r0, {r0, r3, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r7, fp, sp, lr, pc}");
0x080067e8 ldr ip, [r4, 0xa4] | ip = *((r4 + 0xa4));
0x080067ec ldrh sb, [r4, 0x9a] | sb = *((r4 + 0x9a));
0x080067f0 sub r3, r8, 1 | r3 = r8 - 1;
0x080067f4 sub r3, r3, r0 | r3 -= r0;
0x080067f8 mvn r0, r0 | r0 = ~r0;
0x080067fc cmp r0, r3 |
| if (r0 <= r3) {
0x08006800 addhi r3, r3, 1 | r3++;
| }
0x08006804 add sb, ip, sb | sb = ip + sb;
0x08006808 str r3, [r4, 0x6c] | *((r4 + 0x6c)) = r3;
0x0800680c b 0x8006518 | goto label_19;
| label_37:
0x08006810 add r3, r3, r5 | r3 += r5;
0x08006814 ldr r1, [sp, 0x18] | r1 = var_18h;
0x08006818 sub r3, r3, r2 | r3 -= r2;
0x0800681c strh r3, [r4, 0x6c] | *((r4 + 0x6c)) = r3;
0x08006820 ldrb r3, [r4, 0x64] | r3 = *((r4 + 0x64));
0x08006824 strh r1, [r4, 0x6e] | *((r4 + 0x6e)) = r1;
0x08006828 orr r3, r3, 0x60 | r3 |= 0x60;
0x0800682c strb r3, [r4, 0x64] | *((r4 + 0x64)) = r3;
0x08006830 ldr r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x08006834 b 0x8006440 | goto label_20;
| label_35:
0x08006838 stmdaeq r0, {r0, r5, r6, r8, sb, sl, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r5, r6, r8, sb, sl, sp, lr, pc}");
0x0800683c ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x08006840 add r3, r3, 0x10c | r3 += 0x10c;
0x08006844 pld [r3] | __asm ("pld [r3]");
| do {
0x08006848 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x0800684c add r2, r2, 1 | r2++;
0x08006850 strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x08006854 teq r1, 0 | __asm ("teq r1, 0");
0x08006858 bne 0x8006848 |
| } while (r0 != r3);
0x0800685c b 0x80060cc | goto label_0;
| label_36:
0x08006860 cmp r1, r0 |
0x08006864 str r2, [sp, 0x1c] | var_1ch = r2;
| if (r1 > r0) {
0x08006868 bhi 0x80060cc | goto label_0;
| }
0x0800686c sub r3, r3, r0 | r3 -= r0;
0x08006870 mov r0, r4 | r0 = r4;
0x08006874 add r1, r3, r1 | r1 = r3 + r1;
0x08006878 stmdaeq r0, {r0, r2, r3, r6, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r6, fp, sp, lr, pc}");
0x0800687c ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x08006880 cmp r0, 0 |
| if (r0 == 0) {
0x08006884 beq 0x80060cc | goto label_0;
| }
0x08006888 b 0x80063ac | goto label_21;
| label_45:
0x0800688c mov r3, 0 | r3 = 0;
0x08006890 mov r2, 9 | r2 = 9;
0x08006894 movw r1, 0x251 | r1 = 0x251;
0x08006898 stmdaeq r0, {r2, r3, r5, r7, r8, sb, sl, fp, pc} | __asm ("stmdaeq r0, {r2, r3, r5, r7, r8, sb, sl, fp, pc}");
0x0800689c stmdaeq r0, {r2, r3, r5, r7, r8, sb, sl, fp, pc} | __asm ("stmdaeq r0, {r2, r3, r5, r7, r8, sb, sl, fp, pc}");
0x080068a0 stmdaeq r0, {r0, r3, r4, r5, r7, r8, sb, sl, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r4, r5, r7, r8, sb, sl, sp, lr, pc}");
0x080068a4 b 0x80062b8 | goto label_7;
| label_51:
0x080068a8 stmdaeq r0, {r0, r2, r4, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r4, r7, fp, sp, lr, pc}");
0x080068ac cmp r0, 0 |
| if (r0 == 0) {
0x080068b0 beq 0x800675c | goto label_22;
| }
0x080068b4 ldrb r2, [r8, 1] | r2 = *((r8 + 1));
0x080068b8 add r1, r8, 0xc | r1 = r8 + 0xc;
0x080068bc stmdaeq r0, {r3, r5, r6, ip, pc} | __asm ("stmdaeq r0, {r3, r5, r6, ip, pc}");
0x080068c0 stmdaeq r0, {r3, r5, r6, ip, pc} | __asm ("stmdaeq r0, {r3, r5, r6, ip, pc}");
0x080068c4 stmdaeq r0, {r0, r4, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r4, r7, fp, sp, lr, pc}");
0x080068c8 b 0x800675c | goto label_22;
| label_38:
0x080068cc mov r0, r4 | r0 = r4;
0x080068d0 str r3, [sp, 0x18] | var_18h = r3;
0x080068d4 stmdaeq r0, {r0, r4, r6, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r4, r6, r7, fp, sp, lr, pc}");
0x080068d8 ldrb r2, [r4, 0x64] | r2 = *((r4 + 0x64));
0x080068dc ldr r0, [r4, 0xa8] | r0 = *((r4 + 0xa8));
0x080068e0 and r1, r2, 0x60 | r1 = r2 & 0x60;
0x080068e4 ldr r3, [sp, 0x18] | r3 = var_18h;
0x080068e8 cmp r1, 0x40 |
| if (r1 == 0x40) {
0x080068ec beq 0x8006914 | goto label_53;
| }
0x080068f0 cmp r1, 0x60 |
| if (r1 != 0x60) {
0x080068f4 bne 0x80063d4 | goto label_23;
| }
0x080068f8 ldr r1, [r4, 0xa4] | r1 = *((r4 + 0xa4));
0x080068fc sub r1, r1, r0 | r1 -= r0;
0x08006900 ldrh r0, [r4, 0x6c] | r0 = *((r4 + 0x6c));
0x08006904 cmn r1, r0 |
0x08006908 bfcmi r2, 5, 2 | __asm ("bfcmi r2, 5, 2");
| if (r1 >= r0) {
0x0800690c strbmi r2, [r4, 0x64] | *((r4 + 0x64)) = r2;
| }
0x08006910 b 0x80063d4 | goto label_23;
| label_53:
0x08006914 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x08006918 sub r1, r3, r0 | r1 = r3 - r0;
0x0800691c str r2, [sp, 0x18] | var_18h = r2;
0x08006920 mov r2, 0 | r2 = 0;
0x08006924 str r3, [sp, 0x1c] | var_1ch = r3;
0x08006928 stmdaeq r0, {r0, r3, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r7, fp, sp, lr, pc}");
0x0800692c ldr r2, [sp, 0x18] | r2 = var_18h;
0x08006930 mvn r1, r0 | r1 = ~r0;
0x08006934 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x08006938 sub r2, r2, 1 | r2--;
0x0800693c sub r2, r2, r0 | r2 -= r0;
0x08006940 cmp r1, r2 |
| if (r1 <= r2) {
0x08006944 addhi r2, r2, 1 | r2++;
| }
0x08006948 str r2, [r4, 0x6c] | *((r4 + 0x6c)) = r2;
0x0800694c b 0x80063d4 | goto label_23;
| label_52:
0x08006950 add r1, r8, 8 | r1 = r8 + 8;
0x08006954 stmdaeq r0, {r2, r4, r7, ip, pc} | __asm ("stmdaeq r0, {r2, r4, r7, ip, pc}");
0x08006958 stmdaeq r0, {r2, r4, r7, ip, pc} | __asm ("stmdaeq r0, {r2, r4, r7, ip, pc}");
0x0800695c stmdaeq r0, {r0, r4, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r4, r7, fp, sp, lr, pc}");
0x08006960 b 0x800675c | goto label_22;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/drivers/net/vxlan.ko @ 0x8003d30 */
| #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;
0x08003d30 push {r4, r5, r6, lr} |
0x08003d34 add r5, r0, 0x540 | r5 = r0 + 0x540;
0x08003d38 mov r4, r0 | r4 = r0;
0x08003d3c add r0, r5, 0x8c | r0 = r5 + 0x8c;
0x08003d40 stmdaeq r0, {r0, r7, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r7, fp, sp, lr, pc}");
0x08003d44 mov r3, sp | r3 = sp;
0x08003d48 bic r1, r3, 0x1fc0 | r1 = BIT_MASK (r3, 0x1fc0);
0x08003d4c ldr r2, [r4, 0x608] | r2 = *((r4 + 0x608));
0x08003d50 bic r1, r1, 0x3f | r1 = BIT_MASK (r1, 0x3f);
0x08003d54 ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x08003d58 add r3, r3, 0x200 | r3 += 0x200;
0x08003d5c add r3, r3, 1 | r3++;
0x08003d60 str r3, [r1, 4] | *((r1 + 4)) = r3;
0x08003d64 ldr r1, [pc, 0x34] | r1 = *(0x8003d9c);
0x08003d68 mov r0, r5 | r0 = r5;
0x08003d6c bl 0x8001dac | r0 = vxlan_find_mac ();
0x08003d70 subs r1, r0, 0 | r1 = r0 - 0;
| if (r1 != r0) {
0x08003d74 beq 0x8003d88 |
0x08003d78 mov r3, 1 | r3 = 1;
0x08003d7c mov r0, r5 | r0 = r5;
0x08003d80 mov r2, r3 | r2 = r3;
0x08003d84 bl 0x80038b8 | vxlan_fdb_destroy ();
| }
0x08003d88 ldr r0, [pc, 0x14] | r0 = "Provided_link_layer_address_is_not_Ethernet";
0x08003d8c movw r1, 0x201 | r1 = 0x201;
0x08003d90 stmdaeq r0, {r0, r3, r5, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r5, fp, sp, lr, pc}");
0x08003d94 ldr r0, [r4, 0x2c0] | r0 = *((r4 + 0x2c0));
0x08003d98 pop {r4, r5, r6, lr} |
0x08003d9c stmdaeq r0, {r0, r2, r3, r4, r5, r6, r8, sb, sl, sp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r4, r5, r6, r8, sb, sl, sp, lr, pc}");
0x08003da0 stmdaeq r0, {r6, r7, ip, pc} | __asm ("stmdaeq r0, {r6, r7, ip, pc}");
0x08003da4 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
| }
[*] Function sprintf used 1 times vxlan.ko