[*] Binary protection state of libxtables.so.12.2.0

  
  	Partial RELRO  No Canary found   NX disabled  DSO          No RPATH     No RUNPATH   No Symbols


[*] Function strcpy tear down of libxtables.so.12.2.0

    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libxtables.so.12.2.0 @ 0x4028 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) sym.xtables_compatible_revision ()       | void xtables_compatible_revision (int32_t arg1, int32_t arg2) {
                                                     |     int32_t var_0h;
                                                     |     int32_t var_ch;
                                                     |     char * dest;
                                                     |     int32_t var_2dh;
                                                     |     int32_t var_34h;
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
    0x00004028 push {r4, r5, r6, r7, r8, sb, lr}     |     
    0x0000402c ldr r5, [pc, 0x1b0]                   |     r5 = *(0x41e0);
    0x00004030 sub sp, sp, 0x34                      |     
    0x00004034 mov r3, 0x1e                          |     r3 = 0x1e;
    0x00004038 str r3, [sp, 0xc]                     |     var_ch = r3;
    0x0000403c ldr r3, [pc, 0x1a4]                   |     r3 = *(0x41e4);
    0x00004040 add r5, pc, r5                        |     r5 = pc + r5;
    0x00004044 ldr r7, [r5, r3]                      |     r7 = *(0x41e0);
    0x00004048 mov r8, r0                            |     r8 = r0;
    0x0000404c ldr r3, [r7]                          |     r3 = *(0x41e0);
    0x00004050 mov r6, r1                            |     r6 = r1;
    0x00004054 mov sb, r2                            |     sb = r2;
    0x00004058 mov r1, 3                             |     r1 = 3;
    0x0000405c mov r2, 0xff                          |     r2 = 0xff;
    0x00004060 ldrb r0, [r3, 0xc]                    |     r0 = *((r3 + 0xc));
    0x00004064 bl 0x2328                             |     r0 = socket (r0, r1, r2);
    0x00004068 subs r4, r0, 0                        |     r4 = r0 - 0;
                                                     |     if (r4 >= r0) {
    0x0000406c bge 0x40e4                            |         goto label_2;
                                                     |     }
    0x00004070 bl 0x25a4                             |     r0 = errno_location ();
    0x00004074 ldr r4, [r0]                          |     r4 = *(r0);
    0x00004078 cmp r4, 1                             |     
                                                     |     if (r4 == 1) {
    0x0000407c bne 0x40b4                            |         
    0x00004080 cmp r6, 0                             |         
                                                     |         if (r6 != 0) {
    0x00004084 beq 0x40a8                            |             
    0x00004088 ldr r3, [pc, 0x15c]                   |             r3 = *(0x41e8);
    0x0000408c ldr r1, [pc, 0x15c]                   |             r1 = *(0x41ec);
    0x00004090 ldr r0, [r5, r3]                      |             r0 = *((r5 + r3));
    0x00004094 mov r2, r8                            |             r2 = r8;
    0x00004098 mov r3, r6                            |             r3 = r6;
    0x0000409c add r1, pc, r1                        |             r1 = pc + r1;
    0x000040a0 ldr r0, [r0]                          |             r0 = *(r0);
    0x000040a4 bl 0x23e8                             |             fprintf (r0, r1, r2, r3);
                                                     |         }
                                                     | label_0:
    0x000040a8 mov r0, r4                            |         r0 = r4;
    0x000040ac add sp, sp, 0x34                      |         
    0x000040b0 pop {r4, r5, r6, r7, r8, sb, pc}      |         
                                                     |     }
    0x000040b4 ldr r3, [pc, 0x130]                   |     r3 = *(0x41e8);
    0x000040b8 mov r0, r4                            |     r0 = r4;
    0x000040bc ldr r3, [r5, r3]                      |     r3 = *((r5 + r3));
    0x000040c0 ldr r5, [r3]                          |     r5 = *(0x41e8);
    0x000040c4 bl 0x2214                             |     strerror (r0);
    0x000040c8 ldr r1, [pc, 0x124]                   |     r1 = *(0x41f0);
    0x000040cc add r1, pc, r1                        |     r1 = pc + r1;
    0x000040d0 mov r2, r0                            |     r2 = r0;
    0x000040d4 mov r0, r5                            |     r0 = r5;
                                                     |     do {
    0x000040d8 bl 0x23e8                             |         fprintf (r0, r1, r2);
    0x000040dc mov r0, 1                             |         r0 = 1;
    0x000040e0 bl 0x25b0                             |         exit (r0);
                                                     | label_2:
    0x000040e4 mov r2, 1                             |         r2 = 1;
    0x000040e8 mov r1, 2                             |         r1 = 2;
    0x000040ec bl 0x2298                             |         r0 = fcntl64 ();
    0x000040f0 cmn r0, 1                             |         
                                                     |         if (r0 != 1) {
    0x000040f4 bne 0x4124                            |             goto label_3;
                                                     |         }
    0x000040f8 ldr r3, [pc, 0xec]                    |         r3 = *(0x41e8);
    0x000040fc ldr r3, [r5, r3]                      |         r3 = *((r5 + r3));
    0x00004100 ldr r4, [r3]                          |         r4 = *(0x41e8);
    0x00004104 bl 0x25a4                             |         r0 = errno_location ();
    0x00004108 ldr r0, [r0]                          |         r0 = *(r0);
    0x0000410c bl 0x2214                             |         strerror (r0);
    0x00004110 ldr r1, [pc, 0xe0]                    |         r1 = *(0x41f4);
    0x00004114 add r1, pc, r1                        |         r1 = pc + r1;
    0x00004118 mov r2, r0                            |         r2 = r0;
                                                     | label_1:
    0x0000411c mov r0, r4                            |         r0 = r4;
    0x00004120 b 0x40d8                              |         
                                                     |     } while (1);
                                                     | label_3:
    0x00004124 ldr r3, [pc, 0xd0]                    |     r3 = *(0x41f8);
    0x00004128 mov r1, 1                             |     r1 = 1;
    0x0000412c ldr r3, [r5, r3]                      |     r3 = *((r5 + r3));
    0x00004130 ldr r0, [r3]                          |     r0 = *(0x41f8);
    0x00004134 bl 0x24c0                             |     fcn_000024c0 ();
    0x00004138 add r3, sp, 0x10                      |     r3 += dest;
    0x0000413c mov r1, r8                            |     r1 = r8;
    0x00004140 mov r0, r3                            |     r0 = r3;
    0x00004144 bl 0x21c0                             |     strcpy (r0, r1)
    0x00004148 ldr r2, [r7]                          |     r2 = *(r7);
    0x0000414c strb r6, [sp, 0x2d]                   |     var_2dh = r6;
    0x00004150 ldrb r1, [r2, 0xd]                    |     r1 = *((r2 + 0xd));
    0x00004154 add r2, sp, 0xc                       |     r2 += var_ch;
    0x00004158 str r2, [sp]                          |     *(sp) = r2;
    0x0000415c mov r2, sb                            |     r2 = sb;
    0x00004160 mov r3, r0                            |     r3 = r0;
    0x00004164 mov r0, r4                            |     r0 = r4;
    0x00004168 bl 0x2568                             |     r0 = getsockopt ();
    0x0000416c cmp r0, 0                             |     
                                                     |     if (r0 < 0) {
    0x00004170 bge 0x41d4                            |         
    0x00004174 bl 0x25a4                             |         r0 = errno_location ();
    0x00004178 ldr r0, [r0]                          |         r0 = *(r0);
    0x0000417c cmp r0, 0x5d                          |         
    0x00004180 cmpne r0, 2                           |         __asm ("cmpne r0, 2");
                                                     |         if (r0 == 0x5d) {
    0x00004184 bne 0x4198                            |             
    0x00004188 mov r0, r4                            |             r0 = r4;
    0x0000418c bl 0x264c                             |             close (r0);
    0x00004190 mov r4, 0                             |             r4 = 0;
    0x00004194 b 0x40a8                              |             goto label_0;
                                                     |         }
    0x00004198 cmp r0, 0x5c                          |         
                                                     |         if (r0 == 0x5c) {
    0x0000419c bne 0x41b4                            |             
    0x000041a0 mov r0, r4                            |             r0 = r4;
    0x000041a4 bl 0x264c                             |             close (r0);
    0x000041a8 clz r4, r6                            |             r4 &= r6;
    0x000041ac lsr r4, r4, 5                         |             r4 >>= 5;
    0x000041b0 b 0x40a8                              |             goto label_0;
                                                     |         }
    0x000041b4 ldr r3, [pc, 0x30]                    |         r3 = *(0x41e8);
    0x000041b8 ldr r3, [r5, r3]                      |         r3 = *((r5 + r3));
    0x000041bc ldr r4, [r3]                          |         r4 = *(0x41e8);
    0x000041c0 bl 0x2214                             |         strerror (r0);
    0x000041c4 ldr r1, [pc, 0x34]                    |         r1 = *(0x41fc);
    0x000041c8 add r1, pc, r1                        |         r1 = pc + r1;
    0x000041cc mov r2, r0                            |         r2 = r0;
    0x000041d0 b 0x411c                              |         goto label_1;
                                                     |     }
    0x000041d4 mov r0, r4                            |     r0 = r4;
    0x000041d8 bl 0x264c                             |     close (r0);
    0x000041dc mov r4, 1                             |     r4 = 1;
    0x000041e0 b 0x40a8                              |     goto label_0;
                                                     | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libxtables.so.12.2.0 @ 0x51f0 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) sym.xtables_ip6mask_to_numeric ()    | void xtables_ip6mask_to_numeric (int32_t arg1) {
                                                 |     r0 = arg1;
    0x000051f0 push {r4, r5, r6, lr}             |     
    0x000051f4 mov r5, r0                        |     r5 = r0;
    0x000051f8 bl 0x2208                         |     r0 = fcn_00002208 ();
    0x000051fc cmn r0, 1                         |     
                                                 |     if (r0 != 1) {
    0x00005200 bne 0x5240                        |         goto label_0;
                                                 |     }
    0x00005204 ldr r4, [pc, 0x70]                |     
    0x00005208 ldr r1, [pc, 0x70]                |     r1 = *(0x527c);
    0x0000520c add r4, pc, r4                    |     r4 = pc + r4;
    0x00005210 add r4, r4, 0x870                 |     r4 = 0x5ae8;
    0x00005214 add r4, r4, 4                     |     r4 += 4;
    0x00005218 add r1, pc, r1                    |     r1 = pc + r1;
    0x0000521c mov r0, r4                        |     r0 = r4;
    0x00005220 bl 0x21c0                         |     strcpy (r0, r1)
    0x00005224 mov r0, r5                        |     r0 = r5;
    0x00005228 bl 0x231c                         |     r0 = fcn_0000231c ();
    0x0000522c mov r1, r0                        |     r1 = r0;
    0x00005230 mov r0, r4                        |     r0 = r4;
    0x00005234 bl 0x23f4                         |     strcat (r0, r1);
                                                 |     do {
    0x00005238 mov r0, r4                        |         r0 = r4;
    0x0000523c pop {r4, r5, r6, pc}              |         
                                                 | label_0:
    0x00005240 cmp r0, 0x80                      |         
    0x00005244 mov r2, r0                        |         r2 = r0;
                                                 |         if (r0 == 0x80) {
    0x00005248 beq 0x5270                        |             goto label_1;
                                                 |         }
    0x0000524c ldr r4, [pc, 0x30]                |         
    0x00005250 ldr r1, [pc, 0x30]                |         r1 = *(0x5284);
    0x00005254 add r4, pc, r4                    |         r4 = pc + r4;
    0x00005258 add r4, r4, 0x870                 |         r4 = 0x5af0;
    0x0000525c add r4, r4, 4                     |         r4 += 4;
    0x00005260 add r1, pc, r1                    |         r1 = pc + r1;
    0x00005264 mov r0, r4                        |         r0 = r4;
    0x00005268 bl 0x2538                         |         sprintf (r0, r1, r2);
    0x0000526c b 0x5238                          |         
                                                 |     } while (1);
                                                 | label_1:
    0x00005270 ldr r0, [pc, 0x14]                |     r0 = *(0x5288);
    0x00005274 add r0, pc, r0                    |     r0 = pc + r0;
    0x00005278 pop {r4, r5, r6, pc}              |     
                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libxtables.so.12.2.0 @ 0x5808 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) sym.xtables_ip6parse_any ()                  | void xtables_ip6parse_any (int32_t arg2, char * src) {
                                                         |     char * dest;
                                                         |     void * s2;
                                                         |     int32_t var_4h;
                                                         |     int32_t var_8h;
                                                         |     int32_t var_ch;
                                                         |     int32_t var_ffh;
                                                         |     int32_t var_100h;
                                                         |     r1 = arg2;
                                                         |     r0 = src;
    0x00005808 push {r4, r5, r6, r7, r8, sb, sl, lr}     |     
    0x0000580c sub sp, sp, 0x100                         |     
    0x00005810 mov r4, sp                                |     r4 = sp;
    0x00005814 mov r7, r2                                |     r7 = r2;
    0x00005818 mov r8, r1                                |     r8 = r1;
    0x0000581c mov r2, 0xff                              |     r2 = 0xff;
    0x00005820 mov r1, r0                                |     r1 = r0;
    0x00005824 mov r0, r4                                |     r0 = r4;
    0x00005828 mov r6, r3                                |     r6 = r3;
    0x0000582c mov r5, 0                                 |     r5 = 0;
    0x00005830 bl 0x2448                                 |     strncpy (r0, r1, r2);
    0x00005834 mov r1, 0x2f                              |     r1 = 0x2f;
    0x00005838 mov r0, r4                                |     r0 = r4;
    0x0000583c strb r5, [sp, 0xff]                       |     var_ffh = r5;
    0x00005840 bl 0x23ac                                 |     strrchr (r0, r1);
    0x00005844 subs r3, r0, 0                            |     r3 -= dest;
                                                         |     if (r3 == dest) {
    0x00005848 movne r0, r3                              |         r0 = r3;
                                                         |     }
                                                         |     if (r3 == dest) {
    0x0000584c strbne r5, [r0], 1                        |         *(r0) = r5;
                                                         |         r0++;
                                                         |     }
    0x00005850 bl 0x52c8                                 |     fcn_000052c8 (r0);
    0x00005854 mov r2, 0x10                              |     r2 = 0x10;
    0x00005858 mov r1, r0                                |     r1 = r0;
    0x0000585c mov r0, r7                                |     r0 = r7;
    0x00005860 bl 0x22a4                                 |     memcpy (r0, r1, r2);
    0x00005864 ldr r1, [pc, 0x10c]                       |     
    0x00005868 mov r2, 0x10                              |     r2 = 0x10;
    0x0000586c add r1, pc, r1                            |     r1 = pc + r1;
    0x00005870 add r1, r1, 0x8d0                         |     r1 = 0x6244;
    0x00005874 add r1, r1, 8                             |     r1 += 8;
    0x00005878 mov r0, r7                                |     r0 = r7;
    0x0000587c bl 0x2484                                 |     r0 = memcmp (r0, r1, r2);
    0x00005880 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00005884 bne 0x5898                                |         
    0x00005888 ldr r1, [pc, 0xec]                        |         r1 = *(0x5978);
    0x0000588c mov r0, r4                                |         r0 = r4;
    0x00005890 add r1, pc, r1                            |         r1 = pc + r1;
    0x00005894 bl 0x21c0                                 |         strcpy (r0, r1)
                                                         |     }
    0x00005898 mov r0, r4                                |     r0 = r4;
    0x0000589c mov r1, r6                                |     r1 = r6;
    0x000058a0 bl 0x541c                                 |     fcn_0000541c (r0, r1);
    0x000058a4 ldr sb, [r6]                              |     sb = *(r6);
    0x000058a8 mov r4, 0                                 |     r4 = 0;
    0x000058ac str r0, [r8]                              |     *(r8) = r0;
    0x000058b0 mov r5, r0                                |     r5 = r0;
    0x000058b4 mov r8, r4                                |     r8 = r4;
                                                         | label_0:
    0x000058b8 cmp r8, sb                                |     
                                                         |     if (r8 == sb) {
    0x000058bc bne 0x58c8                                |         
    0x000058c0 add sp, sp, 0x100                         |         
    0x000058c4 pop {r4, r5, r6, r7, r8, sb, sl, pc}      |         
                                                         |     }
    0x000058c8 add r0, r5, r4, lsl 4                     |     r0 = r5 + (r4 << 4);
    0x000058cc sub r3, r0, 4                             |     r3 = r0 - 4;
    0x000058d0 sub r1, r7, 4                             |     r1 = r7 - 4;
    0x000058d4 add ip, r0, 0xc                           |     
                                                         |     do {
    0x000058d8 ldr r2, [r3, 4]!                          |         r2 = dest;
    0x000058dc ldr lr, [r1, 4]!                          |         
    0x000058e0 cmp r3, ip                                |         
    0x000058e4 and r2, r2, lr                            |         r2 &= lr;
    0x000058e8 str r2, [r3]                              |         *(r3) = r2;
    0x000058ec bne 0x58d8                                |         
                                                         |     } while (r3 != ip);
    0x000058f0 add ip, r4, 1                             |     
    0x000058f4 add r2, r5, r4, lsl 4                     |     r2 = r5 + (r4 << 4);
    0x000058f8 mov r3, 0                                 |     r3 = 0;
                                                         |     do {
    0x000058fc cmp r4, r3                                |         
                                                         |         if (r4 != r3) {
    0x00005900 beq 0x5964                                |             
    0x00005904 ldr lr, [r5, r3, lsl 4]                   |             
    0x00005908 ldr r1, [r2]                              |             r1 = *(r2);
    0x0000590c cmp lr, r1                                |             
                                                         |             if (lr != r1) {
    0x00005910 bne 0x5970                                |                 goto label_1;
                                                         |             }
    0x00005914 add r1, r5, r3, lsl 4                     |             r1 = r5 + (r3 << 4);
    0x00005918 ldr sl, [r1, 4]                           |             sl = var_4h;
    0x0000591c ldr lr, [r2, 4]                           |             lr = var_4h;
    0x00005920 cmp sl, lr                                |             
                                                         |             if (sl != lr) {
    0x00005924 bne 0x5970                                |                 goto label_1;
                                                         |             }
    0x00005928 ldr sl, [r1, 8]                           |             sl = var_8h;
    0x0000592c ldr lr, [r2, 8]                           |             lr = var_8h;
    0x00005930 cmp sl, lr                                |             
                                                         |             if (sl != lr) {
    0x00005934 bne 0x5970                                |                 goto label_1;
                                                         |             }
    0x00005938 ldr lr, [r1, 0xc]                         |             lr = var_ch;
    0x0000593c ldr r1, [r2, 0xc]                         |             r1 = var_ch;
    0x00005940 cmp lr, r1                                |             
                                                         |             if (lr != r1) {
    0x00005944 bne 0x5970                                |                 goto label_1;
                                                         |             }
    0x00005948 ldr r1, [r6]                              |             r1 = *(r6);
    0x0000594c mov r2, 4                                 |             r2 = 4;
    0x00005950 sub r1, r1, 1                             |             r1--;
    0x00005954 str r1, [r6]                              |             *(r6) = r1;
    0x00005958 add r1, r5, r1, lsl r2                    |             r1 = r5 + (r1 << r2);
    0x0000595c bl 0x22a4                                 |             memcpy (r0, r1, r2);
    0x00005960 mov ip, r4                                |             
                                                         |         }
    0x00005964 add r8, r8, 1                             |         r8++;
    0x00005968 mov r4, ip                                |         r4 = ip;
    0x0000596c b 0x58b8                                  |         goto label_0;
                                                         | label_1:
    0x00005970 add r3, r3, 1                             |         r3++;
    0x00005974 b 0x58fc                                  |         
                                                         |     } while (1);
                                                         | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libxtables.so.12.2.0 @ 0x551c */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) sym.xtables_ip6parse_multiple ()                 | void xtables_ip6parse_multiple (int32_t arg_1h, int32_t arg1, int32_t arg2) {
                                                             |     void * var_4h;
                                                             |     int32_t var_8h;
                                                             |     int32_t var_ch;
                                                             |     int32_t var_14h;
                                                             |     char * dest;
                                                             |     void * s2;
                                                             |     int32_t var_118h;
                                                             |     int32_t var_11ch;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x0000551c push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00005520 ldr sl, [pc, 0x2c8]                           |     sl = *(0x000057f0);
    0x00005524 sub sp, sp, 0x11c                             |     
    0x00005528 mov r5, r0                                    |     r5 = r0;
    0x0000552c mov r8, r1                                    |     r8 = r1;
    0x00005530 mov r7, r2                                    |     r7 = r2;
    0x00005534 mov r6, 1                                     |     r6 = 1;
    0x00005538 add sl, pc, sl                                |     sl = pc + sl;
    0x0000553c str r3, [sp, 8]                               |     var_8h = r3;
                                                             |     do {
    0x00005540 mov r1, 0x2c                                  |         r1 = 0x2c;
    0x00005544 bl 0x2628                                     |         r0 = strchr (r0, r1);
    0x00005548 subs r4, r0, 0                                |         r4 = r0 - 0;
                                                             |         if (r4 == r0) {
    0x0000554c bne 0x5598                                    |             
    0x00005550 lsl sb, r6, 4                                 |             sb = r6 << 4;
    0x00005554 mov r0, sb                                    |             r0 = sb;
    0x00005558 bl 0x2400                                     |             fcn_00002400 ();
    0x0000555c str r0, [r8]                                  |             *(r8) = r0;
    0x00005560 mov r0, sb                                    |             r0 = sb;
    0x00005564 bl 0x2400                                     |             fcn_00002400 ();
    0x00005568 ldr r3, [pc, 0x284]                           |             
    0x0000556c add r3, pc, r3                                |             r3 = pc + r3;
    0x00005570 add r3, r3, 0x8c0                             |             r3 = 0x60b0;
    0x00005574 add r3, r3, 8                                 |             r3 += 8;
    0x00005578 str r3, [sp, 4]                               |             var_4h = r3;
    0x0000557c str r0, [r7]                                  |             *(r7) = r0;
                                                             | label_0:
    0x00005580 cmp r4, r6                                    |             
                                                             |             if (r4 >= r6) {
    0x00005584 bhs 0x5794                                    |                 goto label_4;
                                                             |             }
    0x00005588 ldr r3, [pc, 0x268]                           |             r3 = *(0x57f4);
    0x0000558c ldr r3, [sl, r3]                              |             r3 = *((sl + r3));
    0x00005590 ldr r2, [r3]                                  |             r2 = *(0x57f4);
    0x00005594 b 0x55a8                                      |             goto label_5;
                                                             |         }
    0x00005598 add r6, r6, 1                                 |         r6++;
    0x0000559c add r0, r4, 1                                 |         r0 = r4 + 1;
    0x000055a0 b 0x5540                                      |         
                                                             |     } while (1);
                                                             |     do {
    0x000055a4 mov r5, r1                                    |         r5 = r1;
                                                             | label_5:
    0x000055a8 ldrb r3, [r5]                                 |         r3 = *(r5);
    0x000055ac add r1, r5, 1                                 |         r1 = r5 + 1;
    0x000055b0 lsl r3, r3, 1                                 |         r3 <<= 1;
    0x000055b4 ldrh r3, [r2, r3]                             |         r3 = *((r2 + r3));
    0x000055b8 tst r3, 0x20                                  |         
    0x000055bc bne 0x55a4                                    |         
                                                             |     } while ((r3 & 0x20) != 0);
    0x000055c0 mov r1, 0x2c                                  |     r1 = 0x2c;
    0x000055c4 mov r0, r5                                    |     r0 = r5;
    0x000055c8 bl 0x2628                                     |     r0 = strchr (r0, r1);
    0x000055cc subs fp, r0, 0                                |     
                                                             |     if (fp == r0) {
    0x000055d0 subne r3, fp, r5                              |         r3 = fp - r5;
                                                             |     }
                                                             |     if (fp == r0) {
    0x000055d4 bne 0x55e4                                    |         
    0x000055d8 mov r0, r5                                    |         r0 = r5;
    0x000055dc bl 0x2610                                     |         r0 = strlen (r0);
    0x000055e0 mov r3, r0                                    |         r3 = r0;
                                                             |     }
    0x000055e4 cmp r3, 0xff                                  |     
                                                             |     if (r3 >= 0xff) {
    0x000055e8 bls 0x560c                                    |         
    0x000055ec ldr r3, [pc, 0x208]                           |         
    0x000055f0 ldr r1, [pc, 0x208]                           |         r1 = *(0x57fc);
    0x000055f4 ldr r3, [sl, r3]                              |         r3 = *((sl + r3));
    0x000055f8 add r1, pc, r1                                |         r1 = pc + r1;
    0x000055fc ldr r3, [r3]                                  |         
    0x00005600 mov r0, 2                                     |         r0 = 2;
    0x00005604 ldr r3, [r3, 0x14]                            |         r3 = *(0x580c);
    0x00005608 blx r3                                        |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
                                                             |     }
    0x0000560c add sb, sp, 0x18                              |     sb += dest;
    0x00005610 mov r2, r3                                    |     r2 = r3;
    0x00005614 mov r1, r5                                    |     r1 = r5;
    0x00005618 mov r0, sb                                    |     r0 = sb;
    0x0000561c str r3, [sp, 0xc]                             |     var_ch = r3;
    0x00005620 bl 0x2448                                     |     strncpy (r0, r1, r2);
    0x00005624 ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x00005628 add r2, sp, 0x118                             |     r2 += var_118h;
    0x0000562c add r3, r2, r3                                |     r3 = r2 + r3;
    0x00005630 mov r5, 0                                     |     r5 = 0;
    0x00005634 mov r1, 0x2f                                  |     r1 = 0x2f;
    0x00005638 mov r0, sb                                    |     r0 = sb;
    0x0000563c strb r5, [r3, -0x100]                         |     dest = r5;
    0x00005640 bl 0x23ac                                     |     strrchr (r0, r1);
    0x00005644 subs r3, r0, 0                                |     r3 -= dest;
                                                             |     if (r3 == dest) {
    0x00005648 movne r0, r3                                  |         r0 = r3;
                                                             |     }
                                                             |     if (r3 == dest) {
    0x0000564c strbne r5, [r0], 1                            |         *(r0) = r5;
                                                             |         r0++;
                                                             |     }
    0x00005650 bl 0x52c8                                     |     fcn_000052c8 (r0);
    0x00005654 ldr r3, [r7]                                  |     r3 = *(r7);
    0x00005658 lsl r5, r4, 4                                 |     r5 = r4 << 4;
    0x0000565c mov r2, 0x10                                  |     r2 = 0x10;
    0x00005660 mov r1, r0                                    |     r1 = r0;
    0x00005664 add r0, r3, r5                                |     r0 = r3 + r5;
    0x00005668 bl 0x22a4                                     |     memcpy (r0, r1, r2);
    0x0000566c ldr r0, [r7]                                  |     r0 = *(r7);
    0x00005670 mov r2, 0x10                                  |     r2 = 0x10;
    0x00005674 ldr r1, [sp, 4]                               |     r1 = var_4h;
    0x00005678 add r0, r0, r5                                |     r0 += r5;
    0x0000567c bl 0x2484                                     |     r0 = memcmp (r0, r1, r2);
    0x00005680 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00005684 bne 0x5698                                    |         
    0x00005688 ldr r1, [pc, 0x174]                           |         r1 = *(0x5800);
    0x0000568c mov r0, sb                                    |         r0 = sb;
    0x00005690 add r1, pc, r1                                |         r1 = pc + r1;
    0x00005694 bl 0x21c0                                     |         strcpy (r0, r1)
                                                             |     }
    0x00005698 mov r0, sb                                    |     r0 = sb;
    0x0000569c add r1, sp, 0x14                              |     r1 += var_14h;
    0x000056a0 bl 0x541c                                     |     fcn_0000541c (r0, r1);
    0x000056a4 ldr r3, [sp, 0x14]                            |     r3 = var_14h;
    0x000056a8 cmp r3, 1                                     |     
    0x000056ac mov sb, r0                                    |     sb = r0;
                                                             |     if (r3 < 1) {
    0x000056b0 bls 0x577c                                    |         goto label_6;
                                                             |     }
    0x000056b4 sub r3, r3, 1                                 |     r3--;
    0x000056b8 add r6, r6, r3                                |     r6 += r3;
    0x000056bc lsl r3, r6, 4                                 |     r3 = r6 << 4;
    0x000056c0 mov r1, r3                                    |     r1 = r3;
    0x000056c4 ldr r0, [r8]                                  |     r0 = *(r8);
    0x000056c8 str r3, [sp, 0xc]                             |     var_ch = r3;
    0x000056cc bl 0x25ec                                     |     fcn_000025ec ();
    0x000056d0 ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x000056d4 mov r1, r3                                    |     r1 = r3;
    0x000056d8 str r0, [r8]                                  |     *(r8) = r0;
    0x000056dc ldr r0, [r7]                                  |     r0 = *(r7);
    0x000056e0 bl 0x25ec                                     |     fcn_000025ec ();
    0x000056e4 mov r3, 0                                     |     r3 = 0;
    0x000056e8 str r0, [r7]                                  |     *(r7) = r0;
                                                             |     do {
    0x000056ec ldr r2, [sp, 0x14]                            |         r2 = var_14h;
    0x000056f0 cmp r2, r3                                    |         
                                                             |         if (r2 <= r3) {
    0x000056f4 bhi 0x572c                                    |             
    0x000056f8 mov r3, 1                                     |             r3 = 1;
                                                             | label_1:
    0x000056fc ldr r2, [sp, 0x14]                            |             r2 = var_14h;
    0x00005700 cmp r2, r3                                    |             
                                                             |             if (r2 > r3) {
    0x00005704 bhi 0x5754                                    |                 goto label_7;
                                                             |             }
    0x00005708 sub r4, r4, 1                                 |             r4--;
    0x0000570c add r4, r2, r4                                |             r4 = r2 + r4;
                                                             | label_2:
    0x00005710 mov r0, sb                                    |             r0 = sb;
    0x00005714 bl 0x2688                                     |             free (r0);
    0x00005718 cmp fp, 0                                     |             
                                                             |             if (fp == 0) {
    0x0000571c beq 0x5794                                    |                 goto label_4;
                                                             |             }
    0x00005720 add r5, fp, 1                                 |             r5 += arg_1h;
    0x00005724 add r4, r4, 1                                 |             r4++;
    0x00005728 b 0x5580                                      |             goto label_0;
                                                             |         }
    0x0000572c ldr r0, [r8]                                  |         r0 = *(r8);
    0x00005730 add ip, r4, r3                                |         
    0x00005734 add r1, sb, r3, lsl 4                         |         r1 = sb + (r3 << 4);
    0x00005738 mov r2, 0x10                                  |         r2 = 0x10;
    0x0000573c add r0, r0, ip, lsl 4                         |         r0 += (ip << 4);
    0x00005740 str r3, [sp, 0xc]                             |         var_ch = r3;
    0x00005744 bl 0x22a4                                     |         memcpy (r0, r1, r2);
    0x00005748 ldr r3, [sp, 0xc]                             |         r3 = var_ch;
    0x0000574c add r3, r3, 1                                 |         r3++;
    0x00005750 b 0x56ec                                      |         
                                                             |     } while (1);
                                                             | label_7:
    0x00005754 ldr r0, [r7]                                  |     r0 = *(r7);
    0x00005758 add ip, r4, r3                                |     
    0x0000575c add r1, r0, r5                                |     r1 = r0 + r5;
    0x00005760 mov r2, 0x10                                  |     r2 = 0x10;
    0x00005764 add r0, r0, ip, lsl 4                         |     r0 += (ip << 4);
    0x00005768 str r3, [sp, 0xc]                             |     var_ch = r3;
    0x0000576c bl 0x22a4                                     |     memcpy (r0, r1, r2);
    0x00005770 ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x00005774 add r3, r3, 1                                 |     r3++;
    0x00005778 b 0x56fc                                      |     goto label_1;
                                                             | label_6:
    0x0000577c ldr r0, [r8]                                  |     r0 = *(r8);
    0x00005780 mov r2, 0x10                                  |     r2 = 0x10;
    0x00005784 mov r1, sb                                    |     r1 = sb;
    0x00005788 add r0, r0, r5                                |     r0 += r5;
    0x0000578c bl 0x22a4                                     |     memcpy (r0, r1, r2);
    0x00005790 b 0x5710                                      |     goto label_2;
                                                             | label_4:
    0x00005794 ldr r3, [sp, 8]                               |     r3 = var_8h;
    0x00005798 mov r1, 0                                     |     r1 = 0;
    0x0000579c str r6, [r3]                                  |     *(r3) = r6;
                                                             | label_3:
    0x000057a0 cmp r1, r6                                    |     
                                                             |     if (r1 == r6) {
    0x000057a4 bne 0x57b0                                    |         
    0x000057a8 add sp, sp, 0x11c                             |         
    0x000057ac pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |         
                                                             |     }
    0x000057b0 ldr r3, [r8]                                  |     r3 = *(r8);
    0x000057b4 ldr ip, [r7]                                  |     ip = *(r7);
    0x000057b8 lsl r2, r1, 4                                 |     r2 = r1 << 4;
    0x000057bc add r3, r3, r2                                |     r3 += r2;
    0x000057c0 sub r2, r2, 4                                 |     r2 -= 4;
    0x000057c4 sub r0, r3, 4                                 |     r0 = r3 - 4;
    0x000057c8 add r2, ip, r2                                |     r2 = ip + r2;
    0x000057cc add r3, r3, 0xc                               |     r3 += 0xc;
                                                             |     do {
    0x000057d0 ldr ip, [r0, 4]!                              |         ip = *((r0 += 4));
    0x000057d4 ldr lr, [r2, 4]!                              |         
    0x000057d8 cmp r3, r0                                    |         
    0x000057dc and ip, ip, lr                                |         
    0x000057e0 str ip, [r0]                                  |         *(r0) = ip;
    0x000057e4 bne 0x57d0                                    |         
                                                             |     } while (r3 != r0);
    0x000057e8 add r1, r1, 1                                 |     r1++;
    0x000057ec b 0x57a0                                      |     goto label_3;
                                                             | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libxtables.so.12.2.0 @ 0x4fa0 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) sym.xtables_ipparse_any ()               | void xtables_ipparse_any (int32_t arg2, char * src) {
                                                     |     char * dest;
                                                     |     int32_t var_0h_2;
                                                     |     int32_t var_ffh;
                                                     |     int32_t var_104h;
                                                     |     r1 = arg2;
                                                     |     r0 = src;
    0x00004fa0 push {r4, r5, r6, r7, r8, sb, lr}     |     
    0x00004fa4 sub sp, sp, 0x104                     |     
    0x00004fa8 mov r5, sp                            |     r5 = sp;
    0x00004fac mov r4, r1                            |     r4 = r1;
    0x00004fb0 mov r7, r2                            |     r7 = r2;
    0x00004fb4 mov r1, r0                            |     r1 = r0;
    0x00004fb8 mov r2, 0xff                          |     r2 = 0xff;
    0x00004fbc mov r0, r5                            |     r0 = r5;
    0x00004fc0 mov r6, r3                            |     r6 = r3;
    0x00004fc4 mov r8, 0                             |     r8 = 0;
    0x00004fc8 bl 0x2448                             |     strncpy (r0, r1, r2);
    0x00004fcc mov r1, 0x2f                          |     r1 = 0x2f;
    0x00004fd0 mov r0, r5                            |     r0 = r5;
    0x00004fd4 strb r8, [sp, 0xff]                   |     var_ffh = r8;
    0x00004fd8 bl 0x23ac                             |     r0 = strrchr (r0, r1);
    0x00004fdc cmp r0, 0                             |     
                                                     |     if (r0 == 0) {
    0x00004fe0 beq 0x5048                            |         goto label_1;
                                                     |     }
    0x00004fe4 strb r8, [r0], 1                      |     *(r0) = r8;
                                                     |     r0++;
    0x00004fe8 bl 0x4be4                             |     r0 = fcn_00004be4 (r0);
    0x00004fec mov r1, r0                            |     r1 = r0;
                                                     |     do {
    0x00004ff0 mov r2, 4                             |         r2 = 4;
    0x00004ff4 mov r0, r7                            |         r0 = r7;
    0x00004ff8 bl 0x22a4                             |         memcpy (r0, r1, r2);
    0x00004ffc ldr r3, [r7]                          |         r3 = *(r7);
    0x00005000 cmp r3, 0                             |         
                                                     |         if (r3 == 0) {
    0x00005004 bne 0x5018                            |             
    0x00005008 ldr r1, [pc, 0xb4]                    |             r1 = *(0x50c0);
    0x0000500c mov r0, r5                            |             r0 = r5;
    0x00005010 add r1, pc, r1                        |             r1 = pc + r1;
    0x00005014 bl 0x21c0                             |             strcpy (r0, r1)
                                                     |         }
    0x00005018 mov r0, r5                            |         r0 = r5;
    0x0000501c mov r1, r6                            |         r1 = r6;
    0x00005020 bl 0x4aa0                             |         fcn_00004aa0 (r0, r1);
    0x00005024 ldr sb, [r6]                          |         sb = *(r6);
    0x00005028 str r0, [r4]                          |         *(r4) = r0;
    0x0000502c mov r4, 0                             |         r4 = 0;
    0x00005030 mov r5, r0                            |         r5 = r0;
    0x00005034 mov r8, r4                            |         r8 = r4;
                                                     | label_0:
    0x00005038 cmp r8, sb                            |         
                                                     |         if (r8 != sb) {
    0x0000503c bne 0x5064                            |             goto label_2;
                                                     |         }
    0x00005040 add sp, sp, 0x104                     |         
    0x00005044 pop {r4, r5, r6, r7, r8, sb, pc}      |         
                                                     | label_1:
    0x00005048 ldr r1, [pc, 0x78]                    |         
    0x0000504c mvn r3, 0                             |         r3 = ~0;
    0x00005050 add r1, pc, r1                        |         r1 = pc + r1;
    0x00005054 str r3, [r1, 0x43c]                   |         *((r1 + 0x43c)) = r3;
    0x00005058 add r1, r1, 0x430                     |         
    0x0000505c add r1, r1, 0xc                       |         r1 = 0x5500;
    0x00005060 b 0x4ff0                              |         
                                                     |     } while (1);
                                                     | label_2:
    0x00005064 ldr r2, [r7]                          |     r2 = *(r7);
    0x00005068 ldr r3, [r5, r4, lsl 2]               |     offset_0 = r4 << 2;
                                                     |     r3 = *((r5 + offset_0));
    0x0000506c add r0, r5, r4, lsl 2                 |     r0 = r5 + (r4 << 2);
    0x00005070 and r3, r3, r2                        |     r3 &= r2;
    0x00005074 str r3, [r5, r4, lsl 2]               |     offset_1 = r4 << 2;
                                                     |     *((r5 + offset_1)) = r3;
    0x00005078 mov r2, r0                            |     r2 = r0;
    0x0000507c mov r3, 0                             |     r3 = 0;
                                                     |     do {
    0x00005080 cmp r4, r3                            |         
                                                     |         if (r4 != r3) {
    0x00005084 addeq r4, r4, 1                       |             r4++;
                                                     |         }
                                                     |         if (r4 != r3) {
    0x00005088 beq 0x50b4                            |             
    0x0000508c ldr ip, [r5, r3, lsl 2]               |             offset_2 = r3 << 2;
                                                     |             ip = *((r5 + offset_2));
    0x00005090 ldr r1, [r2]                          |             r1 = *(r2);
    0x00005094 cmp ip, r1                            |             
                                                     |             if (ip != r1) {
    0x00005098 bne 0x50bc                            |                 goto label_3;
                                                     |             }
    0x0000509c ldr r1, [r6]                          |             r1 = *(r6);
    0x000050a0 mov r2, 4                             |             r2 = 4;
    0x000050a4 sub r1, r1, 1                         |             r1--;
    0x000050a8 str r1, [r6]                          |             *(r6) = r1;
    0x000050ac add r1, r5, r1, lsl 2                 |             r1 = r5 + (r1 << 2);
    0x000050b0 bl 0x22a4                             |             memcpy (r0, r1, r2);
                                                     |         }
    0x000050b4 add r8, r8, 1                         |         r8++;
    0x000050b8 b 0x5038                              |         goto label_0;
                                                     | label_3:
    0x000050bc add r3, r3, 1                         |         r3++;
    0x000050c0 b 0x5080                              |         
                                                     |     } while (1);
                                                     | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libxtables.so.12.2.0 @ 0x4cc8 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) sym.xtables_ipparse_multiple ()                  | void xtables_ipparse_multiple (int32_t arg_0h, 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_14h;
                                                             |     char * dest;
                                                             |     int32_t var_0h_2;
                                                             |     int32_t var_118h;
                                                             |     int32_t var_11ch;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00004cc8 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00004ccc ldr fp, [pc, 0x2b4]                           |     fp = *(0x00004f88);
    0x00004cd0 sub sp, sp, 0x11c                             |     
    0x00004cd4 mov r7, r0                                    |     r7 = r0;
    0x00004cd8 mov sb, r1                                    |     sb = r1;
    0x00004cdc mov r6, r2                                    |     r6 = r2;
    0x00004ce0 mov r5, 1                                     |     r5 = 1;
    0x00004ce4 add fp, pc, fp                                |     
    0x00004ce8 str r3, [sp, 8]                               |     var_8h = r3;
                                                             |     do {
    0x00004cec mov r1, 0x2c                                  |         r1 = 0x2c;
    0x00004cf0 bl 0x2628                                     |         r0 = strchr (r0, r1);
    0x00004cf4 subs r4, r0, 0                                |         r4 = r0 - 0;
                                                             |         if (r4 == r0) {
    0x00004cf8 bne 0x4d48                                    |             
    0x00004cfc lsl r8, r5, 2                                 |             r8 = r5 << 2;
    0x00004d00 mov r0, r8                                    |             r0 = r8;
    0x00004d04 bl 0x2400                                     |             fcn_00002400 ();
    0x00004d08 str r0, [sb]                                  |             *(sb) = r0;
    0x00004d0c mov r0, r8                                    |             r0 = r8;
    0x00004d10 bl 0x2400                                     |             fcn_00002400 ();
    0x00004d14 ldr r3, [pc, 0x270]                           |             
    0x00004d18 add r3, pc, r3                                |             r3 = pc + r3;
    0x00004d1c str r3, [sp, 4]                               |             var_4h = r3;
    0x00004d20 add r3, r3, 0x430                             |             
    0x00004d24 add r3, r3, 0xc                               |             r3 = 0x53c4;
    0x00004d28 str r3, [sp]                                  |             *(sp) = r3;
    0x00004d2c str r0, [r6]                                  |             *(r6) = r0;
                                                             | label_0:
    0x00004d30 cmp r4, r5                                    |             
                                                             |             if (r4 >= r5) {
    0x00004d34 bhs 0x4f4c                                    |                 goto label_4;
                                                             |             }
    0x00004d38 ldr r3, [pc, 0x250]                           |             r3 = *(0x4f8c);
    0x00004d3c ldr r3, [fp, r3]                              |             r3 = *((fp + r3));
    0x00004d40 ldr r2, [r3]                                  |             r2 = *(0x4f8c);
    0x00004d44 b 0x4d58                                      |             goto label_5;
                                                             |         }
    0x00004d48 add r5, r5, 1                                 |         r5++;
    0x00004d4c add r0, r4, 1                                 |         r0 = r4 + 1;
    0x00004d50 b 0x4cec                                      |         
                                                             |     } while (1);
                                                             |     do {
    0x00004d54 mov r7, r1                                    |         r7 = r1;
                                                             | label_5:
    0x00004d58 ldrb r3, [r7]                                 |         r3 = *(r7);
    0x00004d5c add r1, r7, 1                                 |         r1 = r7 + 1;
    0x00004d60 lsl r3, r3, 1                                 |         r3 <<= 1;
    0x00004d64 ldrh r3, [r2, r3]                             |         r3 = *((r2 + r3));
    0x00004d68 tst r3, 0x20                                  |         
    0x00004d6c bne 0x4d54                                    |         
                                                             |     } while ((r3 & 0x20) != 0);
    0x00004d70 mov r1, 0x2c                                  |     r1 = 0x2c;
    0x00004d74 mov r0, r7                                    |     r0 = r7;
    0x00004d78 bl 0x2628                                     |     r0 = strchr (r0, r1);
    0x00004d7c subs r8, r0, 0                                |     r8 = r0 - 0;
                                                             |     if (r8 == r0) {
    0x00004d80 subne r3, r8, r7                              |         r3 = r8 - r7;
                                                             |     }
                                                             |     if (r8 == r0) {
    0x00004d84 bne 0x4d94                                    |         
    0x00004d88 mov r0, r7                                    |         r0 = r7;
    0x00004d8c bl 0x2610                                     |         r0 = strlen (r0);
    0x00004d90 mov r3, r0                                    |         r3 = r0;
                                                             |     }
    0x00004d94 cmp r3, 0xff                                  |     
                                                             |     if (r3 >= 0xff) {
    0x00004d98 bls 0x4dbc                                    |         
    0x00004d9c ldr r3, [pc, 0x1f0]                           |         
    0x00004da0 ldr r1, [pc, 0x1f0]                           |         r1 = *(0x4f94);
    0x00004da4 ldr r3, [fp, r3]                              |         r3 = *((fp + r3));
    0x00004da8 add r1, pc, r1                                |         r1 = pc + r1;
    0x00004dac ldr r3, [r3]                                  |         
    0x00004db0 mov r0, 2                                     |         r0 = 2;
    0x00004db4 ldr r3, [r3, 0x14]                            |         r3 = *(0x4fa4);
    0x00004db8 blx r3                                        |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
                                                             |     }
    0x00004dbc add sl, sp, 0x18                              |     sl += dest;
    0x00004dc0 mov r2, r3                                    |     r2 = r3;
    0x00004dc4 mov r1, r7                                    |     r1 = r7;
    0x00004dc8 mov r0, sl                                    |     r0 = sl;
    0x00004dcc str r3, [sp, 0xc]                             |     var_ch = r3;
    0x00004dd0 bl 0x2448                                     |     strncpy (r0, r1, r2);
    0x00004dd4 ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x00004dd8 add r2, sp, 0x118                             |     r2 += var_118h;
    0x00004ddc add r3, r2, r3                                |     r3 = r2 + r3;
    0x00004de0 mov r7, 0                                     |     r7 = 0;
    0x00004de4 mov r1, 0x2f                                  |     r1 = 0x2f;
    0x00004de8 mov r0, sl                                    |     r0 = sl;
    0x00004dec strb r7, [r3, -0x100]                         |     dest = r7;
    0x00004df0 bl 0x23ac                                     |     r0 = strrchr (r0, r1);
    0x00004df4 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00004df8 beq 0x4ed0                                    |         goto label_6;
                                                             |     }
    0x00004dfc strb r7, [r0], 1                              |     *(r0) = r7;
                                                             |     r0++;
    0x00004e00 bl 0x4be4                                     |     r0 = fcn_00004be4 (r0);
    0x00004e04 mov r1, r0                                    |     r1 = r0;
                                                             |     do {
    0x00004e08 ldr r0, [r6]                                  |         r0 = *(r6);
    0x00004e0c lsl r7, r4, 2                                 |         r7 = r4 << 2;
    0x00004e10 mov r2, 4                                     |         r2 = 4;
    0x00004e14 add r0, r0, r7                                |         r0 += r7;
    0x00004e18 bl 0x22a4                                     |         memcpy (r0, r1, r2);
    0x00004e1c ldr r3, [r6]                                  |         r3 = *(r6);
    0x00004e20 ldr r3, [r3, r4, lsl 2]                       |         offset_0 = r4 << 2;
                                                             |         r3 = *((r3 + offset_0));
    0x00004e24 cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x00004e28 bne 0x4e3c                                    |             
    0x00004e2c ldr r1, [pc, 0x168]                           |             r1 = *(0x4f98);
    0x00004e30 mov r0, sl                                    |             r0 = sl;
    0x00004e34 add r1, pc, r1                                |             r1 = pc + r1;
    0x00004e38 bl 0x21c0                                     |             strcpy (r0, r1)
                                                             |         }
    0x00004e3c mov r0, sl                                    |         r0 = sl;
    0x00004e40 add r1, sp, 0x14                              |         r1 += var_14h;
    0x00004e44 bl 0x4aa0                                     |         fcn_00004aa0 (r0, r1);
    0x00004e48 ldr r3, [sp, 0x14]                            |         r3 = var_14h;
    0x00004e4c cmp r3, 1                                     |         
    0x00004e50 mov sl, r0                                    |         sl = r0;
                                                             |         if (r3 < 1) {
    0x00004e54 bls 0x4f34                                    |             goto label_7;
                                                             |         }
    0x00004e58 sub r3, r3, 1                                 |         r3--;
    0x00004e5c add r5, r5, r3                                |         r5 += r3;
    0x00004e60 lsl r3, r5, 2                                 |         r3 = r5 << 2;
    0x00004e64 mov r1, r3                                    |         r1 = r3;
    0x00004e68 ldr r0, [sb]                                  |         r0 = *(sb);
    0x00004e6c str r3, [sp, 0xc]                             |         var_ch = r3;
    0x00004e70 bl 0x25ec                                     |         fcn_000025ec ();
    0x00004e74 ldr r3, [sp, 0xc]                             |         r3 = var_ch;
    0x00004e78 mov r1, r3                                    |         r1 = r3;
    0x00004e7c str r0, [sb]                                  |         *(sb) = r0;
    0x00004e80 ldr r0, [r6]                                  |         r0 = *(r6);
    0x00004e84 bl 0x25ec                                     |         fcn_000025ec ();
    0x00004e88 mov r3, 0                                     |         r3 = 0;
    0x00004e8c str r0, [r6]                                  |         *(r6) = r0;
                                                             | label_1:
    0x00004e90 ldr r2, [sp, 0x14]                            |         r2 = var_14h;
    0x00004e94 cmp r2, r3                                    |         
                                                             |         if (r2 > r3) {
    0x00004e98 bhi 0x4ee4                                    |             goto label_8;
                                                             |         }
    0x00004e9c mov r3, 1                                     |         r3 = 1;
                                                             | label_2:
    0x00004ea0 ldr r2, [sp, 0x14]                            |         r2 = var_14h;
    0x00004ea4 cmp r2, r3                                    |         
                                                             |         if (r2 > r3) {
    0x00004ea8 bhi 0x4f0c                                    |             goto label_9;
                                                             |         }
    0x00004eac sub r4, r4, 1                                 |         r4--;
    0x00004eb0 add r4, r2, r4                                |         r4 = r2 + r4;
                                                             | label_3:
    0x00004eb4 mov r0, sl                                    |         r0 = sl;
    0x00004eb8 bl 0x2688                                     |         free (r0);
    0x00004ebc cmp r8, 0                                     |         
                                                             |         if (r8 == 0) {
    0x00004ec0 beq 0x4f4c                                    |             goto label_4;
                                                             |         }
    0x00004ec4 add r7, r8, 1                                 |         r7 = r8 + 1;
    0x00004ec8 add r4, r4, 1                                 |         r4++;
    0x00004ecc b 0x4d30                                      |         goto label_0;
                                                             | label_6:
    0x00004ed0 ldr r2, [sp, 4]                               |         r2 = var_4h;
    0x00004ed4 mvn r3, 0                                     |         r3 = ~0;
    0x00004ed8 str r3, [r2, 0x43c]                           |         *((r2 + 0x43c)) = r3;
    0x00004edc ldr r1, [sp]                                  |         r1 = *(sp);
    0x00004ee0 b 0x4e08                                      |         
                                                             |     } while (1);
                                                             | label_8:
    0x00004ee4 ldr r0, [sb]                                  |     r0 = *(sb);
    0x00004ee8 add ip, r4, r3                                |     
    0x00004eec add r1, sl, r3, lsl 2                         |     r1 = sl + (r3 << 2);
    0x00004ef0 mov r2, 4                                     |     r2 = 4;
    0x00004ef4 add r0, r0, ip, lsl 2                         |     r0 += (ip << 2);
    0x00004ef8 str r3, [sp, 0xc]                             |     var_ch = r3;
    0x00004efc bl 0x22a4                                     |     memcpy (r0, r1, r2);
    0x00004f00 ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x00004f04 add r3, r3, 1                                 |     r3++;
    0x00004f08 b 0x4e90                                      |     goto label_1;
                                                             | label_9:
    0x00004f0c ldr r0, [r6]                                  |     r0 = *(r6);
    0x00004f10 add ip, r4, r3                                |     
    0x00004f14 add r1, r0, r7                                |     r1 = r0 + r7;
    0x00004f18 mov r2, 4                                     |     r2 = 4;
    0x00004f1c add r0, r0, ip, lsl 2                         |     r0 += (ip << 2);
    0x00004f20 str r3, [sp, 0xc]                             |     var_ch = r3;
    0x00004f24 bl 0x22a4                                     |     memcpy (r0, r1, r2);
    0x00004f28 ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x00004f2c add r3, r3, 1                                 |     r3++;
    0x00004f30 b 0x4ea0                                      |     goto label_2;
                                                             | label_7:
    0x00004f34 ldr r0, [sb]                                  |     r0 = *(sb);
    0x00004f38 mov r2, 4                                     |     r2 = 4;
    0x00004f3c mov r1, sl                                    |     r1 = sl;
    0x00004f40 add r0, r0, r7                                |     r0 += r7;
    0x00004f44 bl 0x22a4                                     |     memcpy (r0, r1, r2);
    0x00004f48 b 0x4eb4                                      |     goto label_3;
                                                             | label_4:
    0x00004f4c ldr r3, [sp, 8]                               |     r3 = var_8h;
    0x00004f50 str r5, [r3]                                  |     *(r3) = r5;
    0x00004f54 mov r3, 0                                     |     r3 = 0;
                                                             |     do {
    0x00004f58 cmp r3, r5                                    |         
                                                             |         if (r3 == r5) {
    0x00004f5c bne 0x4f68                                    |             
    0x00004f60 add sp, sp, 0x11c                             |             
    0x00004f64 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |             
                                                             |         }
    0x00004f68 ldr r1, [sb]                                  |         r1 = *(sb);
    0x00004f6c ldr r0, [r6]                                  |         r0 = *(r6);
    0x00004f70 ldr r2, [r1, r3, lsl 2]                       |         offset_1 = r3 << 2;
                                                             |         r2 = *((r1 + offset_1));
    0x00004f74 ldr r0, [r0, r3, lsl 2]                       |         offset_2 = r3 << 2;
                                                             |         r0 = *((r0 + offset_2));
    0x00004f78 and r2, r2, r0                                |         r2 &= r0;
    0x00004f7c str r2, [r1, r3, lsl 2]                       |         offset_3 = r3 << 2;
                                                             |         *((r1 + offset_3)) = r2;
    0x00004f80 add r3, r3, 1                                 |         r3++;
    0x00004f84 b 0x4f58                                      |         
                                                             |     } while (1);
                                                             | }

[*] Function strcpy used 7 times libxtables.so.12.2.0