[*] Binary protection state of veth.ko
No RELRO No Canary found NX disabled REL No RPATH No RUNPATH Symbols
[*] Function mmap tear down of veth.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/veth.ko @ 0x8000908 */
| #include <stdint.h>
|
; (fcn) sym.veth_poll_controller () | void veth_poll_controller () {
0x08000908 bx lr | return;
| }
; 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/veth.ko @ 0x80019d0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.veth_poll () | void veth_poll (int32_t arg1, uint32_t arg2) {
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_38h;
| int32_t var_3ch;
| int32_t var_40h;
| int32_t var_44h;
| int32_t var_48h;
| int32_t var_4ch;
| int32_t var_0h;
| int32_t var_68h;
| int32_t var_6ch;
| int32_t var_70h;
| int32_t var_74h;
| int32_t var_78h;
| int32_t var_80h;
| int32_t var_84h;
| int32_t var_c4h;
| int32_t var_cch;
| r0 = arg1;
| r1 = arg2;
0x080019d0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x080019d4 stmdaeq r0, {r2, r3, r4, r5, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r7, sl, fp, lr}");
0x080019d8 stmdaeq r0, {r2, r3, r4, r5, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r7, sl, fp, lr}");
0x080019dc sub sp, sp, 0xcc |
0x080019e0 cmp r1, 0 |
0x080019e4 mov r3, 0 | r3 = 0;
0x080019e8 mov sl, r0 | sl = r0;
0x080019ec ldr r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x080019f0 str r1, [sp, 0xc] | var_ch = r1;
0x080019f4 orr r2, r2, 1 | r2 |= 1;
0x080019f8 str r3, [sp, 0xc4] | var_c4h = r3;
0x080019fc str r2, [sb, 0x10] | *((sb + 0x10)) = r2;
| if (r1 <= 0) {
0x08001a00 ble 0x8002530 | goto label_14;
| }
0x08001a04 mov fp, r3 |
0x08001a08 stmdaeq r0, {r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r6, r7, sl, fp, lr}");
0x08001a0c stmdaeq r0, {r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r6, r7, sl, fp, lr}");
0x08001a10 str r3, [sp, 0x2c] | var_2ch = r3;
0x08001a14 str r2, [sp, 0x24] | var_24h = r2;
0x08001a18 stmdaeq r0, {r2, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r6, r7, sl, fp, lr}");
0x08001a1c stmdaeq r0, {r2, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r6, r7, sl, fp, lr}");
0x08001a20 str r3, [sp, 0x30] | var_30h = r3;
0x08001a24 str r2, [sp, 0x40] | var_40h = r2;
0x08001a28 movw r2, 0x8e39 |
| /* if there is a right shift of 1, then it's a division by 1/9 */
0x08001a2c movt r2, 0x38e3 | r2 = 0x38e38e39;
0x08001a30 str r3, [sp, 0x1c] | var_1ch = r3;
0x08001a34 str r2, [sp, 0x44] | var_44h = r2;
0x08001a38 str r3, [sp, 0x20] | var_20h = r3;
0x08001a3c str r3, [sp, 0x34] | var_34h = r3;
0x08001a40 str r3, [sp, 0x38] | var_38h = r3;
0x08001a44 str r3, [sp, 4] | var_4h = r3;
0x08001a48 str r3, [sp, 8] | var_8h = r3;
0x08001a4c str r3, [sp, 0x14] | var_14h = r3;
0x08001a50 str r3, [sp, 0x18] | var_18h = r3;
0x08001a54 str sb, [sp, 0x28] | var_28h = sb;
| do {
0x08001a58 ldr r1, [sl, 0x148] | r1 = *((sl + 0x148));
0x08001a5c cmp r1, 0 |
| if (r1 == 0) {
0x08001a60 beq 0x8001f54 | goto label_15;
| }
0x08001a64 ldr r3, [sl, 0x140] | r3 = *((sl + 0x140));
0x08001a68 ldr ip, [sl, 0x150] | ip = *((sl + 0x150));
0x08001a6c ldr r6, [ip, r3, lsl 2] | offset_0 = r3 << 2;
| r6 = *((ip + offset_0));
0x08001a70 cmp r6, 0 |
| if (r6 == 0) {
0x08001a74 beq 0x8001f54 | goto label_15;
| }
0x08001a78 add r2, r3, 1 | r2 = r3 + 1;
0x08001a7c ldr lr, [sl, 0x144] |
0x08001a80 cmp r1, r2 |
0x08001a84 ldr r4, [sl, 0x14c] | r4 = *((sl + 0x14c));
0x08001a88 sub r5, r2, lr | r5 = r2 - lr;
| if (r1 <= r2) {
0x08001a8c movgt r0, 0 | r0 = 0;
| }
| if (r1 > r2) {
0x08001a90 movle r0, 1 | r0 = 1;
| }
0x08001a94 cmp r5, r4 |
| if (r5 < r4) {
0x08001a98 orrge r0, r0, 1 | r0 |= 1;
| }
0x08001a9c cmp r0, 0 |
| if (r0 != 0) {
0x08001aa0 bne 0x8002070 | goto label_16;
| }
| label_2:
0x08001aa4 ands r4, r6, 1 | r4 = r6 & 1;
0x08001aa8 str r2, [sl, 0x140] | *((sl + 0x140)) = r2;
| if (r4 == r6) {
0x08001aac beq 0x8001d2c | goto label_17;
| }
0x08001ab0 bic r4, r6, 1 | r4 = BIT_MASK (r6, 1);
0x08001ab4 ldr r3, [sp, 4] | r3 = var_4h;
0x08001ab8 ldr r2, [sp, 8] | r2 = var_8h;
0x08001abc ldrh r7, [r4, 4] | r7 = *((r4 + 4));
0x08001ac0 ldr r8, [r4] | r8 = *(r4);
0x08001ac4 adds r3, r7, r3 | r3 = r7 + r3;
0x08001ac8 ldrh sb, [r4, 6] | sb = *((r4 + 6));
0x08001acc adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x08001ad0 str r3, [sp, 4] | var_4h = r3;
0x08001ad4 str r2, [sp, 8] | var_8h = r2;
0x08001ad8 stmdaeq r0, {r2, r4, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r4, sl, fp, lr}");
0x08001adc ldr r5, [sl, 0xe4] | r5 = *((sl + 0xe4));
0x08001ae0 cmp r5, 0 |
| if (r5 == 0) {
0x08001ae4 beq 0x8001ca8 | goto label_18;
| }
0x08001ae8 ldrh r1, [r4, 6] | r1 = *((r4 + 6));
0x08001aec mvn r2, 0x17 | r2 = ~0x17;
0x08001af0 ldr r3, [r4] | r3 = *(r4);
0x08001af4 add r6, r5, 0x28 | r6 = r5 + 0x28;
0x08001af8 sub r2, r2, r1 | r2 -= r1;
0x08001afc add r3, r3, r2 | r3 += r2;
0x08001b00 str r3, [sp, 0x74] | var_74h = r3;
0x08001b04 ldr r3, [sp, 0x24] | r3 = var_24h;
0x08001b08 add r2, sl, 0x180 | r2 = sl + 0x180;
0x08001b0c ldr r3, [r3] | r3 = *(r3);
0x08001b10 cmp r3, 0 |
0x08001b14 ldr r3, [r4] | r3 = *(r4);
0x08001b18 str r3, [sp, 0x68] | var_68h = r3;
0x08001b1c ldrh r1, [r4, 4] | r1 = *((r4 + 4));
0x08001b20 add r3, r3, r1 | r3 += r1;
0x08001b24 str r3, [sp, 0x6c] | var_6ch = r3;
0x08001b28 ldrb r1, [r4, 8] | r1 = *((r4 + 8));
0x08001b2c ldr r3, [r4] | r3 = *(r4);
0x08001b30 sub r3, r3, r1 | r3 -= r1;
0x08001b34 str r3, [sp, 0x70] | var_70h = r3;
0x08001b38 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x08001b3c str r2, [sp, 0x78] | var_78h = r2;
0x08001b40 ubfx r3, r3, 8, 0x18 | r3 = (r3 >> 8) & ((1 << 0x18) - 1);
0x08001b44 str r3, [sp, 0x80] | var_80h = r3;
| if (r3 > 0) {
0x08001b48 bgt 0x80022d8 | goto label_19;
| }
0x08001b4c add r7, sp, 0x68 | r7 += var_68h;
0x08001b50 mov r1, r6 | r1 = r6;
0x08001b54 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x08001b58 mov r0, r7 | r0 = r7;
0x08001b5c blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x08001b60 mov r6, r0 | r6 = r0;
| label_6:
0x08001b64 cmp r6, 4 |
| if (r6 > 4) {
| /* switch table (5 cases) at 0x8001b70 */
0x08001b68 ldrls pc, [pc, r6, lsl 2] | offset_1 = r6 << 2;
| pc = *((pc + offset_1));
| }
0x08001b6c b 0x8001b84 |
0x08001b84 mov r0, r6 | r0 = r6;
0x08001b88 stmdaeq r0, {r3, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r3, r6, r7, sl, fp, lr}");
0x08001b8c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x08001b90 adds r3, r3, 1 | r3++;
0x08001b94 str r3, [sp, 0x1c] | var_1ch = r3;
0x08001b98 ldr r3, [sp, 0x20] | r3 = var_20h;
0x08001b9c adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x08001ba0 str r3, [sp, 0x20] | var_20h = r3;
0x08001ba4 stmdaeq r0, {r3, r4, sl, fp, lr} | __asm ("stmdaeq r0, {r3, r4, sl, fp, lr}");
0x08001ba8 mov r0, r4 | r0 = r4;
0x08001bac stmdaeq r0, {r2, r3, r4, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r3, r4, sl, fp, lr}");
| label_0:
0x08001bb0 ldr r3, [sp, 0xc] | r3 = var_ch;
0x08001bb4 add fp, fp, 1 |
0x08001bb8 cmp r3, fp |
0x08001bbc bne 0x8001a58 |
| } while (r3 != fp);
0x08001bc0 ldr sb, [sp, 0x28] | sb = var_28h;
0x08001bc4 asr r2, r3, 0x1f | r2 = r3 >> 0x1f;
0x08001bc8 b 0x8001f60 | goto label_13;
| label_18:
0x08001ca8 stmdaeq r0, {r3, r4, sl, fp, lr} | __asm ("stmdaeq r0, {r3, r4, sl, fp, lr}");
0x08001cac ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x08001cb0 ldrh r3, [r4, 6] | r3 = *((r4 + 6));
0x08001cb4 sub r0, r8, sb | r0 = r8 - sb;
0x08001cb8 sub r0, r0, 0x18 | r0 -= 0x18;
0x08001cbc add r3, r3, 0x18 | r3 += 0x18;
0x08001cc0 lsr r1, r1, 8 | r1 >>= 8;
0x08001cc4 sub r5, r3, r5 | r5 = r3 - r5;
0x08001cc8 stmdaeq r0, {r4, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r4, r6, r7, sl, fp, lr}");
0x08001ccc subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 == r0) {
0x08001cd0 beq 0x8002458 | goto label_20;
| }
0x08001cd4 ldr r3, [r6, 0xa8] | r3 = *((r6 + 0xa8));
0x08001cd8 mov r1, r7 | r1 = r7;
0x08001cdc add r3, r3, r5 | r3 += r5;
0x08001ce0 str r3, [r6, 0xa8] | *((r6 + 0xa8)) = r3;
0x08001ce4 ldr r3, [r6, 0x9c] | r3 = *((r6 + 0x9c));
0x08001ce8 add r3, r3, r5 | r3 += r5;
0x08001cec str r3, [r6, 0x9c] | *((r6 + 0x9c)) = r3;
0x08001cf0 stmdaeq r0, {r2, r4, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r4, r6, r7, sl, fp, lr}");
0x08001cf4 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x08001cf8 cmp r3, 2 |
| if (r3 == 2) {
0x08001cfc beq 0x800247c | goto label_21;
| }
| label_11:
0x08001d00 mov r3, 0 | r3 = 0;
0x08001d04 str r3, [r4] | *(r4) = r3;
0x08001d08 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x08001d0c mov r0, r6 | r0 = r6;
0x08001d10 ldr r1, [sl, 0xe0] | r1 = *((sl + 0xe0));
0x08001d14 stmdaeq r0, {r3, r4, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r3, r4, r6, r7, sl, fp, lr}");
0x08001d18 strh r0, [r6, 0x94] | *((r6 + 0x94)) = r0;
| label_5:
0x08001d1c mov r1, r6 | r1 = r6;
0x08001d20 mov r0, sl | r0 = sl;
0x08001d24 stmdaeq r0, {r2, r3, r4, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r3, r4, r6, r7, sl, fp, lr}");
0x08001d28 b 0x8001bb0 | goto label_0;
| label_17:
0x08001d2c ldr r2, [sp, 4] | r2 = var_4h;
0x08001d30 ldr r3, [r6, 0x54] | r3 = *((r6 + 0x54));
0x08001d34 adds r3, r3, r2 | r3 += r2;
0x08001d38 ldr r2, [sp, 8] | r2 = var_8h;
0x08001d3c str r3, [sp, 4] | var_4h = r3;
0x08001d40 ldr r3, [r6, 0x4c] | r3 = *((r6 + 0x4c));
0x08001d44 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x08001d48 str r2, [sp, 8] | var_8h = r2;
0x08001d4c cmp r3, 0 |
| if (r3 == 0) {
0x08001d50 beq 0x8002060 | goto label_22;
| }
0x08001d54 mov r0, r6 | r0 = r6;
0x08001d58 blx r3 | uint32_t (*r3)(uint32_t) (r0);
0x08001d5c str r4, [r6, 0x4c] | *((r6 + 0x4c)) = r4;
0x08001d60 str r4, [r6, 0xc] | *((r6 + 0xc)) = r4;
| label_1:
0x08001d64 stmdaeq r0, {r2, r4, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r4, sl, fp, lr}");
0x08001d68 ldr sb, [sl, 0xe4] | sb = *((sl + 0xe4));
0x08001d6c cmp sb, 0 |
| if (sb == 0) {
0x08001d70 beq 0x80022d0 | goto label_23;
| }
0x08001d74 ldr r2, [r6, 0xa4] | r2 = *((r6 + 0xa4));
0x08001d78 ldrh r5, [r6, 0x9a] | r5 = *((r6 + 0x9a));
0x08001d7c ldr r1, [r6, 0xb0] | r1 = *((r6 + 0xb0));
0x08001d80 ldr r3, [r6, 0xa8] | r3 = *((r6 + 0xa8));
0x08001d84 add r5, r2, r5 | r5 = r2 + r5;
0x08001d88 ldr r4, [r6, 0x54] | r4 = *((r6 + 0x54));
0x08001d8c cmp r1, 1 |
0x08001d90 sub r1, r3, r5 | r1 = r3 - r5;
0x08001d94 str r1, [sp, 0x10] | var_10h = r1;
0x08001d98 add r4, r1, r4 | r4 = r1 + r4;
| if (r1 == 1) {
0x08001d9c beq 0x80020bc | goto label_24;
| }
| label_3:
0x08001da0 add r3, r4, 0x140 | r3 = r4 + 0x140;
0x08001da4 add r3, r3, 1 | r3++;
0x08001da8 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08001dac add r3, r3, 0x100 | r3 += 0x100;
0x08001db0 cmp r3, 0x1000 |
| if (r3 > 0x1000) {
0x08001db4 bhi 0x8002044 | goto label_25;
| }
0x08001db8 mov r3, 0 | r3 = 0;
0x08001dbc movw r0, 0x2a20 | r0 = 0x2a20;
0x08001dc0 mov r2, r3 | r2 = r3;
0x08001dc4 mov r1, r3 | r1 = r3;
0x08001dc8 stmdaeq r0, {r5, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r5, r6, r7, sl, fp, lr}");
0x08001dcc cmp r0, 0 |
| if (r0 == 0) {
0x08001dd0 beq 0x8002044 | goto label_25;
| }
0x08001dd4 ldr r3, [sp, 0x40] | r3 = var_40h;
0x08001dd8 movw r7, 0x102 | r7 = 0x102;
0x08001ddc ldr r2, [sp, 0x10] | r2 = var_10h;
0x08001de0 ldr r3, [r3] | r3 = *(r3);
0x08001de4 rsb r1, r2, 0 | r1 = r2 - ;
0x08001de8 sub r0, r0, r3 | r0 -= r3;
0x08001dec stmdaeq r0, {r2, r5, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r5, r6, r7, sl, fp, lr}");
0x08001df0 stmdaeq r0, {r2, r5, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r5, r6, r7, sl, fp, lr}");
0x08001df4 asr r0, r0, 2 | r0 >>= 2;
0x08001df8 ldr r5, [r3] | r5 = *(r3);
0x08001dfc ldr r3, [sp, 0x44] | r3 = var_44h;
0x08001e00 mla r5, r3, r0, r5 | __asm ("mla r5, r3, r0, r5");
0x08001e04 mov r3, r4 | r3 = r4;
0x08001e08 mov r0, r6 | r0 = r6;
0x08001e0c lsl r5, r5, 0xc | r5 <<= 0xc;
0x08001e10 sub r5, r5, 0x81000000 | r5 -= 0x81000000;
0x08001e14 add r2, r5, r7 | r2 = r5 + r7;
0x08001e18 stmdaeq r0, {r3, r5, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r3, r5, r6, r7, sl, fp, lr}");
0x08001e1c cmp r0, 0 |
| if (r0 != 0) {
0x08001e20 bne 0x800203c | goto label_26;
| }
0x08001e24 ldr r3, [sp, 0x10] | r3 = var_10h;
0x08001e28 mov r0, r5 | r0 = r5;
0x08001e2c mov r1, 0x1000 | r1 = 0x1000;
0x08001e30 add r7, r3, r7 | r7 = r3 + r7;
0x08001e34 ldr r3, [r6, 0x54] | r3 = *((r6 + 0x54));
0x08001e38 str r3, [sp, 0x3c] | var_3ch = r3;
0x08001e3c stmdaeq r0, {r4, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r4, r6, r7, sl, fp, lr}");
0x08001e40 subs r8, r0, 0 | r8 = r0 - 0;
| if (r8 == r0) {
0x08001e44 beq 0x800203c | goto label_26;
| }
0x08001e48 ldr ip, [r8, 0xa8] | ip = *((r8 + 0xa8));
0x08001e4c ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x08001e50 add ip, ip, r7 |
0x08001e54 str ip, [r8, 0xa8] | *((r8 + 0xa8)) = ip;
0x08001e58 ldr ip, [r8, 0x9c] | ip = *((r8 + 0x9c));
0x08001e5c add r2, ip, r7 | r2 = ip + r7;
0x08001e60 str r2, [r8, 0x9c] | *((r8 + 0x9c)) = r2;
0x08001e64 stmdaeq r0, {r2, r4, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r4, r6, r7, sl, fp, lr}");
0x08001e68 mov r1, r6 | r1 = r6;
0x08001e6c mov r0, r8 | r0 = r8;
0x08001e70 stmdaeq r0, {r2, r3, r5, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r3, r5, r6, r7, sl, fp, lr}");
0x08001e74 ldr r2, [r8, 0xa4] | r2 = *((r8 + 0xa4));
0x08001e78 ldr r1, [r8, 0xa8] | r1 = *((r8 + 0xa8));
0x08001e7c ldr r0, [r6, 0xa4] | r0 = *((r6 + 0xa4));
0x08001e80 sub r1, r1, r2 | r1 -= r2;
0x08001e84 ldr r2, [r6, 0xa8] | r2 = *((r6 + 0xa8));
0x08001e88 sub r2, r2, r0 | r2 -= r0;
0x08001e8c mov r0, r8 | r0 = r8;
0x08001e90 sub r1, r1, r2 | r1 -= r2;
0x08001e94 stmdaeq r0, {r4, r5, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r4, r5, r6, r7, sl, fp, lr}");
0x08001e98 mov r0, r6 | r0 = r6;
0x08001e9c stmdaeq r0, {r5, sl, fp, lr} | __asm ("stmdaeq r0, {r5, sl, fp, lr}");
0x08001ea0 ldr r2, [r8, 0xa4] | r2 = *((r8 + 0xa4));
0x08001ea4 ldrh r5, [r8, 0x9a] | r5 = *((r8 + 0x9a));
0x08001ea8 add r5, r2, r5 | r5 = r2 + r5;
| label_4:
0x08001eac ldr r3, [sp, 0x24] | r3 = var_24h;
0x08001eb0 add r1, sl, 0x180 | r1 = sl + 0x180;
0x08001eb4 str r2, [sp, 0x74] | var_74h = r2;
0x08001eb8 add r4, r5, r4 | r4 = r5 + r4;
0x08001ebc str r1, [sp, 0x78] | var_78h = r1;
0x08001ec0 add r6, sb, 0x28 | r6 = sb + 0x28;
0x08001ec4 ldr r1, [r3] | r1 = *(r3);
0x08001ec8 str r5, [sp, 0x68] | var_68h = r5;
0x08001ecc strd r4, r5, [sp, 0x6c] | __asm ("strd r4, r5, [var_6ch]");
0x08001ed0 cmp r1, 0 |
0x08001ed4 ldr r1, [r8, 0xa0] | r1 = *((r8 + 0xa0));
0x08001ed8 sub r2, r1, r2 | r2 = r1 - r2;
0x08001edc add r2, r2, 0x100 | r2 += 0x100;
0x08001ee0 str r2, [sp, 0x80] | var_80h = r2;
| if (r1 > 0) {
0x08001ee4 bgt 0x800248c | goto label_27;
| }
0x08001ee8 add r7, sp, 0x68 | r7 += var_68h;
0x08001eec mov r1, r6 | r1 = r6;
0x08001ef0 ldr r2, [sb, 0x24] | r2 = *((sb + 0x24));
0x08001ef4 mov r0, r7 | r0 = r7;
0x08001ef8 blx r2 | r0 = uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x08001efc mov r6, r0 | r6 = r0;
| label_12:
0x08001f00 cmp r6, 4 |
| if (r6 > 4) {
| /* switch table (5 cases) at 0x8001f0c */
0x08001f04 ldrls pc, [pc, r6, lsl 2] | offset_2 = r6 << 2;
| pc = *((pc + offset_2));
| }
0x08001f08 b 0x8001f20 |
0x08001f20 mov r0, r6 | r0 = r6;
0x08001f24 stmdaeq r0, {r3, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r3, r6, r7, sl, fp, lr}");
0x08001f28 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x08001f2c mov r6, r8 | r6 = r8;
0x08001f30 adds r2, r3, 1 | r2 = r3 + 1;
0x08001f34 ldr r3, [sp, 0x20] | r3 = var_20h;
0x08001f38 str r2, [sp, 0x1c] | var_1ch = r2;
0x08001f3c adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x08001f40 str r3, [sp, 0x20] | var_20h = r3;
| do {
0x08001f44 stmdaeq r0, {r3, r4, sl, fp, lr} | __asm ("stmdaeq r0, {r3, r4, sl, fp, lr}");
0x08001f48 mov r0, r6 | r0 = r6;
0x08001f4c stmdaeq r0, {r5, sl, fp, lr} | __asm ("stmdaeq r0, {r5, sl, fp, lr}");
0x08001f50 b 0x8001bb0 | goto label_0;
| label_15:
0x08001f54 ldr sb, [sp, 0x28] | sb = var_28h;
0x08001f58 mov r3, fp | r3 = fp;
0x08001f5c asr r2, fp, 0x1f | r2 = fp >> 0x1f;
| label_13:
0x08001f60 ldr r1, [sl, 0x108] | r1 = *((sl + 0x108));
0x08001f64 ldr r0, [sp, 0x34] | r0 = var_34h;
0x08001f68 ldr lr, [sp, 4] | lr = var_4h;
0x08001f6c adds r1, r1, r0 | r1 += r0;
0x08001f70 ldr r0, [sp, 0x38] | r0 = var_38h;
0x08001f74 str r1, [sl, 0x108] | *((sl + 0x108)) = r1;
0x08001f78 ldr r1, [sl, 0x10c] | r1 = *((sl + 0x10c));
0x08001f7c ldr ip, [sp, 0x1c] | ip = var_1ch;
0x08001f80 adc r1, r0, r1 | __asm ("adc r1, r0, r1");
0x08001f84 str r1, [sl, 0x10c] | *((sl + 0x10c)) = r1;
0x08001f88 ldr r1, [sl, 0x100] | r1 = *((sl + 0x100));
0x08001f8c ldr r0, [sp, 0x14] | r0 = var_14h;
0x08001f90 adds r1, r1, lr | r1 += lr;
0x08001f94 ldr lr, [sl, 0x104] |
0x08001f98 str r1, [sl, 0x100] | *((sl + 0x100)) = r1;
0x08001f9c ldr r1, [sp, 8] | r1 = var_8h;
0x08001fa0 adc r1, r1, lr | __asm ("adc r1, r1, lr");
0x08001fa4 str r1, [sl, 0x104] | *((sl + 0x104)) = r1;
0x08001fa8 ldr r1, [sl, 0x110] | r1 = *((sl + 0x110));
0x08001fac adds r1, r1, ip | r1 += ip;
0x08001fb0 ldr ip, [sl, 0x114] | ip = *((sl + 0x114));
0x08001fb4 str r1, [sl, 0x110] | *((sl + 0x110)) = r1;
0x08001fb8 ldr r1, [sp, 0x20] | r1 = var_20h;
0x08001fbc adc r1, r1, ip | __asm ("adc r1, r1, ip");
0x08001fc0 str r1, [sl, 0x114] | *((sl + 0x114)) = r1;
0x08001fc4 ldr r1, [sl, 0xf0] | r1 = *((sl + 0xf0));
0x08001fc8 adds r1, r1, r0 | r1 += r0;
0x08001fcc ldr r0, [sp, 0x18] | r0 = var_18h;
0x08001fd0 str r1, [sl, 0xf0] | *((sl + 0xf0)) = r1;
0x08001fd4 ldr r1, [sl, 0xf4] | r1 = *((sl + 0xf4));
0x08001fd8 adc r1, r0, r1 | __asm ("adc r1, r0, r1");
0x08001fdc str r1, [sl, 0xf4] | *((sl + 0xf4)) = r1;
0x08001fe0 ldr r1, [sl, 0xf8] | r1 = *((sl + 0xf8));
0x08001fe4 adds r1, r1, r3 | r1 += r3;
0x08001fe8 ldr r3, [sl, 0xfc] | r3 = *((sl + 0xfc));
0x08001fec str r1, [sl, 0xf8] | *((sl + 0xf8)) = r1;
0x08001ff0 adc r2, r2, r3 | __asm ("adc r2, r2, r3");
0x08001ff4 ldr r3, [sp, 0xc] | r3 = var_ch;
0x08001ff8 str r2, [sl, 0xfc] | *((sl + 0xfc)) = r2;
0x08001ffc cmp r3, fp |
| if (r3 > fp) {
0x08002000 bgt 0x80023a4 | goto label_28;
| }
| label_9:
0x08002004 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x08002008 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0800200c orrs r3, r3, r2 | r3 |= r2;
| if (r3 != r3) {
0x08002010 bne 0x8002360 | goto label_29;
| }
| label_8:
0x08002014 ldr r3, [sp, 0x34] | r3 = var_34h;
0x08002018 ldr r2, [sp, 0x38] | r2 = var_38h;
0x0800201c orrs r3, r3, r2 | r3 |= r2;
| if (r3 != r3) {
0x08002020 bne 0x8002358 | goto label_30;
| }
| label_7:
0x08002024 ldr r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x08002028 mov r0, fp | r0 = fp;
0x0800202c bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x08002030 str r3, [sb, 0x10] | *((sb + 0x10)) = r3;
0x08002034 add sp, sp, 0xcc |
0x08002038 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_26:
0x0800203c mov r0, r5 | r0 = r5;
0x08002040 stmdaeq r0, {r2, r4, r5, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r4, r5, r6, r7, sl, fp, lr}");
| label_25:
0x08002044 ldr r3, [sp, 0x14] | r3 = var_14h;
0x08002048 adds r3, r3, 1 | r3++;
0x0800204c str r3, [sp, 0x14] | var_14h = r3;
0x08002050 ldr r3, [sp, 0x18] | r3 = var_18h;
0x08002054 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x08002058 str r3, [sp, 0x18] | var_18h = r3;
0x0800205c b 0x8001f44 |
| } while (1);
| label_22:
0x08002060 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x08002064 cmp r3, 0 |
| if (r3 == 0) {
0x08002068 beq 0x8001d64 | goto label_1;
| }
0x0800206c udf 0x12 | __asm ("udf 0x12");
| label_16:
0x08002070 cmp r3, lr |
| if (r3 < lr) {
0x08002074 blt 0x80020ac | goto label_31;
| }
0x08002078 mov r1, 0 | r1 = 0;
0x0800207c str r1, [ip, r3, lsl 2] | offset_3 = r3 << 2;
| *((ip + offset_3)) = r1;
0x08002080 sub r3, r3, 1 | r3--;
0x08002084 ldr r0, [sl, 0x144] | r0 = *((sl + 0x144));
0x08002088 cmp r0, r3 |
| if (r0 > r3) {
0x0800208c bgt 0x80020a8 | goto label_32;
| }
| do {
0x08002090 ldr r0, [sl, 0x150] | r0 = *((sl + 0x150));
0x08002094 str r1, [r0, r3, lsl 2] | offset_4 = r3 << 2;
| *((r0 + offset_4)) = r1;
0x08002098 sub r3, r3, 1 | r3--;
0x0800209c ldr r0, [sl, 0x144] | r0 = *((sl + 0x144));
0x080020a0 cmp r0, r3 |
0x080020a4 ble 0x8002090 |
| } while (r0 <= r3);
| label_32:
0x080020a8 ldr r1, [sl, 0x148] | r1 = *((sl + 0x148));
| label_31:
0x080020ac cmp r2, r1 |
| if (r2 < r1) {
0x080020b0 movge r2, 0 | r2 = 0;
| }
0x080020b4 str r2, [sl, 0x144] | *((sl + 0x144)) = r2;
0x080020b8 b 0x8001aa4 | goto label_2;
| label_24:
0x080020bc ldrb r1, [r6, 0x62] | r1 = *((r6 + 0x62));
0x080020c0 tst r1, 0x20 |
| if ((r1 & 0x20) == 0) {
0x080020c4 beq 0x8001da0 | goto label_3;
| }
0x080020c8 tst r1, 1 |
| if ((r1 & 1) == 0) {
0x080020cc beq 0x80020e4 | goto label_33;
| }
0x080020d0 ldr r1, [r6, 0xa0] | r1 = *((r6 + 0xa0));
0x080020d4 ldr r1, [r1, 0x20] | r1 = *((r1 + 0x20));
0x080020d8 uxth r1, r1 | r1 = (int16_t) r1;
0x080020dc cmp r1, 1 |
| if (r1 != 1) {
0x080020e0 bne 0x8001da0 | goto label_3;
| }
| label_33:
0x080020e4 ldr r1, [sp, 0x10] | r1 = var_10h;
0x080020e8 sub r3, r3, r2 | r3 -= r2;
0x080020ec sub r3, r3, r1 | r3 -= r1;
0x080020f0 ldr r1, [r6, 0x58] | r1 = *((r6 + 0x58));
0x080020f4 subs r1, r1, 0 |
| if (r1 == r1) {
0x080020f8 movne r1, 1 | r1 = 1;
| }
0x080020fc cmp r3, 0xff |
| if (r3 > 0xff) {
0x08002100 orrls r1, r1, 1 | r1 |= 1;
| }
0x08002104 cmp r1, 0 |
| if (r1 != 0) {
0x08002108 bne 0x8001da0 | goto label_3;
| }
0x0800210c mov r8, r6 | r8 = r6;
0x08002110 b 0x8001eac | goto label_4;
| label_23:
0x080022d0 stmdaeq r0, {r3, r4, sl, fp, lr} | __asm ("stmdaeq r0, {r3, r4, sl, fp, lr}");
0x080022d4 b 0x8001d1c | goto label_5;
| label_19:
0x080022d8 add r7, sp, 0x68 | r7 += var_68h;
0x080022dc stmdaeq r0, {r3, r4, r5, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, sl, fp, lr}");
0x080022e0 mov r3, r1 | r3 = r1;
0x080022e4 str r0, [sp, 0x48] | var_48h = r0;
0x080022e8 mov r1, r6 | r1 = r6;
0x080022ec str r3, [sp, 0x10] | var_10h = r3;
0x080022f0 mov r0, r7 | r0 = r7;
0x080022f4 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x080022f8 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x080022fc ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x08002300 mov r6, r0 | r6 = r0;
0x08002304 ldr r3, [r3, 0x198] | r3 = *((r3 + 0x198));
0x08002308 str r3, [sp, 0x3c] | var_3ch = r3;
0x0800230c ldr r1, [r3] | r1 = *(r3);
0x08002310 adds r1, r1, 1 | r1++;
0x08002314 str r1, [r3] | *(r3) = r1;
0x08002318 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x0800231c adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x08002320 str r1, [r3, 4] | *((r3 + 4)) = r1;
0x08002324 stmdaeq r0, {r3, r4, r5, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, sl, fp, lr}");
0x08002328 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0800232c ldr r2, [sp, 0x48] | r2 = var_48h;
0x08002330 ldr ip, [r3, 8] | ip = *((r3 + 8));
0x08002334 adds r0, r0, ip | r0 += ip;
0x08002338 ldr ip, [r3, 0xc] | ip = *((r3 + 0xc));
0x0800233c adc ip, ip, r1 | __asm ("adc ip, ip, r1");
0x08002340 subs r0, r0, r2 | r0 -= r2;
0x08002344 ldr r2, [sp, 0x10] | r2 = var_10h;
0x08002348 str r0, [r3, 8] | *((r3 + 8)) = r0;
0x0800234c sbc ip, ip, r2 | __asm ("sbc ip, ip, r2");
0x08002350 str ip, [r3, 0xc] | *((r3 + 0xc)) = ip;
0x08002354 b 0x8001b64 | goto label_6;
| label_30:
0x08002358 stmdaeq r0, {r2, r3, r4, r5, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r6, r7, sl, fp, lr}");
0x0800235c b 0x8002024 | goto label_7;
| label_29:
0x08002360 ldr r4, [sl, 0xe0] | r4 = *((sl + 0xe0));
0x08002364 stmdaeq r0, {r2, r4, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r4, sl, fp, lr}");
0x08002368 mov r0, sl | r0 = sl;
0x0800236c add r1, sp, 0x84 | r1 += var_84h;
0x08002370 bl 0x8000d98 | veth_xdp_flush_bq ();
0x08002374 ldr r3, [r4, 0x540] | r3 = *((r4 + 0x540));
0x08002378 cmp r3, 0 |
| if (r3 != 0) {
0x0800237c beq 0x800239c |
0x08002380 ldr r4, [r3, 0x554] | r4 = *((r3 + 0x554));
0x08002384 ldr r3, [r4, 0xe4] | r3 = *((r4 + 0xe4));
0x08002388 cmp r3, 0 |
| if (r3 == 0) {
0x0800238c beq 0x800239c | goto label_10;
| }
0x08002390 ldrb r3, [r4, 0x138] | r3 = *((r4 + 0x138));
0x08002394 cmp r3, 0 |
| if (r3 == 0) {
0x08002398 beq 0x8002434 | goto label_34;
| }
| }
| label_10:
0x0800239c stmdaeq r0, {r3, r4, sl, fp, lr} | __asm ("stmdaeq r0, {r3, r4, sl, fp, lr}");
0x080023a0 b 0x8002014 | goto label_8;
| label_28:
0x080023a4 mov r1, fp | r1 = fp;
0x080023a8 mov r0, sl | r0 = sl;
0x080023ac stmdaeq r0, {r8, sl, fp, lr} | __asm ("stmdaeq r0, {r8, sl, fp, lr}");
0x080023b0 cmp r0, 0 |
| if (r0 == 0) {
0x080023b4 beq 0x8002004 | goto label_9;
| }
0x080023b8 mov r3, 0 | r3 = 0;
0x080023bc strb r3, [sl, 0x138] | *((sl + 0x138)) = r3;
0x080023c0 ldr r3, [sl, 0x148] | r3 = *((sl + 0x148));
0x080023c4 cmp r3, 0 |
| if (r3 == 0) {
0x080023c8 beq 0x8002004 | goto label_9;
| }
0x080023cc ldr r2, [sl, 0x140] | r2 = *((sl + 0x140));
0x080023d0 ldr r3, [sl, 0x150] | r3 = *((sl + 0x150));
0x080023d4 ldr r3, [r3, r2, lsl 2] | offset_5 = r2 << 2;
| r3 = *((r3 + offset_5));
0x080023d8 cmp r3, 0 |
| if (r3 == 0) {
0x080023dc beq 0x8002004 | goto label_9;
| }
0x080023e0 mov r3, 1 | r3 = 1;
0x080023e4 mov r0, sl | r0 = sl;
0x080023e8 strb r3, [sl, 0x138] | *((sl + 0x138)) = r3;
0x080023ec stmdaeq r0, {r2, r4, r6, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r4, r6, sl, fp, lr}");
0x080023f0 cmp r0, 0 |
| if (r0 == 0) {
0x080023f4 beq 0x8002004 | goto label_9;
| }
0x080023f8 mov r0, sl | r0 = sl;
0x080023fc stmdaeq r0, {r3, r4, r6, sl, fp, lr} | __asm ("stmdaeq r0, {r3, r4, r6, sl, fp, lr}");
0x08002400 b 0x8002004 | goto label_9;
| label_34:
0x08002434 mov r3, 1 | r3 = 1;
0x08002438 mov r0, r4 | r0 = r4;
0x0800243c strb r3, [r4, 0x138] | *((r4 + 0x138)) = r3;
0x08002440 stmdaeq r0, {r2, r4, r6, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r4, r6, sl, fp, lr}");
0x08002444 cmp r0, 0 |
| if (r0 == 0) {
0x08002448 beq 0x800239c | goto label_10;
| }
0x0800244c mov r0, r4 | r0 = r4;
0x08002450 stmdaeq r0, {r3, r4, r6, sl, fp, lr} | __asm ("stmdaeq r0, {r3, r4, r6, sl, fp, lr}");
0x08002454 b 0x800239c | goto label_10;
| label_20:
0x08002458 mov r0, r4 | r0 = r4;
0x0800245c stmdaeq r0, {r2, r3, r4, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r3, r4, sl, fp, lr}");
0x08002460 ldr r3, [sp, 0x14] | r3 = var_14h;
0x08002464 adds r3, r3, 1 | r3++;
0x08002468 str r3, [sp, 0x14] | var_14h = r3;
0x0800246c ldr r3, [sp, 0x18] | r3 = var_18h;
0x08002470 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x08002474 str r3, [sp, 0x18] | var_18h = r3;
0x08002478 b 0x8001bb0 | goto label_0;
| label_21:
0x0800247c mov r1, r4 | r1 = r4;
0x08002480 ldr r0, [r1], 0xc | r0 = *(r1);
| r1 += 0xc;
0x08002484 stmdaeq r0, {r2, r8, sl, fp, lr} | __asm ("stmdaeq r0, {r2, r8, sl, fp, lr}");
0x08002488 b 0x8001d00 | goto label_11;
| label_27:
0x0800248c add r7, sp, 0x68 | r7 += var_68h;
0x08002490 stmdaeq r0, {r3, r4, r5, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, sl, fp, lr}");
0x08002494 mov r2, r1 | r2 = r1;
0x08002498 str r0, [sp, 0x3c] | var_3ch = r0;
0x0800249c mov r1, r6 | r1 = r6;
0x080024a0 str r2, [sp, 0x48] | var_48h = r2;
0x080024a4 mov r0, r7 | r0 = r7;
0x080024a8 ldr r2, [sb, 0x24] | r2 = *((sb + 0x24));
0x080024ac blx r2 | uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x080024b0 ldr r2, [sb, 0x1c] | r2 = *((sb + 0x1c));
0x080024b4 mov r6, r0 | r6 = r0;
0x080024b8 ldr r2, [r2, 0x198] | r2 = *((r2 + 0x198));
0x080024bc str r2, [sp, 0x4c] | var_4ch = r2;
0x080024c0 ldr r1, [r2] | r1 = *(r2);
0x080024c4 adds r1, r1, 1 | r1++;
0x080024c8 str r1, [r2] | *(r2) = r1;
0x080024cc ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x080024d0 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x080024d4 str r1, [r2, 4] | *((r2 + 4)) = r1;
0x080024d8 stmdaeq r0, {r3, r4, r5, r6, r7, sl, fp, lr} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, sl, fp, lr}");
0x080024dc ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x080024e0 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x080024e4 ldr ip, [r2, 8] | ip = *((r2 + 8));
0x080024e8 adds r0, r0, ip | r0 += ip;
0x080024ec ldr ip, [r2, 0xc] | ip = *((r2 + 0xc));
0x080024f0 adc r1, ip, r1 | __asm ("adc r1, ip, r1");
0x080024f4 subs r0, r0, r3 | r0 -= r3;
0x080024f8 ldr r3, [sp, 0x48] | r3 = var_48h;
0x080024fc sbc r1, r1, r3 | __asm ("sbc r1, r1, r3");
0x08002500 strd r0, r1, [r2, 8] | __asm ("strd r0, r1, [r2, 8]");
0x08002504 b 0x8001f00 | goto label_12;
| label_14:
0x08002530 mov r2, r3 | r2 = r3;
0x08002534 mov fp, r3 |
0x08002538 str r3, [sp, 0x2c] | var_2ch = r3;
0x0800253c str r3, [sp, 0x30] | var_30h = r3;
0x08002540 str r3, [sp, 0x1c] | var_1ch = r3;
0x08002544 str r3, [sp, 0x20] | var_20h = r3;
0x08002548 str r3, [sp, 0x34] | var_34h = r3;
0x0800254c str r3, [sp, 0x38] | var_38h = r3;
0x08002550 str r3, [sp, 4] | var_4h = r3;
0x08002554 str r3, [sp, 8] | var_8h = r3;
0x08002558 str r3, [sp, 0x14] | var_14h = r3;
0x0800255c str r3, [sp, 0x18] | var_18h = r3;
0x08002560 b 0x8001f60 | goto label_13;
| }
[*] Function mmap used 1 times veth.ko