[*] Binary protection state of tun.ko

  
  	No RELRO       No Canary found   NX disabled  REL          No RPATH     No RUNPATH   Symbols


[*] Function mmap 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 mmap used 1 times tun.ko