[*] Binary protection state of ld-uClibc-1.0.31.so
Full RELRO No Canary found NX disabled DSO No RPATH No RUNPATH Symbols
[*] Function printf 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 @ 0x2148 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00002148 () | void fcn_00002148 (int32_t arg_4h, int32_t arg1, int32_t arg2) {
| int32_t var_3ch;
| int32_t var_38h;
| int32_t var_34h;
| int32_t var_30h;
| int32_t var_2ch;
| int32_t var_28h;
| int32_t var_0h;
| int32_t var_20h_2;
| int32_t var_20h;
| r0 = arg1;
| r1 = arg2;
0x00002148 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000214c ldr r8, [pc, 0x120] | r8 = *(0x2270);
0x00002150 mov r4, r2 | r4 = r2;
0x00002154 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00002158 add fp, sp, 0x20 |
0x0000215c add r3, r3, r4 | r3 += r4;
0x00002160 sub sp, sp, 0x24 |
0x00002164 str r3, [fp, -0x2c] | var_2ch = r3;
0x00002168 ldr r3, [pc, 0x108] | r3 = *(0x2274);
0x0000216c ldr r2, [r0, 0x84] | r2 = *(arg_4hx84);
0x00002170 add r3, pc, r3 | r3 = pc + r3;
0x00002174 str r3, [fp, -0x34] | var_34h = r3;
0x00002178 ldr r3, [pc, 0xfc] | r3 = *(0x2278);
0x0000217c ldr sl, [r0, 0x80] | sl = *(arg_4hx80);
0x00002180 add r3, pc, r3 | r3 = pc + r3;
0x00002184 str r3, [fp, -0x38] | var_38h = r3;
0x00002188 ldr r3, [pc, 0xf0] | r3 = *(0x227c);
0x0000218c mov r7, r0 | r7 = r0;
0x00002190 add r3, pc, r3 | r3 = pc + r3;
0x00002194 mov r6, 0 | r6 = 0;
0x00002198 add r8, pc, r8 | r8 = pc + r8;
0x0000219c str r1, [fp, -0x30] | var_30h = r1;
0x000021a0 str r2, [fp, -0x28] | var_28h = r2;
0x000021a4 str r3, [fp, -0x3c] | var_3ch = r3;
| do {
0x000021a8 ldr r3, [fp, -0x2c] | r3 = var_2ch;
0x000021ac cmp r3, r4 |
| if (r3 == r4) {
0x000021b0 bne 0x21c0 |
0x000021b4 mov r0, r6 | r0 = r6;
0x000021b8 sub sp, fp, 0x20 |
0x000021bc pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x000021c0 ldr r5, [r4, 4] | r5 = *((r4 + 4));
0x000021c4 ldr r3, [fp, -0x28] | r3 = var_28h;
0x000021c8 str sl, [sp] | *(sp) = sl;
0x000021cc mov r2, r4 | r2 = r4;
0x000021d0 ldr r1, [fp, -0x30] | r1 = var_30h;
0x000021d4 mov r0, r7 | r0 = r7;
0x000021d8 ldr ip, [fp, 4] | ip = *(arg_4h);
0x000021dc blx ip | r0 = ip (r0, "_", r2, "_");
0x000021e0 subs sb, r0, 0 | sb = r0 - 0;
| if (sb != r0) {
0x000021e4 beq 0x226c |
0x000021e8 ldr r3, [pc, 0x94] | r3 = *(0x2280);
0x000021ec lsr r5, r5, 8 | r5 >>= 8;
0x000021f0 ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x000021f4 ldr r1, [fp, -0x34] | r1 = var_34h;
0x000021f8 ldr r2, [r3] | r2 = *(0x2280);
0x000021fc mov r0, 2 | r0 = 2;
0x00002200 bl 0x1bf4 | dl_dprintf ()
0x00002204 cmp r5, 0 |
| if (r5 != 0) {
0x00002208 beq 0x2224 |
0x0000220c ldr r3, [fp, -0x28] | r3 = var_28h;
0x00002210 ldr r1, [fp, -0x3c] | r1 = var_3ch;
0x00002214 ldr r2, [r3, r5, lsl 4] | offset_0 = r5 << 4;
| r2 = *((r3 + offset_0));
0x00002218 mov r0, 2 | r0 = 2;
0x0000221c add r2, sl, r2 | r2 = sl + r2;
0x00002220 bl 0x1bf4 | dl_dprintf ()
| }
0x00002224 cmp sb, 0 |
| if (sb < 0) {
0x00002228 bge 0x225c |
0x0000222c ldr r1, [pc, 0x54] | r1 = *(0x2284);
0x00002230 ldrb r2, [r4, 4] | r2 = *((r4 + 4));
0x00002234 add r1, pc, r1 | r1 = pc + r1;
0x00002238 mov r0, 2 | r0 = 2;
0x0000223c bl 0x1bf4 | dl_dprintf ()
0x00002240 mov r7, 1 | r7 = 1;
0x00002244 rsb r0, sb, 0 | r0 = sb - ;
0x00002248 svc 0 | __asm ("svc 0");
0x0000224c ldr r3, [pc, 0x38] | r3 = *(0x2288);
0x00002250 rsb r0, r0, 0 | r0 -= ;
0x00002254 ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x00002258 str r0, [r3] | *(r3) = r0;
| }
0x0000225c ldr r1, [fp, -0x38] | r1 = var_38h;
0x00002260 mov r0, 2 | r0 = 2;
0x00002264 bl 0x1bf4 | dl_dprintf ()
0x00002268 add r6, r6, sb | r6 += sb;
| }
0x0000226c add r4, r4, 8 | r4 += 8;
0x00002270 b 0x21a8 |
| } 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/lib/ld-uClibc-1.0.31.so @ 0x304c */
| #include <stdint.h>
|
; (fcn) sym.__tls_get_addr () | void tls_get_addr (int32_t arg1) {
| int32_t var_1ch;
| r0 = arg1;
0x0000304c push {r4, r5, r6, r7, r8, sb, fp, lr} |
0x00003050 ldr r6, [pc, 0x144] | r6 = *(0x3198);
0x00003054 ldr r3, [pc, 0x144] | r3 = *(0x319c);
0x00003058 add r6, pc, r6 | r6 = pc + r6;
0x0000305c mov r7, r0 | r7 = r0;
0x00003060 ldr r3, [r6, r3] |
0x00003064 bl 0x5a90 | r0 = aeabi_read_tp ();
0x00003068 ldr r5, [r0] | r5 = *(r0);
0x0000306c ldr r3, [r3] | r3 = *(0x3198);
0x00003070 ldr r2, [r5] | r2 = *(r5);
0x00003074 add fp, sp, 0x1c |
0x00003078 cmp r2, r3 |
| if (r2 != r3) {
0x0000307c moveq r4, 0 | r4 = 0;
| }
| if (r2 != r3) {
0x00003080 beq 0x3098 |
0x00003084 mov r8, r0 | r8 = r0;
0x00003088 ldr r0, [r7] | r0 = *(r7);
0x0000308c bl 0x26ac | dl_update_slotinfo ();
0x00003090 ldr r5, [r8] | r5 = *(r8);
0x00003094 mov r4, r0 | r4 = r0;
| }
0x00003098 ldr ip, [r7] | ip = *(r7);
0x0000309c ldr r0, [r5, ip, lsl 3] | offset_0 = ip << 3;
| r0 = *((r5 + offset_0));
0x000030a0 add r8, r5, ip, lsl 3 | r8 = r5 + (ip << 3);
0x000030a4 cmn r0, 1 |
| if (r0 != 1) {
0x000030a8 bne 0x317c | goto label_1;
| }
0x000030ac cmp r4, 0 |
| if (r4 != 0) {
0x000030b0 bne 0x30d8 | goto label_2;
| }
0x000030b4 ldr r2, [pc, 0xe8] |
0x000030b8 ldr r2, [r6, r2] | r2 = *((r6 + r2));
0x000030bc ldr r2, [r2] | r2 = *(0x31a0);
| do {
0x000030c0 ldr r1, [r2] | r1 = *(r2);
0x000030c4 cmp r1, ip |
| if (r1 >= ip) {
0x000030c8 bls 0x3124 |
0x000030cc mov r1, 0xc | r1 = 0xc;
0x000030d0 mla r3, r1, ip, r2 | __asm ("mla r3, r1, ip, r2");
0x000030d4 ldr r4, [r3, 0x10] | r4 = *((r3 + 0x10));
| label_2:
0x000030d8 ldr r1, [r4, 0x1c] | r1 = *((r4 + 0x1c));
0x000030dc ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x000030e0 bl 0x2a0c | r0 = dl_memalign ();
0x000030e4 cmp r0, 0 |
| if (r0 != 0) {
0x000030e8 bne 0x3130 | goto label_3;
| }
0x000030ec ldr r2, [pc, 0xb4] | r2 = *(0x31a4);
0x000030f0 ldr r1, [pc, 0xb4] | r1 = *(0x31a8);
0x000030f4 ldr r3, [pc, 0xb4] | r3 = *(0x31ac);
0x000030f8 add r2, pc, r2 | r2 = pc + r2;
0x000030fc add r1, pc, r1 | r1 = pc + r1;
0x00003100 mov r0, 2 | r0 = 2;
0x00003104 bl 0x1bf4 | dl_dprintf ()
0x00003108 mov r0, 1 | r0 = 1;
0x0000310c mov r7, r0 | r7 = r0;
0x00003110 svc 0 | __asm ("svc 0");
0x00003114 ldr r3, [pc, 0x98] | r3 = *(0x31b0);
0x00003118 rsb r0, r0, 0 | r0 -= ;
0x0000311c ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00003120 str r0, [r3] | *(r3) = r0;
| }
0x00003124 sub ip, ip, r1 |
0x00003128 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0000312c b 0x30c0 |
| } while (1);
| label_3:
0x00003130 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00003134 ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x00003138 sub r3, r3, 1 | r3--;
0x0000313c mov r2, r0 | r2 = r0;
0x00003140 add r1, r0, r1 | r1 = r0 + r1;
| do {
0x00003144 cmp r1, r2 |
| if (r1 == r2) {
0x00003148 bne 0x3188 |
0x0000314c ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00003150 ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x00003154 add r3, r0, r3 | r3 = r0 + r3;
0x00003158 add r2, r0, r2 | r2 = r0 + r2;
0x0000315c mov r1, 0 | r1 = 0;
| label_0:
0x00003160 cmp r3, r2 |
| if (r3 != r2) {
0x00003164 bne 0x3194 | goto label_4;
| }
0x00003168 ldr r3, [r7] | r3 = *(r7);
0x0000316c str r0, [r8] | *(r8) = r0;
0x00003170 add r5, r5, r3, lsl 3 | r5 += (r3 << 3);
0x00003174 mov r3, 0 | r3 = 0;
0x00003178 strb r3, [r5, 4] | *((r5 + 4)) = r3;
| label_1:
0x0000317c ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x00003180 add r0, r0, r3 | r0 += r3;
0x00003184 pop {r4, r5, r6, r7, r8, sb, fp, pc} |
| }
0x00003188 ldrb ip, [r3, 1]! | ip = *((r3 += 1));
0x0000318c strb ip, [r2], 1 | *(r2) = ip;
| r2++;
0x00003190 b 0x3144 |
| } while (1);
| label_4:
0x00003194 strb r1, [r3], 1 | *(r3) = r1;
| r3++;
0x00003198 b 0x3160 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/ld-uClibc-1.0.31.so @ 0x2f48 */
| #include <stdint.h>
|
; (fcn) sym._dl_add_to_slotinfo () | void dl_add_to_slotinfo (int32_t arg1) {
| int32_t var_1ch;
| r0 = arg1;
0x00002f48 push {r4, r5, r6, r7, r8, sb, fp, lr} |
0x00002f4c ldr r5, [pc, 0xe4] | r5 = *(0x3034);
0x00002f50 ldr r3, [pc, 0xe4] | r3 = *(0x3038);
0x00002f54 add r5, pc, r5 | r5 = pc + r5;
0x00002f58 ldr r3, [r5, r3] | r3 = *(0x3034);
0x00002f5c ldr r7, [r0, 0x2c] | r7 = *((r0 + 0x2c));
0x00002f60 ldr r6, [r3] | r6 = *(0x3034);
0x00002f64 add fp, sp, 0x1c |
0x00002f68 mov r8, r0 | r8 = r0;
| do {
0x00002f6c ldr r3, [r6] | r3 = *(r6);
0x00002f70 cmp r3, r7 |
| if (r3 > r7) {
0x00002f74 bhi 0x3030 | goto label_1;
| }
0x00002f78 ldr r4, [r6, 4] | r4 = *((r6 + 4));
0x00002f7c sub r7, r7, r3 | r7 -= r3;
0x00002f80 cmp r4, 0 |
| if (r4 == 0) {
0x00002f84 bne 0x2fe0 |
0x00002f88 mov r0, 0x2f0 | r0 = 0x2f0;
0x00002f8c bl 0x243c | r0 = dl_malloc ();
0x00002f90 cmp r0, 0 |
0x00002f94 mov r1, r0 | r1 = r0;
0x00002f98 str r0, [r6, 4] | *((r6 + 4)) = r0;
| if (r0 != 0) {
0x00002f9c bne 0x2fe8 | goto label_2;
| }
0x00002fa0 ldr r3, [pc, 0x98] | r3 = *(0x303c);
0x00002fa4 ldr r1, [pc, 0x98] | r1 = *(0x3040);
0x00002fa8 ldr r2, [r5, r3] | r2 = *((r5 + r3));
0x00002fac add r1, pc, r1 | r1 = pc + r1;
0x00002fb0 ldr r3, [r2] | r3 = *(r2);
0x00002fb4 mov r0, 2 | r0 = 2;
0x00002fb8 add r3, r3, 1 | r3++;
0x00002fbc str r3, [r2] | *(r2) = r3;
0x00002fc0 mov r7, 1 | r7 = 1;
0x00002fc4 bl 0x1bf4 | dl_dprintf ()
0x00002fc8 mov r0, 0x7f | r0 = 0x7f;
0x00002fcc svc 0 | __asm ("svc 0");
0x00002fd0 ldr r3, [pc, 0x70] | r3 = *(0x3044);
0x00002fd4 rsb r0, r0, 0 | r0 -= ;
0x00002fd8 ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x00002fdc str r0, [r3] | *(r3) = r0;
| }
0x00002fe0 mov r6, r4 | r6 = r4;
0x00002fe4 b 0x2f6c |
| } while (1);
| label_2:
0x00002fe8 mov r3, 0x3e | r3 = 0x3e;
0x00002fec stm r1, {r3, r4} | *(r1) = r3;
| *((r1 + 4)) = r4;
0x00002ff0 add r2, r1, 0x2f0 | r2 = r1 + 0x2f0;
0x00002ff4 add r3, r1, 8 | r3 = r1 + 8;
| do {
0x00002ff8 cmp r2, r3 |
| if (r2 == r3) {
0x00002ffc bne 0x3028 |
| label_0:
0x00003000 mov r3, 0xc | r3 = 0xc;
0x00003004 mla r0, r3, r7, r1 | __asm ("mla r0, r3, r7, r1");
0x00003008 ldr r3, [pc, 0x30] | r3 = *(0x303c);
0x0000300c str r8, [r0, 0x10] | *((r0 + 0x10)) = r8;
0x00003010 ldr r2, [r5, r3] | r2 = *((r5 + r3));
0x00003014 ldr r3, [r2] | r3 = *(r2);
0x00003018 add r3, r3, 1 | r3++;
0x0000301c str r3, [r0, 8] | *((r0 + 8)) = r3;
0x00003020 str r3, [r2] | *(r2) = r3;
0x00003024 pop {r4, r5, r6, r7, r8, sb, fp, pc} |
| }
0x00003028 strb r4, [r3], 1 | *(r3) = r4;
| r3++;
0x0000302c b 0x2ff8 |
| } while (1);
| label_1:
0x00003030 mov r1, r6 | r1 = r6;
0x00003034 b 0x3000 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/ld-uClibc-1.0.31.so @ 0x2cec */
| #include <stdint.h>
|
; (fcn) sym._dl_allocate_static_tls () | void dl_allocate_static_tls (int32_t arg_4h, int32_t arg1) {
| int32_t var_34h;
| int32_t var_30h;
| int32_t var_2ch;
| int32_t var_28h;
| int32_t var_0h;
| int32_t var_20h;
| int32_t var_ch;
| r0 = arg1;
0x00002cec push {r4, r7, fp, lr} |
0x00002cf0 ldr r4, [pc, 0x3c] | r4 = *(0x2d30);
0x00002cf4 add fp, sp, 0xc |
0x00002cf8 bl 0x2924 | dl_try_allocate_static_tls ();
0x00002cfc add r4, pc, r4 | r4 = pc + r4;
0x00002d00 cmp r0, 0 |
0x00002d04 popeq {r4, r7, fp, pc} |
0x00002d08 ldr r1, [pc, 0x28] | r1 = *(0x2d34);
0x00002d0c mov r0, 2 | r0 = 2;
0x00002d10 add r1, pc, r1 | r1 = pc + r1;
0x00002d14 bl 0x1bf4 | dl_dprintf ()
0x00002d18 mov r7, 1 | r7 = 1;
0x00002d1c mov r0, 0x1e | r0 = 0x1e;
0x00002d20 svc 0 | __asm ("svc 0");
0x00002d24 ldr r3, [pc, 0x10] | r3 = *(0x2d38);
0x00002d28 rsb r0, r0, 0 | r0 -= ;
0x00002d2c ldr r3, [r4, r3] | r3 = *(0x2d30);
0x00002d30 str r0, [r3] | *(r3) = r0;
| if (r0 != 0) {
0x00002d34 andeq r4, r1, r0, ror r2 | r4 = r1 & (r0 >>> r2);
| }
| if (r0 != 0) {
0x00002d38 muleq r0, sb, lr | r0 = sb * lr;
| }
| if (r0 != 0) {
0x00002d3c andeq r0, r0, ip, lsr r0 | r0 &= (ip >> r0);
| }
0x00002d40 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00002d44 ldr sb, [pc, 0x1f0] | sb = *(0x00002f3c);
0x00002d48 add fp, sp, 0x20 |
0x00002d4c sub sp, sp, 0x1c |
0x00002d50 ldr r6, [r2] | r6 = *(r2);
0x00002d54 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00002d58 ldr r5, [r0] | r5 = *(r0);
0x00002d5c mov r8, r0 | r8 = r0;
0x00002d60 and r4, r2, 0xff | r4 = r2 & 0xff;
0x00002d64 mov r0, 0 | r0 = 0;
0x00002d68 lsr r2, r2, 8 | r2 >>= 8;
0x00002d6c add r7, r3, r2, lsl 4 | r7 = r3 + (r2 << 4);
0x00002d70 cmp r2, r0 |
0x00002d74 add sb, pc, sb | sb = pc + sb;
0x00002d78 add sl, r5, r6 | sl = r5 + r6;
0x00002d7c str r7, [fp, -0x2c] | var_2ch = r7;
0x00002d80 str r0, [fp, -0x28] | var_28h = r0;
| if (r2 == r0) {
0x00002d84 beq 0x2e74 | goto label_3;
| }
0x00002d88 ldrb r0, [r7, 0xc] | r0 = *((r7 + 0xc));
0x00002d8c lsrs r0, r0, 4 | r0 >>= 4;
| if (r0 != r0) {
0x00002d90 ldreq r3, [r7, 4] | r3 = *((r7 + 4));
| }
| if (r0 != r0) {
0x00002d94 addeq r3, r5, r3 | r3 = r5 + r3;
| }
| if (r0 == r0) {
0x00002d98 beq 0x2e78 | goto label_4;
| }
0x00002d9c sub ip, r4, 0x11 |
0x00002da0 cmp r4, 0x16 |
0x00002da4 cmpne ip, 2 | __asm ("cmpne ip, 2");
| if (r4 > 0x16) {
0x00002da8 movls ip, 1 |
| }
| if (r4 <= 0x16) {
0x00002dac movhi ip, 0 |
| }
0x00002db0 cmp r4, 0x14 |
0x00002db4 ldr r0, [r3, r2, lsl 4] | offset_0 = r2 << 4;
| r0 = *((r3 + offset_0));
| if (r4 != 0x14) {
0x00002db8 moveq lr, 2 | lr = 2;
| }
| if (r4 == 0x14) {
0x00002dbc movne lr, 0 | lr = 0;
| }
0x00002dc0 sub r3, fp, 0x2c | r3 -= var_2ch;
0x00002dc4 str r3, [sp] | *(sp) = r3;
0x00002dc8 orr r3, ip, lr | r3 = ip | lr;
0x00002dcc ldr ip, [fp, 4] | ip = *(arg_4h);
0x00002dd0 mov r2, r8 | r2 = r8;
0x00002dd4 add r0, ip, r0 | r0 = ip + r0;
0x00002dd8 bl 0x1988 | r0 = dl_find_hash ();
0x00002ddc subs r3, r0, 0 | r3 = r0 - 0;
| if (r3 == r0) {
0x00002de0 bne 0x2e04 |
0x00002de4 ldrb r2, [r7, 0xc] | r2 = *((r7 + 0xc));
0x00002de8 and r1, r2, 0xf | r1 = r2 & 0xf;
0x00002dec cmp r1, 6 |
| if (r1 == 6) {
0x00002df0 beq 0x2e04 | goto label_5;
| }
0x00002df4 lsr r2, r2, 4 | r2 >>= 4;
0x00002df8 cmp r2, 2 |
| if (r2 == 2) {
0x00002dfc movne r4, 1 | r4 = 1;
| }
| if (r2 != 2) {
0x00002e00 bne 0x2ed0 | goto label_2;
| }
| }
| label_5:
0x00002e04 ldr r2, [fp, -0x28] | r2 = var_28h;
| do {
0x00002e08 cmp r4, 0x17 |
| if (r4 > 0x17) {
| /* switch table (24 cases) at 0x2e14 */
0x00002e0c addls pc, pc, r4, lsl 2 | pc += (r4 << 2);
| }
0x00002e10 b 0x2f34 | goto label_6;
0x00002e14 b 0x2ed0 | goto label_2;
0x00002e18 b 0x2e80 | goto label_7;
0x00002e1c b 0x2ef8 | goto label_8;
0x00002e20 b 0x2f34 | goto label_6;
0x00002e24 b 0x2f34 | goto label_6;
0x00002e28 b 0x2f34 | goto label_6;
0x00002e2c b 0x2f34 | goto label_6;
0x00002e30 b 0x2f34 | goto label_6;
0x00002e34 b 0x2f34 | goto label_6;
0x00002e38 b 0x2f34 | goto label_6;
0x00002e3c b 0x2f34 | goto label_6;
0x00002e40 b 0x2f34 | goto label_6;
0x00002e44 b 0x2f34 | goto label_6;
0x00002e48 b 0x2f34 | goto label_6;
0x00002e4c b 0x2f34 | goto label_6;
0x00002e50 b 0x2f34 | goto label_6;
0x00002e54 b 0x2f34 | goto label_6;
0x00002e58 b 0x2eec | goto label_9;
0x00002e5c b 0x2ef8 | goto label_8;
0x00002e60 b 0x2f00 | goto label_10;
0x00002e64 b 0x2ebc | goto label_11;
0x00002e68 b 0x2ef0 | goto label_12;
0x00002e6c b 0x2ef0 | goto label_12;
0x00002e70 b 0x2eac | goto label_13;
| label_3:
0x00002e74 ldr r3, [r7, 4] | r3 = *((r7 + 4));
| label_4:
0x00002e78 mov r2, r8 | r2 = r8;
0x00002e7c b 0x2e08 |
| } while (1);
| label_7:
0x00002e80 ldr r1, [pc, 0xb8] | r1 = *(0x2f3c);
0x00002e84 mov r0, 2 | r0 = 2;
0x00002e88 add r1, pc, r1 | r1 = pc + r1;
0x00002e8c bl 0x1bf4 | dl_dprintf ()
0x00002e90 mov r0, 1 | r0 = 1;
0x00002e94 mov r7, r0 | r7 = r0;
0x00002e98 svc 0 | __asm ("svc 0");
0x00002e9c ldr r3, [pc, 0xa0] | r3 = *(0x2f40);
0x00002ea0 rsb r0, r0, 0 | r0 -= ;
0x00002ea4 ldr r3, [sb, r3] | r3 = *((sb + r3));
0x00002ea8 str r0, [r3] | *(r3) = r0;
| label_13:
0x00002eac ldr r3, [r5, r6] | r3 = *((r5 + r6));
0x00002eb0 ldr r2, [r8] | r2 = *(r8);
| label_1:
0x00002eb4 add r3, r3, r2 | r3 += r2;
0x00002eb8 b 0x2ef0 | goto label_12;
| label_11:
0x00002ebc ldr r1, [r7, 8] | r1 = *((r7 + 8));
0x00002ec0 mov r2, 0 | r2 = 0;
| do {
0x00002ec4 cmp r1, r2 |
| if (r1 == r2) {
0x00002ec8 bne 0x2edc |
| label_0:
0x00002ecc mov r4, 0 | r4 = 0;
| label_2:
0x00002ed0 mov r0, r4 | r0 = r4;
0x00002ed4 sub sp, fp, 0x20 |
0x00002ed8 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00002edc ldrb r0, [r3, r2] | r0 = *((r3 + r2));
0x00002ee0 strb r0, [sl, r2] | *((sl + r2)) = r0;
0x00002ee4 add r2, r2, 1 | r2++;
0x00002ee8 b 0x2ec4 |
| } while (1);
| label_9:
0x00002eec ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
| label_12:
0x00002ef0 str r3, [r5, r6] | *((r5 + r6)) = r3;
0x00002ef4 b 0x2ecc | goto label_0;
| label_8:
0x00002ef8 ldr r2, [r5, r6] | r2 = *((r5 + r6));
0x00002efc b 0x2eb4 | goto label_1;
| label_10:
0x00002f00 ldr r1, [r2, 0x28] | r1 = *((r2 + 0x28));
0x00002f04 cmp r1, 0 |
| if (r1 == 0) {
0x00002f08 bne 0x2f24 |
0x00002f0c mov r0, r2 | r0 = r2;
0x00002f10 str r3, [fp, -0x34] | var_34h = r3;
0x00002f14 str r2, [fp, -0x30] | var_30h = r2;
0x00002f18 bl 0x2cec | dl_allocate_static_tls ();
0x00002f1c ldr r3, [fp, -0x34] | r3 = var_34h;
0x00002f20 ldr r2, [fp, -0x30] | r2 = var_30h;
| }
0x00002f24 ldr r1, [r5, r6] | r1 = *((r5 + r6));
0x00002f28 ldr r2, [r2, 0x28] | r2 = *((r2 + 0x28));
0x00002f2c add r3, r3, r1 | r3 += r1;
0x00002f30 b 0x2eb4 | goto label_1;
| label_6:
0x00002f34 mvn r4, 0 | r4 = ~0;
0x00002f38 b 0x2ed0 | goto label_2;
| }
; 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 @ 0x471c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym._dl_get_ready_to_run () | void dl_get_ready_to_run (int32_t arg_4h, int32_t arg1) {
| int32_t var_174h;
| int32_t var_170h;
| int32_t var_16ch;
| int32_t var_168h;
| int32_t var_164h;
| int32_t var_160h;
| int32_t var_15ch;
| int32_t var_158h;
| int32_t var_154h;
| int32_t var_150h;
| int32_t var_14ch;
| int32_t var_148h;
| int32_t var_140h;
| int32_t var_13ch;
| int32_t var_0h_2;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_0h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h_3;
| int32_t var_24h;
| int32_t var_2ch;
| int32_t var_6ch;
| int32_t var_c4h;
| int32_t var_100h;
| int32_t var_104h;
| int32_t var_20h_2;
| int32_t var_20h;
| r0 = arg1;
0x0000471c push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00004720 ldr r4, [pc, 0xf84] | r4 = *(0x56a8);
0x00004724 add fp, sp, 0x20 |
0x00004728 sub sp, sp, 0x15c |
0x0000472c str r3, [fp, -0x14c] | var_14ch = r3;
0x00004730 mov r3, 0 | r3 = 0;
0x00004734 mov r5, r2 | r5 = r2;
0x00004738 sub r6, fp, 0x13c | r6 -= var_13ch;
0x0000473c mov r2, r3 | r2 = r3;
0x00004740 add r4, pc, r4 | r4 = pc + r4;
0x00004744 str r0, [fp, -0x15c] | var_15ch = r0;
| do {
0x00004748 strb r2, [r3, r6] | *((r3 + r6)) = r2;
0x0000474c add r3, r3, 1 | r3++;
0x00004750 cmp r3, 0x118 |
0x00004754 bne 0x4748 |
| } while (r3 != 0x118);
0x00004758 ldr r2, [pc, 0xf50] | r2 = *(0x56ac);
0x0000475c ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x00004760 ldr r2, [r4, r2] | r2 = *((r4 + r2));
0x00004764 cmp r3, 0 |
| if (r3 != 0) {
0x00004768 moveq r3, 0x1000 | r3 = 0x1000;
| }
0x0000476c str r3, [r2] | *(r2) = r3;
0x00004770 str r2, [fp, -0x174] | var_174h = r2;
0x00004774 ldr r2, [pc, 0xf38] | r2 = *(0x56b0);
0x00004778 mov r7, 0 | r7 = 0;
0x0000477c add r2, pc, r2 | r2 = pc + r2;
0x00004780 str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
0x00004784 ldr r3, [fp, 4] | r3 = *(arg_4h);
0x00004788 str r7, [r2, 0x10] | *((r2 + 0x10)) = r7;
0x0000478c ldr r0, [r3] | r0 = *(r3);
0x00004790 bl 0x32b4 | fcn_000032b4 (r0);
0x00004794 ldr r3, [pc, 0xf1c] | r3 = *(0x56b4);
0x00004798 ldr r2, [r5, 0x4c] | r2 = *((r5 + 0x4c));
0x0000479c ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x000047a0 cmp r2, r3 |
| if (r2 == r3) {
0x000047a4 bne 0x47d4 |
0x000047a8 ldr r1, [pc, 0xf0c] | r1 = *(0x56b8);
0x000047ac mov r0, 2 | r0 = 2;
0x000047b0 add r1, pc, r1 | r1 = pc + r1;
0x000047b4 bl 0x1bf4 | dl_dprintf ()
0x000047b8 mov r0, 1 | r0 = 1;
0x000047bc mov r7, r0 | r7 = r0;
| label_17:
0x000047c0 svc 0 | __asm ("svc 0");
0x000047c4 ldr r3, [pc, 0xef4] | r3 = *(0x56bc);
0x000047c8 rsb r0, r0, 0 | r0 -= ;
0x000047cc ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x000047d0 str r0, [r3] | *(r3) = r0;
| }
0x000047d4 ldr r0, [pc, 0xee8] | r0 = *(0x56c0);
0x000047d8 ldr r1, [fp, -0x14c] | r1 = var_14ch;
0x000047dc add r0, pc, r0 | r0 = pc + r0;
0x000047e0 str r7, [fp, -0x140] | var_140h = r7;
0x000047e4 bl 0x17c0 | dl_getenv ();
0x000047e8 ldr r2, [pc, 0xed8] | r2 = *(0x56c4);
0x000047ec cmp r0, 0 |
| if (r0 == 0) {
0x000047f0 movne r3, 2 | r3 = 2;
| }
| if (r0 != 0) {
0x000047f4 moveq r3, 0 | r3 = 0;
| }
0x000047f8 str r3, [fp, -0x154] | var_154h = r3;
0x000047fc ldr r2, [r4, r2] | r2 = *((r4 + r2));
0x00004800 ldr r3, [r5, 0x5c] | r3 = *((r5 + 0x5c));
0x00004804 str r2, [fp, -0x164] | var_164h = r2;
0x00004808 ldr r2, [pc, 0xebc] | r2 = *(0x56c8);
0x0000480c cmn r3, 1 |
0x00004810 ldr r2, [r4, r2] | r2 = *((r4 + r2));
0x00004814 str r2, [fp, -0x168] | var_168h = r2;
| if (r3 == 1) {
0x00004818 beq 0x489c | goto label_31;
| }
| label_0:
0x0000481c ldr r3, [r5, 0x5c] | r3 = *((r5 + 0x5c));
0x00004820 cmn r3, 1 |
| if (r3 != 1) {
0x00004824 bne 0x4c18 | goto label_32;
| }
| label_1:
0x00004828 ldr r0, [pc, 0xea0] | r0 = *(0x56cc);
0x0000482c ldr r2, [fp, -0x164] | r2 = var_164h;
0x00004830 mov r3, 1 | r3 = 1;
0x00004834 ldr r1, [fp, -0x14c] | r1 = var_14ch;
0x00004838 add r0, pc, r0 | r0 = pc + r0;
0x0000483c str r3, [r2] | *(r2) = r3;
0x00004840 bl 0x17c0 | dl_getenv ();
0x00004844 ldr r7, [pc, 0xe88] | r7 = *(0x56d0);
0x00004848 ldr r3, [fp, -0x168] | r3 = var_168h;
0x0000484c add r7, pc, r7 | r7 = pc + r7;
0x00004850 str r0, [r3] | *(r3) = r0;
| do {
0x00004854 mov r0, r7 | r0 = r7;
0x00004858 ldr r1, [fp, -0x14c] | r1 = var_14ch;
0x0000485c bl 0x1814 | dl_unsetenv ();
0x00004860 sub r0, r7, 1 | r0 = r7 - 1;
| label_3:
0x00004864 ldrb r2, [r0, 1] | r2 = *((r0 + 1));
0x00004868 add r3, r0, 1 | r3 = r0 + 1;
0x0000486c cmp r2, 0 |
| if (r2 != 0) {
0x00004870 bne 0x4c38 | goto label_33;
| }
0x00004874 ldrb r3, [r3, 1] | r3 = *((r3 + 1));
0x00004878 add r7, r0, 2 | r7 = r0 + 2;
0x0000487c cmp r3, 0 |
0x00004880 bne 0x4854 |
| } while (r3 != 0);
0x00004884 ldr r2, [pc, 0xe4c] | r2 = *(0x56d4);
0x00004888 ldr r2, [r4, r2] | r2 = *((r4 + r2));
0x0000488c str r3, [r2] | *(r2) = r3;
0x00004890 mov r3, 2 | r3 = 2;
0x00004894 str r3, [fp, -0x154] | var_154h = r3;
0x00004898 b 0x4988 | goto label_34;
| label_31:
0x0000489c mov r7, 0x18 | r7 = 0x18;
0x000048a0 svc 0 | __asm ("svc 0");
0x000048a4 cmn r0, 0x1000 |
| if (r0 <= 0x1000) {
0x000048a8 ldrhi r2, [pc, 0xe10] | r2 = *((pc + 0xe10));
| }
0x000048ac rsbhi r0, r0, 0 | __asm ("rsbhi r0, r0, 0");
| if (r0 <= 0x1000) {
0x000048b0 ldrhi r2, [r4, r2] | r2 = *((r4 + r2));
| }
| if (r0 <= 0x1000) {
0x000048b4 strhi r0, [r2] | *(r2) = r0;
| }
| if (r0 <= 0x1000) {
0x000048b8 movhi r0, r3 | r0 = r3;
| }
0x000048bc lsl r1, r0, 0x10 | r1 = r0 << 0x10;
0x000048c0 lsr r1, r1, 0x10 | r1 >>= 0x10;
0x000048c4 mov r7, 0x31 | r7 = 0x31;
0x000048c8 svc 0 | __asm ("svc 0");
0x000048cc cmn r0, 0x1000 |
| if (r0 <= 0x1000) {
0x000048d0 ldrhi r3, [pc, 0xde8] | r3 = *((pc + 0xde8));
| }
0x000048d4 rsbhi r0, r0, 0 | __asm ("rsbhi r0, r0, 0");
| if (r0 <= 0x1000) {
0x000048d8 ldrhi r3, [r4, r3] | r3 = *((r4 + r3));
| }
| if (r0 <= 0x1000) {
0x000048dc strhi r0, [r3] | *(r3) = r0;
| }
| if (r0 <= 0x1000) {
0x000048e0 mvnhi r0, 0 | r0 = ~0;
| }
0x000048e4 lsl r2, r0, 0x10 | r2 = r0 << 0x10;
0x000048e8 lsr r2, r2, 0x10 | r2 >>= 0x10;
0x000048ec mov r7, 0x2f | r7 = 0x2f;
0x000048f0 svc 0 | __asm ("svc 0");
0x000048f4 cmn r0, 0x1000 |
| if (r0 <= 0x1000) {
0x000048f8 ldrhi r3, [pc, 0xdc0] | r3 = *((pc + 0xdc0));
| }
0x000048fc rsbhi r0, r0, 0 | __asm ("rsbhi r0, r0, 0");
| if (r0 <= 0x1000) {
0x00004900 ldrhi r3, [r4, r3] | r3 = *((r4 + r3));
| }
| if (r0 <= 0x1000) {
0x00004904 strhi r0, [r3] | *(r3) = r0;
| }
| if (r0 <= 0x1000) {
0x00004908 mvnhi r0, 0 | r0 = ~0;
| }
0x0000490c lsl r3, r0, 0x10 | r3 = r0 << 0x10;
0x00004910 lsr r3, r3, 0x10 | r3 >>= 0x10;
0x00004914 mov r7, 0x32 | r7 = 0x32;
0x00004918 svc 0 | __asm ("svc 0");
0x0000491c cmn r0, 0x1000 |
| if (r0 <= 0x1000) {
0x00004920 ldrhi ip, [pc, 0xd98] | ip = *((pc + 0xd98));
| }
0x00004924 rsbhi r0, r0, 0 | __asm ("rsbhi r0, r0, 0");
| if (r0 <= 0x1000) {
0x00004928 ldrhi ip, [r4, ip] | ip = *((r4 + ip));
| }
| if (r0 <= 0x1000) {
0x0000492c strhi r0, [ip] | *(ip) = r0;
| }
| if (r0 <= 0x1000) {
0x00004930 mvnhi r0, 0 | r0 = ~0;
| }
0x00004934 lsl r0, r0, 0x10 | r0 <<= 0x10;
0x00004938 lsr r0, r0, 0x10 | r0 >>= 0x10;
0x0000493c cmp r1, r2 |
0x00004940 cmpeq r0, r3 | __asm ("cmpeq r0, r3");
| if (r1 != r2) {
0x00004944 bne 0x481c | goto label_0;
| }
| label_2:
0x00004948 ldr r0, [pc, 0xd8c] | r0 = *(0x56d8);
0x0000494c ldr r2, [fp, -0x164] | r2 = var_164h;
0x00004950 mov r3, 0 | r3 = 0;
0x00004954 ldr r1, [fp, -0x14c] | r1 = var_14ch;
0x00004958 add r0, pc, r0 | r0 = pc + r0;
0x0000495c str r3, [r2] | *(r2) = r3;
0x00004960 bl 0x17c0 | dl_getenv ();
0x00004964 ldr r3, [fp, -0x168] | r3 = var_168h;
0x00004968 ldr r1, [fp, -0x14c] | r1 = var_14ch;
0x0000496c str r0, [r3] | *(r3) = r0;
0x00004970 ldr r0, [pc, 0xd68] | r0 = *(0x56dc);
0x00004974 add r0, pc, r0 | r0 = pc + r0;
0x00004978 bl 0x17c0 | dl_getenv ();
0x0000497c ldr r3, [pc, 0xd54] | r3 = *(0x56d4);
0x00004980 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00004984 str r0, [r3] | *(r3) = r0;
| label_34:
0x00004988 ldr r3, [pc, 0xd54] | r3 = *(0x56e0);
0x0000498c ldr r2, [pc, 0xd54] | r2 = *(0x56e4);
0x00004990 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00004994 add r2, pc, r2 | r2 = pc + r2;
0x00004998 str r2, [r3] | *(r3) = r2;
0x0000499c ldr r3, [pc, 0xd48] | r3 = *(0x56e8);
0x000049a0 ldr r2, [pc, 0xd48] | r2 = *(0x56ec);
0x000049a4 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x000049a8 add r2, pc, r2 | r2 = pc + r2;
0x000049ac str r2, [r3] | *(r3) = r2;
0x000049b0 ldr r1, [r5, 0x2c] | r1 = *((r5 + 0x2c));
0x000049b4 ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x000049b8 mov r3, 0 | r3 = 0;
| label_4:
0x000049bc cmp r1, r3 |
0x000049c0 add r0, r2, r3, lsl 5 | r0 = r2 + (r3 << 5);
| if (r1 != r3) {
0x000049c4 beq 0x49e0 |
0x000049c8 ldr ip, [r2, r3, lsl 5] | offset_0 = r3 << 5;
| ip = *((r2 + offset_0));
0x000049cc cmp ip, 6 |
| if (ip != 6) {
0x000049d0 bne 0x4c40 | goto label_35;
| }
0x000049d4 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x000049d8 sub r2, r2, r3 | r2 -= r3;
0x000049dc str r2, [fp, -0x13c] | var_13ch = r2;
| }
0x000049e0 mov r0, 0x14 | r0 = 0x14;
0x000049e4 bl 0x2c8c | fcn_00002c8c (r0);
0x000049e8 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x000049ec mov sl, 0 | sl = 0;
0x000049f0 str r3, [fp, -0x150] | var_150h = r3;
0x000049f4 str sl, [fp, -0x170] | var_170h = sl;
0x000049f8 str sl, [fp, -0x148] | var_148h = sl;
0x000049fc str sl, [fp, -0x158] | var_158h = sl;
0x00004a00 mov sb, r0 | sb = r0;
| label_8:
0x00004a04 ldr r3, [fp, -0x148] | r3 = var_148h;
0x00004a08 ldr r2, [fp, -0x150] | r2 = var_150h;
0x00004a0c lsl r3, r3, 5 | r3 <<= 5;
0x00004a10 add r8, r3, r2 | r8 = r3 + r2;
0x00004a14 str r3, [fp, -0x160] | var_160h = r3;
0x00004a18 ldr r2, [fp, -0x148] | r2 = var_148h;
0x00004a1c ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x00004a20 cmp r3, r2 |
| if (r3 >= r2) {
0x00004a24 bls 0x4b24 |
0x00004a28 ldr r2, [fp, -0x148] | r2 = var_148h;
0x00004a2c ldr r3, [fp, -0x150] | r3 = var_150h;
0x00004a30 ldr r3, [r3, r2, lsl 5] | offset_1 = r2 << 5;
| r3 = *((r3 + offset_1));
0x00004a34 ldr r2, [pc, 0xcb8] | r2 = *(0x56f0);
0x00004a38 cmp r3, r2 |
| if (r3 != r2) {
0x00004a3c ldreq r2, [r8, 8] | r2 = *((r8 + 8));
| }
| if (r3 != r2) {
0x00004a40 ldreq sl, [r8, 0x14] | sl = *((r8 + 0x14));
| }
| if (r3 != r2) {
0x00004a44 streq r2, [fp, -0x170] | var_170h = r2;
| }
0x00004a48 ldr r2, [fp, -0x158] | r2 = var_158h;
0x00004a4c cmp r2, 0 |
| if (r2 != 0) {
0x00004a50 bne 0x4c48 | goto label_36;
| }
0x00004a54 cmp r3, 1 |
| if (r3 != 1) {
0x00004a58 bne 0x4c48 | goto label_36;
| }
0x00004a5c ldr r2, [r6] | r2 = *(r6);
0x00004a60 ldr r3, [r8, 8] | r3 = *((r8 + 8));
0x00004a64 add r3, r2, r3 | r3 = r2 + r3;
0x00004a68 str r3, [fp, -0x158] | var_158h = r3;
| label_5:
0x00004a6c ldr r3, [fp, -0x160] | r3 = var_160h;
0x00004a70 ldr r2, [fp, -0x150] | r2 = var_150h;
0x00004a74 ldr r3, [r3, r2] | r3 = *((r3 + r2));
0x00004a78 cmp r3, 3 |
| if (r3 == 3) {
0x00004a7c bne 0x4ac4 |
0x00004a80 ldr r3, [r8, 8] | r3 = *((r8 + 8));
0x00004a84 ldr r0, [r6] | r0 = *(r6);
0x00004a88 add r0, r0, r3 | r0 += r3;
0x00004a8c ldr r3, [fp, -0x15c] | r3 = var_15ch;
0x00004a90 str r0, [r3, 4] | *((r3 + 4)) = r0;
0x00004a94 bl 0x3274 | dl_strdup ();
0x00004a98 mov r3, 0 | r3 = 0;
0x00004a9c sub r1, r0, 1 | r1 = r0 - 1;
| label_7:
0x00004aa0 ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x00004aa4 cmp r2, 0 |
| if (r2 != 0) {
0x00004aa8 bne 0x4dac | goto label_37;
| }
0x00004aac cmp r3, 0 |
| if (r3 != 0) {
0x00004ab0 moveq r3, r0 | r3 = r0;
| }
0x00004ab4 strb r2, [r3] | *(r3) = r2;
0x00004ab8 ldr r3, [pc, 0xc38] | r3 = *(0x56f4);
0x00004abc ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00004ac0 str r0, [r3] | *(r3) = r0;
| }
0x00004ac4 ldr r3, [fp, -0x160] | r3 = var_160h;
0x00004ac8 ldr r2, [fp, -0x150] | r2 = var_150h;
0x00004acc ldr r3, [r3, r2] | r3 = *((r3 + r2));
0x00004ad0 cmp r3, 7 |
| if (r3 != 7) {
0x00004ad4 bne 0x4db8 | goto label_38;
| }
0x00004ad8 ldr r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x00004adc cmp r3, 0 |
| if (r3 == 0) {
0x00004ae0 beq 0x4b24 | goto label_39;
| }
0x00004ae4 str r3, [r6, 0x1c] | var_1ch = r3;
0x00004ae8 ldr r3, [r8, 0x1c] | r3 = *((r8 + 0x1c));
0x00004aec ldr r2, [r8, 8] | r2 = *((r8 + 8));
0x00004af0 cmp r3, 0 |
0x00004af4 str r3, [r6, 0x20] | var_20h_3 = r3;
| if (r3 == 0) {
0x00004af8 subne r3, r3, 1 | r3--;
| }
| if (r3 == 0) {
0x00004afc andne r3, r3, r2 | r3 &= r2;
| }
0x00004b00 str r3, [r6, 0x24] | var_24h = r3;
0x00004b04 ldr r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x00004b08 str r2, [r6, 0x14] | var_14h = r2;
0x00004b0c ldr r2, [pc, 0xbe8] | r2 = *(0x56f8);
0x00004b10 str r3, [r6, 0x18] | var_18h = r3;
0x00004b14 mov r3, 1 | r3 = 1;
0x00004b18 str r3, [r6, 0x2c] | var_2ch = r3;
0x00004b1c ldr r2, [r4, r2] | r2 = *((r4 + r2));
0x00004b20 str r3, [r2] | *(r2) = r3;
| }
| label_39:
0x00004b24 ldr r3, [fp, -0x170] | r3 = var_170h;
0x00004b28 ldr r0, [pc, 0xbd0] | r0 = "_";
0x00004b2c str r3, [r6, 0x100] | var_100h = r3;
0x00004b30 ldr r3, [r6, 0x14] | r3 = var_14h;
0x00004b34 str sl, [r6, 0x104] | var_104h = sl;
0x00004b38 cmp r3, 0 |
| if (r3 == 0) {
0x00004b3c ldrne r2, [r6] | r2 = *(r6);
| }
0x00004b40 ldr r1, [fp, -0x14c] | r1 = var_14ch;
| if (r3 == 0) {
0x00004b44 addne r3, r3, r2 | r3 += r2;
| }
| if (r3 == 0) {
0x00004b48 strne r3, [r6, 0x14] | *((r6 + 0x14)) = r3;
| }
0x00004b4c add r0, pc, r0 | r0 = pc + r0;
0x00004b50 bl 0x17c0 | r0 = dl_getenv ();
0x00004b54 adds r3, r0, 0 | r3 = r0 + 0;
| if (r3 == r0) {
0x00004b58 movne r3, 1 | r3 = 1;
| }
0x00004b5c str r3, [fp, -0x16c] | var_16ch = r3;
0x00004b60 ldr r3, [r5, 0x3c] | r3 = *((r5 + 0x3c));
0x00004b64 str r0, [fp, -0x150] | var_150h = r0;
0x00004b68 str r3, [fp, -0x158] | var_158h = r3;
0x00004b6c ldr r3, [pc, 0xb90] |
0x00004b70 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00004b74 str r3, [fp, -0x148] | var_148h = r3;
0x00004b78 ldr r3, [r3] | r3 = *(0x5700);
0x00004b7c str r3, [sb, 4] | *((sb + 4)) = r3;
0x00004b80 mov r3, 1 | r3 = 1;
0x00004b84 str r3, [sb] | *(sb) = r3;
0x00004b88 ldr r3, [fp, -0x158] | r3 = var_158h;
0x00004b8c str r3, [sb, 0x10] | *((sb + 0x10)) = r3;
0x00004b90 ldr r3, [pc, 0xb70] | r3 = *(0x5704);
0x00004b94 add r3, pc, r3 | r3 = pc + r3;
0x00004b98 str r3, [sb, 8] | *((sb + 8)) = r3;
0x00004b9c ldr r3, [pc, 0xb68] |
0x00004ba0 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00004ba4 str sb, [r3] | *(r3) = sb;
0x00004ba8 str r3, [fp, -0x160] | var_160h = r3;
0x00004bac ldr r3, [fp, -0x168] | r3 = var_168h;
0x00004bb0 ldr r3, [r3] | r3 = *(0x5708);
0x00004bb4 cmp r3, 0 |
| if (r3 == 0) {
0x00004bb8 beq 0x4f34 | goto label_40;
| }
| do {
0x00004bbc ldrb r1, [r3] | r1 = *(r3);
0x00004bc0 mov r6, r3 | r6 = r3;
0x00004bc4 cmp r1, 0x20 |
0x00004bc8 cmpne r1, 0x3a | __asm ("cmpne r1, 0x3a");
| if (r1 != 0x20) {
0x00004bcc moveq r2, 1 | r2 = 1;
| }
| if (r1 == 0x20) {
0x00004bd0 movne r2, 0 | r2 = 0;
| }
0x00004bd4 cmp r1, 9 |
| if (r1 != 9) {
0x00004bd8 orreq r2, r2, 1 | r2 |= 1;
| }
0x00004bdc cmp r2, 0 |
0x00004be0 add r3, r3, 1 | r3++;
0x00004be4 bne 0x4bbc |
| } while (r2 != 0);
0x00004be8 ldr r3, [pc, 0xb20] | r3 = *(0x570c);
0x00004bec ldr sl, [pc, 0xb20] | sl = *(0x5710);
0x00004bf0 ldr sb, [pc, 0xb20] | sb = *(0x5714);
0x00004bf4 add r3, pc, r3 | r3 = pc + r3;
0x00004bf8 add sl, pc, sl | sl = pc + sl;
0x00004bfc add sb, pc, sb | sb = pc + sb;
0x00004c00 str r3, [fp, -0x168] | var_168h = r3;
| label_9:
0x00004c04 ldrb r3, [r6] | r3 = *(r6);
0x00004c08 cmp r3, 0 |
| if (r3 == 0) {
0x00004c0c beq 0x4f34 | goto label_40;
| }
0x00004c10 mov r7, r6 | r7 = r6;
0x00004c14 b 0x4dcc | goto label_41;
| label_32:
0x00004c18 ldr r2, [r5, 0x64] | r2 = *((r5 + 0x64));
0x00004c1c cmp r3, r2 |
| if (r3 != r2) {
0x00004c20 bne 0x4828 | goto label_1;
| }
0x00004c24 ldr r2, [r5, 0x6c] | r2 = *((r5 + 0x6c));
0x00004c28 ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
0x00004c2c cmp r2, r3 |
| if (r2 != r3) {
0x00004c30 bne 0x4828 | goto label_1;
| }
0x00004c34 b 0x4948 | goto label_2;
| label_33:
0x00004c38 mov r0, r3 | r0 = r3;
0x00004c3c b 0x4864 | goto label_3;
| label_35:
0x00004c40 add r3, r3, 1 | r3++;
0x00004c44 b 0x49bc | goto label_4;
| label_36:
0x00004c48 cmp r3, 2 |
| if (r3 != 2) {
0x00004c4c bne 0x4a6c | goto label_5;
| }
0x00004c50 mov r2, r6 | r2 = r6;
0x00004c54 ldr r3, [r2], 0x6c | r3 = *(r2);
| r2 += 0x6c;
0x00004c58 ldr r0, [r8, 8] | r0 = *((r8 + 8));
0x00004c5c str r2, [fp, -0x16c] | var_16ch = r2;
0x00004c60 add r0, r3, r0 | r0 = r3 + r0;
0x00004c64 mov r2, sb | r2 = sb;
0x00004c68 ldr r1, [fp, -0x16c] | r1 = var_16ch;
0x00004c6c bl 0x3584 | dl_parse_dynamic_info ();
0x00004c70 ldr r3, [r6, 0xc4] | r3 = var_c4h;
0x00004c74 cmp r3, 0 |
0x00004c78 bne 0x4d28 |
| while (r2 < r3) {
0x00004c7c ldr r2, [pc, 0xa98] | r2 = *(0x5718);
0x00004c80 ldr r1, [r6] | r1 = *(r6);
0x00004c84 ldr r0, [r4, r2] | r0 = *((r4 + r2));
0x00004c88 ldr r3, [r8, 8] | r3 = *((r8 + 8));
0x00004c8c ldr r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x00004c90 add r3, r1, r3 | r3 = r1 + r3;
0x00004c94 str r2, [sp] | *(sp) = r2;
0x00004c98 ldr r2, [fp, -0x16c] | r2 = var_16ch;
0x00004c9c ldr r0, [r0] | r0 = *(r0);
0x00004ca0 bl 0x3364 | dl_add_elf_hash_table ();
0x00004ca4 ldr r3, [pc, 0xa58] | r3 = *(0x5700);
0x00004ca8 mov r2, 1 | r2 = 1;
0x00004cac ldr r7, [r4, r3] | r7 = *((r4 + r3));
0x00004cb0 ldr r3, [r7] | r3 = *(r7);
0x00004cb4 str r2, [r3, 0x3c] | *((r3 + 0x3c)) = r2;
0x00004cb8 ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x00004cbc str r2, [r3, 0xfc] | *((r3 + 0xfc)) = r2;
0x00004cc0 ldr r2, [r5, 0x2c] | r2 = *((r5 + 0x2c));
0x00004cc4 str r2, [r3, 0xf8] | *((r3 + 0xf8)) = r2;
0x00004cc8 mov r6, r0 | r6 = r0;
0x00004ccc mov r0, 0x18 | r0 = 0x18;
0x00004cd0 bl 0x2c8c | fcn_00002c8c (r0);
0x00004cd4 ldr r3, [pc, 0xa44] | r3 = *(0x571c);
0x00004cd8 ldr r2, [r7] | r2 = *(r7);
0x00004cdc str r0, [fp, -0x140] | var_140h = r0;
0x00004ce0 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00004ce4 str r0, [r3] | *(r3) = r0;
0x00004ce8 ldr r3, [fp, -0x158] | r3 = var_158h;
0x00004cec str r2, [r0] | *(r0) = r2;
0x00004cf0 str r3, [r6, 0x38] | *((r6 + 0x38)) = r3;
0x00004cf4 ldr r3, [fp, -0x154] | r3 = var_154h;
0x00004cf8 orr r3, r3, 0x100 | r3 |= 0x100;
0x00004cfc str r3, [r6, 0x50] | *((r6 + 0x50)) = r3;
0x00004d00 ldrh r3, [r6, 0x4c] | r3 = *((r6 + 0x4c));
0x00004d04 add r3, r3, 1 | r3++;
0x00004d08 strh r3, [r6, 0x4c] | *((r6 + 0x4c)) = r3;
0x00004d0c ldr r3, [r6, 0x78] | r3 = *((r6 + 0x78));
0x00004d10 cmp r3, 0 |
| if (r3 == 0) {
0x00004d14 ldrne r1, [pc, 0xa08] | r1 = *((pc + 0xa08));
| }
| if (r3 == 0) {
0x00004d18 ldrne r1, [r4, r1] | r1 = *((r4 + r1));
| }
| if (r3 == 0) {
0x00004d1c strne r2, [r3, 4] | *((r3 + 4)) = r2;
| }
| if (r3 == 0) {
0x00004d20 strne r1, [r3, 8] | *((r3 + 8)) = r1;
| }
0x00004d24 b 0x4a6c | goto label_5;
0x00004d28 ldr ip, [r5, 0x1c] | ip = *((r5 + 0x1c));
0x00004d2c mov r3, 0 | r3 = 0;
| label_6:
0x00004d30 ldr r2, [r5, 0x2c] | r2 = *((r5 + 0x2c));
0x00004d34 add lr, ip, r3, lsl 5 | lr = ip + (r3 << 5);
0x00004d38 cmp r2, r3 |
0x00004d3c bls 0x4c7c |
| }
0x00004d40 ldr r2, [ip, r3, lsl 5] | offset_2 = r3 << 5;
| r2 = *((ip + offset_2));
0x00004d44 cmp r2, 1 |
| if (r2 == 1) {
0x00004d48 bne 0x4da4 |
0x00004d4c ldr r2, [lr, 0x18] | r2 = *((lr + 0x18));
0x00004d50 tst r2, 2 |
| if ((r2 & 2) != 0) {
0x00004d54 bne 0x4da4 | goto label_42;
| }
0x00004d58 ldr r0, [lr, 8] | r0 = *((lr + 8));
0x00004d5c ldr r1, [fp, -0x174] | r1 = var_174h;
0x00004d60 ldr r2, [r6] | r2 = *(r6);
0x00004d64 ldr lr, [lr, 0x10] |
0x00004d68 add r2, r2, r0 | r2 += r0;
0x00004d6c ldr r0, [r1] | r0 = *(r1);
0x00004d70 mov r7, 0x7d | r7 = 0x7d;
0x00004d74 sub r1, r0, 1 | r1 = r0 - 1;
0x00004d78 and r1, r1, r2 | r1 &= r2;
0x00004d7c rsb r0, r0, 0 | r0 -= ;
0x00004d80 and r0, r0, r2 | r0 &= r2;
0x00004d84 add r1, r1, lr | r1 += lr;
0x00004d88 mov r2, 7 | r2 = 7;
0x00004d8c svc 0 | __asm ("svc 0");
0x00004d90 cmn r0, 0x1000 |
| if (r0 <= 0x1000) {
0x00004d94 ldrhi r2, [pc, 0x924] | r2 = *((pc + 0x924));
| }
0x00004d98 rsbhi r0, r0, 0 | __asm ("rsbhi r0, r0, 0");
| if (r0 <= 0x1000) {
0x00004d9c ldrhi r2, [r4, r2] | r2 = *((r4 + r2));
| }
| if (r0 > 0x1000) {
0x00004da0 strhi r0, [r2] | *(r2) = r0;
| goto label_42;
| }
| }
| label_42:
0x00004da4 add r3, r3, 1 | r3++;
0x00004da8 b 0x4d30 | goto label_6;
| label_37:
0x00004dac cmp r2, 0x2f |
| if (r2 != 0x2f) {
0x00004db0 moveq r3, r1 | r3 = r1;
| }
0x00004db4 b 0x4aa0 | goto label_7;
| label_38:
0x00004db8 ldr r3, [fp, -0x148] | r3 = var_148h;
0x00004dbc add r3, r3, 1 | r3++;
0x00004dc0 str r3, [fp, -0x148] | var_148h = r3;
0x00004dc4 b 0x4a04 | goto label_8;
| do {
0x00004dc8 mov r7, r3 | r7 = r3;
| label_41:
0x00004dcc mov r3, r7 | r3 = r7;
0x00004dd0 ldrb r8, [r3], 1 | r8 = *(r3);
| r3++;
0x00004dd4 cmp r8, 0 |
0x00004dd8 cmpne r8, 0x3a | __asm ("cmpne r8, 0x3a");
| if (r8 == 0) {
0x00004ddc beq 0x4df0 | goto label_43;
| }
0x00004de0 cmp r8, 0x20 |
| if (r8 == 0x20) {
0x00004de4 beq 0x4df0 | goto label_43;
| }
0x00004de8 cmp r8, 9 |
0x00004dec bne 0x4dc8 |
| } while (r8 != 9);
| label_43:
0x00004df0 mov r3, 0 | r3 = 0;
0x00004df4 strb r3, [r7] | *(r7) = r3;
0x00004df8 ldr r3, [fp, -0x164] | r3 = var_164h;
0x00004dfc ldr r0, [r3] | r0 = *(r3);
0x00004e00 cmp r0, 0 |
| if (r0 == 0) {
0x00004e04 beq 0x4e24 | goto label_44;
| }
0x00004e08 sub r2, r6, 1 | r2 = r6 - 1;
| do {
0x00004e0c ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x00004e10 cmp r3, 0x2f |
| if (r3 == 0x2f) {
0x00004e14 beq 0x4e60 | goto label_10;
| }
0x00004e18 cmp r3, 0 |
0x00004e1c bne 0x4e0c |
| } while (r3 != 0);
0x00004e20 mov r0, 0x4000000 | r0 = 0x4000000;
| label_44:
0x00004e24 ldr r3, [fp, -0x16c] | r3 = var_16ch;
0x00004e28 mov r2, 0 | r2 = 0;
0x00004e2c str r3, [sp] | *(sp) = r3;
0x00004e30 sub r1, fp, 0x140 | r1 -= var_140h;
0x00004e34 mov r3, r6 | r3 = r6;
0x00004e38 bl 0x4460 | r0 = dl_load_shared_library ();
0x00004e3c cmp r0, 0 |
| if (r0 != 0) {
0x00004e40 bne 0x4eb0 | goto label_45;
| }
0x00004e44 ldr r3, [fp, -0x150] | r3 = var_150h;
0x00004e48 cmp r3, 0 |
| if (r3 == 0) {
0x00004e4c beq 0x4e90 | goto label_46;
| }
0x00004e50 mov r2, r6 | r2 = r6;
0x00004e54 mov r1, sb | r1 = sb;
0x00004e58 mov r0, 1 | r0 = 1;
0x00004e5c bl 0x1bf4 | dl_dprintf ()
| label_10:
0x00004e60 strb r8, [r7] | *(r7) = r8;
| do {
0x00004e64 mov r6, r7 | r6 = r7;
0x00004e68 ldrb r2, [r7], 1 | r2 = *(r7);
| r7++;
0x00004e6c cmp r2, 0x20 |
0x00004e70 cmpne r2, 0x3a | __asm ("cmpne r2, 0x3a");
| if (r2 != 0x20) {
0x00004e74 moveq r3, 1 | r3 = 1;
| }
| if (r2 == 0x20) {
0x00004e78 movne r3, 0 | r3 = 0;
| }
0x00004e7c cmp r2, 9 |
| if (r2 != 9) {
0x00004e80 orreq r3, r3, 1 | r3 |= 1;
| }
0x00004e84 cmp r3, 0 |
0x00004e88 bne 0x4e64 |
| } while (r3 != 0);
0x00004e8c b 0x4c04 | goto label_9;
| label_46:
0x00004e90 ldr r3, [pc, 0x884] | r3 = *(0x5718);
0x00004e94 mov r1, sl | r1 = sl;
0x00004e98 ldr r2, [r4, r3] | r2 = *((r4 + r3));
0x00004e9c mov r0, 2 | r0 = 2;
0x00004ea0 mov r3, r6 | r3 = r6;
0x00004ea4 ldr r2, [r2] | r2 = *(r2);
0x00004ea8 bl 0x1bf4 | dl_dprintf ()
0x00004eac b 0x4e60 | goto label_10;
| label_45:
0x00004eb0 ldr r3, [fp, -0x154] | r3 = var_154h;
0x00004eb4 orr r3, r3, 0x100 | r3 |= 0x100;
0x00004eb8 str r3, [r0, 0x50] | *((r0 + 0x50)) = r3;
0x00004ebc ldr r3, [fp, -0x150] | r3 = var_150h;
0x00004ec0 cmp r3, 0 |
| if (r3 == 0) {
0x00004ec4 beq 0x4e60 | goto label_10;
| }
0x00004ec8 ldrh r3, [r0, 0x4e] | r3 = *((r0 + 0x4e));
0x00004ecc tst r3, 0x10 |
| if ((r3 & 0x10) != 0) {
0x00004ed0 bne 0x4e60 | goto label_10;
| }
0x00004ed4 ldr r3, [pc, 0x840] | r3 = *(0x5718);
0x00004ed8 sub ip, r6, 1 |
0x00004edc ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00004ee0 ldr r2, [r3] | r2 = *(0x5718);
0x00004ee4 sub r2, r2, 1 | r2--;
| label_11:
0x00004ee8 ldrb r1, [r2, 1]! | r1 = *((r2 += 1));
0x00004eec ldrb r3, [ip, 1]! | r3 = *((ip += 1));
0x00004ef0 cmp r1, 0 |
| if (r1 != 0) {
0x00004ef4 bne 0x4f24 | goto label_47;
| }
0x00004ef8 rsb r3, r3, 0 | r3 -= ;
| label_12:
0x00004efc cmp r3, 0 |
| if (r3 == 0) {
0x00004f00 beq 0x4e60 | goto label_10;
| }
0x00004f04 ldr r3, [r0] | r3 = *(r0);
0x00004f08 mov r2, r6 | r2 = r6;
0x00004f0c str r3, [sp] | *(sp) = r3;
0x00004f10 ldr r1, [fp, -0x168] | r1 = var_168h;
0x00004f14 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00004f18 mov r0, 1 | r0 = 1;
0x00004f1c bl 0x1bf4 | dl_dprintf ()
0x00004f20 b 0x4e60 | goto label_10;
| label_47:
0x00004f24 cmp r1, r3 |
| if (r1 == r3) {
0x00004f28 beq 0x4ee8 | goto label_11;
| }
0x00004f2c sub r3, r1, r3 | r3 = r1 - r3;
0x00004f30 b 0x4efc | goto label_12;
| label_40:
0x00004f34 ldr r3, [fp, -0x148] | r3 = var_148h;
0x00004f38 ldr sl, [pc, 0x7e8] | sl = *(0x00005728);
0x00004f3c ldr r8, [r3] | r8 = *(r3);
0x00004f40 ldr r3, [pc, 0x7e4] | r3 = *(0x5728);
0x00004f44 add sl, pc, sl | sl = pc + sl;
0x00004f48 mov r6, 0 | r6 = 0;
0x00004f4c add r3, pc, r3 | r3 = pc + r3;
0x00004f50 str r6, [sl, 8] | *((sl + 8)) = r6;
0x00004f54 str r3, [fp, -0x170] | var_170h = r3;
| do {
0x00004f58 cmp r8, 0 |
0x00004f5c ldr r7, [sl, 8] | r7 = *((sl + 8));
| if (r8 == 0) {
0x00004f60 bne 0x5144 |
0x00004f64 ldr r3, [fp, -0x148] | r3 = var_148h;
0x00004f68 ldr sb, [pc, 0x7c0] | sb = *(0x00005730);
0x00004f6c ldr r8, [r3] | r8 = *(r3);
0x00004f70 add sb, pc, sb | sb = pc + sb;
0x00004f74 ldr r3, [r8, 0x3c] | r3 = *((r8 + 0x3c));
0x00004f78 cmp r3, 1 |
| if (r3 != 1) {
0x00004f7c subeq r3, r7, 1 | r3 = r7 - 1;
| }
| if (r3 != 1) {
0x00004f80 streq r3, [sl, 8] | *((sl + 8)) = r3;
| }
0x00004f84 ldr r0, [sb, 8] | r0 = *((sb + 8));
| if (r3 != 1) {
0x00004f88 ldreq r8, [r8, 0xc] | r8 = *((r8 + 0xc));
| }
0x00004f8c lsl r0, r0, 2 | r0 <<= 2;
0x00004f90 bl 0x243c | r0 = dl_malloc ();
0x00004f94 sub r3, r0, 4 | r3 = r0 - 4;
0x00004f98 str r0, [sb, 4] | *((sb + 4)) = r0;
| label_18:
0x00004f9c cmp r8, 0 |
| if (r8 != 0) {
0x00004fa0 bne 0x5334 | goto label_48;
| }
0x00004fa4 ldr r3, [fp, -0x148] | r3 = var_148h;
0x00004fa8 ldr r3, [r3] | r3 = *(r3);
0x00004fac ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x00004fb0 ldr r3, [pc, 0x77c] |
0x00004fb4 add r3, pc, r3 | r3 = pc + r3;
0x00004fb8 ldr r3, [r3, 8] | r3 = *(0x5738);
0x00004fbc str r3, [fp, -0x164] | var_164h = r3;
| label_19:
0x00004fc0 cmp r1, 0 |
| if (r1 != 0) {
0x00004fc4 bne 0x5368 | goto label_49;
| }
0x00004fc8 cmp r6, 0 |
| if (r6 == 0) {
0x00004fcc bne 0x4ff8 |
0x00004fd0 ldr r3, [fp, -0x140] | r3 = var_140h;
0x00004fd4 mov r2, r5 | r2 = r5;
0x00004fd8 ldr r1, [fp, -0x158] | r1 = var_158h;
0x00004fdc ldr r0, [fp, -0x15c] | r0 = var_15ch;
0x00004fe0 bl 0x345c | fcn_0000345c (r0, r1);
0x00004fe4 add r7, r7, 1 | r7++;
0x00004fe8 ldrh r3, [r0, 0x4c] | r3 = *((r0 + 0x4c));
0x00004fec mov r6, r0 | r6 = r0;
0x00004ff0 add r3, r3, 1 | r3++;
0x00004ff4 strh r3, [r0, 0x4c] | *((r0 + 0x4c)) = r3;
| }
0x00004ff8 mov r3, 3 | r3 = 3;
0x00004ffc lsl r8, r7, 2 | r8 = r7 << 2;
0x00005000 strh r3, [r6, 0x4e] | *((r6 + 0x4e)) = r3;
0x00005004 mov r0, r8 | r0 = r8;
0x00005008 bl 0x243c | dl_malloc ();
0x0000500c ldr r3, [pc, 0x724] |
0x00005010 add r3, pc, r3 | r3 = pc + r3;
0x00005014 str r0, [r3, 0x1c] | *((r3 + 0x1c)) = r0;
0x00005018 ldr r3, [fp, -0x148] | r3 = var_148h;
0x0000501c sub r2, r0, 4 | r2 = r0 - 4;
0x00005020 ldr r3, [r3] | r3 = *(0x5734);
| label_23:
0x00005024 cmp r3, 0 |
| if (r3 != 0) {
0x00005028 bne 0x53c4 | goto label_50;
| }
0x0000502c ldr r3, [fp, -0x148] | r3 = var_148h;
0x00005030 ldr r6, [r3] | r6 = *(r3);
0x00005034 str r0, [r6, 0x40] | *((r6 + 0x40)) = r0;
0x00005038 str r7, [r6, 0x44] | *((r6 + 0x44)) = r7;
0x0000503c mov r0, r8 | r0 = r8;
0x00005040 bl 0x243c | dl_malloc ();
0x00005044 ldr r3, [fp, -0x148] | r3 = var_148h;
0x00005048 ldr r2, [pc, 0x6ec] | r2 = *(0x5738);
0x0000504c ldr r3, [r3] | r3 = *(r3);
0x00005050 ldr r1, [pc, 0x6e8] | r1 = *(0x573c);
0x00005054 ldr r8, [r3, 0xc] | r8 = *((r3 + 0xc));
0x00005058 add r1, pc, r1 | r1 = pc + r1;
0x0000505c add r6, r6, 0x40 | r6 += 0x40;
0x00005060 mov r3, 4 | r3 = 4;
0x00005064 add r2, pc, r2 | r2 = pc + r2;
0x00005068 str r1, [fp, -0x158] | var_158h = r1;
0x0000506c mov sl, r0 | sl = r0;
| label_24:
0x00005070 cmp r8, 0 |
| if (r8 != 0) {
0x00005074 bne 0x53d0 | goto label_51;
| }
0x00005078 mov r0, sl | r0 = sl;
0x0000507c bl 0x1894 | dl_free ();
0x00005080 ldr r3, [fp, -0x150] | r3 = var_150h;
0x00005084 cmp r3, 0 |
| if (r3 == 0) {
0x00005088 movne r0, r8 | r0 = r8;
| }
| if (r3 != 0) {
0x0000508c bne 0x532c | goto label_52;
| }
0x00005090 ldr r3, [pc, 0x6ac] | r3 = *(0x5740);
0x00005094 add r3, pc, r3 | r3 = pc + r3;
0x00005098 ldrb r8, [r3, 0x14] | r8 = *((r3 + 0x14));
0x0000509c bl 0x2b64 | init_tls ();
0x000050a0 ldr r3, [pc, 0x678] | r3 = *(0x571c);
0x000050a4 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x000050a8 mov r7, r0 | r7 = r0;
0x000050ac ldr r0, [r3] | r0 = *(0x571c);
0x000050b0 cmp r0, 0 |
| if (r0 != 0) {
0x000050b4 beq 0x50d0 |
0x000050b8 ldr r2, [fp, -0x154] | r2 = var_154h;
0x000050bc mov r1, r6 | r1 = r6;
0x000050c0 bl 0x22f4 | r0 = dl_fixup ();
0x000050c4 cmp r0, 0 |
| if (r0 == 0) {
0x000050c8 mvnne r0, 0 | r0 = ~0;
| }
| if (r0 != 0) {
0x000050cc bne 0x532c | goto label_52;
| }
| }
0x000050d0 ldr r3, [fp, -0x148] | r3 = var_148h;
0x000050d4 ldr sb, [r3] | sb = *(r3);
| label_26:
0x000050d8 cmp sb, 0 |
| if (sb != 0) {
0x000050dc bne 0x5460 | goto label_53;
| }
0x000050e0 cmp r8, 0 |
| if (r8 == 0) {
0x000050e4 bne 0x510c |
0x000050e8 ldr r3, [pc, 0x60c] |
0x000050ec ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x000050f0 ldr r3, [r3] | r3 = *(0x56f8);
0x000050f4 cmp r3, 0 |
| if (r3 == 0) {
0x000050f8 ldrne r3, [pc, 0x648] | r3 = *((pc + 0x648));
| }
| if (r3 == 0) {
0x000050fc ldrne r2, [r4, r3] | r2 = *((r4 + r3));
| }
| if (r3 == 0) {
0x00005100 ldrne r3, [r2] | r3 = *(r2);
| }
| if (r3 == 0) {
0x00005104 addne r3, r3, 1 | r3++;
| }
| if (r3 != 0) {
0x00005108 strne r3, [r2] | *(r2) = r3;
| goto label_54;
| }
| }
| label_54:
0x0000510c mov r0, r7 | r0 = r7;
0x00005110 bl 0x15ac | dl_allocate_tls_init ();
0x00005114 ldr r3, [pc, 0x630] | r3 = *(0x5748);
0x00005118 add r3, pc, r3 | r3 = pc + r3;
0x0000511c ldrb r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00005120 cmp r3, 0 |
| if (r3 != 0) {
0x00005124 bne 0x547c | goto label_55;
| }
0x00005128 mov r0, r7 | r0 = r7;
0x0000512c ldr r7, [pc, 0x61c] | r7 = *(0x574c);
0x00005130 svc 0 | __asm ("svc 0");
0x00005134 cmn r0, 0x1000 |
| if (r0 < 0x1000) {
0x00005138 bls 0x547c | goto label_55;
| }
0x0000513c mov r0, 0x1e | r0 = 0x1e;
0x00005140 b 0x532c | goto label_52;
| }
0x00005144 ldr r3, [pc, 0x608] | r3 = *(0x5750);
0x00005148 ldr sb, [r8, 8] | sb = *((r8 + 8));
0x0000514c add r3, pc, r3 | r3 = pc + r3;
0x00005150 str r3, [fp, -0x164] | var_164h = r3;
0x00005154 ldr r3, [pc, 0x5fc] | r3 = "_hash";
0x00005158 add r7, r7, 1 | r7++;
0x0000515c add r3, pc, r3 | r3 = pc + r3;
0x00005160 add sb, sb, 8 | sb += 8;
0x00005164 str r7, [sl, 8] | *((sl + 8)) = r7;
0x00005168 str r3, [fp, -0x168] | var_168h = r3;
| label_16:
0x0000516c ldr r3, [sb, -8] | r3 = *((sb - 8));
0x00005170 cmp r3, 0 |
| if (r3 != 0) {
0x00005174 ldreq r8, [r8, 0xc] | r8 = *((r8 + 0xc));
| }
0x00005178 beq 0x4f58 |
| } while (r3 == 0);
0x0000517c cmp r3, 1 |
| if (r3 != 1) {
0x00005180 bne 0x5300 | goto label_56;
| }
0x00005184 ldr r7, [r8, 0x80] | r7 = *((r8 + 0x80));
0x00005188 ldr r3, [sb, -4] | r3 = *((sb - 4));
0x0000518c add r7, r7, r3 | r7 += r3;
0x00005190 sub r2, r7, 1 | r2 = r7 - 1;
| do {
0x00005194 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x00005198 cmp r3, 0 |
0x0000519c bne 0x5194 |
| } while (r3 != 0);
0x000051a0 mov r0, r3 | r0 = r3;
| label_13:
0x000051a4 cmp r2, r7 |
0x000051a8 mov r3, r2 | r3 = r2;
0x000051ac sub r1, r2, 1 | r1 = r2 - 1;
| if (r2 == r7) {
0x000051b0 beq 0x51e4 | goto label_57;
| }
0x000051b4 ldrb r3, [r2, -1] | r3 = *((r2 - 1));
0x000051b8 cmp r3, 0x2f |
| if (r3 == 0x2f) {
0x000051bc beq 0x52a4 | goto label_58;
| }
| do {
0x000051c0 mov r3, r1 | r3 = r1;
0x000051c4 cmp r3, r7 |
0x000051c8 sub r1, r1, 1 | r1--;
| if (r3 == r7) {
0x000051cc beq 0x51e4 | goto label_57;
| }
0x000051d0 ldrb r2, [r3, -1] | r2 = *((r3 - 1));
0x000051d4 cmp r2, 0x2f |
0x000051d8 bne 0x51c0 |
| } while (r2 != 0x2f);
0x000051dc cmp r1, r7 |
| if (r1 != r7) {
0x000051e0 moveq r3, r7 | r3 = r7;
| }
| label_57:
0x000051e4 ldr r2, [fp, -0x170] | r2 = var_170h;
0x000051e8 sub r3, r3, 1 | r3--;
0x000051ec sub r0, r2, 1 | r0 = r2 - 1;
| do {
0x000051f0 ldrb r1, [r3, 1]! | r1 = *((r3 += 1));
0x000051f4 ldrb r2, [r0, 1]! | r2 = *((r0 += 1));
0x000051f8 cmp r1, 0 |
| if (r1 == 0) {
0x000051fc bne 0x52b0 |
0x00005200 rsb r2, r2, 0 | r2 -= ;
| label_14:
0x00005204 cmp r2, 0 |
| if (r2 != 0) {
0x00005208 bne 0x52c0 | goto label_59;
| }
0x0000520c cmp r6, 0 |
0x00005210 ldrhne r3, [r6, 0x4e] | __asm ("ldrhne r3, [r6, 0x4e]");
| if (r6 == 0) {
0x00005214 orrne r3, r3, 0x10 | r3 |= 0x10;
| }
0x00005218 strhne r3, [r6, 0x4e] | __asm ("strhne r3, [r6, 0x4e]");
| if (r6 == 0) {
0x0000521c bne 0x5238 |
0x00005220 ldr r3, [fp, -0x140] | r3 = var_140h;
0x00005224 mov r2, r5 | r2 = r5;
0x00005228 ldr r1, [fp, -0x158] | r1 = var_158h;
0x0000522c ldr r0, [fp, -0x15c] | r0 = var_15ch;
0x00005230 bl 0x345c | r0 = fcn_0000345c (r0, r1);
0x00005234 mov r6, r0 | r6 = r0;
| }
0x00005238 ldrh r3, [r6, 0x4c] | r3 = *((r6 + 0x4c));
0x0000523c mov r0, r6 | r0 = r6;
0x00005240 add r3, r3, 1 | r3++;
0x00005244 strh r3, [r6, 0x4c] | *((r6 + 0x4c)) = r3;
| label_15:
0x00005248 ldr r2, [r8, 0x5c] | r2 = *((r8 + 0x5c));
0x0000524c sub sp, sp, 0x10 |
0x00005250 add r3, sp, 8 | r3 += var_8h;
0x00005254 str r0, [sp, 0xc] | var_ch = r0;
0x00005258 str r2, [sp, 8] | var_8h = r2;
0x0000525c str r3, [r8, 0x5c] | *((r8 + 0x5c)) = r3;
0x00005260 ldr r3, [fp, -0x154] | r3 = var_154h;
0x00005264 orr r3, r3, 0x100 | r3 |= 0x100;
0x00005268 str r3, [r0, 0x50] | *((r0 + 0x50)) = r3;
0x0000526c ldr r3, [fp, -0x150] | r3 = var_150h;
0x00005270 cmp r3, 0 |
| if (r3 == 0) {
0x00005274 beq 0x5300 | goto label_56;
| }
0x00005278 ldrh r3, [r0, 0x4e] | r3 = *((r0 + 0x4e));
0x0000527c tst r3, 0x10 |
| if ((r3 & 0x10) != 0) {
0x00005280 bne 0x5300 | goto label_56;
| }
0x00005284 ldr r3, [r0] | r3 = *(r0);
0x00005288 mov r2, r7 | r2 = r7;
0x0000528c str r3, [sp] | *(sp) = r3;
0x00005290 ldr r1, [fp, -0x164] | r1 = var_164h;
0x00005294 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00005298 mov r0, 1 | r0 = 1;
0x0000529c bl 0x1bf4 | dl_dprintf ()
0x000052a0 b 0x5300 | goto label_56;
| label_58:
0x000052a4 mov r2, r1 | r2 = r1;
0x000052a8 strb r0, [r1] | *(r1) = r0;
0x000052ac b 0x51a4 | goto label_13;
| }
0x000052b0 cmp r1, r2 |
0x000052b4 beq 0x51f0 |
| } while (r1 == r2);
0x000052b8 sub r2, r1, r2 | r2 = r1 - r2;
0x000052bc b 0x5204 | goto label_14;
| label_59:
0x000052c0 ldr r3, [fp, -0x16c] | r3 = var_16ch;
0x000052c4 mov r2, r8 | r2 = r8;
0x000052c8 str r3, [sp] | *(sp) = r3;
0x000052cc sub r1, fp, 0x140 | r1 -= var_140h;
0x000052d0 mov r3, r7 | r3 = r7;
0x000052d4 mov r0, 0 | r0 = 0;
0x000052d8 bl 0x4460 | r0 = dl_load_shared_library ();
0x000052dc cmp r0, 0 |
| if (r0 != 0) {
0x000052e0 bne 0x5248 | goto label_15;
| }
0x000052e4 ldr r3, [fp, -0x150] | r3 = var_150h;
0x000052e8 cmp r3, 0 |
| if (r3 != 0) {
0x000052ec beq 0x5308 |
0x000052f0 mov r2, r7 | r2 = r7;
0x000052f4 ldr r1, [fp, -0x168] | r1 = var_168h;
0x000052f8 mov r0, 1 | r0 = 1;
0x000052fc bl 0x1bf4 | dl_dprintf ()
| label_56:
0x00005300 add sb, sb, 8 | sb += 8;
0x00005304 b 0x516c | goto label_16;
| }
0x00005308 ldr r3, [pc, 0x40c] | r3 = *(0x5718);
0x0000530c ldr r1, [pc, 0x448] | r1 = *(0x5758);
0x00005310 ldr r2, [r4, r3] | r2 = *((r4 + r3));
0x00005314 mov r0, 2 | r0 = 2;
0x00005318 mov r3, r7 | r3 = r7;
0x0000531c ldr r2, [r2] | r2 = *(r2);
0x00005320 add r1, pc, r1 | r1 = pc + r1;
0x00005324 bl 0x1bf4 | dl_dprintf ()
0x00005328 mov r0, 0x10 | r0 = 0x10;
| label_52:
0x0000532c mov r7, 1 | r7 = 1;
0x00005330 b 0x47c0 | goto label_17;
| label_48:
0x00005334 str r8, [r3, 4]! | *((r3 += 4)) = r8;
0x00005338 ldr r8, [r8, 0xc] | r8 = *((r8 + 0xc));
0x0000533c b 0x4f9c | goto label_18;
| do {
0x00005340 mov r2, r3 | r2 = r3;
| label_20:
0x00005344 ldr ip, [r0, r2, lsl 2] | offset_3 = r2 << 2;
| ip = *((r0 + offset_3));
0x00005348 add r3, r2, 1 | r3 = r2 + 1;
0x0000534c cmp ip, r1 |
0x00005350 bne 0x5340 |
| } while (ip != r1);
| do {
0x00005354 ldr ip, [fp, -0x164] | ip = var_164h;
0x00005358 cmp ip, r3 |
| if (ip <= r3) {
0x0000535c bhi 0x5370 |
0x00005360 ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x00005364 b 0x4fc0 | goto label_19;
| label_49:
0x00005368 mov r2, 0 | r2 = 0;
0x0000536c b 0x5344 | goto label_20;
| }
0x00005370 ldr lr, [r0, r3, lsl 2] |
0x00005374 ldr ip, [lr, 0x5c] | ip = *((lr + 0x5c));
| label_22:
0x00005378 cmp ip, 0 |
| if (ip != 0) {
0x0000537c beq 0x53a8 |
0x00005380 ldr r8, [ip, 4] | r8 = *((ip + 4));
0x00005384 cmp r8, r1 |
| if (r8 != r1) {
0x00005388 bne 0x53bc | goto label_60;
| }
0x0000538c lsl r8, r2, 2 | r8 = r2 << 2;
0x00005390 add ip, r0, r3, lsl 2 |
0x00005394 add sl, r0, r8 | sl = r0 + r8;
| label_21:
0x00005398 cmp sl, ip |
| if (sl != ip) {
0x0000539c bne 0x53b0 | goto label_61;
| }
0x000053a0 add r2, r2, 1 | r2++;
0x000053a4 str lr, [r0, r8] |
| }
0x000053a8 add r3, r3, 1 | r3++;
0x000053ac b 0x5354 |
| } while (1);
| label_61:
0x000053b0 ldr sb, [ip, -4] | sb = *((ip - 4));
0x000053b4 str sb, [ip], -4 | *(ip) = sb;
| ip += -4;
0x000053b8 b 0x5398 | goto label_21;
| label_60:
0x000053bc ldr ip, [ip] | ip = *(ip);
0x000053c0 b 0x5378 | goto label_22;
| label_50:
0x000053c4 str r3, [r2, 4]! | *((r2 += 4)) = r3;
0x000053c8 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000053cc b 0x5024 | goto label_23;
| label_51:
0x000053d0 ldr r1, [r2, 0x1c] | r1 = *((r2 + 0x1c));
0x000053d4 mov r0, sl | r0 = sl;
0x000053d8 ldr r1, [r1, r3] | r1 = *((r1 + r3));
0x000053dc str r2, [fp, -0x168] | var_168h = r2;
0x000053e0 str r3, [fp, -0x164] | var_164h = r3;
0x000053e4 bl 0x122c | r0 = fcn_0000122c (r0, r1);
0x000053e8 lsl sb, r0, 2 | sb = r0 << 2;
0x000053ec str r0, [fp, -0x15c] | var_15ch = r0;
0x000053f0 mov r0, sb | r0 = sb;
0x000053f4 bl 0x243c | dl_malloc ();
0x000053f8 ldr r1, [fp, -0x15c] | r1 = var_15ch;
0x000053fc ldr r3, [fp, -0x164] | r3 = var_164h;
0x00005400 ldr r2, [fp, -0x168] | r2 = var_168h;
0x00005404 str r1, [r8, 0x44] | *((r8 + 0x44)) = r1;
0x00005408 sub r1, sl, 1 | r1 = sl - 1;
0x0000540c add sb, r0, sb | sb = r0 + sb;
0x00005410 str r0, [r8, 0x40] | *((r8 + 0x40)) = r0;
| do {
0x00005414 cmp sb, r0 |
| if (sb == r0) {
0x00005418 bne 0x543c |
0x0000541c ldr r1, [fp, -0x158] | r1 = var_158h;
0x00005420 ldr lr, [r1, 0x1c] |
0x00005424 mov r1, 1 | r1 = 1;
| label_25:
0x00005428 cmp r7, r1 |
| if (r7 > r1) {
0x0000542c bhi 0x5448 | goto label_62;
| }
0x00005430 ldr r8, [r8, 0xc] | r8 = *((r8 + 0xc));
0x00005434 add r3, r3, 4 | r3 += 4;
0x00005438 b 0x5070 | goto label_24;
| }
0x0000543c ldrb ip, [r1, 1]! | ip = *((r1 += 1));
0x00005440 strb ip, [r0], 1 | *(r0) = ip;
| r0++;
0x00005444 b 0x5414 |
| } while (1);
| label_62:
0x00005448 ldr ip, [lr, r1, lsl 2] | offset_4 = r1 << 2;
| ip = *((lr + offset_4));
0x0000544c add r1, r1, 1 | r1++;
0x00005450 ldrh r0, [ip, 0x4e] | r0 = *((ip + 0x4e));
0x00005454 bic r0, r0, 0x20 | r0 = BIT_MASK (r0, 0x20);
0x00005458 strh r0, [ip, 0x4e] | *((ip + 0x4e)) = r0;
0x0000545c b 0x5428 | goto label_25;
| label_53:
0x00005460 ldr r3, [sb, 0x104] | r3 = *((sb + 0x104));
0x00005464 cmp r3, 0 |
| if (r3 != 0) {
0x00005468 beq 0x5474 |
0x0000546c mov r0, sb | r0 = sb;
0x00005470 bl 0x31b8 | dl_protect_relro ();
| }
0x00005474 ldr sb, [sb, 0xc] | sb = *((sb + 0xc));
0x00005478 b 0x50d8 | goto label_26;
| label_55:
0x0000547c ldr r0, [pc, 0x2dc] | r0 = *(0x575c);
0x00005480 mov r3, 0 | r3 = 0;
0x00005484 str r3, [sp] | *(sp) = r3;
0x00005488 mov r2, r3 | r2 = r3;
0x0000548c mov r1, r6 | r1 = r6;
0x00005490 add r0, pc, r0 | r0 = pc + r0;
0x00005494 bl 0x1988 | r0 = dl_find_hash ();
0x00005498 cmp r0, 0 |
| if (r0 == 0) {
0x0000549c ldrne r3, [fp, -0x14c] | r3 = var_14ch;
| }
| if (r0 == 0) {
0x000054a0 strne r3, [r0] | *(r0) = r3;
| }
0x000054a4 ldr r3, [fp, -0x148] | r3 = var_148h;
0x000054a8 ldr r3, [r3] | r3 = *(r3);
| do {
0x000054ac cmp r3, 0 |
| if (r3 == 0) {
0x000054b0 bne 0x55e0 |
0x000054b4 ldr r3, [fp, -0x160] | r3 = var_160h;
0x000054b8 mov r2, 1 | r2 = 1;
0x000054bc ldr r3, [r3] | r3 = *(r3);
0x000054c0 str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x000054c4 bl 0x1220 | dl_debug_state ();
0x000054c8 ldr r3, [fp, -0x148] | r3 = var_148h;
0x000054cc ldr r3, [r3] | r3 = *(r3);
0x000054d0 ldr r7, [r3, 0xec] | r7 = *((r3 + 0xec));
0x000054d4 cmp r7, 0 |
| if (r7 != 0) {
0x000054d8 bne 0x5684 | goto label_63;
| }
| label_28:
0x000054dc ldr r3, [pc, 0x280] | r3 = *(0x5760);
0x000054e0 ldr r8, [pc, 0x280] | r8 = *(0x5764);
0x000054e4 add r3, pc, r3 | r3 = pc + r3;
0x000054e8 ldr r7, [r3, 8] | r7 = *(0x5768);
0x000054ec add r8, pc, r8 | r8 = pc + r8;
0x000054f0 lsl sb, r7, 2 | sb = r7 << 2;
| label_30:
0x000054f4 cmp r7, 0 |
| if (r7 != 0) {
0x000054f8 bne 0x5794 | goto label_64;
| }
0x000054fc ldr r0, [pc, 0x268] | r0 = *(0x5768);
0x00005500 mov r2, r7 | r2 = r7;
0x00005504 mov r1, r6 | r1 = r6;
0x00005508 str r7, [sp] | *(sp) = r7;
0x0000550c mov r3, 1 | r3 = 1;
0x00005510 add r0, pc, r0 | r0 = pc + r0;
0x00005514 bl 0x1988 | dl_find_hash ();
0x00005518 ldr r3, [pc, 0x250] | r3 = *(0x576c);
0x0000551c mov r2, r7 | r2 = r7;
0x00005520 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00005524 mov r1, r6 | r1 = r6;
0x00005528 str r0, [r3] | *(r3) = r0;
0x0000552c ldr r0, [pc, 0x240] | r0 = *(0x5770);
0x00005530 str r7, [sp] | *(sp) = r7;
0x00005534 mov r3, 1 | r3 = 1;
0x00005538 add r0, pc, r0 | r0 = pc + r0;
0x0000553c bl 0x1988 | dl_find_hash ();
0x00005540 ldr r3, [pc, 0x230] | r3 = *(0x5774);
0x00005544 mov r2, r7 | r2 = r7;
0x00005548 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0000554c mov r1, r6 | r1 = r6;
0x00005550 str r0, [r3] | *(r3) = r0;
0x00005554 ldr r0, [pc, 0x220] | r0 = *(0x5778);
0x00005558 str r7, [sp] | *(sp) = r7;
0x0000555c mov r3, 1 | r3 = 1;
0x00005560 add r0, pc, r0 | r0 = pc + r0;
0x00005564 bl 0x1988 | dl_find_hash ();
0x00005568 ldr r3, [pc, 0x210] | r3 = *(0x577c);
0x0000556c mov r2, r7 | r2 = r7;
0x00005570 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00005574 mov r1, r6 | r1 = r6;
0x00005578 str r0, [r3] | *(r3) = r0;
0x0000557c ldr r0, [pc, 0x200] | r0 = *(0x5780);
0x00005580 str r7, [sp] | *(sp) = r7;
0x00005584 mov r3, 1 | r3 = 1;
0x00005588 add r0, pc, r0 | r0 = pc + r0;
0x0000558c bl 0x1988 | dl_find_hash ();
0x00005590 ldr r3, [pc, 0x1f0] | r3 = *(0x5784);
0x00005594 mov r2, r7 | r2 = r7;
0x00005598 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0000559c mov r1, r6 | r1 = r6;
0x000055a0 str r0, [r3] | *(r3) = r0;
0x000055a4 ldr r0, [pc, 0x1e0] | r0 = *(0x5788);
0x000055a8 str r7, [sp] | *(sp) = r7;
0x000055ac mov r3, 1 | r3 = 1;
0x000055b0 add r0, pc, r0 | r0 = pc + r0;
0x000055b4 bl 0x1988 | dl_find_hash ();
0x000055b8 ldr r3, [pc, 0x1d0] |
0x000055bc ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x000055c0 str r0, [r3] | *(r3) = r0;
0x000055c4 ldr r3, [fp, -0x160] | r3 = var_160h;
0x000055c8 ldr r3, [r3] | r3 = *(0x578c);
0x000055cc str r7, [r3, 0xc] | *((r3 + 0xc)) = r7;
0x000055d0 bl 0x1220 | dl_debug_state ();
0x000055d4 ldr r0, [r5, 0x4c] | r0 = *((r5 + 0x4c));
0x000055d8 sub sp, fp, 0x20 |
0x000055dc pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x000055e0 ldr r8, [r3, 0xfc] | r8 = *((r3 + 0xfc));
0x000055e4 mov ip, 0 |
| label_27:
0x000055e8 ldr r2, [r3, 0xf8] | r2 = *((r3 + 0xf8));
0x000055ec cmp r2, ip |
| if (r2 > ip) {
0x000055f0 ldrls r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| }
0x000055f4 bls 0x54ac |
| } while (r2 < ip);
0x000055f8 ldr r2, [r8, ip, lsl 5] | offset_5 = ip << 5;
| r2 = *((r8 + offset_5));
0x000055fc cmp r2, 1 |
| if (r2 == 1) {
0x00005600 bne 0x567c |
0x00005604 add r0, r8, ip, lsl 5 | r0 = r8 + (ip << 5);
0x00005608 ldr r2, [r0, 0x18] | r2 = *((r0 + 0x18));
0x0000560c tst r2, 2 |
| if ((r2 & 2) != 0) {
0x00005610 bne 0x567c | goto label_65;
| }
0x00005614 ldr r1, [r3, 0xc4] | r1 = *((r3 + 0xc4));
0x00005618 cmp r1, 0 |
| if (r1 == 0) {
0x0000561c beq 0x567c | goto label_65;
| }
0x00005620 ldr r1, [pc, 0x88] | r1 = *(0x56ac);
0x00005624 ldr sl, [r0, 8] | sl = *((r0 + 8));
0x00005628 ldr r1, [r4, r1] | r1 = *((r4 + r1));
0x0000562c ldr sb, [r0, 0x10] | sb = *((r0 + 0x10));
0x00005630 ldr lr, [r1] | lr = *(0x56ac);
0x00005634 ldr r0, [r3] | r0 = *(r3);
0x00005638 lsl r7, r2, 0x1d | r7 = r2 << 0x1d;
0x0000563c sub r1, lr, 1 | r1 = lr - 1;
0x00005640 lsl r2, r2, 2 | r2 <<= 2;
0x00005644 and r1, r1, sl | r1 &= sl;
0x00005648 add r0, sl, r0 | r0 = sl + r0;
0x0000564c rsb lr, lr, 0 | lr -= ;
0x00005650 and r2, r2, 4 | r2 &= 4;
0x00005654 orr r2, r2, r7, lsr 31 | r2 |= (r7 >> 31);
0x00005658 and r0, r0, lr | r0 &= lr;
0x0000565c add r1, r1, sb | r1 += sb;
0x00005660 mov r7, 0x7d | r7 = 0x7d;
0x00005664 svc 0 | __asm ("svc 0");
0x00005668 cmn r0, 0x1000 |
| if (r0 <= 0x1000) {
0x0000566c ldrhi r2, [pc, 0x4c] | r2 = *((pc + 0x4c));
| }
0x00005670 rsbhi r0, r0, 0 | __asm ("rsbhi r0, r0, 0");
| if (r0 <= 0x1000) {
0x00005674 ldrhi r2, [r4, r2] | r2 = *((r4 + r2));
| }
| if (r0 > 0x1000) {
0x00005678 strhi r0, [r2] | *(r2) = r0;
| goto label_65;
| }
| }
| label_65:
0x0000567c add ip, ip, 1 |
0x00005680 b 0x55e8 | goto label_27;
| label_63:
0x00005684 ldr r2, [r3] | r2 = *(r3);
0x00005688 ldr r8, [r3, 0xf0] | r8 = *((r3 + 0xf0));
0x0000568c add r7, r7, r2 | r7 += r2;
0x00005690 bic r8, r8, 3 | r8 = BIT_MASK (r8, 3);
0x00005694 add r8, r8, r7 | r8 += r7;
| label_29:
0x00005698 cmp r8, r7 |
| if (r8 == r7) {
0x0000569c beq 0x54dc | goto label_28;
| }
0x000056a0 ldr r3, [r7], 4 | r3 = *(r7);
| r7 += 4;
0x000056a4 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x000056a8 b 0x5698 | goto label_29;
| label_64:
0x00005794 ldr r3, [r8, 4] | r3 = *((r8 + 4));
0x00005798 add r3, r3, sb | r3 += sb;
0x0000579c ldr sl, [r3, -4] | sl = *((r3 - 4));
0x000057a0 mov r3, 0 | r3 = 0;
0x000057a4 str r3, [sl, 0x5c] | *((sl + 0x5c)) = r3;
0x000057a8 ldrh r3, [sl, 0x4e] | r3 = *((sl + 0x4e));
0x000057ac tst r3, 4 |
| if ((r3 & 4) == 0) {
0x000057b0 bne 0x57dc |
0x000057b4 orr r3, r3, 4 | r3 |= 4;
0x000057b8 strh r3, [sl, 0x4e] | *((sl + 0x4e)) = r3;
0x000057bc ldr r3, [sl, 0x9c] | r3 = *((sl + 0x9c));
0x000057c0 cmp r3, 0 |
| if (r3 != 0) {
0x000057c4 beq 0x57d4 |
0x000057c8 ldr r1, [sl] | r1 = *(sl);
0x000057cc add r3, r3, r1 | r3 += r1;
0x000057d0 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
| }
0x000057d4 mov r0, sl | r0 = sl;
0x000057d8 bl 0x16e8 | dl_run_init_array ();
| }
0x000057dc sub r7, r7, 1 | r7--;
0x000057e0 sub sb, sb, 4 | sb -= 4;
0x000057e4 b 0x54f4 | goto label_30;
| }
; 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 @ 0x2080 */
| #include <stdint.h>
|
; (fcn) sym._dl_linux_resolver () | void dl_linux_resolver (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_14h_2;
| int32_t var_14h;
| r0 = arg1;
| r1 = arg2;
0x00002080 push {r4, r5, r6, r7, fp, lr} |
0x00002084 ldr r4, [pc, 0xa8] | r4 = *(0x2130);
0x00002088 add fp, sp, 0x14 |
0x0000208c sub sp, sp, 8 |
0x00002090 mov r2, r0 | r2 = r0;
0x00002094 ldr r0, [r0, 0xc8] | r0 = *((r0 + 0xc8));
0x00002098 ldr ip, [r2, 0x84] | ip = *((r2 + 0x84));
0x0000209c add r3, r0, r1, lsl 3 | r3 = r0 + (r1 << 3);
0x000020a0 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000020a4 ldr r5, [r2, 0x80] | r5 = *((r2 + 0x80));
0x000020a8 lsr r3, r3, 8 | r3 >>= 8;
0x000020ac ldr r3, [ip, r3, lsl 4] | offset_0 = r3 << 4;
| r3 = *((ip + offset_0));
0x000020b0 add r4, pc, r4 | r4 = pc + r4;
0x000020b4 add r5, r5, r3 | r5 += r3;
0x000020b8 ldr r3, [pc, 0x78] | r3 = *(0x2134);
0x000020bc ldr r7, [r0, r1, lsl 3] | offset_1 = r1 << 3;
| r7 = *((r0 + offset_1));
0x000020c0 ldr r3, [r4, r3] | r3 = *(0x2130);
0x000020c4 ldr r6, [r2] | r6 = *(r2);
0x000020c8 ldr r1, [r3] |
0x000020cc mov r3, 0 | r3 = 0;
0x000020d0 str r3, [sp] | *(sp) = r3;
0x000020d4 add r1, r1, 0x40 | r1 = 0x2170;
0x000020d8 mov r3, 1 | r3 = 1;
0x000020dc mov r0, r5 | r0 = r5;
0x000020e0 bl 0x1988 | r0 = dl_find_hash ();
0x000020e4 subs r3, r0, 0 | r3 = r0 - 0;
| if (r3 == r0) {
0x000020e8 bne 0x2128 |
0x000020ec ldr r3, [pc, 0x48] | r3 = *(0x2138);
0x000020f0 ldr r1, [pc, 0x48] | r1 = *(0x213c);
0x000020f4 ldr r2, [r4, r3] | r2 = *((r4 + r3));
0x000020f8 add r1, pc, r1 | r1 = pc + r1;
0x000020fc mov r3, r5 | r3 = r5;
0x00002100 ldr r2, [r2] | r2 = *(r2);
0x00002104 mov r0, 2 | r0 = 2;
0x00002108 bl 0x1bf4 | dl_dprintf ()
0x0000210c mov r0, 1 | r0 = 1;
0x00002110 mov r7, r0 | r7 = r0;
0x00002114 svc 0 | __asm ("svc 0");
0x00002118 ldr r3, [pc, 0x24] | r3 = *(0x2140);
0x0000211c rsb r0, r0, 0 | r0 -= ;
0x00002120 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00002124 str r0, [r3] | *(r3) = r0;
| }
0x00002128 str r3, [r7, r6] | *((r7 + r6)) = r3;
0x0000212c sub sp, fp, 0x14 |
0x00002130 pop {r4, r5, r6, r7, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/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 @ 0x243c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym._dl_malloc () | void dl_malloc (uint32_t arg1) {
| int32_t var_14h_2;
| int32_t var_14h;
| r0 = arg1;
0x0000243c push {r4, r5, r6, r7, fp, lr} |
0x00002440 ldr r6, [pc, 0x10c] | r6 = *(0x2550);
0x00002444 ldr r3, [pc, 0x10c] | r3 = *(0x2554);
0x00002448 add r6, pc, r6 | r6 = pc + r6;
0x0000244c ldr r3, [r6, r3] |
0x00002450 add fp, sp, 0x14 |
0x00002454 ldr r3, [r3] | r3 = *(0x2550);
0x00002458 cmp r3, 0 |
| if (r3 != 0) {
0x0000245c beq 0x246c |
0x00002460 sub sp, fp, 0x14 |
0x00002464 pop {r4, r5, r6, r7, fp, lr} |
0x00002468 bx r3 | return uint32_t (*r3)() ();
| }
0x0000246c ldr r3, [pc, 0xe8] | r3 = *(0x2558);
0x00002470 ldr r1, [pc, 0xe8] |
0x00002474 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00002478 add r1, pc, r1 | r1 = pc + r1;
0x0000247c ldr r2, [r3] | r2 = *(0x2558);
0x00002480 ldr r3, [r1, 0xc] | r3 = *(0x2568);
0x00002484 ldr r1, [r1, 0x10] | r1 = *(0x256c);
0x00002488 mov ip, r0 |
0x0000248c sub r3, r3, r1 | r3 -= r1;
0x00002490 add r3, r3, r0 | r3 += r0;
0x00002494 cmp r3, r2 |
| if (r3 >= r2) {
0x00002498 bls 0x2534 |
0x0000249c cmp r0, r2 |
| if (r0 >= r2) {
0x000024a0 sublo r1, r2, 1 | r1 = r2 - 1;
| }
| if (r0 >= r2) {
0x000024a4 addlo r1, r1, r0 | r1 += r0;
| }
| if (r0 < r2) {
0x000024a8 movhs r1, r0 | r1 = r0;
| }
0x000024ac mov r0, 0 | r0 = 0;
| if (r0 >= r2) {
0x000024b0 andlo r1, r1, r2 | r1 &= r2;
| }
0x000024b4 mov r3, 0x22 | r3 = 0x22;
0x000024b8 mov r2, 3 | r2 = 3;
0x000024bc mvn r4, 0 | r4 = ~0;
0x000024c0 mov r5, r0 | r5 = r0;
0x000024c4 mov r7, 0xc0 | r7 = 0xc0;
0x000024c8 svc 0 | __asm ("svc 0");
0x000024cc cmn r0, 0x1000 |
| if (r0 <= 0x1000) {
0x000024d0 ldrhi r3, [pc, 0x8c] | r3 = *((pc + 0x8c));
| }
0x000024d4 rsbhi r0, r0, 0 | __asm ("rsbhi r0, r0, 0");
| if (r0 <= 0x1000) {
0x000024d8 ldrhi r3, [r6, r3] | r3 = *((r6 + r3));
| }
| if (r0 <= 0x1000) {
0x000024dc strhi r0, [r3] | *(r3) = r0;
| }
| if (r0 <= 0x1000) {
0x000024e0 movhi r0, r4 | r0 = r4;
| }
0x000024e4 ldr r3, [pc, 0x7c] | r3 = *(0x2564);
0x000024e8 cmn r0, 1 |
0x000024ec add r3, pc, r3 | r3 = pc + r3;
0x000024f0 str r0, [r3, 0xc] | *((r3 + 0xc)) = r0;
0x000024f4 str r0, [r3, 0x10] | *((r3 + 0x10)) = r0;
| if (r0 != 1) {
0x000024f8 bne 0x2534 | goto label_0;
| }
0x000024fc ldr r3, [pc, 0x68] | r3 = *(0x2568);
0x00002500 ldr r1, [pc, 0x68] | r1 = *(0x256c);
0x00002504 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00002508 add r1, pc, r1 | r1 = pc + r1;
0x0000250c ldr r2, [r3] | r2 = *(0x2568);
0x00002510 mov r0, 2 | r0 = 2;
0x00002514 bl 0x1bf4 | dl_dprintf ()
0x00002518 mov r7, 1 | r7 = 1;
0x0000251c mov r0, 0x14 | r0 = 0x14;
0x00002520 svc 0 | __asm ("svc 0");
0x00002524 ldr r3, [pc, 0x38] | r3 = *(0x2560);
0x00002528 rsb r0, r0, 0 | r0 -= ;
0x0000252c ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00002530 str r0, [r3] | *(r3) = r0;
| }
| label_0:
0x00002534 ldr r3, [pc, 0x38] | r3 = *(0x2570);
0x00002538 add r3, pc, r3 | r3 = pc + r3;
0x0000253c ldr r0, [r3, 0xc] | r0 = *(0x257c);
0x00002540 add ip, r0, ip |
0x00002544 add ip, ip, 7 |
0x00002548 bic ip, ip, 7 | ip = BIT_MASK (ip, 7);
0x0000254c str ip, [r3, 0xc] | *((r3 + 0xc)) = ip;
0x00002550 pop {r4, r5, r6, r7, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/ld-uClibc-1.0.31.so @ 0x1fb8 */
| #include <stdint.h>
|
; (fcn) sym._dl_nothread_init_static_tls () | void dl_nothread_init_static_tls (int32_t arg1) {
| int32_t var_ch;
| r0 = arg1;
0x00001fb8 mov r2, r0 | r2 = r0;
0x00001fbc push {r4, r7, fp, lr} |
0x00001fc0 bl 0x5a90 | aeabi_read_tp ();
0x00001fc4 ldr r3, [r2, 0x28] | r3 = *((r2 + 0x28));
0x00001fc8 ldr r1, [r0] | r1 = *(r0);
0x00001fcc add r3, r0, r3 | r3 = r0 + r3;
0x00001fd0 ldr ip, [r1, -8] | ip = *((r1 - 8));
0x00001fd4 ldr r0, [r2, 0x2c] | r0 = *((r2 + 0x2c));
0x00001fd8 ldr r4, [pc, 0x94] | r4 = *(0x2070);
0x00001fdc cmp r0, ip |
0x00001fe0 add r4, pc, r4 | r4 = pc + r4;
0x00001fe4 add fp, sp, 0xc |
| if (r0 >= ip) {
0x00001fe8 bls 0x2018 |
0x00001fec ldr r1, [pc, 0x84] | r1 = *(0x2074);
0x00001ff0 mov r0, 2 | r0 = 2;
0x00001ff4 add r1, pc, r1 | r1 = pc + r1;
0x00001ff8 bl 0x1bf4 | dl_dprintf ()
0x00001ffc mov r7, 1 | r7 = 1;
0x00002000 mov r0, 0x1e | r0 = 0x1e;
0x00002004 svc 0 | __asm ("svc 0");
0x00002008 ldr r3, [pc, 0x6c] | r3 = *(0x2078);
0x0000200c rsb r0, r0, 0 | r0 -= ;
0x00002010 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00002014 str r0, [r3] | *(r3) = r0;
| }
0x00002018 add ip, r1, r0, lsl 3 |
0x0000201c str r3, [r1, r0, lsl 3] | offset_0 = r0 << 3;
| *((r1 + offset_0)) = r3;
0x00002020 mov r1, 1 | r1 = 1;
0x00002024 strb r1, [ip, 4] | *((ip + 4)) = r1;
0x00002028 ldr r0, [r2, 0x18] | r0 = *((r2 + 0x18));
0x0000202c ldr r1, [r2, 0x14] | r1 = *((r2 + 0x14));
0x00002030 mov ip, r3 |
0x00002034 sub r1, r1, 1 | r1--;
0x00002038 add r0, r3, r0 | r0 = r3 + r0;
| label_0:
0x0000203c cmp ip, r0 |
| if (ip != r0) {
0x00002040 bne 0x2068 | goto label_1;
| }
0x00002044 ldr r1, [r2, 0x18] | r1 = *((r2 + 0x18));
0x00002048 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x0000204c add r1, r3, r1 | r1 = r3 + r1;
0x00002050 add r3, r3, r2 | r3 += r2;
0x00002054 mov r2, 0 | r2 = 0;
| do {
0x00002058 cmp r1, r3 |
0x0000205c popeq {r4, r7, fp, pc} |
0x00002060 strb r2, [r1], 1 | *(r1) = r2;
| r1++;
0x00002064 b 0x2058 |
| } while (1);
| label_1:
0x00002068 ldrb lr, [r1, 1]! |
0x0000206c strb lr, [ip], 1 |
0x00002070 b 0x203c | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/ld-uClibc-1.0.31.so @ 0x31b8 */
| #include <stdint.h>
|
; (fcn) sym._dl_protect_relro () | void dl_protect_relro (int32_t arg1) {
| int32_t var_ch;
| r0 = arg1;
0x000031b8 push {r4, r7, fp, lr} |
0x000031bc ldr r4, [pc, 0xa0] | r4 = *(0x3260);
0x000031c0 ldr r2, [pc, 0xa0] | r2 = *(0x3264);
0x000031c4 add r4, pc, r4 | r4 = pc + r4;
0x000031c8 ldr r1, [r0, 0x100] | r1 = *((r0 + 0x100));
0x000031cc ldr r3, [r0] | r3 = *(r0);
0x000031d0 ldr r2, [r4, r2] | r2 = *(0x3260);
0x000031d4 add r3, r3, r1 | r3 += r1;
0x000031d8 ldr r1, [r2] | r1 = *(0x3260);
0x000031dc mov ip, r0 |
0x000031e0 rsb r2, r1, 0 | r2 = r1 - ;
0x000031e4 ldr r1, [ip, 0x104] | r1 = *((ip + 0x104));
0x000031e8 and r0, r2, r3 | r0 = r2 & r3;
0x000031ec add r1, r3, r1 | r1 = r3 + r1;
0x000031f0 and r1, r1, r2 | r1 &= r2;
0x000031f4 cmp r0, r1 |
0x000031f8 add fp, sp, 0xc |
0x000031fc popeq {r4, r7, fp, pc} |
0x00003200 sub r1, r1, r0 | r1 -= r0;
0x00003204 mov r2, 1 | r2 = 1;
0x00003208 mov r7, 0x7d | r7 = 0x7d;
0x0000320c svc 0 | __asm ("svc 0");
0x00003210 cmn r0, 0x1000 |
| if (r0 < 0x1000) {
0x00003214 bls 0x3258 | goto label_0;
| }
0x00003218 ldr r3, [pc, 0x4c] | r3 = *(0x3268);
0x0000321c rsb r0, r0, 0 | r0 -= ;
0x00003220 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00003224 str r0, [r3] | *(r3) = r0;
| do {
0x00003228 ldr r1, [pc, 0x40] | r1 = *(0x326c);
0x0000322c ldr r2, [ip, 4] | r2 = *((ip + 4));
0x00003230 add r1, pc, r1 | r1 = pc + r1;
0x00003234 mov r0, 2 | r0 = 2;
0x00003238 bl 0x1bf4 | dl_dprintf ()
0x0000323c mov r7, 1 | r7 = 1;
0x00003240 mov r0, 0 | r0 = 0;
0x00003244 svc 0 | __asm ("svc 0");
0x00003248 ldr r3, [pc, 0x1c] | r3 = *(0x3268);
0x0000324c rsb r0, r0, 0 | r0 -= ;
0x00003250 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00003254 str r0, [r3] | *(r3) = r0;
| label_0:
0x00003258 cmp r0, 0 |
| if (r0 < 0) {
0x0000325c popge {r4, r7, fp, pc} |
| }
0x00003260 b 0x3228 |
| } while (1);
| }
[*] Function printf used 26 times ld-uClibc-1.0.31.so