[*] Binary protection state of firmwaremanagement.cgi

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


[*] Function system tear down of firmwaremanagement.cgi

    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/html/axis-cgi/firmwaremanagement.cgi @ 0x202c */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.0000202c ()                  | void fcn_0000202c (int16_t arg_10000h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                             |     int16_t var_0h_2;
                                             |     int16_t var_4h;
                                             |     int16_t var_8h;
                                             |     int16_t var_ch;
                                             |     int16_t var_10h;
                                             |     int16_t var_14h;
                                             |     int16_t var_18h;
                                             |     int16_t var_40h;
                                             |     r0 = arg1;
                                             |     r1 = arg2;
                                             |     r2 = arg3;
    0x0000202c mov r5, r2                    |     r5 = r2;
    0x0000202e ldr r2, [pc, 0x248]           |     
    0x00002030 ldr r3, [pc, 0x248]           |     r3 = *(0x227c);
    0x00002032 mov r6, r1                    |     r6 = r1;
    0x00002034 push {r7, lr}                 |     
    0x00002036 sub.w sp, sp, 0x10000         |     
    0x0000203a add r2, pc                    |     r2 = 0x42b8;
    0x0000203c sub sp, 0x40                  |     
    0x0000203e add.w r1, sp, 0x10000         |     r1 += arg_10000h;
    0x00002042 add r4, sp, 0x40              |     r4 += var_40h;
    0x00002044 ldr r3, [r2, r3]              |     
    0x00002046 mov r7, r0                    |     r7 = r0;
    0x00002048 sub.w r0, r4, 0xc             |     r0 = r4 - 0xc;
    0x0000204c adds r1, 0x3c                 |     r1 += 0x3c;
    0x0000204e ldr r3, [r3]                  |     r3 = *(0x42b8);
    0x00002050 str r3, [r1]                  |     *(r1) = r3;
    0x00002052 mov.w r3, 0                   |     r3 = 0;
    0x00002056 blx 0x1224                    |     r0 = pipe ();
    0x0000205a cmp r0, 0                     |     
                                             |     if (r0 < 0) {
    0x0000205c blt 0x2126                    |         goto label_6;
                                             |     }
    0x0000205e mov.w r8, 0                   |     r8 = 0;
    0x00002062 mov r0, r4                    |     r0 = r4;
    0x00002064 str r8, [r0, -0x1c]!          |     *((r0 -= 0x1c)) = r8;
    0x00002066 ldrh r4, [r3, 0x28]           |     r4 = *((r3 + 0x28));
    0x00002068 blx 0x10d4                    |     r0 = sd_bus_open_system ()
    0x0000206c cmp r0, r8                    |     
                                             |     if (r0 < r8) {
    0x0000206e blt 0x211a                    |         goto label_7;
                                             |     }
    0x00002070 ldr r3, [pc, 0x20c]           |     
    0x00002072 mov r1, r4                    |     r1 = r4;
    0x00002074 ldr r2, [pc, 0x20c]           |     
    0x00002076 add r3, pc                    |     r3 = 0x42fa;
    0x00002078 str r3, [sp, 4]               |     var_4h = r3;
    0x0000207a add r2, pc                    |     r2 = 0x4302;
    0x0000207c ldr r3, [pc, 0x208]           |     
    0x0000207e str r2, [sp]                  |     *(sp) = r2;
    0x00002080 str r8, [r1, -0x18]!          |     *((r1 -= 0x18)) = r8;
    0x00002084 ldr r0, [r4, -0x1c]           |     r0 = *((r4 - 0x1c));
    0x00002088 add r3, pc                    |     r3 = 0x4314;
    0x0000208a blx 0x11dc                    |     r0 = sd_bus_message_new_method_call ();
    0x0000208e cmp r0, 0                     |     
                                             |     if (r0 < 0) {
    0x00002090 blt 0x2150                    |         goto label_8;
                                             |     }
    0x00002092 ldr r3, [pc, 0x1f8]           |     
    0x00002094 ldr r0, [r4, -0x18]           |     r0 = *((r4 - 0x18));
    0x00002098 ldr ip, [r4, -0xc]            |     ip = *((r4 - 0xc));
    0x0000209c add r3, pc                    |     r3 = 0x432e;
    0x0000209e ldr r2, [r3, 0x10]            |     r2 = *(0x433e);
    0x000020a0 cmp r2, 0                     |     
                                             |     if (r2 == 0) {
    0x000020a2 beq 0x214a                    |         goto label_9;
                                             |     }
                                             | label_1:
    0x000020a4 ldr r3, [pc, 0x1e8]           |     
    0x000020a6 add r3, pc                    |     r3 = 0x433a;
    0x000020a8 ldr r1, [r3, 0x14]            |     r1 = *(0x434e);
    0x000020aa cmp r1, 0                     |     
                                             |     if (r1 == 0) {
    0x000020ac beq 0x2144                    |         goto label_10;
                                             |     }
                                             | label_0:
    0x000020ae ldr r3, [pc, 0x1e4]           |     
    0x000020b0 add r3, pc                    |     
    0x000020b2 ldr r3, [r3, 0x18]            |     r3 = *(0x4362);
    0x000020b4 cmp r3, 0                     |     
    0x000020b6 beq 0x213e                    |     
                                             |     while (1) {
    0x000020b8 str r2, [sp, 8]               |         var_8h = r2;
    0x000020ba ldr r2, [pc, 0x1dc]           |         
    0x000020bc str r1, [sp, 0x10]            |         var_10h = r1;
    0x000020be ldr r1, [pc, 0x1dc]           |         
    0x000020c0 add r2, pc                    |         r2 = 0x435e;
    0x000020c2 str r3, [sp, 0x18]            |         var_18h = r3;
    0x000020c4 str r2, [sp, 0x14]            |         var_14h = r2;
    0x000020c6 mov r3, ip                    |         r3 = ip;
    0x000020c8 ldr r2, [pc, 0x1d4]           |         
    0x000020ca add r1, pc                    |         r1 = 0x436c;
    0x000020cc add r2, pc                    |         r2 = 0x4370;
    0x000020ce str r2, [sp, 0xc]             |         var_ch = r2;
    0x000020d0 ldr r2, [pc, 0x1d0]           |         
    0x000020d2 add r2, pc                    |         r2 = 0x437a;
    0x000020d4 str r2, [sp, 4]               |         var_4h = r2;
    0x000020d6 movs r2, 3                    |         r2 = 3;
    0x000020d8 str r2, [sp]                  |         *(sp) = r2;
    0x000020da mov r2, r7                    |         r2 = r7;
    0x000020dc blx 0xff0                     |         r0 = sd_bus_message_append ();
    0x000020e0 cmp r0, 0                     |         
                                             |         if (r0 >= 0) {
    0x000020e2 blt 0x2132                    |             
    0x000020e4 adr r3, 0x188                 |             r3 = 0x188;
    0x000020e6 ldrd r2, r3, [r3]             |             __asm ("ldrd r2, r3, [r3]");
    0x000020ea movs r1, 0                    |             r1 = 0;
    0x000020ec str r1, [sp]                  |             *(sp) = r1;
    0x000020ee strd r2, r3, [sp, 8]          |             __asm ("strd r2, r3, [sp, 8]");
    0x000020f2 ldr r3, [pc, 0x1b4]           |             
    0x000020f4 ldrd r0, r2, [r4, -0x1c]      |             __asm ("ldrd r0, r2, [r4, -0x1c]");
    0x000020f8 add r3, pc                    |             r3 = 0x43a6;
    0x000020fa blx 0x1290                    |             r0 = sd_bus_call_async ();
    0x000020fe cmp r0, 0                     |             
                                             |             if (r0 >= 0) {
    0x00002100 blt 0x210e                    |                 
    0x00002102 ldr r0, [r4, -0x1c]           |                 r0 = *((r4 - 0x1c));
    0x00002106 blx 0x105c                    |                 r0 = sd_bus_flush ();
    0x0000210a cmp r0, 0                     |                 
                                             |                 if (r0 >= 0) {
    0x0000210c bge 0x215c                    |                     goto label_11;
                                             |                 }
                                             |             }
    0x0000210e ldr r1, [pc, 0x19c]           |             
    0x00002110 mov.w r0, 0x1f4               |             r0 = 0x1f4;
    0x00002114 add r1, pc                    |             r1 = 0x43c6;
    0x00002116 bl 0x1ff8                     |             fcn_00001ff8 (r0, r1);
                                             | label_7:
    0x0000211a ldr r1, [pc, 0x194]           |             
    0x0000211c mov.w r0, 0x1f4               |             r0 = 0x1f4;
    0x00002120 add r1, pc                    |             r1 = 0x43d6;
    0x00002122 bl 0x1ff8                     |             fcn_00001ff8 (r0, r1);
                                             | label_6:
    0x00002126 ldr r1, [pc, 0x18c]           |             
    0x00002128 mov.w r0, 0x1f4               |             r0 = 0x1f4;
    0x0000212c add r1, pc                    |             r1 = 0x43e6;
    0x0000212e bl 0x1ff8                     |             fcn_00001ff8 (r0, r1);
                                             |         }
    0x00002132 ldr r1, [pc, 0x184]           |         
    0x00002134 mov.w r0, 0x1f4               |         r0 = 0x1f4;
    0x00002138 add r1, pc                    |         r1 = 0x43f6;
    0x0000213a bl 0x1ff8                     |         fcn_00001ff8 (r0, r1);
    0x0000213e ldr r3, [pc, 0x17c]           |         
    0x00002140 add r3, pc                    |         r3 = 0x4402;
    0x00002142 b 0x20b8                      |         
                                             |     }
                                             | label_10:
    0x00002144 ldr r1, [pc, 0x178]           |     
    0x00002146 add r1, pc                    |     r1 = 0x440a;
    0x00002148 b 0x20ae                      |     goto label_0;
                                             | label_9:
    0x0000214a ldr r2, [pc, 0x178]           |     
    0x0000214c add r2, pc                    |     r2 = 0x4416;
    0x0000214e b 0x20a4                      |     goto label_1;
                                             | label_8:
    0x00002150 ldr r1, [pc, 0x174]           |     
    0x00002152 mov.w r0, 0x1f4               |     r0 = 0x1f4;
    0x00002156 add r1, pc                    |     r1 = 0x4422;
    0x00002158 bl 0x1ff8                     |     fcn_00001ff8 (r0, r1);
                                             | label_11:
    0x0000215c ldr r0, [r4, -0xc]            |     r0 = *((r4 - 0xc));
    0x00002160 blx 0x1134                    |     close (r0);
    0x00002164 cmp r5, 0                     |     
                                             |     if (r5 != 0) {
    0x00002166 bne 0x2238                    |         goto label_12;
                                             |     }
                                             | label_5:
    0x00002168 ldr.w sb, [pc, 0x160]         |     sb = *(0x000022cc);
    0x0000216c sub.w r8, r4, 4               |     r8 = r4 - 4;
    0x00002170 add sb, pc                    |     sb += pc;
                                             |     if (r7 == 0) {
                                             |         do {
                                             | label_2:
    0x00002172 cbz r7, 0x21d6                |             goto label_13;
                                             |         }
    0x00002174 mov.w r3, 0x10000             |         r3 = 0x10000;
    0x00002178 mov r2, r7                    |         r2 = r7;
    0x0000217a cmp r7, r3                    |         
    0x0000217c mov r1, r8                    |         r1 = r8;
    0x0000217e it hs                         |         
                                             |         if (r7 < r3) {
    0x00002180 movhs r2, r3                  |             r2 = r3;
                                             |         }
    0x00002182 movs r0, 0                    |         r0 = 0;
    0x00002184 blx 0x108c                    |         r0 = read_chk ();
    0x00002188 subs r5, r0, 0                |         r5 = r0 - 0;
                                             |         if (r5 >= r0) {
    0x0000218a bge 0x21a2                    |             goto label_14;
                                             |         }
    0x0000218c blx 0x126c                    |         r0 = errno_location ();
    0x00002190 ldr r3, [r0]                  |         r3 = *(r0);
    0x00002192 cmp r3, 4                     |         
    0x00002194 beq 0x2172                    |         
                                             |     } while (r3 == 4);
    0x00002196 ldr r1, [pc, 0x138]           |     
    0x00002198 mov.w r0, 0x1f4               |     r0 = 0x1f4;
    0x0000219a strb r2, [r7, 3]              |     *((r7 + 3)) = r2;
    0x0000219c add r1, pc                    |     r1 = 0x4472;
    0x0000219e bl 0x1ff8                     |     fcn_00001ff8 (r0, r1);
                                             |     if (r3 == 4) {
                                             | label_14:
    0x000021a2 beq 0x2264                    |         goto label_15;
                                             |     }
    0x000021a4 ldr.w r3, [sb]                |     r3 = *(sb);
    0x000021a8 movs r6, 0                    |     r6 = 0;
    0x000021aa subs r3, r3, r5               |     r3 -= r5;
    0x000021ac str.w r3, [sb]                |     __asm ("str.w r3, [sb]");
                                             |     do {
    0x000021b0 ldr r0, [r4, -0x8]            |         r0 = *((r4 - 0x8));
    0x000021b4 subs r2, r5, r6               |         r2 = r5 - r6;
    0x000021b6 add.w r1, r8, r6              |         r1 = r8 + r6;
    0x000021ba blx 0x1044                    |         r0 = write (r0, r1, r2);
    0x000021be cmp r0, 0                     |         
                                             |         if (r0 < 0) {
    0x000021c0 blt 0x21cc                    |             goto label_16;
                                             |         }
    0x000021c2 add r6, r0                    |         r6 += r0;
                                             | label_3:
    0x000021c4 cmp r5, r6                    |         
    0x000021c6 bgt 0x21b0                    |         
                                             |     } while (r5 > r6);
    0x000021c8 subs r7, r7, r5               |     r7 -= r5;
    0x000021ca b 0x2172                      |     goto label_2;
                                             | label_16:
    0x000021cc blx 0x126c                    |     r0 = errno_location ();
    0x000021d0 ldr r3, [r0]                  |     r3 = *(r0);
    0x000021d2 cmp r3, 4                     |     
                                             |     if (r3 == 4) {
    0x000021d4 beq 0x21c4                    |         goto label_3;
                                             |     }
                                             | label_13:
    0x000021d6 ldr r0, [r4, -0x8]            |     r0 = *((r4 - 0x8));
    0x000021da sub.w r6, r4, 0x14            |     r6 = r4 - 0x14;
    0x000021de blx 0x1134                    |     close (r0);
    0x000021e2 mov r1, r6                    |     r1 = r6;
    0x000021e4 movs r0, 1                    |     r0 = 1;
    0x000021e6 blx 0xf84                     |     clock_gettime ();
    0x000021ea ldr r5, [r4, -0x14]           |     r5 = *((r4 - 0x14));
    0x000021ee movw r7, 0x4240               |     
    0x000021f2 movt r7, 0xf                  |     r7 = 0xf4240;
    0x000021f6 adds r5, 0x5a                 |     r5 += 0x5a;
                                             |     do {
                                             | label_4:
    0x000021f8 ldr r0, [r4, -0x1c]           |         r0 = *((r4 - 0x1c));
    0x000021fc movs r1, 0                    |         r1 = 0;
    0x000021fe blx 0x1230                    |         r0 = sd_bus_process ();
    0x00002202 cmp r0, 0                     |         
                                             |         if (r0 < 0) {
    0x00002204 blt 0x222c                    |             goto label_17;
                                             |         }
    0x00002206 bne 0x21f8                    |         
                                             |     } while (r0 != 0);
    0x00002208 mov r1, r6                    |     r1 = r6;
    0x0000220a movs r0, 1                    |     r0 = 1;
    0x0000220c blx 0xf84                     |     clock_gettime ();
    0x00002210 ldr r2, [r4, -0x14]           |     r2 = *((r4 - 0x14));
    0x00002214 cmp r2, r5                    |     
                                             |     if (r2 >= r5) {
    0x00002216 bge 0x2258                    |         goto label_18;
                                             |     }
    0x00002218 subs r2, r5, r2               |     r2 = r5 - r2;
    0x0000221a ldr r0, [r4, -0x1c]           |     r0 = *((r4 - 0x1c));
    0x0000221e mul r2, r7, r2                |     r2 = r7 * r2;
    0x00002222 asrs r3, r2, 0x1f             |     r3 = r2 >> 0x1f;
    0x00002224 blx 0x1248                    |     r0 = sd_bus_wait ();
    0x00002228 cmp r0, 0                     |     
                                             |     if (r0 >= 0) {
    0x0000222a bge 0x21f8                    |         goto label_4;
                                             |     }
                                             | label_17:
    0x0000222c ldr r1, [pc, 0xa4]            |     
    0x0000222e mov.w r0, 0x1f4               |     r0 = 0x1f4;
    0x00002232 add r1, pc                    |     r1 = 0x450a;
    0x00002234 bl 0x1ff8                     |     fcn_00001ff8 (r0, r1);
                                             | label_12:
    0x00002238 ldr r0, [r4, -0x8]            |     r0 = *((r4 - 0x8));
    0x0000223c mov r2, r5                    |     r2 = r5;
    0x0000223e mov r1, r6                    |     r1 = r6;
    0x00002240 blx 0x1044                    |     r0 = write (r0, r1, r2);
    0x00002244 cmp r0, r5                    |     
                                             |     if (r0 != r5) {
    0x00002246 beq 0x2254                    |         
    0x00002248 ldr r1, [pc, 0x8c]            |         
    0x0000224a mov.w r0, 0x1f4               |         r0 = 0x1f4;
    0x0000224e add r1, pc                    |         r1 = 0x452a;
    0x00002250 bl 0x1ff8                     |         fcn_00001ff8 (r0, r1);
                                             |     }
    0x00002254 subs r7, r7, r5               |     r7 -= r5;
    0x00002256 b 0x2168                      |     goto label_5;
                                             | label_18:
    0x00002258 ldr r1, [pc, 0x80]            |     
    0x0000225a mov.w r0, 0x1f4               |     r0 = 0x1f4;
    0x0000225e add r1, pc                    |     r1 = 0x453e;
    0x00002260 bl 0x1ff8                     |     fcn_00001ff8 (r0, r1);
                                             | label_15:
    0x00002264 ldr r1, [pc, 0x78]            |     
    0x00002266 mov.w r0, 0x190               |     r0 = 0x190;
    0x0000226a add r1, pc                    |     r1 = 0x454e;
    0x0000226c bl 0x1ff8                     |     fcn_00001ff8 (r0, r1);
                                             |     if (r7 < r7) {
    0x00002270 bhs 0x2274                    |         
    0x00002272 ldr r1, [r1, 0x34]            |         r1 = *((r1 + 0x34));
                                             |     }
    0x00002274 movs r0, r0                   |     
    0x00002276 movs r0, r0                   |     
    0x00002278 cmp r6, 0x7e                  |     
    0x0000227a movs r1, r0                   |     r1 = r0;
    0x0000227c lsls r4, r6, 4                |     r4 = r6 << 4;
    0x0000227e movs r0, r0                   |     
    0x00002280 asrs r2, r4, 1                |     r2 = r4 >> 1;
    0x00002282 movs r0, r0                   |     
    0x00002284 asrs r2, r0, 1                |     r2 = r0 >> 1;
    0x00002286 movs r0, r0                   |     
    0x00002288 asrs r0, r3, 0x20             |     r0 = r3 >> 0x20;
    0x0000228a movs r0, r0                   |     
    0x0000228c cmp r7, 0x6c                  |     
    0x0000228e movs r1, r0                   |     r1 = r0;
    0x00002290 cmp r7, 0x62                  |     
    0x00002292 movs r1, r0                   |     r1 = r0;
    0x00002294 cmp r7, 0x58                  |     
    0x00002296 movs r1, r0                   |     r1 = r0;
    0x00002298 asrs r0, r1, 1                |     r0 = r1 >> 1;
    0x0000229a movs r0, r0                   |     
    0x0000229c asrs r6, r6, 0x20             |     r6 >>= 0x20;
    0x0000229e movs r0, r0                   |     
    0x000022a0 asrs r4, r1, 1                |     r4 = r1 >> 1;
    0x000022a2 movs r0, r0                   |     
    0x000022a4 asrs r2, r2, 1                |     r2 >>= 1;
    0x000022a6 movs r0, r0                   |     
    0x000022a8 lsls r5, r3, 0xe              |     r5 = r3 << 0xe;
    0x000022aa movs r0, r0                   |     
    0x000022ac asrs r4, r1, 1                |     r4 = r1 >> 1;
    0x000022ae movs r0, r0                   |     
    0x000022b0 lsrs r0, r4, 0x1d             |     r0 = r4 >> 0x1d;
    0x000022b2 movs r0, r0                   |     
    0x000022b4 lsrs r0, r6, 0x1c             |     r0 = r6 >> 0x1c;
    0x000022b6 movs r0, r0                   |     
    0x000022b8 asrs r0, r0, 0x20             |     r0 >>= 0x20;
    0x000022ba movs r0, r0                   |     
    0x000022bc lsrs r4, r2, 0x1c             |     r4 = r2 >> 0x1c;
    0x000022be movs r0, r0                   |     
    0x000022c0 lsrs r6, r1, 0x1c             |     r6 = r1 >> 0x1c;
    0x000022c2 movs r0, r0                   |     
    0x000022c4 lsrs r0, r1, 0x1c             |     r0 = r1 >> 0x1c;
    0x000022c6 movs r0, r0                   |     
    0x000022c8 lsrs r2, r1, 0x1e             |     r2 = r1 >> 0x1e;
    0x000022ca movs r0, r0                   |     
    0x000022cc cmp r6, 0x98                  |     
    0x000022ce movs r1, r0                   |     r1 = r0;
    0x000022d0 asrs r4, r0, 0x20             |     r4 = r0 >> 0x20;
    0x000022d2 movs r0, r0                   |     
    0x000022d4 lsrs r2, r6, 0x1e             |     r2 = r6 >> 0x1e;
    0x000022d6 movs r0, r0                   |     
    0x000022d8 lsrs r6, r5, 0x1c             |     r6 = r5 >> 0x1c;
    0x000022da movs r0, r0                   |     
    0x000022dc lsrs r6, r3, 0x1e             |     r6 = r3 >> 0x1e;
    0x000022de movs r0, r0                   |     
    0x000022e0 lsrs r2, r3, 0x1d             |     r2 = r3 >> 0x1d;
    0x000022e2 movs r0, r0                   |     
                                             | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/html/axis-cgi/firmwaremanagement.cgi @ 0x250c */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.0000250c ()                  | void fcn_0000250c (int16_t arg1, int16_t arg2, int16_t arg3) {
                                             |     int16_t var_14h;
                                             |     int16_t var_0h;
                                             |     int16_t var_4h;
                                             |     int16_t var_8h;
                                             |     int16_t var_ch;
                                             |     int16_t var_10h;
                                             |     int16_t var_14h_2;
                                             |     int16_t var_18h;
                                             |     int32_t var_18h_2;
                                             |     int16_t var_20h;
                                             |     int16_t var_24h;
                                             |     r0 = arg1;
                                             |     r1 = arg2;
                                             |     r2 = arg3;
    0x0000250c mov r5, r2                    |     r5 = r2;
    0x0000250e ldr r2, [pc, 0x11c]           |     
    0x00002510 ldr r3, [pc, 0x11c]           |     r3 = *(0x2630);
    0x00002512 push {r7, lr}                 |     
    0x00002514 sub sp, 0x28                  |     
    0x00002516 add r2, pc                    |     r2 = 0x4b48;
    0x00002518 ldr r3, [r2, r3]              |     
    0x0000251a ldr r3, [r3]                  |     r3 = *(0x4b48);
    0x0000251c str r3, [sp, 0x24]            |     var_24h = r3;
    0x0000251e mov.w r3, 0                   |     r3 = 0;
                                             |     if (r0 == 0) {
    0x00002522 cbz r0, 0x254c                |         goto label_0;
                                             |     }
    0x00002524 ldr r3, [pc, 0x10c]           |     
    0x00002526 add r3, pc                    |     
    0x00002528 ldr r3, [r3, 0x1c]            |     r3 = *(0x4b7a);
    0x0000252a cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x0000252c bne 0x25e8                    |         goto label_1;
                                             |     }
    0x0000252e mov r6, r1                    |     r6 = r1;
    0x00002530 mov r4, r0                    |     r4 = r0;
    0x00002532 blx 0x1188                    |     r0 = malloc (r0);
    0x00002536 mov r7, r0                    |     r7 = r0;
    0x00002538 cmp r5, 0                     |     
    0x0000253a bne 0x260c                    |     
                                             |     while (1) {
    0x0000253c subs r1, r4, r5               |         r1 = r4 - r5;
    0x0000253e adds r0, r7, r5               |         r0 = r7 + r5;
    0x00002540 bl 0x1ee0                     |         fcn_00001ee0 (r0, r1);
    0x00002544 ldr r3, [pc, 0xf0]            |         
    0x00002546 add r3, pc                    |         r3 = 0x4b82;
    0x00002548 strd r4, r7, [r3, 0x1c]       |         __asm ("strd r4, r7, [r3, 0x1c]");
                                             | label_0:
    0x0000254c movs r4, 0                    |         r4 = 0;
    0x0000254e add r0, sp, 8                 |         r0 += var_8h;
    0x00002550 str r4, [sp, 8]               |         var_8h = r4;
    0x00002552 blx 0x10d4                    |         r0 = sd_bus_open_system ()
    0x00002556 cmp r0, r4                    |         
                                             |         if (r0 >= r4) {
    0x00002558 blt 0x25f4                    |             
    0x0000255a ldr r2, [pc, 0xe0]            |             
    0x0000255c ldr r1, [pc, 0xe0]            |             
    0x0000255e ldr r3, [pc, 0xe4]            |             
    0x00002560 add r2, pc                    |             r2 = 0x4ba2;
    0x00002562 ldr r0, [sp, 8]               |             r0 = var_8h;
    0x00002564 add r1, pc                    |             r1 = 0x4ba8;
    0x00002566 str r4, [sp, 0xc]             |             var_ch = r4;
    0x00002568 strd r2, r1, [sp]             |             __asm ("strd r2, r1, [sp]");
    0x0000256c add r3, pc                    |             r3 = 0x4bb6;
    0x0000256e add r1, sp, 0xc               |             r1 += var_ch;
    0x00002570 blx 0x11dc                    |             r0 = sd_bus_message_new_method_call ();
    0x00002574 cmp r0, 0                     |             
                                             |             if (r0 < 0) {
    0x00002576 blt 0x2600                    |                 goto label_2;
                                             |             }
    0x00002578 ldr r2, [pc, 0xcc]            |             
    0x0000257a movs r1, 0x79                 |             r1 = 0x79;
    0x0000257c ldr r0, [sp, 0xc]             |             r0 = var_ch;
    0x0000257e add r2, pc                    |             r2 = 0x4bca;
    0x00002580 ldrd r3, r2, [r2, 0x1c]       |             __asm ("ldrd r3, r2, [r2, 0x1c]");
    0x00002584 blx 0x10c8                    |             r0 = sd_bus_message_append_array ();
    0x00002588 cmp r0, 0                     |             
                                             |             if (r0 < 0) {
    0x0000258a blt 0x2600                    |                 goto label_2;
                                             |             }
    0x0000258c add r5, sp, 0x10              |             r5 += var_10h;
    0x0000258e ldrd r0, r1, [sp, 8]          |             __asm ("ldrd r0, r1, [var_8h]");
    0x00002592 str r5, [sp, 4]               |             var_4h = r5;
    0x00002594 add r5, sp, 0x18              |             r5 += var_18h;
    0x00002596 movs r2, 0                    |             r2 = 0;
    0x00002598 movs r3, 0                    |             r3 = 0;
    0x0000259a str r5, [sp]                  |             *(sp) = r5;
    0x0000259c strd r4, r4, [sp, 0x18]       |             __asm ("strd r4, r4, [var_18h]");
    0x000025a0 str r4, [sp, 0x20]            |             var_20h = r4;
    0x000025a2 str r4, [sp, 0x10]            |             var_10h = r4;
    0x000025a4 blx 0x1020                    |             r0 = sd_bus_call ();
    0x000025a8 cmp r0, 0                     |             
                                             |             if (r0 < 0) {
    0x000025aa blt 0x2616                    |                 goto label_3;
                                             |             }
    0x000025ac ldr r1, [pc, 0x9c]            |             
    0x000025ae add r2, sp, 0x14              |             r2 += var_14h_2;
    0x000025b0 ldr r0, [sp, 0x10]            |             r0 = var_10h;
    0x000025b2 add r1, pc                    |             r1 = 0x4c02;
    0x000025b4 blx 0x111c                    |             r0 = sd_bus_message_read ();
    0x000025b8 cmp r0, 0                     |             
                                             |             if (r0 < 0) {
    0x000025ba blt 0x261e                    |                 goto label_4;
                                             |             }
    0x000025bc ldr r1, [pc, 0x90]            |             
    0x000025be ldr r0, [pc, 0x94]            |             
    0x000025c0 ldr r2, [sp, 0x14]            |             r2 = var_14h_2;
    0x000025c2 add r1, pc                    |             r1 = 0x4c16;
    0x000025c4 add r0, pc                    |             r0 = 0x4c1e;
    0x000025c6 blx 0x1200                    |             r0 = json_pack ();
    0x000025ca mov r4, r0                    |             r4 = r0;
    0x000025cc ldr r0, [sp, 0xc]             |             r0 = var_ch;
    0x000025ce blx 0x1080                    |             sd_bus_message_unref ();
    0x000025d2 ldr r0, [sp, 0x10]            |             r0 = var_10h;
    0x000025d4 blx 0x1080                    |             sd_bus_message_unref ();
    0x000025d8 ldr r0, [sp, 8]               |             r0 = var_8h;
    0x000025da blx 0x1110                    |             sd_bus_unref ();
    0x000025de ldr r0, [pc, 0x78]            |             
    0x000025e0 mov r1, r4                    |             r1 = r4;
    0x000025e2 add r0, pc                    |             r0 = 0x4c40;
    0x000025e4 bl 0x1f30                     |             fcn_00001f30 (r0, r1);
                                             | label_1:
    0x000025e8 ldr r1, [pc, 0x70]            |             
    0x000025ea mov.w r0, 0x3e8               |             r0 = 0x3e8;
    0x000025ee add r1, pc                    |             r1 = 0x4c4e;
    0x000025f0 bl 0x1ff8                     |             fcn_00001ff8 (r0, r1);
                                             |         }
    0x000025f4 ldr r1, [pc, 0x68]            |         
    0x000025f6 movw r0, 0x3eb                |         r0 = 0x3eb;
    0x000025fa add r1, pc                    |         r1 = 0x4c5e;
    0x000025fc bl 0x1ff8                     |         fcn_00001ff8 (r0, r1);
                                             | label_2:
    0x00002600 ldr r1, [pc, 0x60]            |         
    0x00002602 movw r0, 0x3eb                |         r0 = 0x3eb;
    0x00002606 add r1, pc                    |         r1 = 0x4c6e;
    0x00002608 bl 0x1ff8                     |         fcn_00001ff8 (r0, r1);
    0x0000260c mov r1, r6                    |         r1 = r6;
    0x0000260e mov r2, r5                    |         r2 = r5;
    0x00002610 blx 0x10bc                    |         memcpy (r0, r1, r2);
    0x00002614 b 0x253c                      |         
                                             |     }
                                             | label_3:
    0x00002616 ldrd r0, r1, [sp, 0x18]       |     __asm ("ldrd r0, r1, [var_18h]");
    0x0000261a bl 0x2304                     |     fcn_00002304 (r0, r1);
                                             | label_4:
    0x0000261e ldr r1, [pc, 0x48]            |     
    0x00002620 movw r0, 0x3eb                |     r0 = 0x3eb;
    0x00002624 add r1, pc                    |     r1 = 0x4c92;
    0x00002626 bl 0x1ff8                     |     fcn_00001ff8 (r0, r1);
    0x0000262a nop                           |     
    0x0000262c cmp r1, 0xa2                  |     
    0x0000262e movs r1, r0                   |     r1 = r0;
    0x00002630 lsls r4, r6, 4                |     r4 = r6 << 4;
    0x00002632 movs r0, r0                   |     
    0x00002634 cmp r2, 0xe2                  |     
    0x00002636 movs r1, r0                   |     r1 = r0;
    0x00002638 cmp r2, 0xc2                  |     
    0x0000263a movs r1, r0                   |     r1 = r0;
    0x0000263c asrs r4, r1, 1                |     r4 = r1 >> 1;
    0x0000263e movs r0, r0                   |     
    0x00002640 asrs r0, r6, 1                |     r0 = r6 >> 1;
    0x00002642 movs r0, r0                   |     
    0x00002644 asrs r0, r3, 0x20             |     r0 = r3 >> 0x20;
    0x00002646 movs r0, r0                   |     
    0x00002648 cmp r2, 0x8a                  |     
    0x0000264a movs r1, r0                   |     r1 = r0;
    0x0000264c asrs r6, r0, 0x1c             |     r6 = r0 >> 0x1c;
    0x0000264e movs r0, r0                   |     
    0x00002650 asrs r2, r1, 1                |     r2 = r1 >> 1;
    0x00002652 movs r0, r0                   |     
    0x00002654 lsrs r0, r3, 8                |     r0 = r3 >> 8;
    0x00002656 movs r0, r0                   |     
    0x00002658 lsrs r2, r6, 0x1d             |     r2 = r6 >> 0x1d;
    0x0000265a movs r0, r0                   |     
    0x0000265c lsrs r6, r5, 0x1d             |     r6 = r5 >> 0x1d;
    0x0000265e movs r0, r0                   |     
    0x00002660 lsrs r6, r0, 0xa              |     r6 = r0 >> 0xa;
    0x00002662 movs r0, r0                   |     
    0x00002664 asrs r6, r1, 0x20             |     r6 = r1 >> 0x20;
    0x00002666 movs r0, r0                   |     
    0x00002668 lsrs r0, r7, 0x1e             |     r0 = r7 >> 0x1e;
    0x0000266a movs r0, r0                   |     
                                             | }

[*] Function system used 3 times firmwaremanagement.cgi