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

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


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

    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libxtables.so.12.2.0 @ 0x4aa0 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.00004aa0 ()                      | void fcn_00004aa0 (char * arg1, int32_t arg2) {
                                                 |     int32_t var_4h;
                                                 |     void * s;
                                                 |     int32_t var_ch;
                                                 |     int32_t var_10h;
                                                 |     int32_t var_2ch;
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
    0x00004aa0 push {r4, r5, r6, r7, lr}         |     
    0x00004aa4 sub sp, sp, 0x2c                  |     
    0x00004aa8 mov r7, r0                        |     r7 = r0;
    0x00004aac mov r6, r1                        |     r6 = r1;
    0x00004ab0 bl 0x2220                         |     r0 = fcn_00002220 ();
    0x00004ab4 subs r4, r0, 0                    |     r4 = r0 - 0;
                                                 |     if (r4 == r0) {
    0x00004ab8 bne 0x4af4                        |         
    0x00004abc mov r0, r7                        |         r0 = r7;
    0x00004ac0 bl 0x2598                         |         r0 = getnetbyname ();
    0x00004ac4 cmp r0, 0                         |         
                                                 |         if (r0 == 0) {
    0x00004ac8 beq 0x4b20                        |             goto label_3;
                                                 |         }
    0x00004acc ldr r3, [r0, 8]                   |         r3 = *((r0 + 8));
    0x00004ad0 cmp r3, 2                         |         
                                                 |         if (r3 != 2) {
    0x00004ad4 bne 0x4b20                        |             goto label_3;
                                                 |         }
    0x00004ad8 ldr r0, [r0, 0xc]                 |         r0 = *((r0 + 0xc));
    0x00004adc bl 0x8a00                         |         fcn_00008a00 (r0);
    0x00004ae0 ldr r4, [pc, 0xf0]                |         
    0x00004ae4 add r4, pc, r4                    |         r4 = pc + r4;
    0x00004ae8 add r4, r4, 0x430                 |         r4 = 0x5004;
    0x00004aec str r0, [r4, 8]                   |         *((r4 + 8)) = r0;
    0x00004af0 add r4, r4, 8                     |         r4 += 8;
                                                 |     }
    0x00004af4 mov r0, 4                         |     r0 = 4;
    0x00004af8 bl 0x2400                         |     fcn_00002400 ();
    0x00004afc mov r2, 4                         |     r2 = 4;
    0x00004b00 mov r1, r4                        |     r1 = r4;
    0x00004b04 mov r5, r0                        |     r5 = r0;
    0x00004b08 bl 0x22a4                         |     memcpy (r0, r1, r2);
    0x00004b0c mov r3, 1                         |     r3 = 1;
    0x00004b10 str r3, [r6]                      |     *(r6) = r3;
                                                 | label_0:
    0x00004b14 mov r0, r5                        |     r0 = r5;
    0x00004b18 add sp, sp, 0x2c                  |     
    0x00004b1c pop {r4, r5, r6, r7, pc}          |     
                                                 | label_3:
    0x00004b20 add r4, sp, 8                     |     r4 += s;
    0x00004b24 mov r2, 0x20                      |     r2 = 0x20;
    0x00004b28 mov r1, 0                         |     r1 = 0;
    0x00004b2c mov r0, r4                        |     r0 = r4;
    0x00004b30 bl 0x24cc                         |     memset (r0, r1, r2);
    0x00004b34 mov r3, 2                         |     r3 = 2;
    0x00004b38 str r3, [sp, 0xc]                 |     var_ch = r3;
    0x00004b3c mov r1, 0                         |     r1 = 0;
    0x00004b40 mov r3, 3                         |     r3 = 3;
    0x00004b44 str r3, [sp, 0x10]                |     var_10h = r3;
    0x00004b48 str r1, [r6]                      |     *(r6) = r1;
    0x00004b4c add r3, sp, 4                     |     r3 += var_4h;
    0x00004b50 mov r2, r4                        |     r2 = r4;
    0x00004b54 mov r0, r7                        |     r0 = r7;
    0x00004b58 bl 0x2574                         |     r0 = getaddrinfo ();
    0x00004b5c cmp r0, 0                         |     
                                                 |     if (r0 != 0) {
    0x00004b60 ldreq r3, [sp, 4]                 |         r3 = var_4h;
                                                 |     }
                                                 |     if (r0 == 0) {
    0x00004b64 beq 0x4b7c                        |         goto label_4;
                                                 |     }
                                                 | label_1:
    0x00004b68 mov r0, r7                        |     r0 = r7;
    0x00004b6c bl 0x26b0                         |     entry0 (r0);
                                                 |     do {
    0x00004b70 ldr r3, [r3, 0x1c]                |         r3 = *((r3 + 0x1c));
    0x00004b74 add r0, r0, 1                     |         r0++;
    0x00004b78 str r0, [r6]                      |         *(r6) = r0;
                                                 | label_4:
    0x00004b7c cmp r3, 0                         |         
    0x00004b80 ldr r0, [r6]                      |         r0 = *(r6);
    0x00004b84 bne 0x4b70                        |         
                                                 |     } while (r3 != 0);
    0x00004b88 mov r1, 4                         |     r1 = 4;
    0x00004b8c bl 0x225c                         |     fcn_0000225c ();
    0x00004b90 ldr r4, [sp, 4]                   |     r4 = var_4h;
    0x00004b94 mov r5, r0                        |     r5 = r0;
    0x00004b98 mov r3, r0                        |     r3 = r0;
                                                 | label_2:
    0x00004b9c cmp r4, 0                         |     
                                                 |     if (r4 != 0) {
    0x00004ba0 bne 0x4bb8                        |         goto label_5;
                                                 |     }
    0x00004ba4 ldr r0, [sp, 4]                   |     r0 = var_4h;
    0x00004ba8 bl 0x2364                         |     freeaddrinfo ();
    0x00004bac cmp r5, 0                         |     
                                                 |     if (r5 != 0) {
    0x00004bb0 bne 0x4b14                        |         goto label_0;
                                                 |     }
    0x00004bb4 b 0x4b68                          |     goto label_1;
                                                 | label_5:
    0x00004bb8 ldr r1, [r4, 0x14]                |     r1 = *((r4 + 0x14));
    0x00004bbc mov r2, 4                         |     r2 = 4;
    0x00004bc0 mov r0, r3                        |     r0 = r3;
    0x00004bc4 add r1, r1, r2                    |     r1 += r2;
    0x00004bc8 bl 0x22a4                         |     memcpy (r0, r1, r2);
    0x00004bcc ldr r4, [r4, 0x1c]                |     r4 = *((r4 + 0x1c));
    0x00004bd0 add r3, r0, 4                     |     r3 = r0 + 4;
    0x00004bd4 b 0x4b9c                          |     goto label_2;
                                                 | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libxtables.so.12.2.0 @ 0x541c */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.0000541c ()                  | void fcn_0000541c (char * arg1, int32_t arg2) {
                                             |     int32_t var_4h;
                                             |     void * s;
                                             |     int32_t var_ch;
                                             |     int32_t var_10h;
                                             |     int32_t var_2ch;
                                             |     r0 = arg1;
                                             |     r1 = arg2;
    0x0000541c push {r4, r5, r6, r7, lr}     |     
    0x00005420 sub sp, sp, 0x2c              |     
    0x00005424 mov r7, r0                    |     r7 = r0;
    0x00005428 mov r5, r1                    |     r5 = r1;
    0x0000542c bl 0x2358                     |     r0 = fcn_00002358 ();
    0x00005430 subs r6, r0, 0                |     r6 = r0 - 0;
                                             |     if (r6 != r0) {
    0x00005434 beq 0x5464                    |         
    0x00005438 mov r0, 0x10                  |         r0 = 0x10;
    0x0000543c bl 0x2400                     |         fcn_00002400 ();
    0x00005440 mov r2, 0x10                  |         r2 = 0x10;
    0x00005444 mov r1, r6                    |         r1 = r6;
    0x00005448 mov r4, r0                    |         r4 = r0;
    0x0000544c bl 0x22a4                     |         memcpy (r0, r1, r2);
    0x00005450 mov r3, 1                     |         r3 = 1;
    0x00005454 str r3, [r5]                  |         *(r5) = r3;
                                             | label_0:
    0x00005458 mov r0, r4                    |         r0 = r4;
    0x0000545c add sp, sp, 0x2c              |         
    0x00005460 pop {r4, r5, r6, r7, pc}      |         
                                             |     }
    0x00005464 add r4, sp, 8                 |     r4 += s;
    0x00005468 mov r2, 0x20                  |     r2 = 0x20;
    0x0000546c mov r1, r6                    |     r1 = r6;
    0x00005470 mov r0, r4                    |     r0 = r4;
    0x00005474 bl 0x24cc                     |     memset (r0, r1, r2);
    0x00005478 mov r3, 0xa                   |     r3 = 0xa;
    0x0000547c str r3, [sp, 0xc]             |     var_ch = r3;
    0x00005480 mov r3, 3                     |     r3 = 3;
    0x00005484 str r3, [sp, 0x10]            |     var_10h = r3;
    0x00005488 str r6, [r5]                  |     *(r5) = r6;
    0x0000548c add r3, sp, 4                 |     r3 += var_4h;
    0x00005490 mov r2, r4                    |     r2 = r4;
    0x00005494 mov r1, r6                    |     r1 = r6;
    0x00005498 mov r0, r7                    |     r0 = r7;
    0x0000549c bl 0x2574                     |     r0 = getaddrinfo ();
    0x000054a0 cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x000054a4 ldreq r3, [sp, 4]             |         r3 = var_4h;
                                             |     }
                                             |     if (r0 == 0) {
    0x000054a8 beq 0x54c0                    |         goto label_3;
                                             |     }
                                             | label_1:
    0x000054ac mov r0, r7                    |     r0 = r7;
    0x000054b0 bl 0x26b0                     |     entry0 (r0);
                                             |     do {
    0x000054b4 ldr r3, [r3, 0x1c]            |         r3 = *((r3 + 0x1c));
    0x000054b8 add r0, r0, 1                 |         r0++;
    0x000054bc str r0, [r5]                  |         *(r5) = r0;
                                             | label_3:
    0x000054c0 cmp r3, 0                     |         
    0x000054c4 ldr r0, [r5]                  |         r0 = *(r5);
    0x000054c8 bne 0x54b4                    |         
                                             |     } while (r3 != 0);
    0x000054cc mov r1, 0x10                  |     r1 = 0x10;
    0x000054d0 bl 0x225c                     |     fcn_0000225c ();
    0x000054d4 ldr r5, [sp, 4]               |     r5 = var_4h;
    0x000054d8 mov r4, r0                    |     r4 = r0;
    0x000054dc mov r3, r0                    |     r3 = r0;
                                             | label_2:
    0x000054e0 cmp r5, 0                     |     
                                             |     if (r5 != 0) {
    0x000054e4 bne 0x54fc                    |         goto label_4;
                                             |     }
    0x000054e8 ldr r0, [sp, 4]               |     r0 = var_4h;
    0x000054ec bl 0x2364                     |     freeaddrinfo ();
    0x000054f0 cmp r4, 0                     |     
                                             |     if (r4 != 0) {
    0x000054f4 bne 0x5458                    |         goto label_0;
                                             |     }
    0x000054f8 b 0x54ac                      |     goto label_1;
                                             | label_4:
    0x000054fc ldr r1, [r5, 0x14]            |     r1 = *((r5 + 0x14));
    0x00005500 mov r0, r3                    |     r0 = r3;
    0x00005504 mov r2, 0x10                  |     r2 = 0x10;
    0x00005508 add r1, r1, 8                 |     r1 += 8;
    0x0000550c bl 0x22a4                     |     memcpy (r0, r1, r2);
    0x00005510 ldr r5, [r5, 0x1c]            |     r5 = *((r5 + 0x1c));
    0x00005514 add r3, r0, 0x10              |     r3 = r0 + 0x10;
    0x00005518 b 0x54e0                      |     goto label_2;
                                             | }
    ; assembly                           | /* r2dec pseudo code output */
                                         | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libxtables.so.12.2.0 @ 0x6588 */
                                         | #include <stdint.h>
                                         |  
    ; (fcn) fcn.00006588 ()              | void fcn_00006588 (int32_t arg1) {
                                         |     r0 = arg1;
    0x00006588 push {r4, r5, r6, lr}     |     
    0x0000658c ldr r6, [r0, 8]           |     r6 = *((r0 + 8));
    0x00006590 add r5, r0, 0x28          |     r5 = r0 + 0x28;
    0x00006594 mov r4, r0                |     r4 = r0;
    0x00006598 bl 0x642c                 |     fcn_0000642c (r0);
    0x0000659c mov r2, 0x10              |     r2 = 0x10;
    0x000065a0 mov r1, 0xff              |     r1 = 0xff;
    0x000065a4 mov r0, r5                |     r0 = r5;
    0x000065a8 bl 0x24cc                 |     memset (r0, r1, r2);
    0x000065ac ldrb r3, [r4, 0x38]       |     r3 = *((r4 + 0x38));
    0x000065b0 cmp r3, 0                 |     
                                         |     if (r3 != 0) {
    0x000065b4 bne 0x6624                |         goto label_2;
                                         |     }
    0x000065b8 str r3, [r4, 0x34]        |     *((r4 + 0x34)) = r3;
    0x000065bc str r3, [r4, 0x30]        |     *((r4 + 0x30)) = r3;
    0x000065c0 str r3, [r4, 0x2c]        |     *((r4 + 0x2c)) = r3;
    0x000065c4 str r3, [r4, 0x28]        |     *((r4 + 0x28)) = r3;
                                         |     do {
                                         | label_0:
    0x000065c8 ldr r0, [r4, 0x28]        |         r0 = *((r4 + 0x28));
    0x000065cc bl 0x8a00                 |         fcn_00008a00 (r0);
    0x000065d0 str r0, [r4, 0x28]        |         *((r4 + 0x28)) = r0;
    0x000065d4 ldr r0, [r4, 0x2c]        |         r0 = *((r4 + 0x2c));
    0x000065d8 bl 0x8a00                 |         fcn_00008a00 (r0);
    0x000065dc str r0, [r4, 0x2c]        |         *((r4 + 0x2c)) = r0;
    0x000065e0 ldr r0, [r4, 0x30]        |         r0 = *((r4 + 0x30));
    0x000065e4 bl 0x8a00                 |         fcn_00008a00 (r0);
    0x000065e8 str r0, [r4, 0x30]        |         *((r4 + 0x30)) = r0;
    0x000065ec ldr r0, [r4, 0x34]        |         r0 = *((r4 + 0x34));
    0x000065f0 bl 0x8a00                 |         fcn_00008a00 (r0);
    0x000065f4 str r0, [r4, 0x34]        |         *((r4 + 0x34)) = r0;
    0x000065f8 ldr r3, [r6, 0x14]        |         r3 = *((r6 + 0x14));
    0x000065fc tst r3, 8                 |         
    0x00006600 popeq {r4, r5, r6, pc}    |         
    0x00006604 ldr r3, [r4, 8]           |         r3 = *((r4 + 8));
    0x00006608 ldr r0, [r4, 0xc]         |         r0 = *((r4 + 0xc));
    0x0000660c ldr r3, [r3, 0x18]        |         r3 = *((r3 + 0x18));
    0x00006610 mov r1, r5                |         r1 = r5;
    0x00006614 mov r2, 0x10              |         r2 = 0x10;
    0x00006618 add r0, r0, r3            |         r0 += r3;
    0x0000661c pop {r4, r5, r6, lr}      |         
    0x00006620 b 0x22a4                  |         void (*0x22a4)() ();
                                         | label_2:
    0x00006624 cmp r3, 0x20              |         
                                         |         if (r3 > 0x20) {
    0x00006628 bhi 0x6650                |             goto label_3;
                                         |         }
    0x0000662c ldr r2, [r4, 0x28]        |         r2 = *((r4 + 0x28));
    0x00006630 rsb r3, r3, 0x20          |         r3 = 0x20 - r3;
    0x00006634 lsl r3, r2, r3            |         r3 = r2 << r3;
    0x00006638 str r3, [r4, 0x28]        |         *((r4 + 0x28)) = r3;
    0x0000663c mov r3, 0                 |         r3 = 0;
    0x00006640 str r3, [r4, 0x34]        |         *((r4 + 0x34)) = r3;
    0x00006644 str r3, [r4, 0x30]        |         *((r4 + 0x30)) = r3;
    0x00006648 str r3, [r4, 0x2c]        |         *((r4 + 0x2c)) = r3;
    0x0000664c b 0x65c8                  |         
                                         |     } while (1);
                                         | label_3:
    0x00006650 cmp r3, 0x40              |     
                                         |     if (r3 <= 0x40) {
    0x00006654 bhi 0x6678                |         
    0x00006658 ldr r2, [r4, 0x2c]        |         r2 = *((r4 + 0x2c));
    0x0000665c rsb r3, r3, 0x40          |         r3 = 0x40 - r3;
    0x00006660 lsl r3, r2, r3            |         r3 = r2 << r3;
    0x00006664 str r3, [r4, 0x2c]        |         *((r4 + 0x2c)) = r3;
    0x00006668 mov r3, 0                 |         r3 = 0;
    0x0000666c str r3, [r4, 0x34]        |         *((r4 + 0x34)) = r3;
    0x00006670 str r3, [r4, 0x30]        |         *((r4 + 0x30)) = r3;
    0x00006674 b 0x65c8                  |         goto label_0;
                                         |     }
    0x00006678 cmp r3, 0x60              |     
                                         |     if (r3 <= 0x60) {
    0x0000667c bhi 0x669c                |         
    0x00006680 ldr r2, [r4, 0x30]        |         r2 = *((r4 + 0x30));
    0x00006684 rsb r3, r3, 0x60          |         r3 = 0x60 - r3;
    0x00006688 lsl r3, r2, r3            |         r3 = r2 << r3;
    0x0000668c str r3, [r4, 0x30]        |         *((r4 + 0x30)) = r3;
    0x00006690 mov r3, 0                 |         r3 = 0;
                                         | label_1:
    0x00006694 str r3, [r4, 0x34]        |         *((r4 + 0x34)) = r3;
    0x00006698 b 0x65c8                  |         goto label_0;
                                         |     }
    0x0000669c cmp r3, 0x80              |     
                                         |     if (r3 > 0x80) {
    0x000066a0 bhi 0x65c8                |         goto label_0;
                                         |     }
    0x000066a4 ldr r2, [r4, 0x34]        |     r2 = *((r4 + 0x34));
    0x000066a8 rsb r3, r3, 0x80          |     r3 = 0x80 - r3;
    0x000066ac lsl r3, r2, r3            |     r3 = r2 << r3;
    0x000066b0 b 0x6694                  |     goto label_1;
                                         | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libxtables.so.12.2.0 @ 0x3afc */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) sym.xtables_find_match ()                        | void xtables_find_match (int32_t arg_0h, int32_t arg1, int32_t arg2) {
                                                             |     int32_t var_0h;
                                                             |     int32_t var_4h;
                                                             |     int32_t var_ch;
                                                             |     int32_t var_10h;
                                                             |     int32_t var_14h;
                                                             |     int32_t var_1ch;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00003afc push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00003b00 ldr r7, [pc, 0x42c]                           |     r7 = *(0x3f30);
    0x00003b04 sub sp, sp, 0x1c                              |     
    0x00003b08 mov r6, r0                                    |     r6 = r0;
    0x00003b0c mov fp, r1                                    |     
    0x00003b10 mov sb, r2                                    |     sb = r2;
    0x00003b14 bl 0x2610                                     |     strlen (r0);
    0x00003b18 add r7, pc, r7                                |     r7 = pc + r7;
    0x00003b1c cmp r0, 0x1c                                  |     
                                                             |     if (r0 < 0x1c) {
    0x00003b20 bls 0x3b4c                                    |         goto label_7;
                                                             |     }
    0x00003b24 ldr r3, [pc, 0x40c]                           |     
    0x00003b28 ldr r1, [pc, 0x40c]                           |     r1 = *(0x3f38);
    0x00003b2c ldr r3, [r7, r3]                              |     r3 = *((r7 + r3));
    0x00003b30 mov r2, r6                                    |     r2 = r6;
    0x00003b34 ldr r3, [r3]                                  |     r3 = *(0x3f34);
    0x00003b38 add r1, pc, r1                                |     r1 = pc + r1;
    0x00003b3c ldr r4, [r3, 0x14]                            |     r4 = *(0x3f48);
    0x00003b40 mov r3, 0x1c                                  |     r3 = 0x1c;
                                                             |     do {
    0x00003b44 mov r0, 2                                     |         r0 = 2;
    0x00003b48 blx r4                                        |         uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                             | label_7:
    0x00003b4c ldr r1, [pc, 0x3ec]                           |         r1 = *(0x3f3c);
    0x00003b50 mov r0, r6                                    |         r0 = r6;
    0x00003b54 add r1, pc, r1                                |         r1 = pc + r1;
    0x00003b58 bl 0x2508                                     |         r0 = strcmp (r0, r1);
    0x00003b5c cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00003b60 beq 0x3c9c                                    |             goto label_8;
                                                             |         }
    0x00003b64 ldr r1, [pc, 0x3d8]                           |         r1 = *(0x3f40);
    0x00003b68 mov r0, r6                                    |         r0 = r6;
    0x00003b6c add r1, pc, r1                                |         r1 = pc + r1;
    0x00003b70 bl 0x2508                                     |         r0 = strcmp (r0, r1);
    0x00003b74 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00003b78 beq 0x3ca8                                    |             goto label_9;
                                                             |         }
    0x00003b7c ldr r4, [pc, 0x3c4]                           |         r4 = *(0x3f44);
    0x00003b80 mov r0, r6                                    |         r0 = r6;
    0x00003b84 add r4, pc, r4                                |         r4 = pc + r4;
    0x00003b88 mov r1, r4                                    |         r1 = r4;
    0x00003b8c bl 0x2508                                     |         r0 = strcmp (r0, r1);
    0x00003b90 cmp r0, 0                                     |         
                                                             |         if (r0 != 0) {
    0x00003b94 moveq r6, r4                                  |             r6 = r4;
                                                             |         }
                                                             | label_0:
    0x00003b98 ldr r3, [pc, 0x3ac]                           |         r3 = *(0x3f48);
    0x00003b9c ldr r8, [r7, r3]                              |         r8 = *((r7 + r3));
                                                             | label_1:
    0x00003ba0 ldr r5, [r8]                                  |         r5 = *(r8);
    0x00003ba4 cmp r5, 0                                     |         
                                                             |         if (r5 != 0) {
    0x00003ba8 bne 0x3cb4                                    |             goto label_10;
                                                             |         }
    0x00003bac ldr r3, [pc, 0x39c]                           |         r3 = *(0x3f4c);
    0x00003bb0 ldr r3, [r7, r3]                              |         r3 = *((r7 + r3));
    0x00003bb4 ldr r4, [r3]                                  |         r4 = *(0x3f4c);
                                                             | label_5:
    0x00003bb8 cmp r4, 0                                     |         
                                                             |         if (r4 != 0) {
    0x00003bbc beq 0x3c10                                    |             
    0x00003bc0 ldrh r2, [r4, 0x12]                           |             r2 = *((r4 + 0x12));
    0x00003bc4 ldr r1, [r4, 8]                               |             r1 = *((r4 + 8));
    0x00003bc8 mov r0, r6                                    |             r0 = r6;
    0x00003bcc bl 0x2974                                     |             r0 = fcn_00002974 (r0, r1);
    0x00003bd0 cmp r0, 0                                     |             
                                                             |             if (r0 == 0) {
    0x00003bd4 beq 0x3eb4                                    |                 goto label_11;
                                                             |             }
    0x00003bd8 ldr r3, [r4, 0x58]                            |             r3 = *((r4 + 0x58));
    0x00003bdc cmp r3, 0                                     |             
                                                             |             if (r3 == 0) {
    0x00003be0 beq 0x3c10                                    |                 goto label_12;
                                                             |             }
    0x00003be4 mov r0, 0x64                                  |             r0 = 0x64;
    0x00003be8 bl 0x2400                                     |             fcn_00002400 ();
    0x00003bec mov r2, 0x64                                  |             r2 = 0x64;
    0x00003bf0 mov r1, r4                                    |             r1 = r4;
    0x00003bf4 bl 0x22a4                                     |             memcpy (r0, r1, r2);
    0x00003bf8 mov r2, 0                                     |             r2 = 0;
    0x00003bfc mov r3, r0                                    |             r3 = r0;
    0x00003c00 mov r4, r0                                    |             r4 = r0;
    0x00003c04 str r2, [r0, 0x50]                            |             *((r0 + 0x50)) = r2;
    0x00003c08 str r2, [r0, 0x5c]                            |             *((r0 + 0x5c)) = r2;
    0x00003c0c str r0, [r3, 4]                               |             *((r3 + 4)) = r0;
                                                             |         }
                                                             | label_12:
    0x00003c10 adds r3, fp, 0                                |         r3 += arg_0h;
                                                             |         if (r3 == arg_0h) {
    0x00003c14 movne r3, 1                                   |             r3 = 1;
                                                             |         }
    0x00003c18 cmp r4, 0                                     |         
                                                             |         if (r4 == 0) {
    0x00003c1c movne r3, 0                                   |             r3 = 0;
                                                             |         }
    0x00003c20 cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x00003c24 beq 0x3ebc                                    |             goto label_13;
                                                             |         }
    0x00003c28 cmp fp, 1                                     |         
                                                             |         if (fp != 1) {
    0x00003c2c moveq r4, 0                                   |             r4 = 0;
                                                             |         }
                                                             |         if (fp == 1) {
    0x00003c30 beq 0x3ebc                                    |             goto label_13;
                                                             |         }
    0x00003c34 ldr r3, [pc, 0x318]                           |         r3 = "_";
    0x00003c38 ldr r0, [pc, 0x318]                           |         
    0x00003c3c ldr r3, [r7, r3]                              |         r3 = *((r7 + r3));
    0x00003c40 add r0, pc, r0                                |         r0 = pc + r0;
    0x00003c44 ldr r1, [r3]                                  |         
    0x00003c48 mov r2, r6                                    |         r2 = r6;
    0x00003c4c mov r3, 0                                     |         r3 = 0;
    0x00003c50 ldr r1, [r1, 8]                               |         r1 = *(0x3f58);
    0x00003c54 ldr r0, [r0]                                  |         r0 = *(0x3f54);
    0x00003c58 bl 0x394c                                     |         r0 = fcn_0000394c (r0, r1);
    0x00003c5c cmp r0, 0                                     |         
    0x00003c60 cmpeq fp, 3                                   |         __asm ("cmpeq fp, 3");
    0x00003c64 mov r4, r0                                    |         r4 = r0;
                                                             |         if (r0 != 0) {
    0x00003c68 bne 0x3ebc                                    |             goto label_13;
                                                             |         }
    0x00003c6c ldr r3, [pc, 0x2c4]                           |         
    0x00003c70 ldr r3, [r7, r3]                              |         r3 = *((r7 + r3));
    0x00003c74 ldr r3, [r3]                                  |         r3 = *(0x3f34);
    0x00003c78 ldr r4, [r3, 0x14]                            |         r4 = *(0x3f48);
    0x00003c7c bl 0x25a4                                     |         r0 = errno_location ();
    0x00003c80 ldr r0, [r0]                                  |         r0 = *(r0);
    0x00003c84 bl 0x2214                                     |         strerror (r0);
    0x00003c88 ldr r1, [pc, 0x2cc]                           |         r1 = *(0x3f58);
    0x00003c8c mov r2, r6                                    |         r2 = r6;
    0x00003c90 add r1, pc, r1                                |         r1 = pc + r1;
    0x00003c94 mov r3, r0                                    |         r3 = r0;
    0x00003c98 b 0x3b44                                      |         
                                                             |     } while (1);
                                                             | label_8:
    0x00003c9c ldr r6, [pc, 0x2bc]                           |     r6 = *(0x3f5c);
    0x00003ca0 add r6, pc, r6                                |     r6 = pc + r6;
    0x00003ca4 b 0x3b98                                      |     goto label_0;
                                                             | label_9:
    0x00003ca8 ldr r6, [pc, 0x2b4]                           |     r6 = *(0x3f60);
    0x00003cac add r6, pc, r6                                |     r6 = pc + r6;
    0x00003cb0 b 0x3b98                                      |     goto label_0;
                                                             | label_10:
    0x00003cb4 ldr r4, [r5, 8]                               |     r4 = *((r5 + 8));
    0x00003cb8 ldrh r2, [r5, 0x12]                           |     r2 = *((r5 + 0x12));
    0x00003cbc mov r1, r4                                    |     r1 = r4;
    0x00003cc0 mov r0, r6                                    |     r0 = r6;
    0x00003cc4 bl 0x2974                                     |     r0 = fcn_00002974 (r0, r1);
    0x00003cc8 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00003ccc beq 0x3eac                                    |         goto label_14;
                                                             |     }
    0x00003cd0 ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x00003cd4 ldr r0, [r5, 0xc]                             |     r0 = *((r5 + 0xc));
    0x00003cd8 str r3, [r8]                                  |     *(r8) = r3;
    0x00003cdc ldr r3, [pc, 0x270]                           |     r3 = "_";
    0x00003ce0 cmp r0, 0                                     |     
    0x00003ce4 ldr r3, [r7, r3]                              |     r3 = *((r7 + r3));
                                                             |     if (r0 != 0) {
    0x00003ce8 moveq r0, r4                                  |         r0 = r4;
                                                             |     }
    0x00003cec str r3, [sp, 0x14]                            |     var_14h = r3;
    0x00003cf0 ldr r2, [r3]                                  |     
    0x00003cf4 ldr r3, [pc, 0x23c]                           |     
    0x00003cf8 ldr r2, [r2, 0x10]                            |     r2 = *(0x3f60);
    0x00003cfc ldr r3, [r7, r3]                              |     r3 = *((r7 + r3));
    0x00003d00 ldrb r1, [r5, 0x10]                           |     r1 = *((r5 + 0x10));
    0x00003d04 str r3, [sp, 0xc]                             |     var_ch = r3;
    0x00003d08 ldr r3, [r3]                                  |     
    0x00003d0c ldr r3, [r3, 0x18]                            |     r3 = *(0x3f4c);
    0x00003d10 blx r3                                        |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00003d14 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00003d18 streq r5, [r8]                                |         *(r8) = r5;
                                                             |     }
                                                             |     if (r0 == 0) {
    0x00003d1c beq 0x3eac                                    |         goto label_14;
                                                             |     }
    0x00003d20 mov r2, 0                                     |     r2 = 0;
    0x00003d24 mov r1, 1                                     |     r1 = 1;
    0x00003d28 ldr r0, [r5, 8]                               |     r0 = *((r5 + 8));
    0x00003d2c bl 0x2514                                     |     fcn_00002514 ();
    0x00003d30 mov r3, 0                                     |     r3 = 0;
    0x00003d34 mov r4, r0                                    |     r4 = r0;
                                                             |     do {
    0x00003d38 cmp r4, 0                                     |         
                                                             |         if (r4 == 0) {
    0x00003d3c bne 0x3d78                                    |             
    0x00003d40 cmp r3, 0                                     |             
                                                             |             if (r3 == 0) {
    0x00003d44 movne r4, r3                                  |                 r4 = r3;
                                                             |             }
                                                             |             if (r3 != 0) {
    0x00003d48 bne 0x3ea0                                    |                 goto label_15;
                                                             |             }
    0x00003d4c ldr r3, [pc, 0x1fc]                           |             r3 = *(0x3f4c);
    0x00003d50 ldr r3, [r7, r3]                              |             r3 = *((r7 + r3));
    0x00003d54 ldr r4, [r3]                                  |             r4 = *(0x3f4c);
                                                             | label_3:
    0x00003d58 cmp r4, 0                                     |             
                                                             |             if (r4 != 0) {
    0x00003d5c bne 0x3e80                                    |                 goto label_16;
                                                             |             }
                                                             | label_4:
    0x00003d60 str r4, [r5, 4]                               |             *((r5 + 4)) = r4;
    0x00003d64 str r5, [r3]                                  |             *(r3) = r5;
    0x00003d68 mov r3, 0                                     |             r3 = 0;
    0x00003d6c str r3, [r5, 0x58]                            |             *((r5 + 0x58)) = r3;
    0x00003d70 str r3, [r5, 0x5c]                            |             *((r5 + 0x5c)) = r3;
    0x00003d74 b 0x3ba0                                      |             goto label_1;
                                                             |         }
    0x00003d78 ldrb r3, [r4, 0x10]                           |         r3 = *((r4 + 0x10));
    0x00003d7c ldrh r1, [r5, 0x12]                           |         r1 = *((r5 + 0x12));
    0x00003d80 str r3, [sp, 0x10]                            |         var_10h = r3;
    0x00003d84 ldr r3, [r5, 0xc]                             |         r3 = *((r5 + 0xc));
    0x00003d88 ldr sl, [r4, 0xc]                             |         sl = *((r4 + 0xc));
    0x00003d8c ldrh r2, [r4, 0x12]                           |         r2 = *((r4 + 0x12));
    0x00003d90 str r1, [sp, 4]                               |         var_4h = r1;
    0x00003d94 ldrb r1, [r5, 0x10]                           |         r1 = *((r5 + 0x10));
    0x00003d98 adds r3, r3, 0                                |         r3 += 0;
                                                             |         if (r3 == r3) {
    0x00003d9c movne r3, 1                                   |             r3 = 1;
                                                             |         }
    0x00003da0 adds r0, sl, 0                                |         r0 = sl + 0;
    0x00003da4 str r1, [sp]                                  |         *(sp) = r1;
                                                             |         if (r0 == sl) {
    0x00003da8 movne r0, 1                                   |             r0 = 1;
                                                             |         }
    0x00003dac ldr r1, [sp, 0x10]                            |         r1 = var_10h;
    0x00003db0 bl 0x29c4                                     |         r0 = fcn_000029c4 (r0, r1, r2, r3);
    0x00003db4 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00003db8 bne 0x3dec                                    |             
    0x00003dbc ldr r3, [sp, 0xc]                             |             r3 = var_ch;
    0x00003dc0 ldr r1, [pc, 0x1a0]                           |             r1 = *(0x3f64);
    0x00003dc4 ldr r2, [r3]                                  |             r2 = *(r3);
    0x00003dc8 ldr r3, [pc, 0x19c]                           |             r3 = *(0x3f68);
    0x00003dcc ldr r2, [r2, 4]                               |             r2 = *((r2 + 4));
    0x00003dd0 ldr r0, [r7, r3]                              |             r0 = *((r7 + r3));
    0x00003dd4 add r1, pc, r1                                |             r1 = pc + r1;
    0x00003dd8 ldr r3, [r5, 8]                               |             r3 = *((r5 + 8));
    0x00003ddc ldr r0, [r0]                                  |             r0 = *(r0);
    0x00003de0 bl 0x23e8                                     |             fprintf (r0, r1, r2, r3);
    0x00003de4 mov r0, 1                                     |             r0 = 1;
    0x00003de8 bl 0x25b0                                     |             exit (r0);
                                                             |         }
    0x00003dec cmp sl, 0                                     |         
                                                             |         if (sl != 0) {
    0x00003df0 ldreq sl, [r4, 8]                             |             sl = *((r4 + 8));
                                                             |         }
    0x00003df4 cmp r0, 0                                     |         
                                                             |         if (r0 <= 0) {
    0x00003df8 ble 0x3f24                                    |             goto label_17;
                                                             |         }
    0x00003dfc ldr r3, [sp, 0x14]                            |         r3 = var_14h;
    0x00003e00 ldr r1, [sp, 0x10]                            |         r1 = var_10h;
    0x00003e04 ldr r2, [r3]                                  |         r2 = *(r3);
    0x00003e08 ldr r3, [sp, 0xc]                             |         r3 = var_ch;
    0x00003e0c ldr r2, [r2, 0x10]                            |         r2 = *((r2 + 0x10));
    0x00003e10 ldr r3, [r3]                                  |         r3 = *(r3);
    0x00003e14 mov r0, sl                                    |         r0 = sl;
    0x00003e18 ldr r3, [r3, 0x18]                            |         r3 = *((r3 + 0x18));
    0x00003e1c blx r3                                        |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00003e20 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00003e24 bne 0x3e44                                    |             
    0x00003e28 ldr r3, [pc, 0x120]                           |             r3 = *(0x3f4c);
    0x00003e2c ldr r3, [r7, r3]                              |             r3 = *((r7 + r3));
    0x00003e30 ldr r2, [r3]                                  |             r2 = *(0x3f4c);
                                                             | label_2:
    0x00003e34 cmp r4, r2                                    |             
                                                             |             if (r4 != r2) {
    0x00003e38 bne 0x3e74                                    |                 goto label_18;
                                                             |             }
    0x00003e3c ldr r2, [r4, 4]                               |             r2 = *((r4 + 4));
    0x00003e40 str r2, [r3]                                  |             *(r3) = r2;
                                                             |         }
    0x00003e44 ldr sl, [r4, 4]                               |         sl = *((r4 + 4));
    0x00003e48 cmp sl, 0                                     |         
                                                             |         if (sl == 0) {
    0x00003e4c beq 0x3ea0                                    |             goto label_15;
                                                             |         }
    0x00003e50 ldrh r2, [sl, 0x12]                           |         r2 = *((sl + 0x12));
    0x00003e54 ldr r1, [sl, 8]                               |         r1 = *((sl + 8));
    0x00003e58 ldr r0, [r5, 8]                               |         r0 = *((r5 + 8));
    0x00003e5c bl 0x2974                                     |         fcn_00002974 (r0, r1);
    0x00003e60 mov r3, r4                                    |         r3 = r4;
    0x00003e64 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00003e68 beq 0x3ea0                                    |             goto label_15;
                                                             |         }
    0x00003e6c mov r4, sl                                    |         r4 = sl;
    0x00003e70 b 0x3d38                                      |         
                                                             |     } while (1);
                                                             | label_18:
    0x00003e74 add r3, r2, 4                                 |     r3 = r2 + 4;
    0x00003e78 ldr r2, [r2, 4]                               |     r2 = *((r2 + 4));
    0x00003e7c b 0x3e34                                      |     goto label_2;
                                                             | label_16:
    0x00003e80 add r3, r4, 4                                 |     r3 = r4 + 4;
    0x00003e84 ldr r4, [r4, 4]                               |     r4 = *((r4 + 4));
    0x00003e88 b 0x3d58                                      |     goto label_3;
                                                             |     do {
    0x00003e8c add r3, r2, 4                                 |         r3 = r2 + 4;
    0x00003e90 ldr r2, [r2, 4]                               |         r2 = *((r2 + 4));
                                                             | label_6:
    0x00003e94 cmp r4, r2                                    |         
    0x00003e98 bne 0x3e8c                                    |         
                                                             |     } while (r4 != r2);
    0x00003e9c b 0x3d60                                      |     goto label_4;
                                                             | label_15:
    0x00003ea0 add r3, r4, 4                                 |     r3 = r4 + 4;
    0x00003ea4 ldr r4, [r4, 4]                               |     r4 = *((r4 + 4));
    0x00003ea8 b 0x3d60                                      |     goto label_4;
                                                             | label_14:
    0x00003eac add r8, r5, 4                                 |     r8 = r5 + 4;
    0x00003eb0 b 0x3ba0                                      |     goto label_1;
                                                             | label_11:
    0x00003eb4 ldr r4, [r4, 4]                               |     r4 = *((r4 + 4));
    0x00003eb8 b 0x3bb8                                      |     goto label_5;
                                                             | label_13:
    0x00003ebc cmp r4, 0                                     |     
    0x00003ec0 cmpne sb, 0                                   |     __asm ("cmpne sb, 0");
                                                             |     if (r4 == 0) {
    0x00003ec4 beq 0x3ef4                                    |         goto label_19;
                                                             |     }
    0x00003ec8 mov r0, 0xc                                   |     r0 = 0xc;
    0x00003ecc bl 0x2400                                     |     fcn_00002400 ();
    0x00003ed0 mov r8, 1                                     |     r8 = 1;
    0x00003ed4 mov r7, r0                                    |     r7 = r0;
                                                             |     do {
    0x00003ed8 ldr r5, [sb]                                  |         r5 = *(sb);
    0x00003edc cmp r5, 0                                     |         
                                                             |         if (r5 == 0) {
    0x00003ee0 bne 0x3f00                                    |             
    0x00003ee4 str r4, [r7, 4]                               |             *((r7 + 4)) = r4;
    0x00003ee8 strb r5, [r7, 8]                              |             *((r7 + 8)) = r5;
    0x00003eec str r5, [r7]                                  |             *(r7) = r5;
    0x00003ef0 str r7, [sb]                                  |             *(sb) = r7;
                                                             | label_19:
    0x00003ef4 mov r0, r4                                    |             r0 = r4;
    0x00003ef8 add sp, sp, 0x1c                              |             
    0x00003efc pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |             
                                                             |         }
    0x00003f00 ldr r3, [r5, 4]                               |         r3 = *((r5 + 4));
    0x00003f04 mov r0, r6                                    |         r0 = r6;
    0x00003f08 ldrh r2, [r3, 0x12]                           |         r2 = *((r3 + 0x12));
    0x00003f0c ldr r1, [r3, 8]                               |         r1 = *((r3 + 8));
    0x00003f10 bl 0x2974                                     |         fcn_00002974 (r0, r1);
    0x00003f14 mov sb, r5                                    |         sb = r5;
    0x00003f18 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00003f1c strbne r8, [r5, 8]                            |             *((r5 + 8)) = r8;
                                                             |         }
    0x00003f20 b 0x3ed8                                      |         
                                                             |     } while (1);
                                                             | label_17:
    0x00003f24 ldr r3, [pc, 0x24]                            |     r3 = *(0x3f4c);
    0x00003f28 ldr r3, [r7, r3]                              |     r3 = *((r7 + r3));
    0x00003f2c ldr r2, [r3]                                  |     r2 = *(0x3f4c);
    0x00003f30 b 0x3e94                                      |     goto label_6;
                                                             | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libxtables.so.12.2.0 @ 0x3f70 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) sym.xtables_find_match_revision ()           | void xtables_find_match_revision (int32_t arg1) {
                                                         |     r0 = arg1;
    0x00003f70 push {r4, r5, r6, lr}                     |     
    0x00003f74 subs r4, r2, 0                            |     r4 = r2 - 0;
    0x00003f78 mov r5, r0                                |     r5 = r0;
    0x00003f7c mov r6, r3                                |     r6 = r3;
                                                         |     if (r4 != r2) {
    0x00003f80 bne 0x3f90                                |         goto label_0;
                                                         |     }
    0x00003f84 bl 0x2514                                 |     r0 = fcn_00002514 ();
    0x00003f88 subs r4, r0, 0                            |     r4 = r0 - 0;
                                                         |     if (r4 == r0) {
                                                         |         do {
    0x00003f8c beq 0x3fc0                                |             goto label_1;
                                                         |         }
                                                         | label_0:
    0x00003f90 ldrb r3, [r4, 0x10]                       |         r3 = *((r4 + 0x10));
    0x00003f94 cmp r3, r6                                |         
                                                         |         if (r3 == r6) {
    0x00003f98 beq 0x3fc4                                |             goto label_2;
                                                         |         }
    0x00003f9c ldr r4, [r4, 4]                           |         r4 = *((r4 + 4));
    0x00003fa0 cmp r4, 0                                 |         
                                                         |         if (r4 == 0) {
    0x00003fa4 beq 0x3fc0                                |             goto label_1;
                                                         |         }
    0x00003fa8 ldrh r2, [r4, 0x12]                       |         r2 = *((r4 + 0x12));
    0x00003fac ldr r1, [r4, 8]                           |         r1 = *((r4 + 8));
    0x00003fb0 mov r0, r5                                |         r0 = r5;
    0x00003fb4 bl 0x2974                                 |         r0 = fcn_00002974 (r0, r1);
    0x00003fb8 cmp r0, 0                                 |         
    0x00003fbc b 0x3f8c                                  |         
                                                         |     } while (1);
                                                         | label_1:
    0x00003fc0 mov r4, 0                                 |     r4 = 0;
                                                         | label_2:
    0x00003fc4 mov r0, r4                                |     r0 = r4;
    0x00003fc8 pop {r4, r5, r6, pc}                      |     
                                                         | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libxtables.so.12.2.0 @ 0x3540 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) sym.xtables_find_target ()                       | void xtables_find_target (int32_t arg1, int32_t arg2) {
                                                             |     int32_t var_0h;
                                                             |     int32_t var_4h;
                                                             |     char * s2;
                                                             |     int32_t var_14h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00003540 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00003544 ldrb r3, [r0]                                 |     r3 = *(r0);
    0x00003548 ldr r6, [pc, 0x3b0]                           |     r6 = *(0x38fc);
    0x0000354c cmp r3, 0                                     |     
    0x00003550 add r6, pc, r6                                |     r6 = pc + r6;
    0x00003554 sub sp, sp, 0x14                              |     
    0x00003558 mov sl, r1                                    |     sl = r1;
                                                             |     if (r3 == 0) {
    0x0000355c beq 0x3684                                    |         goto label_7;
                                                             |     }
    0x00003560 ldr r1, [pc, 0x39c]                           |     r1 = *(0x3900);
    0x00003564 mov r7, r0                                    |     r7 = r0;
    0x00003568 add r1, pc, r1                                |     r1 = pc + r1;
    0x0000356c bl 0x2508                                     |     r0 = strcmp (r0, r1);
    0x00003570 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00003574 beq 0x3690                                    |         goto label_8;
                                                             |     }
    0x00003578 ldr r1, [pc, 0x388]                           |     r1 = *(0x3904);
    0x0000357c mov r0, r7                                    |     r0 = r7;
    0x00003580 add r1, pc, r1                                |     r1 = pc + r1;
    0x00003584 bl 0x2508                                     |     r0 = strcmp (r0, r1);
    0x00003588 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0000358c beq 0x369c                                    |         goto label_9;
                                                             |     }
    0x00003590 ldr r1, [pc, 0x374]                           |     r1 = *(0x3908);
    0x00003594 mov r0, r7                                    |     r0 = r7;
    0x00003598 add r1, pc, r1                                |     r1 = pc + r1;
    0x0000359c bl 0x2508                                     |     r0 = strcmp (r0, r1);
    0x000035a0 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000035a4 beq 0x36a8                                    |         goto label_10;
                                                             |     }
    0x000035a8 ldr r1, [pc, 0x360]                           |     r1 = *(0x390c);
    0x000035ac mov r0, r7                                    |     r0 = r7;
    0x000035b0 add r1, pc, r1                                |     r1 = pc + r1;
    0x000035b4 bl 0x2508                                     |     r0 = strcmp (r0, r1);
    0x000035b8 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000035bc beq 0x36b4                                    |         goto label_11;
                                                             |     }
                                                             |     do {
                                                             | label_0:
    0x000035c0 ldr r3, [pc, 0x34c]                           |         r3 = *(0x3910);
    0x000035c4 ldr r8, [r6, r3]                              |         r8 = *((r6 + r3));
    0x000035c8 ldr r3, [pc, 0x348]                           |         r3 = *(0x3914);
    0x000035cc add r3, pc, r3                                |         r3 = pc + r3;
    0x000035d0 str r3, [sp, 0xc]                             |         s2 = r3;
                                                             | label_1:
    0x000035d4 ldr r4, [r8]                                  |         r4 = *(r8);
    0x000035d8 cmp r4, 0                                     |         
                                                             |         if (r4 != 0) {
    0x000035dc bne 0x36c0                                    |             goto label_12;
                                                             |         }
    0x000035e0 ldr r3, [pc, 0x334]                           |         r3 = *(0x3918);
    0x000035e4 ldr r3, [r6, r3]                              |         r3 = *((r6 + r3));
    0x000035e8 ldr r4, [r3]                                  |         r4 = *(0x3918);
                                                             | label_5:
    0x000035ec cmp r4, 0                                     |         
                                                             |         if (r4 != 0) {
    0x000035f0 bne 0x38b8                                    |             goto label_13;
                                                             |         }
                                                             | label_4:
    0x000035f4 adds r3, sl, 0                                |         r3 = sl + 0;
                                                             |         if (r3 == sl) {
    0x000035f8 movne r3, 1                                   |             r3 = 1;
                                                             |         }
    0x000035fc cmp r4, 0                                     |         
                                                             |         if (r4 == 0) {
    0x00003600 movne r3, 0                                   |             r3 = 0;
                                                             |         }
    0x00003604 cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x00003608 beq 0x38d8                                    |             goto label_14;
                                                             |         }
    0x0000360c cmp sl, 1                                     |         
                                                             |         if (sl != 1) {
    0x00003610 moveq r4, 0                                   |             r4 = 0;
                                                             |         }
                                                             |         if (sl == 1) {
    0x00003614 beq 0x38e4                                    |             goto label_15;
                                                             |         }
    0x00003618 ldr r3, [pc, 0x300]                           |         r3 = *(0x391c);
    0x0000361c ldr r0, [pc, 0x300]                           |         
    0x00003620 ldr r3, [r6, r3]                              |         r3 = *((r6 + r3));
    0x00003624 add r0, pc, r0                                |         r0 = pc + r0;
    0x00003628 ldr r1, [r3]                                  |         
    0x0000362c mov r2, r7                                    |         r2 = r7;
    0x00003630 mov r3, 1                                     |         r3 = 1;
    0x00003634 ldr r1, [r1, 8]                               |         r1 = *(0x3924);
    0x00003638 ldr r0, [r0]                                  |         r0 = *(0x3920);
    0x0000363c bl 0x394c                                     |         r0 = fcn_0000394c (r0, r1);
    0x00003640 cmp r0, 0                                     |         
    0x00003644 cmpeq sl, 3                                   |         __asm ("cmpeq sl, 3");
    0x00003648 mov r4, r0                                    |         r4 = r0;
                                                             |         if (r0 != 0) {
    0x0000364c bne 0x38d8                                    |             goto label_14;
                                                             |         }
    0x00003650 ldr r3, [pc, 0x2d0]                           |         
    0x00003654 ldr r3, [r6, r3]                              |         r3 = *((r6 + r3));
    0x00003658 ldr r3, [r3]                                  |         r3 = *(0x3924);
    0x0000365c ldr r4, [r3, 0x14]                            |         r4 = *(0x3938);
    0x00003660 bl 0x25a4                                     |         r0 = errno_location ();
    0x00003664 ldr r0, [r0]                                  |         r0 = *(r0);
    0x00003668 bl 0x2214                                     |         strerror (r0);
    0x0000366c ldr r1, [pc, 0x2b8]                           |         r1 = *(0x3928);
    0x00003670 mov r2, r7                                    |         r2 = r7;
    0x00003674 add r1, pc, r1                                |         r1 = pc + r1;
    0x00003678 mov r3, r0                                    |         r3 = r0;
    0x0000367c mov r0, 2                                     |         r0 = 2;
    0x00003680 blx r4                                        |         uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                             | label_7:
    0x00003684 ldr r7, [pc, 0x2a4]                           |         r7 = *(0x392c);
    0x00003688 add r7, pc, r7                                |         r7 = pc + r7;
    0x0000368c b 0x35c0                                      |         
                                                             |     } while (1);
                                                             | label_8:
    0x00003690 ldr r7, [pc, 0x29c]                           |     r7 = *(0x3930);
    0x00003694 add r7, pc, r7                                |     r7 = pc + r7;
    0x00003698 b 0x35c0                                      |     goto label_0;
                                                             | label_9:
    0x0000369c ldr r7, [pc, 0x294]                           |     r7 = *(0x3934);
    0x000036a0 add r7, pc, r7                                |     r7 = pc + r7;
    0x000036a4 b 0x35c0                                      |     goto label_0;
                                                             | label_10:
    0x000036a8 ldr r7, [pc, 0x28c]                           |     r7 = *(0x3938);
    0x000036ac add r7, pc, r7                                |     r7 = pc + r7;
    0x000036b0 b 0x35c0                                      |     goto label_0;
                                                             | label_11:
    0x000036b4 ldr r7, [pc, 0x284]                           |     r7 = *(0x393c);
    0x000036b8 add r7, pc, r7                                |     r7 = pc + r7;
    0x000036bc b 0x35c0                                      |     goto label_0;
                                                             | label_12:
    0x000036c0 ldr r5, [r4, 8]                               |     r5 = *((r4 + 8));
    0x000036c4 ldrh r2, [r4, 0x12]                           |     r2 = *((r4 + 0x12));
    0x000036c8 mov r1, r5                                    |     r1 = r5;
    0x000036cc mov r0, r7                                    |     r0 = r7;
    0x000036d0 bl 0x2974                                     |     r0 = fcn_00002974 (r0, r1);
    0x000036d4 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000036d8 beq 0x38b0                                    |         goto label_16;
                                                             |     }
    0x000036dc ldr r3, [r4, 4]                               |     r3 = *((r4 + 4));
    0x000036e0 ldr r1, [sp, 0xc]                             |     r1 = s2;
    0x000036e4 str r3, [r8]                                  |     *(r8) = r3;
    0x000036e8 mov r0, r5                                    |     r0 = r5;
    0x000036ec bl 0x2508                                     |     r0 = strcmp (r0, r1);
    0x000036f0 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000036f4 beq 0x3738                                    |         
    0x000036f8 ldr r3, [pc, 0x220]                           |         r3 = *(0x391c);
    0x000036fc ldr r0, [r4, 0xc]                             |         r0 = *((r4 + 0xc));
    0x00003700 ldr r3, [r6, r3]                              |         r3 = *((r6 + r3));
    0x00003704 cmp r0, 0                                     |         
    0x00003708 ldr r2, [r3]                                  |         
    0x0000370c ldr r3, [pc, 0x214]                           |         
                                                             |         if (r0 != 0) {
    0x00003710 moveq r0, r5                                  |             r0 = r5;
                                                             |         }
    0x00003714 ldr r3, [r6, r3]                              |         r3 = *((r6 + r3));
    0x00003718 ldr r2, [r2, 0x14]                            |         r2 = *(0x3930);
    0x0000371c ldr r3, [r3]                                  |         
    0x00003720 ldrb r1, [r4, 0x10]                           |         r1 = *((r4 + 0x10));
    0x00003724 ldr r3, [r3, 0x18]                            |         r3 = *(0x393c);
    0x00003728 blx r3                                        |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0000372c cmp r0, 0                                     |         
                                                             |         if (r0 != 0) {
    0x00003730 streq r4, [r8]                                |             *(r8) = r4;
                                                             |         }
                                                             |         if (r0 == 0) {
    0x00003734 beq 0x38b0                                    |             goto label_16;
                                                             |         }
                                                             |     }
    0x00003738 mov r1, 1                                     |     r1 = 1;
    0x0000373c ldr r0, [r4, 8]                               |     r0 = *((r4 + 8));
    0x00003740 bl 0x21cc                                     |     fcn_000021cc ();
    0x00003744 mov r3, 0                                     |     r3 = 0;
    0x00003748 mov r5, r0                                    |     r5 = r0;
                                                             |     do {
    0x0000374c cmp r5, 0                                     |         
                                                             |         if (r5 == 0) {
    0x00003750 bne 0x3784                                    |             
    0x00003754 cmp r3, 0                                     |             
                                                             |             if (r3 == 0) {
    0x00003758 movne r5, r3                                  |                 r5 = r3;
                                                             |             }
                                                             |             if (r3 != 0) {
    0x0000375c bne 0x38a4                                    |                 goto label_17;
                                                             |             }
    0x00003760 ldr r3, [pc, 0x1b4]                           |             r3 = *(0x3918);
    0x00003764 ldr r3, [r6, r3]                              |             r3 = *((r6 + r3));
    0x00003768 ldr r5, [r3]                                  |             r5 = *(0x3918);
                                                             | label_3:
    0x0000376c str r5, [r4, 4]                               |             *((r4 + 4)) = r5;
    0x00003770 str r4, [r3]                                  |             *(r3) = r4;
    0x00003774 mov r3, 0                                     |             r3 = 0;
    0x00003778 str r3, [r4, 0x58]                            |             *((r4 + 0x58)) = r3;
    0x0000377c str r3, [r4, 0x5c]                            |             *((r4 + 0x5c)) = r3;
    0x00003780 b 0x35d4                                      |             goto label_1;
                                                             |         }
    0x00003784 ldrh r1, [r4, 0x12]                           |         r1 = *((r4 + 0x12));
    0x00003788 ldr r3, [r4, 0xc]                             |         r3 = *((r4 + 0xc));
    0x0000378c ldr sb, [r5, 0xc]                             |         sb = *((r5 + 0xc));
    0x00003790 ldrb fp, [r5, 0x10]                           |         fp = *((r5 + 0x10));
    0x00003794 ldrh r2, [r5, 0x12]                           |         r2 = *((r5 + 0x12));
    0x00003798 str r1, [sp, 4]                               |         var_4h = r1;
    0x0000379c ldrb r1, [r4, 0x10]                           |         r1 = *((r4 + 0x10));
    0x000037a0 adds r3, r3, 0                                |         r3 += 0;
                                                             |         if (r3 == r3) {
    0x000037a4 movne r3, 1                                   |             r3 = 1;
                                                             |         }
    0x000037a8 adds r0, sb, 0                                |         r0 = sb + 0;
    0x000037ac str r1, [sp]                                  |         *(sp) = r1;
                                                             |         if (r0 == sb) {
    0x000037b0 movne r0, 1                                   |             r0 = 1;
                                                             |         }
    0x000037b4 mov r1, fp                                    |         r1 = fp;
    0x000037b8 bl 0x29c4                                     |         r0 = fcn_000029c4 (r0, r1, r2, r3);
    0x000037bc cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x000037c0 bne 0x37f8                                    |             
    0x000037c4 ldr r3, [pc, 0x15c]                           |             r3 = *(0x3924);
    0x000037c8 ldr r1, [pc, 0x174]                           |             r1 = *(0x3940);
    0x000037cc ldr r3, [r6, r3]                              |             r3 = *((r6 + r3));
    0x000037d0 add r1, pc, r1                                |             r1 = pc + r1;
    0x000037d4 ldr r2, [r3]                                  |             
    0x000037d8 ldr r3, [pc, 0x168]                           |             r3 = *(0x3944);
    0x000037dc ldr r2, [r2, 4]                               |             r2 = *(0x3928);
    0x000037e0 ldr r0, [r6, r3]                              |             r0 = *((r6 + r3));
    0x000037e4 ldr r3, [r4, 8]                               |             r3 = *((r4 + 8));
    0x000037e8 ldr r0, [r0]                                  |             r0 = *(r0);
    0x000037ec bl 0x23e8                                     |             fprintf (r0, r1, r2, r3);
    0x000037f0 mov r0, 1                                     |             r0 = 1;
    0x000037f4 bl 0x25b0                                     |             exit (r0);
                                                             |         }
    0x000037f8 cmp sb, 0                                     |         
                                                             |         if (sb != 0) {
    0x000037fc ldreq sb, [r5, 8]                             |             sb = *((r5 + 8));
                                                             |         }
    0x00003800 cmp r0, 0                                     |         
                                                             |         if (r0 <= 0) {
    0x00003804 ble 0x38f0                                    |             goto label_18;
                                                             |         }
    0x00003808 ldr r3, [pc, 0x110]                           |         r3 = *(0x391c);
    0x0000380c mov r0, sb                                    |         r0 = sb;
    0x00003810 ldr r3, [r6, r3]                              |         r3 = *((r6 + r3));
    0x00003814 ldr r2, [r3]                                  |         
    0x00003818 ldr r3, [pc, 0x108]                           |         
    0x0000381c ldr r2, [r2, 0x14]                            |         r2 = *(0x3930);
    0x00003820 ldr r3, [r6, r3]                              |         r3 = *((r6 + r3));
    0x00003824 ldr r3, [r3]                                  |         
    0x00003828 ldr r3, [r3, 0x18]                            |         r3 = *(0x393c);
    0x0000382c blx r3                                        |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x00003830 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00003834 bne 0x3854                                    |             
    0x00003838 ldr r3, [pc, 0xdc]                            |             r3 = *(0x3918);
    0x0000383c ldr r3, [r6, r3]                              |             r3 = *((r6 + r3));
    0x00003840 ldr r2, [r3]                                  |             r2 = *(0x3918);
                                                             | label_2:
    0x00003844 cmp r5, r2                                    |             
                                                             |             if (r5 != r2) {
    0x00003848 bne 0x3884                                    |                 goto label_19;
                                                             |             }
    0x0000384c ldr r2, [r5, 4]                               |             r2 = *((r5 + 4));
    0x00003850 str r2, [r3]                                  |             *(r3) = r2;
                                                             |         }
    0x00003854 ldr sb, [r5, 4]                               |         sb = *((r5 + 4));
    0x00003858 cmp sb, 0                                     |         
                                                             |         if (sb == 0) {
    0x0000385c beq 0x38a4                                    |             goto label_17;
                                                             |         }
    0x00003860 ldrh r2, [sb, 0x12]                           |         r2 = *((sb + 0x12));
    0x00003864 ldr r1, [sb, 8]                               |         r1 = *((sb + 8));
    0x00003868 ldr r0, [r4, 8]                               |         r0 = *((r4 + 8));
    0x0000386c bl 0x2974                                     |         fcn_00002974 (r0, r1);
    0x00003870 mov r3, r5                                    |         r3 = r5;
    0x00003874 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00003878 beq 0x38a4                                    |             goto label_17;
                                                             |         }
    0x0000387c mov r5, sb                                    |         r5 = sb;
    0x00003880 b 0x374c                                      |         
                                                             |     } while (1);
                                                             | label_19:
    0x00003884 add r3, r2, 4                                 |     r3 = r2 + 4;
    0x00003888 ldr r2, [r2, 4]                               |     r2 = *((r2 + 4));
    0x0000388c b 0x3844                                      |     goto label_2;
                                                             |     do {
    0x00003890 add r3, r2, 4                                 |         r3 = r2 + 4;
    0x00003894 ldr r2, [r2, 4]                               |         r2 = *((r2 + 4));
                                                             | label_6:
    0x00003898 cmp r5, r2                                    |         
    0x0000389c bne 0x3890                                    |         
                                                             |     } while (r5 != r2);
    0x000038a0 b 0x376c                                      |     goto label_3;
                                                             | label_17:
    0x000038a4 add r3, r5, 4                                 |     r3 = r5 + 4;
    0x000038a8 ldr r5, [r5, 4]                               |     r5 = *((r5 + 4));
    0x000038ac b 0x376c                                      |     goto label_3;
                                                             | label_16:
    0x000038b0 add r8, r4, 4                                 |     r8 = r4 + 4;
    0x000038b4 b 0x35d4                                      |     goto label_1;
                                                             | label_13:
    0x000038b8 ldrh r2, [r4, 0x12]                           |     r2 = *((r4 + 0x12));
    0x000038bc ldr r1, [r4, 8]                               |     r1 = *((r4 + 8));
    0x000038c0 mov r0, r7                                    |     r0 = r7;
    0x000038c4 bl 0x2974                                     |     r0 = fcn_00002974 (r0, r1);
    0x000038c8 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000038cc bne 0x35f4                                    |         goto label_4;
                                                             |     }
    0x000038d0 ldr r4, [r4, 4]                               |     r4 = *((r4 + 4));
    0x000038d4 b 0x35ec                                      |     goto label_5;
                                                             | label_14:
    0x000038d8 cmp r4, 0                                     |     
                                                             |     if (r4 == 0) {
    0x000038dc movne r3, 1                                   |         r3 = 1;
                                                             |     }
                                                             |     if (r4 == 0) {
    0x000038e0 strne r3, [r4, 0x60]                          |         *((r4 + 0x60)) = r3;
                                                             |     }
                                                             | label_15:
    0x000038e4 mov r0, r4                                    |     r0 = r4;
    0x000038e8 add sp, sp, 0x14                              |     
    0x000038ec pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |     
                                                             | label_18:
    0x000038f0 ldr r3, [pc, 0x24]                            |     r3 = *(0x3918);
    0x000038f4 ldr r3, [r6, r3]                              |     r3 = *((r6 + r3));
    0x000038f8 ldr r2, [r3]                                  |     r2 = *(0x3918);
    0x000038fc b 0x3898                                      |     goto label_6;
                                                             | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libxtables.so.12.2.0 @ 0x3fcc */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) sym.xtables_find_target_revision ()      | void xtables_find_target_revision (int32_t arg1) {
                                                     |     r0 = arg1;
    0x00003fcc push {r4, r5, r6, lr}                 |     
    0x00003fd0 subs r4, r2, 0                        |     r4 = r2 - 0;
    0x00003fd4 mov r5, r0                            |     r5 = r0;
    0x00003fd8 mov r6, r3                            |     r6 = r3;
                                                     |     if (r4 != r2) {
    0x00003fdc bne 0x3fec                            |         goto label_0;
                                                     |     }
    0x00003fe0 bl 0x21cc                             |     r0 = fcn_000021cc ();
    0x00003fe4 subs r4, r0, 0                        |     r4 = r0 - 0;
                                                     |     do {
                                                     |         if (r4 == r0) {
    0x00003fe8 beq 0x401c                            |             goto label_1;
                                                     |         }
                                                     | label_0:
    0x00003fec ldrb r3, [r4, 0x10]                   |         r3 = *((r4 + 0x10));
    0x00003ff0 cmp r3, r6                            |         
                                                     |         if (r3 == r6) {
    0x00003ff4 beq 0x4020                            |             goto label_2;
                                                     |         }
    0x00003ff8 ldr r4, [r4, 4]                       |         r4 = *((r4 + 4));
    0x00003ffc cmp r4, 0                             |         
                                                     |         if (r4 == 0) {
    0x00004000 beq 0x401c                            |             goto label_1;
                                                     |         }
    0x00004004 ldrh r2, [r4, 0x12]                   |         r2 = *((r4 + 0x12));
    0x00004008 ldr r1, [r4, 8]                       |         r1 = *((r4 + 8));
    0x0000400c mov r0, r5                            |         r0 = r5;
    0x00004010 bl 0x2974                             |         r0 = fcn_00002974 (r0, r1);
    0x00004014 cmp r0, 0                             |         
    0x00004018 b 0x3fe8                              |         
                                                     |     } while (1);
                                                     | label_1:
    0x0000401c mov r4, 0                             |     r4 = 0;
                                                     | label_2:
    0x00004020 mov r0, r4                            |     r0 = r4;
    0x00004024 pop {r4, r5, r6, pc}                  |     
                                                     | }

[*] Function mmap used 1 times libxtables.so.12.2.0