[*] Binary protection state of featureflag.cgi
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH No Symbols
[*] Function system tear down of featureflag.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/featureflag.cgi @ 0x1ad0 */
| #include <stdint.h>
|
; (fcn) fcn.00001ad0 () | void fcn_00001ad0 (int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_3h;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_44h;
| int16_t var_68h;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00001ad0 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00001ad4 mov r7, r2 | r7 = r2;
0x00001ad6 ldr r2, [pc, 0x3c0] |
0x00001ad8 mov r8, r3 | r8 = r3;
0x00001ada sub sp, 0x48 |
0x00001adc mov r4, r1 | r4 = r1;
0x00001ade ldr r3, [pc, 0x3bc] | r3 = *(0x1e9e);
0x00001ae0 add r2, pc | r2 = 0x397e;
0x00001ae2 ldr r0, [r1] | r0 = *(r1);
0x00001ae4 ldr r6, [pc, 0x3b8] |
0x00001ae6 movs r1, 0x65 | r1 = 0x65;
0x00001ae8 ldr r3, [r2, r3] |
0x00001aea ldr r2, [pc, 0x3b8] |
0x00001aec ldr.w sb, [sp, 0x68] | sb = var_68h;
0x00001af0 add r6, pc | r6 = 0x3994;
0x00001af2 ldr r3, [r3] | r3 = *(0x397e);
0x00001af4 str r3, [sp, 0x44] | var_44h = r3;
0x00001af6 mov.w r3, 0 | r3 = 0;
0x00001afa add r2, pc | r2 = 0x39a4;
0x00001afc blx 0x17f8 | r0 = sym ();
0x00001b00 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 < r0) {
0x00001b02 blt.w 0x1db6 | goto label_6;
| }
0x00001b06 ldr r1, [pc, 0x3a0] |
0x00001b08 add r2, sp, 4 | r2 += var_4h_2;
0x00001b0a ldr r0, [r4] | r0 = *(r4);
0x00001b0c add r1, pc | r1 = 0x39ba;
0x00001b0e blx 0x16d4 | r0 = fcn_000016d4 ();
0x00001b12 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 < r0) {
0x00001b14 blt.w 0x1d36 | goto label_7;
| }
0x00001b16 strh r7, [r1, 8] | *((r1 + 8)) = r7;
0x00001b18 movs r3, 0 | r3 = 0;
0x00001b1a ldr r0, [r4] | r0 = *(r4);
0x00001b1c add r2, sp, 8 | r2 += var_8h;
0x00001b1e add.w r1, sp, 3 | r1 += var_3h;
0x00001b22 str r3, [sp, 8] | var_8h = r3;
0x00001b24 blx 0x16e0 | r0 = fcn_000016e0 ();
0x00001b28 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 < r0) {
0x00001b2a blt.w 0x1d64 | goto label_8;
| }
0x00001b2e ldrb.w r1, [sp, 3] | r1 = var_3h;
0x00001b32 cmp r1, 0x76 |
| if (r1 != 0x76) {
0x00001b34 bne.w 0x1e6a | goto label_9;
| }
0x00001b38 ldr r2, [sp, 8] | r2 = var_8h;
0x00001b3a cmp r2, 0 |
| if (r2 == 0) {
0x00001b3c beq.w 0x1e6a | goto label_9;
| }
0x00001b40 ldr r0, [r4] | r0 = *(r4);
0x00001b42 blx 0x17f8 | r0 = sym ();
0x00001b46 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 < r0) {
0x00001b48 blt.w 0x1d86 | goto label_10;
| }
0x00001b4c ldr r5, [sp, 4] | r5 = var_4h_2;
0x00001b4e movs r2, 5 | r2 = 5;
0x00001b50 ldr r1, [pc, 0x358] |
0x00001b52 mov r0, r5 | r0 = r5;
0x00001b54 add r1, pc | r1 = 0x3a04;
0x00001b56 blx 0x165c | r0 = fcn_0000165c ();
0x00001b5a cmp r0, 0 |
| if (r0 == 0) {
0x00001b5c beq.w 0x1c80 | goto label_11;
| }
| label_2:
0x00001b60 ldr r1, [pc, 0x34c] |
0x00001b62 movs r2, 0xc | r2 = 0xc;
0x00001b64 mov r0, r5 | r0 = r5;
0x00001b66 add r1, pc | r1 = 0x3a1a;
0x00001b68 blx 0x165c | r0 = fcn_0000165c ();
0x00001b6c cmp r0, 0 |
| if (r0 != 0) {
0x00001b6e beq 0x1bf6 |
| label_3:
0x00001b70 ldr r1, [pc, 0x340] |
0x00001b72 movs r2, 0xb | r2 = 0xb;
0x00001b74 mov r0, r5 | r0 = r5;
0x00001b76 add r1, pc | r1 = 0x3a2e;
0x00001b78 blx 0x165c | r0 = fcn_0000165c ();
0x00001b7c cmp r0, 0 |
| if (r0 == 0) {
0x00001b7e beq.w 0x1cd4 | goto label_12;
| }
| label_0:
0x00001b82 movs r0, 8 | r0 = 8;
0x00001b84 add.w sb, sp, 0x14 | sb += var_14h;
0x00001b88 blx 0x1698 | fcn_00001698 ();
0x00001b8c ldr r1, [pc, 0x328] |
0x00001b8e mov r8, r0 | r8 = r0;
0x00001b90 add r2, sp, 0xc | r2 += var_ch;
0x00001b92 mov r0, sb | r0 = sb;
0x00001b94 add r1, pc | r1 = 0x3a50;
0x00001b96 blx 0x1804 | sd_bus_flush_close_unref ();
0x00001b9a ldr r1, [sp, 8] | r1 = var_8h;
0x00001b9c mov r0, sb | r0 = sb;
0x00001b9e blx 0x18dc | cxa_finalize ();
0x00001ba2 add r5, sp, 0x34 | r5 += var_34h;
0x00001ba4 mov r7, r0 | r7 = r0;
0x00001ba6 str r5, [sp, 0x2c] | var_2ch = r5;
0x00001ba8 mov r4, r0 | r4 = r0;
0x00001baa ldr r3, [r7], 8 | r3 = *(r7);
| r7 += 8;
0x00001bae cmp r3, r7 |
0x00001bb0 itttt eq |
| if (r3 != r7) {
0x00001bb2 ldreq r0, [r0, 8] | r0 = *((r0 + 8));
| }
| if (r3 != r7) {
0x00001bb4 ldreq r1, [r7, 4] | r1 = *((r7 + 4));
| }
| if (r3 != r7) {
0x00001bb6 ldreq r3, [r7, 0xc] | r3 = *((r7 + 0xc));
| }
| if (r3 != r7) {
0x00001bb8 ldreq r2, [r7, 8] | r2 = *((r7 + 8));
| }
0x00001bba itte ne |
| if (r3 == r7) {
0x00001bbc strne r3, [sp, 0x2c] | var_2ch = r3;
| }
| if (r3 == r7) {
0x00001bbe ldrne r3, [r4, 8] | r3 = *((r4 + 8));
| }
| if (r3 != r7) {
0x00001bc0 stmeq r5!, {r0, r1, r2, r3} | *(r5!) = r0;
| *((r5! + 4)) = r1;
| *((r5! + 8)) = r2;
| *((r5! + 12)) = r3;
| }
0x00001bc2 mov r0, r8 | r0 = r8;
0x00001bc4 it ne |
| if (r3 == r7) {
0x00001bc6 strne r3, [sp, 0x34] | var_34h = r3;
| }
0x00001bc8 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00001bca str r3, [sp, 0x30] | var_30h = r3;
0x00001bcc movs r3, 0 | r3 = 0;
0x00001bce str r7, [r4] | *(r4) = r7;
0x00001bd0 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00001bd2 strb r3, [r4, 8] | *((r4 + 8)) = r3;
0x00001bd4 add r4, sp, 0x2c | r4 += var_2ch;
0x00001bd6 mov r1, r4 | r1 = r4;
0x00001bd8 blx 0x1864 | cxa_end_catch ();
0x00001bdc mov r0, r4 | r0 = r4;
0x00001bde blx 0x17d4 | sym ();
0x00001be2 mov r0, sb | r0 = sb;
0x00001be4 blx 0x17d4 | sym ();
0x00001be8 ldr r2, [pc, 0x2d0] | r2 = *(0x1ebc);
0x00001bea mov r0, r8 | r0 = r8;
0x00001bec ldr r3, [pc, 0x2d0] | r3 = *(0x1ec0);
0x00001bee ldr r2, [r6, r2] | r2 = *((r6 + r2));
0x00001bf0 ldr r1, [r6, r3] | r1 = *((r6 + r3));
0x00001bf2 blx 0x1888 | sym ();
| }
0x00001bf6 ldr.w r8, [sp, 8] | r8 = var_8h;
0x00001bfa add r5, sp, 0x34 | r5 += var_34h;
0x00001bfc movs r2, 1 | r2 = 1;
0x00001bfe str r5, [sp, 0x2c] | var_2ch = r5;
0x00001c00 cmp.w r8, 0 |
0x00001c02 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 != r0) {
0x00001c04 beq 0x1c10 |
0x00001c06 mov r0, r8 | r0 = r8;
0x00001c08 blx 0x1840 | r0 = sym ();
0x00001c0c add.w r2, r8, r0 | r2 = r8 + r0;
| }
0x00001c10 mov r1, r8 | r1 = r8;
0x00001c12 add.w r8, sp, 0x2c | r8 += var_2ch;
0x00001c16 mov r0, r8 | r0 = r8;
0x00001c18 bl 0x1a38 | fcn_00001a38 (r0, r1, r2);
0x00001c1c ldr r1, [pc, 0x2a4] |
0x00001c1e mov r0, r8 | r0 = r8;
0x00001c20 add r1, pc | r1 = 0x3ae8;
0x00001c22 blx 0x1638 | r0 = fcn_00001638 ();
0x00001c26 mov r8, r0 | r8 = r0;
0x00001c28 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00001c2a cmp r0, r5 |
| if (r0 != r5) {
0x00001c2c beq 0x1c36 |
0x00001c2e ldr r1, [sp, 0x34] | r1 = var_34h;
0x00001c30 adds r1, 1 | r1++;
0x00001c32 blx 0x16fc | sym ();
| }
0x00001c36 cmp.w r8, 0 |
| if (r8 != 0) {
0x00001c3a bne 0x1d32 | goto label_13;
| }
0x00001c3c ldr r1, [sp, 8] | r1 = var_8h;
0x00001c3e mov r2, sb | r2 = sb;
0x00001c40 ldr r0, [r4] | r0 = *(r4);
0x00001c42 blx 0x16d4 | r0 = fcn_000016d4 ();
0x00001c46 mov r5, r0 | r5 = r0;
| do {
| label_1:
0x00001c48 cmp r5, 0 |
| if (r5 < 0) {
0x00001c4a blt.w 0x1e44 | goto label_14;
| }
0x00001c4e ldr r0, [r4] | r0 = *(r4);
0x00001c50 blx 0x18b8 | r0 = sym ();
0x00001c54 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 < r0) {
0x00001c56 blt.w 0x1df2 | goto label_15;
| }
0x00001c5a ldr r0, [r4] | r0 = *(r4);
0x00001c5c blx 0x18b8 | r0 = sym ();
0x00001c60 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 < r0) {
0x00001c62 blt.w 0x1e14 | goto label_16;
| }
0x00001c66 ldr r2, [pc, 0x260] |
0x00001c68 ldr r3, [pc, 0x230] | r3 = *(0x1e9c);
0x00001c6a add r2, pc | r2 = 0x3b38;
0x00001c6c ldr r3, [r2, r3] | r3 = *(0x3b38);
0x00001c6e ldr r2, [r3] | r2 = *(0x3b38);
0x00001c70 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00001c72 eors r2, r3 | r2 ^= r3;
0x00001c74 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00001c78 bne 0x1d2a | goto label_17;
| }
0x00001c7a add sp, 0x48 |
0x00001c7c pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_11:
0x00001c80 ldr.w sl, [sp, 8] | sl = var_8h;
0x00001c84 add r5, sp, 0x34 | r5 += var_34h;
0x00001c86 movs r2, 1 | r2 = 1;
0x00001c88 str r5, [sp, 0x2c] | var_2ch = r5;
0x00001c8a cmp.w sl, 0 |
| if (sl != 0) {
0x00001c8e beq 0x1c9a |
0x00001c90 mov r0, sl | r0 = sl;
0x00001c92 blx 0x1840 | r0 = sym ();
0x00001c96 add.w r2, sl, r0 | r2 = sl + r0;
| }
0x00001c9a mov r1, sl | r1 = sl;
0x00001c9c add.w sl, sp, 0x2c | sl += var_2ch;
0x00001ca0 mov r0, sl | r0 = sl;
0x00001ca2 bl 0x1a38 | fcn_00001a38 (r0, r1, r2);
0x00001ca6 ldr r1, [pc, 0x224] |
0x00001ca8 mov r0, sl | r0 = sl;
0x00001caa add r1, pc | r1 = 0x3b7c;
0x00001cac blx 0x1638 | r0 = fcn_00001638 ();
0x00001cb0 mov sl, r0 | sl = r0;
0x00001cb2 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00001cb4 cmp r0, r5 |
| if (r0 != r5) {
0x00001cb6 beq 0x1cc0 |
0x00001cb8 ldr r1, [sp, 0x34] | r1 = var_34h;
0x00001cba adds r1, 1 | r1++;
0x00001cbc blx 0x16fc | sym ();
| }
0x00001cc0 cmp.w sl, 0 |
| if (sl != 0) {
0x00001cc4 bne 0x1d2e | goto label_18;
| }
0x00001cc6 ldr r1, [sp, 8] | r1 = var_8h;
0x00001cc8 mov r2, r8 | r2 = r8;
0x00001cca ldr r0, [r4] | r0 = *(r4);
0x00001ccc blx 0x16d4 | r0 = fcn_000016d4 ();
0x00001cd0 mov r5, r0 | r5 = r0;
0x00001cd2 b 0x1c48 |
| } while (1);
| label_12:
0x00001cd4 ldr.w r8, [sp, 8] | r8 = var_8h;
0x00001cd8 add r5, sp, 0x34 | r5 += var_34h;
0x00001cda movs r2, 1 | r2 = 1;
0x00001cdc str r5, [sp, 0x2c] | var_2ch = r5;
0x00001cde cmp.w r8, 0 |
| if (r8 != 0) {
0x00001ce2 beq 0x1cee |
0x00001ce4 mov r0, r8 | r0 = r8;
0x00001ce6 blx 0x1840 | r0 = sym ();
0x00001cea add.w r2, r8, r0 | r2 = r8 + r0;
| }
0x00001cee mov r1, r8 | r1 = r8;
0x00001cf0 add.w r8, sp, 0x2c | r8 += var_2ch;
0x00001cf4 mov r0, r8 | r0 = r8;
0x00001cf6 bl 0x1a38 | fcn_00001a38 (r0, r1, r2);
0x00001cfa ldr r1, [pc, 0x1d4] |
0x00001cfc mov r0, r8 | r0 = r8;
0x00001cfe add r1, pc | r1 = 0x3bd4;
0x00001d00 blx 0x1638 | r0 = fcn_00001638 ();
0x00001d04 mov r8, r0 | r8 = r0;
0x00001d06 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00001d08 cmp r0, r5 |
| if (r0 != r5) {
0x00001d0a beq 0x1d14 |
0x00001d0c ldr r1, [sp, 0x34] | r1 = var_34h;
0x00001d0e adds r1, 1 | r1++;
0x00001d10 blx 0x16fc | sym ();
0x00001d12 invalid |
| }
0x00001d14 cmp.w r8, 0 |
| if (r8 != 0) {
0x00001d18 bne.w 0x1b82 | goto label_0;
| }
0x00001d1c ldr r1, [sp, 8] | r1 = var_8h;
0x00001d1e mov r2, r7 | r2 = r7;
0x00001d20 ldr r0, [r4] | r0 = *(r4);
0x00001d22 blx 0x16d4 | r0 = fcn_000016d4 ();
0x00001d26 mov r5, r0 | r5 = r0;
0x00001d28 b 0x1c48 | goto label_1;
| label_17:
0x00001d2a blx 0x17a4 | cxa_end_cleanup ();
| label_18:
0x00001d2e ldr r5, [sp, 4] | r5 = var_4h_2;
0x00001d30 b 0x1b60 | goto label_2;
| label_13:
0x00001d32 ldr r5, [sp, 4] | r5 = var_4h_2;
0x00001d34 b 0x1b70 | goto label_3;
| label_7:
0x00001d36 movs r0, 0x10 | r0 = 0x10;
0x00001d38 rsbs r5, r5, 0 | r5 -= ;
0x00001d3a blx 0x1698 | r0 = fcn_00001698 ();
0x00001d3e mov r4, r0 | r4 = r0;
0x00001d40 blx 0x16a4 | fcn_000016a4 ();
0x00001d44 ldr r3, [pc, 0x18c] |
0x00001d46 mov r2, r0 | r2 = r0;
0x00001d48 strd r5, r0, [sp, 0xc] | __asm ("strd r5, r0, [sp, 0xc]");
0x00001d4c mov r1, r5 | r1 = r5;
0x00001d4e mov r0, r4 | r0 = r4;
0x00001d50 add r3, pc | r3 = 0x3c28;
0x00001d52 bl 0x3334 | fcn_00003334 (r0, r1, r2);
| do {
| label_4:
0x00001d56 ldr r2, [pc, 0x180] | r2 = *(0x1eda);
0x00001d58 mov r0, r4 | r0 = r4;
0x00001d5a ldr r3, [pc, 0x180] | r3 = *(0x1ede);
0x00001d5c ldr r2, [r6, r2] | r2 = *((r6 + r2));
0x00001d5e ldr r1, [r6, r3] | r1 = *((r6 + r3));
0x00001d60 blx 0x1888 | sym ();
| label_8:
0x00001d64 movs r0, 0x10 | r0 = 0x10;
0x00001d66 rsbs r5, r5, 0 | r5 -= ;
0x00001d68 blx 0x1698 | r0 = fcn_00001698 ();
0x00001d6c mov r4, r0 | r4 = r0;
0x00001d6e blx 0x16a4 | fcn_000016a4 ();
0x00001d72 ldr r3, [pc, 0x16c] |
0x00001d74 mov r2, r0 | r2 = r0;
0x00001d76 strd r5, r0, [sp, 0xc] | __asm ("strd r5, r0, [sp, 0xc]");
0x00001d7a mov r1, r5 | r1 = r5;
0x00001d7c mov r0, r4 | r0 = r4;
0x00001d7e add r3, pc | r3 = 0x3c64;
0x00001d80 bl 0x3334 | fcn_00003334 (r0, r1, r2);
0x00001d84 b 0x1d56 |
| } while (1);
| label_10:
0x00001d86 movs r0, 0x10 | r0 = 0x10;
0x00001d88 rsbs r5, r5, 0 | r5 -= ;
0x00001d8a blx 0x1698 | r0 = fcn_00001698 ();
0x00001d8e mov r4, r0 | r4 = r0;
0x00001d90 blx 0x16a4 | fcn_000016a4 ();
0x00001d94 ldr r3, [pc, 0x14c] |
0x00001d96 mov r2, r0 | r2 = r0;
0x00001d98 strd r5, r0, [sp, 0xc] | __asm ("strd r5, r0, [sp, 0xc]");
0x00001d9c mov r1, r5 | r1 = r5;
0x00001d9e mov r0, r4 | r0 = r4;
0x00001da0 add r3, pc | r3 = 0x3c88;
0x00001da2 bl 0x3334 | fcn_00003334 (r0, r1, r2);
0x00001da6 b 0x1d56 | goto label_4;
| do {
| label_5:
0x00001da8 mov r0, r4 | r0 = r4;
0x00001daa blx 0x1714 | sym ();
0x00001dae blx 0x17b0 | g_free ();
0x00001db2 b 0x1da8 |
| } while (1);
| label_6:
0x00001db6 movs r0, 0x10 | r0 = 0x10;
0x00001db8 rsbs r5, r5, 0 | r5 -= ;
0x00001dba blx 0x1698 | r0 = fcn_00001698 ();
0x00001dbe mov r4, r0 | r4 = r0;
0x00001dc0 blx 0x16a4 | fcn_000016a4 ();
0x00001dc4 ldr r3, [pc, 0x120] |
0x00001dc6 mov r2, r0 | r2 = r0;
0x00001dc8 strd r5, r0, [sp, 0xc] | __asm ("strd r5, r0, [sp, 0xc]");
0x00001dcc mov r1, r5 | r1 = r5;
0x00001dce mov r0, r4 | r0 = r4;
0x00001dd0 add r3, pc | r3 = 0x3cbc;
0x00001dd2 bl 0x3334 | fcn_00003334 (r0, r1, r2);
0x00001dd6 b 0x1d56 | goto label_4;
| do {
0x00001dde mov r0, r8 | r0 = r8;
0x00001de0 blx 0x1714 | sym ();
0x00001de4 blx 0x17b0 | g_free ();
0x00001de8 b 0x1da8 | goto label_5;
| label_15:
0x00001df2 movs r0, 0x10 | r0 = 0x10;
0x00001df4 rsbs r5, r5, 0 | r5 -= ;
0x00001df6 blx 0x1698 | r0 = fcn_00001698 ();
0x00001dfa mov r4, r0 | r4 = r0;
0x00001dfc blx 0x16a4 | fcn_000016a4 ();
0x00001e00 ldr r3, [pc, 0xe8] |
0x00001e02 mov r2, r0 | r2 = r0;
0x00001e04 strd r5, r0, [sp, 0xc] | __asm ("strd r5, r0, [sp, 0xc]");
0x00001e08 mov r1, r5 | r1 = r5;
0x00001e0a mov r0, r4 | r0 = r4;
0x00001e0c add r3, pc | r3 = 0x3cfc;
0x00001e0e bl 0x3334 | fcn_00003334 (r0, r1, r2);
0x00001e10 invalid |
| label_16:
0x00001e14 movs r0, 0x10 | r0 = 0x10;
0x00001e16 rsbs r4, r4, 0 | r4 -= ;
0x00001e18 blx 0x1698 | r0 = fcn_00001698 ();
0x00001e1c mov r5, r0 | r5 = r0;
0x00001e1e blx 0x16a4 | fcn_000016a4 ();
0x00001e22 ldr r3, [pc, 0xcc] |
0x00001e24 mov r2, r0 | r2 = r0;
0x00001e26 strd r4, r0, [sp, 0xc] | __asm ("strd r4, r0, [sp, 0xc]");
0x00001e28 ands r3, r0 | r3 &= r0;
0x00001e2a mov r1, r4 | r1 = r4;
0x00001e2c mov r0, r5 | r0 = r5;
0x00001e2e add r3, pc | r3 = 0x3d24;
0x00001e30 bl 0x3334 | fcn_00003334 (r0, r1, r2);
0x00001e34 ldr r2, [pc, 0xa0] | r2 = *(0x1ed8);
0x00001e36 mov r0, r5 | r0 = r5;
0x00001e38 ldr r3, [pc, 0xa0] | r3 = *(0x1edc);
0x00001e3a ldr r2, [r6, r2] | r2 = *((r6 + r2));
0x00001e3c ldr r1, [r6, r3] | r1 = *((r6 + r3));
0x00001e3e blx 0x1888 | sym ();
0x00001e42 b 0x1dde |
| } while (1);
| label_14:
0x00001e44 movs r0, 0x10 | r0 = 0x10;
0x00001e46 rsbs r5, r5, 0 | r5 -= ;
0x00001e48 blx 0x1698 | r0 = fcn_00001698 ();
0x00001e4c mov r4, r0 | r4 = r0;
0x00001e4e blx 0x16a4 | fcn_000016a4 ();
0x00001e52 ldr r3, [pc, 0xa0] |
0x00001e54 mov r2, r0 | r2 = r0;
0x00001e56 strd r5, r0, [sp, 0xc] | __asm ("strd r5, r0, [sp, 0xc]");
0x00001e5a mov r1, r5 | r1 = r5;
0x00001e5c mov r0, r4 | r0 = r4;
0x00001e5e add r3, pc | r3 = 0x3d58;
0x00001e60 bl 0x3334 | fcn_00003334 (r0, r1, r2);
0x00001e64 b 0x1d56 | goto label_4;
| label_9:
0x00001e6a movs r0, 0x10 | r0 = 0x10;
0x00001e6c blx 0x1698 | r0 = fcn_00001698 ();
0x00001e70 mov r4, r0 | r4 = r0;
0x00001e72 blx 0x16a4 | fcn_000016a4 ();
0x00001e76 movs r3, 0x16 | r3 = 0x16;
0x00001e78 mov r2, r0 | r2 = r0;
0x00001e7a strd r3, r0, [sp, 0xc] | __asm ("strd r3, r0, [sp, 0xc]");
0x00001e7e movs r1, 0x16 | r1 = 0x16;
0x00001e80 ldr r3, [pc, 0x74] |
0x00001e82 mov r0, r4 | r0 = r4;
0x00001e84 add r3, pc | r3 = 0x3d80;
0x00001e86 bl 0x3334 | fcn_00003334 (r0, r1, r2);
0x00001e8a b 0x1d56 | goto label_4;
| }
; 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/featureflag.cgi @ 0x22e4 */
| #include <stdint.h>
|
; (fcn) fcn.000022e4 () | void fcn_000022e4 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| void * s2;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_84h;
| int32_t var_84h_2;
| int16_t var_8ch;
| int16_t var_9ch;
| int32_t var_9ch_2;
| int16_t var_a4h;
| int16_t var_b4h;
| int16_t var_b5h;
| int16_t var_b8h;
| int16_t var_bch;
| int16_t var_c0h;
| void * var_d0h;
| int16_t var_d4h;
| int16_t var_d8h;
| void * s1;
| int16_t var_ech;
| int16_t var_f0h;
| int16_t var_100h;
| int16_t var_104h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000022e4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000022e8 mov r4, r0 | r4 = r0;
0x000022ea ldr.w r0, [pc, 0x628] | r0 = *(0x00002914);
0x000022ee sub sp, 0x10c |
0x000022f0 mov r5, r1 | r5 = r1;
0x000022f2 mov sl, r2 | sl = r2;
0x000022f4 ldr.w r3, [pc, 0x620] |
0x000022f8 add r2, sp, 0x48 | r2 += var_48h;
0x000022fa add r0, pc | r0 += pc;
0x000022fc str r1, [sp, 0x44] | var_44h = r1;
0x000022fe ldr.w r1, [pc, 0x61c] |
0x00002302 ldr r3, [r0, r3] | r3 = *((r0 + r3));
0x00002304 mov r0, r5 | r0 = r5;
0x00002306 add r1, pc | r1 = 0x4c28;
0x00002308 ldr r3, [r3] | r3 = *(0x2918);
0x0000230a str r3, [sp, 0x104] | var_104h = r3;
0x0000230c mov.w r3, 0 | r3 = 0;
0x00002310 ldr.w r3, [pc, 0x60c] | r3 = *(0x00002920);
0x00002314 add r3, pc | r3 += pc;
0x00002316 str r3, [sp, 0x34] | var_34h = r3;
0x00002318 blx 0x16d4 | r0 = fcn_000016d4 ();
0x0000231c subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x0000231e blt.w 0x28ea | goto label_10;
| }
0x00002322 ldr.w r2, [pc, 0x600] |
0x00002326 mov r0, r5 | r0 = r5;
0x00002328 movs r1, 0x61 | r1 = 0x61;
0x0000232a add r2, pc | r2 = 0x4c54;
0x0000232c blx 0x17f8 | r0 = sym ();
0x00002330 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 < r0) {
0x00002332 blt.w 0x287a | goto label_11;
| }
0x00002336 mov.w r3, -1 | r3 = -1;
0x0000233a add.w r8, sp, 0x54 | r8 += var_54h;
0x0000233e add r7, sp, 0x50 | r7 += var_50h;
0x00002340 add r6, sp, 0x4c | r6 += var_4ch;
0x00002342 add r5, sp, 0x44 | r5 += var_44h;
0x00002344 movs r2, 0 | r2 = 0;
0x00002346 strd r2, r3, [sp, 0x4c] | __asm ("strd r2, r3, [var_50h]");
0x0000234a mov r1, r5 | r1 = r5;
0x0000234c mov r2, r6 | r2 = r6;
0x0000234e mov r0, r4 | r0 = r4;
0x00002350 str r3, [sp, 0x54] | var_54h = r3;
0x00002352 mov r3, r7 | r3 = r7;
0x00002354 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00002358 bl 0x1ad0 | fcn_00001ad0 (r0, r1, r2);
0x0000235c mov r3, r7 | r3 = r7;
0x0000235e mov r2, r6 | r2 = r6;
0x00002360 mov r1, r5 | r1 = r5;
0x00002362 mov r0, r4 | r0 = r4;
0x00002364 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00002368 bl 0x1ad0 | fcn_00001ad0 (r0, r1, r2);
0x0000236c mov r3, r7 | r3 = r7;
0x0000236e mov r2, r6 | r2 = r6;
0x00002370 mov r1, r5 | r1 = r5;
0x00002372 mov r0, r4 | r0 = r4;
0x00002374 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00002378 bl 0x1ad0 | fcn_00001ad0 (r0, r1, r2);
0x0000237c ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0000237e cmp r3, 0 |
| if (r3 == 0) {
0x00002380 beq.w 0x27ec | goto label_12;
| }
0x00002384 ldr r3, [sp, 0x50] | r3 = var_50h;
0x00002386 adds r3, 1 | r3++;
| if (r3 == 1) {
0x00002388 beq.w 0x27ec | goto label_12;
| }
0x0000238c ldr r3, [sp, 0x54] | r3 = var_54h;
0x0000238e adds r3, 1 | r3++;
| if (r3 == 1) {
0x00002390 beq.w 0x27ec | goto label_12;
| }
0x00002394 ldr r4, [sp, 0x48] | r4 = var_48h;
0x00002396 add r3, sp, 0x74 | r3 += var_74h;
0x00002398 movs r2, 1 | r2 = 1;
0x0000239a str r3, [sp, 0x10] | var_10h = r3;
0x0000239c str r3, [sp, 0x6c] | var_6ch = r3;
| if (r4 != 0) {
0x0000239e cbz r4, 0x23a8 |
0x000023a0 mov r0, r4 | r0 = r4;
0x000023a2 blx 0x1840 | r0 = sym ();
0x000023a6 adds r2, r4, r0 | r2 = r4 + r0;
| }
0x000023a8 add r3, sp, 0x8c | r3 += var_8ch;
0x000023aa mov r1, r4 | r1 = r4;
0x000023ac add r0, sp, 0x6c | r0 += var_6ch;
0x000023ae mov r4, r3 | r4 = r3;
0x000023b0 str r0, [sp, 0x38] | var_38h = r0;
0x000023b2 str r3, [sp, 0x20] | var_20h = r3;
0x000023b4 bl 0x1a38 | fcn_00001a38 (r0, r1, r2);
0x000023b8 str r4, [sp, 0x84] | var_84h = r4;
0x000023ba movs r2, 1 | r2 = 1;
0x000023bc ldr r4, [sp, 0x48] | r4 = var_48h;
| if (r4 != 0) {
0x000023be cbz r4, 0x23c8 |
0x000023c0 mov r0, r4 | r0 = r4;
0x000023c2 blx 0x1840 | r0 = sym ();
0x000023c6 adds r2, r4, r0 | r2 = r4 + r0;
| }
0x000023c8 add r3, sp, 0x84 | r3 += var_84h;
0x000023ca mov r1, r4 | r1 = r4;
0x000023cc mov r0, r3 | r0 = r3;
0x000023ce str r3, [sp, 0x3c] | var_3ch = r3;
0x000023d0 bl 0x1a38 | fcn_00001a38 (r0, r1, r2);
0x000023d4 ldr r4, [sp, 0x4c] | r4 = var_4ch;
0x000023d6 add r3, sp, 0xa4 | r3 += var_a4h;
0x000023d8 movs r2, 1 | r2 = 1;
0x000023da str r3, [sp, 0x24] | var_24h = r3;
0x000023dc str r3, [sp, 0x9c] | var_9ch = r3;
| if (r4 != 0) {
0x000023de cbz r4, 0x23e8 |
0x000023e0 mov r0, r4 | r0 = r4;
0x000023e2 blx 0x1840 | r0 = sym ();
0x000023e6 adds r2, r4, r0 | r2 = r4 + r0;
| }
0x000023e8 add r3, sp, 0x9c | r3 += var_9ch;
0x000023ea mov r1, r4 | r1 = r4;
0x000023ec mov r0, r3 | r0 = r3;
0x000023ee str r3, [sp, 0x40] | var_40h = r3;
0x000023f0 bl 0x1a38 | fcn_00001a38 (r0, r1, r2);
0x000023f4 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000023f6 add r2, sp, 0xc0 | r2 += var_c0h;
0x000023f8 str r2, [sp, 0x1c] | var_1ch = r2;
0x000023fa str r2, [sp, 0xb8] | var_b8h = r2;
0x000023fc subs r3, 0 |
0x000023fe ldr r2, [sp, 0x10] | r2 = var_10h;
0x00002400 it ne |
| if (r3 == 0) {
0x00002402 movne r3, 1 | r3 = 1;
| }
0x00002404 strb.w r3, [sp, 0xb4] | var_b4h = r3;
0x00002408 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0000240a subs r3, 0 |
0x0000240c it ne |
| if (r3 == 0) {
0x0000240e movne r3, 1 | r3 = 1;
| }
0x00002410 strb.w r3, [sp, 0xb5] | var_b5h = r3;
0x00002414 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x00002416 cmp r3, r2 |
0x00002418 ittte eq |
| if (r3 != r2) {
0x0000241a moveq r3, r2 | r3 = r2;
| }
| if (r3 != r2) {
0x0000241c ldreq r4, [sp, 0x1c] | r4 = var_1ch;
| }
| if (r3 != r2) {
0x0000241e ldmeq r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
| }
| if (r3 == r2) {
0x00002420 strne r3, [sp, 0xb8] | var_b8h = r3;
| }
0x00002422 ite ne |
| if (r3 == r2) {
0x00002424 ldrne r3, [sp, 0x74] | r3 = var_74h;
| }
| if (r3 != r2) {
0x00002426 stmeq r4, {r0, r1, r2, r3} | *(r4) = r0;
| *((r4 + 4)) = r1;
| *((r4 + 8)) = r2;
| *((r4 + 12)) = r3;
| }
0x0000242a ldrd r5, r4, [sp, 0x84] | __asm ("ldrd r5, r4, [var_84h]");
0x0000242e it ne |
| if (r3 == r2) {
0x00002430 strne r3, [sp, 0xc0] | var_c0h = r3;
| }
0x00002432 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00002434 clz r2, r5 | r2 &= r5;
0x00002438 lsrs r2, r2, 5 | r2 >>= 5;
0x0000243a str r3, [sp, 0x6c] | var_6ch = r3;
0x0000243c ldr r3, [sp, 0x70] | r3 = var_70h;
0x0000243e str r3, [sp, 0xbc] | var_bch = r3;
0x00002440 rsbs r3, r4, 0 | r3 = r4 - ;
0x00002442 cmp r5, r3 |
0x00002444 mov.w r3, 0 | r3 = 0;
0x00002448 it eq |
| if (r5 != r3) {
0x0000244a moveq r2, 0 | r2 = 0;
| }
0x0000244c str r3, [sp, 0x70] | var_70h = r3;
0x0000244e strb.w r3, [sp, 0x74] | var_74h = r3;
0x00002452 add r3, sp, 0xd8 | r3 += var_d8h;
0x00002454 str r3, [sp, 8] | var_8h = r3;
0x00002456 str r3, [sp, 0xd0] | var_d0h = r3;
0x00002458 cmp r2, 0 |
| if (r2 != 0) {
0x0000245a bne.w 0x27c6 | goto label_13;
| }
0x0000245e cmp r4, 0xf |
0x00002460 str r4, [sp, 0x64] | s2 = r4;
| if (r4 > 0xf) {
0x00002462 bhi.w 0x2728 | goto label_14;
| }
0x00002466 cmp r4, 1 |
| if (r4 != 1) {
0x00002468 bne.w 0x26aa | goto label_15;
| }
0x0000246c ldr r2, [sp, 8] | r2 = var_8h;
0x0000246e ldrb r3, [r5] | r3 = *(r5);
0x00002470 strb.w r3, [sp, 0xd8] | var_d8h = r3;
| label_1:
0x00002474 movs r3, 0 | r3 = 0;
0x00002476 str r4, [sp, 0xd4] | var_d4h = r4;
0x00002478 strb r3, [r2, r4] | *((r2 + r4)) = r3;
0x0000247a add r3, sp, 0xf0 | r3 += var_f0h;
0x0000247c ldrd r5, r4, [sp, 0x9c] | __asm ("ldrd r5, r4, [var_9ch]");
0x00002480 str r3, [sp, 0xc] | var_ch = r3;
0x00002482 str r3, [sp, 0xe8] | s1 = r3;
0x00002484 clz r2, r5 | r2 &= r5;
0x00002488 rsbs r3, r4, 0 | r3 = r4 - ;
0x0000248a lsrs r2, r2, 5 | r2 >>= 5;
0x0000248c cmp r5, r3 |
0x0000248e it eq |
| if (r5 != r3) {
0x00002490 moveq r2, 0 | r2 = 0;
| }
0x00002492 cmp r2, 0 |
| if (r2 != 0) {
0x00002494 bne.w 0x27ce | goto label_16;
| }
0x00002498 cmp r4, 0xf |
0x0000249a str r4, [sp, 0x64] | s2 = r4;
| if (r4 > 0xf) {
0x0000249c bhi.w 0x270c | goto label_17;
| }
0x000024a0 cmp r4, 1 |
| if (r4 != 1) {
0x000024a2 bne.w 0x2700 | goto label_18;
| }
0x000024a6 ldr r2, [sp, 0xc] | r2 = var_ch;
0x000024a8 ldrb r3, [r5] | r3 = *(r5);
0x000024aa strb.w r3, [sp, 0xf0] | var_f0h = r3;
| label_3:
0x000024ae movs r3, 0 | r3 = 0;
0x000024b0 str r4, [sp, 0xec] | var_ech = r4;
0x000024b2 strb r3, [r2, r4] | *((r2 + r4)) = r3;
0x000024b4 movs r0, 0x54 | r0 = 0x54;
0x000024b6 ldrh.w r3, [sp, 0xb4] | r3 = var_b4h;
0x000024ba str.w sl, [sp, 0x5c] | __asm ("str.w sl, [var_5ch]");
0x000024be strh.w r3, [sp, 0x100] | var_100h = r3;
0x000024c2 blx 0x15f8 | fcn_000015f8 ();
0x000024c6 ldrd r6, r4, [sp, 0xb8] | __asm ("ldrd r6, r4, [var_b8h]");
0x000024ca movs r3, 0 | r3 = 0;
0x000024cc mov r5, r0 | r5 = r0;
0x000024ce str r3, [r0], 4 | *(r0) = r3;
| r0 += 4;
0x000024d2 clz r2, r6 | r2 &= r6;
0x000024d6 rsbs r3, r4, 0 | r3 = r4 - ;
0x000024d8 cmp r6, r3 |
0x000024da lsr.w r2, r2, 5 | r2 >>= 5;
0x000024de it eq |
| if (r6 != r3) {
0x000024e0 moveq r2, 0 | r2 = 0;
| }
0x000024e2 add.w r3, r5, 0xc | r3 = r5 + 0xc;
0x000024e6 str r3, [sp, 0x18] | var_18h = r3;
0x000024e8 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x000024ea cmp r2, 0 |
| if (r2 != 0) {
0x000024ec bne.w 0x27d6 | goto label_19;
| }
0x000024f0 cmp r4, 0xf |
0x000024f2 str r4, [sp, 0x64] | s2 = r4;
| if (r4 > 0xf) {
0x000024f4 bhi.w 0x2750 | goto label_20;
| }
0x000024f8 cmp r4, 1 |
| if (r4 != 1) {
0x000024fa bne.w 0x2744 | goto label_21;
| }
0x000024fe ldr r2, [sp, 0x18] | r2 = var_18h;
0x00002500 ldrb r3, [r6] | r3 = *(r6);
0x00002502 strb r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
| label_4:
0x00002504 movs r3, 0 | r3 = 0;
0x00002506 str r4, [r5, 8] | *((r5 + 8)) = r4;
0x00002508 strb r3, [r2, r4] | *((r2 + r4)) = r3;
0x0000250a add.w r3, r5, 0x24 | r3 = r5 + 0x24;
0x0000250e ldr r2, [sp, 8] | r2 = var_8h;
0x00002510 str r3, [sp, 0x2c] | var_2ch = r3;
0x00002512 str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
0x00002514 ldr r3, [sp, 0xd0] | r3 = var_d0h;
0x00002516 cmp r3, r2 |
| if (r3 == r2) {
0x00002518 beq.w 0x276a | goto label_22;
| }
0x0000251c str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
0x0000251e ldr r3, [sp, 0xd8] | r3 = var_d8h;
0x00002520 str r3, [r5, 0x24] | *((r5 + 0x24)) = r3;
| label_5:
0x00002522 ldr r3, [sp, 8] | r3 = var_8h;
0x00002524 ldr r2, [sp, 0xe8] | r2 = s1;
0x00002526 str r3, [sp, 0xd0] | var_d0h = r3;
0x00002528 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0000252a str r3, [r5, 0x20] | *((r5 + 0x20)) = r3;
0x0000252c movs r3, 0 | r3 = 0;
0x0000252e str r3, [sp, 0xd4] | var_d4h = r3;
0x00002530 strb.w r3, [sp, 0xd8] | var_d8h = r3;
0x00002534 add.w r3, r5, 0x3c | r3 = r5 + 0x3c;
0x00002538 str r3, [sp, 0x28] | var_28h = r3;
0x0000253a str r3, [r5, 0x34] | *((r5 + 0x34)) = r3;
0x0000253c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0000253e cmp r2, r3 |
| if (r2 == r3) {
0x00002540 beq.w 0x277a | goto label_23;
| }
0x00002544 ldr r3, [sp, 0xf0] | r3 = var_f0h;
0x00002546 str r2, [r5, 0x34] | *((r5 + 0x34)) = r2;
0x00002548 str r3, [r5, 0x3c] | *((r5 + 0x3c)) = r3;
| label_6:
0x0000254a ldr r3, [sp, 0xc] | r3 = var_ch;
0x0000254c movw r2, 0x6907 |
0x00002550 ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x00002552 movt r2, 0xc70f | r2 = 0xc70f6907;
0x00002556 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x00002558 str r3, [sp, 0xe8] | s1 = r3;
0x0000255a ldr r3, [sp, 0xec] | r3 = var_ech;
0x0000255c str r5, [sp, 0x60] | var_60h = r5;
0x0000255e str r3, [r5, 0x38] | *((r5 + 0x38)) = r3;
0x00002560 ldrh.w r3, [sp, 0x100] | r3 = var_100h;
0x00002564 strh.w r3, [r5, 0x4c] | *((r5 + 0x4c)) = r3;
0x00002568 movs r3, 0 | r3 = 0;
0x0000256a str r3, [sp, 0xec] | var_ech = r3;
0x0000256c strb.w r3, [sp, 0xf0] | var_f0h = r3;
0x00002570 blx 0x1720 | libc_start_main (r0, r1, r2, r3, r4, r5, r6);
0x00002574 ldr.w sb, [sl, 4] | sb = *((sl + 4));
0x00002578 mov r7, r0 | r7 = r0;
0x0000257a mov r1, sb | r1 = sb;
0x0000257c blx 0x1680 | fcn_00001680 ();
0x00002580 ldr.w r3, [sl] | r3 = *(sl);
0x00002584 ldr.w r8, [r3, r1, lsl 2] | offset_0 = r1 << 2;
| r8 = *((r3 + offset_0));
0x00002588 lsls r3, r1, 2 | r3 = r1 << 2;
0x0000258a str r3, [sp, 0x30] | var_30h = r3;
0x0000258c cmp.w r8, 0 |
| if (r8 == 0) {
0x00002590 beq.w 0x26ba | goto label_24;
| }
0x00002592 strh r3, [r2, 4] | *((r2 + 4)) = r3;
0x00002594 ldr.w r3, [r8] | r3 = *(r8);
0x00002598 str.w sl, [sp, 0x14] | __asm ("str.w sl, [var_14h]");
0x0000259c ldr.w fp, [r3, 0x50] | fp = *((r3 + 0x50));
0x000025a0 mov r6, r3 | r6 = r3;
0x000025a2 mov sl, fp | sl = fp;
0x000025a4 mov fp, r1 |
0x000025a6 b 0x25c4 |
| while (r7 != sl) {
| label_0:
0x000025a8 ldr r4, [r6] | r4 = *(r6);
0x000025aa cmp r4, 0 |
| if (r4 == 0) {
0x000025ac beq.w 0x26b6 | goto label_25;
| }
0x000025b0 ldr.w sl, [r4, 0x50] | sl = *((r4 + 0x50));
0x000025b4 mov r1, sb | r1 = sb;
0x000025b6 mov r8, r6 | r8 = r6;
0x000025b8 mov r0, sl | r0 = sl;
0x000025ba blx 0x1680 | fcn_00001680 ();
0x000025be cmp fp, r1 |
| if (fp != r1) {
0x000025c0 bne 0x26b6 | goto label_25;
| }
0x000025c2 mov r6, r4 | r6 = r4;
0x000025c4 cmp r7, sl |
0x000025c6 bne 0x25a8 |
| }
0x000025c8 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x000025ca ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x000025cc cmp r2, r3 |
| if (r2 != r3) {
0x000025ce bne 0x25a8 | goto label_0;
| }
0x000025d0 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x000025d2 ldr r1, [r6, 4] | r1 = *((r6 + 4));
| if (r2 == 0) {
0x000025d4 cbz r2, 0x25de | goto label_26;
| }
0x000025d6 blx 0x18a0 | r0 = jc_specific_error ();
0x000025da cmp r0, 0 |
| if (r0 != 0) {
0x000025dc bne 0x25a8 | goto label_0;
| }
| label_26:
0x000025de ldr.w r3, [r8] | r3 = *(r8);
0x000025e2 ldr.w sl, [sp, 0x14] | sl = var_14h;
0x000025e6 cmp r3, 0 |
| if (r3 == 0) {
0x000025e8 beq 0x26ba | goto label_24;
| }
0x000025ea ldr r0, [r5, 0x34] | r0 = *((r5 + 0x34));
0x000025ec ldr r3, [sp, 0x28] | r3 = var_28h;
0x000025ee cmp r3, r0 |
| if (r3 != r0) {
0x000025f0 beq 0x25fa |
0x000025f2 ldr r1, [r5, 0x3c] | r1 = *((r5 + 0x3c));
0x000025f4 adds r1, 1 | r1++;
0x000025f6 blx 0x16fc | sym ();
| }
0x000025fa ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x000025fc ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000025fe cmp r3, r0 |
| if (r3 != r0) {
0x00002600 beq 0x260a |
0x00002602 ldr r1, [r5, 0x24] | r1 = *((r5 + 0x24));
0x00002604 adds r1, 1 | r1++;
0x00002606 blx 0x16fc | sym ();
| }
0x0000260a ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x0000260c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0000260e cmp r3, r0 |
| if (r3 != r0) {
0x00002610 beq 0x261a |
0x00002612 ldr r1, [r5, 0xc] | r1 = *((r5 + 0xc));
0x00002614 adds r1, 1 | r1++;
0x00002616 blx 0x16fc | sym ();
| }
0x0000261a mov r0, r5 | r0 = r5;
0x0000261c movs r1, 0x54 | r1 = 0x54;
0x0000261e blx 0x16fc | sym ();
| label_2:
0x00002622 ldr r0, [sp, 0xe8] | r0 = s1;
0x00002624 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00002626 cmp r0, r3 |
| if (r0 != r3) {
0x00002628 beq 0x2632 |
0x0000262a ldr r1, [sp, 0xf0] | r1 = var_f0h;
0x0000262c adds r1, 1 | r1++;
0x0000262e blx 0x16fc | sym ();
| }
0x00002632 ldr r0, [sp, 0xd0] | r0 = var_d0h;
0x00002634 ldr r3, [sp, 8] | r3 = var_8h;
0x00002636 cmp r0, r3 |
| if (r0 != r3) {
0x00002638 beq 0x2642 |
0x0000263a ldr r1, [sp, 0xd8] | r1 = var_d8h;
0x0000263c adds r1, 1 | r1++;
0x0000263e blx 0x16fc | sym ();
0x00002640 invalid |
| }
0x00002642 ldr r0, [sp, 0xb8] | r0 = var_b8h;
0x00002644 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00002646 cmp r0, r3 |
| if (r0 != r3) {
0x00002648 beq 0x2652 |
0x0000264a ldr r1, [sp, 0xc0] | r1 = var_c0h;
0x0000264c adds r1, 1 | r1++;
0x0000264e blx 0x16fc | sym ();
| }
0x00002652 ldr r0, [sp, 0x9c] | r0 = var_9ch;
0x00002654 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00002656 cmp r0, r3 |
| if (r0 != r3) {
0x00002658 beq 0x2662 |
0x0000265a ldr r1, [sp, 0xa4] | r1 = var_a4h;
0x0000265c adds r1, 1 | r1++;
0x0000265e blx 0x16fc | sym ();
| }
0x00002662 ldr r0, [sp, 0x84] | r0 = var_84h;
0x00002664 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00002666 cmp r0, r3 |
| if (r0 != r3) {
0x00002668 beq 0x2672 |
0x0000266a ldr r1, [sp, 0x8c] | r1 = var_8ch;
0x0000266c adds r1, 1 | r1++;
0x0000266e blx 0x16fc | sym ();
| }
0x00002672 ldr r0, [sp, 0x6c] | r0 = var_6ch;
0x00002674 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00002676 cmp r0, r3 |
| if (r0 != r3) {
0x00002678 beq 0x2682 |
0x0000267a ldr r1, [sp, 0x74] | r1 = var_74h;
0x0000267c adds r1, 1 | r1++;
0x0000267e blx 0x16fc | sym ();
| }
0x00002682 ldr r0, [sp, 0x44] | r0 = var_44h;
0x00002684 blx 0x18b8 | r0 = sym ();
0x00002688 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 < r0) {
0x0000268a blt.w 0x28a0 | goto label_27;
| }
0x0000268e ldr r2, [pc, 0x298] |
0x00002690 ldr r3, [pc, 0x284] | r3 = *(0x2918);
0x00002692 add r2, pc | r2 = 0x4fc0;
0x00002694 ldr r3, [r2, r3] | r3 = *(0x4fc0);
0x00002696 ldr r2, [r3] | r2 = *(0x4fc0);
0x00002698 ldr r3, [sp, 0x104] | r3 = var_104h;
0x0000269a eors r2, r3 | r2 ^= r3;
0x0000269c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000026a0 bne.w 0x27de | goto label_28;
| }
0x000026a4 add sp, 0x10c |
0x000026a6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_15:
0x000026aa ldr r2, [sp, 8] | r2 = var_8h;
0x000026ac cmp r4, 0 |
| if (r4 == 0) {
0x000026ae beq.w 0x2474 | goto label_1;
| }
0x000026b2 ldr r0, [sp, 8] | r0 = var_8h;
0x000026b4 b 0x2736 | goto label_29;
| label_25:
0x000026b6 ldr.w sl, [sp, 0x14] | sl = var_14h;
| label_24:
0x000026ba ldr.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x000026be mov r2, sb | r2 = sb;
0x000026c0 add.w r1, sl, 0x10 | r1 = sl + 0x10;
0x000026c4 add r0, sp, 0x64 | r0 += s2;
0x000026c6 str r3, [sp, 0x58] | var_58h = r3;
0x000026c8 movs r3, 1 | r3 = 1;
0x000026ca str r3, [sp] | *(sp) = r3;
0x000026cc ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x000026d0 blx 0x17e0 | fcn_000017e0 ();
0x000026d4 ldrb.w r3, [sp, 0x64] | r3 = s2;
0x000026d8 cmp r3, 0 |
| if (r3 != 0) {
0x000026da bne 0x278a | goto label_30;
| }
| label_7:
0x000026dc ldr.w r4, [sl] | r4 = *(sl);
0x000026e0 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000026e2 str r7, [r5, 0x50] | *((r5 + 0x50)) = r7;
0x000026e4 ldr r3, [r4, r2] | r3 = *((r4 + r2));
0x000026e6 adds r6, r4, r2 | r6 = r4 + r2;
0x000026e8 cmp r3, 0 |
| if (r3 == 0) {
0x000026ea beq 0x27a4 | goto label_31;
| }
0x000026ec ldr r3, [r3] | r3 = *(r3);
0x000026ee str r3, [r5] | *(r5) = r3;
0x000026f0 ldr r3, [r4, r2] | r3 = *((r4 + r2));
0x000026f2 str r5, [r3] | *(r3) = r5;
| label_8:
0x000026f4 ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x000026f8 adds r3, 1 | r3++;
0x000026fa str.w r3, [sl, 0xc] | __asm ("str.w r3, [sl, 0xc]");
0x000026fe b 0x2622 | goto label_2;
| label_18:
0x00002700 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00002702 cmp r4, 0 |
| if (r4 == 0) {
0x00002704 beq.w 0x24ae | goto label_3;
| }
0x00002708 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0000270a b 0x271a | goto label_32;
| label_17:
0x0000270c add r1, sp, 0x64 | r1 += s2;
0x0000270e add r0, sp, 0xe8 | r0 += s1;
0x00002710 blx 0x1894 | memcmp (r0, r1, r2);
0x00002714 ldr r3, [sp, 0x64] | r3 = s2;
0x00002716 str r0, [sp, 0xe8] | s1 = r0;
0x00002718 str r3, [sp, 0xf0] | var_f0h = r3;
| label_32:
0x0000271a mov r2, r4 | r2 = r4;
0x0000271c mov r1, r5 | r1 = r5;
0x0000271e blx 0x1828 | jc_get_string_array ();
0x00002722 ldr r4, [sp, 0x64] | r4 = s2;
0x00002724 ldr r2, [sp, 0xe8] | r2 = s1;
0x00002726 b 0x24ae | goto label_3;
| label_14:
0x00002728 add r1, sp, 0x64 | r1 += s2;
0x0000272a add r0, sp, 0xd0 | r0 += var_d0h;
0x0000272c blx 0x1894 | memcmp (r0, r1, r2);
0x00002730 ldr r3, [sp, 0x64] | r3 = s2;
0x00002732 str r0, [sp, 0xd0] | var_d0h = r0;
0x00002734 str r3, [sp, 0xd8] | var_d8h = r3;
| label_29:
0x00002736 mov r2, r4 | r2 = r4;
0x00002738 mov r1, r5 | r1 = r5;
0x0000273a blx 0x1828 | jc_get_string_array ();
0x0000273e ldr r4, [sp, 0x64] | r4 = s2;
0x00002740 ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x00002742 b 0x2474 | goto label_1;
| label_21:
0x00002744 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00002746 cmp r4, 0 |
| if (r4 == 0) {
0x00002748 beq.w 0x2504 | goto label_4;
| }
0x0000274c ldr r0, [sp, 0x18] | r0 = var_18h;
0x0000274e b 0x275c | goto label_33;
| label_20:
0x00002750 add r1, sp, 0x64 | r1 += s2;
0x00002752 blx 0x1894 | memcmp (r0, r1, r2);
0x00002756 ldr r3, [sp, 0x64] | r3 = s2;
0x00002758 str r0, [r5, 4] | *((r5 + 4)) = r0;
0x0000275a str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
| label_33:
0x0000275c mov r2, r4 | r2 = r4;
0x0000275e mov r1, r6 | r1 = r6;
0x00002760 blx 0x1828 | jc_get_string_array ();
0x00002764 ldr r4, [sp, 0x64] | r4 = s2;
0x00002766 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x00002768 b 0x2504 | goto label_4;
| label_22:
0x0000276a mov r4, r2 | r4 = r2;
0x0000276c ldm r4!, {r0, r1, r2, r3} | r0 = *(r4!);
| r1 = *((r4! + 4));
| r2 = *((r4! + 8));
| r3 = *((r4! + 12));
0x0000276e str r0, [r5, 0x24] | *((r5 + 0x24)) = r0;
0x00002770 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00002772 str r1, [r0, 4] | *((r0 + 4)) = r1;
0x00002774 str r2, [r0, 8] | *((r0 + 8)) = r2;
0x00002776 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00002778 b 0x2522 | goto label_5;
| label_23:
0x0000277a mov r4, r3 | r4 = r3;
0x0000277c ldm r4!, {r0, r1, r2, r3} | r0 = *(r4!);
| r1 = *((r4! + 4));
| r2 = *((r4! + 8));
| r3 = *((r4! + 12));
0x0000277e str r0, [r5, 0x3c] | *((r5 + 0x3c)) = r0;
0x00002780 ldr r0, [sp, 0x28] | r0 = var_28h;
0x00002782 str r1, [r0, 4] | *((r0 + 4)) = r1;
0x00002784 str r2, [r0, 8] | *((r0 + 8)) = r2;
0x00002786 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00002788 b 0x254a | goto label_6;
| label_30:
0x0000278a ldr r1, [sp, 0x68] | r1 = var_68h;
0x0000278c add r2, sp, 0x58 | r2 += var_58h;
0x0000278e mov r0, sl | r0 = sl;
0x00002790 bl 0x3798 | fcn_00003798 (r0, r1, r2, r3, r4);
0x00002794 ldr.w r1, [sl, 4] | r1 = *((sl + 4));
0x00002798 mov r0, r7 | r0 = r7;
0x0000279a blx 0x1680 | fcn_00001680 ();
0x0000279e lsls r3, r1, 2 | r3 = r1 << 2;
0x000027a0 str r3, [sp, 0x30] | var_30h = r3;
0x000027a2 b 0x26dc | goto label_7;
| label_31:
0x000027a4 ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x000027a8 str.w r5, [sl, 8] | __asm ("str.w r5, [sl, 8]");
0x000027aa str r0, [r1, r0] | *((r1 + r0)) = r0;
0x000027ac str r3, [r5] | *(r5) = r3;
| if (r3 != 0) {
0x000027ae cbz r3, 0x27be |
0x000027b0 ldr r0, [r3, 0x50] | r0 = *((r3 + 0x50));
0x000027b2 ldr.w r1, [sl, 4] | r1 = *((sl + 4));
0x000027b6 blx 0x1680 | fcn_00001680 ();
0x000027ba str.w r5, [r4, r1, lsl 2] | __asm ("str.w r5, [r4, r1, lsl 2]");
| }
0x000027be add.w r3, sl, 8 | r3 = sl + 8;
0x000027c2 str r3, [r6] | *(r6) = r3;
0x000027c4 b 0x26f4 | goto label_8;
| label_13:
0x000027c6 ldr r0, [pc, 0x164] |
0x000027c8 add r0, pc | r0 = 0x50fa;
0x000027ca blx 0x1708 | cxa_free_exception ();
| label_16:
0x000027ce ldr r0, [pc, 0x160] |
0x000027d0 add r0, pc | r0 = 0x5106;
0x000027d2 blx 0x1708 | cxa_free_exception ();
| label_19:
0x000027d6 ldr r0, [pc, 0x15c] |
0x000027d8 add r0, pc | r0 = 0x5112;
0x000027da blx 0x1708 | cxa_free_exception ();
| label_28:
0x000027de blx 0x17a4 | cxa_end_cleanup ();
| do {
0x000027e2 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000027e4 blx 0x17d4 | sym ();
0x000027e8 blx 0x17b0 | g_free ();
| label_12:
0x000027ec movs r0, 0x10 | r0 = 0x10;
0x000027ee blx 0x1698 | r0 = fcn_00001698 ();
0x000027f2 mov r4, r0 | r4 = r0;
0x000027f4 blx 0x16a4 | fcn_000016a4 ();
0x000027f8 movs r3, 1 | r3 = 1;
0x000027fa mov r2, r0 | r2 = r0;
0x000027fc strd r3, r0, [sp, 0x64] | __asm ("strd r3, r0, [s2]");
0x00002800 movs r1, 1 | r1 = 1;
0x00002802 ldr r3, [pc, 0x134] |
0x00002804 mov r0, r4 | r0 = r4;
0x00002806 add r3, pc | r3 = 0x5144;
0x00002808 bl 0x3334 | fcn_00003334 (r0, r1, r2);
| label_9:
0x0000280c ldr r1, [sp, 0x34] | r1 = var_34h;
0x0000280e mov r0, r4 | r0 = r4;
0x00002810 ldr r2, [pc, 0x128] | r2 = *(0x293c);
0x00002812 ldr r3, [pc, 0x12c] | r3 = *(0x2942);
0x00002814 ldr r2, [r1, r2] | r2 = *((r1 + r2));
0x00002816 ldr r1, [r1, r3] | r1 = *((r1 + r3));
0x00002818 blx 0x1888 | sym ();
0x0000281c mov r0, r4 | r0 = r4;
0x0000281e blx 0x1714 | sym ();
0x00002822 blx 0x17b0 | g_free ();
0x00002826 add r0, sp, 0x5c | r0 += var_5ch;
0x00002828 bl 0x374c | fcn_0000374c (r0);
0x0000282c ldr r0, [sp, 0xe8] | r0 = s1;
0x0000282e ldr r3, [sp, 0xc] | r3 = var_ch;
0x00002830 cmp r0, r3 |
| if (r0 != r3) {
0x00002832 beq 0x283c |
0x00002834 ldr r1, [sp, 0xf0] | r1 = var_f0h;
0x00002836 adds r1, 1 | r1++;
0x00002838 blx 0x16fc | sym ();
| }
0x0000283c ldr r0, [sp, 0xd0] | r0 = var_d0h;
0x0000283e ldr r3, [sp, 8] | r3 = var_8h;
0x00002840 cmp r0, r3 |
| if (r0 != r3) {
0x00002842 beq 0x284c |
0x00002844 ldr r1, [sp, 0xd8] | r1 = var_d8h;
0x00002846 adds r1, 1 | r1++;
0x00002848 blx 0x16fc | sym ();
| }
0x0000284c ldr r0, [sp, 0xb8] | r0 = var_b8h;
0x0000284e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00002850 cmp r0, r3 |
| if (r0 != r3) {
0x00002852 beq 0x286a |
0x00002854 ldr r1, [sp, 0xc0] | r1 = var_c0h;
0x00002856 adds r1, 1 | r1++;
0x00002858 blx 0x16fc | sym ();
0x0000285c b 0x286a |
| }
0x0000286a ldr r0, [sp, 0x40] | r0 = var_40h;
0x0000286c blx 0x17d4 | sym ();
0x00002870 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x00002872 blx 0x17d4 | sym ();
0x00002876 b 0x27e2 |
| } while (1);
| label_11:
0x0000287a movs r0, 0x10 | r0 = 0x10;
0x0000287c rsbs r5, r5, 0 | r5 -= ;
0x0000287e blx 0x1698 | r0 = fcn_00001698 ();
0x00002882 mov r4, r0 | r4 = r0;
0x00002884 blx 0x16a4 | fcn_000016a4 ();
0x00002888 ldr r3, [pc, 0xb8] |
0x0000288a mov r2, r0 | r2 = r0;
0x0000288c strd r5, r0, [sp, 0x64] | __asm ("strd r5, r0, [s2]");
0x00002890 mov r1, r5 | r1 = r5;
0x00002892 mov r0, r4 | r0 = r4;
0x00002894 add r3, pc | r3 = 0x51dc;
0x00002896 bl 0x3334 | fcn_00003334 (r0, r1, r2);
0x0000289a b 0x280c | goto label_9;
| label_27:
0x000028a0 movs r0, 0x10 | r0 = 0x10;
0x000028a2 rsbs r4, r4, 0 | r4 -= ;
0x000028a4 blx 0x1698 | r0 = fcn_00001698 ();
0x000028a8 mov r5, r0 | r5 = r0;
0x000028aa blx 0x16a4 | fcn_000016a4 ();
0x000028ae ldr r3, [pc, 0x98] |
0x000028b0 mov r2, r0 | r2 = r0;
0x000028b2 strd r4, r0, [sp, 0x64] | __asm ("strd r4, r0, [s2]");
0x000028b6 mov r1, r4 | r1 = r4;
0x000028b8 mov r0, r5 | r0 = r5;
0x000028ba add r3, pc | r3 = 0x5208;
0x000028bc bl 0x3334 | fcn_00003334 (r0, r1, r2);
0x000028c0 ldr r1, [sp, 0x34] | r1 = var_34h;
0x000028c2 mov r0, r5 | r0 = r5;
0x000028c4 ldr r2, [pc, 0x74] | r2 = *(0x293c);
0x000028c6 ldr r3, [pc, 0x78] | r3 = *(0x2942);
0x000028c8 ldr r2, [r1, r2] | r2 = *((r1 + r2));
0x000028ca ldr r1, [r1, r3] | r1 = *((r1 + r3));
0x000028cc blx 0x1888 | sym ();
0x000028d0 mov r0, r5 | r0 = r5;
0x000028d2 blx 0x1714 | sym ();
0x000028d6 blx 0x17b0 | g_free ();
0x000028da blx 0x1674 | fcn_00001674 ();
0x000028de mov r0, r5 | r0 = r5;
0x000028e0 movs r1, 0x54 | r1 = 0x54;
0x000028e2 blx 0x16fc | sym ();
0x000028e6 blx 0x181c | memcpy (r0, r1, r2);
| label_10:
0x000028ea movs r0, 0x10 | r0 = 0x10;
0x000028ec rsbs r6, r6, 0 | r6 -= ;
0x000028ee blx 0x1698 | r0 = fcn_00001698 ();
0x000028f2 mov r4, r0 | r4 = r0;
0x000028f4 blx 0x16a4 | fcn_000016a4 ();
0x000028f8 ldr r3, [pc, 0x50] |
0x000028fa mov r2, r0 | r2 = r0;
0x000028fc strd r6, r0, [sp, 0x64] | __asm ("strd r6, r0, [s2]");
0x00002900 mov r1, r6 | r1 = r6;
0x00002902 mov r0, r4 | r0 = r4;
0x00002904 add r3, pc | r3 = 0x5254;
0x00002906 bl 0x3334 | fcn_00003334 (r0, r1, r2);
0x0000290a b 0x280c | goto label_9;
| }
; 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/featureflag.cgi @ 0x2c20 */
| #include <stdint.h>
|
; (fcn) fcn.00002c20 () | void fcn_00002c20 (int16_t arg1, int16_t arg3) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| void * s2;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_90h;
| int16_t var_94h;
| r0 = arg1;
| r2 = arg3;
0x00002c20 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00002c24 sub sp, 0x9c |
0x00002c26 ldr.w r4, [pc, 0x478] | r4 = *(0x000030a0);
0x00002c2a mov sl, r0 | sl = r0;
0x00002c2c mov r0, r2 | r0 = r2;
0x00002c2e movs r1, 0x61 | r1 = 0x61;
0x00002c30 ldr.w r3, [pc, 0x470] |
0x00002c34 str r2, [sp, 0xc] | var_ch = r2;
0x00002c36 add r4, pc | r4 += pc;
0x00002c38 ldr.w r2, [pc, 0x46c] |
0x00002c3c ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00002c3e add r2, pc | r2 = 0x5cea;
0x00002c40 ldr r3, [r3] | r3 = *(0x30a4);
0x00002c42 str r3, [sp, 0x94] | var_94h = r3;
0x00002c44 mov.w r3, 0 | r3 = 0;
0x00002c48 blx 0x17f8 | sym ();
0x00002c4c ldr.w r3, [pc, 0x45c] | r3 = *(0x000030ac);
0x00002c50 subs r4, r0, 0 | r4 = r0 - 0;
0x00002c52 add r3, pc | r3 += pc;
0x00002c54 str r3, [sp, 0x30] | var_30h = r3;
| if (r4 < r0) {
0x00002c56 blt.w 0x2f90 | goto label_8;
| }
0x00002c5a add.w r3, sl, 0x18 | r3 = sl + 0x18;
0x00002c5e mov r2, r3 | r2 = r3;
0x00002c60 str r3, [sp, 0x34] | var_34h = r3;
0x00002c62 movs r3, 1 | r3 = 1;
0x00002c64 strd r2, r3, [sl] | __asm ("strd r2, r3, [sl]");
0x00002c68 movs r3, 0 | r3 = 0;
0x00002c6a strd r3, r3, [sl, 8] | __asm ("strd r3, r3, [sl, 8]");
0x00002c6e strd r3, r3, [sl, 0x14] | __asm ("strd r3, r3, [sl, 0x14]");
0x00002c72 ldr.w r3, [pc, 0x43c] |
0x00002c76 add r3, pc | r3 = 0x5d2c;
0x00002c78 str r3, [sp, 0x20] | var_20h = r3;
0x00002c7a ldr.w r3, [pc, 0x438] |
0x00002c7e add r3, pc | r3 = 0x5d38;
0x00002c80 str r3, [sp, 0x24] | var_24h = r3;
0x00002c82 movw r3, 0x6907 |
0x00002c86 movt r3, 0xc70f | r3 = 0xc70f6907;
0x00002c8a str r3, [sp, 0x28] | var_28h = r3;
0x00002c8c mov.w r3, 0x3f800000 | r3 = 0x3f800000;
0x00002c90 str.w r3, [sl, 0x10] | __asm ("str.w r3, [sl, 0x10]");
| label_1:
0x00002c94 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00002c96 movs r1, 0x65 | r1 = 0x65;
0x00002c98 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00002c9a blx 0x17f8 | r0 = sym ();
0x00002c9e subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 < r0) {
0x00002ca0 blt.w 0x3056 | goto label_9;
| }
| if (r4 == r0) {
0x00002ca4 beq.w 0x2f02 | goto label_10;
| }
0x00002ca8 movs r4, 0 | r4 = 0;
0x00002caa ldr r1, [sp, 0x24] | r1 = var_24h;
0x00002cac ldr r0, [sp, 0xc] | r0 = var_ch;
0x00002cae add r3, sp, 0x40 | r3 += var_40h;
0x00002cb0 add r2, sp, 0x38 | r2 += var_38h;
0x00002cb2 str r4, [sp, 0x40] | var_40h = r4;
0x00002cb4 blx 0x16d4 | r0 = fcn_000016d4 ();
0x00002cb8 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 < r0) {
0x00002cba blt.w 0x2f46 | goto label_11;
| }
0x00002cbe ldr r4, [sp, 0x38] | r4 = var_38h;
0x00002cc0 add r3, sp, 0x68 | r3 += var_68h;
0x00002cc2 movs r2, 1 | r2 = 1;
0x00002cc4 str r3, [sp, 8] | var_8h = r3;
0x00002cc6 str r3, [sp, 0x60] | var_60h = r3;
| if (r4 != 0) {
0x00002cc8 cbz r4, 0x2cd2 |
0x00002cca mov r0, r4 | r0 = r4;
0x00002ccc blx 0x1840 | r0 = sym ();
0x00002cd0 adds r2, r4, r0 | r2 = r4 + r0;
| }
0x00002cd2 add r3, sp, 0x60 | r3 += var_60h;
0x00002cd4 mov r1, r4 | r1 = r4;
0x00002cd6 mov r0, r3 | r0 = r3;
0x00002cd8 str r3, [sp, 0x2c] | var_2ch = r3;
0x00002cda bl 0x1a38 | fcn_00001a38 (r0, r1, r2);
0x00002cde add r2, sp, 0x80 | r2 += var_80h;
0x00002ce0 ldr r3, [sp, 0x60] | r3 = var_60h;
0x00002ce2 str r2, [sp, 0x18] | var_18h = r2;
0x00002ce4 str r2, [sp, 0x78] | var_78h = r2;
0x00002ce6 ldr r2, [sp, 8] | r2 = var_8h;
0x00002ce8 cmp r3, r2 |
0x00002cea itete eq |
| if (r3 != r2) {
0x00002cec moveq r3, r2 | r3 = r2;
| }
| if (r3 == r2) {
0x00002cee strne r3, [sp, 0x78] | var_78h = r3;
| }
| if (r3 != r2) {
0x00002cf0 ldmeq r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
| }
| if (r3 == r2) {
0x00002cf2 ldrne r3, [sp, 0x68] | r3 = var_68h;
| }
0x00002cf4 itet eq |
| if (r3 != r2) {
0x00002cf6 ldreq r4, [sp, 0x18] | r4 = var_18h;
| }
| if (r3 == r2) {
0x00002cf8 strne r3, [sp, 0x80] | var_80h = r3;
| }
| if (r3 != r2) {
0x00002cfa stmeq r4, {r0, r1, r2, r3} | *(r4) = r0;
| *((r4 + 4)) = r1;
| *((r4 + 8)) = r2;
| *((r4 + 12)) = r3;
| }
0x00002cfe movs r0, 0x24 | r0 = 0x24;
0x00002d00 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00002d02 ldr r2, [sp, 0x64] | r2 = var_64h;
0x00002d04 ldr r1, [sp, 8] | r1 = var_8h;
0x00002d06 subs r3, 0 |
0x00002d08 it ne |
| if (r3 == 0) {
0x00002d0a movne r3, 1 | r3 = 1;
| }
0x00002d0c str r2, [sp, 0x7c] | var_7ch = r2;
0x00002d0e movs r2, 0 | r2 = 0;
0x00002d10 str r1, [sp, 0x60] | var_60h = r1;
0x00002d12 strb.w r3, [sp, 0x90] | var_90h = r3;
0x00002d16 str r2, [sp, 0x64] | var_64h = r2;
0x00002d18 strb.w r2, [sp, 0x68] | var_68h = r2;
0x00002d1c blx 0x15f8 | fcn_000015f8 ();
0x00002d20 ldrd r6, r4, [sp, 0x78] | __asm ("ldrd r6, r4, [var_78h]");
0x00002d24 mov r5, r0 | r5 = r0;
0x00002d26 movs r3, 0 | r3 = 0;
0x00002d28 str r3, [r0], 4 | *(r0) = r3;
| r0 += 4;
0x00002d2c add.w r3, r5, 0xc | r3 = r5 + 0xc;
0x00002d30 clz r2, r6 | r2 &= r6;
0x00002d34 str r3, [sp, 0x14] | var_14h = r3;
0x00002d36 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x00002d38 rsbs r3, r4, 0 | r3 = r4 - ;
0x00002d3a lsrs r2, r2, 5 | r2 >>= 5;
0x00002d3c cmp r6, r3 |
0x00002d3e it eq |
| if (r6 != r3) {
0x00002d40 moveq r2, 0 | r2 = 0;
| }
0x00002d42 cmp r2, 0 |
| if (r2 != 0) {
0x00002d44 bne.w 0x2f28 | goto label_12;
| }
0x00002d48 cmp r4, 0xf |
0x00002d4a str r4, [sp, 0x58] | s2 = r4;
| if (r4 > 0xf) {
0x00002d4c bhi.w 0x2eac | goto label_13;
| }
0x00002d50 cmp r4, 1 |
| if (r4 != 1) {
0x00002d52 bne.w 0x2ea0 | goto label_14;
| }
0x00002d56 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00002d58 ldrb r3, [r6] | r3 = *(r6);
0x00002d5a strb r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
| label_3:
0x00002d5c movs r3, 0 | r3 = 0;
0x00002d5e str r4, [r5, 8] | *((r5 + 8)) = r4;
0x00002d60 strb r3, [r2, r4] | *((r2 + r4)) = r3;
0x00002d62 ldrb.w r3, [sp, 0x90] | r3 = var_90h;
0x00002d66 ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x00002d68 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00002d6a strb r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
0x00002d6c ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x00002d6e blx 0x1720 | libc_start_main (r0, r1, r2, r3, r4, r5, r6);
0x00002d72 ldr.w sb, [sl, 4] | sb = *((sl + 4));
0x00002d76 mov r7, r0 | r7 = r0;
0x00002d78 mov r1, sb | r1 = sb;
0x00002d7a blx 0x1680 | fcn_00001680 ();
0x00002d7e ldr.w r3, [sl] | r3 = *(sl);
0x00002d82 ldr.w r8, [r3, r1, lsl 2] | offset_0 = r1 << 2;
| r8 = *((r3 + offset_0));
0x00002d86 lsls r3, r1, 2 | r3 = r1 << 2;
0x00002d88 str r3, [sp, 0x1c] | var_1ch = r3;
0x00002d8a cmp.w r8, 0 |
| if (r8 == 0) {
0x00002d8e beq 0x2e5e | goto label_15;
| }
0x00002d90 ldr.w r3, [r8] | r3 = *(r8);
0x00002d94 str.w sl, [sp, 0x10] | __asm ("str.w sl, [var_10h]");
0x00002d98 ldr.w fp, [r3, 0x20] | fp = *((r3 + 0x20));
0x00002d9c mov r6, r3 | r6 = r3;
0x00002d9e mov sl, fp | sl = fp;
0x00002da0 mov fp, r1 |
0x00002da2 b 0x2dbe |
| while (r7 != sl) {
| label_0:
0x00002da4 ldr r4, [r6] | r4 = *(r6);
0x00002da6 cmp r4, 0 |
| if (r4 == 0) {
0x00002da8 beq 0x2e5a | goto label_16;
| }
0x00002daa ldr.w sl, [r4, 0x20] | sl = *((r4 + 0x20));
0x00002dae mov r1, sb | r1 = sb;
0x00002db0 mov r8, r6 | r8 = r6;
0x00002db2 mov r0, sl | r0 = sl;
0x00002db4 blx 0x1680 | fcn_00001680 ();
0x00002db8 cmp fp, r1 |
| if (fp != r1) {
0x00002dba bne 0x2e5a | goto label_16;
| }
0x00002dbc mov r6, r4 | r6 = r4;
0x00002dbe cmp r7, sl |
0x00002dc0 bne 0x2da4 |
| }
0x00002dc2 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x00002dc4 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00002dc6 cmp r2, r3 |
| if (r2 != r3) {
0x00002dc8 bne 0x2da4 | goto label_0;
| }
0x00002dca ldr r4, [r5, 4] | r4 = *((r5 + 4));
0x00002dcc ldr r1, [r6, 4] | r1 = *((r6 + 4));
| if (r2 == 0) {
0x00002dce cbz r2, 0x2dda | goto label_17;
| }
0x00002dd0 mov r0, r4 | r0 = r4;
0x00002dd2 blx 0x18a0 | r0 = jc_specific_error ();
0x00002dd6 cmp r0, 0 |
| if (r0 != 0) {
0x00002dd8 bne 0x2da4 | goto label_0;
| }
| label_17:
0x00002dda ldr.w r3, [r8] | r3 = *(r8);
0x00002dde ldr.w sl, [sp, 0x10] | sl = var_10h;
0x00002de2 cmp r3, 0 |
| if (r3 == 0) {
0x00002de4 beq 0x2e5e | goto label_15;
| }
0x00002de6 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00002de8 cmp r3, r4 |
| if (r3 != r4) {
0x00002dea beq 0x2df6 |
0x00002dec ldr r1, [r5, 0xc] | r1 = *((r5 + 0xc));
0x00002dee mov r0, r4 | r0 = r4;
0x00002df0 adds r1, 1 | r1++;
0x00002df2 blx 0x16fc | sym ();
| }
0x00002df6 mov r0, r5 | r0 = r5;
0x00002df8 movs r1, 0x24 | r1 = 0x24;
0x00002dfa blx 0x16fc | sym ();
| label_2:
0x00002dfe ldr r0, [sp, 0x78] | r0 = var_78h;
0x00002e00 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00002e02 cmp r0, r3 |
| if (r0 != r3) {
0x00002e04 beq 0x2e0e |
0x00002e06 ldr r1, [sp, 0x80] | r1 = var_80h;
0x00002e08 adds r1, 1 | r1++;
0x00002e0a blx 0x16fc | sym ();
| }
0x00002e0e ldr r0, [sp, 0x60] | r0 = var_60h;
0x00002e10 ldr r3, [sp, 8] | r3 = var_8h;
0x00002e12 cmp r0, r3 |
| if (r0 != r3) {
0x00002e14 beq 0x2e1e |
0x00002e16 ldr r1, [sp, 0x68] | r1 = var_68h;
0x00002e18 adds r1, 1 | r1++;
0x00002e1a blx 0x16fc | sym ();
| }
0x00002e1e ldr r0, [sp, 0xc] | r0 = var_ch;
0x00002e20 blx 0x18b8 | r0 = sym ();
0x00002e24 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 >= r0) {
0x00002e26 bge.w 0x2c94 | goto label_1;
| }
0x00002e2a movs r0, 0x10 | r0 = 0x10;
0x00002e2c rsbs r4, r4, 0 | r4 -= ;
0x00002e2e blx 0x1698 | r0 = fcn_00001698 ();
0x00002e32 mov r5, r0 | r5 = r0;
0x00002e34 blx 0x16a4 | fcn_000016a4 ();
0x00002e38 ldr r3, [pc, 0x27c] |
0x00002e3a mov r2, r0 | r2 = r0;
0x00002e3c str r0, [sp, 0x54] | var_54h = r0;
0x00002e3e mov r1, r4 | r1 = r4;
0x00002e40 mov r0, r5 | r0 = r5;
0x00002e42 str r4, [sp, 0x50] | var_50h = r4;
0x00002e44 add r3, pc | r3 = 0x5f00;
0x00002e46 bl 0x3334 | fcn_00003334 (r0, r1, r2);
0x00002e4a ldr r3, [pc, 0x270] | r3 = *(0x30be);
0x00002e4c mov r0, r5 | r0 = r5;
0x00002e4e ldr r1, [sp, 0x30] | r1 = var_30h;
0x00002e50 ldr r2, [r1, r3] | r2 = *((r1 + r3));
0x00002e52 ldr r3, [pc, 0x26c] | r3 = *(0x30c2);
0x00002e54 ldr r1, [r1, r3] | r1 = *((r1 + r3));
0x00002e56 blx 0x1888 | sym ();
| label_16:
0x00002e5a ldr.w sl, [sp, 0x10] | sl = var_10h;
| label_15:
0x00002e5e ldr.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x00002e62 mov r2, sb | r2 = sb;
0x00002e64 add.w r1, sl, 0x10 | r1 = sl + 0x10;
0x00002e68 add r0, sp, 0x58 | r0 += s2;
0x00002e6a str r3, [sp, 0x3c] | var_3ch = r3;
0x00002e6c movs r3, 1 | r3 = 1;
0x00002e6e str r3, [sp] | *(sp) = r3;
0x00002e70 ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x00002e74 blx 0x17e0 | fcn_000017e0 ();
0x00002e78 ldrb.w r3, [sp, 0x58] | r3 = s2;
| if (r3 != 0) {
0x00002e7c cbnz r3, 0x2ec6 | goto label_18;
| }
| label_4:
0x00002e7e ldr.w r4, [sl] | r4 = *(sl);
0x00002e82 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00002e84 str r7, [r5, 0x20] | *((r5 + 0x20)) = r7;
0x00002e86 ldr r3, [r4, r2] | r3 = *((r4 + r2));
0x00002e88 adds r6, r4, r2 | r6 = r4 + r2;
| if (r3 == 0) {
0x00002e8a cbz r3, 0x2ee0 | goto label_19;
| }
0x00002e8c ldr r3, [r3] | r3 = *(r3);
0x00002e8e str r3, [r5] | *(r5) = r3;
0x00002e90 ldr r3, [r4, r2] | r3 = *((r4 + r2));
0x00002e92 str r5, [r3] | *(r3) = r5;
| label_5:
0x00002e94 ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x00002e98 adds r3, 1 | r3++;
0x00002e9a str.w r3, [sl, 0xc] | __asm ("str.w r3, [sl, 0xc]");
0x00002e9e b 0x2dfe | goto label_2;
| label_14:
0x00002ea0 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00002ea2 cmp r4, 0 |
| if (r4 == 0) {
0x00002ea4 beq.w 0x2d5c | goto label_3;
| }
0x00002ea8 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00002eaa b 0x2eb8 | goto label_20;
| label_13:
0x00002eac add r1, sp, 0x58 | r1 += s2;
0x00002eae blx 0x1894 | memcmp (r0, r1, r2);
0x00002eb2 ldr r3, [sp, 0x58] | r3 = s2;
0x00002eb4 str r0, [r5, 4] | *((r5 + 4)) = r0;
0x00002eb6 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
| label_20:
0x00002eb8 mov r2, r4 | r2 = r4;
0x00002eba mov r1, r6 | r1 = r6;
0x00002ebc blx 0x1828 | jc_get_string_array ();
0x00002ec0 ldr r4, [sp, 0x58] | r4 = s2;
0x00002ec2 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x00002ec4 b 0x2d5c | goto label_3;
| label_18:
0x00002ec6 ldr r1, [sp, 0x5c] | r1 = var_5ch;
0x00002ec8 add r2, sp, 0x3c | r2 += var_3ch;
0x00002eca mov r0, sl | r0 = sl;
0x00002ecc bl 0x3868 | fcn_00003868 (r0, r1, r2, r3, r4);
0x00002ed0 ldr.w r1, [sl, 4] | r1 = *((sl + 4));
0x00002ed4 mov r0, r7 | r0 = r7;
0x00002ed6 blx 0x1680 | fcn_00001680 ();
0x00002eda lsls r3, r1, 2 | r3 = r1 << 2;
0x00002edc str r3, [sp, 0x1c] | var_1ch = r3;
0x00002ede b 0x2e7e | goto label_4;
| label_19:
0x00002ee0 ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x00002ee4 str.w r5, [sl, 8] | __asm ("str.w r5, [sl, 8]");
0x00002ee8 str r3, [r5] | *(r5) = r3;
| if (r3 != 0) {
0x00002eea cbz r3, 0x2efa |
0x00002eec ldr r0, [r3, 0x20] | r0 = *((r3 + 0x20));
0x00002eee ldr.w r1, [sl, 4] | r1 = *((sl + 4));
0x00002ef2 blx 0x1680 | fcn_00001680 ();
0x00002ef6 str.w r5, [r4, r1, lsl 2] | __asm ("str.w r5, [r4, r1, lsl 2]");
| }
0x00002efa add.w r3, sl, 8 | r3 = sl + 8;
0x00002efe str r3, [r6] | *(r6) = r3;
0x00002f00 b 0x2e94 | goto label_5;
| label_10:
0x00002f02 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00002f04 blx 0x18b8 | r0 = sym ();
0x00002f08 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 < r0) {
0x00002f0a blt 0x2ff8 | goto label_21;
| }
0x00002f0c ldr r2, [pc, 0x1b4] |
0x00002f0e ldr r3, [pc, 0x194] | r3 = *(0x30a6);
0x00002f10 add r2, pc | r2 = 0x5fd8;
0x00002f12 ldr r3, [r2, r3] | r3 = *(0x5fd8);
0x00002f14 ldr r2, [r3] | r2 = *(0x5fd8);
0x00002f16 ldr r3, [sp, 0x94] | r3 = var_94h;
0x00002f18 eors r2, r3 | r2 ^= r3;
0x00002f1a mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00002f1e bne 0x2f30 |
0x00002f20 mov r0, sl | r0 = sl;
0x00002f22 add sp, 0x9c |
0x00002f24 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_12:
0x00002f28 ldr r0, [pc, 0x19c] |
0x00002f2a add r0, pc | r0 = 0x5ff6;
0x00002f2c blx 0x1708 | cxa_free_exception ();
| }
0x00002f30 blx 0x17a4 | cxa_end_cleanup ();
0x00002f34 b 0x2fc6 | goto label_7;
| label_11:
0x00002f46 movs r0, 0x10 | r0 = 0x10;
0x00002f48 rsbs r4, r4, 0 | r4 -= ;
0x00002f4a blx 0x1698 | r0 = fcn_00001698 ();
0x00002f4e mov r5, r0 | r5 = r0;
0x00002f50 blx 0x16a4 | fcn_000016a4 ();
0x00002f54 ldr r3, [pc, 0x174] |
0x00002f56 mov r2, r0 | r2 = r0;
0x00002f58 str r0, [sp, 0x4c] | var_4ch = r0;
0x00002f5a mov r1, r4 | r1 = r4;
0x00002f5c mov r0, r5 | r0 = r5;
0x00002f5e str r4, [sp, 0x48] | var_48h = r4;
0x00002f60 add r3, pc | r3 = 0x6030;
0x00002f62 bl 0x3334 | fcn_00003334 (r0, r1, r2);
0x00002f66 ldr r3, [pc, 0x154] | r3 = *(0x30be);
0x00002f68 mov r0, r5 | r0 = r5;
0x00002f6a ldr r1, [sp, 0x30] | r1 = var_30h;
0x00002f6c ldr r2, [r1, r3] | r2 = *((r1 + r3));
0x00002f6e ldr r3, [pc, 0x150] | r3 = *(0x30c2);
0x00002f70 ldr r1, [r1, r3] | r1 = *((r1 + r3));
0x00002f72 blx 0x1888 | sym ();
0x00002f74 stc p8, c6, [sl], {0x68} | __asm ("stc p8, c6, [sl], {0x68}");
0x00002f78 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00002f7a cmp r3, r0 |
| if (r3 != r0) {
0x00002f7c beq 0x2f86 |
0x00002f7e ldr r1, [r5, 0xc] | r1 = *((r5 + 0xc));
0x00002f80 adds r1, 1 | r1++;
0x00002f82 blx 0x16fc | sym ();
| }
0x00002f86 movs r1, 0x24 | r1 = 0x24;
0x00002f88 mov r0, r5 | r0 = r5;
0x00002f8a blx 0x16fc | sym ();
0x00002f8e b 0x308a | goto label_22;
| label_8:
0x00002f90 movs r0, 0x10 | r0 = 0x10;
0x00002f92 rsbs r4, r4, 0 | r4 -= ;
0x00002f94 blx 0x1698 | r0 = fcn_00001698 ();
0x00002f98 mov r5, r0 | r5 = r0;
0x00002f9a blx 0x16a4 | fcn_000016a4 ();
0x00002f9e ldr r3, [pc, 0x130] |
0x00002fa0 mov r2, r0 | r2 = r0;
0x00002fa2 strd r4, r0, [sp, 0x58] | __asm ("strd r4, r0, [var_5ch]");
0x00002fa6 mov r1, r4 | r1 = r4;
0x00002fa8 mov r0, r5 | r0 = r5;
0x00002faa add r3, pc | r3 = 0x6080;
0x00002fac bl 0x3334 | fcn_00003334 (r0, r1, r2);
0x00002fb0 ldr r1, [sp, 0x30] | r1 = var_30h;
0x00002fb2 mov r0, r5 | r0 = r5;
0x00002fb4 ldr r2, [pc, 0x104] | r2 = *(0x30bc);
0x00002fb6 ldr r3, [pc, 0x108] | r3 = *(0x30c2);
0x00002fb8 ldr r2, [r1, r2] | r2 = *((r1 + r2));
0x00002fba ldr r1, [r1, r3] | r1 = *((r1 + r3));
0x00002fbc blx 0x1888 | sym ();
| label_6:
0x00002fc0 mov r0, r5 | r0 = r5;
0x00002fc2 blx 0x1714 | sym ();
| label_7:
0x00002fc6 ldr.w r4, [sl, 8] | r4 = *((sl + 8));
| if (r4 == 0) {
0x00002fca cbz r4, 0x302a | goto label_23;
| }
| do {
0x00002fcc ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00002fce add.w r3, r4, 0xc | r3 = r4 + 0xc;
0x00002fd2 ldr r5, [r4] | r5 = *(r4);
0x00002fd4 cmp r0, r3 |
| if (r0 != r3) {
0x00002fd6 beq 0x2fe0 |
0x00002fd8 ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x00002fda adds r1, 1 | r1++;
0x00002fdc blx 0x16fc | sym ();
| }
0x00002fe0 mov r0, r4 | r0 = r4;
0x00002fe2 mov r4, r5 | r4 = r5;
0x00002fe4 movs r1, 0x24 | r1 = 0x24;
0x00002fe6 blx 0x16fc | sym ();
| if (r4 == 0) {
0x00002fea cbz r4, 0x302a | goto label_23;
| }
0x00002fec b 0x2fcc |
| } while (1);
| label_21:
0x00002ff8 movs r0, 0x10 | r0 = 0x10;
0x00002ffa rsbs r4, r4, 0 | r4 -= ;
0x00002ffc blx 0x1698 | r0 = fcn_00001698 ();
0x00003000 mov r5, r0 | r5 = r0;
0x00003002 blx 0x16a4 | fcn_000016a4 ();
0x00003006 ldr r3, [pc, 0xcc] |
0x00003008 mov r2, r0 | r2 = r0;
0x0000300a str r0, [sp, 0x5c] | var_5ch = r0;
0x0000300c mov r1, r4 | r1 = r4;
0x0000300e mov r0, r5 | r0 = r5;
0x00003010 str r4, [sp, 0x58] | s2 = r4;
0x00003012 add r3, pc | r3 = 0x60ec;
0x00003014 bl 0x3334 | fcn_00003334 (r0, r1, r2);
0x00003016 vst4.32 {d4[0], d5[0], d6[0], d7[0]}, [lr:0x80], r8 | __asm ("vst4.32 {d4[0], d5[0], d6[0], d7[0]}, [lr:0x80], r8");
0x0000301a mov r0, r5 | r0 = r5;
0x0000301c ldr r1, [sp, 0x30] | r1 = var_30h;
0x0000301e ldr r2, [r1, r3] | r2 = *((r1 + r3));
0x00003020 ldr r3, [pc, 0x9c] | r3 = *(0x30c0);
0x00003022 ldr r1, [r1, r3] | r1 = *((r1 + r3));
0x00003024 blx 0x1888 | sym ();
0x00003028 b 0x2fc0 | goto label_6;
| label_23:
0x0000302a ldr.w r2, [sl, 4] | r2 = *((sl + 4));
0x0000302e mov r1, r4 | r1 = r4;
0x00003030 ldr.w r0, [sl] | r0 = *(sl);
0x00003034 lsls r2, r2, 2 | r2 <<= 2;
0x00003036 blx 0x16ec | fcn_000016ec ();
0x0000303a ldr.w r0, [sl] | r0 = *(sl);
0x0000303e ldr r3, [sp, 0x34] | r3 = var_34h;
0x00003040 ldr.w r1, [sl, 4] | r1 = *((sl + 4));
0x00003044 strd r4, r4, [sl, 8] | __asm ("strd r4, r4, [sl, 8]");
0x00003048 cmp r3, r0 |
| if (r3 != r0) {
0x0000304a beq 0x3052 |
0x0000304c lsls r1, r1, 2 | r1 <<= 2;
0x0000304e blx 0x16fc | sym ();
| }
0x00003052 blx 0x17b0 | g_free ();
| label_9:
0x00003056 movs r0, 0x10 | r0 = 0x10;
0x00003058 rsbs r4, r4, 0 | r4 -= ;
0x0000305a blx 0x1698 | r0 = fcn_00001698 ();
0x0000305e mov r5, r0 | r5 = r0;
0x00003060 blx 0x16a4 | fcn_000016a4 ();
0x00003064 ldr r3, [pc, 0x70] |
0x00003066 mov r2, r0 | r2 = r0;
0x00003068 str r0, [sp, 0x44] | var_44h = r0;
0x0000306a mov r1, r4 | r1 = r4;
0x0000306c mov r0, r5 | r0 = r5;
0x0000306e str r4, [sp, 0x40] | var_40h = r4;
0x00003070 add r3, pc | r3 = 0x614c;
0x00003072 bl 0x3334 | fcn_00003334 (r0, r1, r2);
0x00003076 ldr r3, [pc, 0x44] | r3 = *(0x30be);
0x00003078 mov r0, r5 | r0 = r5;
0x0000307a ldr r1, [sp, 0x30] | r1 = var_30h;
0x0000307c ldr r2, [r1, r3] | r2 = *((r1 + r3));
0x0000307e ldr r3, [pc, 0x40] | r3 = *(0x30c2);
0x00003080 ldr r1, [r1, r3] | r1 = *((r1 + r3));
0x00003082 blx 0x1888 | sym ();
0x00003086 blx 0x1870 | gxx_personality_v0 ();
| label_22:
0x0000308a add r0, sp, 0x78 | r0 += var_78h;
0x0000308c blx 0x17d4 | sym ();
0x00003090 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00003092 blx 0x17d4 | sym ();
0x00003096 b 0x2fc6 | goto label_7;
| }
; 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/featureflag.cgi @ 0x34b0 */
| #include <stdint.h>
|
; (fcn) fcn.000034b0 () | void fcn_000034b0 (int16_t arg1, uint32_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_bp_ch;
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| void * s2;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| void * s1;
| int16_t var_30h;
| int16_t var_34h;
| int32_t var_4h;
| int32_t var_8h_2;
| int32_t var_ch_2;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int32_t var_4h_2;
| int32_t var_8h_3;
| int32_t var_ch_3;
| int16_t var_5ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000034b0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000034b4 mov r7, r3 | r7 = r3;
0x000034b6 ldr r3, [pc, 0x210] |
0x000034b8 sub sp, 0x64 |
0x000034ba mov r5, r2 | r5 = r2;
0x000034bc mov r6, r1 | r6 = r1;
0x000034be ldr r2, [pc, 0x20c] |
0x000034c0 add r3, pc | r3 = 0x6b8e;
0x000034c2 str r3, [sp, 8] | var_8h = r3;
0x000034c4 ldr r3, [pc, 0x208] | r3 = *(0x36d0);
0x000034c6 add r2, pc | r2 = 0x6b98;
0x000034c8 ldr r3, [r2, r3] |
0x000034ca ldr r3, [r3] | r3 = *(0x6b98);
0x000034cc str r3, [sp, 0x5c] | var_5ch = r3;
0x000034ce mov.w r3, 0 | r3 = 0;
0x000034d2 ldrd r8, r3, [r7] | __asm ("ldrd r8, r3, [r7]");
0x000034d6 add r7, sp, 0x34 | r7 += var_34h;
0x000034d8 str r7, [sp, 0x2c] | s1 = r7;
0x000034da rsbs r1, r3, 0 | r1 = r3 - ;
0x000034dc clz r2, r8 | r2 &= r8;
0x000034e0 lsrs r2, r2, 5 | r2 >>= 5;
0x000034e2 cmp r8, r1 |
0x000034e4 it eq |
| if (r8 != r1) {
0x000034e6 moveq r2, 0 | r2 = 0;
| }
0x000034e8 cmp r2, 0 |
| if (r2 != 0) {
0x000034ea bne.w 0x36a4 | goto label_3;
| }
0x000034ee cmp r3, 0xf |
0x000034f0 mov r4, r0 | r4 = r0;
0x000034f2 add.w sb, sp, 0x2c | sb += s1;
0x000034f6 str r3, [sp, 0x10] | s2 = r3;
| if (r3 > 0xf) {
0x000034f8 bhi.w 0x360e | goto label_4;
| }
0x000034fc cmp r3, 1 |
| if (r3 != 1) {
0x000034fe bne.w 0x3604 | goto label_5;
| }
0x00003502 ldrb.w r2, [r8] | r2 = *(r8);
0x00003506 strb.w r2, [sp, 0x34] | var_34h = r2;
0x0000350a mov r2, r7 | r2 = r7;
| do {
| label_0:
0x0000350c movs r1, 0 | r1 = 0;
0x0000350e str r3, [sp, 0x30] | var_30h = r3;
0x00003510 strb r1, [r2, r3] | *((r2 + r3)) = r1;
0x00003512 mvn r3, 0xc0000000 | r3 = ~0xc0000000;
0x00003516 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00003518 subs r3, r3, r2 | r3 -= r2;
0x0000351a cmp r3, 1 |
| if (r3 < 1) {
0x0000351c bls.w 0x3698 | goto label_6;
| }
0x00003520 ldr r1, [pc, 0x1b0] |
0x00003522 movs r2, 2 | r2 = 2;
0x00003524 mov r0, sb | r0 = sb;
0x00003526 add r1, pc | r1 = 0x6bfe;
0x00003528 blx 0x178c | sym ();
0x0000352c ldr r3, [r5] | r3 = *(r5);
0x0000352e add.w sl, sp, 0x44 | sl += var_44h;
0x00003532 mov r2, r6 | r2 = r6;
0x00003534 mov r1, r5 | r1 = r5;
0x00003536 mov r0, sl | r0 = sl;
0x00003538 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0000353a blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000353c ldr r3, [sp, 0x2c] | r3 = s1;
0x0000353e ldr.w ip, [sp, 0x30] | ip = var_30h;
0x00003542 ldr r2, [sp, 0x48] | r2 = var_48h;
0x00003544 cmp r3, r7 |
0x00003546 ldr r1, [sp, 0x44] | r1 = var_44h;
0x00003548 ite ne |
| if (r3 == r7) {
0x0000354a ldrne lr, [sp, 0x34] | lr = var_34h;
| }
| if (r3 == r7) {
0x0000354e mov.w lr, 0xf | lr = 0xf;
| }
0x00003552 add.w r0, ip, r2 | r0 = ip + r2;
0x00003556 cmp r0, lr |
| if (r0 >= lr) {
0x00003558 bls 0x356e |
0x0000355a add.w lr, sp, 0x4c | lr += var_4ch;
0x0000355e cmp r1, lr |
0x00003560 ite ne |
| if (r1 == lr) {
0x00003562 ldrne lr, [sp, 0x4c] | lr = var_4ch;
| }
| if (r1 == lr) {
0x00003566 mov.w lr, 0xf | lr = 0xf;
| }
0x0000356a cmp r0, lr |
| if (r0 < lr) {
0x0000356c bls 0x362e | goto label_7;
| }
| }
0x0000356e mov r0, sb | r0 = sb;
0x00003570 blx 0x178c | r0 = sym ();
0x00003574 mov lr, r0 | lr = r0;
0x00003576 add.w r8, sp, 0x1c | r8 += var_1ch;
0x0000357a str.w r8, [sp, 0x14] | __asm ("str.w r8, [var_14h]");
0x0000357e mov ip, r0 |
0x00003580 ldr r3, [lr], 8 | r3 = *(lr);
| lr += 8;
0x00003584 cmp r3, lr |
| if (r3 == lr) {
0x00003586 beq 0x366c | goto label_8;
| }
0x00003588 str r3, [sp, 0x14] | var_14h = r3;
0x0000358a ldr r3, [r0, 8] | r3 = var_34h;
0x0000358c str r3, [sp, 0x1c] | var_1ch = r3;
| label_2:
0x0000358e ldr.w r3, [ip, 4] | r3 = var_30h;
0x00003592 str r3, [sp, 0x18] | var_18h = r3;
0x00003594 movs r3, 0 | r3 = 0;
0x00003596 str.w lr, [ip] | __asm ("str.w lr, [ip]");
0x0000359a str.w r3, [ip, 4] | __asm ("str.w r3, [var_30h]");
0x0000359e strb.w r3, [ip, 8] | var_34h = r3;
| label_1:
0x000035a2 add.w fp, sp, 0x14 |
0x000035a6 mov r0, r4 | r0 = r4;
0x000035a8 mov r1, fp | r1 = fp;
0x000035aa blx 0x17ec | sd_bus_message_enter_container ();
0x000035ae ldr r0, [sp, 0x14] | r0 = var_14h;
0x000035b0 cmp r0, r8 |
| if (r0 != r8) {
0x000035b2 beq 0x35bc |
0x000035b4 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000035b6 adds r1, 1 | r1++;
0x000035b8 blx 0x16fc | sym ();
| }
0x000035bc ldr r0, [sp, 0x44] | r0 = var_44h;
0x000035be add r3, sp, 0x4c | r3 += var_4ch;
0x000035c0 cmp r0, r3 |
| if (r0 != r3) {
0x000035c2 beq 0x35cc |
0x000035c4 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x000035c6 adds r1, 1 | r1++;
0x000035c8 blx 0x16fc | sym ();
| }
0x000035cc ldr r0, [sp, 0x2c] | r0 = s1;
0x000035ce cmp r0, r7 |
| if (r0 != r7) {
0x000035d0 beq 0x35da |
0x000035d2 ldr r1, [sp, 0x34] | r1 = var_34h;
0x000035d4 adds r1, 1 | r1++;
0x000035d6 blx 0x16fc | sym ();
| }
0x000035da ldr r2, [sp, 8] | r2 = var_8h;
0x000035dc ldr r3, [pc, 0xf8] | r3 = *(0x36d8);
0x000035de ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000035e0 ldr r2, [pc, 0xf8] |
0x000035e2 strd r6, r5, [r4, 8] | __asm ("strd r6, r5, [r4, 8]");
0x000035e6 adds r3, 8 | r3 += 8;
0x000035e8 str r3, [r4] | *(r4) = r3;
0x000035ea add r2, pc | r2 = 0x6cca;
0x000035ec ldr r3, [pc, 0xe0] | r3 = *(0x36d0);
0x000035ee ldr r3, [r2, r3] | r3 = *(0x6cca);
0x000035f0 ldr r2, [r3] | r2 = *(0x6cca);
0x000035f2 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000035f4 eors r2, r3 | r2 ^= r3;
0x000035f6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000035fa bne 0x36a0 | goto label_9;
| }
0x000035fc mov r0, r4 | r0 = r4;
0x000035fe add sp, 0x64 |
0x00003600 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00003602 ldrh r0, [r6, 0x3e] | r0 = *((r6 + 0x3e));
| label_5:
0x00003604 mov r2, r7 | r2 = r7;
0x00003606 cmp r3, 0 |
0x00003608 beq 0x350c |
| } while (r3 == 0);
0x0000360a mov r0, r7 | r0 = r7;
0x0000360c b 0x3620 | goto label_10;
| label_4:
0x0000360e add r1, sp, 0x10 | r1 += s2;
0x00003610 mov r0, sb | r0 = sb;
0x00003612 str r3, [sp, 0xc] | var_ch = r3;
0x00003614 blx 0x1894 | memcmp (r0, r1, r2);
0x00003618 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0000361a ldr r2, [sp, 0x10] | r2 = s2;
0x0000361c str r0, [sp, 0x2c] | s1 = r0;
0x0000361e str r2, [sp, 0x34] | var_34h = r2;
| label_10:
0x00003620 mov r2, r3 | r2 = r3;
0x00003622 mov r1, r8 | r1 = r8;
0x00003624 blx 0x1828 | jc_get_string_array ();
0x00003628 ldr r3, [sp, 0x10] | r3 = s2;
0x0000362a ldr r2, [sp, 0x2c] | r2 = s1;
0x0000362c b 0x350c | goto label_0;
| label_7:
0x0000362e movs r2, 0 | r2 = 0;
0x00003630 mov r0, sl | r0 = sl;
0x00003632 mov r1, r2 | r1 = r2;
0x00003634 str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x00003638 blx 0x1668 | r0 = fcn_00001668 ();
0x0000363c mov fp, r0 |
0x0000363e add.w r8, sp, 0x1c | r8 += var_1ch;
0x00003642 str.w r8, [sp, 0x14] | __asm ("str.w r8, [var_14h]");
0x00003646 mov ip, r0 |
0x00003648 ldr r3, [fp], 8 | r3 = *(fp);
| fp += 8;
0x0000364c cmp r3, fp |
| if (r3 == fp) {
0x0000364e beq 0x3682 | goto label_11;
| }
0x00003650 str r3, [sp, 0x14] | var_14h = r3;
0x00003652 ldr r3, [r0, 8] | r3 = var_4ch;
0x00003654 str r3, [sp, 0x1c] | var_1ch = r3;
| do {
0x00003656 ldr.w r3, [ip, 4] | r3 = var_48h;
0x0000365a str r3, [sp, 0x18] | var_18h = r3;
0x0000365c movs r3, 0 | r3 = 0;
0x0000365e str.w fp, [ip] | __asm ("str.w fp, [ip]");
0x00003662 str.w r3, [ip, 4] | __asm ("str.w r3, [var_48h]");
0x00003666 strb.w r3, [ip, 8] | var_4ch = r3;
0x0000366a b 0x35a2 | goto label_1;
| label_8:
0x0000366c ldr r0, [r0, 8] | r0 = var_34h;
0x0000366e mov fp, r8 |
0x00003670 ldr.w r1, [lr, 4] | r1 = var_4h;
0x00003674 ldr.w r2, [lr, 8] | r2 = var_8h_2;
0x00003678 ldr.w r3, [lr, 0xc] | r3 = var_ch_2;
0x0000367c stm.w fp!, {r0, r1, r2, r3} | *(fp!) = r0;
| *((fp! + 4)) = r1;
| *((fp! + 8)) = r2;
| *((fp! + 12)) = r3;
0x00003680 b 0x358e | goto label_2;
| label_11:
0x00003682 ldr r0, [r0, 8] | r0 = var_4ch;
0x00003684 mov lr, r8 | lr = r8;
0x00003686 ldr.w r1, [fp, 4] | r1 = var_18h;
0x0000368a ldr.w r2, [fp, 8] | r2 = var_1ch;
0x0000368e ldr.w r3, [fp, 0xc] | r3 = var_bp_ch;
0x00003692 stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x00003696 b 0x3656 |
| } while (1);
| label_6:
0x00003698 ldr r0, [pc, 0x44] |
0x0000369a add r0, pc | r0 = 0x6d7e;
0x0000369c blx 0x16c8 | fcn_000016c8 ();
| label_9:
0x000036a0 blx 0x17a4 | cxa_end_cleanup ();
| label_3:
0x000036a4 ldr r0, [pc, 0x3c] |
0x000036a6 add r0, pc | r0 = 0x6d8e;
0x000036a8 blx 0x1708 | cxa_free_exception ();
| do {
0x000036ac mov r0, sb | r0 = sb;
0x000036ae blx 0x17d4 | sym ();
0x000036b2 blx 0x17b0 | g_free ();
0x000036b6 b 0x36ac |
| } while (1);
| }
[*] Function system used 1 times featureflag.cgi