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

  
  	Full RELRO     Canary found      NX enabled   DSO          No RPATH     No RUNPATH   No Symbols


[*] Function fprintf tear down of libxtables.so.12.6.0

    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libxtables.so.12.6.0 @ 0x37e0 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.000037e0 ()                                  | void fcn_000037e0 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                             |     int16_t var_0h;
                                                             |     int16_t var_18h;
                                                             |     int16_t var_1ch;
                                                             |     int16_t var_20h;
                                                             |     int16_t var_24h;
                                                             |     int16_t var_28h;
                                                             |     int16_t var_90h;
                                                             |     int16_t var_98h;
                                                             |     int16_t var_9ch;
                                                             |     int16_t var_19ch;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
                                                             |     r3 = arg4;
    0x000037e0 svcmi 0xf0e92d                                |     __asm ("svcmi aav.0x000000ff");
    0x000037e4 mov fp, r0                                    |     
    0x000037e6 ldr r0, [pc, 0x170]                           |     
    0x000037e8 mov r7, r3                                    |     r7 = r3;
    0x000037ea sub sp, 0x1a4                                 |     
    0x000037ec mov r6, r2                                    |     r6 = r2;
    0x000037ee ldr r3, [pc, 0x16c]                           |     r3 = *(0x395e);
    0x000037f0 add.w ip, sp, 0x90                            |     
    0x000037f4 add r0, pc                                    |     r0 = 0x7152;
    0x000037f6 ldr r2, [pc, 0x168]                           |     
    0x000037f8 ldr.w sl, [pc, 0x168]                         |     
    0x000037fc mov r8, r6                                    |     r8 = r6;
    0x000037fe ldr r3, [r0, r3]                              |     
    0x00003800 mov r0, fp                                    |     r0 = fp;
    0x00003802 add r2, pc                                    |     r2 = 0x7168;
    0x00003804 add sl, pc                                    |     sl = 0x716c;
    0x00003806 ldr r3, [r3]                                  |     r3 = *(0x7152);
    0x00003808 str r3, [sp, 0x19c]                           |     var_19ch = r3;
    0x0000380a mov.w r3, 0                                   |     r3 = 0;
    0x0000380e ldr r3, [pc, 0x158]                           |     
    0x00003810 str r1, [sp, 0x18]                            |     var_18h = r1;
    0x00003812 strd r2, r7, [sp, 0x20]                       |     __asm ("strd r2, r7, [sp, 0x20]");
    0x00003816 add r3, pc                                    |     r3 = 0x7184;
    0x00003818 str.w ip, [sp, 0x1c]                          |     __asm ("str.w ip, [var_1ch]");
    0x0000381c strd r1, r3, [sp, 0x90]                       |     __asm ("strd r1, r3, [sp, 0x90]");
    0x00003820 movs r3, 0                                    |     r3 = 0;
    0x00003822 movs r1, 0x3a                                 |     r1 = 0x3a;
    0x00003824 str r3, [sp, 0x98]                            |     var_98h = r3;
    0x00003826 blx 0x26d0                                    |     r0 = fcn_000026d0 ();
    0x0000382a mov sb, r0                                    |     sb = r0;
                                                             |     if (r0 == 0) {
    0x0000382c cbz r0, 0x3890                                |         goto label_5;
                                                             |     }
                                                             | label_0:
    0x0000382e ldr r3, [sp, 0x18]                            |     r3 = var_18h;
                                                             |     if (r3 == 0) {
    0x00003830 cbz r3, 0x387a                                |         goto label_6;
                                                             |     }
    0x00003832 add r7, sp, 0x28                              |     r7 += var_28h;
    0x00003834 ldr r5, [sp, 0x1c]                            |     r5 = var_1ch;
    0x00003836 mov r2, r7                                    |     r2 = r7;
    0x00003838 sub.w r6, sb, fp                              |     r6 = sb - fp;
    0x0000383c mov r7, fp                                    |     r7 = fp;
    0x0000383e add r4, sp, 0x9c                              |     r4 += var_9ch;
    0x00003840 mov fp, r2                                    |     
                                                             |     do {
    0x00003842 strd r3, r8, [sp, 0xc]                        |         __asm ("strd r3, r8, [sp, 0xc]");
    0x00003846 mov.w r3, 0x100                               |         r3 = 0x100;
    0x0000384a mov r1, r3                                    |         r1 = r3;
    0x0000384c movs r2, 1                                    |         r2 = 1;
    0x0000384e mov r0, r4                                    |         r0 = r4;
    0x00003850 strd r6, r7, [sp, 4]                          |         __asm ("strd r6, r7, [sp, 4]");
    0x00003854 str.w sl, [sp]                                |         __asm ("str.w sl, [sp]");
    0x00003858 blx 0x2924                                    |         fcn_00002924 ();
    0x0000385c mov r1, fp                                    |         r1 = fp;
    0x0000385e mov r0, r4                                    |         r0 = r4;
    0x00003860 blx 0x2578                                    |         r0 = fcn_00002578 ();
    0x00003864 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00003866 beq 0x38d8                                    |             goto label_7;
                                                             |         }
    0x00003868 blx 0x26f8                                    |         r0 = fcn_000026f8 ();
    0x0000386c ldr r0, [r0]                                  |         r0 = *(r0);
    0x0000386e cmp r0, 2                                     |         
                                                             |         if (r0 != 2) {
    0x00003870 bne 0x389c                                    |             goto label_8;
                                                             |         }
    0x00003872 ldr r3, [r5, 4]!                              |         r3 = *((r5 += 4));
    0x00003876 cmp r3, 0                                     |         
    0x00003878 bne 0x3842                                    |         
                                                             |     } while (r3 != 0);
                                                             | label_6:
    0x0000387a mov fp, sb                                    |     
    0x0000387c ldrb r3, [fp], 1                              |     r3 = *(fp);
                                                             |     fp++;
                                                             |     if (r3 == 0) {
    0x00003880 cbz r3, 0x38ba                                |         goto label_2;
                                                             |     }
                                                             | label_1:
    0x00003882 movs r1, 0x3a                                 |     r1 = 0x3a;
    0x00003884 mov r0, fp                                    |     r0 = fp;
    0x00003886 blx 0x26d0                                    |     r0 = fcn_000026d0 ();
    0x0000388a mov sb, r0                                    |     sb = r0;
    0x0000388c cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0000388e bne 0x382e                                    |         goto label_0;
                                                             |     }
                                                             | label_5:
    0x00003890 mov r0, fp                                    |     r0 = fp;
    0x00003892 blx 0x26c4                                    |     r0 = fcn_000026c4 ();
    0x00003896 add.w sb, fp, r0                              |     sb = fp + r0;
    0x0000389a b 0x382e                                      |     goto label_0;
                                                             | label_8:
    0x0000389c ldr r2, [sp, 0x20]                            |     r2 = var_20h;
    0x0000389e ldr r3, [pc, 0xcc]                            |     r3 = *(0x396e);
    0x000038a0 ldr r3, [r2, r3]                              |     r3 = *((r2 + r3));
    0x000038a2 ldr r6, [r3]                                  |     r6 = *(0x396e);
    0x000038a4 blx 0x264c                                    |     vfprintf_chk ()
    0x000038a8 ldr r2, [pc, 0xc4]                            |     
    0x000038aa mov r5, r0                                    |     r5 = r0;
    0x000038ac mov r3, r4                                    |     r3 = r4;
    0x000038ae movs r1, 1                                    |     r1 = 1;
    0x000038b0 mov r0, r6                                    |     r0 = r6;
    0x000038b2 str r5, [sp]                                  |     *(sp) = r5;
    0x000038b4 add r2, pc                                    |     r2 = 0x7228;
    0x000038b6 blx 0x27c4                                    |     fcn_000027c4 ();
                                                             | label_2:
    0x000038ba movs r4, 0                                    |     r4 = 0;
                                                             | label_3:
    0x000038bc ldr r2, [pc, 0xb4]                            |     
    0x000038be ldr r3, [pc, 0x9c]                            |     r3 = *(0x395e);
    0x000038c0 add r2, pc                                    |     r2 = 0x7238;
    0x000038c2 ldr r3, [r2, r3]                              |     r3 = *(0x7238);
    0x000038c4 ldr r2, [r3]                                  |     r2 = *(0x7238);
    0x000038c6 ldr r3, [sp, 0x19c]                           |     r3 = var_19ch;
    0x000038c8 eors r2, r3                                   |     r2 ^= r3;
    0x000038ca mov.w r3, 0                                   |     r3 = 0;
                                                             |     if (r2 != r3) {
    0x000038ce bne 0x3954                                    |         goto label_9;
                                                             |     }
    0x000038d0 mov r0, r4                                    |     r0 = r4;
    0x000038d2 add sp, 0x1a4                                 |     
    0x000038d4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}    |     
                                                             | label_7:
    0x000038d8 movs r1, 2                                    |     r1 = 2;
    0x000038da mov r0, r4                                    |     r0 = r4;
    0x000038dc blx 0x2658                                    |     r0 = strsep ();
                                                             |     if (r0 != 0) {
    0x000038e0 cbnz r0, 0x390a                               |         goto label_10;
                                                             |     }
    0x000038e2 ldr r2, [sp, 0x20]                            |     r2 = var_20h;
    0x000038e4 mov fp, sb                                    |     
    0x000038e6 ldr r3, [pc, 0x84]                            |     r3 = *(0x396e);
    0x000038e8 ldr r3, [r2, r3]                              |     r3 = *((r2 + r3));
    0x000038ea ldr r5, [r3]                                  |     r5 = *(0x396e);
    0x000038ec blx 0x23f4                                    |     dlerror ();
    0x000038f0 ldr r2, [pc, 0x84]                            |     
    0x000038f2 mov r3, r4                                    |     r3 = r4;
    0x000038f4 str r0, [sp]                                  |     *(sp) = r0;
    0x000038f6 movs r1, 1                                    |     r1 = 1;
    0x000038f8 mov r0, r5                                    |     r0 = r5;
    0x000038fa add r2, pc                                    |     r2 = 0x7276;
    0x000038fc blx 0x27c4                                    |     fcn_000027c4 ();
    0x00003900 ldrb r3, [fp], 1                              |     r3 = *(fp);
                                                             |     fp++;
    0x00003904 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00003906 bne 0x3882                                    |         goto label_1;
                                                             |     }
    0x00003908 b 0x38ba                                      |     goto label_2;
                                                             | label_10:
    0x0000390a str r0, [sp, 0x18]                            |     var_18h = r0;
    0x0000390c movs r0, 8                                    |     r0 = 8;
    0x0000390e ldr r7, [sp, 0x24]                            |     r7 = var_24h;
    0x00003910 mov r6, r8                                    |     r6 = r8;
    0x00003912 blx 0x2634                                    |     r0 = strerror (r0);
                                                             |     if (r0 != 0) {
    0x00003916 cbz r0, 0x392c                                |         
    0x00003918 ldr r1, [pc, 0x60]                            |         
    0x0000391a ldr r3, [sp, 0x18]                            |         r3 = var_18h;
    0x0000391c add r1, pc                                    |         
    0x0000391e str r3, [r0, 4]                               |         *((r0 + 4)) = r3;
    0x00003920 mov r3, r1                                    |         r3 = r1;
    0x00003922 ldr.w r1, [r1, 0x804]                         |         r1 = *(0x7aa0);
    0x00003926 str.w r0, [r3, 0x804]                         |         __asm ("str.w r0, aav.0x000000ff");
    0x0000392a str r1, [r0]                                  |         *(r0) = r1;
                                                             |     }
                                                             |     if (r7 == 0) {
    0x0000392c cbz r7, 0x3946                                |         goto label_11;
                                                             |     }
    0x0000392e movs r1, 0                                    |     r1 = 0;
    0x00003930 mov r0, r6                                    |     r0 = r6;
    0x00003932 blx 0x27e8                                    |     r0 = fcn_000027e8 ();
    0x00003936 mov r4, r0                                    |     r4 = r0;
                                                             | label_4:
    0x00003938 cmp r4, 0                                     |     
                                                             |     if (r4 != 0) {
    0x0000393a bne 0x38bc                                    |         goto label_3;
                                                             |     }
    0x0000393c blx 0x26f8                                    |     fcn_000026f8 ();
    0x00003940 movs r3, 2                                    |     r3 = 2;
    0x00003942 str r3, [r0]                                  |     *(r0) = r3;
    0x00003944 b 0x38bc                                      |     goto label_3;
                                                             | label_11:
    0x00003946 mov r2, r7                                    |     r2 = r7;
    0x00003948 mov r1, r7                                    |     r1 = r7;
    0x0000394a mov r0, r6                                    |     r0 = r6;
    0x0000394c blx 0x2810                                    |     r0 = fcn_00002810 ();
    0x00003950 mov r4, r0                                    |     r4 = r0;
    0x00003952 b 0x3938                                      |     goto label_4;
                                                             | label_9:
    0x00003954 blx 0x2560                                    |     fcn_00002560 ();
    0x00003958 str r0, [r6, 0x5c]                            |     *((r6 + 0x5c)) = r0;
    0x0000395a movs r0, r0                                   |     
    0x0000395c lsls r0, r3, 7                                |     r0 = r3 << 7;
    0x0000395e movs r0, r0                                   |     
    0x00003960 str r2, [r4, 0x5c]                            |     *((r4 + 0x5c)) = r2;
    0x00003962 movs r0, r0                                   |     
    0x00003964 add r0, r0                                    |     r0 += r0;
    0x00003966 movs r0, r0                                   |     
    0x00003968 mvns r6, r4                                   |     r6 = ~r4;
    0x0000396a movs r0, r0                                   |     
    0x0000396c lsls r4, r5, 7                                |     r4 = r5 << 7;
    0x0000396e movs r0, r0                                   |     
    0x00003970 muls r0, r4, r0                               |     r0 = r4 * r0;
    0x00003972 movs r0, r0                                   |     
    0x00003974 str r4, [r4, 0x50]                            |     *((r4 + 0x50)) = r4;
    0x00003976 movs r0, r0                                   |     
    0x00003978 orrs r2, r3                                   |     r2 |= r3;
    0x0000397a movs r0, r0                                   |     
    0x0000397c str r0, [r6, 0x6c]                            |     *((r6 + 0x6c)) = r0;
    0x0000397e movs r0, r0                                   |     
                                                             | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libxtables.so.12.6.0 @ 0x3ca4 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) sym.xtables_compatible_revision ()           | void xtables_compatible_revision (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                         |     int16_t var_0h;
                                                         |     char * dest;
                                                         |     int16_t var_ch;
                                                         |     int16_t var_28h;
                                                         |     int16_t var_29h;
                                                         |     int16_t var_2ch;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     r2 = arg3;
    0x00003ca4 mvnsmi lr, 0xb4000                        |     __asm ("mvnsmi lr, aav.0x000000ff");
    0x00003ca8 sub sp, 0x34                              |     
    0x00003caa ldr r5, [pc, 0x150]                       |     
    0x00003cac movs r3, 0x1e                             |     r3 = 0x1e;
    0x00003cae mov r7, r0                                |     r7 = r0;
    0x00003cb0 mov r8, r2                                |     r8 = r2;
    0x00003cb2 ldr r4, [pc, 0x14c]                       |     r4 = *(0x3e02);
    0x00003cb4 movs r2, 0xff                             |     r2 = 0xff;
    0x00003cb6 add r5, pc                                |     r5 = 0x7ab8;
    0x00003cb8 ldr r6, [pc, 0x148]                       |     
    0x00003cba ldr.w ip, [pc, 0x14c]                     |     ip = *(0x3e0a);
    0x00003cbc stm r1!, {r2, r3, r6}                     |     *(r1!) = r2;
                                                         |     *((r1! + 4)) = r3;
                                                         |     *((r1! + 8)) = r6;
    0x00003cbe ldr r4, [r5, r4]                          |     
    0x00003cc0 add r6, pc                                |     r6 = 0x7ac8;
    0x00003cc2 ldr r4, [r4]                              |     r4 = *(0x7ab8);
    0x00003cc4 str r4, [sp, 0x2c]                        |     var_2ch = r4;
    0x00003cc6 mov.w r4, 0                               |     r4 = 0;
    0x00003cca str r3, [sp, 8]                           |     dest = r3;
    0x00003ccc ldr.w sb, [r6, ip]                        |     sb = *(0x7ac8);
    0x00003cd0 mov r4, r1                                |     r4 = r1;
    0x00003cd2 movs r1, 3                                |     r1 = 3;
    0x00003cd4 ldr.w r3, [sb]                            |     r3 = *(0x7ac8);
    0x00003cd8 ldrb r0, [r3, 0xc]                        |     r0 = *((r3 + 0xc));
    0x00003cda blx 0x28cc                                |     r0 = fcn_000028cc ();
    0x00003cde subs r5, r0, 0                            |     r5 = r0 - 0;
                                                         |     if (r5 >= r0) {
    0x00003ce0 bge 0x3d0c                                |         goto label_3;
                                                         |     }
    0x00003ce2 blx 0x26f8                                |     r0 = fcn_000026f8 ();
    0x00003ce6 ldr r1, [r0]                              |     r1 = *(r0);
    0x00003ce8 cmp r1, 1                                 |     
                                                         |     if (r1 != 1) {
    0x00003cea bne 0x3dd4                                |         goto label_4;
                                                         |     }
    0x00003cec cmp r4, 0                                 |     
                                                         |     if (r4 != 0) {
    0x00003cee bne 0x3d72                                |         goto label_5;
                                                         |     }
                                                         | label_0:
    0x00003cf0 movs r0, 1                                |     r0 = 1;
                                                         |     do {
    0x00003cf2 ldr r2, [pc, 0x118]                       |         
    0x00003cf4 ldr r3, [pc, 0x108]                       |         r3 = *(0x3e00);
    0x00003cf6 add r2, pc                                |         r2 = 0x7b08;
    0x00003cf8 ldr r3, [r2, r3]                          |         r3 = *(0x7b08);
    0x00003cfa ldr r2, [r3]                              |         r2 = *(0x7b08);
    0x00003cfc ldr r3, [sp, 0x2c]                        |         r3 = var_2ch;
    0x00003cfe eors r2, r3                               |         r2 ^= r3;
    0x00003d00 mov.w r3, 0                               |         r3 = 0;
                                                         |         if (r2 != r3) {
    0x00003d04 bne 0x3dac                                |             goto label_6;
                                                         |         }
    0x00003d06 add sp, 0x34                              |         
    0x00003d08 pop.w {r4, r5, r6, r7, r8, sb, pc}        |         
                                                         | label_3:
    0x00003d0c movs r2, 1                                |         r2 = 1;
    0x00003d0e movs r1, 2                                |         r1 = 2;
    0x00003d10 blx 0x2804                                |         fcn_00002804 ();
    0x00003d14 adds r0, 1                                |         r0++;
                                                         |         if (r0 == 1) {
    0x00003d16 beq 0x3db0                                |             goto label_7;
                                                         |         }
    0x00003d18 ldr r3, [pc, 0xf4]                        |         r3 = *(0x3e10);
    0x00003d1a movs r1, 1                                |         r1 = 1;
    0x00003d1c ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003d1e ldr r0, [r3]                              |         r0 = *(0x3e10);
    0x00003d20 blx 0x27d0                                |         fcn_000027d0 ();
    0x00003d24 add r3, sp, 0xc                           |         r3 += var_ch;
    0x00003d26 movs r2, 0x1c                             |         r2 = 0x1c;
    0x00003d28 mov r1, r7                                |         r1 = r7;
    0x00003d2a mov r0, r3                                |         r0 = r3;
    0x00003d2c blx 0x2750                                |         fcn_00002750 ();
    0x00003d30 ldr.w r1, [sb]                            |         r1 = *(sb);
    0x00003d34 mov r3, r0                                |         r3 = r0;
    0x00003d36 movs r0, 0                                |         r0 = 0;
    0x00003d38 strb.w r4, [sp, 0x29]                     |         var_29h = r4;
    0x00003d3c strb.w r0, [sp, 0x28]                     |         var_28h = r0;
    0x00003d40 add r0, sp, 8                             |         r0 += dest;
    0x00003d42 ldrb r1, [r1, 0xd]                        |         r1 = *((r1 + 0xd));
    0x00003d44 mov r2, r8                                |         r2 = r8;
    0x00003d46 str r0, [sp]                              |         *(sp) = r0;
    0x00003d48 mov r0, r5                                |         r0 = r5;
    0x00003d4a blx 0x25f8                                |         r0 = strcpy (r0, r1);
    0x00003d4e cmp r0, 0                                 |         
                                                         |         if (r0 >= 0) {
    0x00003d50 bge 0x3d86                                |             goto label_8;
                                                         |         }
    0x00003d52 blx 0x26f8                                |         r0 = fcn_000026f8 ();
    0x00003d56 ldr r0, [r0]                              |         r0 = *(r0);
    0x00003d58 cmp r0, 0x5d                              |         
    0x00003d5a it ne                                     |         
                                                         |         if (r0 != 0x5d) {
    0x00003d5c cmpne r0, 2                               |             __asm ("cmpne r0, 2");
                                                         |         }
                                                         |         if (r0 == 0x5d) {
    0x00003d5e beq 0x3d8e                                |             goto label_9;
                                                         |         }
    0x00003d60 cmp r0, 0x5c                              |         
                                                         |         if (r0 != 0x5c) {
    0x00003d62 bne 0x3de8                                |             goto label_10;
                                                         |         }
    0x00003d64 mov r0, r5                                |         r0 = r5;
    0x00003d66 blx 0x2900                                |         r0 = fcn_00002900 ();
                                                         | label_1:
    0x00003d6a clz r0, r4                                |         r0 &= r4;
    0x00003d6e lsrs r0, r0, 5                            |         r0 >>= 5;
    0x00003d70 b 0x3cf2                                  |         
                                                         |     } while (1);
                                                         | label_5:
    0x00003d72 ldr r2, [pc, 0xa0]                        |     r2 = *(0x3e16);
    0x00003d74 mov r3, r7                                |     r3 = r7;
    0x00003d76 ldr r0, [r6, r2]                          |     r0 = *((r6 + r2));
    0x00003d78 ldr r2, [pc, 0x9c]                        |     
    0x00003d7a str r4, [sp]                              |     *(sp) = r4;
    0x00003d7c ldr r0, [r0]                              |     r0 = *(r0);
    0x00003d7e add r2, pc                                |     r2 = 0x7b9a;
    0x00003d80 blx 0x27c4                                |     fcn_000027c4 ();
    0x00003d84 b 0x3cf0                                  |     goto label_0;
                                                         | label_8:
    0x00003d86 mov r0, r5                                |     r0 = r5;
    0x00003d88 blx 0x2900                                |     fcn_00002900 ();
    0x00003d8c b 0x3cf0                                  |     goto label_0;
                                                         | label_9:
    0x00003d8e mov r0, r5                                |     r0 = r5;
    0x00003d90 blx 0x2900                                |     fcn_00002900 ();
    0x00003d94 cmp r4, 0                                 |     
                                                         |     if (r4 != 0) {
    0x00003d96 bne 0x3d6a                                |         goto label_1;
                                                         |     }
    0x00003d98 ldr r1, [pc, 0x78]                        |     r1 = *(0x3e14);
    0x00003d9a mov r3, r7                                |     r3 = r7;
    0x00003d9c ldr r2, [pc, 0x7c]                        |     
    0x00003d9e ldr r1, [r6, r1]                          |     r1 = *((r6 + r1));
    0x00003da0 add r2, pc                                |     r2 = "ACCEPT";
    0x00003da2 ldr r0, [r1]                              |     r0 = *(0x3e14);
    0x00003da4 movs r1, 1                                |     r1 = 1;
    0x00003da6 blx 0x27c4                                |     fcn_000027c4 ();
    0x00003daa b 0x3d6a                                  |     goto label_1;
                                                         | label_6:
    0x00003dac blx 0x2560                                |     fcn_00002560 ();
                                                         | label_7:
    0x00003db0 ldr r3, [pc, 0x60]                        |     r3 = *(0x3e14);
    0x00003db2 ldr r3, [r6, r3]                          |     r3 = *((r6 + r3));
    0x00003db4 ldr r4, [r3]                              |     r4 = *(0x3e14);
    0x00003db6 blx 0x26f8                                |     r0 = fcn_000026f8 ();
    0x00003dba ldr r0, [r0]                              |     r0 = *(r0);
    0x00003dbc blx 0x264c                                |     vfprintf_chk ()
    0x00003dc0 ldr r2, [pc, 0x5c]                        |     
    0x00003dc2 mov r3, r0                                |     r3 = r0;
    0x00003dc4 add r2, pc                                |     r2 = 0x7be8;
                                                         |     do {
                                                         | label_2:
    0x00003dc6 movs r1, 1                                |         r1 = 1;
    0x00003dc8 mov r0, r4                                |         r0 = r4;
    0x00003dca blx 0x27c4                                |         fcn_000027c4 ();
    0x00003dce movs r0, 1                                |         r0 = 1;
    0x00003dd0 blx 0x26a0                                |         strtoul (r0, r1, r2);
                                                         | label_4:
    0x00003dd4 ldr r3, [pc, 0x3c]                        |         r3 = *(0x3e14);
    0x00003dd6 mov r0, r1                                |         r0 = r1;
    0x00003dd8 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003dda ldr r4, [r3]                              |         r4 = *(0x3e14);
    0x00003ddc blx 0x264c                                |         vfprintf_chk ()
    0x00003de0 ldr r2, [pc, 0x40]                        |         
    0x00003de2 mov r3, r0                                |         r3 = r0;
    0x00003de4 add r2, pc                                |         r2 = 0x7c0c;
    0x00003de6 b 0x3dc6                                  |         
                                                         |     } while (1);
                                                         | label_10:
    0x00003de8 ldr r3, [pc, 0x28]                        |     r3 = *(0x3e14);
    0x00003dea ldr r3, [r6, r3]                          |     r3 = *((r6 + r3));
    0x00003dec ldr r4, [r3]                              |     r4 = *(0x3e14);
    0x00003dee blx 0x264c                                |     vfprintf_chk ()
    0x00003df2 ldr r2, [pc, 0x34]                        |     
    0x00003df4 mov r3, r0                                |     r3 = r0;
    0x00003df6 add r2, pc                                |     r2 = 0x7c24;
    0x00003df8 b 0x3dc6                                  |     goto label_2;
                                                         | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libxtables.so.12.6.0 @ 0x3980 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) sym.xtables_find_match ()                            | void xtables_find_match (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x00003980 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00003984 sub sp, 0x14                                      |     
    0x00003986 ldr.w r8, [pc, 0x230]                             |     
    0x0000398a mov r7, r0                                        |     r7 = r0;
    0x0000398c mov sl, r2                                        |     sl = r2;
    0x0000398e str r1, [sp, 0xc]                                 |     var_ch = r1;
    0x00003990 blx 0x26c4                                        |     r0 = fcn_000026c4 ();
    0x00003994 cmp r0, 0x1c                                      |     
    0x00003996 add r8, pc                                        |     r8 = 0x7554;
                                                                 |     if (r0 > 0x1c) {
    0x00003998 bhi.w 0x3ba0                                      |         goto label_8;
                                                                 |     }
    0x0000399c ldr r1, [pc, 0x21c]                               |     
    0x0000399e mov r0, r7                                        |     r0 = r7;
    0x000039a0 add r1, pc                                        |     r1 = 0x7560;
    0x000039a2 blx 0x2400                                        |     r0 = strcmp (r0, r1);
    0x000039a6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000039a8 beq.w 0x3ac6                                      |         goto label_9;
                                                                 |     }
    0x000039ac ldr r1, [pc, 0x210]                               |     
    0x000039ae mov r0, r7                                        |     r0 = r7;
    0x000039b0 add r1, pc                                        |     r1 = 0x7574;
    0x000039b2 blx 0x2400                                        |     r0 = strcmp (r0, r1);
    0x000039b6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000039b8 beq.w 0x3b92                                      |         goto label_10;
                                                                 |     }
    0x000039bc ldr r4, [pc, 0x204]                               |     
    0x000039be mov r0, r7                                        |     r0 = r7;
    0x000039c0 add r4, pc                                        |     r4 = 0x7588;
    0x000039c2 mov r1, r4                                        |     r1 = r4;
    0x000039c4 blx 0x2400                                        |     r0 = strcmp (r0, r1);
    0x000039c8 cmp r0, 0                                         |     
    0x000039ca it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x000039cc moveq r7, r4                                      |         r7 = r4;
                                                                 |     }
                                                                 | label_2:
    0x000039ce ldr r3, [pc, 0x1f8]                               |     r3 = *(0x3bca);
    0x000039d0 ldr.w r5, [r8, r3]                                |     r5 = *((r8 + r3));
    0x000039d4 ldr r3, [pc, 0x1f4]                               |     r3 = *(0x3bcc);
    0x000039d6 ldr r4, [r5]                                      |     r4 = *(r5);
    0x000039d8 ldr.w r1, [r8, r3]                                |     r1 = *((r8 + r3));
                                                                 |     if (r4 == 0) {
    0x000039dc cbz r4, 0x3a3c                                    |         goto label_11;
                                                                 |     }
    0x000039de mov.w fp, 0                                       |     
    0x000039e2 str.w sl, [sp, 8]                                 |     __asm ("str.w sl, [var_8h]");
    0x000039e6 mov sl, r5                                        |     sl = r5;
    0x000039e8 mov r5, fp                                        |     r5 = fp;
    0x000039ea str r1, [sp, 4]                                   |     var_4h = r1;
                                                                 |     do {
    0x000039ec ldr.w sb, [r4, 8]                                 |         sb = *((r4 + 8));
    0x000039f0 mov r0, r7                                        |         r0 = r7;
    0x000039f2 ldrh r6, [r4, 0x12]                               |         r6 = *((r4 + 0x12));
    0x000039f4 mov r1, sb                                        |         r1 = sb;
    0x000039f6 blx 0x2400                                        |         r0 = strcmp (r0, r1);
    0x000039fa cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x000039fc bne.w 0x3b1e                                      |             goto label_12;
                                                                 |         }
    0x00003a00 ldr r3, [pc, 0x1cc]                               |         r3 = *(0x3bd0);
    0x00003a02 ldr.w r3, [r8, r3]                                |         r3 = *((r8 + r3));
    0x00003a06 ldr r2, [r3]                                      |         r2 = *(0x3bd0);
    0x00003a08 ldrb r3, [r2, 0xc]                                |         r3 = *((r2 + 0xc));
    0x00003a0a cmp r6, 0                                         |         
    0x00003a0c it ne                                             |         
                                                                 |         if (r6 != 0) {
    0x00003a0e cmpne r3, r6                                      |             __asm ("cmpne r3, r6");
                                                                 |         }
    0x00003a10 ite eq                                            |         
                                                                 |         if (r6 != 0) {
    0x00003a12 moveq r6, 1                                       |             r6 = 1;
                                                                 |         }
                                                                 |         if (r6 == 0) {
    0x00003a14 movne r6, 0                                       |             r6 = 0;
                                                                 |         }
                                                                 |         if (r6 != 0) {
    0x00003a16 bne.w 0x3b1e                                      |             goto label_12;
                                                                 |         }
    0x00003a1a ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x00003a1c str.w r3, [sl]                                    |         __asm ("str.w r3, [sl]");
    0x00003a20 cmp.w fp, 0                                       |         
                                                                 |         if (fp == 0) {
    0x00003a24 beq 0x3a94                                        |             goto label_13;
                                                                 |         }
                                                                 |         if (r5 == 0) {
                                                                 | label_0:
    0x00003a26 cbnz r5, 0x3a30                                   |             
    0x00003a28 str.w r4, [sl]                                    |             __asm ("str.w r4, [sl]");
                                                                 | label_5:
    0x00003a2c add.w sl, r4, 4                                   |             sl = r4 + 4;
                                                                 |         }
                                                                 | label_1:
    0x00003a30 ldr.w r4, [sl]                                    |         r4 = *(sl);
    0x00003a34 cmp r4, 0                                         |         
    0x00003a36 bne 0x39ec                                        |         
                                                                 |     } while (r4 != 0);
    0x00003a38 ldrd r1, sl, [sp, 4]                              |     __asm ("ldrd r1, sl, [var_4h]");
                                                                 | label_11:
    0x00003a3c ldr r4, [r1]                                      |     r4 = *(r1);
    0x00003a3e cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00003a40 beq 0x3ad2                                        |         goto label_14;
                                                                 |     }
    0x00003a42 ldr r3, [pc, 0x18c]                               |     r3 = *(0x3bd2);
    0x00003a44 ldr.w sb, [r8, r3]                                |     sb = *((r8 + r3));
    0x00003a48 ldr.w r6, [sb]                                    |     r6 = *(sb);
                                                                 | label_3:
    0x00003a4c ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x00003a4e mov r0, r7                                        |     r0 = r7;
    0x00003a50 blx 0x2400                                        |     r0 = strcmp (r0, r1);
    0x00003a54 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00003a56 bne 0x3acc                                        |         goto label_15;
                                                                 |     }
    0x00003a58 ldrh r3, [r4, 0x12]                               |     r3 = *((r4 + 0x12));
    0x00003a5a ldrb r2, [r6, 0xc]                                |     r2 = *((r6 + 0xc));
    0x00003a5c cmp r3, 0                                         |     
    0x00003a5e it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x00003a60 cmpne r2, r3                                      |         __asm ("cmpne r2, r3");
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00003a62 bne 0x3acc                                        |         goto label_15;
                                                                 |     }
    0x00003a64 ldr r3, [r4, 0x58]                                |     r3 = *((r4 + 0x58));
    0x00003a66 mov r5, r0                                        |     r5 = r0;
                                                                 |     if (r3 != 0) {
    0x00003a68 cbz r3, 0x3a82                                    |         
    0x00003a6a movs r0, 0x64                                     |         r0 = 0x64;
    0x00003a6c blx 0x2640                                        |         r0 = dlopen ();
    0x00003a70 mov r6, r0                                        |         r6 = r0;
    0x00003a72 mov r1, r4                                        |         r1 = r4;
    0x00003a74 mov r4, r6                                        |         r4 = r6;
    0x00003a76 movs r2, 0x64                                     |         r2 = 0x64;
    0x00003a78 blx 0x2500                                        |         fcn_00002500 ();
    0x00003a7c str r5, [r6, 0x50]                                |         *((r6 + 0x50)) = r5;
    0x00003a7e str r5, [r6, 0x5c]                                |         *((r6 + 0x5c)) = r5;
    0x00003a80 str r6, [r6, 4]                                   |         *((r6 + 4)) = r6;
                                                                 |     }
                                                                 | label_4:
    0x00003a82 cmp r4, 0                                         |     
    0x00003a84 it ne                                             |     
                                                                 |     if (r4 != 0) {
    0x00003a86 cmpne sl, 0                                       |         __asm ("cmpne sl, 0");
                                                                 |     }
                                                                 |     if (r4 != 0) {
    0x00003a8a bne 0x3b24                                        |         goto label_16;
                                                                 |     }
                                                                 | label_7:
    0x00003a8c mov r0, r4                                        |     r0 = r4;
    0x00003a8e add sp, 0x14                                      |     
    0x00003a90 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_13:
    0x00003a94 ldr r3, [pc, 0x13c]                               |     
    0x00003a96 ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x00003a98 ldr r2, [r2, 0x10]                                |     r2 = *((r2 + 0x10));
    0x00003a9a ldr.w r3, [r8, r3]                                |     r3 = *((r8 + r3));
    0x00003a9e ldrb r1, [r4, 0x10]                               |     r1 = *((r4 + 0x10));
    0x00003aa0 cmp r0, 0                                         |     
    0x00003aa2 it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x00003aa4 moveq r0, sb                                      |         r0 = sb;
                                                                 |     }
    0x00003aa6 ldr r3, [r3]                                      |     
    0x00003aa8 ldr r3, [r3, 0x18]                                |     r3 = xtables_find_match_revision;
    0x00003aaa blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00003aac cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00003aae beq 0x3a26                                        |         goto label_0;
                                                                 |     }
    0x00003ab0 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00003ab2 beq 0x3b7a                                        |         goto label_17;
                                                                 |     }
    0x00003ab4 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x00003ab6 str r3, [r4, 4]                                   |     *((r4 + 4)) = r3;
    0x00003ab8 str r4, [r5, 4]                                   |     *((r5 + 4)) = r4;
                                                                 | label_6:
    0x00003aba movs r3, 0                                        |     r3 = 0;
    0x00003abc mov fp, r6                                        |     
    0x00003abe mov r5, r4                                        |     r5 = r4;
    0x00003ac0 strd r3, r3, [r4, 0x58]                           |     __asm ("strd r3, r3, [r4, 0x58]");
    0x00003ac4 b 0x3a30                                          |     goto label_1;
                                                                 | label_9:
    0x00003ac6 ldr r7, [pc, 0x110]                               |     
    0x00003ac8 add r7, pc                                        |     r7 = 0x76a6;
    0x00003aca b 0x39ce                                          |     goto label_2;
                                                                 | label_15:
    0x00003acc ldr r4, [r4, 4]                                   |     r4 = *((r4 + 4));
    0x00003ace cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00003ad0 bne 0x3a4c                                        |         goto label_3;
                                                                 |     }
                                                                 | label_14:
    0x00003ad2 ldr r5, [sp, 0xc]                                 |     r5 = var_ch;
    0x00003ad4 cmp r5, 1                                         |     
                                                                 |     if (r5 < 1) {
    0x00003ad6 bls 0x3b98                                        |         goto label_18;
                                                                 |     }
    0x00003ad8 ldr r3, [pc, 0xf4]                                |     r3 = *(0x3bd0);
    0x00003ada mov r2, r7                                        |     r2 = r7;
    0x00003adc ldr.w sb, [r8, r3]                                |     sb = *((r8 + r3));
    0x00003ae0 ldr r3, [pc, 0xf8]                                |     
    0x00003ae2 add r3, pc                                        |     r3 = 0x76c2;
    0x00003ae4 ldr.w r0, [r3, 0x800]                             |     r0 = *(0x7ec2);
    0x00003ae8 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00003aec ldr r1, [r3, 8]                                   |     r1 = *(0x76ca);
    0x00003aee movs r3, 0                                        |     r3 = 0;
    0x00003af0 bl 0x37e0                                         |     r0 = fcn_000037e0 (r0, r1, r2, r3);
    0x00003af4 cmp r0, 0                                         |     
    0x00003af6 it eq                                             |     
                                                                 |     if (r0 == 0) {
    0x00003af8 cmpeq r5, 3                                       |         __asm ("cmpeq r5, 3");
                                                                 |     }
    0x00003afa mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r0 != 0) {
    0x00003afc bne 0x3a82                                        |         goto label_4;
                                                                 |     }
    0x00003afe ldr r3, [pc, 0xd4]                                |     
    0x00003b00 ldr.w r3, [r8, r3]                                |     r3 = *((r8 + r3));
    0x00003b04 ldr r3, [r3]                                      |     r3 = *(0x3bd6);
    0x00003b06 ldr r4, [r3, 0x14]                                |     r4 = *(0x3bea);
    0x00003b08 blx 0x26f8                                        |     r0 = fcn_000026f8 ();
    0x00003b0c ldr r0, [r0]                                      |     r0 = *(r0);
    0x00003b0e blx 0x264c                                        |     vfprintf_chk ()
    0x00003b12 ldr r1, [pc, 0xcc]                                |     
    0x00003b14 mov r3, r0                                        |     r3 = r0;
    0x00003b16 mov r2, r7                                        |     r2 = r7;
    0x00003b18 movs r0, 2                                        |     r0 = 2;
    0x00003b1a add r1, pc                                        |     r1 = 0x7700;
    0x00003b1c blx r4                                            |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 | label_12:
    0x00003b1e ldr.w r4, [sl]                                    |     r4 = *(sl);
    0x00003b22 b 0x3a2c                                          |     goto label_5;
                                                                 | label_16:
    0x00003b24 movs r0, 0xc                                      |     r0 = 0xc;
    0x00003b26 blx 0x2640                                        |     dlopen ();
    0x00003b2a ldr.w r5, [sl]                                    |     r5 = *(sl);
    0x00003b2e mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r5 == 0) {
    0x00003b30 cbz r5, 0x3b66                                    |         goto label_19;
                                                                 |     }
    0x00003b32 ldr.w sb, [sb]                                    |     sb = *(sb);
    0x00003b36 mov.w r8, 1                                       |     r8 = 1;
    0x00003b3a mov sl, r7                                        |     sl = r7;
    0x00003b3c b 0x3b40                                          |     
                                                                 |     while (r3 != 0) {
    0x00003b3e mov r5, r3                                        |         r5 = r3;
    0x00003b40 ldr r7, [r5, 4]                                   |         r7 = *((r5 + 4));
    0x00003b42 mov r0, sl                                        |         r0 = sl;
    0x00003b44 ldr r1, [r7, 8]                                   |         r1 = *((r7 + 8));
    0x00003b46 blx 0x2400                                        |         r0 = strcmp (r0, r1);
                                                                 |         if (r0 == 0) {
    0x00003b4a cbnz r0, 0x3b5e                                   |             
    0x00003b4c ldrh r3, [r7, 0x12]                               |             r3 = *((r7 + 0x12));
    0x00003b4e ldrb.w r2, [sb, 0xc]                              |             r2 = *((sb + 0xc));
    0x00003b52 cmp r3, 0                                         |             
    0x00003b54 it ne                                             |             
                                                                 |             if (r3 != 0) {
    0x00003b56 cmpne r2, r3                                      |                 __asm ("cmpne r2, r3");
                                                                 |             }
    0x00003b58 it eq                                             |             
                                                                 |             if (r3 == 0) {
    0x00003b5a strbeq r8, [r5, 8]                                |                 *((r5 + 8)) = r8;
                                                                 |                 goto label_20;
                                                                 |             }
                                                                 |         }
                                                                 | label_20:
    0x00003b5e ldr r3, [r5]                                      |         r3 = *(r5);
    0x00003b60 cmp r3, 0                                         |         
    0x00003b62 bne 0x3b3e                                        |         
                                                                 |     }
    0x00003b64 mov sl, r5                                        |     sl = r5;
                                                                 | label_19:
    0x00003b66 movs r3, 0                                        |     r3 = 0;
    0x00003b68 mov r0, r4                                        |     r0 = r4;
    0x00003b6a str r4, [r6, 4]                                   |     *((r6 + 4)) = r4;
    0x00003b6c strb r3, [r6, 8]                                  |     *((r6 + 8)) = r3;
    0x00003b6e str r3, [r6]                                      |     *(r6) = r3;
    0x00003b70 str.w r6, [sl]                                    |     __asm ("str.w r6, [sl]");
    0x00003b74 add sp, 0x14                                      |     
    0x00003b76 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_17:
    0x00003b7a ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00003b7c ldr r3, [r3]                                      |     r3 = *(r3);
                                                                 |     if (r3 == 0) {
    0x00003b7e cbz r3, 0x3b9c                                    |         goto label_21;
                                                                 |     }
                                                                 |     do {
    0x00003b80 mov r2, r3                                        |         r2 = r3;
    0x00003b82 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00003b84 cmp r3, 0                                         |         
    0x00003b86 bne 0x3b80                                        |         
                                                                 |     } while (r3 != 0);
    0x00003b88 adds r2, 4                                        |     r2 += 4;
                                                                 |     do {
    0x00003b8a movs r3, 0                                        |         r3 = 0;
    0x00003b8c str r3, [r4, 4]                                   |         *((r4 + 4)) = r3;
    0x00003b8e str r4, [r2]                                      |         *(r2) = r4;
    0x00003b90 b 0x3aba                                          |         goto label_6;
                                                                 | label_10:
    0x00003b92 ldr r7, [pc, 0x50]                                |         
    0x00003b94 add r7, pc                                        |         r7 = 0x777e;
    0x00003b96 b 0x39ce                                          |         goto label_2;
                                                                 | label_18:
    0x00003b98 movs r4, 0                                        |         r4 = 0;
    0x00003b9a b 0x3a8c                                          |         goto label_7;
                                                                 | label_21:
    0x00003b9c ldr r2, [sp, 4]                                   |         r2 = var_4h;
    0x00003b9e b 0x3b8a                                          |         
                                                                 |     } while (1);
                                                                 | label_8:
    0x00003ba0 ldr r0, [pc, 0x30]                                |     r0 = *(0x3bd4);
    0x00003ba2 movs r3, 0x1c                                     |     r3 = 0x1c;
    0x00003ba4 ldr r1, [pc, 0x40]                                |     
    0x00003ba6 mov r2, r7                                        |     r2 = r7;
    0x00003ba8 ldr.w r4, [r8, r0]                                |     r4 = *((r8 + r0));
    0x00003bac movs r0, 2                                        |     r0 = 2;
    0x00003bae add r1, pc                                        |     r1 = 0x779a;
    0x00003bb0 ldr r4, [r4]                                      |     r4 = *(r4);
    0x00003bb2 ldr r4, [r4, 0x14]                                |     r4 = *((r4 + 0x14));
    0x00003bb4 blx r4                                            |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00003bb6 nop                                               |     
    0x00003bb8 str r6, [r1, 0x44]                                |     *((r1 + 0x44)) = r6;
    0x00003bba movs r0, r0                                       |     
    0x00003bbc cmp r4, r5                                        |     
    0x00003bbe movs r0, r0                                       |     
    0x00003bc0 cmp r4, r4                                        |     
    0x00003bc2 movs r0, r0                                       |     
    0x00003bc4 rsbs r4, r3, 0                                    |     r4 = r3 - ;
    0x00003bc6 movs r0, r0                                       |     
    0x00003bc8 lsls r0, r2, 8                                    |     r0 = r2 << 8;
    0x00003bca movs r0, r0                                       |     
    0x00003bcc lsls r4, r3, 7                                    |     r4 = r3 << 7;
    0x00003bce movs r0, r0                                       |     
    0x00003bd0 lsls r0, r1, 8                                    |     r0 = r1 << 8;
    0x00003bd2 movs r0, r0                                       |     
    0x00003bd4 lsls r4, r1, 7                                    |     r4 = r1 << 7;
    0x00003bd6 movs r0, r0                                       |     
    0x00003bd8 adcs r4, r2                                       |     __asm ("adcs r4, r2");
    0x00003bda movs r0, r0                                       |     
    0x00003bdc str r2, [r5, 0x50]                                |     *((r5 + 0x50)) = r2;
    0x00003bde movs r0, r0                                       |     
    0x00003be0 adcs r6, r0                                       |     __asm ("adcs r6, r0");
    0x00003be2 movs r0, r0                                       |     
    0x00003be4 lsls r0, r1                                       |     r0 <<= r1;
    0x00003be6 movs r0, r0                                       |     
    0x00003be8 eors r6, r6                                       |     r6 = 0;
    0x00003bea movs r0, r0                                       |     
                                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libxtables.so.12.6.0 @ 0x3bec */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) sym.xtables_find_match_revision ()           | void xtables_find_match_revision (int16_t arg1, int16_t arg3, int16_t arg4) {
                                                         |     r0 = arg1;
                                                         |     r2 = arg3;
                                                         |     r3 = arg4;
    0x00003bec push.w {r4, r5, r6, r7, r8, lr}           |     
    0x00003bf0 mov r6, r0                                |     r6 = r0;
    0x00003bf2 ldr r5, [pc, 0x4c]                        |     
    0x00003bf4 mov r7, r3                                |     r7 = r3;
    0x00003bf6 mov r4, r2                                |     r4 = r2;
    0x00003bf8 add r5, pc                                |     r5 = 0x783e;
                                                         |     if (r2 == 0) {
    0x00003bfa cbz r2, 0x3c32                            |         goto label_2;
                                                         |     }
                                                         | label_0:
    0x00003bfc ldr r3, [pc, 0x44]                        |     r3 = *(0x3c44);
    0x00003bfe ldr r3, [r5, r3]                          |     r3 = *((r5 + r3));
    0x00003c00 ldr.w r8, [r3]                            |     r8 = *(0x3c44);
                                                         |     do {
    0x00003c04 ldrb r2, [r4, 0x10]                       |         r2 = *((r4 + 0x10));
    0x00003c06 mov r0, r6                                |         r0 = r6;
    0x00003c08 cmp r2, r7                                |         
                                                         |         if (r2 == r7) {
    0x00003c0a beq 0x3c2c                                |             goto label_3;
                                                         |         }
    0x00003c0c ldr r4, [r4, 4]                           |         r4 = *((r4 + 4));
                                                         |         if (r4 == 0) {
    0x00003c0e cbz r4, 0x3c26                            |             goto label_1;
                                                         |         }
    0x00003c10 ldr r1, [r4, 8]                           |         r1 = *((r4 + 8));
    0x00003c12 ldrh r5, [r4, 0x12]                       |         r5 = *((r4 + 0x12));
    0x00003c14 blx 0x2400                                |         strcmp (r0, r1);
    0x00003c16 invalid                                   |         
    0x00003c1a ldrb.w r3, [r8, 0xc]                      |         r3 = *((r8 + 0xc));
    0x00003c1e cmp r5, 0                                 |         
    0x00003c20 it ne                                     |         
                                                         |         if (r5 != 0) {
    0x00003c22 cmpne r3, r5                              |             __asm ("cmpne r3, r5");
                                                         |         }
    0x00003c24 beq 0x3c04                                |         
                                                         |     } while (r5 == 0);
                                                         | label_1:
    0x00003c26 movs r0, 0                                |     r0 = 0;
    0x00003c28 pop.w {r4, r5, r6, r7, r8, pc}            |     
                                                         | label_3:
    0x00003c2c mov r0, r4                                |     r0 = r4;
    0x00003c2e pop.w {r4, r5, r6, r7, r8, pc}            |     
                                                         | label_2:
    0x00003c32 blx 0x2810                                |     r0 = fcn_00002810 ();
    0x00003c36 mov r4, r0                                |     r4 = r0;
    0x00003c38 cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x00003c3a bne 0x3bfc                                |         goto label_0;
                                                         |     }
    0x00003c3c b 0x3c26                                  |     goto label_1;
                                                         | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libxtables.so.12.6.0 @ 0x35a8 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) sym.xtables_find_target ()                           | void xtables_find_target (int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_0h_2;
                                                                 |     char * s2;
                                                                 |     int16_t var_8h_2;
                                                                 |     int16_t var_ch_2;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x000035a8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000035ac mov r8, r1                                        |     r8 = r1;
    0x000035ae ldrb r3, [r0]                                     |     r3 = *(r0);
    0x000035b0 sub sp, 0x14                                      |     
    0x000035b2 ldr.w sb, [pc, 0x1e8]                             |     
    0x000035b6 add sb, pc                                        |     sb = 0x6d58;
                                                                 |     if (r3 != 0) {
    0x000035b8 cbz r3, 0x35d0                                    |         
    0x000035ba ldr r1, [pc, 0x1e4]                               |         
    0x000035bc mov r7, r0                                        |         r7 = r0;
    0x000035be add r1, pc                                        |         r1 = 0x6d64;
    0x000035c0 blx 0x2400                                        |         r0 = strcmp (r0, r1);
    0x000035c4 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x000035c6 bne.w 0x3726                                      |             goto label_9;
                                                                 |         }
    0x000035ca ldr r7, [pc, 0x1d8]                               |         
    0x000035cc add r7, pc                                        |         r7 = 0x6d76;
    0x000035ce b 0x35d4                                          |         
                                                                 |     } else {
    0x000035d0 ldr r7, [pc, 0x1d4]                               |         
    0x000035d2 add r7, pc                                        |         r7 = 0x6d7e;
                                                                 |     }
                                                                 | label_6:
    0x000035d4 ldr r3, [pc, 0x1d4]                               |     r3 = *(0x37ac);
    0x000035d6 ldr.w r5, [sb, r3]                                |     r5 = *((sb + r3));
    0x000035da ldr r3, [pc, 0x1d4]                               |     r3 = *(0x37b2);
    0x000035dc ldr r4, [r5]                                      |     r4 = *(r5);
    0x000035de ldr.w r1, [sb, r3]                                |     r1 = *((sb + r3));
    0x000035e2 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x000035e4 beq 0x364a                                        |         goto label_10;
                                                                 |     }
    0x000035e6 ldr r3, [pc, 0x1cc]                               |     
    0x000035e8 mov.w fp, 0                                       |     
    0x000035ec str.w r8, [sp, 0xc]                               |     __asm ("str.w r8, [var_ch_2]");
    0x000035f0 mov sl, fp                                        |     sl = fp;
    0x000035f2 mov r8, r5                                        |     r8 = r5;
    0x000035f4 str r1, [sp, 8]                                   |     var_8h_2 = r1;
    0x000035f6 add r3, pc                                        |     r3 = 0x6db0;
    0x000035f8 str r3, [sp, 4]                                   |     s2 = r3;
                                                                 |     do {
    0x000035fa ldr r5, [r4, 8]                                   |         r5 = *((r4 + 8));
    0x000035fc mov r0, r7                                        |         r0 = r7;
    0x000035fe ldrh r6, [r4, 0x12]                               |         r6 = *((r4 + 0x12));
    0x00003600 mov r1, r5                                        |         r1 = r5;
    0x00003602 blx 0x2400                                        |         r0 = strcmp (r0, r1);
    0x00003606 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00003608 bne.w 0x3720                                      |             goto label_11;
                                                                 |         }
    0x0000360c ldr r3, [pc, 0x1a8]                               |         
    0x0000360e ldr.w r3, [sb, r3]                                |         r3 = *((sb + r3));
    0x00003612 ldr r3, [r3]                                      |         r3 = *(0x37b8);
    0x00003614 ldrb r2, [r3, 0xc]                                |         r2 = *((r3 + 0xc));
    0x00003616 cmp r6, 0                                         |         
    0x00003618 it ne                                             |         
                                                                 |         if (r6 != 0) {
    0x0000361a cmpne r2, r6                                      |             __asm ("cmpne r2, r6");
                                                                 |         }
    0x0000361c ite eq                                            |         
                                                                 |         if (r6 != 0) {
    0x0000361e moveq r6, 1                                       |             r6 = 1;
                                                                 |         }
                                                                 |         if (r6 == 0) {
    0x00003620 movne r6, 0                                       |             r6 = 0;
                                                                 |         }
                                                                 |         if (r6 != 0) {
    0x00003622 bne 0x3720                                        |             goto label_11;
                                                                 |         }
    0x00003624 ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x00003626 str.w r2, [r8]                                    |         __asm ("str.w r2, [r8]");
    0x0000362a cmp.w fp, 0                                       |         
                                                                 |         if (fp == 0) {
    0x0000362e beq 0x369a                                        |             goto label_12;
                                                                 |         }
                                                                 | label_0:
    0x00003630 cmp.w sl, 0                                       |         
                                                                 |         if (sl == 0) {
    0x00003634 bne 0x363e                                        |             
    0x00003636 str.w r4, [r8]                                    |             __asm ("str.w r4, [r8]");
                                                                 | label_5:
    0x0000363a add.w r8, r4, 4                                   |             r8 = r4 + 4;
                                                                 |         }
                                                                 | label_1:
    0x0000363e ldr.w r4, [r8]                                    |         r4 = *(r8);
    0x00003642 cmp r4, 0                                         |         
    0x00003644 bne 0x35fa                                        |         
                                                                 |     } while (r4 != 0);
    0x00003646 ldrd r1, r8, [sp, 8]                              |     __asm ("ldrd r1, r8, [var_8h_2]");
                                                                 | label_10:
    0x0000364a ldr r4, [r1]                                      |     r4 = *(r1);
    0x0000364c cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0000364e beq 0x36e6                                        |         goto label_13;
                                                                 |     }
    0x00003650 ldr r3, [pc, 0x164]                               |     r3 = *(0x37b8);
    0x00003652 ldr.w r3, [sb, r3]                                |     r3 = *((sb + r3));
    0x00003656 ldr r6, [r3]                                      |     r6 = *(0x37b8);
                                                                 | label_2:
    0x00003658 ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x0000365a mov r0, r7                                        |     r0 = r7;
    0x0000365c blx 0x2400                                        |     r0 = strcmp (r0, r1);
    0x00003660 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00003662 bne 0x36e0                                        |         goto label_14;
                                                                 |     }
    0x00003664 ldrh r3, [r4, 0x12]                               |     r3 = *((r4 + 0x12));
    0x00003666 ldrb r2, [r6, 0xc]                                |     r2 = *((r6 + 0xc));
    0x00003668 cmp r3, 0                                         |     
    0x0000366a it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x0000366c cmpne r2, r3                                      |         __asm ("cmpne r2, r3");
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x0000366e bne 0x36e0                                        |         goto label_14;
                                                                 |     }
    0x00003670 ldr r3, [r4, 0x58]                                |     r3 = *((r4 + 0x58));
    0x00003672 mov r5, r0                                        |     r5 = r0;
                                                                 |     if (r3 != 0) {
    0x00003674 cbz r3, 0x368e                                    |         
    0x00003676 movs r0, 0x68                                     |         r0 = 0x68;
    0x00003678 blx 0x2640                                        |         r0 = dlopen ();
    0x0000367c mov r6, r0                                        |         r6 = r0;
    0x0000367e mov r1, r4                                        |         r1 = r4;
    0x00003680 mov r4, r6                                        |         r4 = r6;
    0x00003682 movs r2, 0x68                                     |         r2 = 0x68;
    0x00003684 blx 0x2500                                        |         fcn_00002500 ();
    0x00003688 str r5, [r6, 0x50]                                |         *((r6 + 0x50)) = r5;
    0x0000368a str r5, [r6, 0x5c]                                |         *((r6 + 0x5c)) = r5;
    0x0000368c str r6, [r6, 4]                                   |         *((r6 + 4)) = r6;
                                                                 |     }
                                                                 | label_3:
    0x0000368e movs r3, 1                                        |     r3 = 1;
    0x00003690 str r3, [r4, 0x60]                                |     *((r4 + 0x60)) = r3;
                                                                 | label_4:
    0x00003692 mov r0, r4                                        |     r0 = r4;
    0x00003694 add sp, 0x14                                      |     
    0x00003696 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_12:
    0x0000369a ldr r1, [sp, 4]                                   |     r1 = s2;
    0x0000369c mov r0, r5                                        |     r0 = r5;
    0x0000369e str r3, [sp]                                      |     *(sp) = r3;
    0x000036a0 blx 0x2400                                        |     strcmp (r0, r1);
    0x000036a4 ldr r3, [sp]                                      |     r3 = *(sp);
                                                                 |     if (r0 == 0) {
    0x000036a6 cbz r0, 0x36c4                                    |         goto label_15;
                                                                 |     }
    0x000036a8 ldr r2, [r3, 0x14]                                |     r2 = *((r3 + 0x14));
    0x000036aa ldr r3, [pc, 0x110]                               |     
    0x000036ac ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x000036ae ldrb r1, [r4, 0x10]                               |     r1 = *((r4 + 0x10));
    0x000036b0 ldr.w r3, [sb, r3]                                |     r3 = *((sb + r3));
    0x000036b4 cmp r0, 0                                         |     
    0x000036b6 it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x000036b8 moveq r0, r5                                      |         r0 = r5;
                                                                 |     }
    0x000036ba ldr r3, [r3]                                      |     
    0x000036bc ldr r3, [r3, 0x18]                                |     r3 = *(0x37d6);
    0x000036be blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x000036c0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000036c2 beq 0x3630                                        |         goto label_0;
                                                                 |     }
                                                                 | label_15:
    0x000036c4 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x000036c8 beq 0x3750                                        |         goto label_16;
                                                                 |     }
    0x000036ca ldr.w r3, [sl, 4]                                 |     r3 = *((sl + 4));
    0x000036ce str r3, [r4, 4]                                   |     *((r4 + 4)) = r3;
    0x000036d0 str.w r4, [sl, 4]                                 |     __asm ("str.w r4, [sl, 4]");
                                                                 | label_7:
    0x000036d4 movs r3, 0                                        |     r3 = 0;
    0x000036d6 mov fp, r6                                        |     
    0x000036d8 mov sl, r4                                        |     sl = r4;
    0x000036da strd r3, r3, [r4, 0x58]                           |     __asm ("strd r3, r3, [r4, 0x58]");
    0x000036de b 0x363e                                          |     goto label_1;
                                                                 | label_14:
    0x000036e0 ldr r4, [r4, 4]                                   |     r4 = *((r4 + 4));
    0x000036e2 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x000036e4 bne 0x3658                                        |         goto label_2;
                                                                 |     }
                                                                 | label_13:
    0x000036e6 cmp.w r8, 1                                       |     
                                                                 |     if (r8 < 1) {
    0x000036ea bls 0x3716                                        |         goto label_17;
                                                                 |     }
    0x000036ec ldr r2, [pc, 0xc8]                                |     r2 = *(0x37b8);
    0x000036ee ldr r3, [pc, 0xd0]                                |     
    0x000036f0 ldr.w r2, [sb, r2]                                |     r2 = *((sb + r2));
    0x000036f4 add r3, pc                                        |     r3 = 0x6eba;
    0x000036f6 ldr.w r0, [r3, 0x800]                             |     r0 = *(0x76ba);
    0x000036fa ldr r3, [r2]                                      |     r3 = *(0x37b8);
    0x000036fc mov r2, r7                                        |     r2 = r7;
    0x000036fe ldr r1, [r3, 8]                                   |     r1 = *(0x37c0);
    0x00003700 movs r3, 1                                        |     r3 = 1;
    0x00003702 bl 0x37e0                                         |     r0 = fcn_000037e0 (r0, r1, r2, r3);
    0x00003706 cmp r0, 0                                         |     
    0x00003708 it eq                                             |     
                                                                 |     if (r0 == 0) {
    0x0000370a cmpeq r8, 3                                       |         __asm ("cmpeq r8, 3");
                                                                 |     }
    0x0000370e mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r0 == 0) {
    0x00003710 beq 0x377a                                        |         goto label_18;
                                                                 |     }
    0x00003712 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00003714 bne 0x368e                                        |         goto label_3;
                                                                 |     }
                                                                 | label_17:
    0x00003716 mov r0, r7                                        |     r0 = r7;
    0x00003718 bl 0x2f44                                         |     fcn_00002f44 (r0);
                                                                 | label_8:
    0x0000371c movs r4, 0                                        |     r4 = 0;
    0x0000371e b 0x3692                                          |     goto label_4;
                                                                 | label_11:
    0x00003720 ldr.w r4, [r8]                                    |     r4 = *(r8);
    0x00003724 b 0x363a                                          |     goto label_5;
                                                                 | label_9:
    0x00003726 ldr r1, [pc, 0x9c]                                |     
    0x00003728 mov r0, r7                                        |     r0 = r7;
    0x0000372a add r1, pc                                        |     r1 = 0x6ef4;
    0x0000372c blx 0x2400                                        |     r0 = strcmp (r0, r1);
                                                                 |     if (r0 != 0) {
    0x00003730 cbz r0, 0x375a                                    |         
    0x00003732 ldr r1, [pc, 0x94]                                |         
    0x00003734 mov r0, r7                                        |         r0 = r7;
    0x00003736 add r1, pc                                        |         r1 = 0x6f04;
    0x00003738 blx 0x2400                                        |         r0 = strcmp (r0, r1);
                                                                 |         if (r0 == 0) {
    0x0000373c cbz r0, 0x3760                                    |             goto label_19;
                                                                 |         }
    0x0000373e ldr r1, [pc, 0x8c]                                |         
    0x00003740 mov r0, r7                                        |         r0 = r7;
    0x00003742 add r1, pc                                        |         r1 = 0x6f14;
    0x00003744 blx 0x2400                                        |         r0 = strcmp (r0, r1);
                                                                 |         if (r0 != 0) {
    0x00003748 cbnz r0, 0x3766                                   |             goto label_20;
                                                                 |         }
    0x0000374a ldr r7, [pc, 0x84]                                |         
    0x0000374c add r7, pc                                        |         r7 = 0x6f22;
    0x0000374e b 0x35d4                                          |         goto label_6;
                                                                 | label_16:
    0x00003750 ldr r2, [sp, 8]                                   |         r2 = var_8h_2;
    0x00003752 ldr r3, [r2]                                      |         r3 = *(r2);
    0x00003754 str r4, [r2]                                      |         *(r2) = r4;
    0x00003756 str r3, [r4, 4]                                   |         *((r4 + 4)) = r3;
    0x00003758 b 0x36d4                                          |         goto label_7;
                                                                 |     }
    0x0000375a ldr r7, [pc, 0x78]                                |     
    0x0000375c add r7, pc                                        |     r7 = 0x6f36;
    0x0000375e b 0x35d4                                          |     goto label_6;
                                                                 | label_19:
    0x00003760 ldr r7, [pc, 0x74]                                |     
    0x00003762 add r7, pc                                        |     r7 = 0x6f3e;
    0x00003764 b 0x35d4                                          |     goto label_6;
                                                                 | label_20:
    0x00003766 mov r0, r7                                        |     r0 = r7;
    0x00003768 bl 0x2a68                                         |     fcn_00002a68 (r0);
    0x0000376c cmp.w r8, 3                                       |     
    0x00003770 it ne                                             |     
                                                                 |     if (r8 == 3) {
    0x00003772 cmpne r0, 0                                       |         __asm ("cmpne r0, 0");
                                                                 |         goto label_21;
                                                                 |     }
                                                                 |     if (r8 == 3) {
                                                                 | label_21:
    0x00003774 beq.w 0x35d4                                      |         goto label_6;
                                                                 |     }
    0x00003778 b 0x371c                                          |     goto label_8;
                                                                 | label_18:
    0x0000377a ldr r3, [pc, 0x40]                                |     
    0x0000377c ldr.w r3, [sb, r3]                                |     r3 = *((sb + r3));
    0x00003780 ldr r3, [r3]                                      |     r3 = *(0x37be);
    0x00003782 ldr r4, [r3, 0x14]                                |     r4 = *(0x37d2);
    0x00003784 blx 0x26f8                                        |     r0 = fcn_000026f8 ();
    0x00003788 ldr r0, [r0]                                      |     r0 = *(r0);
    0x0000378a blx 0x264c                                        |     vfprintf_chk ()
    0x0000378e ldr r1, [pc, 0x4c]                                |     
    0x00003790 mov r3, r0                                        |     r3 = r0;
    0x00003792 mov r2, r7                                        |     r2 = r7;
    0x00003794 movs r0, 2                                        |     r0 = 2;
    0x00003796 add r1, pc                                        |     r1 = 0x6f78;
    0x00003798 blx r4                                            |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0000379a nop                                               |     
    0x0000379c ldr r6, [r5]                                      |     r6 = *(r5);
    0x0000379e movs r0, r0                                       |     
    0x000037a0 cmp lr, pc                                        |     
    0x000037a2 movs r0, r0                                       |     
    0x000037a4 cmp ip, ip                                        |     
    0x000037a6 movs r0, r0                                       |     
    0x000037a8 cmp lr, fp                                        |     
    0x000037aa movs r0, r0                                       |     
    0x000037ac lsls r0, r4, 7                                    |     r0 = r4 << 7;
    0x000037ae movs r0, r0                                       |     
    0x000037b0 lsls r0, r0, 8                                    |     r0 <<= 8;
    0x000037b2 movs r0, r0                                       |     
    0x000037b4 cmp sl, r7                                        |     
    0x000037b6 movs r0, r0                                       |     
    0x000037b8 lsls r0, r1, 8                                    |     r0 = r1 << 8;
    0x000037ba movs r0, r0                                       |     
    0x000037bc lsls r4, r1, 7                                    |     r4 = r1 << 7;
    0x000037be movs r0, r0                                       |     
    0x000037c0 ldr r0, [r3, 0x10]                                |     r0 = *((r3 + 0x10));
    0x000037c2 movs r0, r0                                       |     
    0x000037c4 add sl, r3                                        |     sl += r3;
    0x000037c6 movs r0, r0                                       |     
    0x000037c8 add lr, r2                                        |     lr += r2;
    0x000037ca movs r0, r0                                       |     
    0x000037cc add sl, r2                                        |     sl += r2;
    0x000037ce movs r0, r0                                       |     
    0x000037d0 add r4, ip                                        |     r4 += ip;
    0x000037d2 movs r0, r0                                       |     
    0x000037d4 add r4, sl                                        |     r4 += sl;
    0x000037d6 movs r0, r0                                       |     
    0x000037d8 add r6, sb                                        |     r6 += sb;
    0x000037da movs r0, r0                                       |     
    0x000037dc add r6, r8                                        |     r6 += r8;
    0x000037de movs r0, r0                                       |     
                                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libxtables.so.12.6.0 @ 0x3c48 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) sym.xtables_find_target_revision ()          | void xtables_find_target_revision (int16_t arg1, int16_t arg3, int16_t arg4) {
                                                         |     r0 = arg1;
                                                         |     r2 = arg3;
                                                         |     r3 = arg4;
    0x00003c48 mvnsmi lr, sp, lsr 18                     |     __asm ("mvnsmi lr, sp, lsr 18");
    0x00003c4c mov r6, r0                                |     r6 = r0;
    0x00003c4e ldr r5, [pc, 0x4c]                        |     
    0x00003c50 mov r7, r3                                |     r7 = r3;
    0x00003c52 mov r4, r2                                |     r4 = r2;
    0x00003c54 add r5, pc                                |     r5 = 0x78f6;
                                                         |     if (r2 == 0) {
    0x00003c56 cbz r2, 0x3c8e                            |         goto label_2;
                                                         |     }
                                                         | label_0:
    0x00003c58 ldr r3, [pc, 0x44]                        |     r3 = *(0x3ca0);
    0x00003c5a ldr r3, [r5, r3]                          |     r3 = *((r5 + r3));
    0x00003c5c ldr.w r8, [r3]                            |     r8 = *(0x3ca0);
                                                         |     do {
    0x00003c60 ldrb r2, [r4, 0x10]                       |         r2 = *((r4 + 0x10));
    0x00003c62 mov r0, r6                                |         r0 = r6;
    0x00003c64 cmp r2, r7                                |         
                                                         |         if (r2 == r7) {
    0x00003c66 beq 0x3c88                                |             goto label_3;
                                                         |         }
    0x00003c68 ldr r4, [r4, 4]                           |         r4 = *((r4 + 4));
                                                         |         if (r4 == 0) {
    0x00003c6a cbz r4, 0x3c82                            |             goto label_1;
                                                         |         }
    0x00003c6c ldr r1, [r4, 8]                           |         r1 = *((r4 + 8));
    0x00003c6e ldrh r5, [r4, 0x12]                       |         r5 = *((r4 + 0x12));
    0x00003c70 blx 0x2400                                |         r0 = strcmp (r0, r1);
                                                         |         if (r0 != 0) {
    0x00003c74 cbnz r0, 0x3c82                           |             goto label_1;
                                                         |         }
    0x00003c76 ldrb.w r3, [r8, 0xc]                      |         r3 = *((r8 + 0xc));
    0x00003c7a cmp r5, 0                                 |         
    0x00003c7c it ne                                     |         
                                                         |         if (r5 != 0) {
    0x00003c7e cmpne r3, r5                              |             __asm ("cmpne r3, r5");
                                                         |         }
    0x00003c80 beq 0x3c60                                |         
                                                         |     } while (r5 == 0);
                                                         | label_1:
    0x00003c82 movs r0, 0                                |     r0 = 0;
    0x00003c84 pop.w {r4, r5, r6, r7, r8, pc}            |     
                                                         | label_3:
    0x00003c88 mov r0, r4                                |     r0 = r4;
    0x00003c8a pop.w {r4, r5, r6, r7, r8, pc}            |     
    0x00003c8c strh r0, [r6, 0xe]                        |     *((r6 + 0xe)) = r0;
                                                         | label_2:
    0x00003c8e blx 0x27e8                                |     r0 = fcn_000027e8 ();
    0x00003c92 mov r4, r0                                |     r4 = r0;
    0x00003c94 cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x00003c96 bne 0x3c58                                |         goto label_0;
                                                         |     }
    0x00003c98 b 0x3c82                                  |     goto label_1;
                                                         | }

[*] Function fprintf used 7 times libxtables.so.12.6.0