[*] Binary protection state of libxt_hashlimit.so

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


[*] Function printf tear down of libxt_hashlimit.so

    ; 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/xtables/libxt_hashlimit.so @ 0x1af4 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00001af4 ()                                      | void fcn_00001af4 (int32_t arg_38h, int32_t arg1, int32_t arg2) {
                                                                 |     int32_t var_0h;
                                                                 |     int32_t var_8h;
                                                                 |     int32_t var_8h_2;
                                                                 |     int32_t var_14h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00001af4 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}         |     
    0x00001af8 mov r6, r0                                        |     r6 = r0;
    0x00001afc mov r7, r1                                        |     r7 = r1;
    0x00001b00 mov sb, r3                                        |     sb = r3;
    0x00001b04 orrs r3, r6, r7                                   |     r3 = r6 | r7;
    0x00001b08 sub sp, sp, 0x14                                  |     
    0x00001b0c mov r8, r2                                        |     r8 = r2;
                                                                 |     if (r3 != r6) {
    0x00001b10 mvneq r0, 0                                       |         r0 = ~0;
                                                                 |     }
                                                                 |     if (r3 != r6) {
    0x00001b14 moveq r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (r3 != r6) {
    0x00001b18 beq 0x1b30                                        |         
    0x00001b1c mov r2, r6                                        |         r2 = r6;
    0x00001b20 mov r3, r7                                        |         r3 = r7;
    0x00001b24 mvn r0, 0                                         |         r0 = ~0;
    0x00001b28 mov r1, 0                                         |         r1 = 0;
    0x00001b2c bl 0x36d0                                         |         r0 = fcn_000036d0 (r0, r1);
                                                                 |     }
    0x00001b30 subs r2, r0, 1                                    |     r2 = r0 - 1;
    0x00001b34 sbc r3, r1, 0                                     |     __asm ("sbc r3, r1, 0");
    0x00001b38 lsl r5, r3, 4                                     |     r5 = r3 << 4;
    0x00001b3c ldr sl, [pc, 0x164]                               |     sl = *(0x00001ca8);
    0x00001b40 orr r5, r5, r2, lsr 28                            |     r5 |= (r2 >> 28);
    0x00001b44 mov fp, 0                                         |     
    0x00001b48 lsl r4, r2, 4                                     |     r4 = r2 << 4;
    0x00001b4c cmp r5, fp                                        |     
    0x00001b50 cmpeq r4, sl                                      |     __asm ("cmpeq r4, sl");
                                                                 |     if (r5 >= fp) {
    0x00001b54 bls 0x1b90                                        |         
    0x00001b58 bic r1, r2, 0xf0000000                            |         r1 = BIT_MASK (r2, 0xf0000000);
    0x00001b5c lsr r1, r1, 0x10                                  |         r1 >>= 0x10;
    0x00001b60 lsl r1, r1, 0x10                                  |         r1 <<= 0x10;
    0x00001b64 add r1, r1, 1                                     |         r1++;
    0x00001b68 mvn r0, 0                                         |         r0 = ~0;
    0x00001b6c strd r2, r3, [sp, 8]                              |         __asm ("strd r2, r3, [var_8h]");
    0x00001b70 bl 0x3534                                         |         fcn_00003534 (r0, r1);
    0x00001b74 mov r1, 0                                         |         r1 = 0;
    0x00001b78 cmp r7, r1                                        |         
    0x00001b7c ldrd r2, r3, [sp, 8]                              |         __asm ("ldrd r2, r3, [var_8h]");
    0x00001b80 cmpeq r6, r0                                      |         __asm ("cmpeq r6, r0");
                                                                 |         if (r7 == r1) {
    0x00001b84 bne 0x1ba8                                        |             
    0x00001b88 mov r3, 0                                         |             r3 = 0;
    0x00001b8c b 0x1bd0                                          |             
                                                                 |         } else {
    0x00001b90 ldr r0, [pc, 0x114]                               |             r0 = *(0x1ca8);
    0x00001b94 mov r1, 0                                         |             r1 = 0;
    0x00001b98 cmp r5, r1                                        |             
    0x00001b9c cmpeq r4, r0                                      |             __asm ("cmpeq r4, r0");
                                                                 |             if (r5 > r1) {
    0x00001ba0 movls r3, 2                                       |                 r3 = 2;
                                                                 |             }
                                                                 |             if (r5 < r1) {
    0x00001ba4 bls 0x1bd0                                        |                 goto label_0;
                                                                 |             }
                                                                 |         }
    0x00001ba8 bic r1, r2, 0xf0000000                            |         r1 = BIT_MASK (r2, 0xf0000000);
    0x00001bac bic r1, r1, 0x3f                                  |         r1 = BIT_MASK (r1, 0x3f);
    0x00001bb0 add r1, r1, 1                                     |         r1++;
    0x00001bb4 mvn r0, 0                                         |         r0 = ~0;
    0x00001bb8 bl 0x3534                                         |         fcn_00003534 (r0, r1);
    0x00001bbc mov r1, 0                                         |         r1 = 0;
    0x00001bc0 cmp r7, r1                                        |         
    0x00001bc4 cmpeq r6, r0                                      |         __asm ("cmpeq r6, r0");
                                                                 |         if (r7 == r1) {
    0x00001bc8 movne r3, 2                                       |             r3 = 2;
                                                                 |         }
                                                                 |         if (r7 == r1) {
    0x00001bcc moveq r3, 1                                       |             r3 = 1;
                                                                 |             goto label_0;
                                                                 |         }
                                                                 |     }
                                                                 | label_0:
    0x00001bd0 ldr r6, [pc, 0xd8]                                |     r6 = *(0x1cac);
    0x00001bd4 mov r0, r4                                        |     r0 = r4;
    0x00001bd8 add r6, pc, r6                                    |     r6 = pc + r6;
    0x00001bdc add r6, r6, r3, lsl 3                             |     r6 += (r3 << 3);
    0x00001be0 ldr r2, [r6, 0xcc]                                |     r2 = *((r6 + 0xcc));
    0x00001be4 mov r3, 0                                         |     r3 = 0;
    0x00001be8 mov r1, r5                                        |     r1 = r5;
    0x00001bec bl 0x36d0                                         |     fcn_000036d0 (r0, r1);
    0x00001bf0 ldr r3, [r6, 0xc8]                                |     r3 = *((r6 + 0xc8));
    0x00001bf4 str r3, [sp]                                      |     *(sp) = r3;
    0x00001bf8 mov r2, r0                                        |     r2 = r0;
    0x00001bfc ldr r0, [pc, 0xb0]                                |     r0 = *(0x1cb0);
    0x00001c00 mov r3, r1                                        |     r3 = r1;
    0x00001c04 add r0, pc, r0                                    |     r0 = pc + r0;
    0x00001c08 bl 0xb7c                                          |     printf (r0, r1, r2, r3)
    0x00001c0c orrs r3, r8, sb                                   |     r3 = r8 | sb;
                                                                 |     if (r3 != r8) {
    0x00001c10 ldreq r0, [pc, 0xa0]                              |         r0 = *((pc + 0xa0));
                                                                 |     }
                                                                 |     if (r3 != r8) {
    0x00001c14 beq 0x1ca0                                        |         
    0x00001c18 mul r2, r8, r5                                    |         r2 = r8 * r5;
    0x00001c1c umull r6, r7, r8, r4                              |         r6:r7 = r8 * r4;
    0x00001c20 mla r3, r4, sb, r2                                |         __asm ("mla r3, r4, sb, r2");
    0x00001c24 ldr r0, [pc, 0x90]                                |         r0 = *(0x1cb8);
    0x00001c28 add r7, r3, r7                                    |         r7 = r3 + r7;
    0x00001c2c ldr r1, [sp, 0x38]                                |         r1 = *(arg_38h);
    0x00001c30 add r0, pc, r0                                    |         r0 = pc + r0;
    0x00001c34 bl 0xb7c                                          |         printf (r0, r1, r2, r3)
    0x00001c38 cmp r7, fp                                        |         
    0x00001c3c cmpeq r6, sl                                      |         __asm ("cmpeq r6, sl");
                                                                 |         if (r7 <= fp) {
    0x00001c40 movhi r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (r7 <= fp) {
    0x00001c44 bhi 0x1c60                                        |             
    0x00001c48 ldr r2, [pc, 0x5c]                                |             r2 = *(0x1ca8);
    0x00001c4c mov r3, 0                                         |             r3 = 0;
    0x00001c50 cmp r7, r3                                        |             
    0x00001c54 cmpeq r6, r2                                      |             __asm ("cmpeq r6, r2");
                                                                 |             if (r7 <= r3) {
    0x00001c58 movhi r3, 1                                       |                 r3 = 1;
                                                                 |             }
                                                                 |             if (r7 <= r3) {
    0x00001c5c movls r3, 2                                       |                 r3 = 2;
                                                                 |                 goto label_1;
                                                                 |             }
                                                                 |         }
                                                                 | label_1:
    0x00001c60 ldr r4, [pc, 0x58]                                |         r4 = *(0x1cbc);
    0x00001c64 mov r0, r6                                        |         r0 = r6;
    0x00001c68 add r4, pc, r4                                    |         r4 = pc + r4;
    0x00001c6c add r4, r4, r3, lsl 3                             |         r4 += (r3 << 3);
    0x00001c70 ldr r2, [r4, 0xcc]                                |         r2 = *((r4 + 0xcc));
    0x00001c74 mov r3, 0                                         |         r3 = 0;
    0x00001c78 mov r1, r7                                        |         r1 = r7;
    0x00001c7c bl 0x36d0                                         |         fcn_000036d0 (r0, r1);
    0x00001c80 ldr r3, [r4, 0xc8]                                |         r3 = *((r4 + 0xc8));
    0x00001c84 str r3, [sp]                                      |         *(sp) = r3;
    0x00001c88 mov r2, r0                                        |         r2 = r0;
    0x00001c8c ldr r0, [pc, 0x30]                                |         r0 = *(0x1cc0);
    0x00001c90 mov r3, r1                                        |         r3 = r1;
    0x00001c94 add r0, pc, r0                                    |         r0 = pc + r0;
    0x00001c98 bl 0xb7c                                          |         printf (r0, r1, r2, r3)
    0x00001c9c ldr r0, [pc, 0x24]                                |         r0 = *(0x1cc4);
                                                                 |     }
    0x00001ca0 add sp, sp, 0x14                                  |     
    0x00001ca4 pop {r4, r5, r6, r7, r8, sb, sl, fp, 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/xtables/libxt_hashlimit.so @ 0x22f0 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000022f0 ()                                      | void fcn_000022f0 (int32_t arg1, int32_t arg2) {
                                                                 |     int32_t var_0h;
                                                                 |     int32_t var_8h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x000022f0 ldr r3, [pc, 0xf0]                                |     r3 = *(0x23e4);
    0x000022f4 cmp r2, 1                                         |     
    0x000022f8 push {r0, r1, r4, r5, r6, r7, r8, sb, sl, lr}     |     
    0x000022fc add r3, pc, r3                                    |     r3 = pc + r3;
    0x00002300 mov r6, r0                                        |     r6 = r0;
    0x00002304 mov r7, r1                                        |     r7 = r1;
                                                                 |     if (r2 != 1) {
    0x00002308 bne 0x234c                                        |         goto label_1;
                                                                 |     }
    0x0000230c ldr r2, [pc, 0xd8]                                |     r2 = *(0x23e8);
    0x00002310 ldr r8, [pc, 0xd8]                                |     r8 = *(0x23ec);
    0x00002314 ldr r5, [r3, r2]                                  |     r5 = *((r3 + r2));
                                                                 |     do {
    0x00002318 orrs r3, r6, r7                                   |         r3 = r6 | r7;
    0x0000231c mov sb, 0                                         |         sb = 0;
                                                                 |         if (r3 == r6) {
    0x00002320 movne r4, 1                                       |             r4 = 1;
                                                                 |         }
                                                                 |         if (r3 != r6) {
    0x00002324 bne 0x2360                                        |             goto label_2;
                                                                 |         }
    0x00002328 ldr r0, [pc, 0xc4]                                |         r0 = *(0x23f0);
    0x0000232c mov r2, 0                                         |         r2 = 0;
    0x00002330 ldr r3, [pc, 0xc0]                                |         r3 = *(0x23f4);
    0x00002334 add r0, pc, r0                                    |         r0 = pc + r0;
    0x00002338 bl 0xb7c                                          |         printf (r0, r1, r2, r3)
    0x0000233c mov r2, 0                                         |         r2 = 0;
                                                                 | label_0:
    0x00002340 mov r0, r2                                        |         r0 = r2;
    0x00002344 add sp, sp, 8                                     |         
    0x00002348 pop {r4, r5, r6, r7, r8, sb, sl, pc}              |         
                                                                 | label_1:
    0x0000234c ldr r5, [pc, 0xa8]                                |         
    0x00002350 ldr r8, [pc, 0xa8]                                |         r8 = *(0x23fc);
    0x00002354 add r5, pc, r5                                    |         r5 = pc + r5;
    0x00002358 add r5, r5, 0xe0                                  |         r5 = 0x24d8;
    0x0000235c b 0x2318                                          |         
                                                                 |     } while (1);
                                                                 |     do {
                                                                 | label_2:
    0x00002360 add r3, r5, r4, lsl 4                             |         r3 = r5 + (r4 << 4);
    0x00002364 ldrd r0, r1, [r3, 8]                              |         __asm ("ldrd r0, r1, [r3, 8]");
    0x00002368 cmp r1, r7                                        |         
    0x0000236c cmpeq r0, r6                                      |         __asm ("cmpeq r0, r6");
                                                                 |         if (r1 <= r7) {
    0x00002370 blo 0x2398                                        |             goto label_3;
                                                                 |         }
    0x00002374 mov r2, r6                                        |         r2 = r6;
    0x00002378 mov r3, r7                                        |         r3 = r7;
    0x0000237c bl 0x36d0                                         |         fcn_000036d0 (r0, r1);
    0x00002380 cmp r1, r3                                        |         
    0x00002384 cmpeq r0, r2                                      |         __asm ("cmpeq r0, r2");
                                                                 |         if (r1 <= r3) {
    0x00002388 blo 0x2398                                        |             goto label_3;
                                                                 |         }
    0x0000238c add r4, r4, 1                                     |         r4++;
    0x00002390 cmp r4, 4                                         |         
    0x00002394 bne 0x2360                                        |         
                                                                 |     } while (r4 != 4);
                                                                 | label_3:
    0x00002398 sub r4, r4, 0xf0000001                            |     r4 -= 0xf0000001;
    0x0000239c add sl, r5, r4, lsl 4                             |     sl = r5 + (r4 << 4);
    0x000023a0 ldrd r0, r1, [sl, 8]                              |     __asm ("ldrd r0, r1, [sl, 8]");
    0x000023a4 mov r2, r6                                        |     r2 = r6;
    0x000023a8 mov r3, r7                                        |     r3 = r7;
    0x000023ac bl 0x36d0                                         |     fcn_000036d0 (r0, r1);
    0x000023b0 ldr r3, [r5, r4, lsl 4]                           |     offset_0 = r4 << 4;
                                                                 |     r3 = *((r5 + offset_0));
    0x000023b4 str r3, [sp]                                      |     *(sp) = r3;
    0x000023b8 mov r2, r0                                        |     r2 = r0;
    0x000023bc ldr r0, [pc, 0x40]                                |     r0 = *(0x2400);
    0x000023c0 mov r3, r1                                        |     r3 = r1;
    0x000023c4 add r0, pc, r0                                    |     r0 = pc + r0;
    0x000023c8 bl 0xb7c                                          |     printf (r0, r1, r2, r3)
    0x000023cc mov r2, r8                                        |     r2 = r8;
    0x000023d0 mov r3, sb                                        |     r3 = sb;
    0x000023d4 ldrd r0, r1, [sl, 8]                              |     __asm ("ldrd r0, r1, [sl, 8]");
    0x000023d8 bl 0x36d0                                         |     fcn_000036d0 (r0, r1);
    0x000023dc mov r3, 0x3e8                                     |     r3 = 0x3e8;
    0x000023e0 mul r2, r3, r0                                    |     r2 = r3 * r0;
    0x000023e4 b 0x2340                                          |     goto label_0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/xtables/libxt_hashlimit.so @ 0x2408 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00002408 ()                                      | void fcn_00002408 (int32_t arg1, int32_t arg2) {
                                                                 |     int32_t var_0h;
                                                                 |     int32_t var_ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00002408 push {r0, r1, r2, r4, r5, r6, r7, r8, sb, lr}     |     
    0x0000240c mov r5, r3                                        |     r5 = r3;
    0x00002410 ldr r3, [pc, 0x1a0]                               |     r3 = *(0x25b4);
    0x00002414 mov r6, r2                                        |     r6 = r2;
    0x00002418 ldr r2, [pc, 0x19c]                               |     r2 = *(0x25b8);
    0x0000241c add r3, pc, r3                                    |     r3 = pc + r3;
    0x00002420 ldr r8, [r3, r2]                                  |     r8 = *(0x25b4);
    0x00002424 ldr r3, [r0, 0x10]                                |     r3 = *((r0 + 0x10));
    0x00002428 mov sb, r1                                        |     sb = r1;
    0x0000242c tst r3, 0x10                                      |     
    0x00002430 mov r4, r0                                        |     r4 = r0;
    0x00002434 ldr r1, [r8]                                      |     r1 = *(0x25b4);
                                                                 |     if ((r3 & 0x10) == 0) {
    0x00002438 beq 0x256c                                        |         goto label_2;
                                                                 |     }
    0x0000243c ldr r0, [pc, 0x17c]                               |     r0 = *(0x25bc);
    0x00002440 add r0, pc, r0                                    |     r0 = pc + r0;
                                                                 |     do {
    0x00002444 bl 0xc54                                          |         fputs (r0, r1);
    0x00002448 ldr r3, [r4, 0x10]                                |         r3 = *((r4 + 0x10));
    0x0000244c ldrd r0, r1, [r4]                                 |         __asm ("ldrd r0, r1, [r4]");
    0x00002450 tst r3, 0x20                                      |         
                                                                 |         if ((r3 & 0x20) == 0) {
    0x00002454 beq 0x2578                                        |             goto label_3;
                                                                 |         }
    0x00002458 ldr r3, [pc, 0x164]                               |         r3 = *(0x25c0);
    0x0000245c add r3, pc, r3                                    |         r3 = pc + r3;
    0x00002460 str r3, [sp]                                      |         *(sp) = r3;
    0x00002464 ldrd r2, r3, [r4, 8]                              |         __asm ("ldrd r2, r3, [r4, 8]");
    0x00002468 bl 0x1af4                                         |         r0 = fcn_00001af4 (r0, r1, r2);
    0x0000246c mov r7, r0                                        |         r7 = r0;
                                                                 | label_0:
    0x00002470 ldr r3, [r4, 0x10]                                |         r3 = *((r4 + 0x10));
    0x00002474 tst r3, 0xf                                       |         
                                                                 |         if ((r3 & 0xf) != 0) {
    0x00002478 beq 0x2498                                        |             
    0x0000247c ldr r0, [pc, 0x144]                               |             r0 = *(0x25c4);
    0x00002480 ldr r1, [r8]                                      |             r1 = *(r8);
    0x00002484 add r0, pc, r0                                    |             r0 = pc + r0;
    0x00002488 bl 0xc54                                          |             fputs (r0, r1);
    0x0000248c mov r1, 0x2c                                      |             r1 = 0x2c;
    0x00002490 ldr r0, [r4, 0x10]                                |             r0 = *((r4 + 0x10));
    0x00002494 bl 0x1d08                                         |             fcn_00001d08 (r0, r1);
                                                                 |         }
    0x00002498 ldr r0, [pc, 0x12c]                               |         r0 = *(0x25c8);
    0x0000249c mov r1, sb                                        |         r1 = sb;
    0x000024a0 add r0, pc, r0                                    |         r0 = pc + r0;
    0x000024a4 bl 0xb7c                                          |         printf (r0, r1)
    0x000024a8 ldr r1, [r4, 0x14]                                |         r1 = *((r4 + 0x14));
    0x000024ac cmp r1, 0                                         |         
                                                                 |         if (r1 != 0) {
    0x000024b0 beq 0x24c0                                        |             
    0x000024b4 ldr r0, [pc, 0x114]                               |             r0 = *(0x25cc);
    0x000024b8 add r0, pc, r0                                    |             r0 = pc + r0;
    0x000024bc bl 0xb7c                                          |             printf (r0)
                                                                 |         }
    0x000024c0 ldr r1, [r4, 0x18]                                |         r1 = *((r4 + 0x18));
    0x000024c4 cmp r1, 0                                         |         
                                                                 |         if (r1 != 0) {
    0x000024c8 beq 0x24d8                                        |             
    0x000024cc ldr r0, [pc, 0x100]                               |             r0 = *(0x25d0);
    0x000024d0 add r0, pc, r0                                    |             r0 = pc + r0;
    0x000024d4 bl 0xb7c                                          |             printf (r0)
                                                                 |         }
    0x000024d8 ldr r1, [r4, 0x1c]                                |         r1 = *((r4 + 0x1c));
    0x000024dc cmp r1, 0x3e8                                     |         
                                                                 |         if (r1 != 0x3e8) {
    0x000024e0 beq 0x24f0                                        |             
    0x000024e4 ldr r0, [pc, 0xec]                                |             r0 = *(0x25d4);
    0x000024e8 add r0, pc, r0                                    |             r0 = pc + r0;
    0x000024ec bl 0xb7c                                          |             printf (r0)
                                                                 |         }
    0x000024f0 ldr r1, [r4, 0x20]                                |         r1 = *((r4 + 0x20));
    0x000024f4 cmp r1, r7                                        |         
                                                                 |         if (r1 != r7) {
    0x000024f8 beq 0x2508                                        |             
    0x000024fc ldr r0, [pc, 0xd8]                                |             r0 = *(0x25d8);
    0x00002500 add r0, pc, r0                                    |             r0 = pc + r0;
    0x00002504 bl 0xb7c                                          |             printf (r0)
                                                                 |         }
    0x00002508 ldrb r1, [r4, 0x28]                               |         r1 = *((r4 + 0x28));
    0x0000250c cmp r1, r6                                        |         
                                                                 |         if (r1 != r6) {
    0x00002510 beq 0x2520                                        |             
    0x00002514 ldr r0, [pc, 0xc4]                                |             r0 = *(0x25dc);
    0x00002518 add r0, pc, r0                                    |             r0 = pc + r0;
    0x0000251c bl 0xb7c                                          |             printf (r0)
                                                                 |         }
    0x00002520 ldrb r1, [r4, 0x29]                               |         r1 = *((r4 + 0x29));
    0x00002524 cmp r1, r6                                        |         
                                                                 |         if (r1 != r6) {
    0x00002528 beq 0x2538                                        |             
    0x0000252c ldr r0, [pc, 0xb0]                                |             r0 = *(0x25e0);
    0x00002530 add r0, pc, r0                                    |             r0 = pc + r0;
    0x00002534 bl 0xb7c                                          |             printf (r0)
                                                                 |         }
    0x00002538 cmp r5, 3                                         |         
                                                                 |         if (r5 == 3) {
    0x0000253c bne 0x2564                                        |             
    0x00002540 ldr r3, [r4, 0x10]                                |             r3 = *((r4 + 0x10));
    0x00002544 tst r3, 0x40                                      |             
                                                                 |             if ((r3 & 0x40) != 0) {
    0x00002548 beq 0x2558                                        |                 
    0x0000254c ldr r0, [pc, 0x94]                                |                 r0 = *(0x25e4);
    0x00002550 add r0, pc, r0                                    |                 r0 = pc + r0;
    0x00002554 bl 0xb7c                                          |                 printf (r0)
                                                                 |             }
    0x00002558 ldr r3, [r4, 0x10]                                |             r3 = *((r4 + 0x10));
    0x0000255c tst r3, 0x40                                      |             
                                                                 |             if ((r3 & 0x40) != 0) {
    0x00002560 bne 0x2598                                        |                 goto label_4;
                                                                 |             }
                                                                 |         }
                                                                 | label_1:
    0x00002564 add sp, sp, 0xc                                   |         
    0x00002568 pop {r4, r5, r6, r7, r8, sb, pc}                  |         
                                                                 | label_2:
    0x0000256c ldr r0, [pc, 0x78]                                |         r0 = *(0x25e8);
    0x00002570 add r0, pc, r0                                    |         r0 = pc + r0;
    0x00002574 b 0x2444                                          |         
                                                                 |     } while (1);
                                                                 | label_3:
    0x00002578 mov r2, r5                                        |     r2 = r5;
    0x0000257c bl 0x22f0                                         |     fcn_000022f0 (r0, r1);
    0x00002580 ldrd r2, r3, [r4, 8]                              |     __asm ("ldrd r2, r3, [r4, 8]");
    0x00002584 mov r7, r0                                        |     r7 = r0;
    0x00002588 ldr r0, [pc, 0x60]                                |     r0 = *(0x25ec);
    0x0000258c add r0, pc, r0                                    |     r0 = pc + r0;
    0x00002590 bl 0xb7c                                          |     printf (r0, r1, r2)
    0x00002594 b 0x2470                                          |     goto label_0;
                                                                 | label_4:
    0x00002598 ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
    0x0000259c cmp r1, 1                                         |     
                                                                 |     if (r1 == 1) {
    0x000025a0 beq 0x2564                                        |         goto label_1;
                                                                 |     }
    0x000025a4 ldr r0, [pc, 0x48]                                |     r0 = *(0x25f0);
    0x000025a8 add r0, pc, r0                                    |     r0 = pc + r0;
    0x000025ac add sp, sp, 0xc                                   |     
    0x000025b0 pop {r4, r5, r6, r7, r8, sb, lr}                  |     
    0x000025b4 b 0xb7c                                           |     return void (*0xb7c)() ();
                                                                 | }
    ; 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/xtables/libxt_hashlimit.so @ 0x2628 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00002628 ()                                      | void fcn_00002628 (int32_t arg1, int32_t arg2) {
                                                                 |     int32_t var_0h;
                                                                 |     int32_t var_ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00002628 ldr r3, [pc, 0x1c8]                               |     r3 = *(0x27f4);
    0x0000262c push {r0, r1, r2, r4, r5, r6, r7, r8, sb, lr}     |     
    0x00002630 mov r5, r2                                        |     r5 = r2;
    0x00002634 ldr r2, [pc, 0x1c0]                               |     r2 = *(0x27f8);
    0x00002638 add r3, pc, r3                                    |     r3 = pc + r3;
    0x0000263c ldr sb, [r3, r2]                                  |     sb = *(0x27f4);
    0x00002640 ldr r3, [r0, 0x10]                                |     r3 = *((r0 + 0x10));
    0x00002644 mov r8, r1                                        |     r8 = r1;
    0x00002648 tst r3, 0x10                                      |     
    0x0000264c mov r4, r0                                        |     r4 = r0;
    0x00002650 ldr r1, [sb]                                      |     r1 = *(0x27f4);
                                                                 |     if ((r3 & 0x10) == 0) {
    0x00002654 beq 0x2784                                        |         goto label_2;
                                                                 |     }
    0x00002658 ldr r0, [pc, 0x1a0]                               |     r0 = *(0x27fc);
    0x0000265c add r0, pc, r0                                    |     r0 = pc + r0;
                                                                 |     do {
    0x00002660 bl 0xc54                                          |         fputs (r0, r1);
    0x00002664 ldr r3, [r4, 0x10]                                |         r3 = *((r4 + 0x10));
    0x00002668 ldrd r0, r1, [r4]                                 |         __asm ("ldrd r0, r1, [r4]");
    0x0000266c tst r3, 0x20                                      |         
                                                                 |         if ((r3 & 0x20) == 0) {
    0x00002670 beq 0x2790                                        |             goto label_3;
                                                                 |         }
    0x00002674 ldr r3, [pc, 0x188]                               |         r3 = *(0x2800);
    0x00002678 mov r7, 0                                         |         r7 = 0;
    0x0000267c add r3, pc, r3                                    |         r3 = pc + r3;
    0x00002680 str r3, [sp]                                      |         *(sp) = r3;
    0x00002684 ldrd r2, r3, [r4, 8]                              |         __asm ("ldrd r2, r3, [r4, 8]");
    0x00002688 bl 0x1af4                                         |         r0 = fcn_00001af4 (r0, r1, r2);
    0x0000268c mov r6, r0                                        |         r6 = r0;
                                                                 | label_0:
    0x00002690 ldr r3, [r4, 0x10]                                |         r3 = *((r4 + 0x10));
    0x00002694 tst r3, 0xf                                       |         
                                                                 |         if ((r3 & 0xf) != 0) {
    0x00002698 beq 0x26b8                                        |             
    0x0000269c ldr r0, [pc, 0x164]                               |             r0 = *(0x2804);
    0x000026a0 ldr r1, [sb]                                      |             r1 = *(sb);
    0x000026a4 add r0, pc, r0                                    |             r0 = pc + r0;
    0x000026a8 bl 0xc54                                          |             fputs (r0, r1);
    0x000026ac mov r1, 0x2d                                      |             r1 = 0x2d;
    0x000026b0 ldr r0, [r4, 0x10]                                |             r0 = *((r4 + 0x10));
    0x000026b4 bl 0x1d08                                         |             fcn_00001d08 (r0, r1);
                                                                 |         }
    0x000026b8 ldr r1, [r4, 0x14]                                |         r1 = *((r4 + 0x14));
    0x000026bc cmp r1, 0                                         |         
                                                                 |         if (r1 != 0) {
    0x000026c0 beq 0x26d0                                        |             
    0x000026c4 ldr r0, [pc, 0x140]                               |             r0 = *(0x2808);
    0x000026c8 add r0, pc, r0                                    |             r0 = pc + r0;
    0x000026cc bl 0xb7c                                          |             printf (r0)
                                                                 |         }
    0x000026d0 ldr r1, [r4, 0x18]                                |         r1 = *((r4 + 0x18));
    0x000026d4 cmp r1, 0                                         |         
                                                                 |         if (r1 != 0) {
    0x000026d8 beq 0x26e8                                        |             
    0x000026dc ldr r0, [pc, 0x12c]                               |             r0 = *(0x280c);
    0x000026e0 add r0, pc, r0                                    |             r0 = pc + r0;
    0x000026e4 bl 0xb7c                                          |             printf (r0)
                                                                 |         }
    0x000026e8 ldr r1, [r4, 0x1c]                                |         r1 = *((r4 + 0x1c));
    0x000026ec cmp r1, 0x3e8                                     |         
                                                                 |         if (r1 != 0x3e8) {
    0x000026f0 beq 0x2700                                        |             
    0x000026f4 ldr r0, [pc, 0x118]                               |             r0 = *(0x2810);
    0x000026f8 add r0, pc, r0                                    |             r0 = pc + r0;
    0x000026fc bl 0xb7c                                          |             printf (r0)
                                                                 |         }
    0x00002700 ldr r1, [r4, 0x20]                                |         r1 = *((r4 + 0x20));
    0x00002704 mov r3, 0                                         |         r3 = 0;
    0x00002708 cmp r3, r7                                        |         
    0x0000270c cmpeq r1, r6                                      |         __asm ("cmpeq r1, r6");
                                                                 |         if (r3 != r7) {
    0x00002710 beq 0x2720                                        |             
    0x00002714 ldr r0, [pc, 0xfc]                                |             r0 = *(0x2814);
    0x00002718 add r0, pc, r0                                    |             r0 = pc + r0;
    0x0000271c bl 0xb7c                                          |             printf (r0)
                                                                 |         }
    0x00002720 ldrb r1, [r4, 0x28]                               |         r1 = *((r4 + 0x28));
    0x00002724 cmp r1, r8                                        |         
                                                                 |         if (r1 != r8) {
    0x00002728 beq 0x2738                                        |             
    0x0000272c ldr r0, [pc, 0xe8]                                |             r0 = *(0x2818);
    0x00002730 add r0, pc, r0                                    |             r0 = pc + r0;
    0x00002734 bl 0xb7c                                          |             printf (r0)
                                                                 |         }
    0x00002738 ldrb r1, [r4, 0x29]                               |         r1 = *((r4 + 0x29));
    0x0000273c cmp r1, r8                                        |         
                                                                 |         if (r1 != r8) {
    0x00002740 beq 0x2750                                        |             
    0x00002744 ldr r0, [pc, 0xd4]                                |             r0 = *(0x281c);
    0x00002748 add r0, pc, r0                                    |             r0 = pc + r0;
    0x0000274c bl 0xb7c                                          |             printf (r0)
                                                                 |         }
    0x00002750 cmp r5, 3                                         |         
                                                                 |         if (r5 == 3) {
    0x00002754 bne 0x277c                                        |             
    0x00002758 ldr r3, [r4, 0x10]                                |             r3 = *((r4 + 0x10));
    0x0000275c tst r3, 0x40                                      |             
                                                                 |             if ((r3 & 0x40) != 0) {
    0x00002760 beq 0x2770                                        |                 
    0x00002764 ldr r0, [pc, 0xb8]                                |                 r0 = *(0x2820);
    0x00002768 add r0, pc, r0                                    |                 r0 = pc + r0;
    0x0000276c bl 0xb7c                                          |                 printf (r0)
                                                                 |             }
    0x00002770 ldr r3, [r4, 0x10]                                |             r3 = *((r4 + 0x10));
    0x00002774 tst r3, 0x40                                      |             
                                                                 |             if ((r3 & 0x40) != 0) {
    0x00002778 bne 0x27d8                                        |                 goto label_4;
                                                                 |             }
                                                                 |         }
                                                                 | label_1:
    0x0000277c add sp, sp, 0xc                                   |         
    0x00002780 pop {r4, r5, r6, r7, r8, sb, pc}                  |         
                                                                 | label_2:
    0x00002784 ldr r0, [pc, 0x9c]                                |         r0 = *(0x2824);
    0x00002788 add r0, pc, r0                                    |         r0 = pc + r0;
    0x0000278c b 0x2660                                          |         
                                                                 |     } while (1);
                                                                 | label_3:
    0x00002790 cmp r5, 3                                         |     
                                                                 |     if (r5 == 3) {
    0x00002794 movne r2, r5                                      |         r2 = r5;
                                                                 |     }
                                                                 |     if (r5 == 3) {
    0x00002798 bne 0x27b8                                        |         
    0x0000279c ldr r3, [r4, 0x24]                                |         r3 = *((r4 + 0x24));
    0x000027a0 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000027a4 movne ip, r0                                      |             
                                                                 |         }
                                                                 |         if (r3 == 0) {
    0x000027a8 mulne r2, r3, r1                                  |             r2 = r3 * r1;
                                                                 |         }
    0x000027ac umullne r0, r1, ip, r3                            |         __asm ("umullne r0, r1, ip, r3");
                                                                 |         if (r3 == 0) {
    0x000027b0 addne r1, r2, r1                                  |             r1 = r2 + r1;
                                                                 |         }
    0x000027b4 mov r2, 3                                         |         r2 = 3;
                                                                 |     }
    0x000027b8 bl 0x22f0                                         |     fcn_000022f0 (r0, r1);
    0x000027bc ldrd r2, r3, [r4, 8]                              |     __asm ("ldrd r2, r3, [r4, 8]");
    0x000027c0 mov r7, 0                                         |     r7 = 0;
    0x000027c4 mov r6, r0                                        |     r6 = r0;
    0x000027c8 ldr r0, [pc, 0x5c]                                |     r0 = *(0x2828);
    0x000027cc add r0, pc, r0                                    |     r0 = pc + r0;
    0x000027d0 bl 0xb7c                                          |     printf (r0, r1, r2, r3, r4, r5, r6)
    0x000027d4 b 0x2690                                          |     goto label_0;
                                                                 | label_4:
    0x000027d8 ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
    0x000027dc cmp r1, 1                                         |     
                                                                 |     if (r1 == 1) {
    0x000027e0 beq 0x277c                                        |         goto label_1;
                                                                 |     }
    0x000027e4 ldr r0, [pc, 0x44]                                |     r0 = *(0x282c);
    0x000027e8 add r0, pc, r0                                    |     r0 = pc + r0;
    0x000027ec add sp, sp, 0xc                                   |     
    0x000027f0 pop {r4, r5, r6, r7, r8, sb, lr}                  |     
    0x000027f4 b 0xb7c                                           |     return void (*0xb7c)() ();
                                                                 | }

[*] Function printf used 23 times libxt_hashlimit.so