[*] Binary protection state of tun.ko
No RELRO No Canary found NX disabled REL No RPATH No RUNPATH Symbols
[*] Function popen tear down of tun.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/tun.ko @ 0x80056ac */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.tun_chr_ioctl () | void tun_chr_ioctl (int32_t arg_0h, int32_t arg_9cch, int32_t arg_9d4h, int32_t arg_9d8h, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_37h;
| int32_t var_38h;
| int32_t var_4ch;
| r0 = arg1;
| r1 = arg2;
0x080056ac push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x080056b0 movw r3, 0x54d9 |
0x080056b4 movt r3, 0x4004 | r3 = 0x400454d9;
0x080056b8 ldr sb, [r0, 0x84] | sb = *(arg_0hx84);
0x080056bc mov r4, r2 | r4 = r2;
0x080056c0 movw r2, 0x54ca |
0x080056c4 movt r2, 0x4004 | r2 = 0x400454ca;
0x080056c8 sub sp, sp, 0x4c |
0x080056cc mov r5, r0 | r5 = r0;
0x080056d0 ldr r8, [sb, 0x24] | r8 = *((sb + 0x24));
0x080056d4 mov r6, r1 | r6 = r1;
0x080056d8 cmp r1, r3 |
0x080056dc cmpne r1, r2 | __asm ("cmpne r1, r2");
| if (r1 == r3) {
0x080056e0 beq 0x800582c | goto label_20;
| }
0x080056e4 ubfx r1, r1, 8, 8 | r1 = (r1 >> 8) & ((1 << 8) - 1);
0x080056e8 movw r3, 0x894c | r3 = 0x894c;
0x080056ec sub r1, r1, 0x89 | r1 -= 0x89;
0x080056f0 cmp r6, r3 |
0x080056f4 clz r1, r1 | r1 &= r1;
0x080056f8 lsr r1, r1, 5 | r1 >>= 5;
| if (r6 != r3) {
0x080056fc moveq r1, 0 | r1 = 0;
| }
0x08005700 cmp r1, 0 |
| if (r1 != 0) {
0x08005704 bne 0x800582c | goto label_20;
| }
0x08005708 add r7, sp, 0x28 | r7 += var_28h;
0x0800570c mov r2, 0x20 | r2 = 0x20;
0x08005710 mov r0, r7 | r0 = r7;
0x08005714 stmdaeq r0, {r0, r3, r4, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r4, r7, sb, fp, lr, pc}");
0x08005718 movw r3, 0x54cf |
0x0800571c movt r3, 0x8004 | r3 = 0x800454cf;
0x08005720 cmp r6, r3 |
| if (r6 == r3) {
0x08005724 beq 0x8005944 | goto label_21;
| }
| do {
0x08005728 movw r3, 0x894c | r3 = 0x894c;
0x0800572c cmp r6, r3 |
| if (r6 == r3) {
0x08005730 beq 0x8005910 | goto label_22;
| }
0x08005734 stmdaeq r0, {r0, r2, r3, r4, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r4, r7, sb, fp, lr, pc}");
0x08005738 stmdaeq r0, {r0, r2, r7, r8, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r7, r8, fp, lr, pc}");
0x0800573c ldr sl, [sb, 0x228] | sl = *((sb + 0x228));
0x08005740 cmp sl, 0 |
| if (sl == 0) {
0x08005744 beq 0x8005b8c | goto label_23;
| }
0x08005748 ldr r3, [sl, 0x410] | r3 = *((sl + 0x410));
0x0800574c mrs r1, apsr | r1 = apsr;
0x08005750 cpsid i | __asm ("cpsid i");
0x08005754 ldr r2, [r3, 0x298] | r2 = *((r3 + 0x298));
0x08005758 ldr r3, [r2] | r3 = *(r2);
0x0800575c add r3, r3, 1 | r3++;
0x08005760 str r3, [r2] | *(r2) = r3;
0x08005764 msr cpsr_c, r1 | cpsr_c = r1;
0x08005768 stmdaeq r0, {r0, r3, r7, r8, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r7, r8, fp, lr, pc}");
0x0800576c movw r3, 0x54ca |
0x08005770 movt r3, 0x4004 | r3 = 0x400454ca;
0x08005774 cmp r6, r3 |
| if (r6 == r3) {
0x08005778 beq 0x8005bbc | goto label_24;
| }
0x0800577c movw r3, 0x54da |
0x08005780 movt r3, 0x4004 | r3 = 0x400454da;
0x08005784 cmp r6, r3 |
| if (r6 == r3) {
0x08005788 beq 0x80059b0 | goto label_25;
| }
0x0800578c ldr r3, [sl, 0x474] | r3 = *((sl + 0x474));
0x08005790 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x08005794 bne 0x8006edc | goto label_26;
| }
| label_19:
0x08005798 ldr r0, [sl, 0x410] | r0 = *((sl + 0x410));
0x0800579c movw r3, 0x54e2 |
0x080057a0 movt r3, 0x4004 | r3 = 0x400454e2;
0x080057a4 cmp r6, r3 |
0x080057a8 ldr r5, [r0, 0x2b4] | r5 = *((r0 + 0x2b4));
| if (r6 > r3) {
0x080057ac bhi 0x8005a68 | goto label_27;
| }
0x080057b0 movw r3, 0x54c7 |
0x080057b4 movt r3, 0x4004 | r3 = 0x400454c7;
0x080057b8 cmp r6, r3 |
| if (r6 > r3) {
0x080057bc bhi 0x80059e4 | goto label_28;
| }
0x080057c0 movw r3, 0x8924 | r3 = 0x8924;
0x080057c4 cmp r6, r3 |
| if (r6 == r3) {
0x080057c8 beq 0x8006934 | goto label_29;
| }
0x080057cc movw r3, 0x8927 | r3 = 0x8927;
0x080057d0 cmp r6, r3 |
| if (r6 != r3) {
0x080057d4 bne 0x8005990 | goto label_30;
| }
0x080057d8 mov r2, r0 | r2 = r0;
0x080057dc mov r1, r5 | r1 = r5;
0x080057e0 add r0, sp, 0x38 | r0 += var_38h;
0x080057e4 stmdaeq r0, {r0, r2, r3, r4, r6, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r4, r6, r8, sb, fp, lr, pc}");
0x080057e8 mov r3, sp | r3 = sp;
0x080057ec bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x080057f0 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x080057f4 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x080057f8 adds r1, r4, 0x20 | r1 = r4 + 0x20;
0x080057fc sbcslo r1, r1, r3 | __asm ("sbcslo r1, r1, r3");
| if (r1 >= r4) {
0x08005800 movlo r3, 0 | r3 = 0;
| }
0x08005804 cmp r3, 0 |
| if (r3 != 0) {
0x08005808 bne 0x8005d98 | goto label_5;
| }
0x0800580c mrc p15, 0, r5, c3, c0, 0 | __asm ("mrc p15, 0, r5, c3, c0, 0");
0x08005810 bic r3, r5, 0xc | r3 = BIT_MASK (r5, 0xc);
0x08005814 orr r3, r3, 4 | r3 |= 4;
0x08005818 mcr p15, 0, r3, c3, c0, 0 | __asm ("mcr p15, 0, r3, c3, c0, 0");
0x0800581c isb sy | __asm ("isb sy");
0x08005820 mov r2, 0x20 | r2 = 0x20;
0x08005824 mov r1, r7 | r1 = r7;
0x08005828 b 0x8005dec | goto label_31;
| label_20:
0x0800582c mov r3, sp | r3 = sp;
0x08005830 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08005834 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08005838 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x0800583c adds r1, r4, 0x20 | r1 = r4 + 0x20;
0x08005840 sbcslo r1, r1, r3 | __asm ("sbcslo r1, r1, r3");
| if (r1 >= r4) {
0x08005844 movlo r3, 0 | r3 = 0;
| }
0x08005848 cmp r3, 0 |
| if (r3 != 0) {
0x0800584c bne 0x8005cb4 | goto label_32;
| }
0x08005850 mrc p15, 0, fp, c3, c0, 0 | __asm ("mrc p15, 0, fp, c3, c0, 0");
0x08005854 bic r3, fp, 0xc | r3 = BIT_MASK (fp, 0xc);
0x08005858 orr r3, r3, 4 | r3 |= 4;
0x0800585c mcr p15, 0, r3, c3, c0, 0 | __asm ("mcr p15, 0, r3, c3, c0, 0");
0x08005860 isb sy | __asm ("isb sy");
0x08005864 add r7, sp, 0x28 | r7 += var_28h;
0x08005868 mov r1, r4 | r1 = r4;
0x0800586c mov r0, r7 | r0 = r7;
0x08005870 mov r2, 0x20 | r2 = 0x20;
0x08005874 stmdaeq r0, {r0, r2, r3, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r5, r7, sb, fp, lr, pc}");
0x08005878 mov sl, r0 | sl = r0;
0x0800587c mcr p15, 0, fp, c3, c0, 0 | __asm ("mcr p15, 0, fp, c3, c0, 0");
0x08005880 isb sy | __asm ("isb sy");
0x08005884 cmp r0, 0 |
| if (r0 != 0) {
0x08005888 bne 0x8005cb4 | goto label_32;
| }
0x0800588c movw r3, 0x54cf |
0x08005890 movt r3, 0x8004 | r3 = 0x800454cf;
0x08005894 cmp r6, r3 |
| if (r6 == r3) {
0x08005898 beq 0x8005944 | goto label_21;
| }
0x0800589c movw r3, 0x54d9 |
0x080058a0 movt r3, 0x4004 | r3 = 0x400454d9;
0x080058a4 cmp r6, r3 |
0x080058a8 bne 0x8005728 |
| } while (r6 != r3);
0x080058ac ldr r7, [r5, 0x84] | r7 = *((r5 + 0x84));
0x080058b0 stmdaeq r0, {r0, r2, r3, r4, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r4, r7, sb, fp, lr, pc}");
0x080058b4 ldrsh r3, [sp, 0x38] | r3 = var_38h;
0x080058b8 tst r3, 0x200 |
| if ((r3 & 0x200) != 0) {
0x080058bc bne 0x8005cbc | goto label_33;
| }
0x080058c0 tst r3, 0x400 |
| if ((r3 & 0x400) == 0) {
0x080058c4 beq 0x80068cc | goto label_34;
| }
0x080058c8 ldr r4, [r7, 0x228] | r4 = *((r7 + 0x228));
0x080058cc cmp r4, 0 |
| if (r4 == 0) {
0x080058d0 beq 0x80068cc | goto label_34;
| }
0x080058d4 ldr r3, [r4, 0x404] | r3 = *((r4 + 0x404));
0x080058d8 tst r3, 0x100 |
| if ((r3 & 0x100) == 0) {
0x080058dc beq 0x80068cc | goto label_34;
| }
0x080058e0 ldr r1, [r7, 0x330] | r1 = *((r7 + 0x330));
0x080058e4 cmp r1, 0 |
| if (r1 != 0) {
0x080058e8 bne 0x80068cc | goto label_34;
| }
0x080058ec mov r0, r7 | r0 = r7;
0x080058f0 mov r6, r1 | r6 = r1;
0x080058f4 bl 0x8002a44 | tun_detach ();
| label_4:
0x080058f8 ldr r0, [r4, 0x410] | r0 = *((r4 + 0x410));
0x080058fc stmdaeq r0, {r0, r3, r4, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r4, r5, r7, sb, fp, lr, pc}");
| label_3:
0x08005900 stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc}");
0x08005904 mov r0, r6 | r0 = r6;
0x08005908 add sp, sp, 0x4c |
0x0800590c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_22:
0x08005910 ldr r0, [r8, 0x30] | r0 = *((r8 + 0x30));
0x08005914 mov r1, 0xc | r1 = 0xc;
0x08005918 stmdaeq r0, {r0, r5, r6, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r5, r6, r8, sb, fp, lr, pc}");
0x0800591c cmp r0, 0 |
| if (r0 == 0) {
0x08005920 beq 0x80068d4 | goto label_35;
| }
0x08005924 add r0, r8, 0x48 | r0 = r8 + 0x48;
0x08005928 stmdaeq r0, {r0, r2, r5, r6, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r6, r8, sb, fp, lr, pc}");
0x0800592c stmdaeq r0, {r0, r2, r5, r6, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r6, r8, sb, fp, lr, pc}");
0x08005930 stmdaeq r0, {r0, r3, r5, r6, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r5, r6, r8, sb, fp, lr, pc}");
0x08005934 mov r6, r0 | r6 = r0;
| label_1:
0x08005938 mov r0, r6 | r0 = r6;
0x0800593c add sp, sp, 0x4c |
0x08005940 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_21:
0x08005944 mov r3, sp | r3 = sp;
0x08005948 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x0800594c bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08005950 mrc p15, 0, r5, c3, c0, 0 | __asm ("mrc p15, 0, r5, c3, c0, 0");
0x08005954 bic r2, r5, 0xc | r2 = BIT_MASK (r5, 0xc);
0x08005958 orr r2, r2, 4 | r2 |= 4;
0x0800595c mcr p15, 0, r2, c3, c0, 0 | __asm ("mcr p15, 0, r2, c3, c0, 0");
0x08005960 isb sy | __asm ("isb sy");
0x08005964 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x08005968 mov r0, r4 | r0 = r4;
0x0800596c movw r2, 0x7133 | r2 = 0x7133;
0x08005970 sub r1, r1, 1 | r1--;
0x08005974 stmdaeq r0, {r0, r2, r3, r5, r6, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r5, r6, r8, sb, fp, lr, pc}");
0x08005978 mov r6, r0 | r6 = r0;
0x0800597c mcr p15, 0, r5, c3, c0, 0 | __asm ("mcr p15, 0, r5, c3, c0, 0");
0x08005980 isb sy | __asm ("isb sy");
0x08005984 mov r0, r6 | r0 = r6;
0x08005988 add sp, sp, 0x4c |
0x0800598c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_30:
0x08005990 movw r3, 0x54e3 | r3 = 0x54e3;
0x08005994 cmp r6, r3 |
| if (r6 != r3) {
0x08005998 bne 0x8005b00 | goto label_0;
| }
0x0800599c ldr r0, [r5, 0x30] | r0 = *((r5 + 0x30));
0x080059a0 mov r1, 0xc | r1 = 0xc;
0x080059a4 stmdaeq r0, {r0, r5, r6, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r5, r6, r8, sb, fp, lr, pc}");
0x080059a8 cmp r0, 0 |
| if (r0 != 0) {
0x080059ac bne 0x800640c | goto label_36;
| }
| label_25:
0x080059b0 mvn r6, 0 | r6 = ~0;
0x080059b4 stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc}");
| do {
| label_2:
0x080059b8 ldr r3, [sl, 0x410] | r3 = *((sl + 0x410));
0x080059bc mrs r1, apsr | r1 = apsr;
0x080059c0 cpsid i | __asm ("cpsid i");
0x080059c4 ldr r2, [r3, 0x298] | r2 = *((r3 + 0x298));
0x080059c8 ldr r3, [r2] | r3 = *(r2);
0x080059cc sub r3, r3, 1 | r3--;
0x080059d0 str r3, [r2] | *(r2) = r3;
0x080059d4 msr cpsr_c, r1 | cpsr_c = r1;
0x080059d8 mov r0, r6 | r0 = r6;
0x080059dc add sp, sp, 0x4c |
0x080059e0 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_28:
0x080059e4 movw r3, 0xab38 |
0x080059e8 movt r3, 0xbffb | r3 = 0xbffbab38;
0x080059ec add r3, r6, r3 | r3 = r6 + r3;
0x080059f0 cmp r3, 0x1a |
| if (r3 > 0x1a) {
| /* switch table (27 cases) at 0x80059fc */
0x080059f4 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x080059f8 b 0x8005b00 | goto label_0;
| label_27:
0x08005a68 movw r3, 0x54e1 |
0x08005a6c movt r3, 0x8004 | r3 = 0x800454e1;
0x08005a70 cmp r6, r3 |
| if (r6 <= r3) {
0x08005a74 bhi 0x8005ae0 |
0x08005a78 movw r3, 0x54d1 |
0x08005a7c movt r3, 0x8004 | r3 = 0x800454d1;
0x08005a80 cmp r6, r3 |
| if (r6 < r3) {
0x08005a84 bls 0x8005b0c | goto label_37;
| }
0x08005a88 movw r3, 0xab2e |
0x08005a8c movt r3, 0x7ffb | r3 = 0x7ffbab2e;
0x08005a90 add r3, r6, r3 | r3 = r6 + r3;
0x08005a94 cmp r3, 0xf |
| if (r3 > 0xf) {
| /* switch table (16 cases) at 0x8005aa0 */
0x08005a98 ldrls pc, [pc, r3, lsl 2] | offset_1 = r3 << 2;
| pc = *((pc + offset_1));
| }
0x08005a9c b 0x8005b00 |
| } else {
0x08005ae0 movw r3, 0x54db |
0x08005ae4 movt r3, 0x8008 | r3 = 0x800854db;
0x08005ae8 cmp r6, r3 |
| if (r6 != r3) {
0x08005aec bne 0x8005b00 | goto label_0;
| }
0x08005af0 ldr r3, [sl, 0x404] | r3 = *((sl + 0x404));
0x08005af4 and r3, r3, 0xf | r3 &= 0xf;
0x08005af8 cmp r3, 2 |
| if (r3 == 2) {
0x08005afc beq 0x8006428 | goto label_38;
| }
| }
| label_0:
0x08005b00 mvn r6, 0x15 | r6 = ~0x15;
0x08005b04 stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc}");
0x08005b08 b 0x80059b8 |
| } while (1);
| label_37:
0x08005b0c movw r3, 0x54d5 |
0x08005b10 movt r3, 0x4008 | r3 = 0x400854d5;
0x08005b14 cmp r6, r3 |
| if (r6 == r3) {
0x08005b18 beq 0x800694c | goto label_39;
| }
0x08005b1c movw r3, 0x54d6 |
0x08005b20 movt r3, 0x4008 | r3 = 0x400854d6;
0x08005b24 cmp r6, r3 |
| if (r6 != r3) {
0x08005b28 bne 0x8005b00 | goto label_0;
| }
0x08005b2c ldr r3, [sl, 0x404] | r3 = *((sl + 0x404));
0x08005b30 and r3, r3, 0xf | r3 &= 0xf;
0x08005b34 cmp r3, 2 |
| if (r3 != 2) {
0x08005b38 bne 0x8005b00 | goto label_0;
| }
0x08005b3c ldr r7, [sl, 0x400] | r7 = *((sl + 0x400));
0x08005b40 cmp r7, 0 |
| if (r7 <= 0) {
0x08005b44 subgt r6, sl, 4 | r6 = sl - 4;
| }
| if (r7 <= 0) {
0x08005b48 movgt r5, 0 | r5 = 0;
| }
| if (r7 <= 0) {
0x08005b4c ble 0x8005b7c | goto label_40;
| }
| do {
0x08005b50 ldr r4, [r6, 4]! | r4 = *((r6 += 4));
0x08005b54 mov r1, 0 | r1 = 0;
0x08005b58 add r5, r5, 1 | r5++;
0x08005b5c ldr r0, [r4, 0x208] | r0 = *((r4 + 0x208));
0x08005b60 stmdaeq r0, {r0, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r7, sb, fp, lr, pc}");
0x08005b64 ldr r0, [r4, 0x208] | r0 = *((r4 + 0x208));
0x08005b68 stmdaeq r0, {r0, r4, r5, r6, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r4, r5, r6, r8, sb, fp, lr, pc}");
0x08005b6c ldr r0, [r4, 0x208] | r0 = *((r4 + 0x208));
0x08005b70 stmdaeq r0, {r0, r3, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r7, sb, fp, lr, pc}");
0x08005b74 cmp r7, r5 |
0x08005b78 bne 0x8005b50 |
| } while (r7 != r5);
| label_40:
0x08005b7c mov r3, 0 | r3 = 0;
0x08005b80 strb r3, [sl, 0x470] | *((sl + 0x470)) = r3;
0x08005b84 stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc}");
0x08005b88 b 0x8005e08 | goto label_18;
| label_23:
0x08005b8c stmdaeq r0, {r0, r3, r7, r8, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r7, r8, fp, lr, pc}");
0x08005b90 movw r3, 0x54ca |
0x08005b94 movt r3, 0x4004 | r3 = 0x400454ca;
0x08005b98 cmp r6, r3 |
| if (r6 == r3) {
0x08005b9c beq 0x8006488 | goto label_41;
| }
0x08005ba0 movw r3, 0x54da |
0x08005ba4 movt r3, 0x4004 | r3 = 0x400454da;
0x08005ba8 cmp r6, r3 |
| if (r6 == r3) {
0x08005bac beq 0x8006584 | goto label_42;
| }
0x08005bb0 mvn r6, 0x4c | r6 = ~0x4c;
0x08005bb4 stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc}");
0x08005bb8 b 0x8005938 | goto label_1;
| label_24:
0x08005bbc mvn r6, 0x10 | r6 = ~0x10;
0x08005bc0 stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc}");
0x08005bc4 b 0x80059b8 | goto label_2;
| label_7:
0x08005bc8 ldr r0, [r8, 0x40c] | r0 = *((r8 + 0x40c));
0x08005bcc cmn r0, 1 |
| if (r0 != 1) {
0x08005bd0 beq 0x8005be0 |
0x08005bd4 stmdaeq r0, {r0, r2, r4, r5, r6, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r4, r5, r6, r8, sb, fp, lr, pc}");
0x08005bd8 cmp r0, 0 |
| if (r0 == 0) {
0x08005bdc beq 0x8006568 | goto label_43;
| }
| }
| label_8:
0x08005be0 add sl, r8, 0x1000 | sl = r8 + 0x1000;
0x08005be4 ldr r0, [sl, 0x49c] | r0 = *((sl + 0x49c));
0x08005be8 stmdaeq r0, {r0, r3, r4, r5, r6, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r4, r5, r6, r8, sb, fp, lr, pc}");
0x08005bec subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x08005bf0 blt 0x8005900 | goto label_3;
| }
0x08005bf4 ldrh r2, [sp, 0x38] | r2 = var_38h;
0x08005bf8 mov r3, 1 | r3 = 1;
0x08005bfc mov r1, r5 | r1 = r5;
0x08005c00 str r3, [sp, 4] | var_4h = r3;
0x08005c04 mov r0, r8 | r0 = r8;
0x08005c08 ubfx r3, r2, 5, 1 | r3 = (r2 >> 5) & ((1 << 1) - 1);
0x08005c0c str r3, [sp] | *(sp) = r3;
0x08005c10 ubfx r3, r2, 4, 1 | r3 = (r2 >> 4) & ((1 << 1) - 1);
0x08005c14 ubfx r2, r2, 0xc, 1 | r2 = (r2 >> 0xc) & ((1 << 1) - 1);
0x08005c18 bl 0x80022b8 | r0 = tun_attach ();
0x08005c1c subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x08005c20 blt 0x8005900 | goto label_3;
| }
0x08005c24 ldr r3, [r8, 0x404] | r3 = *((r8 + 0x404));
0x08005c28 tst r3, 0x100 |
| if ((r3 & 0x100) != 0) {
0x08005c2c beq 0x8005c44 |
0x08005c30 ldr r1, [sl, 0x490] | r1 = *((sl + 0x490));
0x08005c34 ldr r2, [r8, 0x400] | r2 = *((r8 + 0x400));
0x08005c38 add r2, r2, r1 | r2 += r1;
0x08005c3c cmp r2, 1 |
| if (r2 > 1) {
0x08005c40 bhi 0x8006d20 | goto label_44;
| }
| }
0x08005c44 ldrh r1, [sp, 0x38] | r1 = var_38h;
0x08005c48 bic r3, r3, 0x7100 | r3 = BIT_MASK (r3, 0x7100);
0x08005c4c bic r3, r3, 0x30 | r3 = BIT_MASK (r3, 0x30);
0x08005c50 movw r2, 0x7130 | r2 = 0x7130;
0x08005c54 and r2, r2, r1 | r2 &= r1;
0x08005c58 mov r0, sb | r0 = sb;
0x08005c5c orr r3, r2, r3 | r3 = r2 | r3;
0x08005c60 str r3, [r8, 0x404] | *((r8 + 0x404)) = r3;
0x08005c64 stmdaeq r0, {r0, r3, r4, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r4, r5, r7, sb, fp, lr, pc}");
| label_10:
0x08005c68 ldr r0, [r8, 0x410] | r0 = *((r8 + 0x410));
0x08005c6c stmdaeq r0, {r0, r3, r4, r7, r8, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r4, r7, r8, fp, lr, pc}");
0x08005c70 ldr r5, [r8, 0x410] | r5 = *((r8 + 0x410));
0x08005c74 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x08005c78 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x08005c7c bne 0x8006abc | goto label_45;
| }
| label_13:
0x08005c80 mov r1, r5 | r1 = r5;
0x08005c84 mov r0, r7 | r0 = r7;
0x08005c88 stmdaeq r0, {r0, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r5, r7, sb, fp, lr, pc}");
| label_15:
0x08005c8c mov r3, sp | r3 = sp;
0x08005c90 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08005c94 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08005c98 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x08005c9c adds r1, r4, 0x20 | r1 = r4 + 0x20;
0x08005ca0 sbcslo r1, r1, r3 | __asm ("sbcslo r1, r1, r3");
| if (r1 >= r4) {
0x08005ca4 movlo r3, 0 | r3 = 0;
| }
0x08005ca8 cmp r3, 0 |
| if (r3 == 0) {
0x08005cac beq 0x80068dc | goto label_46;
| }
| label_9:
0x08005cb0 stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc}");
| label_32:
0x08005cb4 mvn r6, 0xd | r6 = ~0xd;
0x08005cb8 b 0x8005938 | goto label_1;
| label_33:
0x08005cbc ldr r4, [r7, 0x330] | r4 = *((r7 + 0x330));
0x08005cc0 cmp r4, 0 |
| if (r4 == 0) {
0x08005cc4 beq 0x80068cc | goto label_34;
| }
0x08005cc8 add r3, r4, 0x1000 | r3 = r4 + 0x1000;
0x08005ccc ldr r0, [r3, 0x49c] | r0 = *((r3 + 0x49c));
0x08005cd0 stmdaeq r0, {r0, r2, r3, r4, r5, r6, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r4, r5, r6, r8, sb, fp, lr, pc}");
0x08005cd4 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x08005cd8 blt 0x8005900 | goto label_3;
| }
0x08005cdc ldr r3, [r4, 0x404] | r3 = *((r4 + 0x404));
0x08005ce0 mov r0, 1 | r0 = 1;
0x08005ce4 mov r2, sl | r2 = sl;
0x08005ce8 str r0, [sp, 4] | var_4h = r0;
0x08005cec mov r1, r5 | r1 = r5;
0x08005cf0 ubfx r0, r3, 5, 1 | r0 = (r3 >> 5) & ((1 << 1) - 1);
0x08005cf4 ubfx r3, r3, 4, 1 | r3 = (r3 >> 4) & ((1 << 1) - 1);
0x08005cf8 str r0, [sp] | *(sp) = r0;
0x08005cfc mov r0, r4 | r0 = r4;
0x08005d00 bl 0x80022b8 | r0 = tun_attach ();
0x08005d04 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 >= r0) {
0x08005d08 bge 0x80058f8 | goto label_4;
| }
0x08005d0c b 0x8005900 | goto label_3;
| do {
| label_5:
0x08005d98 stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc}");
| label_16:
0x08005d9c mvn r6, 0xd | r6 = ~0xd;
0x08005da0 b 0x80059b8 | goto label_2;
| label_31:
0x08005dec mov r0, r4 | r0 = r4;
0x08005df0 stmdaeq r0, {r0, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r7, r8, sb, fp, lr, pc}");
0x08005df4 mcr p15, 0, r5, c3, c0, 0 | __asm ("mcr p15, 0, r5, c3, c0, 0");
0x08005df8 isb sy | __asm ("isb sy");
0x08005dfc cmp r0, 0 |
0x08005e00 bne 0x8005d98 |
| } while (r0 != 0);
| label_6:
0x08005e04 stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc}");
| label_18:
0x08005e08 mov r6, 0 | r6 = 0;
0x08005e0c b 0x80059b8 | goto label_2;
| label_36:
0x0800640c add r0, r5, 0x48 | r0 = r5 + 0x48;
0x08006410 stmdaeq r0, {r0, r2, r5, r6, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r6, r8, sb, fp, lr, pc}");
0x08006414 stmdaeq r0, {r0, r2, r5, r6, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r6, r8, sb, fp, lr, pc}");
0x08006418 stmdaeq r0, {r0, r3, r5, r6, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r5, r6, r8, sb, fp, lr, pc}");
0x0800641c mov r6, r0 | r6 = r0;
0x08006420 stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc}");
0x08006424 b 0x80059b8 | goto label_2;
| label_38:
0x08006428 mov r3, sp | r3 = sp;
0x0800642c bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08006430 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08006434 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x08006438 adds r1, r4, 8 | r1 = r4 + 8;
0x0800643c sbcslo r1, r1, r3 | __asm ("sbcslo r1, r1, r3");
| if (r1 >= r4) {
0x08006440 movlo r3, 0 | r3 = 0;
| }
0x08006444 cmp r3, 0 |
| if (r3 != 0) {
0x08006448 bne 0x8005d98 | goto label_5;
| }
0x0800644c mrc p15, 0, r5, c3, c0, 0 | __asm ("mrc p15, 0, r5, c3, c0, 0");
0x08006450 bic r3, r5, 0xc | r3 = BIT_MASK (r5, 0xc);
0x08006454 orr r3, r3, 4 | r3 |= 4;
0x08006458 mcr p15, 0, r3, c3, c0, 0 | __asm ("mcr p15, 0, r3, c3, c0, 0");
0x0800645c isb sy | __asm ("isb sy");
0x08006460 add r1, sl, 0x460 | r1 = sl + 0x460;
0x08006464 mov r0, r4 | r0 = r4;
0x08006468 add r1, r1, 8 | r1 += 8;
0x0800646c mov r2, 8 | r2 = 8;
0x08006470 stmdaeq r0, {r0, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r7, r8, sb, fp, lr, pc}");
0x08006474 mcr p15, 0, r5, c3, c0, 0 | __asm ("mcr p15, 0, r5, c3, c0, 0");
0x08006478 isb sy | __asm ("isb sy");
0x0800647c cmp r0, 0 |
| if (r0 == 0) {
0x08006480 beq 0x8005e04 | goto label_6;
| }
0x08006484 b 0x8005d98 | goto label_5;
| label_41:
0x08006488 ldr r3, [r5, 0x84] | r3 = *((r5 + 0x84));
0x0800648c str r3, [sp, 0xc] | var_ch = r3;
0x08006490 strb sl, [sp, 0x37] | var_37h = sl;
0x08006494 ldr r3, [r3, 0x330] | r3 = *((r3 + 0x330));
0x08006498 cmp r3, 0 |
| if (r3 != 0) {
0x0800649c bne 0x80068cc | goto label_34;
| }
0x080064a0 ldrh r3, [sp, 0x38] | r3 = var_38h;
0x080064a4 tst r3, 0x20 |
| if ((r3 & 0x20) != 0) {
0x080064a8 beq 0x80064cc |
0x080064ac mov r0, 0xc | r0 = 0xc;
0x080064b0 stmdaeq r0, {r0, r2, r5, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r7, r8, sb, fp, lr, pc}");
0x080064b4 cmp r0, 0 |
| if (r0 == 0) {
0x080064b8 beq 0x800657c | goto label_47;
| }
0x080064bc ldrh r3, [sp, 0x38] | r3 = var_38h;
0x080064c0 and r3, r3, 0x1f | r3 &= 0x1f;
0x080064c4 cmp r3, 0x12 |
| if (r3 != 0x12) {
0x080064c8 bne 0x80068cc | goto label_34;
| }
| }
0x080064cc mov r1, r7 | r1 = r7;
0x080064d0 mov r0, r8 | r0 = r8;
0x080064d4 stmdaeq r0, {r0, r3, r5, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r5, r7, r8, sb, fp, lr, pc}");
0x080064d8 subs sb, r0, 0 | sb = r0 - 0;
| if (sb == r0) {
0x080064dc beq 0x8006614 | goto label_48;
| }
0x080064e0 ldrsh r3, [sp, 0x38] | r3 = var_38h;
0x080064e4 cmp r3, 0 |
| if (r3 < 0) {
0x080064e8 blt 0x8006e44 | goto label_49;
| }
0x080064ec tst r3, 1 |
| if ((r3 & 1) != 0) {
0x080064f0 beq 0x8006504 |
0x080064f4 ldr r2, [pc, 0x60c] | r2 = *(0x8006b04);
0x080064f8 ldr r1, [sb, 0x120] | r1 = *((sb + 0x120));
0x080064fc cmp r1, r2 |
| if (r1 == r2) {
0x08006500 beq 0x800651c | goto label_50;
| }
| }
0x08006504 tst r3, 2 |
| if ((r3 & 2) == 0) {
0x08006508 beq 0x80068cc | goto label_34;
| }
0x0800650c ldr r2, [pc, 0x5f8] | r2 = "tun_tap_creation_via_rtnetlink_is_not_supported.";
0x08006510 ldr r1, [sb, 0x120] | r1 = *((sb + 0x120));
0x08006514 cmp r1, r2 |
| if (r1 != r2) {
0x08006518 bne 0x80068cc | goto label_34;
| }
| label_50:
0x0800651c ldr r2, [sb, 0x944] | r2 = *((sb + 0x944));
0x08006520 ubfx r3, r3, 8, 1 | r3 = (r3 >> 8) & ((1 << 1) - 1);
0x08006524 add r8, sb, 0x540 | r8 = sb + 0x540;
0x08006528 ubfx r2, r2, 8, 1 | r2 = (r2 >> 8) & ((1 << 1) - 1);
0x0800652c cmp r3, r2 |
| if (r3 != r2) {
0x08006530 bne 0x80068cc | goto label_34;
| }
0x08006534 mov r3, sp | r3 = sp;
0x08006538 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x0800653c bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08006540 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x08006544 ldr r2, [r3, 0x340] | r2 = *((r3 + 0x340));
0x08006548 ldr r3, [r8, 0x410] | r3 = *((r8 + 0x410));
0x0800654c ldr r6, [r3, 0x2b4] | r6 = *((r3 + 0x2b4));
0x08006550 ldr r3, [r8, 0x408] | r3 = *((r8 + 0x408));
0x08006554 cmn r3, 1 |
| if (r3 == 1) {
0x08006558 beq 0x8005bc8 | goto label_7;
| }
0x0800655c ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x08006560 cmp r3, r2 |
| if (r3 == r2) {
0x08006564 beq 0x8005bc8 | goto label_7;
| }
| label_43:
0x08006568 ldr r0, [r6, 0x30] | r0 = *((r6 + 0x30));
0x0800656c mov r1, 0xc | r1 = 0xc;
0x08006570 stmdaeq r0, {r0, r5, r6, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r5, r6, r8, sb, fp, lr, pc}");
0x08006574 cmp r0, 0 |
| if (r0 != 0) {
0x08006578 bne 0x8005be0 | goto label_8;
| }
| do {
| label_47:
0x0800657c mvn r6, 0 | r6 = ~0;
0x08006580 b 0x8005900 | goto label_3;
| label_42:
0x08006584 mov r3, sp | r3 = sp;
0x08006588 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x0800658c bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08006590 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x08006594 adds r1, r4, 4 | r1 = r4 + 4;
0x08006598 sbcslo r1, r1, r3 | __asm ("sbcslo r1, r1, r3");
| if (r1 >= r4) {
0x0800659c movlo r3, 0 | r3 = 0;
| }
0x080065a0 cmp r3, 0 |
| if (r3 == 0) {
0x080065a4 bne 0x8006600 |
0x080065a8 mrc p15, 0, r5, c3, c0, 0 | __asm ("mrc p15, 0, r5, c3, c0, 0");
0x080065ac bic r3, r5, 0xc | r3 = BIT_MASK (r5, 0xc);
0x080065b0 orr r3, r3, 4 | r3 |= 4;
0x080065b4 mcr p15, 0, r3, c3, c0, 0 | __asm ("mcr p15, 0, r3, c3, c0, 0");
0x080065b8 isb sy | __asm ("isb sy");
0x080065bc mov r2, 4 | r2 = 4;
0x080065c0 mov r1, r4 | r1 = r4;
0x080065c4 add r0, sp, 0x24 | r0 += var_24h;
0x080065c8 stmdaeq r0, {r0, r2, r3, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r5, r7, sb, fp, lr, pc}");
0x080065cc mov r2, r0 | r2 = r0;
0x080065d0 mcr p15, 0, r5, c3, c0, 0 | __asm ("mcr p15, 0, r5, c3, c0, 0");
0x080065d4 isb sy | __asm ("isb sy");
0x080065d8 cmp r0, 0 |
0x080065dc rsbne r3, r0, 4 | __asm ("rsbne r3, r0, 4");
| if (r0 == 0) {
0x080065e0 addne r1, sp, 0x24 | r1 += var_24h;
| }
| if (r0 == 0) {
0x080065e4 addne r0, r1, r3 | r0 = r1 + r3;
| }
| if (r0 != 0) {
0x080065e8 bne 0x8006608 | goto label_51;
| }
0x080065ec ldr r3, [sp, 0x24] | r3 = var_24h;
0x080065f0 str r3, [sb, 0x234] | *((sb + 0x234)) = r3;
0x080065f4 stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc}");
| label_11:
0x080065f8 mov r6, 0 | r6 = 0;
0x080065fc b 0x8005938 | goto label_1;
| }
0x08006600 add r0, sp, 0x24 | r0 += var_24h;
0x08006604 mov r2, 4 | r2 = 4;
| label_51:
0x08006608 mov r1, 0 | r1 = 0;
0x0800660c stmdaeq r0, {r0, r3, r4, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r4, r7, sb, fp, lr, pc}");
0x08006610 b 0x8005cb0 | goto label_9;
| label_48:
0x08006614 ldrh r3, [sp, 0x38] | r3 = var_38h;
0x08006618 mov r1, 0xc | r1 = 0xc;
0x0800661c ldr r0, [r8, 0x30] | r0 = *((r8 + 0x30));
0x08006620 tst r3, 0x100 |
| if ((r3 & 0x100) != 0) {
0x08006624 moveq sb, 1 | sb = 1;
| }
| if ((r3 & 0x100) == 0) {
0x08006628 movne sb, 0x100 | sb = 0x100;
| }
0x0800662c stmdaeq r0, {r0, r5, r6, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r5, r6, r8, sb, fp, lr, pc}");
0x08006630 cmp r0, 0 |
0x08006634 beq 0x800657c |
| } while (r0 == 0);
0x08006638 stmdaeq r0, {r0, r2, r3, r5, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r5, r7, r8, sb, fp, lr, pc}");
0x0800663c subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x08006640 blt 0x8005900 | goto label_3;
| }
0x08006644 ldrsh r3, [sp, 0x38] | r3 = var_38h;
0x08006648 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x0800664c bne 0x8006a60 | goto label_52;
| }
0x08006650 tst r3, 2 |
| if ((r3 & 2) != 0) {
0x08006654 beq 0x80068cc |
0x08006658 stmdaeq r0, {r3, r4, r7, r8, sb, ip, sp, lr} | __asm ("stmdaeq r0, {r3, r4, r7, r8, sb, ip, sp, lr}");
0x0800665c stmdaeq r0, {r3, r4, r7, r8, sb, ip, sp, lr} | __asm ("stmdaeq r0, {r3, r4, r7, r8, sb, ip, sp, lr}");
0x08006660 mov r6, 2 | r6 = 2;
| label_12:
0x08006664 ldrb r3, [sp, 0x28] | r3 = var_28h;
0x08006668 mov r2, 0 | r2 = 0;
0x0800666c str sb, [sp, 4] | var_4h = sb;
0x08006670 movw r0, 0x1510 | r0 = 0x1510;
0x08006674 cmp r3, 0 |
0x08006678 str sb, [sp] | *(sp) = sb;
| if (r3 == 0) {
0x0800667c movne r1, r7 | r1 = r7;
| }
0x08006680 stmdaeq r0, {r4, r6, r7, r8, fp} | __asm ("stmdaeq r0, {r4, r6, r7, r8, fp}");
0x08006684 stmdaeq r0, {r4, r6, r7, r8, fp} | __asm ("stmdaeq r0, {r4, r6, r7, r8, fp}");
0x08006688 stmdaeq r0, {r0, r4, r5, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r4, r5, r7, r8, sb, fp, lr, pc}");
0x0800668c subs sb, r0, 0 | sb = r0 - 0;
| if (sb == r0) {
0x08006690 beq 0x8006e4c | goto label_53;
| }
0x08006694 ldr r0, [sp, 0xc] | r0 = var_ch;
0x08006698 stmdaeq r0, {r2, r4, sl, fp, ip, sp, lr} | __asm ("stmdaeq r0, {r2, r4, sl, fp, ip, sp, lr}");
0x0800669c stmdaeq r0, {r2, r4, sl, fp, ip, sp, lr} | __asm ("stmdaeq r0, {r2, r4, sl, fp, ip, sp, lr}");
0x080066a0 str r8, [sb, 0x2b4] | *((sb + 0x2b4)) = r8;
0x080066a4 str r3, [sb, 0x494] | *((sb + 0x494)) = r3;
0x080066a8 mov r8, 0 | r8 = 0;
0x080066ac ldr r3, [pc, 0x45c] | r3 = "tun_tap_creation_via_rtnetlink_is_not_supported.";
0x080066b0 mov r1, 8 | r1 = 8;
0x080066b4 ldr r2, [r0, 0x234] | r2 = *((r0 + 0x234));
0x080066b8 str r2, [sb, 0xa8] | *((sb + 0xa8)) = r2;
0x080066bc mov r2, 0xa | r2 = 0xa;
0x080066c0 str r6, [sb, 0x944] | *((sb + 0x944)) = r6;
0x080066c4 str r3, [sb, 0x480] | *((sb + 0x480)) = r3;
0x080066c8 add r3, sb, 0x1000 | r3 = sb + 0x1000;
0x080066cc str r2, [sb, 0x964] | *((sb + 0x964)) = r2;
0x080066d0 mov r2, 0x40 | r2 = 0x40;
0x080066d4 str sb, [sb, 0x950] | *((sb + 0x950)) = sb;
0x080066d8 mov r6, r3 | r6 = r3;
0x080066dc str r2, [sb, 0x960] | *((sb + 0x960)) = r2;
0x080066e0 mov r2, 0xcc0 | r2 = 0xcc0;
0x080066e4 str r8, [sb, 0x96c] | *((sb + 0x96c)) = r8;
0x080066e8 strb r8, [sb, 0x9b0] | *((sb + 0x9b0)) = r8;
0x080066ec str r3, [sp, 0x10] | var_10h = r3;
0x080066f0 ldr r0, [r0, 0x208] | r0 = *((r0 + 0x208));
0x080066f4 ldr r0, [r0, 0xdc] | r0 = *((r0 + 0xdc));
0x080066f8 str r0, [sb, 0x968] | *((sb + 0x968)) = r0;
0x080066fc mov r0, 0x30 | r0 = 0x30;
0x08006700 str r8, [r3, 0x9e4] | *((r3 + 0x9e4)) = r8;
0x08006704 str r8, [r3, 0x9f0] | *((r3 + 0x9f0)) = r8;
0x08006708 stmdaeq r0, {r0, r2, r4, r5, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r4, r5, r7, r8, sb, fp, lr, pc}");
0x0800670c cmp r0, r8 |
0x08006710 str r0, [r6, 0x9e8] | *((r6 + 0x9e8)) = r0;
| if (r0 == r8) {
0x08006714 beq 0x8006d18 | goto label_54;
| }
0x08006718 add r0, sb, 0x19c0 | r0 = sb + 0x19c0;
0x0800671c add r0, r0, 0x1c | r0 += 0x1c;
0x08006720 stmdaeq r0, {r0, r3, r4, r5, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r4, r5, r7, r8, sb, fp, lr, pc}");
0x08006724 add r3, sb, 0x540 | r3 = sb + 0x540;
0x08006728 subs r6, r0, 0 | r6 = r0 - 0;
0x0800672c str r3, [sp, 0x14] | var_14h = r3;
| if (r6 < r0) {
0x08006730 blt 0x8006aa4 | goto label_55;
| }
0x08006734 ldr r2, [sb, 0x944] | r2 = *((sb + 0x944));
0x08006738 and r2, r2, 0xf | r2 &= 0xf;
0x0800673c cmp r2, 1 |
| if (r2 == 1) {
0x08006740 beq 0x8006d48 | goto label_56;
| }
0x08006744 cmp r2, 2 |
| if (r2 == 2) {
0x08006748 bne 0x8006798 |
0x0800674c ldr r3, [pc, 0x3bc] | r3 = "tun_tap_creation_via_rtnetlink_is_not_supported.";
0x08006750 mov r0, sb | r0 = sb;
0x08006754 sub r8, r3, 0x120 | r8 = r3 - 0x120;
0x08006758 str r8, [sb, 0x120] | *((sb + 0x120)) = r8;
0x0800675c stmdaeq r0, {r0, r2, r3, r4, r5, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r4, r5, r7, r8, sb, fp, lr, pc}");
0x08006760 ldr r3, [sb, 0x134] | r3 = *((sb + 0x134));
0x08006764 ldr r6, [sb, 0x1c8] | r6 = *((sb + 0x1c8));
0x08006768 mov r1, 6 | r1 = 6;
0x0800676c bic r3, r3, 0x800 | r3 = BIT_MASK (r3, 0x800);
0x08006770 orr r3, r3, 0x8000 | r3 |= 0x8000;
0x08006774 mov r0, r6 | r0 = r6;
0x08006778 str r3, [sb, 0x134] | *((sb + 0x134)) = r3;
0x0800677c mov r3, 1 | r3 = 1;
0x08006780 strb r3, [sb, 0x176] | *((sb + 0x176)) = r3;
0x08006784 stmdaeq r0, {r0, r6, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r6, r7, r8, sb, fp, lr, pc}");
0x08006788 ldrb r3, [r6] | r3 = *(r6);
0x0800678c bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x08006790 orr r3, r3, 2 | r3 |= 2;
0x08006794 strb r3, [r6] | *(r6) = r3;
| }
0x08006798 movw r3, 0x14e |
0x0800679c ldrh r3, [sb, r3] | r3 = *((sb + r3));
0x080067a0 rsb r3, r3, 0xff00 | r3 = 0xff00 - r3;
0x080067a4 add r3, r3, 0xff | r3 = 0x24d;
| label_17:
0x080067a8 add r8, sb, 0x540 | r8 = sb + 0x540;
0x080067ac str r3, [sb, 0x148] | *((sb + 0x148)) = r3;
0x080067b0 add r0, sb, 0x9b0 | r0 = sb + 0x9b0;
0x080067b4 add r3, r8, 0x1440 | r3 = r8 + 0x1440;
0x080067b8 add sl, r3, 0x38 | sl = r3 + 0x38;
0x080067bc mov r2, 0x1000 | r2 = 0x1000;
0x080067c0 mov r3, 0x44 | r3 = 0x44;
0x080067c4 mov r1, 0 | r1 = 0;
0x080067c8 str r3, [sb, 0x144] | *((sb + 0x144)) = r3;
0x080067cc add r0, r0, 8 | r0 += 8;
0x080067d0 str sl, [sp, 0x14] | var_14h = sl;
0x080067d4 stmdaeq r0, {r0, r3, r4, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r4, r7, sb, fp, lr, pc}");
0x080067d8 ldr fp, [sp, 0x10] | fp = var_10h;
0x080067dc mov r6, 0 | r6 = 0;
0x080067e0 mov r0, sl | r0 = sl;
0x080067e4 mov r2, r6 | r2 = r6;
0x080067e8 mov r3, r6 | r3 = r6;
0x080067ec mov r1, 0x12c | r1 = 0x12c;
0x080067f0 str r1, [fp, 0x9cc] | *(arg_9cch) = r1;
0x080067f4 stmdaeq r0, {r2, r3, r4, r5, r6, r7, sb} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r6, r7, sb}");
0x080067f8 stmdaeq r0, {r2, r3, r4, r5, r6, r7, sb} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r6, r7, sb}");
0x080067fc str r6, [sp] | *(sp) = r6;
0x08006800 stmdaeq r0, {r0, r2, r6, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r6, r7, r8, sb, fp, lr, pc}");
0x08006804 stmdaeq r0, {r0, r2, r4, r5, r6, r8, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r4, r5, r6, r8, fp, lr, pc}");
0x08006808 stmdaeq r0, {r0, r2, r4, r5, r6, r8, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r4, r5, r6, r8, fp, lr, pc}");
0x0800680c str fp, [sp, 0x10] | var_10h = fp;
0x08006810 ldr r0, [r3] | r0 = *(r3);
0x08006814 ldr r3, [fp, 0x9cc] | r3 = *(arg_9cch);
0x08006818 add r0, r0, r3 | r0 += r3;
0x0800681c stmdaeq r0, {r0, r3, r4, r5, r6, r8, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r4, r5, r6, r8, fp, lr, pc}");
0x08006820 mov r1, r0 | r1 = r0;
0x08006824 mov r0, sl | r0 = sl;
0x08006828 add fp, pc, 0x2c8 |
0x0800682c ldrd sl, fp, [fp] | __asm ("ldrd sl, fp, [fp]");
0x08006830 stmdaeq r0, {r0, r2, r3, r4, r5, r6, r8, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r4, r5, r6, r8, fp, lr, pc}");
0x08006834 ldr r2, [sb, 0x944] | r2 = *((sb + 0x944));
0x08006838 add ip, r8, 0x1480 |
0x0800683c strd sl, fp, [sb, 0x70] | __asm ("strd sl, fp, [sb, 0x70]");
0x08006840 movw r0, 0x7130 | r0 = 0x7130;
0x08006844 add fp, pc, 0x2b4 |
0x08006848 ldrd sl, fp, [fp] | __asm ("ldrd sl, fp, [fp]");
0x0800684c strd sl, fp, [sb, 0x88] | __asm ("strd sl, fp, [sb, 0x88]");
0x08006850 ldrsh r3, [sp, 0x38] | r3 = var_38h;
0x08006854 mov fp, 0x2000 |
0x08006858 mov sl, 0xc9 |
0x0800685c movt sl, 0x15 | sl = 0x1500c9;
0x08006860 strd sl, fp, [sb, 0x78] | __asm ("strd sl, fp, [sb, 0x78]");
0x08006864 bic r2, r2, 0x7100 | r2 = BIT_MASK (r2, 0x7100);
0x08006868 ldr fp, [sp, 0x10] | fp = var_10h;
0x0800686c and r0, r0, r3 | r0 &= r3;
0x08006870 bic r2, r2, 0x30 | r2 = BIT_MASK (r2, 0x30);
0x08006874 add ip, ip, 0x14 |
0x08006878 orr r2, r2, r0 | r2 |= r0;
0x0800687c ubfx lr, r3, 5, 1 | lr = (r3 >> 5) & ((1 << 1) - 1);
0x08006880 str r2, [sb, 0x944] | *((sb + 0x944)) = r2;
0x08006884 mov r1, r5 | r1 = r5;
0x08006888 str ip, [fp, 0x9d4] | *(arg_9d4h) = ip;
0x0800688c mov r2, r6 | r2 = r6;
0x08006890 str ip, [fp, 0x9d8] | *(arg_9d8h) = ip;
0x08006894 ubfx r3, r3, 4, 1 | r3 = (r3 >> 4) & ((1 << 1) - 1);
0x08006898 str r6, [sp, 4] | var_4h = r6;
0x0800689c mov r0, r8 | r0 = r8;
0x080068a0 str lr, [sp] |
0x080068a4 bl 0x80022b8 | r0 = tun_attach ();
0x080068a8 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x080068ac blt 0x8006a88 | goto label_57;
| }
0x080068b0 ldr r0, [sb, 0x950] | r0 = *((sb + 0x950));
0x080068b4 stmdaeq r0, {r0, r3, r6, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r6, r7, r8, sb, fp, lr, pc}");
0x080068b8 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x080068bc blt 0x8006a70 | goto label_58;
| }
0x080068c0 ldr r3, [sp, 0xc] | r3 = var_ch;
0x080068c4 str r8, [r3, 0x228] | *((r3 + 0x228)) = r8;
0x080068c8 b 0x8005c68 | goto label_10;
| }
| label_34:
0x080068cc mvn r6, 0x15 | r6 = ~0x15;
0x080068d0 b 0x8005900 | goto label_3;
| label_35:
0x080068d4 mvn r6, 0 | r6 = ~0;
0x080068d8 b 0x8005938 | goto label_1;
| label_46:
0x080068dc mrc p15, 0, r5, c3, c0, 0 | __asm ("mrc p15, 0, r5, c3, c0, 0");
0x080068e0 bic r3, r5, 0xc | r3 = BIT_MASK (r5, 0xc);
0x080068e4 orr r3, r3, 4 | r3 |= 4;
0x080068e8 mcr p15, 0, r3, c3, c0, 0 | __asm ("mcr p15, 0, r3, c3, c0, 0");
0x080068ec isb sy | __asm ("isb sy");
0x080068f0 mov r2, 0x20 | r2 = 0x20;
0x080068f4 mov r1, r7 | r1 = r7;
0x080068f8 mov r0, r4 | r0 = r4;
0x080068fc stmdaeq r0, {r0, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r7, r8, sb, fp, lr, pc}");
0x08006900 mcr p15, 0, r5, c3, c0, 0 | __asm ("mcr p15, 0, r5, c3, c0, 0");
0x08006904 isb sy | __asm ("isb sy");
0x08006908 cmp r0, 0 |
| if (r0 != 0) {
0x0800690c bne 0x8005cb0 | goto label_9;
| }
0x08006910 stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc}");
0x08006914 b 0x80065f8 | goto label_11;
| label_29:
0x08006934 add r1, sp, 0x38 | r1 += var_38h;
0x08006938 mov r2, 0 | r2 = 0;
0x0800693c stmdaeq r0, {r0, r2, r3, r6, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r6, r7, r8, sb, fp, lr, pc}");
0x08006940 mov r6, r0 | r6 = r0;
0x08006944 stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc}");
0x08006948 b 0x80059b8 | goto label_2;
| label_39:
0x0800694c ldr r3, [sl, 0x404] | r3 = *((sl + 0x404));
0x08006950 and r3, r3, 0xf | r3 &= 0xf;
0x08006954 cmp r3, 2 |
| if (r3 != 2) {
0x08006958 bne 0x8005b00 | goto label_0;
| }
0x0800695c mov r3, sp | r3 = sp;
0x08006960 add r7, sl, 0x460 | r7 = sl + 0x460;
0x08006964 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08006968 add r7, r7, 8 | r7 += 8;
0x0800696c bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08006970 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x08006974 adds r1, r4, 8 | r1 = r4 + 8;
0x08006978 sbcslo r1, r1, r3 | __asm ("sbcslo r1, r1, r3");
| if (r1 >= r4) {
0x0800697c movlo r3, 0 | r3 = 0;
| }
0x08006980 cmp r3, 0 |
| if (r3 != 0) {
0x08006984 bne 0x8006d2c | goto label_59;
| }
0x08006988 mrc p15, 0, r5, c3, c0, 0 | __asm ("mrc p15, 0, r5, c3, c0, 0");
0x0800698c bic r3, r5, 0xc | r3 = BIT_MASK (r5, 0xc);
0x08006990 orr r3, r3, 4 | r3 |= 4;
0x08006994 mcr p15, 0, r3, c3, c0, 0 | __asm ("mcr p15, 0, r3, c3, c0, 0");
0x08006998 isb sy | __asm ("isb sy");
0x0800699c mov r2, 8 | r2 = 8;
0x080069a0 mov r1, r4 | r1 = r4;
0x080069a4 mov r0, r7 | r0 = r7;
0x080069a8 stmdaeq r0, {r0, r2, r3, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r5, r7, sb, fp, lr, pc}");
0x080069ac mov r2, r0 | r2 = r0;
0x080069b0 mcr p15, 0, r5, c3, c0, 0 | __asm ("mcr p15, 0, r5, c3, c0, 0");
0x080069b4 isb sy | __asm ("isb sy");
0x080069b8 cmp r0, 0 |
| if (r0 != 0) {
0x080069bc bne 0x8006d30 | goto label_60;
| }
0x080069c0 ldr r3, [sl, 0x400] | r3 = *((sl + 0x400));
0x080069c4 cmp r3, 0 |
| if (r3 == 0) {
0x080069c8 subne r8, sl, 4 | r8 = sl - 4;
| }
| if (r3 == 0) {
0x080069cc movne r4, r0 | r4 = r0;
| }
| if (r3 != 0) {
0x080069d0 bne 0x80069e8 | goto label_61;
| }
0x080069d4 b 0x8006e04 | goto label_62;
| do {
0x080069d8 ldr r3, [sl, 0x400] | r3 = *((sl + 0x400));
0x080069dc add r4, r4, 1 | r4++;
0x080069e0 cmp r4, r3 |
| if (r4 >= r3) {
0x080069e4 bhs 0x8006e04 | goto label_62;
| }
| label_61:
0x080069e8 ldr r5, [r8, 4]! | r5 = *((r8 += 4));
0x080069ec mov r1, 0 | r1 = 0;
0x080069f0 ldr r0, [r5, 0x208] | r0 = *((r5 + 0x208));
0x080069f4 stmdaeq r0, {r0, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r7, sb, fp, lr, pc}");
0x080069f8 ldr r1, [r5, 0x208] | r1 = *((r5 + 0x208));
0x080069fc mov r0, r7 | r0 = r7;
0x08006a00 stmdaeq r0, {r0, r2, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r7, sb, fp, lr, pc}");
0x08006a04 mov r6, r0 | r6 = r0;
0x08006a08 ldr r0, [r5, 0x208] | r0 = *((r5 + 0x208));
0x08006a0c stmdaeq r0, {r0, r3, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r7, sb, fp, lr, pc}");
0x08006a10 cmp r6, 0 |
0x08006a14 beq 0x80069d8 |
| } while (r6 == 0);
0x08006a18 cmp r4, 0 |
| if (r4 == 0) {
0x08006a1c movne r7, sl | r7 = sl;
| }
| if (r4 == 0) {
0x08006a20 addne r4, sl, r4, lsl 2 | r4 = sl + (r4 << 2);
| }
| if (r4 == 0) {
0x08006a24 beq 0x8006a50 | goto label_63;
| }
| do {
0x08006a28 ldr r5, [r7], 4 | r5 = *(r7);
| r7 += 4;
0x08006a2c mov r1, 0 | r1 = 0;
0x08006a30 ldr r0, [r5, 0x208] | r0 = *((r5 + 0x208));
0x08006a34 stmdaeq r0, {r0, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r7, sb, fp, lr, pc}");
0x08006a38 ldr r0, [r5, 0x208] | r0 = *((r5 + 0x208));
0x08006a3c stmdaeq r0, {r0, r4, r5, r6, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r4, r5, r6, r8, sb, fp, lr, pc}");
0x08006a40 ldr r0, [r5, 0x208] | r0 = *((r5 + 0x208));
0x08006a44 stmdaeq r0, {r0, r3, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r7, sb, fp, lr, pc}");
0x08006a48 cmp r4, r7 |
0x08006a4c bne 0x8006a28 |
| } while (r4 != r7);
| label_63:
0x08006a50 mov r3, 0 | r3 = 0;
0x08006a54 strb r3, [sl, 0x470] | *((sl + 0x470)) = r3;
0x08006a58 stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc}");
0x08006a5c b 0x80059b8 | goto label_2;
| label_52:
0x08006a60 stmdaeq r0, {r4, r7, r8, sb, ip, sp, lr} | __asm ("stmdaeq r0, {r4, r7, r8, sb, ip, sp, lr}");
0x08006a64 stmdaeq r0, {r4, r7, r8, sb, ip, sp, lr} | __asm ("stmdaeq r0, {r4, r7, r8, sb, ip, sp, lr}");
0x08006a68 mov r6, 1 | r6 = 1;
0x08006a6c b 0x8006664 | goto label_12;
| label_58:
0x08006a70 mov r0, sb | r0 = sb;
0x08006a74 bl 0x8002054 | tun_detach_all ();
0x08006a78 ldr r3, [sp, 0x10] | r3 = var_10h;
0x08006a7c ldr r3, [r3, 0x9e8] | r3 = *((r3 + 0x9e8));
0x08006a80 cmp r3, 0 |
| if (r3 != 0) {
0x08006a84 beq 0x8006ab0 |
| label_57:
0x08006a88 ldr r0, [sp, 0x14] | r0 = var_14h;
0x08006a8c stmdaeq r0, {r0, r3, r6, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r6, sb, fp, lr, pc}");
0x08006a90 add r0, sb, 0x540 | r0 = sb + 0x540;
0x08006a94 bl 0x800167c | tun_flow_flush ();
0x08006a98 ldr r3, [sp, 0x10] | r3 = var_10h;
0x08006a9c ldr r0, [r3, 0x9dc] | r0 = *((r3 + 0x9dc));
0x08006aa0 stmdaeq r0, {r0, r2, r3, r6, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r6, sb, fp, lr, pc}");
| label_55:
0x08006aa4 ldr r3, [sp, 0x10] | r3 = var_10h;
0x08006aa8 ldr r0, [r3, 0x9e8] | r0 = *((r3 + 0x9e8));
0x08006aac stmdaeq r0, {r0, r2, r6, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r6, sb, fp, lr, pc}");
| }
| label_14:
0x08006ab0 mov r0, sb | r0 = sb;
0x08006ab4 stmdaeq r0, {r0, r4, r6, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r4, r6, r7, r8, sb, fp, lr, pc}");
0x08006ab8 b 0x8005900 | goto label_3;
| label_45:
0x08006abc ldr r3, [r5, 0x220] | r3 = *((r5 + 0x220));
0x08006ac0 cmp r3, 0 |
| if (r3 == 0) {
0x08006ac4 beq 0x8005c80 | goto label_13;
| }
0x08006ac8 mov r6, 0 | r6 = 0;
0x08006acc mov sb, r6 | sb = r6;
| do {
0x08006ad0 ldr r0, [r5, 0x21c] | r0 = *((r5 + 0x21c));
0x08006ad4 add sb, sb, 1 | sb++;
0x08006ad8 add r0, r0, r6 | r0 += r6;
0x08006adc add r6, r6, 0x7c | r6 += 0x7c;
0x08006ae0 stmdaeq r0, {r0, r2, r4, r6, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r4, r6, r7, r8, sb, fp, lr, pc}");
0x08006ae4 ldr r3, [r5, 0x220] | r3 = *((r5 + 0x220));
0x08006ae8 cmp sb, r3 |
0x08006aec blo 0x8006ad0 |
| } while (sb <= r3);
0x08006af0 ldr r5, [r8, 0x410] | r5 = *((r8 + 0x410));
0x08006af4 b 0x8005c80 | goto label_13;
| label_54:
0x08006d18 mvn r6, 0xb | r6 = ~0xb;
0x08006d1c b 0x8006ab0 | goto label_14;
| label_44:
0x08006d20 mov r0, sb | r0 = sb;
0x08006d24 stmdaeq r0, {r0, r3, r4, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r4, r5, r7, sb, fp, lr, pc}");
0x08006d28 b 0x8005c8c | goto label_15;
| label_59:
0x08006d2c mov r2, 8 | r2 = 8;
| label_60:
0x08006d30 rsb r0, r2, 8 | r0 = 8 - r2;
0x08006d34 mov r1, 0 | r1 = 0;
0x08006d38 add r0, r7, r0 | r0 = r7 + r0;
0x08006d3c stmdaeq r0, {r0, r3, r4, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r4, r7, sb, fp, lr, pc}");
0x08006d40 stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc}");
0x08006d44 b 0x8005d9c | goto label_16;
| label_56:
0x08006d48 ldr r3, [pc, -0x240] | r3 = loc..LANCHOR0;
0x08006d4c strb r8, [sb, 0x177] | *((sb + 0x177)) = r8;
0x08006d50 sub r8, r3, 0x240 | r8 = r3 - 0x240;
0x08006d54 stmdaeq r0, {r0, r3, r4, r6, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r4, r6, r7, r8, sb, fp, lr, pc}");
0x08006d58 stmdaeq r0, {r0, r3, r4, r6, r7, r8, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r3, r4, r6, r7, r8, sb, fp, lr, pc}");
0x08006d5c str r8, [sb, 0x120] | *((sb + 0x120)) = r8;
0x08006d60 str r3, [sb, 0x12c] | *((sb + 0x12c)) = r3;
0x08006d64 movw r3, 0x5dc | r3 = 0x5dc;
0x08006d68 str r3, [sb, 0x140] | *((sb + 0x140)) = r3;
0x08006d6c movw r3, 0xfffe | r3 = 0xfffe;
0x08006d70 str r3, [sb, 0x14c] | *((sb + 0x14c)) = r3;
0x08006d74 movw r3, 0x1090 | r3 = 0x1090;
0x08006d78 str r3, [sb, 0x130] | *((sb + 0x130)) = r3;
0x08006d7c movw r3, 0xffff | r3 = 0xffff;
0x08006d80 b 0x80067a8 | goto label_17;
| label_62:
0x08006e04 mov r3, 1 | r3 = 1;
0x08006e08 strb r3, [sl, 0x470] | *((sl + 0x470)) = r3;
0x08006e0c stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r5, r7, sb, fp, lr, pc}");
0x08006e10 b 0x8005e08 | goto label_18;
| label_49:
0x08006e44 mvn r6, 0xf | r6 = ~0xf;
0x08006e48 b 0x8005900 | goto label_3;
| label_53:
0x08006e4c mvn r6, 0xb | r6 = ~0xb;
0x08006e50 b 0x8005900 | goto label_3;
| label_26:
0x08006edc ldr r0, [sl, 0x410] | r0 = *((sl + 0x410));
0x08006ee0 mov r2, r6 | r2 = r6;
0x08006ee4 stmdaeq r0, {r2, r4, r5, r7, r8, sb, ip, sp, lr} | __asm ("stmdaeq r0, {r2, r4, r5, r7, r8, sb, ip, sp, lr}");
0x08006ee8 stmdaeq r0, {r2, r4, r5, r7, r8, sb, ip, sp, lr} | __asm ("stmdaeq r0, {r2, r4, r5, r7, r8, sb, ip, sp, lr}");
0x08006eec stmdaeq r0, {r0, r2, r3, r5, r6, r8, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r2, r3, r5, r6, r8, fp, lr, pc}");
0x08006ef0 b 0x8005798 | goto label_19;
| }
; 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/tun.ko @ 0x8001508 */
| #include <stdint.h>
|
; (fcn) sym.tun_xdp_act () | void tun_xdp_act (int32_t arg1) {
| int32_t var_8h;
| r0 = arg1;
0x08001508 push {r4, r5, r6, lr} |
0x0800150c mov r4, r3 | r4 = r3;
0x08001510 mov r5, r0 | r5 = r0;
0x08001514 sub sp, sp, 8 |
0x08001518 mov r3, r2 | r3 = r2;
0x0800151c cmp r4, 4 |
| if (r4 > 4) {
| /* switch table (5 cases) at 0x8001528 */
0x08001520 ldrls pc, [pc, r4, lsl 2] | offset_0 = r4 << 2;
| pc = *((pc + offset_0));
| }
0x08001524 b 0x800153c |
0x0800153c mov r0, r4 | r0 = r4;
0x08001540 stmdaeq r0, {r0, r4, sb, fp, lr, pc} | __asm ("stmdaeq r0, {r0, r4, sb, fp, lr, pc}");
0x08001544 mrs r1, apsr | r1 = apsr;
0x08001548 cpsid i | __asm ("cpsid i");
0x0800154c add r0, r5, 0x1000 | r0 = r5 + 0x1000;
0x08001550 ldr r2, [r0, 0x4a8] | r2 = *((r0 + 0x4a8));
0x08001554 ldr r3, [r2, 0x20] | r3 = *((r2 + 0x20));
0x08001558 add r3, r3, 1 | r3++;
0x0800155c str r3, [r2, 0x20] | *((r2 + 0x20)) = r3;
0x08001560 msr cpsr_c, r1 | cpsr_c = r1;
0x08001564 mov r0, r4 | r0 = r4;
0x08001568 add sp, sp, 8 |
0x0800156c pop {r4, r5, r6, pc} |
| }
[*] Function popen used 1 times tun.ko