[*] Binary protection state of ld-uClibc-1.0.31.so
Full RELRO No Canary found NX disabled DSO No RPATH No RUNPATH Symbols
[*] Function sprintf tear down of ld-uClibc-1.0.31.so
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/ld-uClibc-1.0.31.so @ 0x36c4 */
| #include <stdint.h>
|
; (fcn) sym._dl_load_elf_shared_library () | void dl_load_elf_shared_library (int32_t arg1, int32_t arg2) {
| int32_t var_140h;
| int32_t var_13ch;
| int32_t var_138h;
| int32_t var_134h;
| int32_t var_130h;
| int32_t var_12ch;
| int32_t var_128h;
| int32_t var_124h;
| int32_t var_120h;
| int32_t var_11ch;
| int32_t var_118h;
| int32_t var_114h;
| int32_t var_110h;
| int32_t var_10ch;
| int32_t var_108h;
| int32_t var_104h;
| int32_t var_100h;
| int32_t var_fch;
| int32_t var_f8h;
| int32_t var_f0h;
| int32_t var_ech;
| int32_t var_e8h;
| int32_t var_b0h;
| int32_t var_a4h;
| int32_t var_58h;
| int32_t var_0h;
| int32_t var_20h_2;
| int32_t var_20h;
| r0 = arg1;
| r1 = arg2;
0x000036c4 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000036c8 ldr r8, [pc, 0xaec] | r8 = *(0x41b8);
0x000036cc add fp, sp, 0x20 |
0x000036d0 mov lr, r1 | lr = r1;
0x000036d4 sub sp, sp, 0x12c |
0x000036d8 mov r1, 0 | r1 = 0;
0x000036dc mov r3, r0 | r3 = r0;
0x000036e0 mov ip, r2 |
0x000036e4 add r8, pc, r8 | r8 = pc + r8;
0x000036e8 mov r0, r2 | r0 = r2;
0x000036ec mov r2, r1 | r2 = r1;
0x000036f0 mov r7, 5 | r7 = 5;
0x000036f4 svc 0 | __asm ("svc 0");
0x000036f8 cmn r0, 0x1000 |
0x000036fc mov r2, r0 | r2 = r0;
| if (r0 < 0x1000) {
0x00003700 bls 0x3734 | goto label_16;
| }
0x00003704 ldr r3, [pc, 0xab4] | r3 = *(0x41bc);
0x00003708 rsb r2, r0, 0 | r2 = r0 - ;
0x0000370c ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x00003710 str r2, [r3] | *(r3) = r2;
| do {
0x00003714 ldr r3, [pc, 0xaa8] | r3 = *(0x41c0);
0x00003718 mov r2, 1 | r2 = 1;
0x0000371c ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x00003720 str r2, [r3] | *(r3) = r2;
| label_0:
0x00003724 mov r6, 0 | r6 = 0;
| label_1:
0x00003728 mov r0, r6 | r0 = r6;
0x0000372c sub sp, fp, 0x20 |
0x00003730 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_16:
0x00003734 cmp r0, 0 |
0x00003738 blt 0x3714 |
| } while (r0 < 0);
0x0000373c sub r1, fp, 0xf0 | r1 -= var_f0h;
0x00003740 mov r7, 0x6c | r7 = 0x6c;
0x00003744 svc 0 | __asm ("svc 0");
0x00003748 cmn r0, 0x1000 |
| if (r0 < 0x1000) {
0x0000374c bls 0x3794 | goto label_17;
| }
0x00003750 ldr r3, [pc, 0xa68] | r3 = *(0x41bc);
0x00003754 rsb r0, r0, 0 | r0 -= ;
0x00003758 ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x0000375c str r0, [r3] | *(r3) = r0;
| do {
0x00003760 ldr r3, [pc, 0xa5c] | r3 = *(0x41c0);
0x00003764 mov r1, 1 | r1 = 1;
0x00003768 ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x0000376c mov r0, r2 | r0 = r2;
0x00003770 str r1, [r3] | *(r3) = r1;
0x00003774 mov r7, 6 | r7 = 6;
0x00003778 svc 0 | __asm ("svc 0");
0x0000377c cmn r0, 0x1000 |
| if (r0 <= 0x1000) {
0x00003780 ldrhi r3, [pc, 0xa38] | r3 = *((pc + 0xa38));
| }
0x00003784 rsbhi r0, r0, 0 | __asm ("rsbhi r0, r0, 0");
| if (r0 <= 0x1000) {
0x00003788 ldrhi r3, [r8, r3] | r3 = *((r8 + r3));
| }
| if (r0 <= 0x1000) {
0x0000378c strhi r0, [r3] | *(r3) = r0;
| }
0x00003790 b 0x3724 | goto label_0;
| label_17:
0x00003794 cmp r0, 0 |
0x00003798 blt 0x3760 |
| } while (r0 < 0);
0x0000379c tst r3, 0x4000000 |
| if ((r3 & 0x4000000) == 0) {
0x000037a0 beq 0x37c0 | goto label_18;
| }
0x000037a4 ldrh r6, [fp, -0xe8] | r6 = var_e8h;
0x000037a8 ands r6, r6, 0x800 | r6 &= 0x800;
0x000037ac bne 0x37c0 |
| while ((r3 & 4) != 0) {
0x000037b0 mov r0, r2 | r0 = r2;
| label_7:
0x000037b4 mov r7, 6 | r7 = 6;
0x000037b8 svc 0 | __asm ("svc 0");
0x000037bc b 0x398c | goto label_19;
| label_18:
0x000037c0 ldr r1, [pc, 0xa00] | r1 = *(0x41c4);
0x000037c4 ldr r0, [fp, -0xf0] | r0 = var_f0h;
0x000037c8 ldr r1, [r8, r1] | r1 = *((r8 + r1));
0x000037cc ldr r7, [fp, -0xec] | r7 = var_ech;
0x000037d0 ldr r6, [r1] | r6 = *(0x41c4);
0x000037d4 mov r1, 0 | r1 = 0;
| label_2:
0x000037d8 cmp r6, 0 |
| if (r6 != 0) {
0x000037dc bne 0x3894 | goto label_20;
| }
0x000037e0 tst r3, 4 |
0x000037e4 bne 0x37b0 |
| }
0x000037e8 str r3, [fp, -0x140] | var_140h = r3;
0x000037ec ldr r3, [pc, 0x9d8] | r3 = *(0x41c8);
0x000037f0 str r2, [fp, -0xfc] | var_fch = r2;
0x000037f4 str ip, [fp, -0x10c] | var_10ch = ip;
0x000037f8 str lr, [fp, -0x110] | var_110h = lr;
0x000037fc ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x00003800 mov r0, r6 | r0 = r6;
0x00003804 str r3, [fp, -0xf8] | var_f8h = r3;
0x00003808 ldr r1, [r3] | r1 = *(0x41c8);
0x0000380c mov r2, 3 | r2 = 3;
0x00003810 mov r3, 0x22 | r3 = 0x22;
0x00003814 mvn r4, 0 | r4 = ~0;
0x00003818 mov r5, r6 | r5 = r6;
0x0000381c mov r7, 0xc0 | r7 = 0xc0;
0x00003820 svc 0 | __asm ("svc 0");
0x00003824 cmn r0, 0x1000 |
0x00003828 mov sl, r0 | sl = r0;
| if (r0 < 0x1000) {
0x0000382c bls 0x38ec | goto label_21;
| }
0x00003830 ldr r3, [pc, 0x988] | r3 = *(0x41bc);
0x00003834 ldr r1, [pc, 0x994] | r1 = *(0x41cc);
0x00003838 ldr r4, [r8, r3] | r4 = *((r8 + r3));
0x0000383c rsb r3, r0, 0 | r3 = r0 - ;
0x00003840 str r3, [r4] | *(r4) = r3;
0x00003844 ldr r3, [pc, 0x988] | r3 = *(0x41d0);
0x00003848 add r1, pc, r1 | r1 = pc + r1;
0x0000384c ldr r2, [r8, r3] | r2 = *((r8 + r3));
0x00003850 ldr r3, [fp, -0x10c] | r3 = var_10ch;
0x00003854 mov r0, 2 | r0 = 2;
0x00003858 str r3, [sp] | *(sp) = r3;
0x0000385c mov r3, 0x240 | r3 = 0x240;
0x00003860 ldr r2, [r2] | r2 = *(r2);
0x00003864 bl 0x1bf4 | dl_dprintf ();
0x00003868 ldr r3, [pc, 0x954] | r3 = *(0x41c0);
0x0000386c mov r7, 6 | r7 = 6;
0x00003870 ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x00003874 ldr r0, [fp, -0xfc] | r0 = var_fch;
0x00003878 str r7, [r3] | *(r3) = r7;
0x0000387c svc 0 | __asm ("svc 0");
0x00003880 cmn r0, 0x1000 |
| if (r0 < 0x1000) {
0x00003884 bls 0x3724 | goto label_0;
| }
0x00003888 rsb r0, r0, 0 | r0 -= ;
0x0000388c str r0, [r4] | *(r4) = r0;
0x00003890 b 0x3728 | goto label_1;
| label_20:
0x00003894 add r4, r6, 0x110 | r4 = r6 + 0x110;
0x00003898 ldrd r4, r5, [r4, -8] | __asm ("ldrd r4, r5, [r4, -8]");
0x0000389c cmp r5, r1 |
0x000038a0 cmpeq r4, r0 | __asm ("cmpeq r4, r0");
| if (r5 != r1) {
0x000038a4 bne 0x38e4 | goto label_22;
| }
0x000038a8 ldr r4, [r6, 0x110] | r4 = *((r6 + 0x110));
0x000038ac cmp r4, r7 |
| if (r4 != r7) {
0x000038b0 bne 0x38e4 | goto label_22;
| }
0x000038b4 ldrh r3, [r6, 0x4c] | r3 = *((r6 + 0x4c));
0x000038b8 mov r0, r2 | r0 = r2;
0x000038bc add r3, r3, 1 | r3++;
0x000038c0 strh r3, [r6, 0x4c] | *((r6 + 0x4c)) = r3;
0x000038c4 ldrh r3, [r6, 0x4e] | r3 = *((r6 + 0x4e));
0x000038c8 mov r7, 6 | r7 = 6;
0x000038cc orr r3, r3, 0x10 | r3 |= 0x10;
0x000038d0 strh r3, [r6, 0x4e] | *((r6 + 0x4e)) = r3;
0x000038d4 svc 0 | __asm ("svc 0");
| label_13:
0x000038d8 cmn r0, 0x1000 |
| if (r0 < 0x1000) {
0x000038dc bls 0x3728 | goto label_1;
| }
0x000038e0 b 0x3994 | goto label_23;
| label_22:
0x000038e4 ldr r6, [r6, 0xc] | r6 = *((r6 + 0xc));
0x000038e8 b 0x37d8 | goto label_2;
| label_21:
0x000038ec ldr r3, [fp, -0xf8] | r3 = var_f8h;
0x000038f0 ldr r0, [fp, -0xfc] | r0 = var_fch;
0x000038f4 mov r1, sl | r1 = sl;
0x000038f8 ldr r2, [r3] | r2 = *(r3);
0x000038fc mov r7, 3 | r7 = 3;
0x00003900 svc 0 | __asm ("svc 0");
0x00003904 cmn r0, 0x1000 |
| if (r0 <= 0x1000) {
0x00003908 ldrhi r3, [pc, 0x8b0] | r3 = *((pc + 0x8b0));
| }
0x0000390c rsbhi r0, r0, 0 | __asm ("rsbhi r0, r0, 0");
| if (r0 <= 0x1000) {
0x00003910 ldrhi r3, [r8, r3] | r3 = *((r8 + r3));
| }
| if (r0 <= 0x1000) {
0x00003914 strhi r0, [r3] | *(r3) = r0;
| }
0x00003918 ldr r2, [sl] | r2 = *(sl);
0x0000391c ldr r3, [pc, 0x8b4] | r3 = *(0x41d4);
0x00003920 cmp r2, r3 |
| if (r2 == r3) {
0x00003924 beq 0x39a8 | goto label_24;
| }
0x00003928 ldr r3, [pc, 0x8a4] | r3 = *(0x41d0);
0x0000392c ldr r1, [pc, 0x8a8] | r1 = *(0x41d8);
0x00003930 ldr r2, [r8, r3] | r2 = *((r8 + r3));
0x00003934 add r1, pc, r1 | r1 = pc + r1;
0x00003938 ldr r3, [fp, -0x10c] | r3 = var_10ch;
0x0000393c ldr r2, [r2] | r2 = *(r2);
0x00003940 mov r0, 2 | r0 = 2;
0x00003944 bl 0x1bf4 | dl_dprintf ();
0x00003948 ldr r3, [pc, 0x874] | r3 = *(0x41c0);
0x0000394c mov r2, 3 | r2 = 3;
0x00003950 ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x00003954 str r2, [r3] | *(r3) = r2;
| label_3:
0x00003958 ldr r0, [fp, -0xfc] | r0 = var_fch;
0x0000395c mov r7, 6 | r7 = 6;
| label_4:
0x00003960 svc 0 | __asm ("svc 0");
0x00003964 cmn r0, 0x1000 |
| if (r0 <= 0x1000) {
0x00003968 ldrhi r3, [pc, 0x850] | r3 = *((pc + 0x850));
| }
0x0000396c rsbhi r0, r0, 0 | __asm ("rsbhi r0, r0, 0");
| if (r0 <= 0x1000) {
0x00003970 ldrhi r3, [r8, r3] | r3 = *((r8 + r3));
| }
| if (r0 <= 0x1000) {
0x00003974 strhi r0, [r3] | *(r3) = r0;
| }
0x00003978 ldr r3, [fp, -0xf8] | r3 = var_f8h;
0x0000397c mov r0, sl | r0 = sl;
0x00003980 ldr r1, [r3] | r1 = *(r3);
0x00003984 mov r7, 0x5b | r7 = 0x5b;
0x00003988 svc 0 | __asm ("svc 0");
| label_19:
0x0000398c cmn r0, 0x1000 |
| if (r0 < 0x1000) {
0x00003990 bls 0x3724 | goto label_0;
| }
| label_23:
0x00003994 ldr r3, [pc, 0x824] | r3 = *(0x41bc);
0x00003998 rsb r0, r0, 0 | r0 -= ;
0x0000399c ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x000039a0 str r0, [r3] | *(r3) = r0;
0x000039a4 b 0x3728 | goto label_1;
| label_24:
0x000039a8 ldr r2, [sl, 0x10] | r2 = *((sl + 0x10));
0x000039ac ldr r3, [pc, 0x82c] | r3 = *(0x41dc);
0x000039b0 cmp r2, r3 |
| if (r2 != r3) {
0x000039b4 beq 0x39f8 |
0x000039b8 ldrh r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x000039bc ldr r1, [pc, 0x820] | r1 = *(0x41e0);
0x000039c0 cmp r3, 3 |
0x000039c4 ldr r3, [pc, 0x7f8] | r3 = *(0x41c0);
| if (r3 != 3) {
0x000039c8 moveq r2, 4 | r2 = 4;
| }
0x000039cc ldr r3, [r8, r3] | r3 = *((r8 + r3));
| if (r3 == 3) {
0x000039d0 movne r2, 5 | r2 = 5;
| }
0x000039d4 str r2, [r3] | *(r3) = r2;
0x000039d8 ldr r3, [pc, 0x7f4] | r3 = *(0x41d0);
0x000039dc add r1, pc, r1 | r1 = pc + r1;
0x000039e0 ldr r2, [r8, r3] | r2 = *((r8 + r3));
0x000039e4 mov r0, 2 | r0 = 2;
0x000039e8 ldr r3, [fp, -0x10c] | r3 = var_10ch;
0x000039ec ldr r2, [r2] | r2 = *(r2);
0x000039f0 bl 0x1bf4 | dl_dprintf ();
0x000039f4 b 0x3958 | goto label_3;
| }
0x000039f8 mov r3, 1 | r3 = 1;
0x000039fc ldr r4, [sl, 0x1c] | r4 = *((sl + 0x1c));
0x00003a00 str r3, [fp, -0x100] | var_100h = r3;
0x00003a04 ldr r3, [pc, 0x7dc] | r3 = *(0x41e4);
0x00003a08 mov r7, 0 | r7 = 0;
0x00003a0c add r3, pc, r3 | r3 = pc + r3;
0x00003a10 add r4, sl, r4 | r4 = sl + r4;
0x00003a14 mov sb, r7 | sb = r7;
0x00003a18 mvn r5, 0 | r5 = ~0;
0x00003a1c str r7, [fp, -0x108] | var_108h = r7;
0x00003a20 str r7, [fp, -0x104] | var_104h = r7;
0x00003a24 str r3, [fp, -0x114] | var_114h = r3;
| do {
0x00003a28 ldrh r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x00003a2c cmp r3, r7 |
| if (r3 <= r7) {
0x00003a30 bgt 0x3ae0 |
0x00003a34 ldr r3, [fp, -0xf8] | r3 = var_f8h;
0x00003a38 ldr r1, [fp, -0x100] | r1 = var_100h;
0x00003a3c ldr r3, [r3] | r3 = *(r3);
0x00003a40 cmp r1, 0 |
0x00003a44 rsb r2, r3, 0 | r2 = r3 - ;
0x00003a48 sub r3, r3, 1 | r3--;
0x00003a4c add sb, r3, sb | sb = r3 + sb;
0x00003a50 and lr, r2, r5 | lr = r2 & r5;
0x00003a54 and sb, sb, r2 | sb &= r2;
0x00003a58 sub r3, sb, lr | r3 = sb - lr;
0x00003a5c mov r2, 0 | r2 = 0;
0x00003a60 str r3, [fp, -0x128] | var_128h = r3;
0x00003a64 mov r1, r3 | r1 = r3;
| if (r1 != 0) {
0x00003a68 moveq r0, lr | r0 = lr;
| }
| if (r1 == 0) {
0x00003a6c movne r0, 0 | r0 = 0;
| }
0x00003a70 mov r3, 0x22 | r3 = 0x22;
0x00003a74 mvn r4, 0 | r4 = ~0;
0x00003a78 mov r5, r2 | r5 = r2;
0x00003a7c mov r7, 0xc0 | r7 = 0xc0;
0x00003a80 svc 0 | __asm ("svc 0");
0x00003a84 cmn r0, 0x1000 |
0x00003a88 mov sb, r0 | sb = r0;
| if (r0 < 0x1000) {
0x00003a8c bls 0x3b90 | goto label_25;
| }
0x00003a90 ldr r3, [pc, 0x728] | r3 = *(0x41bc);
0x00003a94 rsb r2, r0, 0 | r2 = r0 - ;
0x00003a98 ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x00003a9c str r2, [r3] | *(r3) = r2;
| label_9:
0x00003aa0 ldr r3, [pc, 0x72c] | r3 = *(0x41d0);
0x00003aa4 ldr r1, [pc, 0x740] | r1 = *(0x41e8);
0x00003aa8 ldr r2, [r8, r3] | r2 = *((r8 + r3));
0x00003aac ldr r3, [fp, -0x10c] | r3 = var_10ch;
0x00003ab0 mov r0, 2 | r0 = 2;
0x00003ab4 str r3, [sp] | *(sp) = r3;
0x00003ab8 add r1, pc, r1 | r1 = pc + r1;
0x00003abc mov r3, 0x2a8 | r3 = 0x2a8;
0x00003ac0 ldr r2, [r2] | r2 = *(r2);
0x00003ac4 bl 0x1bf4 | dl_dprintf ();
0x00003ac8 ldr r3, [pc, 0x6f4] | r3 = *(0x41c0);
0x00003acc mov r7, 6 | r7 = 6;
0x00003ad0 ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x00003ad4 ldr r0, [fp, -0xfc] | r0 = var_fch;
0x00003ad8 str r7, [r3] | *(r3) = r7;
0x00003adc b 0x3960 | goto label_4;
| }
0x00003ae0 ldr r0, [r4] | r0 = *(r4);
0x00003ae4 cmp r0, 2 |
| if (r0 == 2) {
0x00003ae8 bne 0x3b18 |
0x00003aec ldr r3, [fp, -0x104] | r3 = var_104h;
0x00003af0 cmp r3, 0 |
| if (r3 != 0) {
0x00003af4 beq 0x3b10 |
0x00003af8 ldr r3, [pc, 0x6d4] | r3 = *(0x41d0);
0x00003afc ldr r1, [fp, -0x114] | r1 = var_114h;
0x00003b00 ldr r2, [r8, r3] | r2 = *((r8 + r3));
0x00003b04 ldr r3, [fp, -0x10c] | r3 = var_10ch;
0x00003b08 ldr r2, [r2] | r2 = *(r2);
0x00003b0c bl 0x1bf4 | dl_dprintf ();
| }
0x00003b10 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00003b14 str r3, [fp, -0x104] | var_104h = r3;
| }
0x00003b18 ldr r3, [r4] | r3 = *(r4);
0x00003b1c cmp r3, 1 |
| if (r3 != 1) {
0x00003b20 bne 0x3b74 | goto label_26;
| }
0x00003b24 cmn r5, 1 |
0x00003b28 ldr r3, [r4, 8] | r3 = *((r4 + 8));
| if (r5 == 1) {
0x00003b2c bne 0x3b44 |
0x00003b30 cmp r3, 0x1000000 |
| if (r3 <= 0x1000000) {
0x00003b34 movhi r2, 0 | r2 = 0;
| }
| if (r3 <= 0x1000000) {
0x00003b38 movhi r5, r3 | r5 = r3;
| }
| if (r3 <= 0x1000000) {
0x00003b3c strhi r2, [fp, -0x100] | var_100h = r2;
| }
| if (r3 > 0x1000000) {
0x00003b40 bhi 0x3b58 | goto label_27;
| }
| }
0x00003b44 ldr r2, [fp, -0x100] | r2 = var_100h;
0x00003b48 cmp r2, 0 |
| if (r2 != 0) {
0x00003b4c beq 0x3b58 |
0x00003b50 cmp r5, r3 |
| if (r5 >= r3) {
0x00003b54 movhs r5, r3 | r5 = r3;
| goto label_27;
| }
| }
| label_27:
0x00003b58 ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x00003b5c add r3, r3, r2 | r3 += r2;
0x00003b60 cmp sb, r3 |
| if (sb >= r3) {
0x00003b64 movlo sb, r3 | sb = r3;
| }
| label_5:
0x00003b68 add r4, r4, 0x20 | r4 += 0x20;
| label_6:
0x00003b6c add r7, r7, 1 | r7++;
0x00003b70 b 0x3a28 |
| } while (1);
| label_26:
0x00003b74 cmp r3, 7 |
| if (r3 != 7) {
0x00003b78 bne 0x3b68 | goto label_5;
| }
0x00003b7c ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00003b80 cmp r3, 0 |
| if (r3 == 0) {
0x00003b84 beq 0x3b6c | goto label_6;
| }
0x00003b88 str r4, [fp, -0x108] | var_108h = r4;
0x00003b8c b 0x3b68 | goto label_5;
| label_25:
0x00003b90 sub r3, r0, lr | r3 = r0 - lr;
0x00003b94 str r3, [fp, -0x114] | var_114h = r3;
0x00003b98 ldr r3, [pc, 0x650] | r3 = *(0x41ec);
0x00003b9c ldr r1, [fp, -0x114] | r1 = var_114h;
0x00003ba0 add r3, pc, r3 | r3 = pc + r3;
0x00003ba4 str r1, [r3, 0x18] | *((r3 + 0x18)) = r1;
0x00003ba8 ldr r3, [fp, -0x100] | r3 = var_100h;
0x00003bac ldr ip, [sl, 0x1c] | ip = *((sl + 0x1c));
0x00003bb0 cmp r3, 0 |
| if (r3 == 0) {
0x00003bb4 movne r3, r0 | r3 = r0;
| }
| if (r3 != 0) {
0x00003bb8 moveq r3, 0 | r3 = 0;
| }
0x00003bbc str r3, [fp, -0x134] | var_134h = r3;
0x00003bc0 ldr r3, [pc, 0x62c] | r3 = *(0x41f0);
0x00003bc4 add ip, ip, 0x20 |
0x00003bc8 add r3, pc, r3 | r3 = pc + r3;
0x00003bcc str r3, [fp, -0x138] | var_138h = r3;
0x00003bd0 ldr r3, [pc, 0x620] | r3 = *(0x41f4);
0x00003bd4 add ip, sl, ip |
0x00003bd8 add r3, pc, r3 | r3 = pc + r3;
0x00003bdc str r2, [fp, -0x11c] | var_11ch = r2;
0x00003be0 str r2, [fp, -0x124] | var_124h = r2;
0x00003be4 str r2, [fp, -0x120] | var_120h = r2;
0x00003be8 str r3, [fp, -0x13c] | var_13ch = r3;
| do {
0x00003bec ldrh r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x00003bf0 ldr r2, [fp, -0x120] | r2 = var_120h;
0x00003bf4 cmp r3, r2 |
| if (r3 <= r2) {
0x00003bf8 bgt 0x3c8c |
0x00003bfc ldr r3, [fp, -0x100] | r3 = var_100h;
0x00003c00 cmp r3, 0 |
| if (r3 == 0) {
0x00003c04 ldrne r3, [fp, -0x104] | r3 = var_104h;
| }
| if (r3 == 0) {
0x00003c08 ldrne r2, [fp, -0x114] | r2 = var_114h;
| }
| if (r3 == 0) {
0x00003c0c addne r3, r3, r2 | r3 += r2;
| }
| if (r3 == 0) {
0x00003c10 strne r3, [fp, -0x104] | var_104h = r3;
| }
0x00003c14 ldr r3, [fp, -0x104] | r3 = var_104h;
0x00003c18 cmp r3, 0 |
| if (r3 == 0) {
0x00003c1c movne r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x00003c20 subne r1, fp, 0xb0 | r1 = fp - 0xb0;
| }
| if (r3 == 0) {
0x00003c24 movne r2, r3 | r2 = r3;
| }
| if (r3 != 0) {
0x00003c28 bne 0x3f38 | goto label_28;
| }
0x00003c2c ldr r3, [pc, 0x590] | r3 = *(0x41c0);
0x00003c30 mov r2, 7 | r2 = 7;
0x00003c34 ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x00003c38 ldr r1, [pc, 0x5bc] | r1 = *(0x41f8);
0x00003c3c str r2, [r3] | *(r3) = r2;
0x00003c40 ldr r3, [pc, 0x58c] | r3 = *(0x41d0);
0x00003c44 add r1, pc, r1 | r1 = pc + r1;
0x00003c48 ldr r2, [r8, r3] | r2 = *((r8 + r3));
0x00003c4c mov r0, 2 | r0 = 2;
0x00003c50 ldr r3, [fp, -0x10c] | r3 = var_10ch;
0x00003c54 ldr r2, [r2] | r2 = *(r2);
0x00003c58 bl 0x1bf4 | dl_dprintf ();
0x00003c5c ldr r3, [fp, -0xf8] | r3 = var_f8h;
0x00003c60 mov r0, sl | r0 = sl;
0x00003c64 ldr r1, [r3] | r1 = *(0x41d0);
0x00003c68 mov r7, 0x5b | r7 = 0x5b;
0x00003c6c svc 0 | __asm ("svc 0");
0x00003c70 cmn r0, 0x1000 |
| if (r0 <= 0x1000) {
0x00003c74 ldrhi r3, [pc, 0x544] | r3 = *((pc + 0x544));
| }
0x00003c78 rsbhi r0, r0, 0 | __asm ("rsbhi r0, r0, 0");
| if (r0 <= 0x1000) {
0x00003c7c ldrhi r3, [r8, r3] | r3 = *((r8 + r3));
| }
| if (r0 <= 0x1000) {
0x00003c80 strhi r0, [r3] | *(r3) = r0;
| }
0x00003c84 ldr r0, [fp, -0xfc] | r0 = var_fch;
0x00003c88 b 0x37b4 | goto label_7;
| }
0x00003c8c ldr r3, [ip, -0x20] | r3 = *((ip - 0x20));
0x00003c90 ldr r2, [pc, 0x568] | r2 = *(0x41fc);
0x00003c94 cmp r3, r2 |
| if (r3 != r2) {
0x00003c98 bne 0x3cc0 | goto label_29;
| }
0x00003c9c ldr r3, [ip, -0x18] | r3 = *((ip - 0x18));
0x00003ca0 str r3, [fp, -0x124] | var_124h = r3;
0x00003ca4 ldr r3, [ip, -0xc] | r3 = *((ip - 0xc));
0x00003ca8 str r3, [fp, -0x11c] | var_11ch = r3;
| label_8:
0x00003cac ldr r3, [fp, -0x120] | r3 = var_120h;
0x00003cb0 add ip, ip, 0x20 |
0x00003cb4 add r3, r3, 1 | r3++;
0x00003cb8 str r3, [fp, -0x120] | var_120h = r3;
0x00003cbc b 0x3bec |
| } while (1);
| label_29:
0x00003cc0 cmp r3, 1 |
| if (r3 != 1) {
0x00003cc4 bne 0x3cac | goto label_8;
| }
0x00003cc8 ldr r2, [fp, -0xf8] | r2 = var_f8h;
0x00003ccc ldr r3, [ip, -8] | r3 = *((ip - 8));
0x00003cd0 ldr lr, [r2] |
0x00003cd4 ldr r1, [ip, -0x18] | r1 = *((ip - 0x18));
0x00003cd8 rsb r5, lr, 0 | r5 = lr - ;
0x00003cdc tst r3, 2 |
0x00003ce0 and r0, r5, r1 | r0 = r5 & r1;
0x00003ce4 sub lr, lr, 1 | lr--;
| if ((r3 & 2) == 0) {
0x00003ce8 beq 0x3e9c | goto label_30;
| }
0x00003cec ldr r2, [fp, -0x100] | r2 = var_100h;
0x00003cf0 orr r3, r3, 2 | r3 |= 2;
0x00003cf4 cmp r2, 0 |
| if (r2 != 0) {
0x00003cf8 ldreq r2, [fp, -0x13c] | r2 = var_13ch;
| }
| if (r2 == 0) {
0x00003cfc movne r2, sb | r2 = sb;
| }
| if (r2 != 0) {
0x00003d00 ldreq r2, [r2, 0x18] | r2 = *((r2 + 0x18));
| }
0x00003d04 and lr, lr, r1 | lr &= r1;
0x00003d08 add r2, r0, r2 | r2 = r0 + r2;
0x00003d0c str r2, [fp, -0x12c] | var_12ch = r2;
0x00003d10 ldr r2, [ip, -0x10] | r2 = *((ip - 0x10));
0x00003d14 add lr, lr, r2 | lr += r2;
0x00003d18 lsl r2, r3, 0x1d | r2 = r3 << 0x1d;
0x00003d1c lsl r3, r3, 2 | r3 <<= 2;
0x00003d20 and r3, r3, 4 | r3 &= 4;
0x00003d24 orr r3, r3, r2, lsr 31 | r3 |= (r2 >> 31);
0x00003d28 orr r3, r3, 2 | r3 |= 2;
0x00003d2c str r3, [fp, -0x130] | var_130h = r3;
0x00003d30 ldr r3, [ip, -0x1c] | r3 = *((ip - 0x1c));
0x00003d34 and r5, r5, r3 | r5 &= r3;
0x00003d38 ldr r3, [pc, 0x4c4] | r3 = *(0x4200);
0x00003d3c tst r5, r3 |
| if ((r5 & r3) != 0) {
0x00003d40 bne 0x3d84 | goto label_10;
| }
0x00003d44 ldr r7, [pc, 0x4bc] | r7 = *(0x4204);
0x00003d48 ldr r0, [fp, -0x12c] | r0 = var_12ch;
0x00003d4c and r5, r7, r5, lsr 12 | r5 = r7 & (r5 >> 12);
0x00003d50 mov r1, lr | r1 = lr;
0x00003d54 ldr r2, [fp, -0x130] | r2 = var_130h;
0x00003d58 mov r3, 0x12 | r3 = 0x12;
0x00003d5c ldr r4, [fp, -0xfc] | r4 = var_fch;
0x00003d60 mov r7, 0xc0 | r7 = 0xc0;
0x00003d64 svc 0 | __asm ("svc 0");
0x00003d68 cmn r0, 0x1000 |
0x00003d6c str r0, [fp, -0x118] | var_118h = r0;
| if (r0 < 0x1000) {
0x00003d70 bls 0x3dac | goto label_31;
| }
0x00003d74 ldr r3, [pc, 0x444] | r3 = *(0x41bc);
0x00003d78 rsb sb, r0, 0 | sb = r0 - ;
0x00003d7c ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x00003d80 str sb, [r3] | *(r3) = sb;
| do {
| label_10:
0x00003d84 ldr r0, [fp, -0x114] | r0 = var_114h;
0x00003d88 ldr r1, [fp, -0x128] | r1 = var_128h;
0x00003d8c mov r7, 0x5b | r7 = 0x5b;
0x00003d90 svc 0 | __asm ("svc 0");
0x00003d94 cmn r0, 0x1000 |
| if (r0 <= 0x1000) {
0x00003d98 ldrhi r3, [pc, 0x420] | r3 = *((pc + 0x420));
| }
0x00003d9c rsbhi r0, r0, 0 | __asm ("rsbhi r0, r0, 0");
| if (r0 <= 0x1000) {
0x00003da0 ldrhi r3, [r8, r3] | r3 = *((r8 + r3));
| }
| if (r0 <= 0x1000) {
0x00003da4 strhi r0, [r3] | *(r3) = r0;
| }
0x00003da8 b 0x3aa0 | goto label_9;
| label_31:
0x00003dac ldr r3, [fp, -0x12c] | r3 = var_12ch;
0x00003db0 ldr r2, [fp, -0x118] | r2 = var_118h;
0x00003db4 cmp r3, 0 |
0x00003db8 cmpne r3, r2 | __asm ("cmpne r3, r2");
0x00003dbc bne 0x3d84 |
| } while (r3 != 0);
0x00003dc0 ldr r3, [fp, -0xf8] | r3 = var_f8h;
0x00003dc4 ldr r5, [ip, -0x10] | r5 = *((ip - 0x10));
0x00003dc8 ldr r4, [r3] | r4 = *(r3);
0x00003dcc ldr r0, [ip, -0x18] | r0 = *((ip - 0x18));
0x00003dd0 add lr, r2, lr | lr = r2 + lr;
0x00003dd4 add r0, r5, r0 | r0 = r5 + r0;
0x00003dd8 sub r2, r4, 1 | r2 = r4 - 1;
0x00003ddc ldr r3, [ip, -0xc] | r3 = *((ip - 0xc));
0x00003de0 add r2, r2, r0 | r2 += r0;
0x00003de4 rsb r4, r4, 0 | r4 -= ;
0x00003de8 and r2, r2, r4 | r2 &= r4;
0x00003dec sub r3, r3, r5 | r3 -= r5;
0x00003df0 sub r0, r2, r0 | r0 = r2 - r0;
0x00003df4 cmp r3, r0 |
| if (r3 > r0) {
0x00003df8 addls r3, lr, r3 | r3 = lr + r3;
| }
| if (r3 <= r0) {
0x00003dfc addhi r3, lr, r0 | r3 = lr + r0;
| }
| label_11:
0x00003e00 cmp r3, lr |
| if (r3 != lr) {
0x00003e04 bne 0x3e2c | goto label_32;
| }
0x00003e08 ldr r1, [ip, -0x18] | r1 = *((ip - 0x18));
0x00003e0c ldr r3, [ip, -0xc] | r3 = *((ip - 0xc));
0x00003e10 add r1, r1, r3 | r1 += r3;
0x00003e14 cmp r2, r1 |
| if (r2 <= r1) {
0x00003e18 blo 0x3e38 | goto label_33;
| }
| label_12:
0x00003e1c ldr r3, [fp, -0x118] | r3 = var_118h;
0x00003e20 cmp r3, 0 |
| if (r3 != 0) {
0x00003e24 bne 0x3cac | goto label_8;
| }
0x00003e28 b 0x3d84 | goto label_10;
| label_32:
0x00003e2c mov r1, 0 | r1 = 0;
0x00003e30 strb r1, [lr], 1 | *(lr) = r1;
| lr++;
0x00003e34 b 0x3e00 | goto label_11;
| label_33:
0x00003e38 ldr r3, [fp, -0x134] | r3 = var_134h;
0x00003e3c sub r1, r1, r2 | r1 -= r2;
0x00003e40 add lr, r3, r2 | lr = r3 + r2;
0x00003e44 mov r0, lr | r0 = lr;
0x00003e48 ldr r2, [fp, -0x130] | r2 = var_130h;
0x00003e4c mov r3, 0x32 | r3 = 0x32;
0x00003e50 mvn r4, 0 | r4 = ~0;
0x00003e54 mov r5, 0 | r5 = 0;
0x00003e58 mov r7, 0xc0 | r7 = 0xc0;
0x00003e5c svc 0 | __asm ("svc 0");
0x00003e60 cmn r0, 0x1000 |
| if (r0 <= 0x1000) {
0x00003e64 ldrhi r3, [pc, 0x354] | r3 = *((pc + 0x354));
| }
0x00003e68 rsbhi r0, r0, 0 | __asm ("rsbhi r0, r0, 0");
| if (r0 <= 0x1000) {
0x00003e6c ldrhi r3, [r8, r3] | r3 = *((r8 + r3));
| }
| if (r0 <= 0x1000) {
0x00003e70 strhi r0, [r3] | *(r3) = r0;
| }
| if (r0 <= 0x1000) {
0x00003e74 movhi r0, r4 | r0 = r4;
| }
0x00003e78 cmn r0, 1 |
| if (r0 == 1) {
0x00003e7c movne r3, 0 | r3 = 0;
| }
| if (r0 != 1) {
0x00003e80 moveq r3, 1 | r3 = 1;
| }
0x00003e84 cmp lr, r0 |
| if (lr != r0) {
0x00003e88 moveq r0, r3 | r0 = r3;
| }
| if (lr == r0) {
0x00003e8c orrne r0, r3, 1 | r0 = r3 | 1;
| }
0x00003e90 cmp r0, 0 |
| if (r0 == 0) {
0x00003e94 beq 0x3e1c | goto label_12;
| }
0x00003e98 b 0x3d84 | goto label_10;
| label_30:
0x00003e9c ldr r2, [fp, -0x100] | r2 = var_100h;
0x00003ea0 and lr, lr, r1 | lr &= r1;
0x00003ea4 cmp r2, 0 |
| if (r2 != 0) {
0x00003ea8 ldreq r2, [fp, -0x138] | r2 = var_138h;
| }
| if (r2 == 0) {
0x00003eac movne r2, sb | r2 = sb;
| }
| if (r2 != 0) {
0x00003eb0 ldreq r2, [r2, 0x18] | r2 = *((r2 + 0x18));
| }
0x00003eb4 ldr r1, [ip, -0x10] | r1 = *((ip - 0x10));
0x00003eb8 add r2, r2, r0 | r2 += r0;
0x00003ebc str r2, [fp, -0x118] | var_118h = r2;
0x00003ec0 lsl r2, r3, 2 | r2 = r3 << 2;
0x00003ec4 lsl r0, r3, 0x1d | r0 = r3 << 0x1d;
0x00003ec8 and r2, r2, 4 | r2 &= 4;
0x00003ecc and r3, r3, 2 | r3 &= 2;
0x00003ed0 orr r2, r2, r0, lsr 31 | r2 |= (r0 >> 31);
0x00003ed4 orr r2, r2, r3 | r2 |= r3;
0x00003ed8 ldr r3, [ip, -0x1c] | r3 = *((ip - 0x1c));
0x00003edc add r1, lr, r1 | r1 = lr + r1;
0x00003ee0 and r5, r5, r3 | r5 &= r3;
0x00003ee4 ldr r3, [pc, 0x318] | r3 = *(0x4200);
0x00003ee8 tst r5, r3 |
| if ((r5 & r3) != 0) {
0x00003eec bne 0x3d84 | goto label_10;
| }
0x00003ef0 ldr lr, [pc, 0x310] |
0x00003ef4 ldr r0, [fp, -0x118] | r0 = var_118h;
0x00003ef8 mov r3, 0x12 | r3 = 0x12;
0x00003efc ldr r4, [fp, -0xfc] | r4 = var_fch;
0x00003f00 and r5, lr, r5, lsr 12 | r5 = lr & (r5 >> 12);
0x00003f04 mov r7, 0xc0 | r7 = 0xc0;
0x00003f08 svc 0 | __asm ("svc 0");
0x00003f0c cmn r0, 0x1000 |
| if (r0 <= 0x1000) {
0x00003f10 ldrhi r3, [pc, 0x2a8] | r3 = *((pc + 0x2a8));
| }
0x00003f14 rsbhi r0, r0, 0 | __asm ("rsbhi r0, r0, 0");
| if (r0 <= 0x1000) {
0x00003f18 ldrhi r3, [r8, r3] | r3 = *((r8 + r3));
| }
| if (r0 > 0x1000) {
0x00003f1c strhi r0, [r3] | *(r3) = r0;
| goto label_34;
| }
| if (r0 > 0x1000) {
| label_34:
0x00003f20 bhi 0x3d84 | goto label_10;
| }
0x00003f24 ldr r3, [fp, -0x118] | r3 = var_118h;
0x00003f28 cmp r3, 0 |
0x00003f2c cmpne r3, r0 | __asm ("cmpne r3, r0");
| if (r3 == 0) {
0x00003f30 beq 0x3cac | goto label_8;
| }
0x00003f34 b 0x3d84 | goto label_10;
| do {
| label_28:
0x00003f38 strb r2, [r3, r1] | *((r3 + r1)) = r2;
0x00003f3c add r3, r3, 1 | r3++;
0x00003f40 cmp r3, 0x8c |
0x00003f44 bne 0x3f38 |
| } while (r3 != 0x8c);
0x00003f48 ldr r3, [fp, -0x114] | r3 = var_114h;
0x00003f4c mov r2, 0 | r2 = 0;
0x00003f50 ldr r0, [fp, -0x104] | r0 = var_104h;
0x00003f54 bl 0x3584 | dl_parse_dynamic_info ();
0x00003f58 ldr r3, [fp, -0x58] | r3 = var_58h;
0x00003f5c cmp r3, 0 |
0x00003f60 mov r4, r0 | r4 = r0;
0x00003f64 bne 0x4118 |
| while (r2 <= r3) {
0x00003f68 ldr r0, [fp, -0xfc] | r0 = var_fch;
0x00003f6c mov r7, 6 | r7 = 6;
0x00003f70 svc 0 | __asm ("svc 0");
0x00003f74 cmn r0, 0x1000 |
| if (r0 <= 0x1000) {
0x00003f78 ldrhi r3, [pc, 0x240] | r3 = *((pc + 0x240));
| }
0x00003f7c rsbhi r0, r0, 0 | __asm ("rsbhi r0, r0, 0");
| if (r0 <= 0x1000) {
0x00003f80 ldrhi r3, [r8, r3] | r3 = *((r8 + r3));
| }
| if (r0 <= 0x1000) {
0x00003f84 strhi r0, [r3] | *(r3) = r0;
| }
0x00003f88 mov r5, 0 | r5 = 0;
0x00003f8c ldr r3, [fp, -0x104] | r3 = var_104h;
0x00003f90 sub r2, fp, 0xb0 | r2 -= var_b0h;
0x00003f94 str r5, [sp] | *(sp) = r5;
0x00003f98 ldr r1, [fp, -0x114] | r1 = var_114h;
0x00003f9c ldr r0, [fp, -0x10c] | r0 = var_10ch;
0x00003fa0 bl 0x3364 | dl_add_elf_hash_table ();
0x00003fa4 ldr r3, [fp, -0x124] | r3 = var_124h;
0x00003fa8 ldr r2, [fp, -0xf0] | r2 = var_f0h;
0x00003fac str r3, [r0, 0x100] | *((r0 + 0x100)) = r3;
0x00003fb0 ldr r3, [fp, -0x11c] | r3 = var_11ch;
0x00003fb4 mov r6, r0 | r6 = r0;
0x00003fb8 str r3, [r0, 0x104] | *((r0 + 0x104)) = r3;
0x00003fbc ldr r3, [fp, -0xec] | r3 = var_ech;
0x00003fc0 str sb, [r0, 0x38] | *((r0 + 0x38)) = sb;
0x00003fc4 str r3, [r0, 0x110] | *((r0 + 0x110)) = r3;
0x00003fc8 ldr r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x00003fcc str r2, [r0, 0x108] | *((r0 + 0x108)) = r2;
0x00003fd0 add r3, r3, sb | r3 += sb;
0x00003fd4 str r3, [r0, 0xfc] | *((r0 + 0xfc)) = r3;
0x00003fd8 ldrh r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x00003fdc str r5, [r0, 0x10c] | *((r0 + 0x10c)) = r5;
0x00003fe0 str r3, [r0, 0xf8] | *((r0 + 0xf8)) = r3;
0x00003fe4 ldr r3, [fp, -0x140] | r3 = var_140h;
0x00003fe8 orr r3, r3, r4 | r3 |= r4;
0x00003fec str r3, [r0, 0x50] | *((r0 + 0x50)) = r3;
0x00003ff0 ldr r3, [fp, -0x108] | r3 = var_108h;
0x00003ff4 cmp r3, r5 |
| if (r3 != r5) {
0x00003ff8 beq 0x405c |
0x00003ffc ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00004000 ldr r2, [fp, -0x108] | r2 = var_108h;
0x00004004 str r3, [r0, 0x1c] | *((r0 + 0x1c)) = r3;
0x00004008 ldr r3, [fp, -0x108] | r3 = var_108h;
0x0000400c ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x00004010 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00004014 cmp r3, r5 |
0x00004018 str r3, [r0, 0x20] | *((r0 + 0x20)) = r3;
| if (r3 == r5) {
0x0000401c subne r3, r3, 1 | r3--;
| }
| if (r3 == r5) {
0x00004020 andne r3, r3, r2 | r3 &= r2;
| }
0x00004024 str r3, [r0, 0x24] | *((r0 + 0x24)) = r3;
0x00004028 ldr r3, [fp, -0x108] | r3 = var_108h;
0x0000402c ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00004030 str r2, [r0, 0x14] | *((r0 + 0x14)) = r2;
0x00004034 str r3, [r0, 0x18] | *((r0 + 0x18)) = r3;
0x00004038 bl 0x136c | dl_next_tls_modid ();
0x0000403c ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x00004040 cmp r3, 0 |
| if (r3 == 0) {
0x00004044 ldrne r2, [fp, -0x108] | r2 = var_108h;
| }
| if (r3 == 0) {
0x00004048 ldrne r3, [r6] | r3 = *(r6);
| }
| if (r3 == 0) {
0x0000404c ldrne r2, [r2, 8] | r2 = *((r2 + 8));
| }
0x00004050 str r0, [r6, 0x2c] | *((r6 + 0x2c)) = r0;
| if (r3 == 0) {
0x00004054 addne r3, r3, r2 | r3 += r2;
| }
| if (r3 != 0) {
0x00004058 strne r3, [r6, 0x14] | *((r6 + 0x14)) = r3;
| goto label_35;
| }
| }
| label_35:
0x0000405c ldr r3, [fp, -0x110] | r3 = var_110h;
0x00004060 ldr r4, [r3] | r4 = *(r3);
0x00004064 cmp r4, 0 |
| if (r4 != 0) {
0x00004068 beq 0x40b8 |
0x0000406c mov r0, 0x18 | r0 = 0x18;
0x00004070 bl 0x243c | dl_malloc ();
0x00004074 ldr r3, [fp, -0x110] | r3 = var_110h;
0x00004078 mov r1, 0 | r1 = 0;
0x0000407c str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x00004080 ldr r3, [r3] | r3 = *(r3);
0x00004084 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00004088 add r2, r3, 0x18 | r2 = r3 + 0x18;
| label_15:
0x0000408c cmp r3, r2 |
| if (r3 != r2) {
0x00004090 bne 0x41b4 | goto label_36;
| }
0x00004094 ldr r3, [fp, -0x110] | r3 = var_110h;
0x00004098 ldr r3, [r3] | r3 = *(r3);
0x0000409c ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x000040a0 str r3, [r2, 0x14] | *((r2 + 0x14)) = r3;
0x000040a4 ldr r3, [fp, -0x110] | r3 = var_110h;
0x000040a8 ldr r2, [fp, -0x110] | r2 = var_110h;
0x000040ac ldr r3, [r3] | r3 = *(r3);
0x000040b0 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000040b4 str r3, [r2] | *(r2) = r3;
| }
0x000040b8 ldr r3, [fp, -0x110] | r3 = var_110h;
0x000040bc ldr r3, [r3] | r3 = *(r3);
0x000040c0 str r6, [r3] | *(r3) = r6;
0x000040c4 ldrh r3, [r6, 0x4c] | r3 = *((r6 + 0x4c));
0x000040c8 add r2, r3, 1 | r2 = r3 + 1;
0x000040cc strh r2, [r6, 0x4c] | *((r6 + 0x4c)) = r2;
0x000040d0 ldr r2, [r6, 0x50] | r2 = *((r6 + 0x50));
0x000040d4 tst r2, 0x1000 |
| if ((r2 & 0x1000) == 0) {
0x000040d8 addne r3, r3, 2 | r3 += 2;
| }
0x000040dc strhne r3, [r6, 0x4c] | __asm ("strhne r3, [r6, 0x4c]");
0x000040e0 mov r3, 0 | r3 = 0;
0x000040e4 str r3, [r6, 0x3c] | *((r6 + 0x3c)) = r3;
0x000040e8 ldr r3, [fp, -0xa4] | r3 = var_a4h;
0x000040ec cmp r3, 0 |
| if (r3 == 0) {
0x000040f0 ldrne r2, [pc, 0x114] | r2 = *((pc + 0x114));
| }
| if (r3 == 0) {
0x000040f4 ldrne r2, [r8, r2] | r2 = *((r8 + r2));
| }
| if (r3 == 0) {
0x000040f8 strne r6, [r3, 4] | *((r3 + 4)) = r6;
| }
| if (r3 == 0) {
0x000040fc strne r2, [r3, 8] | *((r3 + 8)) = r2;
| }
0x00004100 ldr r3, [fp, -0xf8] | r3 = var_f8h;
0x00004104 mov r0, sl | r0 = sl;
0x00004108 ldr r1, [r3] | r1 = *(r3);
0x0000410c mov r7, 0x5b | r7 = 0x5b;
0x00004110 svc 0 | __asm ("svc 0");
0x00004114 b 0x38d8 | goto label_13;
0x00004118 ldr ip, [sl, 0x1c] | ip = *((sl + 0x1c));
0x0000411c ldr lr, [pc, 0xec] |
0x00004120 add ip, sl, ip |
0x00004124 mov r3, 0 | r3 = 0;
0x00004128 add lr, pc, lr | lr = pc + lr;
| label_14:
0x0000412c ldrh r2, [sl, 0x2c] | r2 = *((sl + 0x2c));
0x00004130 cmp r2, r3 |
0x00004134 ble 0x3f68 |
| }
0x00004138 ldr r2, [ip, r3, lsl 5] | offset_0 = r3 << 5;
| r2 = *((ip + offset_0));
0x0000413c cmp r2, 1 |
| if (r2 == 1) {
0x00004140 bne 0x41ac |
0x00004144 add r5, ip, r3, lsl 5 | r5 = ip + (r3 << 5);
0x00004148 ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x0000414c tst r2, 2 |
| if ((r2 & 2) != 0) {
0x00004150 bne 0x41ac | goto label_37;
| }
0x00004154 ldr r2, [fp, -0x100] | r2 = var_100h;
0x00004158 ldr r6, [r5, 8] | r6 = *((r5 + 8));
0x0000415c cmp r2, 0 |
0x00004160 ldr r2, [fp, -0xf8] | r2 = var_f8h;
| if (r2 != 0) {
0x00004164 ldreq r0, [lr, 0x18] | r0 = *((lr + 0x18));
| }
0x00004168 ldr r2, [r2] | r2 = *(r2);
0x0000416c ldr r5, [r5, 0x10] | r5 = *((r5 + 0x10));
0x00004170 sub r1, r2, 1 | r1 = r2 - 1;
0x00004174 rsb r2, r2, 0 | r2 -= ;
0x00004178 and r2, r2, r6 | r2 &= r6;
| if (r2 == 0) {
0x0000417c movne r0, sb | r0 = sb;
| }
0x00004180 and r1, r1, r6 | r1 &= r6;
0x00004184 add r0, r2, r0 | r0 = r2 + r0;
0x00004188 add r1, r1, r5 | r1 += r5;
0x0000418c mov r2, 7 | r2 = 7;
0x00004190 mov r7, 0x7d | r7 = 0x7d;
0x00004194 svc 0 | __asm ("svc 0");
0x00004198 cmn r0, 0x1000 |
| if (r0 <= 0x1000) {
0x0000419c ldrhi r2, [pc, 0x1c] | r2 = *((pc + 0x1c));
| }
0x000041a0 rsbhi r0, r0, 0 | __asm ("rsbhi r0, r0, 0");
| if (r0 <= 0x1000) {
0x000041a4 ldrhi r2, [r8, r2] | r2 = *((r8 + r2));
| }
| if (r0 > 0x1000) {
0x000041a8 strhi r0, [r2] | *(r2) = r0;
| goto label_37;
| }
| }
| label_37:
0x000041ac add r3, r3, 1 | r3++;
0x000041b0 b 0x412c | goto label_14;
| label_36:
0x000041b4 strb r1, [r3], 1 | *(r3) = r1;
| r3++;
0x000041b8 b 0x408c | goto label_15;
| }
; 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/lib/ld-uClibc-1.0.31.so @ 0x3584 */
| #include <stdint.h>
|
; (fcn) sym._dl_parse_dynamic_info () | void dl_parse_dynamic_info (int32_t arg1, int32_t arg2) {
| int32_t var_10h;
| r0 = arg1;
| r1 = arg2;
0x00003584 push {r4, r5, r6, fp, lr} |
0x00003588 add lr, r0, 8 | lr = r0 + 8;
0x0000358c mov r0, 0 | r0 = 0;
0x00003590 add fp, sp, 0x10 |
0x00003594 mov r4, 1 | r4 = 1;
0x00003598 mov r5, r0 | r5 = r0;
| label_0:
0x0000359c ldr ip, [lr, -8] | ip = *((lr - 8));
0x000035a0 cmp ip, 0 |
| if (ip == 0) {
0x000035a4 bne 0x3614 |
0x000035a8 cmp r3, 0 |
0x000035ac popeq {r4, r5, r6, fp, pc} |
0x000035b0 ldr r2, [r1, 0x10] | r2 = *((r1 + 0x10));
0x000035b4 cmp r2, 0 |
| if (r2 == 0) {
0x000035b8 addne r2, r3, r2 | r2 = r3 + r2;
| }
| if (r2 == 0) {
0x000035bc strne r2, [r1, 0x10] | *((r1 + 0x10)) = r2;
| }
0x000035c0 ldr r2, [r1, 0xc] | r2 = *((r1 + 0xc));
0x000035c4 cmp r2, 0 |
| if (r2 == 0) {
0x000035c8 addne r2, r3, r2 | r2 = r3 + r2;
| }
| if (r2 == 0) {
0x000035cc strne r2, [r1, 0xc] | *((r1 + 0xc)) = r2;
| }
0x000035d0 ldr r2, [r1, 0x14] | r2 = *((r1 + 0x14));
0x000035d4 cmp r2, 0 |
| if (r2 == 0) {
0x000035d8 addne r2, r3, r2 | r2 = r3 + r2;
| }
| if (r2 == 0) {
0x000035dc strne r2, [r1, 0x14] | *((r1 + 0x14)) = r2;
| }
0x000035e0 ldr r2, [r1, 0x18] | r2 = *((r1 + 0x18));
0x000035e4 cmp r2, 0 |
| if (r2 == 0) {
0x000035e8 addne r2, r3, r2 | r2 = r3 + r2;
| }
| if (r2 == 0) {
0x000035ec strne r2, [r1, 0x18] | *((r1 + 0x18)) = r2;
| }
0x000035f0 ldr r2, [r1, 0x44] | r2 = *((r1 + 0x44));
0x000035f4 cmp r2, 0 |
| if (r2 == 0) {
0x000035f8 addne r2, r3, r2 | r2 = r3 + r2;
| }
| if (r2 == 0) {
0x000035fc strne r2, [r1, 0x44] | *((r1 + 0x44)) = r2;
| }
0x00003600 ldr r2, [r1, 0x5c] | r2 = *((r1 + 0x5c));
0x00003604 cmp r2, 0 |
| if (r2 == 0) {
0x00003608 addne r3, r3, r2 | r3 += r2;
| }
| if (r2 == 0) {
0x0000360c strne r3, [r1, 0x5c] | *((r1 + 0x5c)) = r3;
| }
0x00003610 pop {r4, r5, r6, fp, pc} |
| }
0x00003614 cmp ip, 0x21 |
| if (ip > 0x21) {
0x00003618 bgt 0x3674 | goto label_3;
| }
0x0000361c ldr r6, [lr, -4] | r6 = *((lr - 4));
0x00003620 cmp ip, 0x15 |
0x00003624 str r6, [r1, ip, lsl 2] | offset_0 = ip << 2;
| *((r1 + offset_0)) = r6;
| if (ip != 0x15) {
0x00003628 streq r2, [lr, -4] | *((lr - 4)) = r2;
| }
| if (ip == 0x15) {
0x0000362c beq 0x3650 | goto label_1;
| }
0x00003630 cmp ip, 0x18 |
0x00003634 bne 0x3640 |
| while ((r6 & 8) != 0) {
0x00003638 str r4, [r1, 0x60] | *((r1 + 0x60)) = r4;
0x0000363c b 0x3650 | goto label_1;
0x00003640 cmp ip, 0x1e |
| if (ip != 0x1e) {
0x00003644 bne 0x3658 | goto label_4;
| }
0x00003648 tst r6, 8 |
0x0000364c bne 0x3638 |
| }
| do {
| label_1:
0x00003650 add lr, lr, 8 | lr += 8;
0x00003654 b 0x359c | goto label_0;
| label_4:
0x00003658 cmp ip, 0x16 |
| if (ip != 0x16) {
0x0000365c streq r4, [r1, 0x58] | *((r1 + 0x58)) = r4;
| }
0x00003660 beq 0x3650 |
| } while (ip == 0x16);
0x00003664 cmp ip, 0x1d |
| if (ip != 0x1d) {
0x00003668 bne 0x36ac | goto label_5;
| }
| label_2:
0x0000366c str r5, [r1, 0x3c] | *((r1 + 0x3c)) = r5;
0x00003670 b 0x3650 | goto label_1;
| label_3:
0x00003674 cmn ip, 0x90000001 |
| if (ip > 0x90000001) {
0x00003678 bgt 0x3650 | goto label_1;
| }
0x0000367c cmn ip, 0x90000006 |
| if (ip != 0x90000006) {
0x00003680 ldreq ip, [lr, -4] | ip = *((lr - 4));
| }
| if (ip == 0x90000006) {
0x00003684 streq ip, [r1, 0x88] | *((r1 + 0x88)) = ip;
| goto label_6;
| }
| if (ip == 0x90000006) {
| label_6:
0x00003688 beq 0x3650 | goto label_1;
| }
0x0000368c cmn ip, 0x90000005 |
| if (ip != 0x90000005) {
0x00003690 bne 0x3650 | goto label_1;
| }
0x00003694 ldr ip, [lr, -4] | ip = *((lr - 4));
0x00003698 tst ip, 1 |
| if ((ip & 1) == 0) {
0x0000369c strne r4, [r1, 0x60] | *((r1 + 0x60)) = r4;
| }
0x000036a0 tst ip, 8 |
| if ((ip & 8) == 0) {
0x000036a4 movne r0, 0x1000 | r0 = 0x1000;
| }
0x000036a8 b 0x3650 | goto label_1;
| label_5:
0x000036ac cmp ip, 0xf |
| if (ip != 0xf) {
0x000036b0 bne 0x3650 | goto label_1;
| }
0x000036b4 ldr ip, [r1, 0x74] | ip = *((r1 + 0x74));
0x000036b8 cmp ip, 0 |
| if (ip == 0) {
0x000036bc beq 0x3650 | goto label_1;
| }
0x000036c0 b 0x366c | goto label_2;
| }
[*] Function sprintf used 1 times ld-uClibc-1.0.31.so