[*] Binary protection state of nf_nat.ko

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


[*] Function strcat tear down of nf_nat.ko

    ; assembly                                                                   | /* r2dec pseudo code output */
                                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/netfilter/nf_nat.ko @ 0x8001518 */
                                                                                 | #include <stdint.h>
                                                                                 |  
                                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                                 |  
    ; (fcn) sym.__nf_nat_cleanup_conntrack ()                                    | void nf_nat_cleanup_conntrack (int32_t arg1) {
                                                                                 |     int32_t var_0h;
                                                                                 |     r0 = arg1;
    0x08001518 push {r4, lr}                                                     |     
    0x0800151c add r1, r0, 0x14                                                  |     r1 = r0 + 0x14;
    0x08001520 mov r4, r0                                                        |     r4 = r0;
    0x08001524 ldr r0, [r0, 0x74]                                                |     r0 = *((r0 + 0x74));
    0x08001528 bl 0x8000568                                                      |     hash_by_src ();
    0x0800152c mov r3, sp                                                        |     r3 = sp;
    0x08001530 bic r2, r3, 0x1fc0                                                |     r2 = BIT_MASK (r3, 0x1fc0);
    0x08001534 bic r2, r2, 0x3f                                                  |     r2 = BIT_MASK (r2, 0x3f);
    0x08001538 ldr r3, [r2, 4]                                                   |     r3 = *((r2 + 4));
    0x0800153c add r3, r3, 0x200                                                 |     r3 += 0x200;
    0x08001540 add r3, r3, 1                                                     |     r3++;
    0x08001544 str r3, [r2, 4]                                                   |     *((r2 + 4)) = r3;
    0x08001548 ldr r3, [r4, 0x78]                                                |     r3 = *((r4 + 0x78));
    0x0800154c movw r1, 0x201                                                    |     r1 = 0x201;
    0x08001550 ldr r2, [r4, 0x7c]                                                |     r2 = *((r4 + 0x7c));
    0x08001554 cmp r3, 0                                                         |     
    0x08001558 ldr r0, [pc, 0x14]                                                |     r0 = *(0x8001570);
    0x0800155c str r3, [r2]                                                      |     *(r2) = r3;
                                                                                 |     if (r3 == 0) {
    0x08001560 strne r2, [r3, 4]                                                 |         *((r3 + 4)) = r2;
                                                                                 |     }
    0x08001564 movw r3, 0x122                                                    |     r3 = 0x122;
    0x08001568 str r3, [r4, 0x7c]                                                |     *((r4 + 0x7c)) = r3;
    0x0800156c pop {r4, lr}                                                      |     
    0x08001570 stmdaeq r0, {r0, r1, r3, r5, r8, sb, sl, fp, ip, sp, lr}          |     __asm ("stmdaeq r0, {r0, r1, r3, r5, r8, sb, sl, fp, ip, sp, lr}");
    0x08001574 stmdaeq r0, {r4, r5, r6}                                          |     __asm ("stmdaeq r0, {r4, r5, r6}");
                                                                                 | }
    ; assembly                                                                       | /* r2dec pseudo code output */
                                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/netfilter/nf_nat.ko @ 0x80006a8 */
                                                                                     | #include <stdint.h>
                                                                                     |  
                                                                                     | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                                     |                                ((n & 0x0000ff00) <<  8) | \
                                                                                     |                                ((n & 0x00ff0000) >>  8) | \
                                                                                     |                                ((n & 0xff000000) >> 24)))
                                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                                     |  
    ; (fcn) sym.nf_nat_setup_info ()                                                 | void nf_nat_setup_info (int32_t arg1, int32_t arg2) {
                                                                                     |     int32_t var_0h;
                                                                                     |     int32_t var_4h;
                                                                                     |     int32_t var_8h;
                                                                                     |     int32_t var_ch;
                                                                                     |     int32_t var_10h;
                                                                                     |     int32_t var_14h;
                                                                                     |     int32_t var_18h;
                                                                                     |     int32_t var_1ch;
                                                                                     |     int32_t var_20h;
                                                                                     |     int32_t var_24h;
                                                                                     |     int32_t var_28h;
                                                                                     |     int32_t var_2ch;
                                                                                     |     int32_t var_30h;
                                                                                     |     int32_t var_34h;
                                                                                     |     int32_t var_36h;
                                                                                     |     int32_t var_38h;
                                                                                     |     int32_t var_3ch;
                                                                                     |     int32_t var_40h;
                                                                                     |     int32_t var_44h;
                                                                                     |     int32_t var_48h;
                                                                                     |     int32_t var_4ch;
                                                                                     |     int32_t var_50h;
                                                                                     |     int32_t var_54h;
                                                                                     |     int32_t var_58h;
                                                                                     |     int32_t var_5ch;
                                                                                     |     int32_t var_5eh;
                                                                                     |     int32_t var_60h;
                                                                                     |     int32_t var_88h;
                                                                                     |     int32_t var_8ch;
                                                                                     |     int32_t var_0h_2;
                                                                                     |     r0 = arg1;
                                                                                     |     r1 = arg2;
    0x080006a8 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}                             |     
    0x080006ac ldr r3, [r0, 0x6c]                                                    |     r3 = *((r0 + 0x6c));
    0x080006b0 sub sp, sp, 0x8c                                                      |     
    0x080006b4 ubfx r3, r3, 3, 1                                                     |     r3 = (r3 >> 3) & ((1 << 1) - 1);
    0x080006b8 str r2, [sp]                                                          |     *(sp) = r2;
    0x080006bc cmp r3, 0                                                             |     
                                                                                     |     if (r3 == 0) {
    0x080006c0 movne r0, 1                                                           |         r0 = 1;
                                                                                     |     }
                                                                                     |     if (r3 != 0) {
    0x080006c4 bne 0x800093c                                                         |         goto label_3;
                                                                                     |     }
    0x080006c8 mov r7, r1                                                            |     r7 = r1;
    0x080006cc ldr r1, [r0, 0x74]                                                    |     r1 = *((r0 + 0x74));
    0x080006d0 mov r4, r0                                                            |     r4 = r0;
    0x080006d4 cmp r2, 1                                                             |     
    0x080006d8 str r1, [sp, 8]                                                       |     var_8h = r1;
                                                                                     |     if (r2 > 1) {
    0x080006dc bhi 0x8000944                                                         |         goto label_24;
                                                                                     |     }
    0x080006e0 ldr r2, [sp]                                                          |     r2 = *(sp);
    0x080006e4 ldr r3, [r0, 0x6c]                                                    |     r3 = *((r0 + 0x6c));
    0x080006e8 cmp r2, 0                                                             |     
                                                                                     |     if (r2 != 0) {
    0x080006ec bne 0x800095c                                                         |         goto label_25;
                                                                                     |     }
    0x080006f0 tst r3, 0x80                                                          |     
                                                                                     |     if ((r3 & 0x80) != 0) {
    0x080006f4 bne 0x8000b88                                                         |         goto label_26;
                                                                                     |     }
    0x080006f8 add r1, r0, 0x44                                                      |     r1 = r0 + 0x44;
    0x080006fc add r0, sp, 0x10                                                      |     r0 += var_10h;
    0x08000700 stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}              |     __asm ("stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}");
    0x08000704 ldr ip, [r7]                                                          |     ip = *(r7);
    0x08000708 ldr r8, [r4, 0x74]                                                    |     r8 = *((r4 + 0x74));
    0x0800070c ands r3, ip, 0x14                                                     |     r3 = ip & 0x14;
    0x08000710 str r3, [sp, 4]                                                       |     var_4h = r3;
                                                                                     |     if (r3 != ip) {
    0x08000714 bne 0x80009f8                                                         |         goto label_27;
                                                                                     |     }
    0x08000718 mov r1, r7                                                            |     r1 = r7;
    0x0800071c add r0, sp, 0x10                                                      |     r0 += var_10h;
    0x08000720 bl 0x8000170                                                          |     r0 = in_range ();
    0x08000724 cmp r0, 0                                                             |     
                                                                                     |     if (r0 == 0) {
    0x08000728 beq 0x8000d88                                                         |         goto label_28;
                                                                                     |     }
    0x0800072c add r8, sp, 0x60                                                      |     r8 += var_60h;
    0x08000730 add r1, sp, 0x10                                                      |     r1 += var_10h;
    0x08000734 mov r0, r8                                                            |     r0 = r8;
    0x08000738 stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}              |     __asm ("stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}");
    0x0800073c mov r1, r4                                                            |     r1 = r4;
    0x08000740 mov r0, r8                                                            |     r0 = r8;
    0x08000744 stmdaeq r0, {r0, r1, r2, r3, r4, r8, sb, sl, fp, ip, sp, lr}          |     __asm ("stmdaeq r0, {r0, r1, r2, r3, r4, r8, sb, sl, fp, ip, sp, lr}");
    0x08000748 cmp r0, 0                                                             |     
                                                                                     |     if (r0 == 0) {
    0x0800074c beq 0x8000fb0                                                         |         goto label_29;
                                                                                     |     }
                                                                                     | label_9:
    0x08000750 ldr ip, [r7]                                                          |     ip = *(r7);
    0x08000754 add r6, sp, 0x38                                                      |     r6 += var_38h;
    0x08000758 and r3, ip, 0x14                                                      |     r3 = ip & 0x14;
    0x0800075c str r3, [sp, 4]                                                       |     var_4h = r3;
                                                                                     | label_13:
    0x08000760 add r8, sp, 0x10                                                      |     r8 += var_10h;
    0x08000764 mov lr, r6                                                            |     lr = r6;
    0x08000768 tst ip, 1                                                             |     
    0x0800076c ldm r8!, {r0, r1, r2, r3}                                             |     r0 = *(r8!);
                                                                                     |     r1 = *((r8! + 4));
                                                                                     |     r2 = *((r8! + 8));
                                                                                     |     r3 = *((r8! + 12));
    0x08000770 stm lr!, {r0, r1, r2, r3}                                             |     *(lr!) = r0;
                                                                                     |     *((lr! + 4)) = r1;
                                                                                     |     *((lr! + 8)) = r2;
                                                                                     |     *((lr! + 12)) = r3;
    0x08000774 ldm r8!, {r0, r1, r2, r3}                                             |     r0 = *(r8!);
                                                                                     |     r1 = *((r8! + 4));
                                                                                     |     r2 = *((r8! + 8));
                                                                                     |     r3 = *((r8! + 12));
    0x08000778 stm lr!, {r0, r1, r2, r3}                                             |     *(lr!) = r0;
                                                                                     |     *((lr! + 4)) = r1;
                                                                                     |     *((lr! + 8)) = r2;
                                                                                     |     *((lr! + 12)) = r3;
    0x0800077c ldm r8, {r0, r1}                                                      |     r0 = *(r8);
                                                                                     |     r1 = *((r8 + 4));
    0x08000780 stm lr, {r0, r1}                                                      |     *(lr) = r0;
                                                                                     |     *((lr + 4)) = r1;
                                                                                     |     if ((ip & 1) != 0) {
    0x08000784 bne 0x8000a24                                                         |         goto label_30;
                                                                                     |     }
                                                                                     | label_0:
    0x08000788 ldr r3, [sp, 4]                                                       |     r3 = var_4h;
    0x0800078c cmp r3, 0                                                             |     
                                                                                     |     if (r3 == 0) {
    0x08000790 bne 0x80007f4                                                         |         
    0x08000794 tst ip, 2                                                             |         
                                                                                     |         if ((ip & 2) != 0) {
    0x08000798 beq 0x80007d0                                                         |             
    0x0800079c tst ip, 0x20                                                          |             
                                                                                     |             if ((ip & 0x20) != 0) {
    0x080007a0 bne 0x80007f4                                                         |                 goto label_1;
                                                                                     |             }
    0x080007a4 ldr r1, [sp]                                                          |             r1 = *(sp);
    0x080007a8 add r3, r7, 0x26                                                      |             r3 = r7 + 0x26;
    0x080007ac add r2, r7, 0x24                                                      |             r2 = r7 + 0x24;
    0x080007b0 mov r0, r6                                                            |             r0 = r6;
    0x080007b4 bl 0x8000070                                                          |             r0 = l4proto_in_range ();
    0x080007b8 cmp r0, 0                                                             |             
                                                                                     |             if (r0 == 0) {
    0x080007bc beq 0x80007f4                                                         |                 goto label_1;
                                                                                     |             }
    0x080007c0 ldrh r2, [r7, 0x24]                                                   |             r2 = *((r7 + 0x24));
    0x080007c4 ldrh r3, [r7, 0x26]                                                   |             r3 = *((r7 + 0x26));
    0x080007c8 cmp r2, r3                                                            |             
                                                                                     |             if (r2 == r3) {
    0x080007cc beq 0x8000898                                                         |                 goto label_7;
                                                                                     |             }
                                                                                     |         }
    0x080007d0 add r8, sp, 0x60                                                      |         r8 += var_60h;
    0x080007d4 mov r1, r6                                                            |         r1 = r6;
    0x080007d8 mov r0, r8                                                            |         r0 = r8;
    0x080007dc stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}              |         __asm ("stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}");
    0x080007e0 mov r1, r4                                                            |         r1 = r4;
    0x080007e4 mov r0, r8                                                            |         r0 = r8;
    0x080007e8 stmdaeq r0, {r0, r1, r2, r3, r4, r8, sb, sl, fp, ip, sp, lr}          |         __asm ("stmdaeq r0, {r0, r1, r2, r3, r4, r8, sb, sl, fp, ip, sp, lr}");
    0x080007ec cmp r0, 0                                                             |         
                                                                                     |         if (r0 == 0) {
    0x080007f0 beq 0x8000898                                                         |             goto label_7;
                                                                                     |         }
                                                                                     |     }
                                                                                     | label_1:
    0x080007f4 ldrb r3, [sp, 0x5e]                                                   |     r3 = var_5eh;
    0x080007f8 cmp r3, 0x21                                                          |     
                                                                                     |     if (r3 == 0x21) {
    0x080007fc beq 0x8000824                                                         |         goto label_31;
                                                                                     |     }
                                                                                     |     if (r3 > 0x21) {
    0x08000800 bhi 0x800087c                                                         |         goto label_32;
                                                                                     |     }
    0x08000804 cmp r3, 1                                                             |     
                                                                                     |     if (r3 == 1) {
    0x08000808 beq 0x8000cb0                                                         |         goto label_33;
                                                                                     |     }
    0x0800080c cmp r3, 0                                                             |     
                                                                                     |     if (r3 == 0) {
    0x08000810 beq 0x8000898                                                         |         goto label_7;
                                                                                     |     }
    0x08000814 cmp r3, 6                                                             |     
                                                                                     |     if (r3 == 6) {
    0x08000818 beq 0x8000824                                                         |         goto label_31;
                                                                                     |     }
    0x0800081c cmp r3, 0x11                                                          |     
                                                                                     |     if (r3 != 0x11) {
    0x08000820 bne 0x8000898                                                         |         goto label_7;
                                                                                     |     }
                                                                                     |     do {
                                                                                     | label_31:
    0x08000824 ldr r1, [sp]                                                          |         r1 = *(sp);
    0x08000828 ldr r3, [r7]                                                          |         r3 = *(r7);
    0x0800082c cmp r1, 0                                                             |         
    0x08000830 and r2, r3, 2                                                         |         r2 = r3 & 2;
                                                                                     |         if (r1 == 0) {
    0x08000834 beq 0x8000f20                                                         |             goto label_34;
                                                                                     |         }
    0x08000838 cmp r2, 0                                                             |         
                                                                                     |         if (r2 != 0) {
    0x0800083c bne 0x8000f88                                                         |             goto label_35;
                                                                                     |         }
    0x08000840 cmp r1, 1                                                             |         
                                                                                     |         if (r1 == 1) {
    0x08000844 beq 0x8000fd8                                                         |             goto label_36;
                                                                                     |         }
    0x08000848 add sl, sp, 0x5c                                                      |         sl += var_5ch;
                                                                                     | label_16:
    0x0800084c ldrh r2, [sl]                                                         |         r2 = *(sl);
    0x08000850 rev16 r2, r2                                                          |         __asm ("rev16 r2, r2");
    0x08000854 uxth r2, r2                                                           |         r2 = (int16_t) r2;
    0x08000858 cmp r2, 0x400                                                         |         
                                                                                     |         if (r2 >= 0x400) {
    0x0800085c bhs 0x8000f90                                                         |             goto label_37;
                                                                                     |         }
    0x08000860 cmp r2, 0x200                                                         |         
    0x08000864 movw r8, 0x1ff                                                        |         r8 = 0x1ff;
    0x08000868 mov sb, 0x80                                                          |         sb = 0x80;
                                                                                     |         if (r2 < 0x200) {
    0x0800086c movhs r8, 0x1a8                                                       |             r8 = 0x1a8;
                                                                                     |         }
                                                                                     |         if (r2 >= 0x200) {
    0x08000870 movlo fp, 1                                                           |             
                                                                                     |         }
                                                                                     |         if (r2 < 0x200) {
    0x08000874 movhs fp, 0x258                                                       |             
                                                                                     |         }
    0x08000878 b 0x8000cec                                                           |         goto label_15;
                                                                                     | label_32:
    0x0800087c cmp r3, 0x3a                                                          |         
                                                                                     |         if (r3 == 0x3a) {
    0x08000880 beq 0x8000cb0                                                         |             goto label_33;
                                                                                     |         }
    0x08000884 cmp r3, 0x39                                                          |         
                                                                                     |         if (r3 < 0x39) {
    0x08000888 bls 0x8000898                                                         |             goto label_7;
                                                                                     |         }
    0x0800088c add r3, r3, 0x7c                                                      |         r3 += 0x7c;
    0x08000890 tst r3, 0xfb                                                          |         
    0x08000894 beq 0x8000824                                                         |         
                                                                                     |     } while ((r3 & 0xfb) == 0);
                                                                                     | label_7:
    0x08000898 ldr r2, [sp, 0x38]                                                    |     r2 = var_38h;
    0x0800089c ldr r3, [sp, 0x10]                                                    |     r3 = var_10h;
    0x080008a0 cmp r2, r3                                                            |     
                                                                                     |     if (r2 == r3) {
    0x080008a4 beq 0x8000bb0                                                         |         goto label_11;
                                                                                     |     }
                                                                                     | label_4:
    0x080008a8 mov r1, r6                                                            |     r1 = r6;
    0x080008ac add r0, sp, 0x60                                                      |     r0 += var_60h;
    0x080008b0 stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}              |     __asm ("stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}");
    0x080008b4 mov r0, r4                                                            |     r0 = r4;
    0x080008b8 add r1, sp, 0x60                                                      |     r1 += var_60h;
    0x080008bc stmdaeq r0, {r0, r1, r5, r8, sb, sl, fp, ip, sp, lr}                  |     __asm ("stmdaeq r0, {r0, r1, r5, r8, sb, sl, fp, ip, sp, lr}");
    0x080008c0 ldr r3, [sp]                                                          |     r3 = *(sp);
    0x080008c4 cmp r3, 0                                                             |     
                                                                                     |     if (r3 == 0) {
    0x080008c8 beq 0x8000ee8                                                         |         goto label_38;
                                                                                     |     }
                                                                                     | label_21:
    0x080008cc ldr r2, [r4, 0x6c]                                                    |     r2 = *((r4 + 0x6c));
    0x080008d0 orr r2, r2, 0x20                                                      |     r2 |= 0x20;
                                                                                     | label_12:
    0x080008d4 ldr r3, [r4, 0x8c]                                                    |     r3 = *((r4 + 0x8c));
    0x080008d8 str r2, [r4, 0x6c]                                                    |     *((r4 + 0x6c)) = r2;
    0x080008dc cmp r3, 0                                                             |     
                                                                                     |     if (r3 != 0) {
    0x080008e0 beq 0x800090c                                                         |         
    0x080008e4 ldrb r2, [r3]                                                         |         r2 = *(r3);
    0x080008e8 cmp r2, 0                                                             |         
                                                                                     |         if (r2 == 0) {
    0x080008ec beq 0x800090c                                                         |             goto label_5;
                                                                                     |         }
    0x080008f0 cmn r3, r2                                                            |         
                                                                                     |         if (r3 == r2) {
    0x080008f4 beq 0x800090c                                                         |             goto label_5;
                                                                                     |         }
    0x080008f8 ldrb r2, [r3, 2]                                                      |         r2 = *((r3 + 2));
    0x080008fc cmp r2, 0                                                             |         
                                                                                     |         if (r2 == 0) {
    0x08000900 beq 0x8000f6c                                                         |             goto label_39;
                                                                                     |         }
    0x08000904 cmn r3, r2                                                            |         
                                                                                     |         if (r3 == r2) {
    0x08000908 beq 0x8000f6c                                                         |             goto label_39;
                                                                                     |         }
                                                                                     |     }
                                                                                     | label_5:
    0x0800090c ldr r3, [sp]                                                          |     r3 = *(sp);
    0x08000910 cmp r3, 0                                                             |     
                                                                                     |     if (r3 == 0) {
    0x08000914 beq 0x8000c48                                                         |         goto label_40;
                                                                                     |     }
    0x08000918 ldr r0, [sp]                                                          |     r0 = *(sp);
    0x0800091c ldr r3, [r4, 0x6c]                                                    |     r3 = *((r4 + 0x6c));
    0x08000920 cmp r0, 1                                                             |     
                                                                                     |     if (r0 != 1) {
    0x08000924 orreq r3, r3, 0x100                                                   |         r3 |= 0x100;
                                                                                     |     }
                                                                                     |     if (r0 != 1) {
    0x08000928 streq r3, [r4, 0x6c]                                                  |         *((r4 + 0x6c)) = r3;
                                                                                     |     }
                                                                                     |     if (r0 != 1) {
    0x0800092c beq 0x800093c                                                         |         
                                                                                     | label_6:
    0x08000930 orr r3, r3, 0x80                                                      |         r3 |= 0x80;
    0x08000934 mov r0, 1                                                             |         r0 = 1;
    0x08000938 str r3, [r4, 0x6c]                                                    |         *((r4 + 0x6c)) = r3;
                                                                                     |     }
                                                                                     | label_3:
    0x0800093c add sp, sp, 0x8c                                                      |     
    0x08000940 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}                              |     
                                                                                     | label_24:
    0x08000944 mov r2, 9                                                             |     r2 = 9;
    0x08000948 movw r1, 0x263                                                        |     r1 = 0x263;
    0x0800094c stmdaeq r0, {r3, r7, r8, sb, sl, fp, ip, sp}                          |     __asm ("stmdaeq r0, {r3, r7, r8, sb, sl, fp, ip, sp}");
    0x08000950 stmdaeq r0, {r3, r7, r8, sb, sl, fp, ip, sp}                          |     __asm ("stmdaeq r0, {r3, r7, r8, sb, sl, fp, ip, sp}");
    0x08000954 stmdaeq r0, {r0, r1, r2, r5, r8, sb, sl, fp, ip, sp, lr}              |     __asm ("stmdaeq r0, {r0, r1, r2, r5, r8, sb, sl, fp, ip, sp, lr}");
    0x08000958 ldr r3, [r4, 0x6c]                                                    |     r3 = *((r4 + 0x6c));
                                                                                     | label_25:
    0x0800095c tst r3, 0x100                                                         |     
                                                                                     |     if ((r3 & 0x100) != 0) {
    0x08000960 bne 0x8000b88                                                         |         goto label_26;
                                                                                     |     }
    0x08000964 add r1, r4, 0x44                                                      |     r1 = r4 + 0x44;
    0x08000968 add r0, sp, 0x10                                                      |     r0 += var_10h;
    0x0800096c stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}              |     __asm ("stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}");
    0x08000970 add lr, sp, 0x10                                                      |     lr += var_10h;
    0x08000974 ldr ip, [r7]                                                          |     ip = *(r7);
    0x08000978 add r6, sp, 0x38                                                      |     r6 += var_38h;
    0x0800097c mov r8, r6                                                            |     r8 = r6;
    0x08000980 and r3, ip, 0x14                                                      |     r3 = ip & 0x14;
    0x08000984 str r3, [sp, 4]                                                       |     var_4h = r3;
    0x08000988 ldm lr!, {r0, r1, r2, r3}                                             |     r0 = *(lr!);
                                                                                     |     r1 = *((lr! + 4));
                                                                                     |     r2 = *((lr! + 8));
                                                                                     |     r3 = *((lr! + 12));
    0x0800098c stm r8!, {r0, r1, r2, r3}                                             |     *(r8!) = r0;
                                                                                     |     *((r8! + 4)) = r1;
                                                                                     |     *((r8! + 8)) = r2;
                                                                                     |     *((r8! + 12)) = r3;
    0x08000990 tst ip, 1                                                             |     
    0x08000994 ldm lr!, {r0, r1, r2, r3}                                             |     r0 = *(lr!);
                                                                                     |     r1 = *((lr! + 4));
                                                                                     |     r2 = *((lr! + 8));
                                                                                     |     r3 = *((lr! + 12));
    0x08000998 stm r8!, {r0, r1, r2, r3}                                             |     *(r8!) = r0;
                                                                                     |     *((r8! + 4)) = r1;
                                                                                     |     *((r8! + 8)) = r2;
                                                                                     |     *((r8! + 12)) = r3;
    0x0800099c ldm lr, {r0, r1}                                                      |     r0 = *(lr);
                                                                                     |     r1 = *((lr + 4));
    0x080009a0 stm r8, {r0, r1}                                                      |     *(r8) = r0;
                                                                                     |     *((r8 + 4)) = r1;
                                                                                     |     if ((ip & 1) == 0) {
    0x080009a4 beq 0x8000788                                                         |         goto label_0;
                                                                                     |     }
    0x080009a8 ldr r8, [r7, 0x14]                                                    |     r8 = *((r7 + 0x14));
    0x080009ac add lr, sp, 0x4c                                                      |     lr += var_4ch;
    0x080009b0 ldr r3, [r7, 4]                                                       |     r3 = *((r7 + 4));
    0x080009b4 cmp r3, r8                                                            |     
                                                                                     |     if (r3 != r8) {
    0x080009b8 bne 0x8000a38                                                         |         goto label_41;
                                                                                     |     }
                                                                                     | label_2:
    0x080009bc ldr r2, [r7, 8]                                                       |     r2 = *((r7 + 8));
    0x080009c0 ldr r3, [r7, 0x18]                                                    |     r3 = *((r7 + 0x18));
    0x080009c4 cmp r2, r3                                                            |     
                                                                                     |     if (r2 != r3) {
    0x080009c8 bne 0x8000a38                                                         |         goto label_41;
                                                                                     |     }
    0x080009cc ldr r2, [r7, 0xc]                                                     |     r2 = *((r7 + 0xc));
    0x080009d0 ldr r3, [r7, 0x1c]                                                    |     r3 = *((r7 + 0x1c));
    0x080009d4 cmp r2, r3                                                            |     
                                                                                     |     if (r2 != r3) {
    0x080009d8 bne 0x8000a38                                                         |         goto label_41;
                                                                                     |     }
    0x080009dc ldr r2, [r7, 0x10]                                                    |     r2 = *((r7 + 0x10));
    0x080009e0 ldr r3, [r7, 0x20]                                                    |     r3 = *((r7 + 0x20));
    0x080009e4 cmp r2, r3                                                            |     
                                                                                     |     if (r2 != r3) {
    0x080009e8 bne 0x8000a38                                                         |         goto label_41;
                                                                                     |     }
    0x080009ec ldmib r7, {r0, r1, r2, r3}                                            |     __asm ("ldmib r7, {r0, r1, r2, r3}");
    0x080009f0 stm lr, {r0, r1, r2, r3}                                              |     *(lr) = r0;
                                                                                     |     *((lr + 4)) = r1;
                                                                                     |     *((lr + 8)) = r2;
                                                                                     |     *((lr + 12)) = r3;
    0x080009f4 b 0x8000788                                                           |     goto label_0;
                                                                                     | label_27:
    0x080009f8 add lr, sp, 0x10                                                      |     lr += var_10h;
    0x080009fc add r6, sp, 0x38                                                      |     r6 += var_38h;
    0x08000a00 mov r8, r6                                                            |     r8 = r6;
    0x08000a04 tst ip, 1                                                             |     
    0x08000a08 ldm lr!, {r0, r1, r2, r3}                                             |     r0 = *(lr!);
                                                                                     |     r1 = *((lr! + 4));
                                                                                     |     r2 = *((lr! + 8));
                                                                                     |     r3 = *((lr! + 12));
    0x08000a0c stm r8!, {r0, r1, r2, r3}                                             |     *(r8!) = r0;
                                                                                     |     *((r8! + 4)) = r1;
                                                                                     |     *((r8! + 8)) = r2;
                                                                                     |     *((r8! + 12)) = r3;
    0x08000a10 ldm lr!, {r0, r1, r2, r3}                                             |     r0 = *(lr!);
                                                                                     |     r1 = *((lr! + 4));
                                                                                     |     r2 = *((lr! + 8));
                                                                                     |     r3 = *((lr! + 12));
    0x08000a14 stm r8!, {r0, r1, r2, r3}                                             |     *(r8!) = r0;
                                                                                     |     *((r8! + 4)) = r1;
                                                                                     |     *((r8! + 8)) = r2;
                                                                                     |     *((r8! + 12)) = r3;
    0x08000a18 ldm lr, {r0, r1}                                                      |     r0 = *(lr);
                                                                                     |     r1 = *((lr + 4));
    0x08000a1c stm r8, {r0, r1}                                                      |     *(r8) = r0;
                                                                                     |     *((r8 + 4)) = r1;
                                                                                     |     if ((ip & 1) == 0) {
    0x08000a20 beq 0x80007f4                                                         |         goto label_1;
                                                                                     |     }
                                                                                     | label_30:
    0x08000a24 ldr r8, [r7, 0x14]                                                    |     r8 = *((r7 + 0x14));
    0x08000a28 mov lr, r6                                                            |     lr = r6;
    0x08000a2c ldr r3, [r7, 4]                                                       |     r3 = *((r7 + 4));
    0x08000a30 cmp r3, r8                                                            |     
                                                                                     |     if (r3 == r8) {
    0x08000a34 beq 0x80009bc                                                         |         goto label_2;
                                                                                     |     }
                                                                                     | label_41:
    0x08000a38 ldrh r3, [r4, 0x26]                                                   |     r3 = *((r4 + 0x26));
    0x08000a3c cmp r3, 2                                                             |     
                                                                                     |     if (r3 != 2) {
    0x08000a40 moveq r3, 0                                                           |         r3 = 0;
                                                                                     |     }
                                                                                     |     if (r3 == 2) {
    0x08000a44 movne r3, 3                                                           |         r3 = 3;
                                                                                     |     }
    0x08000a48 ands fp, ip, 8                                                        |     
    0x08000a4c movwne sb, 0xbeff                                                     |     __asm ("movwne sb, 0xbeff");
    0x08000a50 movtne sb, 0xdead                                                     |     __asm ("movtne sb, 0xdead");
                                                                                     |     if (fp == ip) {
    0x08000a54 bne 0x8000a78                                                         |         
    0x08000a58 add r2, sp, 0x88                                                      |         r2 += var_88h;
    0x08000a5c movw sb, 0xbeff                                                       |         
    0x08000a60 movt sb, 0xdead                                                       |         sb = 0xdeadbeff;
    0x08000a64 add r2, r2, r3, lsl 2                                                 |         r2 += (r3 << 2);
    0x08000a68 ldr r1, [r2, -0x3c]                                                   |         r1 = var_58h;
    0x08000a6c ldrh r2, [r4, 8]                                                      |         r2 = *((r4 + 8));
    0x08000a70 eor r2, r2, r1                                                        |         r2 ^= r1;
    0x08000a74 add sb, r2, sb                                                        |         sb = r2 + sb;
                                                                                     |     }
    0x08000a78 add r5, lr, r3, lsl 2                                                 |     r5 = lr + (r3 << 2);
    0x08000a7c ldr r2, [sp, 0x38]                                                    |     r2 = var_38h;
    0x08000a80 ldr r3, [sp, 0x40]                                                    |     r3 = var_40h;
    0x08000a84 sub r0, lr, 4                                                         |     r0 -= var_48h;
    0x08000a88 ldr r1, [sp, 0x3c]                                                    |     r1 = var_3ch;
    0x08000a8c add sl, r7, 0x18                                                      |     sl = r7 + 0x18;
    0x08000a90 sub r2, r2, r3                                                        |     r2 -= r3;
    0x08000a94 add r3, r3, sb                                                        |     r3 += sb;
    0x08000a98 add r1, sb, r1                                                        |     r1 = sb + r1;
    0x08000a9c ldr lr, [sp, 0x44]                                                    |     lr = var_44h;
    0x08000aa0 eor r2, r2, r3, ror 28                                                |     r2 ^= (r3 >>> 28);
    0x08000aa4 add r3, r1, r3                                                        |     r3 = r1 + r3;
    0x08000aa8 sub r1, r1, r2                                                        |     r1 -= r2;
    0x08000aac str ip, [sp, 0xc]                                                     |     var_ch = ip;
    0x08000ab0 eor r1, r1, r2, ror 26                                                |     r1 ^= (r2 >>> 26);
    0x08000ab4 add r2, r2, r3                                                        |     r2 += r3;
    0x08000ab8 sub r3, r3, r1                                                        |     r3 -= r1;
    0x08000abc add sb, sp, 0x4c                                                      |     sb += var_4ch;
    0x08000ac0 eor r3, r3, r1, ror 24                                                |     r3 ^= (r1 >>> 24);
    0x08000ac4 add r1, r1, r2                                                        |     r1 += r2;
    0x08000ac8 sub r2, r2, r3                                                        |     r2 -= r3;
    0x08000acc mov ip, r5                                                            |     
    0x08000ad0 eor r2, r2, r3, ror 16                                                |     r2 ^= (r3 >>> 16);
    0x08000ad4 add r3, r1, r3                                                        |     r3 = r1 + r3;
    0x08000ad8 sub r1, r1, r2                                                        |     r1 -= r2;
    0x08000adc eor r1, r1, r2, ror 13                                                |     r1 ^= (r2 >>> 13);
    0x08000ae0 add r2, r3, r2                                                        |     r2 = r3 + r2;
    0x08000ae4 sub r3, r3, r1                                                        |     r3 -= r1;
    0x08000ae8 eor r3, r3, r1, ror 28                                                |     r3 ^= (r1 >>> 28);
    0x08000aec add r1, r2, r1                                                        |     r1 = r2 + r1;
    0x08000af0 eor r3, r3, r1                                                        |     r3 ^= r1;
    0x08000af4 add r2, r2, lr                                                        |     r2 += lr;
    0x08000af8 sub r3, r3, r1, ror 18                                                |     r3 -= (r1 >>> 18);
    0x08000afc mov lr, 0                                                             |     lr = 0;
    0x08000b00 eor r2, r2, r3                                                        |     r2 ^= r3;
    0x08000b04 sub r2, r2, r3, ror 21                                                |     r2 -= (r3 >>> 21);
    0x08000b08 eor r1, r1, r2                                                        |     r1 ^= r2;
    0x08000b0c sub r1, r1, r2, ror 7                                                 |     r1 -= (r2 >>> 7);
    0x08000b10 eor r3, r3, r1                                                        |     r3 ^= r1;
    0x08000b14 sub r3, r3, r1, ror 16                                                |     r3 -= (r1 >>> 16);
    0x08000b18 eor r2, r2, r3                                                        |     r2 ^= r3;
    0x08000b1c sub r2, r2, r3, ror 28                                                |     r2 -= (r3 >>> 28);
    0x08000b20 eor r1, r1, r2                                                        |     r1 ^= r2;
    0x08000b24 sub r1, r1, r2, ror 18                                                |     r1 -= (r2 >>> 18);
    0x08000b28 eor r3, r3, r1                                                        |     r3 ^= r1;
    0x08000b2c sub r3, r3, r1, ror 8                                                 |     r3 -= (r1 >>> 8);
                                                                                     |     do {
    0x08000b30 cmp lr, 0                                                             |         
    0x08000b34 add sb, sb, 4                                                         |         sb += var_50h;
    0x08000b38 reveq r1, r8                                                          |         __asm ("reveq r1, r8");
                                                                                     |         if (lr != 0) {
    0x08000b3c addeq r1, r1, 1                                                       |             r1++;
                                                                                     |         }
                                                                                     |         if (lr == 0) {
    0x08000b40 mvnne r1, 0                                                           |             r1 = ~0;
                                                                                     |         }
                                                                                     |         if (lr != 0) {
    0x08000b44 ldreq r2, [sl, -0x14]                                                 |             r2 = *((sl - 0x14));
                                                                                     |         }
                                                                                     |         if (lr == 0) {
    0x08000b48 movne r2, 0                                                           |             r2 = 0;
                                                                                     |         }
    0x08000b4c reveq r2, r2                                                          |         __asm ("reveq r2, r2");
                                                                                     |         if (lr != 0) {
    0x08000b50 subeq r1, r1, r2                                                      |             r1 -= r2;
                                                                                     |         }
    0x08000b54 umull r5, r1, r3, r1                                                  |         r5:r1 = r3 * r1;
    0x08000b58 add r2, r2, r1                                                        |         r2 += r1;
    0x08000b5c rev r2, r2                                                            |         r2 = SWAP32 (r2);
    0x08000b60 str r2, [r0, 4]!                                                      |         *((r0 += 4)) = r2;
    0x08000b64 cmp r2, r8                                                            |         
                                                                                     |         if (r2 == r8) {
    0x08000b68 movne lr, 1                                                           |             lr = 1;
                                                                                     |         }
    0x08000b6c cmp fp, 0                                                             |         
                                                                                     |         if (fp != 0) {
    0x08000b70 ldreq r2, [sb, -4]                                                    |             r2 = *((sb - 4));
                                                                                     |         }
                                                                                     |         if (fp != 0) {
    0x08000b74 eoreq r3, r3, r2                                                      |             r3 ^= r2;
                                                                                     |         }
    0x08000b78 cmp r0, ip                                                            |         
                                                                                     |         if (r0 == ip) {
    0x08000b7c beq 0x8000ba8                                                         |             goto label_42;
                                                                                     |         }
    0x08000b80 ldr r8, [sl], 4                                                       |         r8 = *(sl);
                                                                                     |         sl += 4;
    0x08000b84 b 0x8000b30                                                           |         
                                                                                     |     } while (1);
                                                                                     | label_26:
    0x08000b88 mov r3, 0                                                             |     r3 = 0;
    0x08000b8c mov r2, 9                                                             |     r2 = 9;
    0x08000b90 movw r1, 0x266                                                        |     r1 = 0x266;
    0x08000b94 stmdaeq r0, {r3, r7, r8, sb, sl, fp, ip, sp}                          |     __asm ("stmdaeq r0, {r3, r7, r8, sb, sl, fp, ip, sp}");
    0x08000b98 stmdaeq r0, {r3, r7, r8, sb, sl, fp, ip, sp}                          |     __asm ("stmdaeq r0, {r3, r7, r8, sb, sl, fp, ip, sp}");
    0x08000b9c stmdaeq r0, {r0, r1, r2, r5, r8, sb, sl, fp, ip, sp, lr}              |     __asm ("stmdaeq r0, {r0, r1, r2, r5, r8, sb, sl, fp, ip, sp, lr}");
    0x08000ba0 mov r0, 0                                                             |     r0 = 0;
    0x08000ba4 b 0x800093c                                                           |     goto label_3;
                                                                                     | label_42:
    0x08000ba8 ldr ip, [sp, 0xc]                                                     |     ip = var_ch;
    0x08000bac b 0x8000788                                                           |     goto label_0;
                                                                                     | label_11:
    0x08000bb0 ldr r2, [sp, 0x3c]                                                    |     r2 = var_3ch;
    0x08000bb4 ldr r3, [sp, 0x14]                                                    |     r3 = var_14h;
    0x08000bb8 cmp r2, r3                                                            |     
                                                                                     |     if (r2 != r3) {
    0x08000bbc bne 0x80008a8                                                         |         goto label_4;
                                                                                     |     }
    0x08000bc0 ldr r2, [sp, 0x40]                                                    |     r2 = var_40h;
    0x08000bc4 ldr r3, [sp, 0x18]                                                    |     r3 = var_18h;
    0x08000bc8 cmp r2, r3                                                            |     
                                                                                     |     if (r2 != r3) {
    0x08000bcc bne 0x80008a8                                                         |         goto label_4;
                                                                                     |     }
                                                                                     | label_23:
    0x08000bd0 ldr r2, [sp, 0x44]                                                    |     r2 = var_44h;
    0x08000bd4 ldr r3, [sp, 0x1c]                                                    |     r3 = var_1ch;
    0x08000bd8 cmp r2, r3                                                            |     
                                                                                     |     if (r2 != r3) {
    0x08000bdc bne 0x80008a8                                                         |         goto label_4;
                                                                                     |     }
    0x08000be0 ldr r2, [sp, 0x48]                                                    |     r2 = var_48h;
    0x08000be4 ldr r3, [sp, 0x20]                                                    |     r3 = var_20h;
    0x08000be8 cmp r2, r3                                                            |     
                                                                                     |     if (r2 != r3) {
    0x08000bec bne 0x80008a8                                                         |         goto label_4;
                                                                                     |     }
    0x08000bf0 ldr r2, [sp, 0x4c]                                                    |     r2 = var_4ch;
    0x08000bf4 ldr r3, [sp, 0x24]                                                    |     r3 = var_24h;
    0x08000bf8 cmp r2, r3                                                            |     
                                                                                     |     if (r2 != r3) {
    0x08000bfc bne 0x80008a8                                                         |         goto label_4;
                                                                                     |     }
    0x08000c00 ldr r2, [sp, 0x50]                                                    |     r2 = var_50h;
    0x08000c04 ldr r3, [sp, 0x28]                                                    |     r3 = var_28h;
    0x08000c08 cmp r2, r3                                                            |     
                                                                                     |     if (r2 != r3) {
    0x08000c0c bne 0x80008a8                                                         |         goto label_4;
                                                                                     |     }
    0x08000c10 ldr r2, [sp, 0x54]                                                    |     r2 = var_54h;
    0x08000c14 ldr r3, [sp, 0x2c]                                                    |     r3 = var_2ch;
    0x08000c18 cmp r2, r3                                                            |     
                                                                                     |     if (r2 != r3) {
    0x08000c1c bne 0x80008a8                                                         |         goto label_4;
                                                                                     |     }
    0x08000c20 ldr r2, [sp, 0x58]                                                    |     r2 = var_58h;
    0x08000c24 ldr r3, [sp, 0x30]                                                    |     r3 = var_30h;
    0x08000c28 cmp r2, r3                                                            |     
                                                                                     |     if (r2 != r3) {
    0x08000c2c bne 0x80008a8                                                         |         goto label_4;
                                                                                     |     }
    0x08000c30 ldr r3, [sp, 0x5c]                                                    |     r3 = var_5ch;
    0x08000c34 ldr r2, [sp, 0x34]                                                    |     r2 = var_34h;
    0x08000c38 eor r3, r3, r2                                                        |     r3 ^= r2;
    0x08000c3c bics r3, r3, 0xff000000                                               |     __asm ("bics r3, r3, 0xff000000");
                                                                                     |     if (r2 == r3) {
    0x08000c40 beq 0x800090c                                                         |         goto label_5;
                                                                                     |     }
    0x08000c44 b 0x80008a8                                                           |     goto label_4;
                                                                                     | label_40:
    0x08000c48 add r1, r4, 0x14                                                      |     r1 = r4 + 0x14;
    0x08000c4c ldr r0, [sp, 8]                                                       |     r0 = var_8h;
    0x08000c50 bl 0x8000568                                                          |     hash_by_src ();
    0x08000c54 mov r3, sp                                                            |     r3 = sp;
    0x08000c58 bic r2, r3, 0x1fc0                                                    |     r2 = BIT_MASK (r3, 0x1fc0);
    0x08000c5c bic r2, r2, 0x3f                                                      |     r2 = BIT_MASK (r2, 0x3f);
    0x08000c60 ldr r3, [r2, 4]                                                       |     r3 = *((r2 + 4));
    0x08000c64 add r3, r3, 0x200                                                     |     r3 += 0x200;
    0x08000c68 add r3, r3, 1                                                         |     r3++;
    0x08000c6c str r3, [r2, 4]                                                       |     *((r2 + 4)) = r3;
    0x08000c70 stmdaeq r0, {r2, r3, r5, r6, r8, lr}                                  |     __asm ("stmdaeq r0, {r2, r3, r5, r6, r8, lr}");
    0x08000c74 stmdaeq r0, {r2, r3, r5, r6, r8, lr}                                  |     __asm ("stmdaeq r0, {r2, r3, r5, r6, r8, lr}");
    0x08000c78 add r1, r4, 0x78                                                      |     r1 = r4 + 0x78;
    0x08000c7c ldr r3, [r3, 8]                                                       |     r3 = *((r3 + 8));
    0x08000c80 ldr r2, [r3, r0, lsl 2]                                               |     offset_0 = r0 << 2;
                                                                                     |     r2 = *((r3 + offset_0));
    0x08000c84 add ip, r3, r0, lsl 2                                                 |     
    0x08000c88 str r2, [r4, 0x78]                                                    |     *((r4 + 0x78)) = r2;
    0x08000c8c str ip, [r4, 0x7c]                                                    |     *((r4 + 0x7c)) = ip;
    0x08000c90 str r1, [r3, r0, lsl 2]                                               |     offset_1 = r0 << 2;
                                                                                     |     *((r3 + offset_1)) = r1;
    0x08000c94 cmp r2, 0                                                             |     
    0x08000c98 ldr r0, [pc, 0x388]                                                   |     r0 = *(0x8001024);
                                                                                     |     if (r2 == 0) {
    0x08000c9c strne r1, [r2, 4]                                                     |         *((r2 + 4)) = r1;
                                                                                     |     }
    0x08000ca0 movw r1, 0x201                                                        |     r1 = 0x201;
    0x08000ca4 stmdaeq r0, {r0, r1, r3, r5, r8, sb, sl, fp, ip, sp, lr}              |     __asm ("stmdaeq r0, {r0, r1, r3, r5, r8, sb, sl, fp, ip, sp, lr}");
    0x08000ca8 ldr r3, [r4, 0x6c]                                                    |     r3 = *((r4 + 0x6c));
    0x08000cac b 0x8000930                                                           |     goto label_6;
                                                                                     | label_33:
    0x08000cb0 ldr r3, [r7]                                                          |     r3 = *(r7);
    0x08000cb4 ands fp, r3, 2                                                        |     
                                                                                     |     if (fp == r3) {
    0x08000cb8 beq 0x8000f10                                                         |         goto label_43;
                                                                                     |     }
    0x08000cbc ldrh r8, [r7, 0x26]                                                   |     r8 = *((r7 + 0x26));
    0x08000cc0 add sl, sp, 0x48                                                      |     sl += var_48h;
    0x08000cc4 ldrh fp, [r7, 0x24]                                                   |     fp = *((r7 + 0x24));
    0x08000cc8 rev16 r8, r8                                                          |     __asm ("rev16 r8, r8");
    0x08000ccc rev16 fp, fp                                                          |     __asm ("rev16 fp, fp");
    0x08000cd0 uxth r8, r8                                                           |     r8 = (int16_t) r8;
    0x08000cd4 add r8, r8, 1                                                         |     r8++;
    0x08000cd8 uxth fp, fp                                                           |     fp = (int16_t) fp;
    0x08000cdc sub r8, r8, fp                                                        |     r8 -= fp;
    0x08000ce0 cmp r8, 0x80                                                          |     
                                                                                     |     if (r8 >= 0x80) {
    0x08000ce4 movlo sb, r8                                                          |         sb = r8;
                                                                                     |     }
                                                                                     |     if (r8 < 0x80) {
    0x08000ce8 movhs sb, 0x80                                                        |         sb = 0x80;
                                                                                     |     }
                                                                                     | label_15:
    0x08000cec tst r3, 0x20                                                          |     
                                                                                     |     if ((r3 & 0x20) == 0) {
    0x08000cf0 beq 0x8000f04                                                         |         goto label_44;
                                                                                     |     }
    0x08000cf4 ldrh r3, [r7, 0x28]                                                   |     r3 = *((r7 + 0x28));
    0x08000cf8 ldrh r7, [sl]                                                         |     r7 = *(sl);
    0x08000cfc rev16 r3, r3                                                          |     __asm ("rev16 r3, r3");
    0x08000d00 rev16 r7, r7                                                          |     __asm ("rev16 r7, r7");
    0x08000d04 sub r7, r7, r3                                                        |     r7 -= r3;
    0x08000d08 uxth r7, r7                                                           |     r7 = (int16_t) r7;
                                                                                     | label_14:
    0x08000d0c uxth fp, fp                                                           |     fp = (int16_t) fp;
                                                                                     | label_8:
    0x08000d10 cmp sb, 0                                                             |     
                                                                                     |     if (sb == 0) {
    0x08000d14 beq 0x8000898                                                         |         goto label_7;
                                                                                     |     }
    0x08000d18 mov r5, 0                                                             |     r5 = 0;
    0x08000d1c b 0x8000d2c                                                           |     
                                                                                     |     while (r0 != 0) {
    0x08000d20 add r5, r5, 1                                                         |         r5++;
    0x08000d24 cmp r5, sb                                                            |         
                                                                                     |         if (r5 == sb) {
    0x08000d28 beq 0x8000d6c                                                         |             goto label_45;
                                                                                     |         }
    0x08000d2c add r0, r7, r5                                                        |         r0 = r7 + r5;
    0x08000d30 mov r1, r8                                                            |         r1 = r8;
    0x08000d34 uxth r0, r0                                                           |         r0 = (int16_t) r0;
    0x08000d38 stmdaeq r0, {r0, r1, r2, r3, r5, r8, sb, sl, fp, ip, sp, lr}          |         __asm ("stmdaeq r0, {r0, r1, r2, r3, r5, r8, sb, sl, fp, ip, sp, lr}");
    0x08000d3c add r1, fp, r1                                                        |         r1 = fp + r1;
    0x08000d40 rev16 r1, r1                                                          |         __asm ("rev16 r1, r1");
    0x08000d44 add r0, sp, 0x60                                                      |         r0 += var_60h;
    0x08000d48 strh r1, [sl]                                                         |         *(sl) = r1;
    0x08000d4c mov r1, r6                                                            |         r1 = r6;
    0x08000d50 stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}              |         __asm ("stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}");
    0x08000d54 mov r1, r4                                                            |         r1 = r4;
    0x08000d58 add r0, sp, 0x60                                                      |         r0 += var_60h;
    0x08000d5c stmdaeq r0, {r0, r1, r2, r3, r4, r8, sb, sl, fp, ip, sp, lr}          |         __asm ("stmdaeq r0, {r0, r1, r2, r3, r4, r8, sb, sl, fp, ip, sp, lr}");
    0x08000d60 cmp r0, 0                                                             |         
    0x08000d64 bne 0x8000d20                                                         |         
                                                                                     |     }
    0x08000d68 b 0x8000898                                                           |     goto label_7;
                                                                                     | label_45:
    0x08000d6c cmp sb, 0xf                                                           |     
    0x08000d70 cmphi r8, sb                                                          |     __asm ("cmphi r8, sb");
                                                                                     |     if (sb < 0xf) {
    0x08000d74 bls 0x8000898                                                         |         goto label_7;
                                                                                     |     }
    0x08000d78 stmdaeq r0, {r0, r1, r4, r5, r8, sb, sl, fp, ip, sp, lr}              |     __asm ("stmdaeq r0, {r0, r1, r4, r5, r8, sb, sl, fp, ip, sp, lr}");
    0x08000d7c lsr sb, sb, 1                                                         |     sb >>= 1;
    0x08000d80 uxth r7, r0                                                           |     r7 = (int16_t) r0;
    0x08000d84 b 0x8000d10                                                           |     goto label_8;
                                                                                     | label_28:
    0x08000d88 add r1, sp, 0x10                                                      |     r1 += var_10h;
    0x08000d8c mov r0, r8                                                            |     r0 = r8;
    0x08000d90 bl 0x8000568                                                          |     hash_by_src ();
    0x08000d94 stmdaeq r0, {r2, r3, r5, r6, r8, lr}                                  |     __asm ("stmdaeq r0, {r2, r3, r5, r6, r8, lr}");
    0x08000d98 stmdaeq r0, {r2, r3, r5, r6, r8, lr}                                  |     __asm ("stmdaeq r0, {r2, r3, r5, r6, r8, lr}");
    0x08000d9c ldr r3, [r3, 8]                                                       |     r3 = *((r3 + 8));
    0x08000da0 ldr r3, [r3, r0, lsl 2]                                               |     offset_2 = r0 << 2;
                                                                                     |     r3 = *((r3 + offset_2));
    0x08000da4 cmp r3, 0                                                             |     
                                                                                     |     if (r3 == 0) {
    0x08000da8 beq 0x8000750                                                         |         goto label_9;
                                                                                     |     }
    0x08000dac subs sb, r3, 0x78                                                     |     sb = r3 - 0x78;
                                                                                     |     if (sb == r3) {
    0x08000db0 beq 0x8000750                                                         |         goto label_9;
                                                                                     |     }
    0x08000db4 add r6, sp, 0x38                                                      |     r6 += var_38h;
    0x08000db8 b 0x8000dd0                                                           |     
                                                                                     |     while (r2 != r3) {
                                                                                     | label_10:
    0x08000dbc ldr r3, [sb, 0x78]                                                    |         r3 = *((sb + 0x78));
    0x08000dc0 cmp r3, 0                                                             |         
                                                                                     |         if (r3 == 0) {
    0x08000dc4 beq 0x8000ef4                                                         |             goto label_46;
                                                                                     |         }
    0x08000dc8 subs sb, r3, 0x78                                                     |         sb = r3 - 0x78;
                                                                                     |         if (sb == r3) {
    0x08000dcc beq 0x8000ef4                                                         |             goto label_46;
                                                                                     |         }
    0x08000dd0 ldrb r2, [sb, 0x3a]                                                   |         r2 = *((sb + 0x3a));
    0x08000dd4 ldrb r3, [sp, 0x36]                                                   |         r3 = var_36h;
    0x08000dd8 cmp r2, r3                                                            |         
    0x08000ddc bne 0x8000dbc                                                         |         
                                                                                     |     }
    0x08000de0 ldr r2, [sb, 0x14]                                                    |     r2 = *((sb + 0x14));
    0x08000de4 ldr r3, [sp, 0x10]                                                    |     r3 = var_10h;
    0x08000de8 cmp r2, r3                                                            |     
                                                                                     |     if (r2 != r3) {
    0x08000dec bne 0x8000dbc                                                         |         goto label_10;
                                                                                     |     }
    0x08000df0 ldr r2, [sb, 0x18]                                                    |     r2 = *((sb + 0x18));
    0x08000df4 ldr r3, [sp, 0x14]                                                    |     r3 = var_14h;
    0x08000df8 cmp r2, r3                                                            |     
                                                                                     |     if (r2 != r3) {
    0x08000dfc bne 0x8000dbc                                                         |         goto label_10;
                                                                                     |     }
    0x08000e00 ldr r2, [sb, 0x1c]                                                    |     r2 = *((sb + 0x1c));
    0x08000e04 ldr r3, [sp, 0x18]                                                    |     r3 = var_18h;
    0x08000e08 cmp r2, r3                                                            |     
                                                                                     |     if (r2 != r3) {
    0x08000e0c bne 0x8000dbc                                                         |         goto label_10;
                                                                                     |     }
    0x08000e10 ldr r2, [sb, 0x20]                                                    |     r2 = *((sb + 0x20));
    0x08000e14 ldr r3, [sp, 0x1c]                                                    |     r3 = var_1ch;
    0x08000e18 cmp r2, r3                                                            |     
                                                                                     |     if (r2 != r3) {
    0x08000e1c bne 0x8000dbc                                                         |         goto label_10;
                                                                                     |     }
    0x08000e20 ldrh r2, [sb, 0x24]                                                   |     r2 = *((sb + 0x24));
    0x08000e24 ldrh r3, [sp, 0x20]                                                   |     r3 = var_20h;
    0x08000e28 cmp r2, r3                                                            |     
                                                                                     |     if (r2 != r3) {
    0x08000e2c bne 0x8000dbc                                                         |         goto label_10;
                                                                                     |     }
    0x08000e30 ldr r3, [sb, 0x74]                                                    |     r3 = *((sb + 0x74));
    0x08000e34 cmp r3, r8                                                            |     
                                                                                     |     if (r3 != r8) {
    0x08000e38 bne 0x8000dbc                                                         |         goto label_10;
                                                                                     |     }
    0x08000e3c ldrb r3, [r4, 0xb]                                                    |     r3 = *((r4 + 0xb));
    0x08000e40 ldrb r2, [sb, 0xb]                                                    |     r2 = *((sb + 0xb));
    0x08000e44 and r3, r3, 1                                                         |     r3 &= 1;
    0x08000e48 ands r2, r2, 1                                                        |     r2 &= 1;
                                                                                     |     if (r2 == r2) {
    0x08000e4c beq 0x8000fa0                                                         |         goto label_47;
                                                                                     |     }
    0x08000e50 ldrh r2, [sb, 8]                                                      |     r2 = *((sb + 8));
    0x08000e54 cmp r3, 0                                                             |     
                                                                                     |     if (r3 != 0) {
    0x08000e58 bne 0x8000fa8                                                         |         goto label_48;
                                                                                     |     }
                                                                                     | label_19:
    0x08000e5c cmp r3, r2                                                            |     
                                                                                     |     if (r3 != r2) {
    0x08000e60 bne 0x8000dbc                                                         |         goto label_10;
                                                                                     |     }
                                                                                     | label_18:
    0x08000e64 add r1, sb, 0x44                                                      |     r1 = sb + 0x44;
    0x08000e68 mov r0, r6                                                            |     r0 = r6;
    0x08000e6c stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}              |     __asm ("stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}");
    0x08000e70 add lr, sp, 0x24                                                      |     lr += var_24h;
    0x08000e74 add ip, sp, 0x4c                                                      |     
    0x08000e78 ldm lr!, {r0, r1, r2, r3}                                             |     r0 = *(lr!);
                                                                                     |     r1 = *((lr! + 4));
                                                                                     |     r2 = *((lr! + 8));
                                                                                     |     r3 = *((lr! + 12));
    0x08000e7c stm ip!, {r0, r1, r2, r3}                                             |     *(ip!) = r0;
                                                                                     |     *((ip! + 4)) = r1;
                                                                                     |     *((ip! + 8)) = r2;
                                                                                     |     *((ip! + 12)) = r3;
    0x08000e80 mov r1, r7                                                            |     r1 = r7;
    0x08000e84 mov r0, r6                                                            |     r0 = r6;
    0x08000e88 ldr r3, [lr]                                                          |     r3 = *(lr);
    0x08000e8c str r3, [ip]                                                          |     *(ip) = r3;
    0x08000e90 bl 0x8000170                                                          |     r0 = in_range ();
    0x08000e94 cmp r0, 0                                                             |     
                                                                                     |     if (r0 == 0) {
    0x08000e98 beq 0x8000dbc                                                         |         goto label_10;
                                                                                     |     }
    0x08000e9c add r8, sp, 0x60                                                      |     r8 += var_60h;
    0x08000ea0 mov r1, r6                                                            |     r1 = r6;
    0x08000ea4 mov r0, r8                                                            |     r0 = r8;
    0x08000ea8 stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}              |     __asm ("stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}");
    0x08000eac mov r1, r4                                                            |     r1 = r4;
    0x08000eb0 mov r0, r8                                                            |     r0 = r8;
    0x08000eb4 stmdaeq r0, {r0, r1, r2, r3, r4, r8, sb, sl, fp, ip, sp, lr}          |     __asm ("stmdaeq r0, {r0, r1, r2, r3, r4, r8, sb, sl, fp, ip, sp, lr}");
    0x08000eb8 cmp r0, 0                                                             |     
                                                                                     |     if (r0 != 0) {
    0x08000ebc bne 0x8000ef4                                                         |         goto label_46;
                                                                                     |     }
                                                                                     | label_20:
    0x08000ec0 ldr r2, [sp, 0x10]                                                    |     r2 = var_10h;
    0x08000ec4 ldr r3, [sp, 0x38]                                                    |     r3 = var_38h;
    0x08000ec8 cmp r2, r3                                                            |     
                                                                                     |     if (r2 == r3) {
    0x08000ecc beq 0x8000bb0                                                         |         goto label_11;
                                                                                     |     }
    0x08000ed0 mov r1, r6                                                            |     r1 = r6;
    0x08000ed4 mov r0, r8                                                            |     r0 = r8;
    0x08000ed8 stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}              |     __asm ("stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}");
    0x08000edc mov r1, r8                                                            |     r1 = r8;
    0x08000ee0 mov r0, r4                                                            |     r0 = r4;
    0x08000ee4 stmdaeq r0, {r0, r1, r5, r8, sb, sl, fp, ip, sp, lr}                  |     __asm ("stmdaeq r0, {r0, r1, r5, r8, sb, sl, fp, ip, sp, lr}");
                                                                                     | label_38:
    0x08000ee8 ldr r2, [r4, 0x6c]                                                    |     r2 = *((r4 + 0x6c));
    0x08000eec orr r2, r2, 0x10                                                      |     r2 |= 0x10;
    0x08000ef0 b 0x80008d4                                                           |     goto label_12;
                                                                                     | label_46:
    0x08000ef4 ldr ip, [r7]                                                          |     ip = *(r7);
    0x08000ef8 and r3, ip, 0x14                                                      |     r3 = ip & 0x14;
    0x08000efc str r3, [sp, 4]                                                       |     var_4h = r3;
    0x08000f00 b 0x8000760                                                           |     goto label_13;
                                                                                     | label_44:
    0x08000f04 stmdaeq r0, {r0, r1, r4, r5, r8, sb, sl, fp, ip, sp, lr}              |     __asm ("stmdaeq r0, {r0, r1, r4, r5, r8, sb, sl, fp, ip, sp, lr}");
    0x08000f08 uxth r7, r0                                                           |     r7 = (int16_t) r0;
    0x08000f0c b 0x8000d0c                                                           |     goto label_14;
                                                                                     | label_43:
    0x08000f10 add sl, sp, 0x48                                                      |     sl += var_48h;
    0x08000f14 mov sb, 0x80                                                          |     sb = 0x80;
    0x08000f18 mov r8, 0x10000                                                       |     r8 = 0x10000;
    0x08000f1c b 0x8000cec                                                           |     goto label_15;
                                                                                     | label_34:
    0x08000f20 add sl, sp, 0x48                                                      |     sl += var_48h;
    0x08000f24 cmp r2, 0                                                             |     
                                                                                     |     if (r2 == 0) {
    0x08000f28 beq 0x800084c                                                         |         goto label_16;
                                                                                     |     }
                                                                                     | label_17:
    0x08000f2c ldrh fp, [r7, 0x24]                                                   |     fp = *((r7 + 0x24));
    0x08000f30 ldrh r2, [r7, 0x26]                                                   |     r2 = *((r7 + 0x26));
    0x08000f34 rev16 fp, fp                                                          |     __asm ("rev16 fp, fp");
    0x08000f38 rev16 r2, r2                                                          |     __asm ("rev16 r2, r2");
    0x08000f3c uxth fp, fp                                                           |     fp = (int16_t) fp;
    0x08000f40 uxth r2, r2                                                           |     r2 = (int16_t) r2;
    0x08000f44 cmp fp, r2                                                            |     
                                                                                     |     if (fp <= r2) {
    0x08000f48 movhi r8, fp                                                          |         r8 = fp;
                                                                                     |     }
                                                                                     |     if (fp > r2) {
    0x08000f4c movls r8, r2                                                          |         r8 = r2;
                                                                                     |     }
                                                                                     |     if (fp <= r2) {
    0x08000f50 movhi fp, r2                                                          |         
                                                                                     |     }
    0x08000f54 add r8, r8, 1                                                         |     r8++;
    0x08000f58 sub r8, r8, fp                                                        |     r8 -= fp;
    0x08000f5c cmp r8, 0x80                                                          |     
                                                                                     |     if (r8 >= 0x80) {
    0x08000f60 movlo sb, r8                                                          |         sb = r8;
                                                                                     |     }
                                                                                     |     if (r8 < 0x80) {
    0x08000f64 movhs sb, 0x80                                                        |         sb = 0x80;
                                                                                     |     }
    0x08000f68 b 0x8000cec                                                           |     goto label_15;
                                                                                     | label_39:
    0x08000f6c mov r0, r4                                                            |     r0 = r4;
    0x08000f70 mov r2, 0xa20                                                         |     r2 = 0xa20;
    0x08000f74 mov r1, 2                                                             |     r1 = 2;
    0x08000f78 stmdaeq r0, {r0, r1, r3, r8, sb, sl, fp, ip, sp, lr}                  |     __asm ("stmdaeq r0, {r0, r1, r3, r8, sb, sl, fp, ip, sp, lr}");
    0x08000f7c cmp r0, 0                                                             |     
                                                                                     |     if (r0 != 0) {
    0x08000f80 bne 0x800090c                                                         |         goto label_5;
                                                                                     |     }
    0x08000f84 b 0x800093c                                                           |     goto label_3;
                                                                                     | label_35:
    0x08000f88 add sl, sp, 0x5c                                                      |     sl += var_5ch;
    0x08000f8c b 0x8000f2c                                                           |     goto label_17;
                                                                                     | label_37:
    0x08000f90 mov sb, 0x80                                                          |     sb = 0x80;
    0x08000f94 mov fp, 0x400                                                         |     
    0x08000f98 mov r8, 0xfc00                                                        |     r8 = 0xfc00;
    0x08000f9c b 0x8000cec                                                           |     goto label_15;
                                                                                     | label_47:
    0x08000fa0 cmp r3, 0                                                             |     
                                                                                     |     if (r3 == 0) {
    0x08000fa4 beq 0x8000e64                                                         |         goto label_18;
                                                                                     |     }
                                                                                     | label_48:
    0x08000fa8 ldrh r3, [r4, 8]                                                      |     r3 = *((r4 + 8));
    0x08000fac b 0x8000e5c                                                           |     goto label_19;
                                                                                     | label_29:
    0x08000fb0 add lr, sp, 0x10                                                      |     lr += var_10h;
    0x08000fb4 add r6, sp, 0x38                                                      |     r6 += var_38h;
    0x08000fb8 mov ip, r6                                                            |     
    0x08000fbc ldm lr!, {r0, r1, r2, r3}                                             |     r0 = *(lr!);
                                                                                     |     r1 = *((lr! + 4));
                                                                                     |     r2 = *((lr! + 8));
                                                                                     |     r3 = *((lr! + 12));
    0x08000fc0 stm ip!, {r0, r1, r2, r3}                                             |     *(ip!) = r0;
                                                                                     |     *((ip! + 4)) = r1;
                                                                                     |     *((ip! + 8)) = r2;
                                                                                     |     *((ip! + 12)) = r3;
    0x08000fc4 ldm lr!, {r0, r1, r2, r3}                                             |     r0 = *(lr!);
                                                                                     |     r1 = *((lr! + 4));
                                                                                     |     r2 = *((lr! + 8));
                                                                                     |     r3 = *((lr! + 12));
    0x08000fc8 stm ip!, {r0, r1, r2, r3}                                             |     *(ip!) = r0;
                                                                                     |     *((ip! + 4)) = r1;
                                                                                     |     *((ip! + 8)) = r2;
                                                                                     |     *((ip! + 12)) = r3;
    0x08000fcc ldm lr, {r0, r1}                                                      |     r0 = *(lr);
                                                                                     |     r1 = *((lr + 4));
    0x08000fd0 stm ip, {r0, r1}                                                      |     *(ip) = r0;
                                                                                     |     *((ip + 4)) = r1;
    0x08000fd4 b 0x8000ec0                                                           |     goto label_20;
                                                                                     | label_36:
    0x08000fd8 ldr r2, [sp, 0x38]                                                    |     r2 = var_38h;
    0x08000fdc ldr r3, [sp, 0x10]                                                    |     r3 = var_10h;
    0x08000fe0 cmp r2, r3                                                            |     
    0x08000fe4 beq 0x8001004                                                         |     
                                                                                     |     while (r2 != r3) {
                                                                                     | label_22:
    0x08000fe8 mov r1, r6                                                            |         r1 = r6;
    0x08000fec add r0, sp, 0x60                                                      |         r0 += var_60h;
    0x08000ff0 stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}              |         __asm ("stmdaeq r0, {r0, r1, r3, r4, r8, sb, sl, fp, ip, sp, lr}");
    0x08000ff4 mov r0, r4                                                            |         r0 = r4;
    0x08000ff8 add r1, sp, 0x60                                                      |         r1 += var_60h;
    0x08000ffc stmdaeq r0, {r0, r1, r5, r8, sb, sl, fp, ip, sp, lr}                  |         __asm ("stmdaeq r0, {r0, r1, r5, r8, sb, sl, fp, ip, sp, lr}");
    0x08001000 b 0x80008cc                                                           |         goto label_21;
    0x08001004 ldr r2, [sp, 0x14]                                                    |         r2 = var_14h;
    0x08001008 ldr r3, [sp, 0x3c]                                                    |         r3 = var_3ch;
    0x0800100c cmp r2, r3                                                            |         
    0x08001010 bne 0x8000fe8                                                         |         
                                                                                     |     }
    0x08001014 ldr r2, [sp, 0x18]                                                    |     r2 = var_18h;
    0x08001018 ldr r3, [sp, 0x40]                                                    |     r3 = var_40h;
    0x0800101c cmp r2, r3                                                            |     
                                                                                     |     if (r2 != r3) {
    0x08001020 bne 0x8000fe8                                                         |         goto label_22;
                                                                                     |     }
    0x08001024 b 0x8000bd0                                                           |     goto label_23;
                                                                                     | }

[*] Function strcat used 1 times nf_nat.ko