[*] Binary protection state of lighttpd
Partial RELRO No Canary found NX disabled No PIE No RPATH No RUNPATH No Symbols
[*] Function printf tear down of lighttpd
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/lighttpd @ 0x33db8 */
| #include <stdint.h>
|
; (fcn) sym.array_print_indent () | void array_print_indent (int32_t arg1) {
| r0 = arg1;
0x00033db8 push {r4, r5, r6, r7, r8, lr} |
0x00033dbc ldr r6, [pc, 0x24] | r6 = *(0x33de4);
0x00033dc0 ldr r7, [pc, 0x24] | r7 = *(0x33de8);
0x00033dc4 mov r5, r0 | r5 = r0;
0x00033dc8 mov r4, 0 | r4 = 0;
| do {
0x00033dcc cmp r4, r5 |
| if (r4 < r5) {
0x00033dd0 popge {r4, r5, r6, r7, r8, pc} |
| }
0x00033dd4 ldr r1, [r6] | r1 = *(r6);
0x00033dd8 mov r0, r7 | r0 = r7;
0x00033ddc bl 0x17840 | fputs (r0, r1);
0x00033de0 add r4, r4, 1 | r4++;
0x00033de4 b 0x33dcc |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/lighttpd @ 0x33e34 */
| #include <stdint.h>
|
; (fcn) sym.array_print () | void array_print (int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| int32_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x00033e34 push {r0, r1, r2, r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00033e38 mov r7, r1 | r7 = r1;
0x00033e3c ldr r1, [r0, 8] | r1 = *((r0 + 8));
0x00033e40 mov r6, r0 | r6 = r0;
0x00033e44 cmp r1, 5 |
| if (r1 <= 5) {
0x00033e48 movhi r3, 0 | r3 = 0;
| }
| if (r1 > 5) {
0x00033e4c movls r3, 1 | r3 = 1;
| }
0x00033e50 mov r2, 0 | r2 = 0;
| label_0:
0x00033e54 cmp r1, r2 |
| if (r1 == r2) {
0x00033e58 beq 0x33ef0 | goto label_3;
| }
0x00033e5c cmp r3, 0 |
0x00033e60 bne 0x33ec0 |
| while (ip == 0) {
| label_1:
0x00033e64 mov r0, r6 | r0 = r6;
0x00033e68 bl 0x33df0 | array_get_max_key_length ();
0x00033e6c ldr r4, [pc, 0x1c4] | r4 = *(0x34034);
0x00033e70 ldr fp, [pc, 0x1c4] | fp = "# %zu\n";
0x00033e74 ldr r1, [r4] | r1 = *(0x34034);
0x00033e78 mov r5, 0 | r5 = 0;
0x00033e7c mov sl, r0 | sl = r0;
0x00033e80 ldr r0, [pc, 0x1b8] | r0 = "# %zu\n";
0x00033e84 bl 0x17840 | fputs ("# %zu\n", r1);
| label_2:
0x00033e88 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00033e8c cmp r3, r5 |
| if (r3 > r5) {
0x00033e90 bhi 0x33f70 | goto label_4;
| }
0x00033e94 cmp r5, 1 |
| if (r5 != 1) {
0x00033e98 beq 0x33eb4 |
0x00033e9c add r0, r7, 1 | r0 = r7 + 1;
0x00033ea0 bl 0x33db8 | array_print_indent ();
0x00033ea4 mov r2, r5 | r2 = r5;
0x00033ea8 ldr r1, [pc, 0x18c] | r1 = *(0x34038);
0x00033eac ldr r0, [r4] | r0 = *(r4);
0x00033eb0 bl 0x178e8 | fprintf (r0, r1, r2)
| }
0x00033eb4 mov r0, r7 | r0 = r7;
0x00033eb8 bl 0x33db8 | array_print_indent ();
0x00033ebc b 0x33f20 | goto label_5;
0x00033ec0 ldr r0, [r6] | r0 = *(r6);
0x00033ec4 ldr r0, [r0, r2, lsl 2] | offset_0 = r2 << 2;
| r0 = *((r0 + offset_0));
0x00033ec8 ldr ip, [r0, 8] | ip = *((r0 + 8));
0x00033ecc cmp ip, 0 |
0x00033ed0 beq 0x33e64 |
| }
0x00033ed4 ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x00033ed8 cmp r0, 1 |
| if (r0 != 1) {
0x00033edc beq 0x33ee8 |
0x00033ee0 cmp r0, 4 |
| if (r0 != 4) {
0x00033ee4 movne r3, 0 | r3 = 0;
| goto label_6;
| }
| }
| label_6:
0x00033ee8 add r2, r2, 1 | r2++;
0x00033eec b 0x33e54 | goto label_0;
| label_3:
0x00033ef0 ldr r4, [pc, 0x140] | r4 = *(0x34034);
0x00033ef4 cmp r3, 0 |
0x00033ef8 ldr r1, [r4] | r1 = *(0x34034);
| if (r3 == 0) {
0x00033efc beq 0x33e64 | goto label_1;
| }
0x00033f00 mov r0, 0x28 | r0 = 0x28;
0x00033f04 bl 0x177c8 | fputc (r0, r1);
0x00033f08 ldr sb, [pc, 0x134] | sb = "_";
0x00033f0c mov r5, 0 | r5 = 0;
0x00033f10 add r7, r7, 1 | r7++;
| do {
0x00033f14 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00033f18 cmp r3, r5 |
| if (r3 <= r5) {
0x00033f1c bhi 0x33f38 |
| label_5:
0x00033f20 ldr r1, [r4] | r1 = *(r4);
0x00033f24 mov r0, 0x29 | r0 = 0x29;
0x00033f28 bl 0x177c8 | fputc (r0, r1);
0x00033f2c mov r0, 0 | r0 = 0;
0x00033f30 add sp, sp, 0xc |
0x00033f34 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00033f38 ldr r3, [r6] | r3 = *(r6);
0x00033f3c cmp r5, 0 |
0x00033f40 ldr r8, [r3, r5, lsl 2] | offset_1 = r5 << 2;
| r8 = *((r3 + offset_1));
| if (r5 != 0) {
0x00033f44 beq 0x33f54 |
0x00033f48 ldr r1, [r4] | r1 = *(r4);
0x00033f4c mov r0, sb | r0 = sb;
0x00033f50 bl 0x17840 | fputs (r0, r1);
| }
0x00033f54 ldr r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x00033f58 mov r1, r7 | r1 = r7;
0x00033f5c ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00033f60 mov r0, r8 | r0 = r8;
0x00033f64 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00033f68 add r5, r5, 1 | r5++;
0x00033f6c b 0x33f14 |
| } while (1);
| label_4:
0x00033f70 ldr r3, [r6] | r3 = *(r6);
0x00033f74 add sb, r7, 1 | sb = r7 + 1;
0x00033f78 ldr r8, [r3, r5, lsl 2] | offset_2 = r5 << 2;
| r8 = *((r3 + offset_2));
0x00033f7c mov r0, sb | r0 = sb;
0x00033f80 bl 0x33db8 | array_print_indent ();
0x00033f84 ldr r3, [r8, 8] | r3 = *((r8 + 8));
0x00033f88 cmp r3, 0 |
| if (r3 != 0) {
0x00033f8c bne 0x33ff8 | goto label_7;
| }
0x00033f90 cmp r5, 0 |
| if (r5 != 0) {
0x00033f94 beq 0x33fc4 |
0x00033f98 mov r1, 5 | r1 = 5;
0x00033f9c mov r0, r5 | r0 = r5;
0x00033fa0 bl 0x3dffc | fcn_0003dffc (r0, r1);
0x00033fa4 cmp r1, 0 |
| if (r1 != 0) {
0x00033fa8 bne 0x33fc4 | goto label_8;
| }
0x00033fac mov r2, r5 | r2 = r5;
0x00033fb0 mov r1, fp | r1 = fp;
0x00033fb4 ldr r0, [r4] | r0 = *(r4);
0x00033fb8 bl 0x178e8 | fprintf (r0, r1, r2)
0x00033fbc mov r0, sb | r0 = sb;
0x00033fc0 bl 0x33db8 | array_print_indent ();
| }
| label_8:
0x00033fc4 ldr r3, [r8] | r3 = *(r8);
0x00033fc8 ldr r1, [pc, 0x78] | r1 = *(0x34044);
0x00033fcc ldr r2, [r3] | r2 = *(r3);
0x00033fd0 ldr r0, [r4] | r0 = *(r4);
0x00033fd4 bl 0x178e8 | fprintf (r0, r1, r2, r3)
0x00033fd8 ldr r0, [r8] | r0 = *(r8);
0x00033fdc bl 0x32ee8 | r0 = fcn_00032ee8 (r0);
0x00033fe0 sub r3, sl, r0 | r3 = sl - r0;
| do {
0x00033fe4 cmp r3, 0 |
0x00033fe8 ldr r1, [r4] | r1 = *(r4);
| if (r3 <= 0) {
0x00033fec bgt 0x34020 |
0x00033ff0 ldr r0, [pc, 0x54] | r0 = "__s_";
0x00033ff4 bl 0x17840 | fputs ("__s_", r1);
| label_7:
0x00033ff8 ldr r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x00033ffc mov r1, sb | r1 = sb;
0x00034000 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00034004 mov r0, r8 | r0 = r8;
0x00034008 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0003400c ldr r1, [r4] | r1 = *(r4);
0x00034010 ldr r0, [pc, 0x38] | r0 = "___";
0x00034014 bl 0x17840 | fputs ("___", r1);
0x00034018 add r5, r5, 1 | r5++;
0x0003401c b 0x33e88 | goto label_2;
| }
0x00034020 mov r0, 0x20 | r0 = 0x20;
0x00034024 str r3, [sp, 4] | var_4h = r3;
0x00034028 bl 0x177c8 | fputc (r0, r1);
0x0003402c ldr r3, [sp, 4] | r3 = var_4h;
0x00034030 sub r3, r3, 1 | r3--;
0x00034034 b 0x33fe4 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/lighttpd @ 0x22d84 */
| #include <stdint.h>
|
; (fcn) sym.configparser_merge_data () | void configparser_merge_data (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00022d84 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00022d88 ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x00022d8c push {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00022d90 cmp r3, r2 |
0x00022d94 mov r4, r0 | r4 = r0;
0x00022d98 mov r5, r1 | r5 = r1;
| if (r3 == r2) {
0x00022d9c beq 0x22e38 | goto label_4;
| }
0x00022da0 cmp r3, 1 |
| if (r3 != 1) {
0x00022da4 bne 0x22dc8 | goto label_5;
| }
0x00022da8 cmp r2, 4 |
| if (r2 != 4) {
0x00022dac bne 0x22e10 | goto label_6;
| }
0x00022db0 ldr r2, [r1, 0x10] | r2 = *((r1 + 0x10));
0x00022db4 ldr r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x00022db8 asr r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00022dbc bl 0x2558c | buffer_append_int ();
| do {
| label_0:
0x00022dc0 mov r0, r4 | r0 = r4;
0x00022dc4 pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_5:
0x00022dc8 cmp r3, 4 |
0x00022dcc cmpeq r2, 1 | __asm ("cmpeq r2, 1");
| if (r3 != 4) {
0x00022dd0 bne 0x22e10 | goto label_6;
| }
0x00022dd4 bl 0x34290 | data_string_init ();
0x00022dd8 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x00022ddc asr r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00022de0 mov r6, r0 | r6 = r0;
0x00022de4 ldr r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x00022de8 bl 0x2558c | buffer_append_int ();
0x00022dec ldr r1, [r5, 0x10] | r1 = *((r5 + 0x10));
0x00022df0 ldr r0, [r6, 0x10] | r0 = *((r6 + 0x10));
0x00022df4 bl 0x22a50 | fcn_00022a50 (r0, r1);
0x00022df8 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00022dfc mov r0, r4 | r0 = r4;
0x00022e00 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00022e04 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00022e08 mov r4, r6 | r4 = r6;
0x00022e0c b 0x22dc0 |
| } while (1);
| label_6:
0x00022e10 ldr r3, [pc, 0x118] | r3 = *(0x22f2c);
0x00022e14 ldr r0, [pc, 0x118] | r0 = stderr;
0x00022e18 ldr r1, [r3] | r1 = *(0x22f2c);
0x00022e1c bl 0x17840 | fputs (r0, r1);
| label_3:
0x00022e20 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00022e24 mov r0, r4 | r0 = r4;
0x00022e28 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00022e2c blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00022e30 mov r4, 0 | r4 = 0;
0x00022e34 b 0x22dc0 | goto label_0;
| label_4:
0x00022e38 cmp r3, 3 |
| if (r3 != 3) {
0x00022e3c beq 0x22e74 |
0x00022e40 cmp r3, 4 |
| if (r3 != 4) {
0x00022e44 beq 0x22e60 |
0x00022e48 cmp r3, 1 |
| if (r3 != 1) {
0x00022e4c bne 0x22f20 | goto label_7;
| }
0x00022e50 ldr r1, [r1, 0x10] | r1 = *((r1 + 0x10));
0x00022e54 ldr r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x00022e58 bl 0x22a50 | fcn_00022a50 (r0, r1);
0x00022e5c b 0x22dc0 | goto label_0;
| }
0x00022e60 ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x00022e64 ldr r2, [r1, 0x10] | r2 = *((r1 + 0x10));
0x00022e68 add r3, r3, r2 | r3 += r2;
0x00022e6c str r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x00022e70 b 0x22dc0 | goto label_0;
| }
0x00022e74 ldr r8, [r0, 0x10] | r8 = *((r0 + 0x10));
0x00022e78 ldr r7, [r1, 0x10] | r7 = *((r1 + 0x10));
0x00022e7c mov r6, 0 | r6 = 0;
| label_1:
0x00022e80 ldr r3, [r7, 8] | r3 = *((r7 + 8));
0x00022e84 cmp r3, r6 |
| if (r3 < r6) {
0x00022e88 bls 0x22dc0 | goto label_0;
| }
0x00022e8c ldr r3, [r7] | r3 = *(r7);
0x00022e90 ldr r5, [r3, r6, lsl 2] | offset_0 = r6 << 2;
| r5 = *((r3 + offset_0));
0x00022e94 cmp r5, 0 |
| if (r5 == 0) {
0x00022e98 beq 0x22ec4 | goto label_8;
| }
0x00022e9c ldr sb, [r5, 8] | sb = *((r5 + 8));
0x00022ea0 cmp sb, 0 |
0x00022ea4 beq 0x22ecc |
| while (r3 == 0) {
| label_2:
0x00022ea8 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00022eac mov r0, r5 | r0 = r5;
0x00022eb0 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00022eb4 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00022eb8 mov r1, r0 | r1 = r0;
0x00022ebc mov r0, r8 | r0 = r8;
0x00022ec0 bl 0x33688 | array_insert_unique ();
| label_8:
0x00022ec4 add r6, r6, 1 | r6++;
0x00022ec8 b 0x22e80 | goto label_1;
0x00022ecc ldr r3, [r5] | r3 = *(r5);
0x00022ed0 cmp r3, 0 |
0x00022ed4 beq 0x22ea8 |
| }
0x00022ed8 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00022edc cmp r2, 0 |
| if (r2 == 0) {
0x00022ee0 beq 0x22ea8 | goto label_2;
| }
0x00022ee4 mov r0, r3 | r0 = r3;
0x00022ee8 bl 0x22980 | r0 = fcn_00022980 (r0);
0x00022eec mov r2, r0 | r2 = r0;
0x00022ef0 ldr r1, [r3] | r1 = *(r3);
0x00022ef4 mov r0, r8 | r0 = r8;
0x00022ef8 bl 0x334d0 | r0 = array_get_element_klen ();
0x00022efc cmp r0, 0 |
| if (r0 == 0) {
0x00022f00 beq 0x22ea8 | goto label_2;
| }
0x00022f04 ldr r3, [r5] | r3 = *(r5);
0x00022f08 ldr r1, [pc, 0x28] | r1 = "data_type_mismatch__cannot_merge";
0x00022f0c ldr r2, [r3] | r2 = *(r3);
0x00022f10 ldr r3, [pc, 0x18] | r3 = *(0x22f2c);
0x00022f14 ldr r0, [r3] | r0 = *(0x22f2c);
0x00022f18 bl 0x178e8 | fprintf (r0, "data_type_mismatch__cannot_merge", r2, r3)
0x00022f1c b 0x22e20 | goto label_3;
| label_7:
0x00022f20 ldr r2, [pc, 0x14] | r2 = "Duplicate_array_key__s";
0x00022f24 mov r1, 0x71 | r1 = 0x71;
0x00022f28 ldr r0, [pc, 0x10] | r0 = "assertion_failed:_0";
0x00022f2c bl 0x17c50 | log_failed_assert ();
| if (r0 != 0) {
0x00022f30 andeq r8, r5, r8, asr 5 | r8 = r5 & (r8 >> 5);
| }
| if (r0 != 0) {
0x00022f34 andeq r1, r4, r0, lsr 17 | r1 = r4 & (r0 >> 17);
| }
| if (r0 != 0) {
0x00022f38 andeq r1, r4, r2, asr 17 | r1 = r4 & (r2 >> 17);
| }
0x00022f3c ldrdeq r1, r2, [r4], -ip | __asm ("ldrdeq r1, r2, [r4], -ip");
| /* Beware that this jump is a conditional jump.
| * r2dec transformed it as a return, due being the
| * last instruction. Please, check 'pdda' output
| * for more hints. */
0x00022f40 andeq r1, r4, r8, asr r8 | return r1 = r4 & (r8 >> r8);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/lighttpd @ 0x22f44 */
| #include <stdint.h>
|
; (fcn) sym.configparserAlloc () | void configparserAlloc (int32_t arg1) {
| r0 = arg1;
0x00022f44 mov r3, r0 | r3 = r0;
0x00022f48 push {r4, lr} |
0x00022f4c ldr r0, [pc, 0x10] | r0 = *(0x22f60);
0x00022f50 blx r3 | r0 = uint32_t (*r3)(uint32_t) (r3);
0x00022f54 cmp r0, 0 |
| if (r0 == 0) {
0x00022f58 mvnne r3, 0 | r3 = ~0;
| }
| if (r0 == 0) {
0x00022f5c strne r3, [r0] | *(r0) = r3;
| }
0x00022f60 pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/lighttpd @ 0x22f68 */
| #include <stdint.h>
|
; (fcn) sym.configparserFree () | void configparserFree (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00022f68 push {r4, r5, r6, lr} |
0x00022f6c subs r4, r0, 0 | r4 = r0 - 0;
0x00022f70 popeq {r4, r5, r6, pc} |
0x00022f74 mov r5, r1 | r5 = r1;
0x00022f78 b 0x22f80 |
| while (r3 >= 0) {
0x00022f7c bl 0x22ae0 | fcn_00022ae0 (r0, r1);
0x00022f80 ldr r3, [r4] | r3 = *(r4);
0x00022f84 mov r0, r4 | r0 = r4;
0x00022f88 cmp r3, 0 |
0x00022f8c bge 0x22f7c |
| }
0x00022f90 mov r3, r5 | r3 = r5;
0x00022f94 pop {r4, r5, r6, lr} |
0x00022f98 bx r3 | return uint32_t (*r3)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/lighttpd @ 0x22f9c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.configparser () | void configparser (FILE * stream, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_10h;
| char * s;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_2ch;
| int32_t var_30h;
| char * * endptr;
| int32_t var_38h;
| int32_t var_3ch;
| r0 = arg1;
| r1 = arg2;
0x00022f9c ldr ip, [r0] | ip = *(r0);
0x00022fa0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00022fa4 cmp ip, 0 |
0x00022fa8 sub sp, sp, 0x3c |
| if (ip < 0) {
0x00022fac bge 0x22fcc |
0x00022fb0 cmp r1, 0 |
| if (r1 == 0) {
0x00022fb4 beq 0x23038 | goto label_24;
| }
0x00022fb8 mov ip, 0 |
0x00022fbc mvn lr, 0 | lr = ~0;
0x00022fc0 stm r0, {ip, lr} | *(r0) = ip;
| *((r0 + 4)) = lr;
0x00022fc4 str ip, [r0, 0xc] | *((r0 + 0xc)) = ip;
0x00022fc8 str ip, [r0, 0x10] | *((r0 + 0x10)) = ip;
| }
0x00022fcc ldr fp, [pc, 0xfdc] | fp = obj.stderr;
0x00022fd0 str r3, [r0, 8] | *((r0 + 8)) = r3;
0x00022fd4 mov r4, r0 | r4 = r0;
0x00022fd8 mov r3, 0 | r3 = 0;
0x00022fdc str r1, [sp, 0x1c] | var_1ch = r1;
0x00022fe0 str r2, [sp, 0x2c] | var_2ch = r2;
0x00022fe4 str r1, [sp, 0xc] | var_ch = r1;
0x00022fe8 str r3, [sp, 0x20] | var_20h = r3;
| label_25:
0x00022fec ldr r1, [sp, 0xc] | r1 = var_ch;
0x00022ff0 mov r0, r4 | r0 = r4;
0x00022ff4 bl 0x22998 | r0 = fcn_00022998 (r0, r1);
0x00022ff8 cmp r0, 0x45 |
0x00022ffc mov r1, r0 | r1 = r0;
| if (r0 <= 0x45) {
0x00023000 bgt 0x23040 |
0x00023004 add r3, sp, 0x2c | r3 += var_2ch;
0x00023008 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0002300c mov r0, r4 | r0 = r4;
0x00023010 bl 0x22b84 | fcn_00022b84 (r0, r1);
0x00023014 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00023018 sub r3, r3, 1 | r3--;
0x0002301c str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00023020 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00023024 cmp r3, 0 |
| if (r3 == 0) {
0x00023028 bne 0x23038 |
0x0002302c ldr r3, [r4] | r3 = *(r4);
0x00023030 cmp r3, 0 |
| if (r3 >= 0) {
0x00023034 bge 0x24500 | goto label_38;
| }
| }
| label_24:
0x00023038 add sp, sp, 0x3c |
0x0002303c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00023040 cmp r0, 0x71 |
| if (r0 > 0x71) {
0x00023044 bgt 0x24410 | goto label_39;
| }
0x00023048 sub r3, r0, 0x46 | r3 = r0 - 0x46;
0x0002304c str r3, [sp, 0x24] | var_24h = r3;
0x00023050 ldr r3, [r4] | r3 = *(r4);
0x00023054 mov r8, 0xc | r8 = 0xc;
0x00023058 mov r6, r3 | r6 = r3;
0x0002305c mla r6, r8, r6, r8 | __asm ("mla r6, r8, r6, r8");
0x00023060 sub r1, r0, 0x4b | r1 = r0 - 0x4b;
0x00023064 ldr r5, [r4, 8] | r5 = *((r4 + 8));
0x00023068 str r3, [sp, 8] | var_8h = r3;
0x0002306c add r6, r4, r6 | r6 = r4 + r6;
0x00023070 mov r2, r8 | r2 = r8;
0x00023074 cmp r1, 0x26 |
| if (r1 > 0x26) {
| /* switch table (39 cases) at 0x23080 */
0x00023078 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x0002307c b 0x24240 | goto label_40;
0x0002311c mov r3, 0 | r3 = 0;
0x00023120 str r3, [r6, -4] | *((r6 - 4)) = r3;
| label_26:
0x00023124 ldr r7, [sp, 8] | r7 = var_8h;
0x00023128 mla r7, r2, r7, r4 | __asm ("mla r7, r2, r7, r4");
0x0002312c b 0x2366c | goto label_41;
0x00023130 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00023134 cmp r3, 0 |
| if (r3 == 0) {
0x00023138 beq 0x231ec | goto label_0;
| }
0x0002313c ldr r8, [sp, 8] | r8 = var_8h;
0x00023140 ldr r1, [r6, -0x10] | r1 = *((r6 - 0x10));
0x00023144 mla r8, r2, r8, r4 | __asm ("mla r8, r2, r8, r4");
0x00023148 ldr r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x0002314c ldr r0, [r3] | r0 = *(r3);
0x00023150 bl 0x22b5c | fcn_00022b5c (r0, r1);
0x00023154 ldr r3, [r6, -0x10] | r3 = *((r6 - 0x10));
0x00023158 mov r2, 4 | r2 = 4;
0x0002315c ldr sl, [r3] | sl = *(r3);
0x00023160 ldr r1, [pc, 0xe4c] | r1 = stderr;
0x00023164 mov r0, sl | r0 = sl;
0x00023168 bl 0x17600 | strncmp (r0, r1, r2);
0x0002316c ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x00023170 subs sb, r0, 0 | sb = r0 - 0;
| if (sb == r0) {
0x00023174 bne 0x2319c |
| label_1:
0x00023178 ldr r3, [r2] | r3 = *(r2);
0x0002317c str sl, [sp] | *(sp) = sl;
0x00023180 ldr r1, [pc, 0xe30] | r1 = "env.";
0x00023184 ldr r3, [r3] | r3 = *(r3);
0x00023188 ldr r2, [r2, 0x28] | r2 = *((r2 + 0x28));
0x0002318c ldr r0, [fp] | r0 = *(fp);
0x00023190 bl 0x178e8 | fprintf (r0, "env.", r2, r3)
0x00023194 str sb, [r5, 4] | *((r5 + 4)) = sb;
0x00023198 b 0x231ec |
| } else {
0x0002319c ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x000231a0 ldr r2, [r8, 0x14] | r2 = *((r8 + 0x14));
0x000231a4 ldr r0, [r2] | r0 = *(r2);
0x000231a8 cmp r0, 0 |
| if (r0 == 0) {
0x000231ac ldrne r1, [r0] | r1 = *(r0);
| }
| if (r0 != 0) {
0x000231b0 moveq r1, r0 | r1 = r0;
| }
0x000231b4 bl 0x22980 | r0 = fcn_00022980 (r0);
0x000231b8 mov r2, r0 | r2 = r0;
0x000231bc mov r0, r3 | r0 = r3;
0x000231c0 bl 0x334d0 | array_get_element_klen ();
0x000231c4 ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x000231c8 subs r8, r0, 0 | r8 = r0 - 0;
0x000231cc mov r0, 0xc | r0 = 0xc;
| if (r8 != r0) {
0x000231d0 bne 0x23238 | goto label_42;
| }
0x000231d4 ldr r5, [sp, 8] | r5 = var_8h;
0x000231d8 mla r5, r0, r5, r4 | __asm ("mla r5, r0, r5, r4");
0x000231dc ldr r0, [r2, 0x10] | r0 = *((r2 + 0x10));
0x000231e0 ldr r1, [r5, 0x14] | r1 = *((r5 + 0x14));
0x000231e4 bl 0x33688 | array_insert_unique ();
0x000231e8 str r8, [r5, 0x14] | *((r5 + 0x14)) = r8;
| }
| do {
| label_0:
0x000231ec ldr r0, [r6, -0x10] | r0 = *((r6 - 0x10));
0x000231f0 bl 0x24ae0 | buffer_free ();
| label_2:
0x000231f4 mov r3, 0 | r3 = 0;
0x000231f8 str r3, [r6, -0x10] | *((r6 - 0x10)) = r3;
0x000231fc ldr r3, [sp, 8] | r3 = var_8h;
0x00023200 mov r2, 0xc | r2 = 0xc;
0x00023204 mla r3, r2, r3, r4 | __asm ("mla r3, r2, r3, r4");
0x00023208 ldr r0, [r3, 0x14] | r0 = *((r3 + 0x14));
0x0002320c cmp r0, 0 |
| if (r0 != 0) {
0x00023210 beq 0x23220 |
0x00023214 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00023218 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0002321c blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x00023220 ldr r7, [sp, 8] | r7 = var_8h;
0x00023224 mov r3, 0xc | r3 = 0xc;
0x00023228 mla r7, r3, r7, r4 | __asm ("mla r7, r3, r7, r4");
| label_29:
0x0002322c mov r3, 0 | r3 = 0;
0x00023230 str r3, [r7, 0x14] | *((r7 + 0x14)) = r3;
0x00023234 b 0x23840 | goto label_14;
| label_42:
0x00023238 ldr r3, [sp, 8] | r3 = var_8h;
0x0002323c ldr r1, [r2] | r1 = *(r2);
0x00023240 mla r3, r0, r3, r4 | __asm ("mla r3, r0, r3, r4");
0x00023244 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00023248 ldr r3, [r3] | r3 = *(r3);
0x0002324c ldr r3, [r3] | r3 = *(r3);
0x00023250 str r3, [sp] | *(sp) = r3;
0x00023254 ldr r0, [fp] | r0 = *(fp);
0x00023258 ldr r3, [r1] | r3 = *(r1);
0x0002325c ldr r2, [r2, 0x28] | r2 = *((r2 + 0x28));
0x00023260 ldr r1, [pc, 0xd54] | r1 = "Setting env variable is not supported in conditional %d %s: %s\n";
0x00023264 bl 0x178e8 | fprintf (r0, r1, r2, r3)
0x00023268 mov r3, 0 | r3 = 0;
0x0002326c str r3, [r5, 4] | *((r5 + 4)) = r3;
0x00023270 b 0x231ec |
| } while (1);
0x00023274 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00023278 cmp r3, 0 |
| if (r3 == 0) {
0x0002327c beq 0x231ec | goto label_0;
| }
0x00023280 ldr r8, [r6, -0x10] | r8 = *((r6 - 0x10));
0x00023284 mov r2, 4 | r2 = 4;
0x00023288 ldr sl, [r8] | sl = *(r8);
0x0002328c ldr r1, [pc, 0xd20] | r1 = stderr;
0x00023290 mov r0, sl | r0 = sl;
0x00023294 bl 0x17600 | r0 = strncmp (r0, r1, r2);
0x00023298 subs sb, r0, 0 | sb = r0 - 0;
| if (sb == r0) {
0x0002329c ldreq r2, [r5, 0x18] | r2 = *((r5 + 0x18));
| goto label_43;
| }
| if (sb == r0) {
| label_43:
0x000232a0 beq 0x23178 | goto label_1;
| }
0x000232a4 ldr r7, [sp, 8] | r7 = var_8h;
0x000232a8 mov sb, 0xc | sb = 0xc;
0x000232ac mla r7, sb, r7, r4 | __asm ("mla r7, sb, r7, r4");
0x000232b0 mov r1, r8 | r1 = r8;
0x000232b4 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x000232b8 ldr r0, [r3] | r0 = *(r3);
0x000232bc bl 0x22b5c | fcn_00022b5c (r0, r1);
0x000232c0 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x000232c4 ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x000232c8 ldr r0, [r3, 0x10] | r0 = *((r3 + 0x10));
0x000232cc bl 0x33628 | array_replace ();
0x000232d0 mov r3, 0 | r3 = 0;
0x000232d4 str r3, [r7, 0x14] | *((r7 + 0x14)) = r3;
0x000232d8 b 0x231ec | goto label_0;
0x000232dc ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000232e0 cmp r3, 0 |
| if (r3 == 0) {
0x000232e4 beq 0x231ec | goto label_0;
| }
0x000232e8 ldr r3, [r6, -0x10] | r3 = *((r6 - 0x10));
0x000232ec mov r2, 4 | r2 = 4;
0x000232f0 ldr sb, [r3] | sb = *(r3);
0x000232f4 ldr r1, [pc, 0xcb8] | r1 = stderr;
0x000232f8 mov r0, sb | r0 = sb;
0x000232fc str r3, [sp, 0x10] | var_10h = r3;
0x00023300 bl 0x17600 | strncmp (r0, r1, r2);
0x00023304 ldr r8, [r5, 0x18] | r8 = *((r5 + 0x18));
0x00023308 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0002330c subs sl, r0, 0 | sl = r0 - 0;
| if (sl == r0) {
0x00023310 bne 0x23338 |
0x00023314 ldr r3, [r8] | r3 = *(r8);
0x00023318 str sb, [sp] | *(sp) = sb;
0x0002331c ldr r1, [pc, 0xc9c] | r1 = "Duplicate config variable in conditional %d %s: %s\n";
0x00023320 ldr r3, [r3] | r3 = *(r3);
0x00023324 ldr r2, [r8, 0x28] | r2 = *((r8 + 0x28));
0x00023328 ldr r0, [fp] | r0 = *(fp);
0x0002332c bl 0x178e8 | fprintf (r0, "Duplicate config variable in conditional %d %s: %s\n", r2, r3)
0x00023330 str sl, [r5, 4] | *((r5 + 4)) = sl;
0x00023334 b 0x231ec | goto label_0;
| }
0x00023338 mov r0, r3 | r0 = r3;
0x0002333c bl 0x22980 | fcn_00022980 (r0);
0x00023340 mov r1, sb | r1 = sb;
0x00023344 mov r2, r0 | r2 = r0;
0x00023348 ldr r0, [r8, 0x10] | r0 = *((r8 + 0x10));
0x0002334c bl 0x33514 | r0 = array_extract_element_klen ();
0x00023350 subs sb, r0, 0 | sb = r0 - 0;
| if (sb == r0) {
0x00023354 bne 0x2336c |
0x00023358 ldr r1, [r6, -0x10] | r1 = *((r6 - 0x10));
0x0002335c ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00023360 bl 0x22be4 | r0 = fcn_00022be4 (r0, r1);
0x00023364 subs sb, r0, 0 | sb = r0 - 0;
| if (sb == r0) {
0x00023368 beq 0x233b0 | goto label_44;
| }
| }
0x0002336c ldr r3, [sp, 8] | r3 = var_8h;
0x00023370 mov r2, 0xc | r2 = 0xc;
0x00023374 mla r3, r2, r3, r4 | __asm ("mla r3, r2, r3, r4");
0x00023378 mov r0, sb | r0 = sb;
0x0002337c ldr r1, [r3, 0x14] | r1 = *((r3 + 0x14));
0x00023380 bl 0x22d84 | r0 = configparser_merge_data ();
0x00023384 subs r8, r0, 0 | r8 = r0 - 0;
| if (r8 == r0) {
0x00023388 streq r8, [r5, 4] | *((r5 + 4)) = r8;
| goto label_45;
| }
| if (r8 == r0) {
| label_45:
0x0002338c beq 0x231ec | goto label_0;
| }
0x00023390 ldr r1, [r6, -0x10] | r1 = *((r6 - 0x10));
0x00023394 ldr r0, [r8] | r0 = *(r8);
0x00023398 bl 0x22b5c | fcn_00022b5c (r0, r1);
0x0002339c ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x000233a0 mov r1, r8 | r1 = r8;
0x000233a4 ldr r0, [r3, 0x10] | r0 = *((r3 + 0x10));
0x000233a8 bl 0x33688 | array_insert_unique ();
0x000233ac b 0x231ec | goto label_0;
| label_44:
0x000233b0 ldr r7, [sp, 8] | r7 = var_8h;
0x000233b4 mov r8, 0xc | r8 = 0xc;
0x000233b8 mla r7, r8, r7, r4 | __asm ("mla r7, r8, r7, r4");
0x000233bc ldr r1, [r6, -0x10] | r1 = *((r6 - 0x10));
0x000233c0 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x000233c4 ldr r0, [r3] | r0 = *(r3);
0x000233c8 bl 0x22b5c | fcn_00022b5c (r0, r1);
0x000233cc ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x000233d0 ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x000233d4 ldr r0, [r3, 0x10] | r0 = *((r3 + 0x10));
0x000233d8 bl 0x33688 | array_insert_unique ();
0x000233dc str sb, [r7, 0x14] | *((r7 + 0x14)) = sb;
0x000233e0 b 0x231ec | goto label_0;
0x000233e4 ldr r8, [sp, 8] | r8 = var_8h;
0x000233e8 mov r1, 0x2e | r1 = 0x2e;
0x000233ec mla r8, r2, r8, r4 | __asm ("mla r8, r2, r8, r4");
0x000233f0 ldr r5, [r8, 0x14] | r5 = *((r8 + 0x14));
0x000233f4 ldr r0, [r5] | r0 = *(r5);
0x000233f8 bl 0x17a2c | r0 = strchr (r0, r1);
0x000233fc cmp r0, 0 |
| if (r0 == 0) {
0x00023400 movne r3, 0 | r3 = 0;
| }
| if (r0 == 0) {
0x00023404 strne r5, [sp, 0x30] | var_30h = r5;
| }
| if (r0 == 0) {
0x00023408 strne r3, [r8, 0x14] | *((r8 + 0x14)) = r3;
| }
| if (r0 == 0) {
0x0002340c bne 0x23424 |
0x00023410 ldr r0, [pc, 0xbac] | r0 = "Appending env variable is not supported in conditional %d %s: %s\n";
0x00023414 bl 0x254a0 | buffer_init_string ();
0x00023418 ldr r1, [r8, 0x14] | r1 = *((r8 + 0x14));
0x0002341c str r0, [sp, 0x30] | var_30h = r0;
0x00023420 bl 0x22a50 | fcn_00022a50 (r0, r1);
| }
| label_3:
0x00023424 ldr r7, [sp, 8] | r7 = var_8h;
0x00023428 mov r3, 0xc | r3 = 0xc;
0x0002342c mla r7, r3, r7, r4 | __asm ("mla r7, r3, r7, r4");
0x00023430 ldr r0, [r7, 0x14] | r0 = *((r7 + 0x14));
0x00023434 bl 0x24ae0 | buffer_free ();
| label_5:
0x00023438 mov r3, 0 | r3 = 0;
0x0002343c str r3, [r7, 0x14] | *((r7 + 0x14)) = r3;
0x00023440 b 0x24240 | goto label_40;
0x00023444 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00023448 mov r8, 0 | r8 = 0;
0x0002344c cmp r3, r8 |
0x00023450 str r8, [sp, 0x30] | var_30h = r8;
| if (r3 == r8) {
0x00023454 beq 0x23484 | goto label_46;
| }
0x00023458 ldr r3, [sp, 8] | r3 = var_8h;
0x0002345c mov r2, 0xc | r2 = 0xc;
0x00023460 mla r3, r2, r3, r4 | __asm ("mla r3, r2, r3, r4");
0x00023464 ldr r0, [r6, -0x10] | r0 = *((r6 - 0x10));
0x00023468 ldr r1, [r3, 0x14] | r1 = *((r3 + 0x14));
0x0002346c bl 0x22d84 | configparser_merge_data ();
0x00023470 str r8, [r6, -0x10] | *((r6 - 0x10)) = r8;
0x00023474 cmp r0, r8 |
0x00023478 str r0, [sp, 0x30] | var_30h = r0;
| if (r0 != r8) {
0x0002347c bne 0x231f4 | goto label_2;
| }
0x00023480 str r0, [r5, 4] | *((r5 + 4)) = r0;
| label_46:
0x00023484 ldr r0, [r6, -0x10] | r0 = *((r6 - 0x10));
0x00023488 cmp r0, 0 |
| if (r0 == 0) {
0x0002348c beq 0x231f4 | goto label_2;
| }
0x00023490 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00023494 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00023498 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x0002349c b 0x231f4 | goto label_2;
0x000234a0 mov r3, 0 | r3 = 0;
0x000234a4 str r3, [sp, 0x30] | var_30h = r3;
0x000234a8 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000234ac cmp r3, 0 |
| if (r3 == 0) {
0x000234b0 beq 0x23424 | goto label_3;
| }
0x000234b4 ldr r7, [sp, 8] | r7 = var_8h;
0x000234b8 mov r6, 0xc | r6 = 0xc;
0x000234bc mla r7, r6, r7, r4 | __asm ("mla r7, r6, r7, r4");
0x000234c0 mov r2, 4 | r2 = 4;
0x000234c4 ldr r8, [r7, 0x14] | r8 = *((r7 + 0x14));
0x000234c8 ldr r1, [pc, 0xae4] | r1 = stderr;
0x000234cc ldr sb, [r8] | sb = *(r8);
0x000234d0 mov r0, sb | r0 = sb;
0x000234d4 bl 0x17600 | r0 = strncmp (r0, r1, r2);
0x000234d8 cmp r0, 0 |
| if (r0 == 0) {
0x000234dc bne 0x2352c |
0x000234e0 add r0, sb, 4 | r0 = sb + 4;
0x000234e4 bl 0x17510 | r0 = getenv (r0);
0x000234e8 subs r8, r0, 0 | r8 = r0 - 0;
| if (r8 != r0) {
0x000234ec beq 0x2350c |
0x000234f0 bl 0x34290 | data_string_init ();
0x000234f4 mov r1, r8 | r1 = r8;
0x000234f8 mov r5, r0 | r5 = r0;
0x000234fc ldr r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x00023500 bl 0x2555c | buffer_append_string ();
0x00023504 str r5, [sp, 0x30] | var_30h = r5;
0x00023508 b 0x23424 | goto label_3;
| }
0x0002350c ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x00023510 ldr r1, [pc, 0xab0] | r1 = "var.";
0x00023514 ldr r2, [r3] | r2 = *(r3);
0x00023518 add r2, r2, 4 | r2 += 4;
| label_4:
0x0002351c ldr r0, [fp] | r0 = *(fp);
0x00023520 bl 0x178e8 | fprintf (r0, "var.", r2, r3)
0x00023524 str r8, [r5, 4] | *((r5 + 4)) = r8;
0x00023528 b 0x23424 | goto label_3;
| }
0x0002352c mov r1, r8 | r1 = r8;
0x00023530 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00023534 bl 0x22be4 | r0 = fcn_00022be4 (r0, r1);
0x00023538 cmp r0, 0 |
0x0002353c mov r8, r0 | r8 = r0;
0x00023540 str r0, [sp, 0x30] | var_30h = r0;
| if (r0 != 0) {
0x00023544 bne 0x23424 | goto label_3;
| }
0x00023548 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x0002354c ldr r1, [pc, 0xa78] | r1 = "Undefined env variable: %s\n";
0x00023550 ldr r2, [r3] | r2 = *(r3);
0x00023554 b 0x2351c | goto label_4;
0x00023558 bl 0x34290 | data_string_init ();
0x0002355c str r0, [sp, 0x30] | var_30h = r0;
0x00023560 ldr r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x00023564 bl 0x24ae0 | buffer_free ();
| label_8:
0x00023568 ldr r7, [sp, 8] | r7 = var_8h;
0x0002356c mov r3, 0xc | r3 = 0xc;
0x00023570 mla r7, r3, r7, r4 | __asm ("mla r7, r3, r7, r4");
0x00023574 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00023578 ldr r2, [r7, 0x14] | r2 = *((r7 + 0x14));
0x0002357c str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x00023580 b 0x23438 | goto label_5;
0x00023584 bl 0x344a8 | data_integer_init ();
0x00023588 mov r6, 0xc | r6 = 0xc;
0x0002358c mov sb, r0 | sb = r0;
0x00023590 str r0, [sp, 0x30] | var_30h = r0;
0x00023594 bl 0x174ec | errno_location ();
0x00023598 ldr r7, [sp, 8] | r7 = var_8h;
0x0002359c mov r3, 0 | r3 = 0;
0x000235a0 mla r7, r6, r7, r4 | __asm ("mla r7, r6, r7, r4");
0x000235a4 mov r2, 0xa | r2 = 0xa;
0x000235a8 add r1, sp, 0x34 | r1 += endptr;
0x000235ac str r3, [r0] | *(r0) = r3;
0x000235b0 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x000235b4 mov r8, r0 | r8 = r0;
0x000235b8 ldr r0, [r3] | r0 = *(r3);
0x000235bc bl 0x17654 | strtol (r0, r1, r2);
0x000235c0 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x000235c4 ldr r2, [r3] | r2 = *(r3);
0x000235c8 ldr r3, [sp, 0x34] | r3 = endptr;
0x000235cc cmp r2, r3 |
| if (r2 == r3) {
0x000235d0 ldrne r3, [pc, 0x9f8] | r3 = obj.__ctype_b;
| }
0x000235d4 str r0, [sb, 0x10] | *((sb + 0x10)) = r0;
| if (r2 == r3) {
0x000235d8 ldrne r0, [r3] | r0 = *(r3);
| }
| if (r2 != r3) {
0x000235dc bne 0x2360c | goto label_47;
| }
| label_6:
0x000235e0 ldr r3, [r8] | r3 = *(r8);
0x000235e4 cmp r3, 0 |
| if (r3 == 0) {
0x000235e8 beq 0x23628 | goto label_48;
| }
| label_7:
0x000235ec ldr r1, [pc, 0x9e0] | r1 = *(0x23fd0);
0x000235f0 ldr r0, [fp] | r0 = *(fp);
0x000235f4 bl 0x178e8 | fprintf (r0, r1)
0x000235f8 mov r3, 0 | r3 = 0;
0x000235fc str r3, [r5, 4] | *((r5 + 4)) = r3;
0x00023600 b 0x23424 | goto label_3;
| do {
0x00023604 add r3, r3, 1 | r3++;
0x00023608 str r3, [sp, 0x34] | endptr = r3;
| label_47:
0x0002360c ldr r3, [sp, 0x34] | r3 = endptr;
0x00023610 ldrb r1, [r3] | r1 = *(r3);
0x00023614 lsl r1, r1, 1 | r1 <<= 1;
0x00023618 ldrh r1, [r0, r1] | r1 = *((r0 + r1));
0x0002361c tst r1, 0x20 |
0x00023620 bne 0x23604 |
| } while ((r1 & 0x20) != 0);
0x00023624 b 0x235e0 | goto label_6;
| label_48:
0x00023628 ldr r3, [sp, 0x34] | r3 = endptr;
0x0002362c ldrb r3, [r3] | r3 = *(r3);
0x00023630 cmp r3, 0 |
| if (r3 == 0) {
0x00023634 beq 0x23424 | goto label_3;
| }
0x00023638 b 0x235ec | goto label_7;
0x0002363c bl 0x34388 | data_array_init ();
0x00023640 str r0, [sp, 0x30] | var_30h = r0;
0x00023644 ldr r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x00023648 bl 0x33370 | array_free ();
0x0002364c b 0x23568 | goto label_8;
0x00023650 bl 0x3326c | array_init ();
0x00023654 str r0, [sp, 0x30] | var_30h = r0;
0x00023658 ldr r0, [r6, -4] | r0 = *((r6 - 4));
| do {
0x0002365c bl 0x24ae0 | buffer_free ();
| label_11:
0x00023660 ldr r7, [sp, 8] | r7 = var_8h;
0x00023664 mov r3, 0xc | r3 = 0xc;
0x00023668 mla r7, r3, r7, r4 | __asm ("mla r7, r3, r7, r4");
| label_41:
0x0002366c ldr r0, [r7, 0x14] | r0 = *((r7 + 0x14));
0x00023670 b 0x24194 | goto label_49;
0x00023674 ldr r3, [r6, -4] | r3 = *((r6 - 4));
0x00023678 str r3, [sp, 0x30] | var_30h = r3;
0x0002367c mov r3, 0 | r3 = 0;
0x00023680 str r3, [r6, -4] | *((r6 - 4)) = r3;
| label_12:
0x00023684 ldr r0, [r6, -0x10] | r0 = *((r6 - 0x10));
0x00023688 b 0x2365c |
| } while (1);
0x0002368c ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00023690 mov r8, 0 | r8 = 0;
0x00023694 cmp r3, r8 |
0x00023698 str r8, [sp, 0x30] | var_30h = r8;
| if (r3 == r8) {
0x0002369c beq 0x236ec | goto label_50;
| }
0x000236a0 ldr r7, [sp, 8] | r7 = var_8h;
0x000236a4 mov sb, 0xc | sb = 0xc;
0x000236a8 mla r7, sb, r7, r4 | __asm ("mla r7, sb, r7, r4");
0x000236ac ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x000236b0 ldr r3, [r3] | r3 = *(r3);
0x000236b4 cmp r3, r8 |
0x000236b8 bne 0x236f8 |
| while (r2 == 0) {
| label_9:
0x000236bc ldr r7, [sp, 8] | r7 = var_8h;
0x000236c0 mov r5, 0xc | r5 = 0xc;
0x000236c4 mla r7, r5, r7, r4 | __asm ("mla r7, r5, r7, r4");
0x000236c8 ldr r0, [r6, -0x10] | r0 = *((r6 - 0x10));
0x000236cc ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x000236d0 bl 0x33688 | array_insert_unique ();
0x000236d4 mov r3, 0 | r3 = 0;
0x000236d8 str r3, [r7, 0x14] | *((r7 + 0x14)) = r3;
| label_10:
0x000236dc ldr r3, [r6, -0x10] | r3 = *((r6 - 0x10));
0x000236e0 str r3, [sp, 0x30] | var_30h = r3;
0x000236e4 mov r3, 0 | r3 = 0;
0x000236e8 str r3, [r6, -0x10] | *((r6 - 0x10)) = r3;
| label_50:
0x000236ec ldr r0, [r6, -0x10] | r0 = *((r6 - 0x10));
0x000236f0 bl 0x33370 | array_free ();
0x000236f4 b 0x231f4 | goto label_2;
0x000236f8 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x000236fc cmp r2, 0 |
0x00023700 beq 0x236bc |
| }
0x00023704 mov r0, r3 | r0 = r3;
0x00023708 bl 0x22980 | r0 = fcn_00022980 (r0);
0x0002370c mov r2, r0 | r2 = r0;
0x00023710 ldr r1, [r3] | r1 = *(r3);
0x00023714 ldr r0, [r6, -0x10] | r0 = *((r6 - 0x10));
0x00023718 bl 0x334d0 | r0 = array_get_element_klen ();
0x0002371c cmp r0, 0 |
| if (r0 == 0) {
0x00023720 beq 0x236bc | goto label_9;
| }
0x00023724 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x00023728 ldr r1, [pc, 0x8a8] | r1 = "error parsing number: '%s'\n";
0x0002372c ldr r3, [r3] | r3 = *(r3);
0x00023730 ldr r0, [fp] | r0 = *(fp);
0x00023734 ldr r2, [r3] | r2 = *(r3);
0x00023738 bl 0x178e8 | fprintf (r0, "error parsing number: '%s'\n", r2, r3)
0x0002373c str r8, [r5, 4] | *((r5 + 4)) = r8;
0x00023740 b 0x236dc | goto label_10;
0x00023744 ldr r3, [r6, -4] | r3 = *((r6 - 4));
0x00023748 str r3, [sp, 0x30] | var_30h = r3;
0x0002374c mov r3, 0 | r3 = 0;
0x00023750 str r3, [r6, -4] | *((r6 - 4)) = r3;
0x00023754 b 0x23660 | goto label_11;
0x00023758 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0002375c mov r6, 0 | r6 = 0;
0x00023760 cmp r3, r6 |
0x00023764 str r6, [sp, 0x30] | var_30h = r6;
| if (r3 != r6) {
0x00023768 beq 0x2378c |
0x0002376c bl 0x3326c | array_init ();
0x00023770 ldr r7, [sp, 8] | r7 = var_8h;
0x00023774 mov r5, 0xc | r5 = 0xc;
0x00023778 mla r7, r5, r7, r4 | __asm ("mla r7, r5, r7, r4");
0x0002377c ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x00023780 str r0, [sp, 0x30] | var_30h = r0;
0x00023784 bl 0x33688 | array_insert_unique ();
0x00023788 str r6, [r7, 0x14] | *((r7 + 0x14)) = r6;
| }
| label_28:
0x0002378c ldr r3, [sp, 8] | r3 = var_8h;
0x00023790 mov r2, 0xc | r2 = 0xc;
0x00023794 mla r3, r2, r3, r4 | __asm ("mla r3, r2, r3, r4");
0x00023798 ldr r0, [r3, 0x14] | r0 = *((r3 + 0x14));
0x0002379c cmp r0, 0 |
| if (r0 != 0) {
0x000237a0 beq 0x237b0 |
0x000237a4 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x000237a8 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000237ac blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x000237b0 ldr r7, [sp, 8] | r7 = var_8h;
0x000237b4 mov r3, 0xc | r3 = 0xc;
0x000237b8 mla r7, r3, r7, r4 | __asm ("mla r7, r3, r7, r4");
0x000237bc b 0x23438 | goto label_5;
0x000237c0 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000237c4 mov r8, 0 | r8 = 0;
0x000237c8 cmp r3, r8 |
0x000237cc str r8, [sp, 0x30] | var_30h = r8;
| if (r3 != r8) {
0x000237d0 beq 0x237fc |
0x000237d4 ldr r7, [sp, 8] | r7 = var_8h;
0x000237d8 mov r5, 0xc | r5 = 0xc;
0x000237dc mla r7, r5, r7, r4 | __asm ("mla r7, r5, r7, r4");
0x000237e0 ldr r1, [r6, -0x10] | r1 = *((r6 - 0x10));
0x000237e4 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x000237e8 ldr r0, [r3] | r0 = *(r3);
0x000237ec bl 0x22b5c | fcn_00022b5c (r0, r1);
0x000237f0 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x000237f4 str r8, [r7, 0x14] | *((r7 + 0x14)) = r8;
0x000237f8 str r3, [sp, 0x30] | var_30h = r3;
| }
0x000237fc ldr r3, [sp, 8] | r3 = var_8h;
0x00023800 mov r2, 0xc | r2 = 0xc;
0x00023804 mla r3, r2, r3, r4 | __asm ("mla r3, r2, r3, r4");
0x00023808 ldr r0, [r3, 0x14] | r0 = *((r3 + 0x14));
0x0002380c cmp r0, 0 |
| if (r0 != 0) {
0x00023810 beq 0x23820 |
0x00023814 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00023818 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0002381c blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x00023820 ldr r7, [sp, 8] | r7 = var_8h;
0x00023824 mov r3, 0xc | r3 = 0xc;
0x00023828 mla r7, r3, r7, r4 | __asm ("mla r7, r3, r7, r4");
0x0002382c mov r5, 0 | r5 = 0;
0x00023830 str r5, [r7, 0x14] | *((r7 + 0x14)) = r5;
0x00023834 ldr r0, [r6, -0x10] | r0 = *((r6 - 0x10));
0x00023838 bl 0x24ae0 | buffer_free ();
0x0002383c str r5, [r6, -0x10] | *((r6 - 0x10)) = r5;
| label_14:
0x00023840 ldr r0, [r6, -4] | r0 = *((r6 - 4));
0x00023844 b 0x24194 | goto label_49;
0x00023848 ldr r3, [r5] | r3 = *(r5);
0x0002384c ldr r1, [pc, 0x788] | r1 = "Error: duplicate array-key: %s. Please get rid of the duplicate entry.\n";
0x00023850 mov r2, 6 | r2 = 6;
0x00023854 ldr r0, [r3, 0x10c] | r0 = *((r3 + 0x10c));
0x00023858 bl 0x334d0 | r0 = array_get_element_klen ();
0x0002385c subs r1, r0, 0 | r1 = r0 - 0;
| if (r1 != r0) {
0x00023860 bne 0x23874 | goto label_51;
| }
0x00023864 ldr r2, [pc, 0x774] | r2 = "global";
0x00023868 ldr r1, [pc, 0x774] | r1 = "assertion failed: dc";
| do {
| label_13:
0x0002386c ldr r0, [pc, 0x774] | r0 = *(0x23fe4);
0x00023870 bl 0x17c50 | log_failed_assert ();
| label_51:
0x00023874 mov r2, 0 | r2 = 0;
0x00023878 mov r0, r5 | r0 = r5;
0x0002387c bl 0x22cb4 | fcn_00022cb4 (r0, r1);
0x00023880 b 0x23660 | goto label_11;
0x00023884 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x00023888 cmp r3, 0 |
| if (r3 != 0) {
0x0002388c ldreq r2, [pc, 0x758] | r2 = "assertion failed: ctx->current";
| }
| if (r3 != 0) {
0x00023890 ldreq r1, [pc, 0x758] | r1 = *(0x00023ff0);
| }
0x00023894 beq 0x2386c |
| } while (r3 == 0);
0x00023898 mov r0, r5 | r0 = r5;
0x0002389c bl 0x22a08 | fcn_00022a08 (r0);
0x000238a0 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x000238a4 cmp r3, 0 |
| if (r3 != 0) {
0x000238a8 bne 0x23684 | goto label_12;
| }
0x000238ac ldr r2, [pc, 0x738] | r2 = "__configparser.y";
0x000238b0 ldr r1, [pc, 0x73c] | r1 = *(0x23ff0);
0x000238b4 b 0x2386c | goto label_13;
0x000238b8 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000238bc mov r8, 0 | r8 = 0;
0x000238c0 cmp r3, r8 |
0x000238c4 str r8, [sp, 0x30] | var_30h = r8;
| if (r3 == r8) {
0x000238c8 beq 0x23944 | goto label_15;
| }
0x000238cc ldr r3, [sp, 8] | r3 = var_8h;
0x000238d0 mov r1, 0xc | r1 = 0xc;
0x000238d4 mla r3, r1, r3, r4 | __asm ("mla r3, r1, r3, r4");
0x000238d8 ldr r2, [r6, -0x1c] | r2 = *((r6 - 0x1c));
0x000238dc ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000238e0 ldr r2, [r2, 0x28] | r2 = *((r2 + 0x28));
0x000238e4 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x000238e8 cmp r2, r3 |
| if (r2 >= r3) {
0x000238ec blt 0x23900 |
0x000238f0 ldr r1, [fp] | r1 = *(fp);
0x000238f4 ldr r0, [pc, 0x6fc] | r0 = *(0x23ff4);
0x000238f8 bl 0x17840 | fputs (r0, r1);
0x000238fc str r8, [r5, 4] | *((r5 + 4)) = r8;
| }
0x00023900 ldr r3, [r6, -0x1c] | r3 = *((r6 - 0x1c));
0x00023904 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x00023908 cmp r3, 5 |
| if (r3 == 5) {
0x0002390c bne 0x23924 |
0x00023910 ldr r1, [fp] | r1 = *(fp);
0x00023914 ldr r0, [pc, 0x6e0] | r0 = "unreachable else condition\n";
0x00023918 bl 0x17840 | fputs ("unreachable else condition\n", r1);
0x0002391c mov r3, 0 | r3 = 0;
0x00023920 str r3, [r5, 4] | *((r5 + 4)) = r3;
| }
0x00023924 ldr r3, [sp, 8] | r3 = var_8h;
0x00023928 mov r2, 0xc | r2 = 0xc;
0x0002392c mla r3, r2, r3, r4 | __asm ("mla r3, r2, r3, r4");
0x00023930 ldr r2, [r6, -0x1c] | r2 = *((r6 - 0x1c));
0x00023934 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00023938 str r2, [r3, 0x3c] | *((r3 + 0x3c)) = r2;
0x0002393c str r3, [r2, 0x40] | *((r2 + 0x40)) = r3;
| label_16:
0x00023940 str r3, [sp, 0x30] | var_30h = r3;
| do {
| label_15:
0x00023944 ldr r7, [sp, 8] | r7 = var_8h;
0x00023948 mov r3, 0xc | r3 = 0xc;
0x0002394c mla r7, r3, r7, r4 | __asm ("mla r7, r3, r7, r4");
0x00023950 mov r2, 0 | r2 = 0;
0x00023954 str r2, [r6, -0x1c] | *((r6 - 0x1c)) = r2;
0x00023958 str r2, [r7, 0x14] | *((r7 + 0x14)) = r2;
0x0002395c b 0x23840 | goto label_14;
0x00023960 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00023964 mov r8, 0 | r8 = 0;
0x00023968 cmp r3, r8 |
0x0002396c str r8, [sp, 0x30] | var_30h = r8;
0x00023970 beq 0x23944 |
| } while (r3 == r8);
0x00023974 ldr r3, [sp, 8] | r3 = var_8h;
0x00023978 mov r1, 0xc | r1 = 0xc;
0x0002397c mla r3, r1, r3, r4 | __asm ("mla r3, r1, r3, r4");
0x00023980 ldr r2, [r6, -0x1c] | r2 = *((r6 - 0x1c));
0x00023984 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00023988 ldr r2, [r2, 0x28] | r2 = *((r2 + 0x28));
0x0002398c ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x00023990 cmp r2, r3 |
| if (r2 >= r3) {
0x00023994 blt 0x239a8 |
0x00023998 ldr r1, [fp] | r1 = *(fp);
0x0002399c ldr r0, [pc, 0x654] | r0 = *(0x23ff4);
0x000239a0 bl 0x17840 | fputs (r0, r1);
0x000239a4 str r8, [r5, 4] | *((r5 + 4)) = r8;
| }
0x000239a8 ldr r3, [r6, -0x1c] | r3 = *((r6 - 0x1c));
0x000239ac ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x000239b0 cmp r3, 5 |
| if (r3 == 5) {
0x000239b4 bne 0x239cc |
0x000239b8 ldr r1, [fp] | r1 = *(fp);
0x000239bc ldr r0, [pc, 0x638] | r0 = "unreachable else condition\n";
0x000239c0 bl 0x17840 | fputs ("unreachable else condition\n", r1);
0x000239c4 mov r3, 0 | r3 = 0;
0x000239c8 str r3, [r5, 4] | *((r5 + 4)) = r3;
| }
0x000239cc ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000239d0 cmp r3, 0 |
| if (r3 == 0) {
0x000239d4 beq 0x23944 | goto label_15;
| }
0x000239d8 ldr r2, [sp, 8] | r2 = var_8h;
0x000239dc mov r1, 0xc | r1 = 0xc;
0x000239e0 mla r2, r1, r2, r4 | __asm ("mla r2, r1, r2, r4");
0x000239e4 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000239e8 ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x000239ec mov r8, 0xc | r8 = 0xc;
0x000239f0 ldr r0, [r2] | r0 = *(r2);
0x000239f4 cmp r0, 0 |
| if (r0 == 0) {
0x000239f8 ldrne r1, [r0] | r1 = *(r0);
| }
| if (r0 != 0) {
0x000239fc moveq r1, r0 | r1 = r0;
| }
0x00023a00 bl 0x22980 | r0 = fcn_00022980 (r0);
0x00023a04 mov r2, r0 | r2 = r0;
0x00023a08 mov r0, r3 | r0 = r3;
0x00023a0c bl 0x33514 | array_extract_element_klen ();
0x00023a10 ldr r7, [sp, 8] | r7 = var_8h;
0x00023a14 mla r7, r8, r7, r4 | __asm ("mla r7, r8, r7, r4");
0x00023a18 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x00023a1c cmp r0, r3 |
| if (r0 == r3) {
0x00023a20 ldrne r2, [pc, 0x5d8] | r2 = "assertion failed: yymsp[0].minor.yy18 == dc";
| }
| if (r0 != r3) {
0x00023a24 ldrne r1, [pc, 0x5d8] | r1 = *(0x00024004);
| goto label_52;
| }
| if (r0 != r3) {
| label_52:
0x00023a28 bne 0x2386c | goto label_13;
| }
0x00023a2c ldr r3, [r6, -0x1c] | r3 = *((r6 - 0x1c));
0x00023a30 ldr r0, [r0] | r0 = *(r0);
0x00023a34 ldr r1, [r3] | r1 = *(r3);
0x00023a38 bl 0x22b5c | fcn_00022b5c (r0, r1);
0x00023a3c ldr r2, [r6, -0x1c] | r2 = *((r6 - 0x1c));
0x00023a40 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x00023a44 ldr r1, [r2, 0x1c] | r1 = *((r2 + 0x1c));
0x00023a48 str r1, [r3, 0x1c] | *((r3 + 0x1c)) = r1;
0x00023a4c ldr r3, [r3] | r3 = *(r3);
0x00023a50 mov r0, r3 | r0 = r3;
0x00023a54 bl 0x22980 | r0 = fcn_00022980 (r0);
0x00023a58 mov r1, r0 | r1 = r0;
0x00023a5c ldr r0, [r2, 0x44] | r0 = *((r2 + 0x44));
0x00023a60 bl 0x22980 | fcn_00022980 (r0);
0x00023a64 ldr r2, [r2, 0x20] | r2 = *((r2 + 0x20));
0x00023a68 sub r1, r1, 2 | r1 -= 2;
0x00023a6c sub r2, r2, 1 | r2--;
0x00023a70 sub r0, r1, r0 | r0 = r1 - r0;
0x00023a74 cmp r2, 3 |
| if (r2 > 3) {
| /* switch table (4 cases) at 0x23a80 */
0x00023a78 ldrls pc, [pc, r2, lsl 2] | offset_1 = r2 << 2;
| pc = *((pc + offset_1));
| }
0x00023a7c b 0x23b20 | goto label_53;
0x00023a90 ldr r3, [r3] | r3 = *(r3);
0x00023a94 mov r2, 0x3d | r2 = 0x3d;
| do {
0x00023a98 strb r2, [r3, r0] | *((r3 + r0)) = r2;
0x00023a9c ldr r2, [sp, 8] | r2 = var_8h;
0x00023aa0 mov r1, 0xc | r1 = 0xc;
0x00023aa4 mla r2, r1, r2, r4 | __asm ("mla r2, r1, r2, r4");
0x00023aa8 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x00023aac ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x00023ab0 ldr r0, [r2] | r0 = *(r2);
0x00023ab4 cmp r0, 0 |
| if (r0 == 0) {
0x00023ab8 ldrne r1, [r0] | r1 = *(r0);
| }
| if (r0 != 0) {
0x00023abc moveq r1, r0 | r1 = r0;
| }
0x00023ac0 bl 0x22980 | r0 = fcn_00022980 (r0);
0x00023ac4 mov r2, r0 | r2 = r0;
0x00023ac8 mov r0, r3 | r0 = r3;
0x00023acc bl 0x334d0 | r0 = array_get_element_klen ();
0x00023ad0 subs r8, r0, 0 | r8 = r0 - 0;
| if (r8 != r0) {
0x00023ad4 bne 0x23b2c | goto label_54;
| }
0x00023ad8 ldr r7, [sp, 8] | r7 = var_8h;
0x00023adc mov r8, 0xc | r8 = 0xc;
0x00023ae0 mla r7, r8, r7, r4 | __asm ("mla r7, r8, r7, r4");
0x00023ae4 ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x00023ae8 ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x00023aec bl 0x33688 | array_insert_unique ();
0x00023af0 ldr r2, [r7, 0x14] | r2 = *((r7 + 0x14));
0x00023af4 ldr r3, [r6, -0x1c] | r3 = *((r6 - 0x1c));
0x00023af8 str r3, [r2, 0x3c] | *((r2 + 0x3c)) = r3;
0x00023afc str r2, [r3, 0x40] | *((r3 + 0x40)) = r2;
| label_17:
0x00023b00 ldr r3, [sp, 8] | r3 = var_8h;
0x00023b04 mov r2, 0xc | r2 = 0xc;
0x00023b08 mla r3, r2, r3, r4 | __asm ("mla r3, r2, r3, r4");
0x00023b0c ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00023b10 b 0x23940 | goto label_16;
0x00023b14 ldr r3, [r3] | r3 = *(r3);
0x00023b18 mov r2, 0x21 | r2 = 0x21;
0x00023b1c b 0x23a98 |
| } while (1);
| label_53:
0x00023b20 ldr r2, [pc, 0x4e0] | r2 = *(0x24004);
0x00023b24 ldr r1, [pc, 0x4e0] | r1 = "assertion_failed:_0";
0x00023b28 b 0x2386c | goto label_13;
| label_54:
0x00023b2c ldr r1, [fp] | r1 = *(fp);
0x00023b30 ldr r0, [pc, 0x4c0] | r0 = *(0x23ff4);
0x00023b34 bl 0x17840 | fputs (r0, r1);
0x00023b38 ldr r7, [sp, 8] | r7 = var_8h;
0x00023b3c mov r3, 0 | r3 = 0;
0x00023b40 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x00023b44 mov r5, 0xc | r5 = 0xc;
0x00023b48 mla r7, r5, r7, r4 | __asm ("mla r7, r5, r7, r4");
0x00023b4c ldr r0, [r7, 0x14] | r0 = *((r7 + 0x14));
0x00023b50 ldr r3, [r0, 0xc] |
0x00023b54 ldr r3, [r3, 8] | r3 = "assertion_failed:_0";
0x00023b58 blx r3 | uint32_t (*r3)(uint32_t, char*) (r0, "assertion_failed:_0");
0x00023b5c str r8, [r7, 0x14] | *((r7 + 0x14)) = r8;
0x00023b60 b 0x23b00 | goto label_17;
0x00023b64 ldr r7, [sp, 8] | r7 = var_8h;
0x00023b68 mla r7, r8, r7, r4 | __asm ("mla r7, r8, r7, r4");
0x00023b6c ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x00023b70 str r3, [sp, 0x30] | var_30h = r3;
0x00023b74 b 0x23438 | goto label_5;
0x00023b78 mov r3, 0 | r3 = 0;
0x00023b7c str r3, [sp, 0x30] | var_30h = r3;
0x00023b80 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00023b84 cmp r3, 0 |
| if (r3 == 0) {
0x00023b88 beq 0x23684 | goto label_12;
| }
0x00023b8c ldr r8, [r5, 0x18] | r8 = *((r5 + 0x18));
0x00023b90 mov r0, r5 | r0 = r5;
0x00023b94 bl 0x22a08 | fcn_00022a08 (r0);
0x00023b98 cmp r8, 0 |
| if (r8 != 0) {
0x00023b9c beq 0x23bac |
0x00023ba0 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x00023ba4 cmp r3, 0 |
| if (r3 != 0) {
0x00023ba8 bne 0x23bf8 | goto label_55;
| }
| }
0x00023bac ldr r2, [pc, 0x45c] | r2 = *(0x2400c);
0x00023bb0 ldr r1, [pc, 0x45c] | r1 = "assertion failed: cur && ctx->current";
0x00023bb4 b 0x2386c | goto label_13;
0x00023bb8 mov r3, 0 | r3 = 0;
0x00023bbc str r3, [sp, 0x30] | var_30h = r3;
0x00023bc0 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00023bc4 cmp r3, 0 |
| if (r3 == 0) {
0x00023bc8 beq 0x23684 | goto label_12;
| }
0x00023bcc ldr r8, [r5, 0x18] | r8 = *((r5 + 0x18));
0x00023bd0 mov r0, r5 | r0 = r5;
0x00023bd4 bl 0x22a08 | fcn_00022a08 (r0);
0x00023bd8 cmp r8, 0 |
| if (r8 != 0) {
0x00023bdc beq 0x23bec |
0x00023be0 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x00023be4 cmp r3, 0 |
| if (r3 != 0) {
0x00023be8 bne 0x23bf8 | goto label_55;
| }
| }
0x00023bec ldr r2, [pc, 0x41c] | r2 = *(0x2400c);
0x00023bf0 ldr r1, [pc, 0x420] | r1 = *(0x24014);
0x00023bf4 b 0x2386c | goto label_13;
| label_55:
0x00023bf8 str r8, [sp, 0x30] | var_30h = r8;
0x00023bfc b 0x23684 | goto label_12;
0x00023c00 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00023c04 cmp r3, 0 |
| if (r3 != 0) {
0x00023c08 beq 0x23c38 |
0x00023c0c ldr r8, [sp, 8] | r8 = var_8h;
0x00023c10 mla r8, r2, r8, r4 | __asm ("mla r8, r2, r8, r4");
0x00023c14 ldr r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x00023c18 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00023c1c cmp r3, 1 |
| if (r3 == 1) {
0x00023c20 beq 0x23c38 | goto label_56;
| }
0x00023c24 ldr r1, [fp] | r1 = *(fp);
0x00023c28 ldr r0, [pc, 0x3ec] | r0 = *(0x24018);
0x00023c2c bl 0x17840 | fputs (r0, r1);
0x00023c30 mov r3, 0 | r3 = 0;
0x00023c34 str r3, [r5, 4] | *((r5 + 4)) = r3;
| }
| label_56:
0x00023c38 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00023c3c cmp r3, 0 |
| if (r3 == 0) {
0x00023c40 beq 0x241d8 | goto label_57;
| }
0x00023c44 ldr r3, [r6, -4] | r3 = *((r6 - 4));
0x00023c48 sub r3, r3, 1 | r3--;
0x00023c4c cmp r3, 3 |
| if (r3 > 3) {
| /* switch table (4 cases) at 0x23c58 */
0x00023c50 ldrls pc, [pc, r3, lsl 2] | offset_2 = r3 << 2;
| pc = *((pc + offset_2));
| }
0x00023c54 b 0x23e58 | goto label_58;
0x00023c68 ldr r0, [pc, 0x3b0] | r0 = "rvalue must be string";
| do {
| label_18:
0x00023c6c bl 0x254a0 | buffer_init_string ();
0x00023c70 str r0, [sp, 0x10] | var_10h = r0;
0x00023c74 bl 0x24e20 | buffer_init ();
0x00023c78 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x00023c7c ldr r1, [r3] | r1 = *(r3);
0x00023c80 mov r7, r0 | r7 = r0;
0x00023c84 bl 0x22b5c | fcn_00022b5c (r0, r1);
0x00023c88 mov r2, 1 | r2 = 1;
0x00023c8c ldr r1, [pc, 0x3c8] | r1 = "unknown condition for $%s[%s]\n";
0x00023c90 mov r0, r7 | r0 = r7;
0x00023c94 bl 0x254c0 | buffer_append_string_len ();
0x00023c98 ldr r1, [r6, -0x34] | r1 = *((r6 - 0x34));
0x00023c9c mov r0, r7 | r0 = r7;
0x00023ca0 bl 0x22a50 | fcn_00022a50 (r0, r1);
0x00023ca4 ldr r1, [r6, -0x1c] | r1 = *((r6 - 0x1c));
0x00023ca8 mov r0, r7 | r0 = r7;
0x00023cac bl 0x22a50 | fcn_00022a50 (r0, r1);
0x00023cb0 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00023cb4 mov r0, r7 | r0 = r7;
0x00023cb8 bl 0x22a50 | fcn_00022a50 (r0, r1);
0x00023cbc ldr r3, [sp, 8] | r3 = var_8h;
0x00023cc0 mov r2, 0xc | r2 = 0xc;
0x00023cc4 mla r3, r2, r3, r4 | __asm ("mla r3, r2, r3, r4");
0x00023cc8 mov r0, r7 | r0 = r7;
0x00023ccc ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00023cd0 ldr sb, [r3, 0x10] | sb = *((r3 + 0x10));
0x00023cd4 mov r1, sb | r1 = sb;
0x00023cd8 bl 0x22a50 | fcn_00022a50 (r0, r1);
0x00023cdc cmp r7, 0 |
0x00023ce0 mov r0, r7 | r0 = r7;
| if (r7 == 0) {
0x00023ce4 ldrne r1, [r7] | r1 = *(r7);
| }
0x00023ce8 ldr r3, [r5, 8] | r3 = *((r5 + 8));
| if (r7 != 0) {
0x00023cec moveq r1, r7 | r1 = r7;
| }
0x00023cf0 bl 0x22980 | r0 = fcn_00022980 (r0);
0x00023cf4 mov r2, r0 | r2 = r0;
0x00023cf8 mov r0, r3 | r0 = r3;
0x00023cfc bl 0x334d0 | r0 = array_get_element_klen ();
0x00023d00 subs sl, r0, 0 | sl = r0 - 0;
| if (sl == r0) {
0x00023d04 movne r2, 0 | r2 = 0;
| }
| if (sl == r0) {
0x00023d08 movne r1, sl | r1 = sl;
| }
| if (sl != r0) {
0x00023d0c bne 0x24114 | goto label_59;
| }
0x00023d10 bl 0x35ff8 | data_config_init ();
0x00023d14 mov r1, r7 | r1 = r7;
0x00023d18 mov r8, r0 | r8 = r0;
0x00023d1c ldr r0, [r0] | r0 = *(r0);
0x00023d20 bl 0x22b5c | fcn_00022b5c (r0, r1);
0x00023d24 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00023d28 ldr r0, [r8, 0x24] | r0 = *((r8 + 0x24));
0x00023d2c bl 0x22b5c | fcn_00022b5c (r0, r1);
0x00023d30 ldr r1, [r6, -0x1c] | r1 = *((r6 - 0x1c));
0x00023d34 ldr r0, [r8, 0x14] | r0 = *((r8 + 0x14));
0x00023d38 bl 0x22b5c | fcn_00022b5c (r0, r1);
0x00023d3c ldr r1, [r6, -0x34] | r1 = *((r6 - 0x34));
0x00023d40 ldr r0, [r8, 0x18] | r0 = *((r8 + 0x18));
0x00023d44 bl 0x22b5c | fcn_00022b5c (r0, r1);
0x00023d48 mov r2, 2 | r2 = 2;
0x00023d4c ldr r1, [pc, 0x2d0] | r1 = *(0x24020);
0x00023d50 ldr r0, [r8, 0x18] | r0 = *((r8 + 0x18));
0x00023d54 bl 0x254c0 | buffer_append_string_len ();
0x00023d58 ldr r1, [r6, -0x1c] | r1 = *((r6 - 0x1c));
0x00023d5c ldr r0, [r8, 0x18] | r0 = *((r8 + 0x18));
0x00023d60 bl 0x22a50 | fcn_00022a50 (r0, r1);
0x00023d64 mov r2, 2 | r2 = 2;
0x00023d68 ldr r1, [pc, 0x2b8] | r1 = *(0x24024);
0x00023d6c ldr r0, [r8, 0x18] | r0 = *((r8 + 0x18));
0x00023d70 bl 0x254c0 | buffer_append_string_len ();
0x00023d74 ldr r3, [r6, -4] | r3 = *((r6 - 4));
0x00023d78 str r3, [r8, 0x20] | *((r8 + 0x20)) = r3;
0x00023d7c ldr r3, [pc, 0x2a8] | r3 = *(0x24028);
| label_19:
0x00023d80 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x00023d84 cmp r1, 0 |
| if (r1 != 0) {
0x00023d88 beq 0x23dc0 |
0x00023d8c ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00023d90 ldr r0, [r8, 0x18] | r0 = *((r8 + 0x18));
0x00023d94 str r3, [sp, 0x14] | s = r3;
0x00023d98 bl 0x258f4 | buffer_is_equal_string ();
0x00023d9c ldr r3, [sp, 0x14] | r3 = s;
0x00023da0 add r3, r3, 0xc | r3 += 0xc;
0x00023da4 cmp r0, 0 |
| if (r0 == 0) {
0x00023da8 beq 0x23e64 | goto label_60;
| }
0x00023dac ldr r2, [pc, 0x2b0] | r2 = "else_tmp_token";
0x00023db0 mov r3, 0xc | r3 = 0xc;
0x00023db4 mla r2, r3, sl, r2 | __asm ("mla r2, r3, sl, r2");
0x00023db8 ldr r3, [r2, 0x1a0] | r3 = *(0x24200);
0x00023dbc str r3, [r8, 0x1c] | *((r8 + 0x1c)) = r3;
| }
0x00023dc0 ldr r3, [r8, 0x1c] | r3 = *((r8 + 0x1c));
0x00023dc4 cmp r3, 0 |
| if (r3 != 0) {
0x00023dc8 bne 0x23e6c | goto label_61;
| }
0x00023dcc mov r2, 0xe | r2 = 0xe;
0x00023dd0 ldr r1, [pc, 0x258] | r1 = *(0x2402c);
0x00023dd4 ldr r0, [r6, -0x34] | r0 = *((r6 - 0x34));
0x00023dd8 bl 0x258f4 | r0 = buffer_is_equal_string ();
0x00023ddc subs sl, r0, 0 | sl = r0 - 0;
| if (sl == r0) {
0x00023de0 movne r3, 0xc | r3 = 0xc;
| }
| if (sl == r0) {
0x00023de4 strne r3, [r8, 0x1c] | *((r8 + 0x1c)) = r3;
| }
| if (sl == r0) {
0x00023de8 bne 0x23e04 |
0x00023dec ldr r3, [r8, 0x18] | r3 = *((r8 + 0x18));
0x00023df0 ldr r1, [pc, 0x23c] | r1 = "REQUEST_HEADER";
0x00023df4 ldr r2, [r3] | r2 = *(r3);
0x00023df8 ldr r0, [fp] | r0 = *(fp);
0x00023dfc bl 0x178e8 | fprintf (r0, "REQUEST_HEADER", r2, r3)
0x00023e00 str sl, [r5, 4] | *((r5 + 4)) = sl;
| }
| label_20:
0x00023e04 mov r0, sb | r0 = sb;
0x00023e08 bl 0x25438 | buffer_init_buffer ();
0x00023e0c ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00023e10 cmp r3, 0 |
0x00023e14 str r0, [r8, 0x44] | *((r8 + 0x44)) = r0;
| if (r3 == 0) {
0x00023e18 beq 0x241c4 | goto label_62;
| }
0x00023e1c ldr r3, [r6, -4] | r3 = *((r6 - 4));
0x00023e20 sub r3, r3, 1 | r3--;
0x00023e24 cmp r3, 3 |
| if (r3 > 3) {
| /* switch table (4 cases) at 0x23e30 */
0x00023e28 ldrls pc, [pc, r3, lsl 2] | offset_3 = r3 << 2;
| pc = *((pc + offset_3));
| }
0x00023e2c b 0x2419c | goto label_63;
0x00023e40 ldr r0, [pc, 0x1f0] | r0 = "error comp_key %s";
0x00023e44 b 0x23c6c |
| } while (1);
0x00023e48 ldr r0, [pc, 0x1ec] | r0 = *(0x24038);
0x00023e4c b 0x23c6c | goto label_18;
0x00023e50 ldr r0, [pc, 0x1e8] | r0 = "_";
0x00023e54 b 0x23c6c | goto label_18;
| label_58:
0x00023e58 ldr r2, [pc, 0x1a8] | r2 = *(0x24004);
0x00023e5c ldr r1, [pc, 0x1e0] | r1 = *(0x24040);
0x00023e60 b 0x2386c | goto label_13;
| label_60:
0x00023e64 add sl, sl, 1 | sl++;
0x00023e68 b 0x23d80 | goto label_19;
| label_61:
0x00023e6c cmp r3, 6 |
0x00023e70 mov r2, 0xc | r2 = 0xc;
| if (r3 != 6) {
0x00023e74 bne 0x23e90 | goto label_64;
| }
0x00023e78 ldr r1, [pc, 0x1c8] | r1 = *(0x24044);
0x00023e7c str r2, [r8, 0x1c] | *((r8 + 0x1c)) = r2;
0x00023e80 mov r2, 0xf | r2 = 0xf;
| do {
0x00023e84 ldr r0, [r8, 0x14] | r0 = *((r8 + 0x14));
0x00023e88 bl 0x253a4 | buffer_copy_string_len ();
0x00023e8c b 0x23e04 | goto label_20;
| label_64:
0x00023e90 cmp r3, 5 |
| if (r3 != 5) {
0x00023e94 streq r2, [r8, 0x1c] | *((r8 + 0x1c)) = r2;
| }
| if (r3 != 5) {
0x00023e98 ldreq r1, [pc, 0x1ac] | r1 = "User-Agent";
| }
| if (r3 != 5) {
0x00023e9c moveq r2, 0xa | r2 = 0xa;
| }
0x00023ea0 beq 0x23e84 |
| } while (r3 == 5);
0x00023ea4 cmp r3, 8 |
| if (r3 != 8) {
0x00023ea8 bne 0x240a4 | goto label_65;
| }
0x00023eac ldr r3, [r8, 0x20] | r3 = *((r8 + 0x20));
0x00023eb0 bic r3, r3, 2 | r3 = BIT_MASK (r3, 2);
0x00023eb4 cmp r3, 1 |
| if (r3 != 1) {
0x00023eb8 bne 0x23e04 | goto label_20;
| }
0x00023ebc ldr r3, [sb] | r3 = *(sb);
0x00023ec0 mov r1, 0x2f | r1 = 0x2f;
0x00023ec4 mov r0, r3 | r0 = r3;
0x00023ec8 str r3, [sp, 0x14] | s = r3;
0x00023ecc bl 0x17a2c | strchr (r0, r1);
0x00023ed0 ldr r3, [sp, 0x14] | r3 = s;
0x00023ed4 mov r1, 0x3a | r1 = 0x3a;
0x00023ed8 str r3, [sp, 0x18] | var_18h = r3;
0x00023edc mov sl, r0 | sl = r0;
0x00023ee0 mov r0, r3 | r0 = r3;
0x00023ee4 bl 0x17a2c | strchr (r0, r1);
0x00023ee8 cmp sl, 0 |
0x00023eec str r0, [sp, 0x14] | s = r0;
| if (sl == 0) {
0x00023ef0 beq 0x2406c | goto label_66;
| }
0x00023ef4 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00023ef8 cmp r3, sl |
| if (r3 == sl) {
0x00023efc beq 0x23e04 | goto label_20;
| }
0x00023f00 mov r2, 0xa | r2 = 0xa;
0x00023f04 add r1, sp, 0x34 | r1 += endptr;
0x00023f08 add r0, sl, 1 | r0 = sl + 1;
0x00023f0c bl 0x175dc | strtoul (r0, r1, r2);
0x00023f10 ldr r3, [sp, 0x34] | r3 = endptr;
0x00023f14 ldrb r3, [r3] | r3 = *(r3);
0x00023f18 cmp r3, 0 |
0x00023f1c str r0, [sp, 0x18] | var_18h = r0;
0x00023f20 clz r0, r0 | r0 &= r0;
0x00023f24 lsr r0, r0, 5 | r0 >>= 5;
| if (r3 == 0) {
0x00023f28 movne r0, 1 | r0 = 1;
| }
0x00023f2c cmp r0, 0 |
| if (r0 == 0) {
0x00023f30 bne 0x23f94 |
0x00023f34 ldr r3, [sp, 0x14] | r3 = s;
0x00023f38 ldr r1, [sb] | r1 = *(sb);
0x00023f3c cmp r3, 0 |
| if (r3 != 0) {
0x00023f40 bne 0x2450c | goto label_67;
| }
0x00023f44 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00023f48 cmp r3, 0x20 |
| if (r3 <= 0x20) {
0x00023f4c bhi 0x23f94 |
0x00023f50 sub r1, sl, r1 | r1 = sl - r1;
0x00023f54 mov r0, sb | r0 = sb;
0x00023f58 bl 0x25088 | buffer_string_set_length ();
0x00023f5c mov r1, 0 | r1 = 0;
0x00023f60 mov r0, sb | r0 = sb;
0x00023f64 bl 0x3b150 | r0 = http_request_host_normalize ();
| label_37:
0x00023f68 mov sl, r0 | sl = r0;
0x00023f6c mov r2, 1 | r2 = 1;
0x00023f70 ldr r1, [pc, 0xe4] | r1 = "unknown condition for $%s[%s]\n";
0x00023f74 mov r0, sb | r0 = sb;
0x00023f78 bl 0x254c0 | buffer_append_string_len ();
0x00023f7c ldr r2, [sp, 0x18] | r2 = var_18h;
0x00023f80 mov r3, 0 | r3 = 0;
0x00023f84 mov r0, sb | r0 = sb;
0x00023f88 bl 0x2558c | buffer_append_int ();
0x00023f8c cmp sl, 0 |
0x00023f90 b 0x24094 |
| }
| } else {
| label_36:
0x00023f94 ldr r2, [sb] | r2 = *(sb);
0x00023f98 ldr r1, [pc, 0xb0] | r1 = "User-Agent";
| label_21:
0x00023f9c ldr r0, [fp] | r0 = *(fp);
0x00023fa0 bl 0x178e8 | fprintf (r0, "User-Agent", r2)
0x00023fa4 mov r3, 0 | r3 = 0;
0x00023fa8 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x00023fac b 0x23e04 | goto label_20;
| label_66:
0x0002406c ldr r3, [sp, 0x14] | r3 = s;
0x00024070 cmp r3, 0 |
| if (r3 == 0) {
0x00024074 bne 0x24088 |
| label_22:
0x00024078 mov r1, 0 | r1 = 0;
0x0002407c mov r0, sb | r0 = sb;
0x00024080 bl 0x3b150 | http_request_host_normalize ();
0x00024084 b 0x24090 |
| } else {
0x00024088 mov r0, sb | r0 = sb;
0x0002408c bl 0x17bac | r0 = fcn_00017bac (r0);
| }
0x00024090 cmp r0, 0 |
| }
| if (r0 == 0) {
0x00024094 beq 0x23e04 | goto label_20;
| }
0x00024098 ldr r2, [sb] | r2 = *(sb);
0x0002409c ldr r1, [pc, -0x50] | r1 = "invalid IP addr: %s\n";
0x000240a0 b 0x23f9c | goto label_21;
| label_65:
0x000240a4 cmp r3, 1 |
| if (r3 != 1) {
0x000240a8 bne 0x240d4 | goto label_68;
| }
0x000240ac ldr r3, [sb] | r3 = *(sb);
0x000240b0 ldrb r2, [r3] | r2 = *(r3);
0x000240b4 cmp r2, 0x3a |
| if (r2 == 0x3a) {
0x000240b8 beq 0x23e04 | goto label_20;
| }
0x000240bc cmp r2, 0x5b |
| if (r2 != 0x5b) {
0x000240c0 bne 0x24078 | goto label_22;
| }
0x000240c4 ldrb r3, [r3, 1] | r3 = *((r3 + 1));
0x000240c8 cmp r3, 0x5d |
| if (r3 != 0x5d) {
0x000240cc bne 0x24078 | goto label_22;
| }
0x000240d0 b 0x23e04 | goto label_20;
| label_68:
0x000240d4 cmp r3, 3 |
| if (r3 != 3) {
0x000240d8 bne 0x23e04 | goto label_20;
| }
0x000240dc ldr r3, [r8, 0x20] | r3 = *((r8 + 0x20));
0x000240e0 bic r3, r3, 2 | r3 = BIT_MASK (r3, 2);
0x000240e4 cmp r3, 1 |
| if (r3 != 1) {
0x000240e8 bne 0x23e04 | goto label_20;
| }
0x000240ec b 0x24078 | goto label_22;
0x000240f0 mov r0, r8 | r0 = r8;
0x000240f4 bl 0x360b8 | r0 = data_config_pcre_compile ();
0x000240f8 cmp r0, 0 |
0x000240fc streq r0, [r5, 4] | *((r5 + 4)) = r0;
| while (1) {
0x00024100 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00024104 cmp r3, 0 |
| if (r3 == 0) {
0x00024108 beq 0x241c4 | goto label_62;
| }
0x0002410c mov r2, 1 | r2 = 1;
0x00024110 mov r1, r8 | r1 = r8;
| label_59:
0x00024114 mov r0, r5 | r0 = r5;
0x00024118 bl 0x22cb4 | fcn_00022cb4 (r0, r1);
| label_23:
0x0002411c mov r0, r7 | r0 = r7;
0x00024120 bl 0x24ae0 | buffer_free ();
0x00024124 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00024128 bl 0x24ae0 | buffer_free ();
0x0002412c mov r5, 0 | r5 = 0;
0x00024130 ldr r0, [r6, -0x34] | r0 = *((r6 - 0x34));
0x00024134 bl 0x24ae0 | buffer_free ();
0x00024138 ldr r0, [r6, -0x1c] | r0 = *((r6 - 0x1c));
0x0002413c str r5, [r6, -0x34] | *((r6 - 0x34)) = r5;
0x00024140 bl 0x24ae0 | buffer_free ();
0x00024144 ldr r3, [sp, 8] | r3 = var_8h;
0x00024148 mov r2, 0xc | r2 = 0xc;
0x0002414c mla r3, r2, r3, r4 | __asm ("mla r3, r2, r3, r4");
0x00024150 str r5, [r6, -0x1c] | *((r6 - 0x1c)) = r5;
0x00024154 ldr r0, [r3, 0x14] | r0 = *((r3 + 0x14));
0x00024158 cmp r0, r5 |
| if (r0 != r5) {
0x0002415c beq 0x2416c |
0x00024160 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00024164 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00024168 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x0002416c ldr r7, [sp, 8] | r7 = var_8h;
0x00024170 mov r3, 0xc | r3 = 0xc;
0x00024174 mla r7, r3, r7, r4 | __asm ("mla r7, r3, r7, r4");
0x00024178 mov r3, 0 | r3 = 0;
0x0002417c str r3, [r7, 0x14] | *((r7 + 0x14)) = r3;
0x00024180 ldr r0, [r6, -0x40] | r0 = *((r6 - 0x40));
0x00024184 bl 0x24ae0 | buffer_free ();
0x00024188 ldr r0, [r6, -0x28] | r0 = *((r6 - 0x28));
0x0002418c bl 0x24ae0 | buffer_free ();
0x00024190 ldr r0, [r6, -0x10] | r0 = *((r6 - 0x10));
| label_49:
0x00024194 bl 0x24ae0 | buffer_free ();
0x00024198 b 0x24240 | goto label_40;
| label_63:
0x0002419c ldr r3, [r6, -0x1c] | r3 = *((r6 - 0x1c));
0x000241a0 ldr r2, [r6, -0x34] | r2 = *((r6 - 0x34));
0x000241a4 ldr r3, [r3] | r3 = *(r3);
0x000241a8 ldr r2, [r2] | r2 = *(r2);
0x000241ac ldr r1, [pc, -0x15c] | r1 = "unknown condition for $%s[%s]\n";
0x000241b0 ldr r0, [fp] | r0 = *(fp);
0x000241b4 bl 0x178e8 | fprintf (r0, "unknown condition for $%s[%s]\n", r2, r3)
0x000241b8 mov r3, 0 | r3 = 0;
0x000241bc str r3, [r5, 4] | *((r5 + 4)) = r3;
0x000241c0 b 0x24100 |
| }
| label_62:
0x000241c4 ldr r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x000241c8 mov r0, r8 | r0 = r8;
0x000241cc ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000241d0 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000241d4 b 0x2411c | goto label_23;
| label_57:
0x000241d8 str r3, [sp, 0x10] | var_10h = r3;
0x000241dc mov r7, r3 | r7 = r3;
0x000241e0 b 0x2411c | goto label_23;
0x000241e4 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000241e8 cmp r3, 0 |
| if (r3 != 0) {
0x000241ec beq 0x24240 |
0x000241f0 bl 0x35ff8 | data_config_init ();
0x000241f4 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x000241f8 ldr r1, [r3] | r1 = *(r3);
0x000241fc mov r6, r0 | r6 = r0;
0x00024200 ldr r0, [r0] | r0 = *(r0);
0x00024204 bl 0x22b5c | fcn_00022b5c (r0, r1);
0x00024208 mov r2, 1 | r2 = 1;
0x0002420c ldr r1, [pc, -0x1b8] | r1 = "unknown condition for $%s[%s]\n";
0x00024210 ldr r0, [r6] | r0 = *(r6);
0x00024214 bl 0x254c0 | buffer_append_string_len ();
0x00024218 mov r2, 0xe | r2 = 0xe;
0x0002421c ldr r1, [pc, -0x1c4] | r1 = "else_tmp_token";
0x00024220 ldr r0, [r6] | r0 = *(r6);
0x00024224 bl 0x254c0 | buffer_append_string_len ();
0x00024228 mov r3, 5 | r3 = 5;
0x0002422c str r3, [r6, 0x20] | *((r6 + 0x20)) = r3;
0x00024230 mov r2, 1 | r2 = 1;
0x00024234 mov r1, r6 | r1 = r6;
0x00024238 mov r0, r5 | r0 = r5;
0x0002423c bl 0x22cb4 | fcn_00022cb4 (r0, r1);
| }
| label_40:
0x00024240 ldr r0, [pc, -0x1e4] | r0 = "else_tmp_token";
0x00024244 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00024248 add r3, r0, r3, lsl 1 | r3 = r0 + (r3 << 1);
0x0002424c ldrb r1, [r3, 0x255] | r1 = *((r3 + 0x255));
0x00024250 ldrb r2, [r3, 0x254] | r2 = *((r3 + 0x254));
0x00024254 ldr r3, [r4] | r3 = *(r4);
0x00024258 sub ip, r3, r1 |
0x0002425c mov r1, 0xc | r1 = 0xc;
0x00024260 mla r3, r1, ip, r4 | __asm ("mla r3, r1, ip, r4");
0x00024264 str ip, [r4] | *(r4) = ip;
0x00024268 ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x0002426c add r0, r0, r1 | r0 += r1;
0x00024270 add r3, r0, 0x2ac | r3 = r0 + 0x2ac;
0x00024274 ldrsb r3, [r3] | r3 = *(r3);
0x00024278 cmn r3, 0x27 |
| if (r3 != 0x27) {
0x0002427c ldrbeq r1, [r0, 0x46] | r1 = *((r0 + 0x46));
| }
| if (r3 != 0x27) {
0x00024280 beq 0x242bc |
0x00024284 cmp r2, 0x33 |
| if (r2 == 0x33) {
0x00024288 beq 0x242d0 | goto label_31;
| }
0x0002428c add r3, r2, r3 | r3 = r2 + r3;
0x00024290 cmp r3, 0x89 |
| if (r3 <= 0x89) {
0x00024294 bhi 0x242b0 |
0x00024298 ldr r0, [pc, -0x23c] | r0 = "else_tmp_token";
0x0002429c add r3, r0, r3 | r3 = r0 + r3;
0x000242a0 ldrb r0, [r3, 0x8c] | r0 = *((r3 + 0x8c));
0x000242a4 cmp r2, r0 |
| if (r2 != r0) {
0x000242a8 ldrbeq r1, [r3, 0x116] | r1 = *((r3 + 0x116));
| }
| if (r2 == r0) {
0x000242ac beq 0x242bc | goto label_69;
| }
| }
0x000242b0 ldr r3, [pc, -0x254] | r3 = "else_tmp_token";
0x000242b4 add r1, r3, r1 | r1 = r3 + r1;
0x000242b8 ldrb r1, [r1, 0x46] | r1 = *((r1 + 0x46));
| }
| label_69:
0x000242bc cmp r1, 0x45 |
| if (r1 > 0x45) {
0x000242c0 bgt 0x243fc | goto label_70;
| }
0x000242c4 add r3, sp, 0x30 | r3 += var_30h;
0x000242c8 mov r0, r4 | r0 = r4;
0x000242cc bl 0x22b84 | fcn_00022b84 (r0, r1);
| label_31:
0x000242d0 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000242d4 cmp r3, 0x33 |
| if (r3 == 0x33) {
0x000242d8 beq 0x23038 | goto label_24;
| }
| label_35:
0x000242dc ldr r3, [r4] | r3 = *(r4);
0x000242e0 cmp r3, 0 |
| if (r3 >= 0) {
0x000242e4 bge 0x22fec | goto label_25;
| }
0x000242e8 b 0x23038 | goto label_24;
0x000242ec mov r3, 1 | r3 = 1;
| do {
| label_27:
0x000242f0 str r3, [sp, 0x30] | var_30h = r3;
0x000242f4 b 0x23124 | goto label_26;
0x000242f8 mov r3, 2 | r3 = 2;
0x000242fc b 0x242f0 |
| } while (1);
0x00024300 mov r3, 3 | r3 = 3;
0x00024304 b 0x242f0 | goto label_27;
0x00024308 mov r3, 4 | r3 = 4;
0x0002430c b 0x242f0 | goto label_27;
0x00024310 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00024314 mov r6, 0 | r6 = 0;
0x00024318 cmp r3, r6 |
0x0002431c str r6, [sp, 0x30] | var_30h = r6;
| if (r3 == r6) {
0x00024320 beq 0x2378c | goto label_28;
| }
0x00024324 ldr r7, [sp, 8] | r7 = var_8h;
0x00024328 mov r8, 0xc | r8 = 0xc;
0x0002432c mla r7, r8, r7, r4 | __asm ("mla r7, r8, r7, r4");
0x00024330 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x00024334 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00024338 cmp r2, 1 |
| if (r2 != 1) {
0x0002433c ldreq r2, [r3, 0x10] | r2 = *((r3 + 0x10));
| }
| if (r2 != 1) {
0x00024340 streq r6, [r3, 0x10] | *((r3 + 0x10)) = r6;
| }
| if (r2 == 1) {
0x00024344 streq r2, [sp, 0x30] | var_30h = r2;
| goto label_71;
| }
| if (r2 == 1) {
| label_71:
0x00024348 beq 0x2378c | goto label_28;
| }
0x0002434c cmp r2, 4 |
| if (r2 == 4) {
0x00024350 bne 0x24370 |
0x00024354 bl 0x24e20 | buffer_init ();
0x00024358 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x0002435c ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x00024360 asr r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00024364 str r0, [sp, 0x30] | var_30h = r0;
0x00024368 bl 0x25608 | buffer_copy_int ();
0x0002436c b 0x2378c | goto label_28;
| }
0x00024370 ldr r1, [fp] | r1 = *(fp);
0x00024374 ldr r0, [pc, -0x314] | r0 = "operand must be string";
0x00024378 bl 0x17840 | fputs ("operand must be string", r1);
0x0002437c str r6, [r5, 4] | *((r5 + 4)) = r6;
0x00024380 b 0x2378c | goto label_28;
0x00024384 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00024388 cmp r3, 0 |
| if (r3 == 0) {
0x0002438c beq 0x243b8 | goto label_72;
| }
0x00024390 ldr r8, [sp, 8] | r8 = var_8h;
0x00024394 mov r1, r5 | r1 = r5;
0x00024398 mla r8, r2, r8, r4 | __asm ("mla r8, r2, r8, r4");
0x0002439c ldr r0, [r5] | r0 = *(r5);
0x000243a0 ldr r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x000243a4 ldr r2, [r3] | r2 = *(r3);
0x000243a8 bl 0x21dc8 | r0 = config_parse_file ();
| label_30:
0x000243ac cmp r0, 0 |
| if (r0 == 0) {
0x000243b0 movne r3, 0 | r3 = 0;
| }
0x000243b4 strne r3, [r5, 4] | *((r5 + 4)) = r3;
| while (r3 == 0) {
| label_72:
0x000243b8 ldr r7, [sp, 8] | r7 = var_8h;
0x000243bc mov r3, 0xc | r3 = 0xc;
0x000243c0 mla r7, r3, r7, r4 | __asm ("mla r7, r3, r7, r4");
0x000243c4 ldr r0, [r7, 0x14] | r0 = *((r7 + 0x14));
0x000243c8 bl 0x24ae0 | buffer_free ();
0x000243cc b 0x2322c | goto label_29;
0x000243d0 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000243d4 cmp r3, 0 |
0x000243d8 beq 0x243b8 |
| }
0x000243dc ldr r8, [sp, 8] | r8 = var_8h;
0x000243e0 mov r1, r5 | r1 = r5;
0x000243e4 mla r8, r2, r8, r4 | __asm ("mla r8, r2, r8, r4");
0x000243e8 ldr r0, [r5] | r0 = *(r5);
0x000243ec ldr r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x000243f0 ldr r2, [r3] | r2 = *(r3);
0x000243f4 bl 0x21f78 | config_parse_cmd ();
0x000243f8 b 0x243ac | goto label_30;
| label_70:
0x000243fc cmp r1, 0x73 |
| if (r1 != 0x73) {
0x00024400 bne 0x242d0 | goto label_31;
| }
0x00024404 mov r0, r4 | r0 = r4;
0x00024408 bl 0x22b30 | fcn_00022b30 (r0, r1);
0x0002440c b 0x242d0 | goto label_31;
| label_39:
0x00024410 cmp r0, 0x72 |
| if (r0 != 0x72) {
0x00024414 bne 0x244f4 | goto label_73;
| }
0x00024418 ldr r1, [r4] | r1 = *(r4);
0x0002441c mov r2, 0xc | r2 = 0xc;
0x00024420 mla r3, r2, r1, r4 | __asm ("mla r3, r2, r1, r4");
0x00024424 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00024428 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0002442c cmp r3, 0x1b |
| if (r3 != 0x1b) {
0x00024430 orreq r2, r2, 1 | r2 |= 1;
| }
0x00024434 cmp r2, 0 |
| if (r2 == 0) {
0x00024438 beq 0x24470 | goto label_74;
| }
0x0002443c ldr r3, [sp, 0xc] | r3 = var_ch;
0x00024440 add r1, sp, 0x2c | r1 += var_2ch;
0x00024444 and r0, r3, 0xff | r0 = r3 & 0xff;
0x00024448 bl 0x22a78 | fcn_00022a78 (r0, r1);
| label_33:
0x0002444c mov r3, 0x33 | r3 = 0x33;
0x00024450 str r3, [sp, 0xc] | var_ch = r3;
| label_32:
0x00024454 mov r3, 3 | r3 = 3;
0x00024458 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x0002445c mov r3, 1 | r3 = 1;
0x00024460 str r3, [sp, 0x20] | var_20h = r3;
0x00024464 b 0x242d0 | goto label_31;
| do {
0x00024468 mov r0, r4 | r0 = r4;
0x0002446c bl 0x22ae0 | fcn_00022ae0 (r0, r1);
| label_74:
0x00024470 ldr r3, [r4] | r3 = *(r4);
0x00024474 cmp r3, 0 |
| if (r3 < 0) {
0x00024478 blt 0x244bc | goto label_75;
| }
0x0002447c mov r1, 0x1b | r1 = 0x1b;
0x00024480 mov r0, r4 | r0 = r4;
0x00024484 bl 0x22998 | r0 = fcn_00022998 (r0, r1);
0x00024488 cmp r0, 0x45 |
0x0002448c mov r1, r0 | r1 = r0;
0x00024490 bgt 0x24468 |
| } while (r0 > 0x45);
0x00024494 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00024498 cmp r3, 0 |
| if (r3 != 0) {
0x0002449c beq 0x244bc |
0x000244a0 add r3, sp, 0x38 | r3 += var_38h;
0x000244a4 mov r2, 0 | r2 = 0;
0x000244a8 str r2, [r3, -4]! | *((r3 -= 4)) = r2;
0x000244ac mov r0, r4 | r0 = r4;
0x000244b0 mov r2, 0x1b | r2 = 0x1b;
0x000244b4 bl 0x22b84 | fcn_00022b84 (r0, r1);
0x000244b8 b 0x24454 | goto label_32;
| }
| label_75:
0x000244bc ldr r3, [sp, 0xc] | r3 = var_ch;
0x000244c0 add r1, sp, 0x2c | r1 += var_2ch;
0x000244c4 and r0, r3, 0xff | r0 = r3 & 0xff;
0x000244c8 bl 0x22a78 | fcn_00022a78 (r0, r1);
0x000244cc ldr r5, [r4, 8] | r5 = *((r4 + 8));
| label_34:
0x000244d0 ldr r3, [r4] | r3 = *(r4);
0x000244d4 cmp r3, 0 |
| if (r3 >= 0) {
0x000244d8 movlt r3, 0 | r3 = 0;
| }
| if (r3 >= 0) {
0x000244dc strlt r3, [r5, 4] | *((r5 + 4)) = r3;
| }
| if (r3 < 0) {
0x000244e0 strlt r5, [r4, 8] | *((r4 + 8)) = r5;
| goto label_76;
| }
| if (r3 < 0) {
| label_76:
0x000244e4 blt 0x2444c | goto label_33;
| }
0x000244e8 mov r0, r4 | r0 = r4;
0x000244ec bl 0x22ae0 | fcn_00022ae0 (r0, r1);
0x000244f0 b 0x244d0 | goto label_34;
| label_73:
0x000244f4 mov r0, r4 | r0 = r4;
0x000244f8 bl 0x22b30 | fcn_00022b30 (r0, r1);
0x000244fc b 0x23038 | goto label_24;
| label_38:
0x00024500 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00024504 str r3, [sp, 0xc] | var_ch = r3;
0x00024508 b 0x242dc | goto label_35;
| label_67:
0x0002450c ldr r3, [sp, 0x18] | r3 = var_18h;
0x00024510 cmp r3, 0x80 |
| if (r3 > 0x80) {
0x00024514 bhi 0x23f94 | goto label_36;
| }
0x00024518 mov r0, sb | r0 = sb;
0x0002451c sub r1, sl, r1 | r1 = sl - r1;
0x00024520 bl 0x25088 | buffer_string_set_length ();
0x00024524 mov r0, sb | r0 = sb;
0x00024528 bl 0x17bac | fcn_00017bac (r0);
0x0002452c b 0x23f68 | goto label_37;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/lighttpd @ 0x22d84 */
| #include <stdint.h>
|
; (fcn) sym.configparser_merge_data () | void configparser_merge_data (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00022d84 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00022d88 ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x00022d8c push {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00022d90 cmp r3, r2 |
0x00022d94 mov r4, r0 | r4 = r0;
0x00022d98 mov r5, r1 | r5 = r1;
| if (r3 == r2) {
0x00022d9c beq 0x22e38 | goto label_4;
| }
0x00022da0 cmp r3, 1 |
| if (r3 != 1) {
0x00022da4 bne 0x22dc8 | goto label_5;
| }
0x00022da8 cmp r2, 4 |
| if (r2 != 4) {
0x00022dac bne 0x22e10 | goto label_6;
| }
0x00022db0 ldr r2, [r1, 0x10] | r2 = *((r1 + 0x10));
0x00022db4 ldr r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x00022db8 asr r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00022dbc bl 0x2558c | buffer_append_int ();
| do {
| label_0:
0x00022dc0 mov r0, r4 | r0 = r4;
0x00022dc4 pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_5:
0x00022dc8 cmp r3, 4 |
0x00022dcc cmpeq r2, 1 | __asm ("cmpeq r2, 1");
| if (r3 != 4) {
0x00022dd0 bne 0x22e10 | goto label_6;
| }
0x00022dd4 bl 0x34290 | data_string_init ();
0x00022dd8 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x00022ddc asr r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00022de0 mov r6, r0 | r6 = r0;
0x00022de4 ldr r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x00022de8 bl 0x2558c | buffer_append_int ();
0x00022dec ldr r1, [r5, 0x10] | r1 = *((r5 + 0x10));
0x00022df0 ldr r0, [r6, 0x10] | r0 = *((r6 + 0x10));
0x00022df4 bl 0x22a50 | fcn_00022a50 (r0, r1);
0x00022df8 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00022dfc mov r0, r4 | r0 = r4;
0x00022e00 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00022e04 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00022e08 mov r4, r6 | r4 = r6;
0x00022e0c b 0x22dc0 |
| } while (1);
| label_6:
0x00022e10 ldr r3, [pc, 0x118] | r3 = *(0x22f2c);
0x00022e14 ldr r0, [pc, 0x118] | r0 = stderr;
0x00022e18 ldr r1, [r3] | r1 = *(0x22f2c);
0x00022e1c bl 0x17840 | fputs (r0, r1);
| label_3:
0x00022e20 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00022e24 mov r0, r4 | r0 = r4;
0x00022e28 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00022e2c blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00022e30 mov r4, 0 | r4 = 0;
0x00022e34 b 0x22dc0 | goto label_0;
| label_4:
0x00022e38 cmp r3, 3 |
| if (r3 != 3) {
0x00022e3c beq 0x22e74 |
0x00022e40 cmp r3, 4 |
| if (r3 != 4) {
0x00022e44 beq 0x22e60 |
0x00022e48 cmp r3, 1 |
| if (r3 != 1) {
0x00022e4c bne 0x22f20 | goto label_7;
| }
0x00022e50 ldr r1, [r1, 0x10] | r1 = *((r1 + 0x10));
0x00022e54 ldr r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x00022e58 bl 0x22a50 | fcn_00022a50 (r0, r1);
0x00022e5c b 0x22dc0 | goto label_0;
| }
0x00022e60 ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x00022e64 ldr r2, [r1, 0x10] | r2 = *((r1 + 0x10));
0x00022e68 add r3, r3, r2 | r3 += r2;
0x00022e6c str r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x00022e70 b 0x22dc0 | goto label_0;
| }
0x00022e74 ldr r8, [r0, 0x10] | r8 = *((r0 + 0x10));
0x00022e78 ldr r7, [r1, 0x10] | r7 = *((r1 + 0x10));
0x00022e7c mov r6, 0 | r6 = 0;
| label_1:
0x00022e80 ldr r3, [r7, 8] | r3 = *((r7 + 8));
0x00022e84 cmp r3, r6 |
| if (r3 < r6) {
0x00022e88 bls 0x22dc0 | goto label_0;
| }
0x00022e8c ldr r3, [r7] | r3 = *(r7);
0x00022e90 ldr r5, [r3, r6, lsl 2] | offset_0 = r6 << 2;
| r5 = *((r3 + offset_0));
0x00022e94 cmp r5, 0 |
| if (r5 == 0) {
0x00022e98 beq 0x22ec4 | goto label_8;
| }
0x00022e9c ldr sb, [r5, 8] | sb = *((r5 + 8));
0x00022ea0 cmp sb, 0 |
0x00022ea4 beq 0x22ecc |
| while (r3 == 0) {
| label_2:
0x00022ea8 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00022eac mov r0, r5 | r0 = r5;
0x00022eb0 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00022eb4 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00022eb8 mov r1, r0 | r1 = r0;
0x00022ebc mov r0, r8 | r0 = r8;
0x00022ec0 bl 0x33688 | array_insert_unique ();
| label_8:
0x00022ec4 add r6, r6, 1 | r6++;
0x00022ec8 b 0x22e80 | goto label_1;
0x00022ecc ldr r3, [r5] | r3 = *(r5);
0x00022ed0 cmp r3, 0 |
0x00022ed4 beq 0x22ea8 |
| }
0x00022ed8 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00022edc cmp r2, 0 |
| if (r2 == 0) {
0x00022ee0 beq 0x22ea8 | goto label_2;
| }
0x00022ee4 mov r0, r3 | r0 = r3;
0x00022ee8 bl 0x22980 | r0 = fcn_00022980 (r0);
0x00022eec mov r2, r0 | r2 = r0;
0x00022ef0 ldr r1, [r3] | r1 = *(r3);
0x00022ef4 mov r0, r8 | r0 = r8;
0x00022ef8 bl 0x334d0 | r0 = array_get_element_klen ();
0x00022efc cmp r0, 0 |
| if (r0 == 0) {
0x00022f00 beq 0x22ea8 | goto label_2;
| }
0x00022f04 ldr r3, [r5] | r3 = *(r5);
0x00022f08 ldr r1, [pc, 0x28] | r1 = "data_type_mismatch__cannot_merge";
0x00022f0c ldr r2, [r3] | r2 = *(r3);
0x00022f10 ldr r3, [pc, 0x18] | r3 = *(0x22f2c);
0x00022f14 ldr r0, [r3] | r0 = *(0x22f2c);
0x00022f18 bl 0x178e8 | fprintf (r0, "data_type_mismatch__cannot_merge", r2, r3)
0x00022f1c b 0x22e20 | goto label_3;
| label_7:
0x00022f20 ldr r2, [pc, 0x14] | r2 = "Duplicate_array_key__s";
0x00022f24 mov r1, 0x71 | r1 = 0x71;
0x00022f28 ldr r0, [pc, 0x10] | r0 = "assertion_failed:_0";
0x00022f2c bl 0x17c50 | log_failed_assert ();
| if (r0 != 0) {
0x00022f30 andeq r8, r5, r8, asr 5 | r8 = r5 & (r8 >> 5);
| }
| if (r0 != 0) {
0x00022f34 andeq r1, r4, r0, lsr 17 | r1 = r4 & (r0 >> 17);
| }
| if (r0 != 0) {
0x00022f38 andeq r1, r4, r2, asr 17 | r1 = r4 & (r2 >> 17);
| }
0x00022f3c ldrdeq r1, r2, [r4], -ip | __asm ("ldrdeq r1, r2, [r4], -ip");
| /* Beware that this jump is a conditional jump.
| * r2dec transformed it as a return, due being the
| * last instruction. Please, check 'pdda' output
| * for more hints. */
0x00022f40 andeq r1, r4, r8, asr r8 | return r1 = r4 & (r8 >> r8);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/lighttpd @ 0x360b8 */
| #include <stdint.h>
|
; (fcn) sym.data_config_pcre_compile () | void data_config_pcre_compile (uint32_t arg1) {
| int32_t var_0h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_18h;
| r0 = arg1;
0x000360b8 push {r4, r5, r6, lr} |
0x000360bc mov r5, r0 | r5 = r0;
0x000360c0 ldr r0, [r0, 0x48] | r0 = *((r0 + 0x48));
0x000360c4 sub sp, sp, 0x18 |
0x000360c8 cmp r0, 0 |
| if (r0 != 0) {
0x000360cc beq 0x360dc |
0x000360d0 ldr r3, [pc, 0x130] |
0x000360d4 ldr r3, [r3] | r3 = *(0x36204);
0x000360d8 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x000360dc ldr r0, [r5, 0x4c] | r0 = *((r5 + 0x4c));
0x000360e0 cmp r0, 0 |
| if (r0 != 0) {
0x000360e4 beq 0x360f4 |
0x000360e8 ldr r3, [pc, 0x118] |
0x000360ec ldr r3, [r3] | r3 = *(0x36204);
0x000360f0 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x000360f4 ldr r0, [r5, 0x44] | r0 = *((r5 + 0x44));
0x000360f8 mov r6, 0 | r6 = 0;
0x000360fc str r6, [sp] | *(sp) = r6;
0x00036100 add r3, sp, 0x10 | r3 += var_10h;
0x00036104 add r2, sp, 0xc | r2 += var_ch;
0x00036108 mov r1, r6 | r1 = r6;
0x0003610c ldr r0, [r0] | r0 = *(r0);
0x00036110 bl 0x17834 | r0 = pcre_compile ();
0x00036114 cmp r0, r6 |
0x00036118 mov r4, r0 | r4 = r0;
0x0003611c str r0, [r5, 0x48] | *((r5 + 0x48)) = r0;
| if (r0 != r6) {
0x00036120 bne 0x36154 | goto label_1;
| }
0x00036124 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00036128 ldr r2, [r5, 0x44] | r2 = *((r5 + 0x44));
0x0003612c ldr r0, [pc, 0xd8] |
0x00036130 str r3, [sp] | *(sp) = r3;
0x00036134 ldr r1, [pc, 0xd4] | r1 = stderr;
0x00036138 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0003613c ldr r2, [r2] | r2 = *(r2);
0x00036140 ldr r0, [r0] | r0 = _edata;
0x00036144 bl 0x178e8 | fprintf (r0, r1, r2, r3)
| do {
| label_0:
0x00036148 mov r0, r4 | r0 = r4;
0x0003614c add sp, sp, 0x18 |
0x00036150 pop {r4, r5, r6, pc} |
| label_1:
0x00036154 add r2, sp, 0xc | r2 += var_ch;
0x00036158 mov r1, r6 | r1 = r6;
0x0003615c bl 0x17b40 | r0 = pcre_study ();
0x00036160 cmp r0, 0 |
0x00036164 mov r4, r0 | r4 = r0;
0x00036168 str r0, [r5, 0x4c] | *((r5 + 0x4c)) = r0;
| if (r0 != 0) {
0x0003616c bne 0x36198 | goto label_2;
| }
0x00036170 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00036174 cmp r3, 0 |
| if (r3 == 0) {
0x00036178 beq 0x36198 | goto label_2;
| }
0x0003617c ldr r2, [r5, 0x44] | r2 = *((r5 + 0x44));
0x00036180 ldr r0, [pc, 0x84] |
0x00036184 ldr r2, [r2] | r2 = *(r2);
0x00036188 ldr r1, [pc, 0x84] | r1 = "parsing_regex_failed:__s_____s_at_offset__d";
0x0003618c ldr r0, [r0] | r0 = _edata;
0x00036190 bl 0x178e8 | fprintf (r0, "parsing_regex_failed:__s_____s_at_offset__d", r2)
0x00036194 b 0x36148 |
| } while (1);
| label_2:
0x00036198 mov r1, r4 | r1 = r4;
0x0003619c add r3, sp, 0x14 | r3 += var_14h;
0x000361a0 mov r2, 2 | r2 = 2;
0x000361a4 ldr r0, [r5, 0x48] | r0 = *((r5 + 0x48));
0x000361a8 bl 0x177b0 | r0 = pcre_fullinfo ();
0x000361ac cmp r0, 0 |
0x000361b0 mov r4, r0 | r4 = r0;
0x000361b4 str r0, [sp, 0x10] | var_10h = r0;
| if (r0 != 0) {
0x000361b8 beq 0x361dc |
0x000361bc ldr r3, [r5, 0x44] | r3 = *((r5 + 0x44));
0x000361c0 ldr r1, [pc, 0x50] | r1 = "studying regex failed: %s -> %s\n";
0x000361c4 ldr r2, [r3] | r2 = *(r3);
0x000361c8 ldr r3, [pc, 0x3c] | r3 = _edata;
0x000361cc mov r4, 0 | r4 = 0;
0x000361d0 ldr r0, [r3] | r0 = _edata;
0x000361d4 bl 0x178e8 | fprintf (r0, "studying regex failed: %s -> %s\n", r2, r3, r4)
0x000361d8 b 0x36148 | goto label_0;
| }
0x000361dc ldr r3, [sp, 0x14] | r3 = var_14h;
0x000361e0 cmp r3, 9 |
| if (r3 <= 9) {
0x000361e4 movle r4, 1 | r4 = 1;
| goto label_3;
| }
| if (r3 <= 9) {
| label_3:
0x000361e8 ble 0x36148 | goto label_0;
| }
0x000361ec ldr r3, [r5, 0x44] | r3 = *((r5 + 0x44));
0x000361f0 ldr r1, [pc, 0x24] | r1 = "getting_capture_count_for_regex_failed:__s";
0x000361f4 ldr r2, [r3] | r2 = *(r3);
0x000361f8 ldr r3, [pc, 0xc] | r3 = _edata;
0x000361fc ldr r0, [r3] | r0 = _edata;
0x00036200 bl 0x178e8 | fprintf (r0, "getting_capture_count_for_regex_failed:__s", r2, r3)
0x00036204 b 0x36148 | goto label_0;
| }
[*] Function printf used 19 times lighttpd