[*] Binary protection state of libuClibc-1.0.31.so
Full RELRO No Canary found NX disabled DSO No RPATH No RUNPATH No Symbols
[*] Function strcpy tear down of libuClibc-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/libuClibc-1.0.31.so @ 0x118d4 */
| #include <stdint.h>
|
; (fcn) fcn.000118d4 () | void fcn_000118d4 () {
0x000118d4 add ip, pc, 0, 12 |
0x000118d8 add ip, ip, 0x76000 |
0x000118dc ldr pc, [ip, 0x388]! | pc = *((ip += 0x388));
| }
; 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/libuClibc-1.0.31.so @ 0x2c050 */
| #include <stdint.h>
|
; (fcn) fcn.0002c050 () | void fcn_0002c050 (int32_t arg1) {
| int32_t var_0h;
| int32_t var_4h;
| char * var_8h;
| int32_t var_ch;
| void * s2;
| int32_t var_34h;
| int32_t var_44h;
| char * buf;
| int32_t var_50h;
| int32_t var_90h;
| r0 = arg1;
0x0002c050 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0002c054 ldr r7, [pc, 0x588] | r7 = *(0x2c5e0);
0x0002c058 sub sp, sp, 0x94 |
0x0002c05c mov r3, 0 | r3 = 0;
0x0002c060 str r3, [sp, 8] | var_8h = r3;
0x0002c064 ldr r3, [pc, 0x57c] | r3 = *(0x2c5e4);
0x0002c068 add r7, pc, r7 | r7 = pc + r7;
0x0002c06c ldr r3, [r7, r3] | r3 = *(0x2c5e0);
0x0002c070 ldr r4, [pc, 0x574] | r4 = *(0x2c5e8);
0x0002c074 str r3, [sp, 4] | var_4h = r3;
0x0002c078 add r4, pc, r4 | r4 = pc + r4;
0x0002c07c add r3, sp, 0xc | r3 += var_ch;
0x0002c080 mov r2, r4 | r2 = r4;
0x0002c084 ldr r1, [sp, 4] | r1 = var_4h;
0x0002c088 mov r8, r0 | r8 = r0;
0x0002c08c mov r0, r3 | r0 = r3;
0x0002c090 str r3, [sp] | *(sp) = r3;
0x0002c094 bl 0x11dc0 | fcn_00011dc0 ();
0x0002c098 mov r0, r4 | r0 = r4;
0x0002c09c bl 0x68ab8 | pthread_mutex_lock ();
0x0002c0a0 ldr r0, [pc, 0x548] | r0 = *(0x2c5ec);
0x0002c0a4 add r0, pc, r0 | r0 = pc + r0;
0x0002c0a8 bl 0x4b980 | r0 = getenv (r0);
0x0002c0ac subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x0002c0b0 bne 0x2c110 |
0x0002c0b4 ldr r0, [pc, 0x538] | r0 = *(0x2c5f0);
0x0002c0b8 mov r1, r4 | r1 = r4;
0x0002c0bc add r0, pc, r0 | r0 = pc + r0;
0x0002c0c0 bl 0x147dc | r0 = open (r0, r1, r2);
0x0002c0c4 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x0002c0c8 blt 0x2c280 | goto label_12;
| }
0x0002c0cc add r5, sp, 0x4c | r5 += buf;
0x0002c0d0 mov r2, 0x44 | r2 = 0x44;
0x0002c0d4 mov r1, r5 | r1 = r5;
0x0002c0d8 bl 0x155c0 | r0 = read (r0, r1, r2);
0x0002c0dc cmp r0, 0 |
| if (r0 >= 0) {
0x0002c0e0 blt 0x2c100 |
0x0002c0e4 add r0, r5, r0 | r0 = r5 + r0;
0x0002c0e8 cmp r0, r5 |
| if (r0 < r5) {
0x0002c0ec bls 0x2c100 | goto label_0;
| }
0x0002c0f0 ldrb r3, [r0, -1] | r3 = *((r0 - 1));
0x0002c0f4 cmp r3, 0xa |
| if (r3 != 0xa) {
0x0002c0f8 strbeq r4, [r0, -1] | *((r0 - 1)) = r4;
| }
| if (r3 == 0xa) {
0x0002c0fc moveq r4, r5 | r4 = r5;
| goto label_0;
| }
| }
| label_0:
0x0002c100 mov r0, r6 | r0 = r6;
0x0002c104 bl 0x15ac8 | close (r0);
0x0002c108 cmp r4, 0 |
| if (r4 == 0) {
0x0002c10c beq 0x2c298 | goto label_3;
| }
| }
0x0002c110 ldrb r3, [r4] | r3 = *(r4);
0x0002c114 cmp r3, 0 |
| if (r3 == 0) {
0x0002c118 beq 0x2c298 | goto label_3;
| }
0x0002c11c ldr r5, [pc, 0x4d4] | r5 = *(0x2c5f4);
0x0002c120 cmp r3, 0x3a |
| if (r3 != 0x3a) {
0x0002c124 addeq r4, r4, 1 | r4++;
| }
0x0002c128 add r5, pc, r5 | r5 = pc + r5;
0x0002c12c mov r1, r5 | r1 = r5;
0x0002c130 mov r0, r4 | r0 = r4;
0x0002c134 bl 0x3e430 | r0 = strcoll ();
0x0002c138 cmp r0, 0 |
| if (r0 == 0) {
0x0002c13c beq 0x2c318 | goto label_13;
| }
0x0002c140 ldr sl, [pc, 0x4b4] | sl = *(0x2c5f8);
0x0002c144 mov r0, r5 | r0 = r5;
0x0002c148 mov r2, 0x44 | r2 = 0x44;
0x0002c14c mov r1, r4 | r1 = r4;
0x0002c150 mov r5, 0 | r5 = 0;
0x0002c154 mov sb, 2 | sb = 2;
0x0002c158 add sl, pc, sl | sl = pc + sl;
0x0002c15c bl 0x3ed10 | strncpy ();
0x0002c160 strb r5, [sp, 0x44] | var_44h = r5;
| do {
0x0002c164 ldrb r3, [r4] | r3 = *(r4);
0x0002c168 add r2, sp, 0x90 | r2 += var_90h;
0x0002c16c cmp r3, 0x3c |
0x0002c170 mov r3, 0x18 | r3 = 0x18;
0x0002c174 mla r2, r3, r5, r2 | __asm ("mla r2, r3, r5, r2");
0x0002c178 ldr r0, [sl] | r0 = *(sl);
| if (r3 != 0x3c) {
0x0002c17c addeq r4, r4, 1 | r4++;
| }
| if (r3 != 0x3c) {
0x0002c180 moveq ip, 0x3e |
| }
| if (r3 == 0x3c) {
0x0002c184 movne ip, 0 |
| }
0x0002c188 sub r3, r2, 0x64 | r3 = r2 - 0x64;
0x0002c18c mov lr, 0 | lr = 0;
| label_2:
0x0002c190 mov r6, r4 | r6 = r4;
0x0002c194 ldrb r1, [r4], 1 | r1 = *(r4);
| r4++;
0x0002c198 cmp r1, 0 |
| if (r1 != 0) {
0x0002c19c beq 0x2c1dc |
0x0002c1a0 tst r1, 0x80 |
| if ((r1 & 0x80) != 0) {
0x0002c1a4 bne 0x2c1dc | goto label_14;
| }
0x0002c1a8 lsl r2, r1, 1 | r2 = r1 << 1;
0x0002c1ac ldrh r2, [r0, r2] | r2 = *((r0 + r2));
0x0002c1b0 tst r2, 4 |
| if ((r2 & 4) != 0) {
0x0002c1b4 bne 0x2c3dc | goto label_15;
| }
0x0002c1b8 cmp ip, 0 |
| if (ip == 0) {
0x0002c1bc beq 0x2c1dc | goto label_14;
| }
0x0002c1c0 sub fp, r1, 0x2b |
0x0002c1c4 tst fp, 0xfd |
0x0002c1c8 lsr r2, r2, 0xb | r2 >>= 0xb;
| if ((fp & 0xfd) == 0) {
0x0002c1cc andne r2, r2, 1 | r2 &= 1;
| }
| if ((fp & 0xfd) != 0) {
0x0002c1d0 moveq r2, 1 | r2 = 1;
| }
0x0002c1d4 cmp r2, 0 |
| if (r2 != 0) {
0x0002c1d8 bne 0x2c3dc | goto label_15;
| }
| }
| label_14:
0x0002c1dc mov r2, 0 | r2 = 0;
0x0002c1e0 cmp lr, 2 |
0x0002c1e4 strb r2, [r3] | *(r3) = r2;
| if (lr <= 2) {
0x0002c1e8 ble 0x2c298 | goto label_3;
| }
0x0002c1ec cmp ip, r2 |
| if (ip != r2) {
0x0002c1f0 beq 0x2c200 |
0x0002c1f4 ldrb r3, [r6], 1 | r3 = *(r6);
| r6++;
0x0002c1f8 cmp ip, r3 |
| if (ip != r3) {
0x0002c1fc bne 0x2c298 | goto label_3;
| }
| }
0x0002c200 ldrb r3, [r6] | r3 = *(r6);
0x0002c204 sub r2, r3, 0x2b | r2 = r3 - 0x2b;
0x0002c208 tst r2, 0xfd |
| if ((r2 & 0xfd) == 0) {
0x0002c20c beq 0x2c420 | goto label_16;
| }
0x0002c210 cmp r5, 0 |
| if (r5 == 0) {
0x0002c214 beq 0x2c3f0 | goto label_17;
| }
0x0002c218 sub r3, r3, 0x30 | r3 -= 0x30;
0x0002c21c cmp r3, 9 |
| if (r3 < 9) {
0x0002c220 bls 0x2c3f0 | goto label_17;
| }
0x0002c224 ldr r3, [sp, 8] | r3 = var_8h;
0x0002c228 mov r4, r6 | r4 = r6;
0x0002c22c sub r3, r3, 0xe10 | r3 -= 0xe10;
0x0002c230 str r3, [sp, 8] | var_8h = r3;
| label_4:
0x0002c234 mov r3, 0x18 | r3 = 0x18;
0x0002c238 add r1, sp, 0x90 | r1 += var_90h;
0x0002c23c ldr r2, [sp, 8] | r2 = var_8h;
0x0002c240 mla r1, r3, r5, r1 | __asm ("mla r1, r3, r5, r1");
0x0002c244 cmp sb, 1 |
0x0002c248 str r2, [r1, -0x74] | s2 = r2;
| if (sb == 1) {
0x0002c24c beq 0x2c428 | goto label_18;
| }
0x0002c250 str r2, [sp, 0x34] | var_34h = r2;
0x0002c254 ldrb r3, [r4] | r3 = *(r4);
0x0002c258 mov r5, 1 | r5 = 1;
0x0002c25c cmp r3, 0 |
0x0002c260 mov sb, r5 | sb = r5;
0x0002c264 bne 0x2c164 |
| } while (r3 != 0);
| label_11:
0x0002c268 ldr r0, [pc, 0x390] | r0 = *(0x2c5fc);
0x0002c26c mov r2, 0x30 | r2 = 0x30;
0x0002c270 add r1, sp, 0x1c | r1 += s2;
0x0002c274 add r0, pc, r0 | r0 = pc + r0;
0x0002c278 bl 0x3e480 | memcpy (r0, r1, r2);
0x0002c27c b 0x2c2d0 | goto label_19;
| label_12:
0x0002c280 ldr r0, [pc, 0x37c] | r0 = *(0x2c600);
0x0002c284 mov r1, r4 | r1 = r4;
0x0002c288 add r0, pc, r0 | r0 = pc + r0;
0x0002c28c bl 0x147dc | r0 = open (r0, r1, r2);
0x0002c290 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x0002c294 bge 0x2c32c |
| label_3:
0x0002c298 ldr r4, [pc, 0x368] | r4 = *(0x2c604);
0x0002c29c ldr r3, [pc, 0x368] | r3 = *(0x2c608);
0x0002c2a0 add r4, pc, r4 | r4 = pc + r4;
0x0002c2a4 mov r1, 0 | r1 = 0;
0x0002c2a8 add r3, pc, r3 | r3 = pc + r3;
0x0002c2ac mov r2, 0x30 | r2 = 0x30;
0x0002c2b0 mov r0, r4 | r0 = r4;
0x0002c2b4 strb r1, [r3] | *(r3) = r1;
0x0002c2b8 bl 0x3e310 | memset (r0, r1, r2);
0x0002c2bc ldr r1, [pc, 0x34c] | r1 = *(0x2c60c);
0x0002c2c0 add r0, r4, 0x10 | r0 = r4 + 0x10;
0x0002c2c4 add r1, pc, r1 | r1 = pc + r1;
0x0002c2c8 add r1, r1, 3 | r1 += 3;
0x0002c2cc bl 0x3e970 | strcpy (r0, r1)
| label_19:
0x0002c2d0 ldr r3, [pc, 0x33c] | r3 = *(0x2c610);
0x0002c2d4 ldr r2, [r7, r3] | r2 = *((r7 + r3));
0x0002c2d8 ldr r3, [pc, 0x338] |
0x0002c2dc add r3, pc, r3 | r3 = pc + r3;
0x0002c2e0 add r1, r3, 0x10 | r1 = r3 + 0x10;
0x0002c2e4 str r1, [r2] | *(r2) = r1;
0x0002c2e8 add r1, r3, 0x28 | r1 = r3 + 0x28;
0x0002c2ec str r1, [r2, 4] | *((r2 + 4)) = r1;
0x0002c2f0 ldr r2, [pc, 0x324] | r2 = *(0x2c618);
0x0002c2f4 ldr r1, [r7, r2] | r1 = *((r7 + r2));
0x0002c2f8 ldrb r2, [r3, 0x28] | r2 = *((r3 + 0x28));
0x0002c2fc ldr r3, [r3] | r3 = *(0x2c614);
0x0002c300 adds r2, r2, 0 | r2 += 0;
| if (r2 == r2) {
0x0002c304 movne r2, 1 | r2 = 1;
| }
0x0002c308 str r2, [r1] | *(r1) = r2;
0x0002c30c ldr r2, [pc, 0x30c] | r2 = *(0x2c61c);
0x0002c310 ldr r2, [r7, r2] | r2 = *((r7 + r2));
0x0002c314 str r3, [r2] | *(r2) = r3;
| label_13:
0x0002c318 mov r1, 1 | r1 = 1;
0x0002c31c ldr r0, [sp] | r0 = *(sp);
0x0002c320 bl 0x11b38 | fcn_00011b38 ();
0x0002c324 add sp, sp, 0x94 |
0x0002c328 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x0002c32c add r5, sp, 0x4c | r5 += buf;
0x0002c330 mov r2, 0x44 | r2 = 0x44;
0x0002c334 mov r1, r5 | r1 = r5;
0x0002c338 bl 0x155c0 | r0 = read (r0, r1, r2);
0x0002c33c cmp r0, 0x44 |
0x0002c340 mov sl, r0 | sl = r0;
| if (r0 != 0x44) {
0x0002c344 bne 0x2c100 | goto label_0;
| }
0x0002c348 ldr r1, [pc, 0x2d4] | r1 = *(0x2c620);
0x0002c34c mov r2, 4 | r2 = 4;
0x0002c350 add r1, pc, r1 | r1 = pc + r1;
0x0002c354 mov r0, r5 | r0 = r5;
0x0002c358 bl 0x3eab8 | strncmp (r0, r1, r2);
0x0002c35c subs sb, r0, 0 | sb -= buf;
| if (sb != buf) {
0x0002c360 bne 0x2c100 | goto label_0;
| }
0x0002c364 ldrb r3, [sp, 0x50] | r3 = var_50h;
0x0002c368 cmp r3, 1 |
| if (r3 < 1) {
0x0002c36c bls 0x2c100 | goto label_0;
| }
0x0002c370 mov r2, 2 | r2 = 2;
0x0002c374 mvn r1, 0x43 | r1 = ~0x43;
0x0002c378 mov r0, r6 | r0 = r6;
0x0002c37c bl 0x13644 | r0 = lseek ();
0x0002c380 cmp r0, 0 |
| if (r0 < 0) {
0x0002c384 blt 0x2c100 | goto label_0;
| }
0x0002c388 mov r2, sl | r2 = sl;
0x0002c38c mov r1, r5 | r1 = r5;
0x0002c390 mov r0, r6 | r0 = r6;
0x0002c394 bl 0x155c0 | r0 = read (r0, r1, r2);
0x0002c398 cmp r0, 0 |
| if (r0 <= 0) {
0x0002c39c ble 0x2c100 | goto label_0;
| }
0x0002c3a0 sub r0, r0, 1 | r0--;
0x0002c3a4 ldrb r3, [r5, r0] | r3 = *((r5 + r0));
0x0002c3a8 cmp r3, 0xa |
| if (r3 == 0xa) {
0x0002c3ac strbeq sb, [r5, r0] | *((r5 + r0)) = sb;
| goto label_20;
| }
| if (r3 != 0xa) {
| label_20:
0x0002c3b0 bne 0x2c100 | goto label_0;
| }
| label_1:
0x0002c3b4 cmp r0, 0 |
| if (r0 == 0) {
0x0002c3b8 moveq r4, r0 | r4 = r0;
| goto label_21;
| }
| if (r0 == 0) {
| label_21:
0x0002c3bc beq 0x2c100 | goto label_0;
| }
0x0002c3c0 sub r0, r0, 1 | r0--;
0x0002c3c4 ldrb r3, [r5, r0] | r3 = *((r5 + r0));
0x0002c3c8 cmp r3, 0xa |
| if (r3 != 0xa) {
0x0002c3cc bne 0x2c3b4 | goto label_1;
| }
0x0002c3d0 add r0, r0, 1 | r0++;
0x0002c3d4 add r4, r5, r0 | r4 = r5 + r0;
0x0002c3d8 b 0x2c100 | goto label_0;
| label_15:
0x0002c3dc add lr, lr, 1 | lr++;
0x0002c3e0 cmp lr, 7 |
0x0002c3e4 strb r1, [r3], 1 | *(r3) = r1;
| r3++;
| if (lr != 7) {
0x0002c3e8 bne 0x2c190 | goto label_2;
| }
0x0002c3ec b 0x2c298 | goto label_3;
| label_17:
0x0002c3f0 sub r0, r6, 1 | r0 = r6 - 1;
| label_5:
0x0002c3f4 add r1, sp, 8 | r1 += var_8h;
0x0002c3f8 add r0, r0, 1 | r0++;
0x0002c3fc bl 0x2bfc4 | r0 = fcn_0002bfc4 (r0, r1);
0x0002c400 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x0002c404 beq 0x2c298 | goto label_3;
| }
0x0002c408 ldrb r3, [r6] | r3 = *(r6);
0x0002c40c cmp r3, 0x2d |
| if (r3 != 0x2d) {
0x0002c410 ldreq r3, [sp, 8] | r3 = var_8h;
| }
0x0002c414 rsbeq r3, r3, 0 | __asm ("rsbeq r3, r3, 0");
| if (r3 != 0x2d) {
0x0002c418 streq r3, [sp, 8] | var_8h = r3;
| }
0x0002c41c b 0x2c234 | goto label_4;
| label_16:
0x0002c420 mov r0, r6 | r0 = r6;
0x0002c424 b 0x2c3f4 | goto label_5;
| label_18:
0x0002c428 ldrb r3, [r4] | r3 = *(r4);
0x0002c42c cmp r3, 0 |
| if (r3 == 0) {
0x0002c430 bne 0x2c448 |
0x0002c434 cmp r8, 0 |
| if (r8 == 0) {
0x0002c438 beq 0x2c500 | goto label_22;
| }
0x0002c43c ldr r4, [pc, 0x1e4] |
0x0002c440 add r4, pc, r4 | r4 = pc + r4;
0x0002c444 add r4, r4, 0x16 | r4 = 0x2c63a;
| }
| label_6:
0x0002c448 ldr fp, [pc, 0x1dc] |
0x0002c44c ldr r8, [pc, 0x1dc] | r8 = *(0x2c62c);
0x0002c450 add fp, pc, fp |
0x0002c454 mov r6, 2 | r6 = 2;
0x0002c458 mov r5, 0 | r5 = 0;
0x0002c45c add fp, fp, 0xa | fp = 0x2c632;
| label_7:
0x0002c460 ldrb r3, [r4] | r3 = *(r4);
0x0002c464 cmp r3, 0x2c |
| if (r3 != 0x2c) {
0x0002c468 bne 0x2c298 | goto label_3;
| }
0x0002c46c ldrb lr, [r4, 1] |
0x0002c470 add ip, r4, 2 |
0x0002c474 cmp lr, 0x4d |
| if (lr != 0x4d) {
0x0002c478 moveq r1, 0xc | r1 = 0xc;
| }
| if (lr != 0x4d) {
0x0002c47c moveq r3, fp | r3 = fp;
| }
| if (lr == 0x4d) {
0x0002c480 beq 0x2c4a4 | goto label_23;
| }
0x0002c484 cmp lr, 0x4a |
| if (lr == 0x4a) {
0x0002c488 beq 0x2c518 | goto label_24;
| }
0x0002c48c ldr r3, [pc, 0x1a0] |
0x0002c490 add ip, r4, 1 |
0x0002c494 add r3, pc, r3 | r3 = pc + r3;
0x0002c498 mov lr, 0 | lr = 0;
0x0002c49c mov r1, r8 | r1 = r8;
0x0002c4a0 add r3, r3, 0x10 | r3 = 0x2c640;
| do {
| label_23:
0x0002c4a4 mov r0, 0x18 | r0 = 0x18;
0x0002c4a8 mul r4, r5, r0 | r4 = r5 * r0;
0x0002c4ac add r2, sp, 0x90 | r2 += var_90h;
0x0002c4b0 add r2, r2, r4 | r2 += r4;
0x0002c4b4 sub r2, r2, 0x66 | r2 -= 0x66;
0x0002c4b8 add r0, sp, 0x90 | r0 += var_90h;
0x0002c4bc cmp lr, 0x4d |
0x0002c4c0 add r0, r0, r4 | r0 += r4;
| if (lr == 0x4d) {
0x0002c4c4 subne r2, r2, 4 | r2 -= 4;
| }
0x0002c4c8 mov r4, ip | r4 = ip;
0x0002c4cc strh lr, [r0, -0x66] |
| label_9:
0x0002c4d0 mov sb, r4 | sb = r4;
0x0002c4d4 mov r0, 3 | r0 = 3;
0x0002c4d8 mov ip, 0 |
| label_8:
0x0002c4dc ldrb lr, [sb] |
0x0002c4e0 mov r4, sb | r4 = sb;
0x0002c4e4 sub lr, lr, 0x30 | lr -= 0x30;
0x0002c4e8 and sl, lr, 0xff | sl = lr & 0xff;
0x0002c4ec cmp sl, 9 |
0x0002c4f0 add sb, sb, 1 | sb++;
| if (sl < 9) {
0x0002c4f4 bls 0x2c52c | goto label_25;
| }
0x0002c4f8 cmp r0, 3 |
0x0002c4fc b 0x2c548 | goto label_26;
| label_22:
0x0002c500 ldr r4, [pc, 0x130] |
0x0002c504 add r4, pc, r4 | r4 = pc + r4;
0x0002c508 add r4, r4, 0x26 | r4 = 0x2c65a;
0x0002c50c b 0x2c448 | goto label_6;
| label_10:
0x0002c510 mov r6, r5 | r6 = r5;
0x0002c514 b 0x2c460 | goto label_7;
| label_24:
0x0002c518 ldr r3, [pc, 0x11c] |
0x0002c51c mov r1, r8 | r1 = r8;
0x0002c520 add r3, pc, r3 | r3 = pc + r3;
0x0002c524 add r3, r3, 0x12 | r3 = 0x2c64a;
0x0002c528 b 0x2c4a4 |
| } while (1);
| label_25:
0x0002c52c mov sl, 0xa | sl = 0xa;
0x0002c530 mla sl, ip, sl, lr | __asm ("mla sl, ip, sl, lr");
0x0002c534 subs r0, r0, 1 | r0--;
0x0002c538 mov r4, sb | r4 = sb;
0x0002c53c mov ip, sl |
| if (r0 != r0) {
0x0002c540 bne 0x2c4dc | goto label_8;
| }
0x0002c544 cmp sb, 0 |
| if (sb == 0) {
| label_26:
0x0002c548 beq 0x2c298 | goto label_3;
| }
0x0002c54c ldrb r0, [r3, 2] | r0 = *((r3 + 2));
0x0002c550 sub r0, ip, r0 | r0 = ip - r0;
0x0002c554 cmp r0, r1 |
| if (r0 > r1) {
0x0002c558 bhi 0x2c298 | goto label_3;
| }
0x0002c55c ldrb r1, [r3, 1] | r1 = *((r3 + 1));
0x0002c560 cmp r1, 0 |
| if (r1 == 0) {
0x0002c564 beq 0x2c57c | goto label_27;
| }
0x0002c568 ldrb lr, [r4] |
0x0002c56c add r0, r4, 1 | r0 = r4 + 1;
0x0002c570 cmp lr, r1 |
| if (lr != r1) {
0x0002c574 bne 0x2c298 | goto label_3;
| }
0x0002c578 mov r4, r0 | r4 = r0;
| label_27:
0x0002c57c ldrb r1, [r3, 3]! | r1 = *((r3 += 3));
0x0002c580 strh ip, [r2, -2]! | *((r2 -= 2)) = ip;
0x0002c584 cmp r1, 0 |
| if (r1 != 0) {
0x0002c588 bne 0x2c4d0 | goto label_9;
| }
0x0002c58c ldr r3, [pc, 0xac] | r3 = *(0x2c63c);
0x0002c590 str r3, [sp, 8] | var_8h = r3;
0x0002c594 ldrb r3, [r4] | r3 = *(r4);
0x0002c598 cmp r3, 0x2f |
| if (r3 != 0x2f) {
0x0002c59c bne 0x2c5b4 | goto label_28;
| }
0x0002c5a0 add r0, r4, 1 | r0 = r4 + 1;
0x0002c5a4 add r1, sp, 8 | r1 += var_8h;
0x0002c5a8 bl 0x2bfc4 | r0 = fcn_0002bfc4 (r0, r1);
0x0002c5ac subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x0002c5b0 beq 0x2c298 | goto label_3;
| }
| label_28:
0x0002c5b4 mov r3, 0x18 | r3 = 0x18;
0x0002c5b8 add r2, sp, 0x90 | r2 += var_90h;
0x0002c5bc mla r2, r3, r5, r2 | __asm ("mla r2, r3, r5, r2");
0x0002c5c0 ldr r3, [sp, 8] | r3 = var_8h;
0x0002c5c4 mov r5, 1 | r5 = 1;
0x0002c5c8 cmp r6, r5 |
0x0002c5cc str r3, [r2, -0x70] | *((r2 - 0x70)) = r3;
| if (r6 != r5) {
0x0002c5d0 bne 0x2c510 | goto label_10;
| }
0x0002c5d4 ldrb r3, [r4] | r3 = *(r4);
0x0002c5d8 cmp r3, 0 |
| if (r3 != 0) {
0x0002c5dc bne 0x2c298 | goto label_3;
| }
0x0002c5e0 b 0x2c268 | goto label_11;
| }
r2dec has crashed (info: /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/libuClibc-1.0.31.so @ 0x2ccb8).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; 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/libuClibc-1.0.31.so @ 0x39b9c */
| #include <stdint.h>
|
; (fcn) fcn.00039b9c () | void fcn_00039b9c (void * arg1, int32_t arg2) {
| int32_t var_4h;
| int32_t var_ch;
| int32_t var_10h;
| char * dest;
| int32_t var_1h;
| int32_t var_1h_2;
| int32_t var_2h;
| int32_t var_bch;
| r0 = arg1;
| r1 = arg2;
0x00039b9c ldr r3, [pc, 0x55c] | r3 = *(0x3a0fc);
0x00039ba0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00039ba4 ldr sl, [r0, 0x3c] | sl = *((r0 + 0x3c));
0x00039ba8 add r3, pc, r3 | r3 = pc + r3;
0x00039bac add r3, r3, sl | r3 += sl;
0x00039bb0 cmp sl, 1 |
0x00039bb4 sub sp, sp, 0xbc |
0x00039bb8 mov r7, r0 | r7 = r0;
0x00039bbc mov r4, r1 | r4 = r1;
0x00039bc0 ldrb r6, [r3, 0xa] | r6 = *((r3 + 0xa));
| if (sl != 1) {
0x00039bc4 bne 0x39c58 | goto label_14;
| }
0x00039bc8 ldr r8, [pc, 0x534] | r8 = *(0x3a100);
0x00039bcc add r8, pc, r8 | r8 = pc + r8;
| do {
0x00039bd0 mov r0, r4 | r0 = r4;
0x00039bd4 bl 0x397c4 | r0 = fcn_000397c4 (r0);
0x00039bd8 cmp r0, 0 |
| if (r0 >= 0) {
0x00039bdc blt 0x39bf0 |
0x00039be0 ldrb r2, [r8] | r2 = *(r8);
0x00039be4 ldr r3, [r4] | r3 = *(r4);
0x00039be8 cmp r2, r3 |
| if (r2 == r3) {
0x00039bec beq 0x39c10 | goto label_15;
| }
| }
0x00039bf0 mov r0, r4 | r0 = r4;
0x00039bf4 bl 0x39848 | fcn_00039848 (r0);
0x00039bf8 ldr r3, [pc, 0x508] | r3 = *(0x3a104);
0x00039bfc add r3, pc, r3 | r3 = pc + r3;
0x00039c00 cmp r8, r3 |
| if (r8 < r3) {
0x00039c04 bls 0x39c58 | goto label_14;
| }
| label_1:
0x00039c08 mvn r0, 1 | r0 = ~1;
0x00039c0c b 0x39c2c | goto label_0;
| label_15:
0x00039c10 ldrb r5, [r8, 1]! | r5 = *((r8 += 1));
0x00039c14 cmp r5, 0 |
0x00039c18 bne 0x39bd0 |
| } while (r5 != 0);
0x00039c1c ldrb r3, [r7, 0x44] | r3 = *((r7 + 0x44));
0x00039c20 cmp r3, 0 |
0x00039c24 bne 0x39c34 |
| while (1) {
| label_2:
0x00039c28 mov r0, 0 | r0 = 0;
| label_0:
0x00039c2c add sp, sp, 0xbc |
0x00039c30 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00039c34 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x00039c38 ldr r1, [r7, 0x38] | r1 = *((r7 + 0x38));
0x00039c3c ldr r0, [r7, 0x2c] | r0 = *((r7 + 0x2c));
0x00039c40 add r3, r3, 1 | r3++;
0x00039c44 str r3, [r7, 0x34] | *((r7 + 0x34)) = r3;
0x00039c48 mov r2, 0 | r2 = 0;
0x00039c4c mov r3, 0 | r3 = 0;
| label_3:
0x00039c50 bl 0x369a8 | fcn_000369a8 (r0, r1);
0x00039c54 b 0x39c28 |
| }
| label_14:
0x00039c58 mov r0, r4 | r0 = r4;
0x00039c5c bl 0x397c4 | fcn_000397c4 (r0);
0x00039c60 ldr r3, [r4] | r3 = *(r4);
0x00039c64 cmp r3, 0 |
| if (r3 < 0) {
0x00039c68 mvnlt r0, 0 | r0 = ~0;
| goto label_16;
| }
| if (r3 < 0) {
| label_16:
0x00039c6c blt 0x39c2c | goto label_0;
| }
0x00039c70 sub r2, r3, 0x2b | r2 = r3 - 0x2b;
0x00039c74 bics r2, r2, 2 | __asm ("bics r2, r2, 2");
| if (r3 == 0) {
0x00039c78 addne r5, sp, 0x10 | r5 += var_10h;
| }
| if (r3 == 0) {
0x00039c7c bne 0x39c90 |
0x00039c80 mov r0, r4 | r0 = r4;
0x00039c84 strb r3, [sp, 0x10] | var_10h = r3;
0x00039c88 bl 0x397c4 | fcn_000397c4 (r0);
0x00039c8c add r5, sp, 0x11 | r5 += dest;
| }
0x00039c90 tst r6, 0xef |
| if ((r6 & 0xef) == 0) {
0x00039c94 bne 0x39ce0 |
0x00039c98 ldr sb, [r4] | sb = *(r4);
0x00039c9c cmp sb, 0x30 |
| if (sb != 0x30) {
0x00039ca0 bne 0x39dd8 | goto label_17;
| }
0x00039ca4 mov r0, r4 | r0 = r4;
0x00039ca8 bl 0x397c4 | fcn_000397c4 (r0);
0x00039cac ldr r8, [r4] | r8 = *(r4);
0x00039cb0 mov r0, r4 | r0 = r4;
0x00039cb4 orr r8, r8, 0x20 | r8 |= 0x20;
0x00039cb8 cmp r8, 0x78 |
| if (r8 != 0x78) {
0x00039cbc bne 0x39db4 | goto label_18;
| }
0x00039cc0 bl 0x397c4 | r0 = fcn_000397c4 (r0);
0x00039cc4 cmp r0, 0 |
| if (r0 < 0) {
0x00039cc8 blt 0x39e58 | goto label_9;
| }
0x00039ccc mov r3, r5 | r3 = r5;
0x00039cd0 strb sb, [r3], 2 | *(r3) = sb;
| r3 += 2;
0x00039cd4 mov r6, 0x10 | r6 = 0x10;
0x00039cd8 strb r8, [r5, 1] | dest = r8;
0x00039cdc mov r5, r3 | r5 = r3;
| }
| label_4:
0x00039ce0 ldr r3, [r4] | r3 = *(r4);
0x00039ce4 cmp r3, 0x30 |
| if (r3 == 0x30) {
0x00039ce8 beq 0x39de4 | goto label_19;
| }
0x00039cec mov r8, 0 | r8 = 0;
| label_5:
0x00039cf0 ldr r1, [pc, 0x414] | r1 = *(0x3a108);
0x00039cf4 mov fp, 0 |
0x00039cf8 mov sb, fp | sb = fp;
0x00039cfc add r1, pc, r1 | r1 = pc + r1;
| label_6:
0x00039d00 ldr r3, [r4] | r3 = *(r4);
0x00039d04 ldr r0, [r1] | r0 = *(r1);
0x00039d08 lsl r2, r3, 1 | r2 = r3 << 1;
0x00039d0c ldrh r2, [r0, r2] | r2 = *((r0 + r2));
0x00039d10 tst r2, 0x10 |
| if ((r2 & 0x10) != 0) {
0x00039d14 beq 0x39d2c |
0x00039d18 cmp r6, 0x10 |
| if (r6 == 0x10) {
0x00039d1c beq 0x39e0c | goto label_20;
| }
0x00039d20 sub r2, r3, 0x2f | r2 = r3 - 0x2f;
0x00039d24 cmp r2, r6 |
| if (r2 <= r6) {
0x00039d28 ble 0x39e0c | goto label_20;
| }
| }
0x00039d2c ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x00039d30 cmp r3, 7 |
| if (r3 <= 7) {
0x00039d34 ldrgt sl, [r4, 0x3c] | sl = *((r4 + 0x3c));
| }
| if (r3 > 7) {
0x00039d38 bgt 0x39e6c | goto label_21;
| }
0x00039d3c mov r0, r4 | r0 = r4;
0x00039d40 bl 0x39848 | fcn_00039848 (r0);
0x00039d44 mov r3, 0 | r3 = 0;
0x00039d48 cmp r8, r3 |
0x00039d4c strb r3, [r5] | *(r5) = r3;
| if (r8 == r3) {
0x00039d50 beq 0x39c08 | goto label_1;
| }
0x00039d54 ldrb r2, [r7, 0x44] | r2 = *((r7 + 0x44));
0x00039d58 cmp r2, r3 |
| if (r2 == r3) {
0x00039d5c beq 0x39c28 | goto label_2;
| }
0x00039d60 ldrb r2, [sp, 0x10] | r2 = var_10h;
0x00039d64 cmp r2, 0x2d |
| if (r2 != 0x2d) {
0x00039d68 beq 0x39d78 |
0x00039d6c cmp sl, 5 |
| if (sl <= 5) {
0x00039d70 movgt r3, 0 | r3 = 0;
| }
| if (sl <= 5) {
0x00039d74 movle r3, 1 | r3 = 1;
| goto label_22;
| }
| }
| label_22:
0x00039d78 ldr r2, [r7, 0x34] | r2 = *((r7 + 0x34));
0x00039d7c rsb r3, r3, 1 | r3 = 1 - r3;
0x00039d80 add r2, r2, 1 | r2++;
0x00039d84 str r2, [r7, 0x34] | *((r7 + 0x34)) = r2;
0x00039d88 mov r1, 0 | r1 = 0;
0x00039d8c mov r2, r6 | r2 = r6;
0x00039d90 add r0, sp, 0x10 | r0 += var_10h;
0x00039d94 ldr r4, [r7, 0x2c] | r4 = *((r7 + 0x2c));
0x00039d98 ldr r5, [r7, 0x38] | r5 = *((r7 + 0x38));
0x00039d9c bl 0x4d3c8 | r0 = fcn_0004d3c8 (r0, r1);
0x00039da0 mov r2, r0 | r2 = r0;
0x00039da4 mov r3, r1 | r3 = r1;
0x00039da8 mov r0, r4 | r0 = r4;
0x00039dac mov r1, r5 | r1 = r5;
0x00039db0 b 0x39c50 | goto label_3;
| label_18:
0x00039db4 bl 0x39848 | fcn_00039848 (r0);
0x00039db8 ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x00039dbc str sb, [r4] | *(r4) = sb;
0x00039dc0 cmp r3, 7 |
| if (r3 > 7) {
0x00039dc4 lsrle r6, r6, 1 | r6 >>= 1;
| }
| if (r3 > 7) {
0x00039dc8 addle r6, r6, 8 | r6 += 8;
| }
| if (r3 > 7) {
0x00039dcc andle r6, r6, 0xff | r6 &= 0xff;
| }
| if (r3 <= 7) {
0x00039dd0 movgt r6, 0xa | r6 = 0xa;
| }
0x00039dd4 b 0x39ce0 | goto label_4;
| label_17:
0x00039dd8 cmp r6, 0 |
| if (r6 != 0) {
0x00039ddc moveq r6, 0xa | r6 = 0xa;
| }
0x00039de0 b 0x39ce0 | goto label_4;
| label_19:
0x00039de4 add r8, r5, 1 | r8 += dest;
0x00039de8 strb r3, [r5] | *(r5) = r3;
| do {
0x00039dec mov r0, r4 | r0 = r4;
0x00039df0 bl 0x397c4 | fcn_000397c4 (r0);
0x00039df4 ldr r3, [r4] | r3 = *(r4);
0x00039df8 cmp r3, 0x30 |
0x00039dfc beq 0x39dec |
| } while (r3 == 0x30);
0x00039e00 mov r5, r8 | r5 = r8;
0x00039e04 mov r8, 1 | r8 = 1;
0x00039e08 b 0x39cf0 | goto label_5;
| label_20:
0x00039e0c add r2, sp, 0x10 | r2 += var_10h;
0x00039e10 sub r2, r5, r2 | r2 = r5 - r2;
0x00039e14 cmp r2, 0x40 |
| if (r2 > 0x40) {
0x00039e18 strble r3, [r5] | *(r5) = r3;
| }
| if (r2 > 0x40) {
0x00039e1c movle r8, 1 | r8 = 1;
| }
0x00039e20 mov r0, r4 | r0 = r4;
0x00039e24 str r1, [sp, 4] | var_4h = r1;
| if (r2 > 0x40) {
0x00039e28 addle r5, r5, 1 | r5 += var_1h;
| }
| if (r2 > 0x40) {
0x00039e2c movle fp, r8 |
| }
| if (r2 <= 0x40) {
0x00039e30 addgt sb, sb, 1 | sb++;
| }
0x00039e34 bl 0x397c4 | fcn_000397c4 (r0);
0x00039e38 ldr r1, [sp, 4] | r1 = var_4h;
0x00039e3c b 0x39d00 | goto label_6;
| do {
0x00039e40 ldr r1, [r4] | r1 = *(r4);
0x00039e44 cmp r3, r1 |
| if (r3 != r1) {
0x00039e48 beq 0x39e64 |
0x00039e4c ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x00039e50 cmp r3, r2 |
| if (r3 >= r2) {
0x00039e54 bhs 0x39f38 | goto label_23;
| }
| label_9:
0x00039e58 mov r0, r4 | r0 = r4;
0x00039e5c bl 0x39848 | fcn_00039848 (r0);
0x00039e60 b 0x39c08 | goto label_1;
| }
0x00039e64 mov r0, r4 | r0 = r4;
0x00039e68 bl 0x397c4 | fcn_000397c4 (r0);
| label_21:
0x00039e6c mov r2, sl | r2 = sl;
0x00039e70 ldrb r3, [sl], 1 | r3 = *(sl);
| sl++;
0x00039e74 cmp r3, 0 |
0x00039e78 bne 0x39e40 |
| } while (r3 != 0);
0x00039e7c mov r0, r5 | r0 = r5;
0x00039e80 ldr r1, [r4, 0x30] | r1 = *((r4 + 0x30));
0x00039e84 bl 0x3e970 | strcpy (r0, r1)
0x00039e88 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00039e8c cmp fp, 0 |
0x00039e90 add r5, r5, r3 | r5 += r3;
0x00039e94 beq 0x39ea8 |
| while (r3 != 0x30) {
| label_7:
0x00039e98 ldr sl, [pc, 0x270] | sl = *(0x3a10c);
0x00039e9c add fp, sp, 0x10 |
0x00039ea0 add sl, pc, sl | sl = pc + sl;
0x00039ea4 b 0x39f00 | goto label_24;
0x00039ea8 ldr r3, [r4] | r3 = *(r4);
0x00039eac cmp r3, 0x30 |
0x00039eb0 bne 0x39e98 |
| }
0x00039eb4 add r8, r5, 1 | r8 = r5 + 1;
0x00039eb8 add sb, sb, 1 | sb++;
0x00039ebc strb r3, [r5] | *(r5) = r3;
| do {
0x00039ec0 mov r0, r4 | r0 = r4;
0x00039ec4 bl 0x397c4 | fcn_000397c4 (r0);
0x00039ec8 ldr r3, [r4] | r3 = *(r4);
0x00039ecc sub sb, sb, 1 | sb--;
0x00039ed0 cmp r3, 0x30 |
0x00039ed4 beq 0x39ec0 |
| } while (r3 == 0x30);
0x00039ed8 mov r5, r8 | r5 = r8;
0x00039edc mov r8, 1 | r8 = 1;
0x00039ee0 b 0x39e98 | goto label_7;
| do {
| label_8:
0x00039ee4 sub r2, r5, fp | r2 = r5 - fp;
0x00039ee8 cmp r2, 0x40 |
| if (r2 > 0x40) {
0x00039eec strble r3, [r5] | *(r5) = r3;
| }
0x00039ef0 mov r0, r4 | r0 = r4;
| if (r2 > 0x40) {
0x00039ef4 addle r5, r5, 1 | r5++;
| }
| if (r2 > 0x40) {
0x00039ef8 movle r8, 1 | r8 = 1;
| }
0x00039efc bl 0x397c4 | fcn_000397c4 (r0);
| label_24:
0x00039f00 ldr r3, [r4] | r3 = *(r4);
0x00039f04 ldr r1, [sl] | r1 = *(sl);
0x00039f08 lsl r2, r3, 1 | r2 = r3 << 1;
0x00039f0c ldrh r2, [r1, r2] | r2 = *((r1 + r2));
0x00039f10 tst r2, 0x10 |
| if ((r2 & 0x10) == 0) {
0x00039f14 beq 0x39f38 | goto label_23;
| }
0x00039f18 cmp r6, 0x10 |
0x00039f1c beq 0x39ee4 |
| } while (r6 == 0x10);
0x00039f20 sub r2, r3, 0x2f | r2 = r3 - 0x2f;
0x00039f24 cmp r2, r6 |
| if (r2 <= r6) {
0x00039f28 ble 0x39ee4 | goto label_8;
| }
0x00039f2c cmp r8, 0 |
| if (r8 == 0) {
0x00039f30 beq 0x39f48 | goto label_25;
| }
0x00039f34 b 0x3a02c | goto label_26;
| label_23:
0x00039f38 cmp r8, 0 |
| if (r8 != 0) {
0x00039f3c bne 0x3a014 | goto label_27;
| }
0x00039f40 cmp r6, 0x10 |
| if (r6 == 0x10) {
0x00039f44 beq 0x39e58 | goto label_9;
| }
| label_25:
0x00039f48 ldr r3, [r4] | r3 = *(r4);
0x00039f4c orr r2, r3, 0x20 | r2 = r3 | 0x20;
0x00039f50 cmp r2, 0x69 |
| if (r2 == 0x69) {
0x00039f54 beq 0x39f6c | goto label_28;
| }
0x00039f58 cmp r2, 0x6e |
| if (r2 != 0x6e) {
0x00039f5c bne 0x39e58 | goto label_9;
| }
0x00039f60 ldr r6, [pc, 0x1ac] | r6 = *(0x3a110);
0x00039f64 add r6, pc, r6 | r6 = pc + r6;
0x00039f68 b 0x39f78 | goto label_29;
| label_28:
0x00039f6c ldr r6, [pc, 0x1a4] | r6 = *(0x3a114);
0x00039f70 add r6, pc, r6 | r6 = pc + r6;
0x00039f74 add r6, r6, 3 | r6 += 3;
| label_29:
0x00039f78 strb r3, [r5] | *(r5) = r3;
0x00039f7c add r5, r5, 1 | r5 += var_1h;
| do {
0x00039f80 mov r0, r4 | r0 = r4;
0x00039f84 bl 0x397c4 | fcn_000397c4 (r0);
0x00039f88 ldr r3, [r4] | r3 = *(r4);
0x00039f8c mov r8, r6 | r8 = r6;
0x00039f90 ldrb r2, [r6], 1 | r2 = *(r6);
| r6++;
0x00039f94 orr r1, r3, 0x20 | r1 = r3 | 0x20;
0x00039f98 cmp r1, r2 |
| if (r1 != r2) {
0x00039f9c strbeq r3, [r5], 1 | *(r5) = r3;
| r5++;
| }
0x00039fa0 beq 0x39f80 |
| } while (r1 == r2);
0x00039fa4 ldr r3, [pc, 0x170] | r3 = *(0x3a118);
0x00039fa8 add r3, pc, r3 | r3 = pc + r3;
0x00039fac add r3, r3, 5 | r3 += 5;
0x00039fb0 cmp r8, r3 |
0x00039fb4 cmpne r2, 0 | __asm ("cmpne r2, 0");
| if (r8 != r3) {
0x00039fb8 bne 0x39e58 | goto label_9;
| }
| do {
| label_10:
0x00039fbc mov r3, 0 | r3 = 0;
0x00039fc0 strb r3, [r5] | *(r5) = r3;
0x00039fc4 mov r2, sb | r2 = sb;
0x00039fc8 add r1, sp, 0xc | r1 += var_ch;
0x00039fcc add r0, sp, 0x10 | r0 += var_10h;
0x00039fd0 bl 0x4dc80 | fcn_0004dc80 (r0, r1);
0x00039fd4 ldrb ip, [r7, 0x44] | ip = *((r7 + 0x44));
0x00039fd8 cmp ip, 0 |
0x00039fdc mov r2, r0 | r2 = r0;
0x00039fe0 mov r3, r1 | r3 = r1;
| if (ip != 0) {
0x00039fe4 beq 0x3a008 |
0x00039fe8 ldr ip, [r7, 0x38] | ip = *((r7 + 0x38));
0x00039fec ldr r5, [r7, 0x2c] | r5 = *((r7 + 0x2c));
0x00039ff0 tst ip, 0x800 |
| if ((ip & 0x800) == 0) {
0x00039ff4 beq 0x3a0ec | goto label_30;
| }
| label_12:
0x00039ff8 strd r2, r3, [r5] | __asm ("strd r2, r3, [r5]");
| label_13:
0x00039ffc ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x0003a000 add r3, r3, 1 | r3++;
0x0003a004 str r3, [r7, 0x34] | *((r7 + 0x34)) = r3;
| }
0x0003a008 mov r0, r4 | r0 = r4;
0x0003a00c bl 0x39848 | fcn_00039848 (r0);
0x0003a010 b 0x39c28 | goto label_2;
| label_27:
0x0003a014 cmp r6, 0x10 |
| if (r6 == 0x10) {
0x0003a018 bne 0x3a02c |
0x0003a01c ldr r3, [r4] | r3 = *(r4);
0x0003a020 orr r3, r3, 0x20 | r3 |= 0x20;
0x0003a024 cmp r3, 0x70 |
| if (r3 == 0x70) {
0x0003a028 beq 0x3a03c | goto label_31;
| }
| }
| label_26:
0x0003a02c ldr r3, [r4] | r3 = *(r4);
0x0003a030 orr r3, r3, 0x20 | r3 |= 0x20;
0x0003a034 cmp r3, 0x65 |
0x0003a038 bne 0x39fbc |
| } while (r3 != 0x65);
| label_31:
0x0003a03c ldr r3, [r4] | r3 = *(r4);
0x0003a040 mov r0, r4 | r0 = r4;
0x0003a044 strb r3, [r5] | *(r5) = r3;
0x0003a048 bl 0x397c4 | fcn_000397c4 (r0);
0x0003a04c ldr r3, [r4] | r3 = *(r4);
0x0003a050 cmp r3, 0 |
| if (r3 < 0) {
0x0003a054 blt 0x39e58 | goto label_9;
| }
0x0003a058 sub r2, r3, 0x2b | r2 = r3 - 0x2b;
0x0003a05c bics r2, r2, 2 | __asm ("bics r2, r2, 2");
| if (r3 == 0) {
0x0003a060 addne r5, r5, 1 | r5 += var_1h;
| }
| if (r3 == 0) {
0x0003a064 bne 0x3a07c |
0x0003a068 strb r3, [r5, 1] | var_1h_2 = r3;
0x0003a06c mov r0, r4 | r0 = r4;
0x0003a070 bl 0x397c4 | fcn_000397c4 (r0);
0x0003a074 add r6, r5, 2 | r6 += var_2h;
0x0003a078 mov r5, r6 | r5 = r6;
| }
0x0003a07c ldr r3, [r4] | r3 = *(r4);
0x0003a080 cmp r3, 0x30 |
| if (r3 == 0x30) {
0x0003a084 movne r6, 0 | r6 = 0;
| }
| if (r3 != 0x30) {
0x0003a088 bne 0x3a0b0 | goto label_11;
| }
0x0003a08c add r6, r5, 1 | r6 += var_1h_2;
0x0003a090 strb r3, [r5] | *(r5) = r3;
| do {
0x0003a094 mov r0, r4 | r0 = r4;
0x0003a098 bl 0x397c4 | fcn_000397c4 (r0);
0x0003a09c ldr r3, [r4] | r3 = *(r4);
0x0003a0a0 cmp r3, 0x30 |
0x0003a0a4 beq 0x3a094 |
| } while (r3 == 0x30);
0x0003a0a8 mov r5, r6 | r5 = r6;
0x0003a0ac mov r6, 1 | r6 = 1;
| label_11:
0x0003a0b0 ldr r3, [r4] | r3 = *(r4);
0x0003a0b4 sub r2, r3, 0x30 | r2 = r3 - 0x30;
0x0003a0b8 cmp r2, 9 |
| if (r2 < 9) {
0x0003a0bc bls 0x3a0cc | goto label_32;
| }
0x0003a0c0 cmp r6, 0 |
| if (r6 != 0) {
0x0003a0c4 bne 0x39fbc | goto label_10;
| }
0x0003a0c8 b 0x39e58 | goto label_9;
| label_32:
0x0003a0cc cmp r6, 0x13 |
| if (r6 > 0x13) {
0x0003a0d0 addls r6, r6, 1 | r6++;
| }
| if (r6 > 0x13) {
0x0003a0d4 strbls r3, [r5] | *(r5) = r3;
| }
0x0003a0d8 mov r0, r4 | r0 = r4;
| if (r6 > 0x13) {
0x0003a0dc andls r6, r6, 0xff | r6 &= 0xff;
| }
| if (r6 > 0x13) {
0x0003a0e0 addls r5, r5, 1 | r5 += var_1h_2;
| }
0x0003a0e4 bl 0x397c4 | fcn_000397c4 (r0);
0x0003a0e8 b 0x3a0b0 | goto label_11;
| label_30:
0x0003a0ec tst ip, 0x400 |
| if ((ip & 0x400) != 0) {
0x0003a0f0 bne 0x39ff8 | goto label_12;
| }
0x0003a0f4 bl 0x71818 | fcn_00071818 (r0, r1);
0x0003a0f8 str r0, [r5] | *(r5) = r0;
0x0003a0fc b 0x39ffc | goto label_13;
| }
; 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/libuClibc-1.0.31.so @ 0x43f34 */
| #include <stdint.h>
|
; (fcn) fcn.00043f34 () | void fcn_00043f34 (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_ch;
| char * src;
| int8_t var_14h_2;
| int8_t var_14h_3;
| int8_t var_14h_4;
| int32_t var_28h;
| int32_t var_0h_2;
| int32_t var_0h_3;
| int32_t var_0h_4;
| int32_t var_2ch;
| r0 = arg1;
| r1 = arg2;
0x00043f34 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00043f38 ldr sl, [pc, 0x12c] | sl = *(0x0004406c);
0x00043f3c ldr fp, [pc, 0x12c] | fp = *(0x00044070);
0x00043f40 sub sp, sp, 0x2c |
0x00043f44 mov r4, 0 | r4 = 0;
0x00043f48 add r3, r0, 3 | r3 = r0 + 3;
0x00043f4c mov r8, r1 | r8 = r1;
0x00043f50 sub r7, r0, 1 | r7 = r0 - 1;
0x00043f54 mov sb, 0x2e | sb = 0x2e;
0x00043f58 str r2, [sp, 4] | var_4h = r2;
0x00043f5c strb r4, [sp, 0x14] | src = r4;
0x00043f60 str r3, [sp] | *(sp) = r3;
| do {
0x00043f64 ldrb r3, [r7, 1]! | r3 = *((r7 += 1));
0x00043f68 add r2, sp, 0x28 | r2 += var_28h;
0x00043f6c umull r0, r1, r3, sl | r0:r1 = r3 * sl;
0x00043f70 add r2, r2, r4 | r2 += r4;
0x00043f74 lsr r5, r1, 5 | r5 = r1 >> 5;
0x00043f78 umull r0, r1, r3, fp | r0:r1 = r3 * fp;
0x00043f7c add r5, r5, 0x30 | r5 += 0x30;
0x00043f80 lsr r0, r1, 3 | r0 = r1 >> 3;
0x00043f84 and r5, r5, 0xff | r5 &= 0xff;
0x00043f88 lsl r0, r0, 0x18 | r0 <<= 0x18;
0x00043f8c strb r5, [r2, -0x14] | src = r5;
0x00043f90 mov r1, 0xa | r1 = 0xa;
0x00043f94 asr r0, r0, 0x18 | r0 >>= 0x18;
0x00043f98 str r2, [sp, 0xc] | var_ch = r2;
0x00043f9c str r3, [sp, 8] | var_8h = r3;
0x00043fa0 bl 0x70dec | fcn_00070dec (r0, r1);
0x00043fa4 cmp r5, 0x30 |
0x00043fa8 add r6, r4, 1 | r6 = r4 + 1;
0x00043fac ldr r3, [sp, 8] | r3 = var_8h;
0x00043fb0 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00043fb4 add r1, r1, 0x30 | r1 += 0x30;
0x00043fb8 and r1, r1, 0xff | r1 &= 0xff;
| if (r5 != 0x30) {
0x00043fbc bne 0x44048 | goto label_1;
| }
0x00043fc0 cmp r1, 0x30 |
| if (r1 == 0x30) {
0x00043fc4 movne r4, r6 | r4 = r6;
| }
0x00043fc8 strb r1, [r2, -0x14] | *((r2 - 0x14)) = r1;
| label_0:
0x00043fcc add r2, sp, 0x28 | r2 += var_28h;
0x00043fd0 mov r0, r3 | r0 = r3;
0x00043fd4 mov r1, 0xa | r1 = 0xa;
0x00043fd8 add r6, r2, r4 | r6 = r2 + r4;
0x00043fdc bl 0x70cf0 | fcn_00070cf0 (r0, r1);
0x00043fe0 add r5, r4, 1 | r5 = r4 + 1;
0x00043fe4 add r3, sp, 0x28 | r3 += var_28h;
0x00043fe8 add r5, r3, r5 | r5 = r3 + r5;
0x00043fec ldr r3, [sp] | r3 = *(sp);
0x00043ff0 add r4, r4, 2 | r4 += 2;
0x00043ff4 cmp r3, r7 |
0x00043ff8 add r1, r1, 0x30 | r1 += 0x30;
0x00043ffc strb r1, [r6, -0x14] | var_14h_3 = r1;
0x00044000 strb sb, [r5, -0x14] | var_14h_4 = sb;
0x00044004 bne 0x43f64 |
| } while (r3 != r7);
0x00044008 mov r4, 0 | r4 = 0;
0x0004400c strb r4, [r5, -0x14] | var_14h_4 = r4;
0x00044010 add r5, sp, 0x14 | r5 += src;
0x00044014 mov r0, r5 | r0 = r5;
0x00044018 bl 0x3e3c0 | strlen ();
0x0004401c ldr r3, [sp, 4] | r3 = var_4h;
0x00044020 cmp r0, r3 |
| if (r0 < r3) {
0x00044024 bls 0x4405c | goto label_2;
| }
0x00044028 ldr r3, [pc, 0x44] | r3 = *(0x44070);
0x0004402c bl 0x11934 | fcn_00011934 ();
0x00044030 mov r2, 0x1c | r2 = 0x1c;
0x00044034 ldr r3, [pc, r3] | r3 = *(0x0004403c);
0x00044038 str r2, [r0, r3] | *((r0 + r3)) = r2;
0x0004403c mov r0, r4 | r0 = r4;
| do {
0x00044040 add sp, sp, 0x2c |
0x00044044 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_1:
0x00044048 add r2, sp, 0x28 | r2 += var_28h;
0x0004404c add r6, r2, r6 | r6 = r2 + r6;
0x00044050 add r4, r4, 2 | r4 += 2;
0x00044054 strb r1, [r6, -0x14] | var_14h_2 = r1;
0x00044058 b 0x43fcc | goto label_0;
| label_2:
0x0004405c mov r1, r5 | r1 = r5;
0x00044060 mov r0, r8 | r0 = r8;
0x00044064 bl 0x3e970 | strcpy (r0, r1)
0x00044068 b 0x44040 |
| } 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/libuClibc-1.0.31.so @ 0x44eb0 */
| #include <stdint.h>
|
; (fcn) fcn.00044eb0 () | void fcn_00044eb0 (int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| int32_t var_6h;
| int32_t var_0h;
| int32_t var_ch;
| void * s1;
| void * addr;
| char * src;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_38h;
| int32_t var_3ch;
| int32_t var_40h;
| int32_t var_44h;
| int32_t var_48h;
| int32_t var_50h;
| int32_t var_54h;
| int32_t var_58h;
| int32_t domain;
| void * s2;
| int32_t var_7ch;
| int32_t var_80h;
| int32_t var_84h;
| int32_t var_88h;
| void * var_8ch;
| int32_t var_90h;
| int32_t var_94h;
| int32_t var_98h;
| int32_t var_9ch;
| void * s;
| int32_t var_a4h;
| int32_t var_b0h;
| int32_t var_b4h;
| int32_t var_bch;
| int32_t var_c0h;
| int32_t var_c4h;
| char * var_d0h;
| int32_t var_1d4h;
| r0 = arg1;
| r1 = arg2;
0x00044eb0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00044eb4 mov r4, r3 | r4 = r3;
0x00044eb8 ldr r3, [pc, 0x794] | r3 = *(0x45650);
0x00044ebc sub sp, sp, 0x1d4 |
0x00044ec0 add r3, pc, r3 | r3 = pc + r3;
0x00044ec4 mov r6, r0 | r6 = r0;
0x00044ec8 mov r0, 0x200 | r0 = 0x200;
0x00044ecc str r3, [sp, 0x30] | var_30h = r3;
0x00044ed0 str r1, [sp, 0x1c] | var_1ch = r1;
0x00044ed4 str r2, [sp, 0x2c] | var_2ch = r2;
0x00044ed8 bl 0x11a90 | r0 = fcn_00011a90 ();
0x00044edc mov r5, r0 | r5 = r0;
0x00044ee0 mov r0, r6 | r0 = r6;
0x00044ee4 bl 0x3e3c0 | strlen ();
0x00044ee8 ldr r3, [pc, 0x768] | r3 = *(0x45654);
0x00044eec cmp r0, r3 |
0x00044ef0 str r0, [sp, 0x18] | src = r0;
| if (r0 > r3) {
0x00044ef4 bhi 0x45644 | goto label_11;
| }
0x00044ef8 add r0, r0, 0x82 | r0 += 0x82;
0x00044efc bl 0x11a90 | fcn_00011a90 ();
0x00044f00 cmp r5, 0 |
| if (r5 != 0) {
0x00044f04 moveq r7, 1 | r7 = 1;
| }
0x00044f08 str r0, [sp, 0x10] | s1 = r0;
0x00044f0c clz r0, r0 | r0 &= r0;
0x00044f10 lsr r0, r0, 5 | r0 >>= 5;
| if (r5 == 0) {
0x00044f14 movne r7, r0 | r7 = r0;
| }
0x00044f18 cmp r7, 0 |
| if (r7 != 0) {
0x00044f1c bne 0x4564c | goto label_12;
| }
0x00044f20 ldrb r3, [r6] | r3 = *(r6);
0x00044f24 cmp r3, 0 |
| if (r3 == 0) {
0x00044f28 beq 0x4564c | goto label_12;
| }
0x00044f2c ldr r3, [sp, 0x18] | r3 = src;
0x00044f30 mov r1, 0x2e | r1 = 0x2e;
0x00044f34 add r3, r6, r3 | r3 = r6 + r3;
0x00044f38 ldrb r3, [r3, -1] | r3 = *((r3 - 1));
0x00044f3c mov r0, r6 | r0 = r6;
0x00044f40 str r3, [sp, 0x34] | var_34h = r3;
0x00044f44 bl 0x3ef3c | index ();
0x00044f48 ldr r2, [sp, 0x18] | r2 = src;
0x00044f4c mov r1, r6 | r1 = r6;
0x00044f50 str r0, [sp, 0x38] | var_38h = r0;
0x00044f54 ldr r0, [sp, 0x10] | r0 = s1;
0x00044f58 bl 0x3e480 | memcpy (r0, r1, r2);
0x00044f5c mvn r3, 0 | r3 = ~0;
0x00044f60 str r7, [sp, 0x28] | var_28h = r7;
0x00044f64 str r3, [sp, 0xc] | var_ch = r3;
0x00044f68 mov r7, r3 | r7 = r3;
0x00044f6c ldr r3, [sp, 0x28] | r3 = var_28h;
0x00044f70 str r3, [sp, 0x20] | var_20h = r3;
| label_0:
0x00044f74 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00044f78 ldr r3, [pc, 0x6dc] | r3 = *(0x45658);
0x00044f7c ldr r6, [pc, 0x6dc] | r6 = *(0x4565c);
0x00044f80 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00044f84 add r6, pc, r6 | r6 = pc + r6;
0x00044f88 mov r1, r3 | r1 = r3;
0x00044f8c mov r2, r6 | r2 = r6;
0x00044f90 add r0, sp, 0xd0 | r0 += var_d0h;
0x00044f94 str r3, [sp, 0x14] | addr = r3;
0x00044f98 bl 0x11dc0 | fcn_00011dc0 ();
0x00044f9c mov r0, r6 | r0 = r6;
0x00044fa0 bl 0x68ab8 | pthread_mutex_lock ();
0x00044fa4 bl 0x4572c | fcn_0004572c ();
0x00044fa8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00044fac cmp r3, 0xc |
| if (r3 == 0xc) {
0x00044fb0 ldrne r3, [pc, 0x6ac] | r3 = "U_";
| }
| if (r3 == 0xc) {
0x00044fb4 addne r3, pc, r3 | r3 = pc + r3;
| }
| if (r3 == 0xc) {
0x00044fb8 ldrne r3, [r3] | r3 = *(r3);
| }
| if (r3 == 0xc) {
0x00044fbc strne r3, [sp, 0x28] | var_28h = r3;
| }
0x00044fc0 ldr r3, [sp, 0x10] | r3 = s1;
0x00044fc4 ldr r2, [sp, 0x18] | r2 = src;
0x00044fc8 ldr r1, [sp, 0x28] | r1 = var_28h;
0x00044fcc add r2, r3, r2 | r2 = r3 + r2;
0x00044fd0 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00044fd4 cmp r3, 0 |
| if (r3 == 0) {
0x00044fd8 movne r3, r7 | r3 = r7;
| }
| if (r3 != 0) {
0x00044fdc addeq r3, r7, 1 | r3 = r7 + 1;
| }
0x00044fe0 cmp r1, r3 |
| if (r1 > r3) {
0x00044fe4 movls r3, 0 | r3 = 0;
| }
| if (r1 > r3) {
0x00044fe8 strbls r3, [r2] | *(r2) = r3;
| }
| if (r1 >= r3) {
0x00044fec bls 0x4501c |
0x00044ff0 mov r1, 0x2e | r1 = 0x2e;
0x00044ff4 strb r1, [r2] | *(r2) = r1;
0x00044ff8 ldr r2, [pc, 0x668] |
0x00044ffc ldr r1, [sp, 0x18] | r1 = src;
0x00045000 add r2, pc, r2 | r2 = pc + r2;
0x00045004 ldr r2, [r2] | r2 = "U_";
0x00045008 add r0, r1, 1 | r0 = r1 + 1;
0x0004500c ldr r1, [r2, r3, lsl 2] | r1 = "U_";
0x00045010 ldr r3, [sp, 0x10] | r3 = s1;
0x00045014 add r0, r3, r0 | r0 = r3 + r0;
0x00045018 bl 0x3e970 | strcpy (r0, r1)
| }
0x0004501c ldr r3, [pc, 0x648] |
0x00045020 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00045024 add r3, pc, r3 | r3 = pc + r3;
0x00045028 cmp r2, 0 |
0x0004502c ldr r3, [r3] | r3 = *(0x45668);
| if (r2 < 0) {
0x00045030 bge 0x45068 |
0x00045034 ldr r2, [pc, 0x634] | r2 = *(0x4566c);
0x00045038 add r2, pc, r2 | r2 = pc + r2;
0x0004503c ldrh r2, [r2] | r2 = *(r2);
0x00045040 str r2, [sp, 0x24] | var_24h = r2;
0x00045044 ldr r2, [pc, 0x628] |
0x00045048 add r2, pc, r2 | r2 = pc + r2;
0x0004504c ldr r2, [r2] | r2 = *(0x45670);
0x00045050 str r2, [sp, 0xc] | var_ch = r2;
0x00045054 ldr r2, [pc, 0x61c] | r2 = *(0x45674);
0x00045058 add r2, pc, r2 | r2 = pc + r2;
0x0004505c ldrb r2, [r2] | r2 = *(r2);
0x00045060 mul r1, r3, r2 | r1 = r3 * r2;
0x00045064 str r1, [sp, 0x20] | var_20h = r1;
| }
0x00045068 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004506c mov fp, 0x1c |
0x00045070 cmp r2, r3 |
0x00045074 ldr r3, [sp, 0x24] | r3 = var_24h;
| if (r2 < r3) {
0x00045078 movhs r2, 0 | r2 = 0;
| }
0x0004507c add r3, r3, 1 | r3++;
0x00045080 str r2, [sp, 0xc] | var_ch = r2;
0x00045084 lsl r2, r3, 0x10 | r2 = r3 << 0x10;
0x00045088 lsr r2, r2, 0x10 | r2 >>= 0x10;
0x0004508c str r2, [sp, 0x24] | var_24h = r2;
0x00045090 ldr r2, [pc, 0x5e4] | r2 = *(0x45678);
0x00045094 add lr, sp, 0x5c | lr += domain;
0x00045098 add r2, pc, r2 | r2 = pc + r2;
0x0004509c strh r3, [r2] | *(r2) = r3;
0x000450a0 ldr r3, [pc, 0x5d8] | r3 = *(0x4567c);
0x000450a4 ldr r2, [sp, 0xc] | r2 = var_ch;
0x000450a8 add r3, pc, r3 | r3 = pc + r3;
0x000450ac str r2, [r3] | *(r3) = r2;
0x000450b0 ldr r3, [pc, 0x5cc] | r3 = *(0x45680);
0x000450b4 add r6, sp, 0xa0 | r6 += s;
0x000450b8 ldr ip, [pc, r3] | ip = *(0x000450c0);
0x000450bc mov r3, r2 | r3 = r2;
0x000450c0 mla r3, fp, r3, ip | __asm ("mla r3, fp, r3, ip");
0x000450c4 mov sl, 1 | sl = 1;
0x000450c8 mov ip, r3 |
0x000450cc ldm ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x000450d0 stm lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x000450d4 ldm ip, {r0, r1, r2} | r0 = *(ip);
| r1 = *((ip + 4));
| r2 = *((ip + 8));
0x000450d8 stm lr, {r0, r1, r2} | *(lr) = r0;
| *((lr + 4)) = r1;
| *((lr + 8)) = r2;
0x000450dc mov r1, 1 | r1 = 1;
0x000450e0 add r0, sp, 0xd0 | r0 += var_d0h;
0x000450e4 bl 0x11b38 | fcn_00011b38 ();
0x000450e8 mov r2, 0x200 | r2 = 0x200;
0x000450ec mov r1, 0 | r1 = 0;
0x000450f0 mov r0, r5 | r0 = r5;
0x000450f4 bl 0x3e310 | memset (r0, r1, r2);
0x000450f8 mov r2, 0x30 | r2 = 0x30;
0x000450fc mov r1, 0 | r1 = 0;
0x00045100 mov r0, r6 | r0 = r6;
0x00045104 bl 0x3e310 | memset (r0, r1, r2);
0x00045108 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0004510c mov r2, 0x200 | r2 = 0x200;
0x00045110 mov r1, r5 | r1 = r5;
0x00045114 mov r0, r6 | r0 = r6;
0x00045118 str r3, [sp, 0xa0] | s = r3;
0x0004511c str sl, [sp, 0xc0] | var_c0h = sl;
0x00045120 str sl, [sp, 0xb4] | var_b4h = sl;
0x00045124 bl 0x447c8 | fcn_000447c8 (r0, r1);
0x00045128 subs r8, r0, 0 | r8 -= s;
| if (r8 < s) {
0x0004512c blt 0x4564c | goto label_12;
| }
0x00045130 ldr r3, [sp, 0x10] | r3 = s1;
0x00045134 rsb r2, r8, 0x200 | r2 = 0x200 - r8;
0x00045138 str r3, [sp, 0x50] | var_50h = r3;
0x0004513c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00045140 add r1, r5, r8 | r1 = r5 + r8;
0x00045144 add r0, sp, 0x50 | r0 += var_50h;
0x00045148 str r3, [sp, 0x54] | var_54h = r3;
0x0004514c str sl, [sp, 0x58] | var_58h = sl;
0x00045150 bl 0x44b8c | fcn_00044b8c (r0, r1);
0x00045154 subs sb, r0, 0 | sb -= var_50h;
| if (sb < var_50h) {
0x00045158 blt 0x4564c | goto label_12;
| }
0x0004515c add r3, sp, 0x5c | r3 += domain;
0x00045160 mov r2, 0x11 | r2 = 0x11;
0x00045164 mov r1, 2 | r1 = 2;
0x00045168 ldrh r0, [sp, 0x5c] | r0 = domain;
0x0004516c str r3, [sp, 0x14] | addr = r3;
0x00045170 bl 0x492e4 | r0 = socket (r0, r1, r2);
0x00045174 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x00045178 blt 0x45234 | goto label_3;
| }
0x0004517c ldr r3, [sp, 0x14] | r3 = addr;
0x00045180 mov r2, fp | r2 = fp;
0x00045184 mov r1, r3 | r1 = r3;
0x00045188 bl 0x48c54 | r0 = connect (r0, r1, r2);
0x0004518c cmp r0, 0 |
| if (r0 < 0) {
0x00045190 blt 0x45234 | goto label_3;
| }
0x00045194 add r2, r8, sb | r2 = r8 + sb;
0x00045198 mov r3, 0 | r3 = 0;
0x0004519c mov r1, r5 | r1 = r5;
0x000451a0 mov r0, r6 | r0 = r6;
0x000451a4 bl 0x49034 | send ();
0x000451a8 ldr r3, [pc, 0x4d8] | r3 = *(0x45684);
0x000451ac add fp, sp, 0x48 |
0x000451b0 add r3, pc, r3 | r3 = pc + r3;
0x000451b4 ldrb sb, [r3] | sb = *(r3);
0x000451b8 mov r3, 0x3e8 | r3 = 0x3e8;
0x000451bc mul r2, r3, sb | r2 = r3 * sb;
0x000451c0 mov sb, r2 | sb = r2;
| do {
0x000451c4 mov r2, sb | r2 = sb;
0x000451c8 mov r1, 1 | r1 = 1;
0x000451cc mov r0, fp | r0 = fp;
0x000451d0 str r6, [sp, 0x48] | var_48h = r6;
0x000451d4 strh sl, [fp, 4] | var_4h = sl;
0x000451d8 bl 0x1447c | r0 = poll ();
0x000451dc cmp r0, 0 |
| if (r0 <= 0) {
0x000451e0 ble 0x45234 | goto label_3;
| }
0x000451e4 ldrh r3, [fp, 6] | r3 = var_6h;
0x000451e8 tst r3, 0x38 |
| if ((r3 & 0x38) != 0) {
0x000451ec bne 0x45234 | goto label_3;
| }
0x000451f0 sub r3, sb, 0x3e8 | r3 = sb - 0x3e8;
0x000451f4 mov sb, r3 | sb = r3;
0x000451f8 mov r2, 0x200 | r2 = 0x200;
0x000451fc mov r3, 0x40 | r3 = 0x40;
0x00045200 mov r1, r5 | r1 = r5;
0x00045204 mov r0, r6 | r0 = r6;
0x00045208 bl 0x48e08 | r0 = recv (r0, r1);
0x0004520c cmp r0, 0xb |
0x00045210 str r0, [sp, 0x14] | addr = r0;
| if (r0 > 0xb) {
0x00045214 bgt 0x452a8 | goto label_13;
| }
| label_1:
0x00045218 ldr r8, [sp, 0x14] | r8 = addr;
0x0004521c cmp sb, 0 |
0x00045220 mvn r8, r8 | r8 = ~r8;
0x00045224 lsr r8, r8, 0x1f | r8 >>= 0x1f;
| if (sb != 0) {
0x00045228 moveq r8, 0 | r8 = 0;
| }
0x0004522c cmp r8, 0 |
0x00045230 bne 0x451c4 |
| } while (r8 != 0);
| label_3:
0x00045234 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00045238 mvn r7, 0 | r7 = ~0;
0x0004523c sub r3, r3, 1 | r3--;
0x00045240 str r3, [sp, 0x20] | var_20h = r3;
0x00045244 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00045248 add r3, r3, 1 | r3++;
0x0004524c str r3, [sp, 0xc] | var_ch = r3;
| label_2:
0x00045250 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00045254 cmp r3, 0 |
| if (r3 <= 0) {
0x00045258 bgt 0x45294 |
| label_10:
0x0004525c ldr r3, [pc, 0x428] | r3 = *(0x45688);
0x00045260 bl 0x11934 | fcn_00011934 ();
0x00045264 mvn r2, 0 | r2 = ~0;
0x00045268 ldr r3, [pc, r3] | r3 = *(0x00045270);
0x0004526c cmp r6, r2 |
0x00045270 str r2, [r0, r3] | *((r0 + r3)) = r2;
| if (r6 != r2) {
0x00045274 bne 0x4531c | goto label_14;
| }
| label_4:
0x00045278 ldr r0, [sp, 0x10] | r0 = s1;
0x0004527c bl 0x120a8 | fcn_000120a8 ();
0x00045280 mov r0, r5 | r0 = r5;
0x00045284 bl 0x120a8 | fcn_000120a8 ();
0x00045288 mvn r3, 0 | r3 = ~0;
0x0004528c str r3, [sp, 0x14] | addr = r3;
0x00045290 b 0x454b0 | goto label_15;
| }
0x00045294 cmn r6, 1 |
| if (r6 == 1) {
0x00045298 beq 0x44f74 | goto label_0;
| }
0x0004529c mov r0, r6 | r0 = r6;
0x000452a0 bl 0x15ac8 | close (r0);
0x000452a4 b 0x44f74 | goto label_0;
| label_13:
0x000452a8 add r1, sp, 0xa0 | r1 += s;
0x000452ac mov r0, r5 | r0 = r5;
0x000452b0 bl 0x448c0 | fcn_000448c0 (r0, r1);
0x000452b4 ldr r3, [sp, 0xa0] | r3 = s;
0x000452b8 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000452bc cmp r3, r2 |
| if (r3 != r2) {
0x000452c0 bne 0x45218 | goto label_1;
| }
0x000452c4 ldr r3, [sp, 0xa4] | r3 = var_a4h;
0x000452c8 cmp r3, 0 |
| if (r3 == 0) {
0x000452cc beq 0x45218 | goto label_1;
| }
0x000452d0 ldr sl, [sp, 0xbc] | sl = var_bch;
0x000452d4 sub r3, sl, 2 | r3 = sl - 2;
0x000452d8 cmp r3, 1 |
| if (r3 > 1) {
0x000452dc bhi 0x45328 | goto label_16;
| }
0x000452e0 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000452e4 cmp r3, 0x2e |
| if (r3 == 0x2e) {
0x000452e8 beq 0x45300 | goto label_17;
| }
0x000452ec ldr r3, [sp, 0x28] | r3 = var_28h;
0x000452f0 sub r3, r3, 1 | r3--;
0x000452f4 cmp r3, r7 |
| if (r3 > r7) {
0x000452f8 addgt r7, r7, 1 | r7++;
| goto label_18;
| }
| if (r3 > r7) {
| label_18:
0x000452fc bgt 0x45250 | goto label_2;
| }
| label_17:
0x00045300 cmp sl, 2 |
| if (sl == 2) {
0x00045304 beq 0x45234 | goto label_3;
| }
0x00045308 ldr r3, [pc, 0x380] | r3 = *(0x4568c);
0x0004530c bl 0x11934 | fcn_00011934 ();
0x00045310 mov r2, 1 | r2 = 1;
0x00045314 ldr r3, [pc, r3] | r3 = *(0x0004531c);
| label_5:
0x00045318 str r2, [r0, r3] | *((r0 + r3)) = r2;
| label_14:
0x0004531c mov r0, r6 | r0 = r6;
0x00045320 bl 0x15ac8 | close (r0);
0x00045324 b 0x45278 | goto label_4;
| label_16:
0x00045328 cmp sl, 0 |
| if (sl != 0) {
0x0004532c bne 0x45234 | goto label_3;
| }
0x00045330 ldr r3, [sp, 0xc4] | r3 = var_c4h;
0x00045334 cmp r3, 0 |
| if (r3 <= 0) {
0x00045338 ble 0x454bc | goto label_19;
| }
0x0004533c ldr r7, [sp, 0xc0] | r7 = var_c0h;
0x00045340 mov ip, sl |
0x00045344 mov sb, 0xc | sb = 0xc;
| label_6:
0x00045348 cmp r7, ip |
| if (r7 > ip) {
0x0004534c bgt 0x454d0 | goto label_20;
| }
0x00045350 mov r3, 0 | r3 = 0;
0x00045354 str r3, [r4] | *(r4) = r3;
0x00045358 add r3, sp, 0xd0 | r3 += var_d0h;
0x0004535c mov fp, 1 |
0x00045360 mov r8, r3 | r8 = r3;
| label_9:
0x00045364 ldr r3, [sp, 0xc4] | r3 = var_c4h;
0x00045368 cmp r3, sl |
| if (r3 <= sl) {
0x0004536c ble 0x45484 | goto label_8;
| }
0x00045370 mov r3, 0x100 | r3 = 0x100;
0x00045374 str r3, [sp] | *(sp) = r3;
0x00045378 ldr r2, [sp, 0x14] | r2 = addr;
0x0004537c mov r3, r8 | r3 = r8;
0x00045380 mov r1, sb | r1 = sb;
0x00045384 mov r0, r5 | r0 = r5;
0x00045388 bl 0x44a74 | r0 = fcn_00044a74 (r0, r1, r2);
0x0004538c cmp r0, 0 |
| if (r0 >= 0) {
0x00045390 blt 0x45470 |
0x00045394 ldr r3, [sp, 0x14] | r3 = addr;
0x00045398 add r2, r0, 0xa | r2 = r0 + 0xa;
0x0004539c add r1, sb, r2 | r1 = sb + r2;
0x000453a0 subs r1, r3, r1 | r1 = r3 - r1;
0x000453a4 str r2, [sp, 0x44] | var_44h = r2;
0x000453a8 str r1, [sp, 0x40] | var_40h = r1;
| if (r1 < r3) {
0x000453ac bmi 0x45470 | goto label_21;
| }
0x000453b0 add r3, sb, r0 | r3 = sb + r0;
0x000453b4 mov r0, r8 | r0 = r8;
0x000453b8 add r7, r5, r3 | r7 = r5 + r3;
0x000453bc str r3, [sp, 0x3c] | var_3ch = r3;
0x000453c0 bl 0x3f894 | strdup ();
0x000453c4 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000453c8 ldrb lr, [r7, 1] |
0x000453cc ldrb ip, [r5, r3] | ip = *((r5 + r3));
0x000453d0 ldr r1, [sp, 0x40] | r1 = var_40h;
0x000453d4 orr lr, ip, lr, lsl 8 | lr = ip | (lr << 8);
0x000453d8 lsr ip, lr, 8 |
0x000453dc orr ip, ip, lr, lsl 8 |
0x000453e0 lsl ip, ip, 0x10 |
0x000453e4 lsr ip, ip, 0x10 |
0x000453e8 ldrb lr, [r7, 3] |
0x000453ec str ip, [sp, 0x7c] | var_7ch = ip;
0x000453f0 ldrb ip, [r7, 2] | ip = *((r7 + 2));
0x000453f4 add r3, r3, 0xa | r3 += 0xa;
0x000453f8 orr lr, ip, lr, lsl 8 | lr = ip | (lr << 8);
0x000453fc lsr ip, lr, 8 |
0x00045400 orr ip, ip, lr, lsl 8 |
0x00045404 lsl ip, ip, 0x10 |
0x00045408 lsr ip, ip, 0x10 |
0x0004540c str ip, [sp, 0x80] | var_80h = ip;
0x00045410 ldrb ip, [r7, 5] | ip = *((r7 + 5));
0x00045414 ldrb lr, [r7, 4] |
0x00045418 lsl ip, ip, 0x10 |
0x0004541c orr ip, ip, lr, lsl 24 |
0x00045420 ldrb lr, [r7, 7] |
0x00045424 add r7, r7, 0xa | r7 += 0xa;
0x00045428 orr ip, ip, lr |
0x0004542c ldrb lr, [r7, -4] |
0x00045430 str r0, [sp, 0x78] | s2 = r0;
0x00045434 orr ip, ip, lr, lsl 8 |
0x00045438 str ip, [sp, 0x84] | var_84h = ip;
0x0004543c ldrb lr, [r7, -1] |
0x00045440 ldrb ip, [r7, -2] | ip = *((r7 - 2));
0x00045444 str r3, [sp, 0x90] | var_90h = r3;
0x00045448 orr ip, ip, lr, lsl 8 |
0x0004544c lsr lr, ip, 8 | lr = ip >> 8;
0x00045450 orr ip, lr, ip, lsl 8 |
0x00045454 lsl ip, ip, 0x10 |
0x00045458 lsr ip, ip, 0x10 |
0x0004545c cmp r1, ip |
0x00045460 str ip, [sp, 0x88] | var_88h = ip;
0x00045464 str r7, [sp, 0x8c] | var_8ch = r7;
0x00045468 ldr r2, [sp, 0x44] | r2 = var_44h;
| if (r1 >= ip) {
0x0004546c bge 0x45540 | goto label_22;
| }
| }
| label_21:
0x00045470 cmp sl, 0 |
| if (sl == 0) {
0x00045474 beq 0x45234 | goto label_3;
| }
0x00045478 ldr r3, [sp, 0xb0] | r3 = var_b0h;
0x0004547c cmp r3, 0 |
| if (r3 == 0) {
0x00045480 beq 0x45234 | goto label_3;
| }
| label_8:
0x00045484 mov r0, r6 | r0 = r6;
0x00045488 bl 0x15ac8 | close (r0);
0x0004548c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00045490 cmp r3, 0 |
| if (r3 == 0) {
0x00045494 ldrne r3, [sp, 0x2c] | r3 = var_2ch;
| }
| if (r3 == 0) {
0x00045498 strne r5, [r3] | *(r3) = r5;
| }
| if (r3 == 0) {
0x0004549c bne 0x454a8 |
0x000454a0 mov r0, r5 | r0 = r5;
0x000454a4 bl 0x120a8 | fcn_000120a8 ();
| }
0x000454a8 ldr r0, [sp, 0x10] | r0 = s1;
0x000454ac bl 0x120a8 | fcn_000120a8 ();
| label_15:
0x000454b0 ldr r0, [sp, 0x14] | r0 = addr;
0x000454b4 add sp, sp, 0x1d4 |
0x000454b8 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_19:
0x000454bc ldr r3, [pc, 0x1d0] | r3 = *(0x45690);
0x000454c0 bl 0x11934 | fcn_00011934 ();
0x000454c4 mov r2, 4 | r2 = 4;
0x000454c8 ldr r3, [pc, r3] | r3 = *(0x000454d0);
0x000454cc b 0x45318 | goto label_5;
| label_20:
0x000454d0 ldr r3, [sp, 0x14] | r3 = addr;
0x000454d4 adds lr, r5, sb | lr = r5 + sb;
0x000454d8 sub r2, r3, sb | r2 = r3 - sb;
| if (lr == r5) {
0x000454dc beq 0x45234 | goto label_3;
| }
0x000454e0 mov r0, lr | r0 = lr;
| label_7:
0x000454e4 cmp r2, 0 |
| if (r2 <= 0) {
0x000454e8 ble 0x45234 | goto label_3;
| }
0x000454ec ldrb r1, [r0] | r1 = *(r0);
0x000454f0 add r3, r0, 1 | r3 = r0 + 1;
0x000454f4 cmp r1, 0 |
| if (r1 != 0) {
0x000454f8 beq 0x45510 |
0x000454fc and fp, r1, 0xc0 |
0x00045500 cmp fp, 0xc0 |
| if (fp != 0xc0) {
0x00045504 bne 0x45530 | goto label_23;
| }
0x00045508 add r3, r0, 2 | r3 = r0 + 2;
0x0004550c sub r2, r2, 2 | r2 -= 2;
| }
0x00045510 cmp r2, 3 |
| if (r2 <= 3) {
0x00045514 ble 0x45234 | goto label_3;
| }
0x00045518 sub r3, r3, lr | r3 -= lr;
0x0004551c adds r3, r3, 4 | r3 += 4;
| if (r3 < r3) {
0x00045520 bmi 0x45234 | goto label_3;
| }
0x00045524 add sb, sb, r3 | sb += r3;
0x00045528 add ip, ip, 1 |
0x0004552c b 0x45348 | goto label_6;
| label_23:
0x00045530 sub r2, r2, 1 | r2--;
0x00045534 add r0, r3, r1 | r0 = r3 + r1;
0x00045538 sub r2, r2, r1 | r2 -= r1;
0x0004553c b 0x454e4 | goto label_7;
| label_22:
0x00045540 add r2, r2, ip | r2 += ip;
0x00045544 cmp fp, 0 |
0x00045548 add sb, sb, r2 | sb += r2;
| if (fp == 0) {
0x0004554c bne 0x45580 |
0x00045550 bl 0x120a8 | fcn_000120a8 ();
0x00045554 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x00045558 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0004555c cmp r3, r2 |
| if (r3 != r2) {
0x00045560 bne 0x45618 | goto label_24;
| }
0x00045564 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x00045568 ldr r3, [sp, 0x88] | r3 = var_88h;
0x0004556c cmp r2, r3 |
| if (r2 == r3) {
0x00045570 beq 0x45620 | goto label_25;
| }
0x00045574 ldr r0, [r4] | r0 = *(r4);
0x00045578 bl 0x120a8 | fcn_000120a8 ();
0x0004557c b 0x45234 | goto label_3;
| }
0x00045580 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x00045584 ldr r0, [r4] | r0 = *(r4);
0x00045588 str r3, [sp, 0x94] | var_94h = r3;
0x0004558c ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x00045590 str r3, [sp, 0x98] | var_98h = r3;
0x00045594 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x00045598 str r3, [sp, 0x9c] | var_9ch = r3;
0x0004559c bl 0x120a8 | fcn_000120a8 ();
0x000455a0 mov r2, 0x28 | r2 = 0x28;
0x000455a4 add r1, sp, 0x78 | r1 += s2;
0x000455a8 mov r0, r4 | r0 = r4;
0x000455ac bl 0x3e480 | memcpy (r0, r1, r2);
0x000455b0 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000455b4 cmp r3, 0x18 |
| if (r3 == 0x18) {
0x000455b8 beq 0x455d8 | goto label_26;
| }
0x000455bc ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x000455c0 cmp r2, 0 |
| if (r2 == 0) {
0x000455c4 beq 0x45484 | goto label_8;
| }
0x000455c8 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000455cc cmp r2, 1 |
0x000455d0 cmpne r2, 0x1c | __asm ("cmpne r2, 0x1c");
| if (r2 != 1) {
0x000455d4 bne 0x45484 | goto label_8;
| }
| label_26:
0x000455d8 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000455dc cmp r3, r2 |
| if (r3 != r2) {
0x000455e0 bne 0x45618 | goto label_24;
| }
0x000455e4 ldr r3, [sp, 0xc4] | r3 = var_c4h;
0x000455e8 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x000455ec sub r3, r3, sl | r3 -= sl;
0x000455f0 sub r1, r3, 1 | r1 = r3 - 1;
0x000455f4 add r2, r2, 4 | r2 += 4;
0x000455f8 mul r3, r2, r1 | r3 = r2 * r1;
0x000455fc ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x00045600 str r1, [r4, 0x24] | *((r4 + 0x24)) = r1;
0x00045604 cmp r3, r2 |
| if (r3 > r2) {
0x00045608 bhi 0x45484 | goto label_8;
| }
0x0004560c mov r3, 0 | r3 = 0;
0x00045610 mov fp, r3 |
0x00045614 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
| do {
| label_24:
0x00045618 add sl, sl, 1 | sl++;
0x0004561c b 0x45364 | goto label_9;
| label_25:
0x00045620 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x00045624 ldr ip, [r4, 0x24] | ip = *((r4 + 0x24));
0x00045628 ldr r1, [sp, 0x8c] | r1 = var_8ch;
0x0004562c mla r0, r2, ip, r3 | __asm ("mla r0, r2, ip, r3");
0x00045630 bl 0x3e480 | memcpy (r0, r1, r2);
0x00045634 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x00045638 add r3, r3, 1 | r3++;
0x0004563c str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x00045640 b 0x45618 |
| } while (1);
| label_11:
0x00045644 mov r3, 0 | r3 = 0;
0x00045648 str r3, [sp, 0x10] | s1 = r3;
| label_12:
0x0004564c mvn r6, 0 | r6 = ~0;
0x00045650 b 0x4525c | goto label_10;
| }
; 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/libuClibc-1.0.31.so @ 0x3531c */
| #include <stdint.h>
|
; (fcn) sym.ctermid () | void ctermid (uint32_t arg1) {
| r0 = arg1;
0x0003531c cmp r0, 0 |
| if (r0 != 0) {
0x00035320 ldreq r0, [pc, 0xc] | r0 = *((pc + 0xc));
| }
| if (r0 != 0) {
0x00035324 addeq r0, pc, r0 | r0 = pc + r0;
| }
0x00035328 ldr r1, [pc, 8] | r1 = *(0x35334);
0x0003532c add r1, pc, r1 | r1 = pc + r1;
0x00035330 b 0x3e970 | return void (*0x3e970)() ();
| }
; 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/libuClibc-1.0.31.so @ 0x4fae0 */
| #include <stdint.h>
|
; (fcn) sym.cuserid () | void cuserid (int32_t arg1) {
| r0 = arg1;
0x0004fae0 push {r4, lr} |
0x0004fae4 mov r4, r0 | r4 = r0;
0x0004fae8 bl 0x4fa88 | getlogin ();
0x0004faec cmp r4, 0 |
0x0004faf0 popeq {r4, pc} |
0x0004faf4 cmp r0, 0 |
0x0004faf8 mov r1, r0 | r1 = r0;
| if (r0 != 0) {
0x0004fafc ldreq r1, [pc, 0xc] | r1 = *((pc + 0xc));
| }
| if (r0 != 0) {
0x0004fb00 addeq r1, pc, r1 | r1 = pc + r1;
| }
0x0004fb04 mov r0, r4 | r0 = r4;
0x0004fb08 pop {r4, lr} |
0x0004fb0c b 0x3e970 | return void (*0x3e970)() ();
| }
; 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/libuClibc-1.0.31.so @ 0x496d8 */
| #include <stdint.h>
|
; (fcn) sym.ether_ntohost () | void ether_ntohost (int32_t arg1, int32_t arg2) {
| void * s2;
| char * src;
| int32_t var_108h;
| r0 = arg1;
| r1 = arg2;
0x000496d8 push {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000496dc mov r8, r0 | r8 = r0;
0x000496e0 mov sb, r1 | sb = r1;
0x000496e4 ldr r0, [pc, 0x94] | r0 = *(0x4977c);
0x000496e8 ldr r1, [pc, 0x94] | r1 = *(0x49780);
0x000496ec sub sp, sp, 0x108 |
0x000496f0 add r1, pc, r1 | r1 = pc + r1;
0x000496f4 add r0, pc, r0 | r0 = pc + r0;
0x000496f8 bl 0x33c58 | r0 = fopen (r0, r1);
0x000496fc subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 == r0) {
0x00049700 addne r6, sp, 8 | r6 += src;
| }
| if (r5 == r0) {
0x00049704 movne r7, sp | r7 = sp;
| }
| if (r5 != r0) {
0x00049708 bne 0x49760 | goto label_1;
| }
0x0004970c mvn r4, 0 | r4 = ~0;
0x00049710 b 0x49754 |
| while (r0 != 0) {
0x00049714 mov r1, r7 | r1 = r7;
0x00049718 mov r0, r6 | r0 = r6;
0x0004971c bl 0x4962c | fcn_0004962c (r0, r1);
0x00049720 subs sl, r0, 0 | sl -= src;
| if (sl != src) {
0x00049724 beq 0x49760 |
0x00049728 mov r2, 6 | r2 = 6;
0x0004972c mov r1, r7 | r1 = r7;
0x00049730 mov r0, sb | r0 = sb;
0x00049734 bl 0x3e450 | r0 = memcmp ();
0x00049738 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x0004973c bne 0x49760 | goto label_1;
| }
0x00049740 mov r1, sl | r1 = sl;
0x00049744 mov r0, r8 | r0 = r8;
0x00049748 bl 0x3e970 | strcpy (r0, r1)
| label_0:
0x0004974c mov r0, r5 | r0 = r5;
0x00049750 bl 0x334ac | fclose (r0);
0x00049754 mov r0, r4 | r0 = r4;
0x00049758 add sp, sp, 0x108 |
0x0004975c pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
| label_1:
0x00049760 mov r2, r5 | r2 = r5;
0x00049764 mov r1, 0x100 | r1 = 0x100;
0x00049768 mov r0, r6 | r0 = r6;
0x0004976c bl 0x3c144 | r0 = fgets (r0, r1, r2);
0x00049770 cmp r0, 0 |
0x00049774 bne 0x49714 |
| }
0x00049778 mvn r4, 0 | r4 = ~0;
0x0004977c b 0x4974c | 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/libuClibc-1.0.31.so @ 0x15410 */
| #include <stdint.h>
|
; (fcn) sym.getdomainname () | void getdomainname (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_144h;
| char * src;
| int32_t var_1h_2;
| int32_t var_188h;
| r0 = arg1;
| r1 = arg2;
0x00015410 push {r4, r5, r6, lr} |
0x00015414 sub sp, sp, 0x188 |
0x00015418 mov r5, r0 | r5 = r0;
0x0001541c mov r0, sp | r0 = sp;
0x00015420 mov r6, r1 | r6 = r1;
0x00015424 bl 0x135cc | r0 = uname ();
0x00015428 cmn r0, 1 |
| if (r0 == 1) {
0x0001542c beq 0x15464 | goto label_0;
| }
0x00015430 add r4, sp, 0x144 | r4 += var_144h;
0x00015434 add r4, r4, 1 | r4 += src;
0x00015438 mov r0, r4 | r0 = r4;
0x0001543c bl 0x3e3c0 | strlen ();
0x00015440 add r0, r0, 1 | r0 += var_1h_2;
0x00015444 cmp r0, r6 |
| if (r0 < r6) {
0x00015448 bls 0x1546c | goto label_1;
| }
0x0001544c ldr r3, [pc, 0x2c] | r3 = *(0x1547c);
0x00015450 bl 0x11934 | fcn_00011934 ();
0x00015454 mov r2, 0x16 | r2 = 0x16;
0x00015458 ldr r3, [pc, r3] | r3 = *(0x00015460);
0x0001545c str r2, [r0, r3] | *((r0 + r3)) = r2;
0x00015460 mvn r0, 0 | r0 = ~0;
| do {
| label_0:
0x00015464 add sp, sp, 0x188 |
0x00015468 pop {r4, r5, r6, pc} |
| label_1:
0x0001546c mov r1, r4 | r1 = r4;
0x00015470 mov r0, r5 | r0 = r5;
0x00015474 bl 0x3e970 | strcpy (r0, r1)
0x00015478 mov r0, 0 | r0 = 0;
0x0001547c b 0x15464 |
| } 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/libuClibc-1.0.31.so @ 0x4631c */
| #include <stdint.h>
|
; (fcn) sym.gethostbyaddr_r () | void gethostbyaddr_r (int32_t arg_78h, int32_t arg_7ch, int32_t arg_80h, int32_t arg_84h, int32_t arg1, uint32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_14h;
| int32_t var_18h;
| char * format;
| int32_t var_24h;
| char * src;
| int32_t var_2ch;
| int32_t var_40h;
| int32_t var_54h;
| r0 = arg1;
| r1 = arg2;
0x0004631c push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00046320 sub sp, sp, 0x54 |
0x00046324 ldr lr, [sp, 0x80] |
0x00046328 mov ip, 0 |
0x0004632c subs r4, r0, 0 | r4 -= arg_78h;
0x00046330 ldr sb, [sp, 0x78] | sb = *(arg_78h);
0x00046334 ldr r7, [sp, 0x7c] | r7 = *(arg_7ch);
0x00046338 ldr fp, [sp, 0x84] | fp = *(arg_84h);
0x0004633c str ip, [lr] | *(lr) = ip;
| if (r4 == arg_78h) {
0x00046340 beq 0x46354 | goto label_6;
| }
0x00046344 cmp r2, 2 |
| if (r2 == 2) {
0x00046348 beq 0x4635c | goto label_7;
| }
0x0004634c cmp r2, 0xa |
| if (r2 == 0xa) {
0x00046350 beq 0x4647c | goto label_8;
| }
| do {
| label_6:
0x00046354 mov r0, 0x16 | r0 = 0x16;
0x00046358 b 0x4650c | goto label_4;
| label_7:
0x0004635c cmp r1, 4 |
| label_0:
0x00046360 bne 0x46354 |
| } while (r1 != 4);
0x00046364 mov r5, r3 | r5 = r3;
0x00046368 ldr r3, [sp, 0x80] | r3 = *(arg_80h);
0x0004636c str fp, [sp, 0xc] | var_ch = fp;
0x00046370 str r3, [sp, 8] | var_8h = r3;
0x00046374 str r7, [sp, 4] | var_4h = r7;
0x00046378 str sb, [sp] | *(sp) = sb;
0x0004637c mov r3, r5 | r3 = r5;
0x00046380 mov r0, r4 | r0 = r4;
0x00046384 str r2, [sp, 0x18] | var_18h = r2;
0x00046388 mov r6, r1 | r6 = r1;
0x0004638c bl 0x46254 | r0 = fcn_00046254 (r0, r1, r2, r3, r4, r5);
0x00046390 cmp r0, 0 |
| if (r0 == 0) {
0x00046394 beq 0x4650c | goto label_4;
| }
0x00046398 ldr r3, [fp] | r3 = *(fp);
0x0004639c cmp r3, 1 |
| if (r3 != 1) {
0x000463a0 beq 0x463ac |
0x000463a4 cmp r3, 4 |
| if (r3 != 4) {
0x000463a8 bne 0x4650c | goto label_4;
| }
| }
0x000463ac mvn r3, 0 | r3 = ~0;
0x000463b0 cmp r6, 0x10 |
0x000463b4 str r3, [fp] | *(fp) = r3;
| if (r6 > 0x10) {
0x000463b8 bhi 0x465ac | goto label_9;
| }
0x000463bc rsb r3, sb, 0 | r3 = sb - ;
0x000463c0 and r3, r3, 3 | r3 &= 3;
0x000463c4 sub r7, r7, 0x18 | r7 -= 0x18;
0x000463c8 sub r2, r7, r3 | r2 = r7 - r3;
0x000463cc cmp r2, 0xff |
0x000463d0 str r2, [sp, 0x14] | var_14h = r2;
| if (r2 <= 0xff) {
0x000463d4 ble 0x465ac | goto label_9;
| }
0x000463d8 add r8, sb, r3 | r8 = sb + r3;
0x000463dc add r0, r8, 8 | r0 = r8 + 8;
0x000463e0 str r0, [sb, r3] | *((sb + r3)) = r0;
0x000463e4 mov r3, 0 | r3 = 0;
0x000463e8 str r3, [r8, 4] | *((r8 + 4)) = r3;
0x000463ec mov r2, r6 | r2 = r6;
0x000463f0 mov r1, r4 | r1 = r4;
0x000463f4 bl 0x3e480 | memcpy (r0, r1, r2);
0x000463f8 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000463fc add r7, r8, 0x18 | r7 = r8 + 0x18;
0x00046400 cmp r3, 2 |
| if (r3 == 2) {
0x00046404 bne 0x46484 |
0x00046408 ldrb r1, [r4] | r1 = *(r4);
0x0004640c ldrb r3, [r4, 2] | r3 = *((r4 + 2));
0x00046410 ldrb r2, [r4, 3] | r2 = *((r4 + 3));
0x00046414 str r1, [sp, 4] | var_4h = r1;
0x00046418 ldrb r1, [r4, 1] | r1 = *((r4 + 1));
0x0004641c mov r0, r7 | r0 = r7;
0x00046420 str r1, [sp] | *(sp) = r1;
0x00046424 ldr r1, [pc, 0x188] | r1 = *(0x465b0);
0x00046428 add r1, pc, r1 | r1 = pc + r1;
0x0004642c bl 0x34d3c | sprintf ();
| label_1:
0x00046430 add sb, sp, 0x28 | sb += src;
0x00046434 mov r2, 0x28 | r2 = 0x28;
0x00046438 mov r1, 0 | r1 = 0;
0x0004643c mov r0, sb | r0 = sb;
0x00046440 bl 0x3e310 | memset (r0, r1, r2);
0x00046444 mov sl, 6 | sl = 6;
0x00046448 add r3, sp, 0x24 | r3 += var_24h;
0x0004644c str r3, [sp, 0x1c] | format = r3;
| label_2:
0x00046450 mov r3, sb | r3 = sb;
0x00046454 ldr r2, [sp, 0x1c] | r2 = format;
0x00046458 mov r1, 0xc | r1 = 0xc;
0x0004645c mov r0, r7 | r0 = r7;
0x00046460 bl 0x44eb0 | r0 = fcn_00044eb0 (r0, r1);
0x00046464 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 >= r0) {
0x00046468 bge 0x464d4 | goto label_10;
| }
0x0004646c mov r3, 1 | r3 = 1;
| label_5:
0x00046470 str r3, [fp] | *(fp) = r3;
0x00046474 mov r0, 2 | r0 = 2;
0x00046478 b 0x4650c | goto label_4;
| label_8:
0x0004647c cmp r1, 0x10 |
0x00046480 b 0x46360 | goto label_0;
| }
0x00046484 ldr r3, [pc, 0x12c] | r3 = *(0x465b4);
0x00046488 sub sb, r6, 1 | sb = r6 - 1;
0x0004648c add r3, pc, r3 | r3 = pc + r3;
0x00046490 add sb, r4, sb | sb = r4 + sb;
0x00046494 mov sl, r7 | sl = r7;
0x00046498 str r3, [sp, 0x1c] | format = r3;
| do {
0x0004649c ldrb r2, [sb], -1 | r2 = *(sb);
| sb += -1;
0x000464a0 mov r0, sl | r0 = sl;
0x000464a4 lsr r3, r2, 4 | r3 = r2 >> 4;
0x000464a8 ldr r1, [sp, 0x1c] | r1 = format;
0x000464ac and r2, r2, 0xf | r2 &= 0xf;
0x000464b0 bl 0x34d3c | sprintf ();
0x000464b4 cmp r4, sb |
0x000464b8 add sl, sl, r0 | sl += r0;
0x000464bc bls 0x4649c |
| } while (r4 < sb);
0x000464c0 ldr r1, [pc, 0xf4] | r1 = *(0x465b8);
0x000464c4 mov r0, sl | r0 = sl;
0x000464c8 add r1, pc, r1 | r1 = pc + r1;
0x000464cc bl 0x3e970 | strcpy (r0, r1)
0x000464d0 b 0x46430 | goto label_1;
| label_10:
0x000464d4 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000464d8 ldr r1, [sp, 0x28] | r1 = src;
0x000464dc mov r0, r7 | r0 = r7;
0x000464e0 bl 0x3ed10 | strncpy ();
0x000464e4 ldr r0, [sp, 0x28] | r0 = src;
0x000464e8 bl 0x120a8 | fcn_000120a8 ();
0x000464ec ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000464f0 cmp r3, 5 |
| if (r3 != 5) {
0x000464f4 bne 0x46548 | goto label_11;
| }
0x000464f8 subs sl, sl, 1 | sl--;
| if (sl == sl) {
0x000464fc bne 0x46514 |
| label_3:
0x00046500 mov r3, 3 | r3 = 3;
0x00046504 mvn r0, 0 | r0 = ~0;
0x00046508 str r3, [fp] | *(fp) = r3;
| label_4:
0x0004650c add sp, sp, 0x54 |
0x00046510 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00046514 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00046518 mov r2, r4 | r2 = r4;
0x0004651c str r3, [sp] | *(sp) = r3;
0x00046520 ldr r1, [sp, 0x40] | r1 = var_40h;
0x00046524 mov r3, r7 | r3 = r7;
0x00046528 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0004652c bl 0x44a74 | r0 = fcn_00044a74 (r0, r1, r2);
0x00046530 mov r4, r0 | r4 = r0;
0x00046534 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00046538 bl 0x120a8 | fcn_000120a8 ();
0x0004653c cmp r4, 0 |
| if (r4 >= 0) {
0x00046540 bge 0x46450 | goto label_2;
| }
0x00046544 b 0x46500 | goto label_3;
| label_11:
0x00046548 cmp r3, 0xc |
0x0004654c ldr r0, [sp, 0x24] | r0 = var_24h;
| if (r3 == 0xc) {
0x00046550 bne 0x465a0 |
0x00046554 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00046558 mov r2, r4 | r2 = r4;
0x0004655c str r3, [sp] | *(sp) = r3;
0x00046560 ldr r1, [sp, 0x40] | r1 = var_40h;
0x00046564 mov r3, r7 | r3 = r7;
0x00046568 bl 0x44a74 | fcn_00044a74 (r0, r1, r2);
0x0004656c ldr r0, [sp, 0x24] | r0 = var_24h;
0x00046570 bl 0x120a8 | fcn_000120a8 ();
0x00046574 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00046578 mov r0, 0 | r0 = 0;
0x0004657c str r3, [r5, 8] | *((r5 + 8)) = r3;
0x00046580 ldr r3, [sp, 0x80] | r3 = *(arg_80h);
0x00046584 str r7, [r5] | *(r5) = r7;
0x00046588 str r6, [r5, 0xc] | *((r5 + 0xc)) = r6;
0x0004658c str r8, [r5, 0x10] | *((r5 + 0x10)) = r8;
0x00046590 str r8, [r5, 4] | *((r5 + 4)) = r8;
0x00046594 str r5, [r3] | *(r3) = r5;
0x00046598 str r0, [fp] | *(fp) = r0;
0x0004659c b 0x4650c | goto label_4;
| }
0x000465a0 bl 0x120a8 | fcn_000120a8 ();
0x000465a4 mov r3, 4 | r3 = 4;
0x000465a8 b 0x46470 | goto label_5;
| label_9:
0x000465ac mov r0, 0x22 | r0 = 0x22;
0x000465b0 b 0x4650c | goto label_4;
| }
; 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/libuClibc-1.0.31.so @ 0x468ec */
| #include <stdint.h>
|
; (fcn) sym.gethostbyname2_r () | void gethostbyname2_r (int32_t arg_78h, int32_t arg_7ch, int32_t arg_80h, int32_t arg1, uint32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_38h;
| void * s2;
| int32_t var_44h;
| int32_t var_48h;
| int32_t var_4ch;
| int32_t var_54h;
| r0 = arg1;
| r1 = arg2;
0x000468ec push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000468f0 cmp r1, 2 |
0x000468f4 sub sp, sp, 0x54 |
0x000468f8 mov r5, r2 | r5 = r2;
0x000468fc mov r7, r3 | r7 = r3;
0x00046900 ldr sb, [sp, 0x78] | sb = *(arg_78h);
| if (r1 != 2) {
0x00046904 bne 0x46938 | goto label_2;
| }
0x00046908 ldr r3, [sp, 0x80] | r3 = *(arg_80h);
0x0004690c mov r2, r7 | r2 = r7;
0x00046910 str r3, [sp, 4] | var_4h = r3;
0x00046914 ldr r3, [sp, 0x7c] | r3 = *(arg_7ch);
0x00046918 mov r1, r5 | r1 = r5;
0x0004691c str r3, [sp] | *(sp) = r3;
0x00046920 mov r3, sb | r3 = sb;
0x00046924 bl 0x465c0 | r0 = gethostbyname_r ();
0x00046928 mov r4, r0 | r4 = r0;
| do {
| label_0:
0x0004692c mov r0, r4 | r0 = r4;
0x00046930 add sp, sp, 0x54 |
0x00046934 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_2:
0x00046938 subs r1, r1, 0xa | r1 -= 0xa;
0x0004693c mov r8, r0 | r8 = r0;
0x00046940 mov r0, 0 | r0 = 0;
| if (r1 == r1) {
0x00046944 movne r1, 1 | r1 = 1;
| }
0x00046948 ldr ip, [sp, 0x7c] | ip = *(arg_7ch);
0x0004694c cmp r8, r0 |
| if (r8 == r0) {
0x00046950 movne r6, r1 | r6 = r1;
| }
| if (r8 != r0) {
0x00046954 moveq r6, 1 | r6 = 1;
| }
0x00046958 cmp r6, r0 |
0x0004695c str r0, [ip] | *(ip) = r0;
| if (r6 == r0) {
0x00046960 movne r4, 0x16 | r4 = 0x16;
| }
0x00046964 bne 0x4692c |
| } while (r6 != r0);
0x00046968 ldr r1, [pc, 0x2e4] | r1 = *(0x46c50);
0x0004696c bl 0x11934 | r0 = fcn_00011934 ();
0x00046970 mov sl, r0 | sl = r0;
0x00046974 ldr r1, [pc, r1] | r1 = *(0x0004697c);
0x00046978 ldr fp, [r0, r1] | fp = *((r0 + r1));
0x0004697c ldr r1, [pc, 0x2d4] | r1 = *(0x46c54);
0x00046980 ldr r1, [pc, r1] | r1 = *(0x00046988);
0x00046984 str r6, [r0, r1] | *((r0 + r1)) = r6;
0x00046988 ldr r1, [sp, 0x80] | r1 = *(arg_80h);
0x0004698c str sb, [sp] | *(sp) = sb;
0x00046990 str r1, [sp, 8] | var_8h = r1;
0x00046994 ldr r1, [sp, 0x7c] | r1 = *(arg_7ch);
0x00046998 mov r0, r8 | r0 = r8;
0x0004699c str r1, [sp, 4] | var_4h = r1;
0x000469a0 mov r1, 0xa | r1 = 0xa;
0x000469a4 bl 0x462e4 | r0 = fcn_000462e4 (r0, r1, r2, r3, r4);
0x000469a8 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x000469ac ldreq r3, [pc, 0x2a8] | r3 = *((pc + 0x2a8));
| }
| if (r4 != r0) {
0x000469b0 ldreq r3, [pc, r3] | r3 = *(0x000469b8);
| }
| if (r4 == r0) {
0x000469b4 streq fp, [sl, r3] | *((sl + r3)) = fp;
| goto label_3;
| }
| if (r4 == r0) {
| label_3:
0x000469b8 beq 0x4692c | goto label_0;
| }
0x000469bc ldr r3, [sp, 0x80] | r3 = *(arg_80h);
0x000469c0 ldr r3, [r3] | r3 = *(r3);
0x000469c4 cmp r3, 1 |
| if (r3 == 1) {
0x000469c8 beq 0x469f8 | goto label_4;
| }
0x000469cc cmp r3, 4 |
| if (r3 == 4) {
0x000469d0 beq 0x469f0 | goto label_5;
| }
0x000469d4 cmn r3, 1 |
| if (r3 != 1) {
0x000469d8 bne 0x4692c | goto label_0;
| }
0x000469dc ldr r3, [pc, 0x27c] | r3 = *(0x46c5c);
0x000469e0 ldr r3, [pc, r3] | r3 = *(0x000469e8);
0x000469e4 ldr r3, [sl, r3] | r3 = *((sl + r3));
0x000469e8 cmp r3, 2 |
| if (r3 != 2) {
0x000469ec bne 0x4692c | goto label_0;
| }
| label_5:
0x000469f0 mov r4, r6 | r4 = r6;
0x000469f4 b 0x46a04 | goto label_6;
| label_4:
0x000469f8 sub r4, r4, 2 | r4 -= 2;
0x000469fc clz r4, r4 | r4 &= r4;
0x00046a00 lsr r4, r4, 5 | r4 >>= 5;
| label_6:
0x00046a04 ldr r3, [pc, 0x258] | r3 = *(0x46c60);
0x00046a08 bl 0x11934 | fcn_00011934 ();
0x00046a0c ldr r2, [sp, 0x80] | r2 = *(arg_80h);
0x00046a10 ldr r3, [pc, r3] | r3 = *(0x00046a18);
0x00046a14 str r0, [sp, 0x18] | var_18h = r0;
0x00046a18 str fp, [r0, r3] | *((r0 + r3)) = fp;
0x00046a1c mvn r3, 0 | r3 = ~0;
0x00046a20 str r3, [r2] | *(r2) = r3;
0x00046a24 mov r0, r8 | r0 = r8;
0x00046a28 bl 0x3e3c0 | r0 = strlen ();
0x00046a2c add r6, r0, 1 | r6 = r0 + 1;
0x00046a30 cmp r6, sb |
0x00046a34 blt 0x46a40 |
| while (r0 <= 0xff) {
0x00046a38 mov r4, 0x22 | r4 = 0x22;
0x00046a3c b 0x4692c | goto label_0;
0x00046a40 mov r2, r6 | r2 = r6;
0x00046a44 mov r1, r8 | r1 = r8;
0x00046a48 mov r0, r7 | r0 = r7;
0x00046a4c bl 0x3e480 | memcpy (r0, r1, r2);
0x00046a50 add r1, r7, r6 | r1 = r7 + r6;
0x00046a54 rsb r2, r1, 0 | r2 = r1 - ;
0x00046a58 sub sb, sb, r6 | sb -= r6;
0x00046a5c and r2, r2, 3 | r2 &= 3;
0x00046a60 sub r3, sb, r2 | r3 = sb - r2;
0x00046a64 sub r0, r3, 8 | r0 = r3 - 8;
0x00046a68 cmp r0, 0xff |
0x00046a6c str r3, [sp, 0x1c] | var_1ch = r3;
0x00046a70 str r0, [sp, 0x14] | var_14h = r0;
0x00046a74 ble 0x46a38 |
| }
0x00046a78 add sl, r1, r2 | sl = r1 + r2;
0x00046a7c mov r6, 0 | r6 = 0;
0x00046a80 add sb, sl, 0x10 | sb = sl + 0x10;
0x00046a84 str r7, [r1, r2] | *((r1 + r2)) = r7;
0x00046a88 mov r0, 0xa | r0 = 0xa;
0x00046a8c str r6, [sl, 4] | *((sl + 4)) = r6;
0x00046a90 mov r2, sb | r2 = sb;
0x00046a94 mov r1, r8 | r1 = r8;
0x00046a98 bl 0x443c8 | inet_pton ();
0x00046a9c add fp, sl, 8 |
0x00046aa0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00046aa4 cmp r0, r6 |
| if (r0 != r6) {
0x00046aa8 beq 0x46ae4 |
0x00046aac mov r3, 0xa | r3 = 0xa;
0x00046ab0 str sb, [sl, 8] | *((sl + 8)) = sb;
0x00046ab4 str r6, [sl, 0xc] | *((sl + 0xc)) = r6;
0x00046ab8 str r3, [r5, 8] | *((r5 + 8)) = r3;
0x00046abc mov r3, 0x10 | r3 = 0x10;
0x00046ac0 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x00046ac4 ldr r3, [sp, 0x7c] | r3 = *(arg_7ch);
0x00046ac8 stm r5, {r7, sl} | *(r5) = r7;
| *((r5 + 4)) = sl;
0x00046acc str fp, [r5, 0x10] | *((r5 + 0x10)) = fp;
0x00046ad0 str r5, [r3] | *(r3) = r5;
0x00046ad4 ldr r3, [sp, 0x80] | r3 = *(arg_80h);
0x00046ad8 mov r4, r6 | r4 = r6;
0x00046adc str r6, [r3] | *(r3) = r6;
0x00046ae0 b 0x4692c | goto label_0;
| }
0x00046ae4 cmp r4, 0 |
0x00046ae8 beq 0x46b00 |
| while (r0 < 0) {
0x00046aec ldr r2, [sp, 0x80] | r2 = *(arg_80h);
0x00046af0 mov r3, 1 | r3 = 1;
0x00046af4 str r3, [r2] | *(r2) = r3;
0x00046af8 mov r4, 2 | r4 = 2;
0x00046afc b 0x4692c | goto label_0;
0x00046b00 sub r3, r3, 0x20 | r3 -= 0x20;
0x00046b04 str r3, [sp, 0x48] | var_48h = r3;
0x00046b08 add r2, sp, 0x24 | r2 += var_24h;
0x00046b0c add r3, sp, 0x28 | r3 += var_28h;
0x00046b10 mov r1, 0x1c | r1 = 0x1c;
0x00046b14 mov r0, r8 | r0 = r8;
0x00046b18 str fp, [sp, 0x44] | var_44h = fp;
0x00046b1c str r4, [sp, 0x4c] | var_4ch = r4;
0x00046b20 bl 0x44eb0 | r0 = fcn_00044eb0 (r0, r1);
0x00046b24 cmp r0, 0 |
0x00046b28 blt 0x46aec |
| }
0x00046b2c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00046b30 cmp r3, 0x1c |
| if (r3 != 0x1c) {
0x00046b34 bne 0x46c30 | goto label_7;
| }
0x00046b38 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x00046b3c ldr r3, [sp, 0x38] | r3 = var_38h;
0x00046b40 add r6, r1, 6 | r6 = r1 + 6;
0x00046b44 mul r2, r3, r1 | r2 = r3 * r1;
0x00046b48 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00046b4c lsl r6, r6, 2 | r6 <<= 2;
0x00046b50 add r8, r6, r2 | r8 = r6 + r2;
0x00046b54 subs r8, r3, r8 | r8 = r3 - r8;
| if (r8 >= r3) {
0x00046b58 movmi r4, 0x22 | r4 = 0x22;
| }
| if (r8 < r3) {
0x00046b5c bmi 0x46c10 | goto label_1;
| }
0x00046b60 add r0, fp, r6 | r0 = fp + r6;
0x00046b64 sub r6, r6, 0x10 | r6 -= 0x10;
0x00046b68 mov r1, fp | r1 = fp;
0x00046b6c add r6, fp, r6 | r6 = fp + r6;
0x00046b70 bl 0x3e3b0 | memmove ();
0x00046b74 mov r2, 0x10 | r2 = 0x10;
0x00046b78 ldr r1, [sp, 0x3c] | r1 = s2;
0x00046b7c mov r0, r6 | r0 = r6;
0x00046b80 bl 0x3e480 | memcpy (r0, r1, r2);
0x00046b84 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x00046b88 add r0, sl, 4 | r0 = sl + 4;
0x00046b8c lsl r3, r2, 2 | r3 = r2 << 2;
0x00046b90 add r1, r3, 8 | r1 = r3 + 8;
0x00046b94 add r1, sl, r1 | r1 = sl + r1;
0x00046b98 mov ip, r6 |
| do {
0x00046b9c cmp r0, r1 |
| if (r0 == r1) {
0x00046ba0 bne 0x46c24 |
0x00046ba4 ldr sb, [sp, 0x28] | sb = var_28h;
0x00046ba8 add r2, r2, 1 | r2++;
0x00046bac add r6, r6, r2, lsl 4 | r6 += (r2 << 4);
0x00046bb0 mov r2, 0 | r2 = 0;
0x00046bb4 add r3, fp, r3 | r3 = fp + r3;
0x00046bb8 cmp sb, r2 |
0x00046bbc str r2, [r3, 4] | *((r3 + 4)) = r2;
| if (sb != r2) {
0x00046bc0 beq 0x46be4 |
0x00046bc4 mov r0, sb | r0 = sb;
0x00046bc8 bl 0x3e3c0 | r0 = strlen ();
0x00046bcc cmp r8, r0 |
| if (r8 < r0) {
0x00046bd0 bls 0x46be4 | goto label_8;
| }
0x00046bd4 mov r1, sb | r1 = sb;
0x00046bd8 mov r0, r6 | r0 = r6;
0x00046bdc bl 0x3e970 | strcpy (r0, r1)
0x00046be0 mov r7, r6 | r7 = r6;
| }
| label_8:
0x00046be4 mov r3, 0xa | r3 = 0xa;
0x00046be8 str r3, [r5, 8] | *((r5 + 8)) = r3;
0x00046bec mov r3, 0x10 | r3 = 0x10;
0x00046bf0 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x00046bf4 ldr r3, [sp, 0x7c] | r3 = *(arg_7ch);
0x00046bf8 ldr r2, [sp, 0x80] | r2 = *(arg_80h);
0x00046bfc stm r5, {r7, sl} | *(r5) = r7;
| *((r5 + 4)) = sl;
0x00046c00 str fp, [r5, 0x10] | *((r5 + 0x10)) = fp;
0x00046c04 str r5, [r3] | *(r3) = r5;
0x00046c08 mov r3, 0 | r3 = 0;
0x00046c0c str r3, [r2] | *(r2) = r3;
| label_1:
0x00046c10 ldr r0, [sp, 0x28] | r0 = var_28h;
0x00046c14 bl 0x120a8 | fcn_000120a8 ();
0x00046c18 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00046c1c bl 0x120a8 | fcn_000120a8 ();
0x00046c20 b 0x4692c | goto label_0;
| }
0x00046c24 str ip, [r0, 4]! | *((r0 += 4)) = ip;
0x00046c28 add ip, ip, 0x10 |
0x00046c2c b 0x46b9c |
| } while (1);
| label_7:
0x00046c30 ldr r3, [sp, 0x80] | r3 = *(arg_80h);
0x00046c34 mov r2, 1 | r2 = 1;
0x00046c38 str r2, [r3] | *(r3) = r2;
0x00046c3c ldr r3, [pc, 0x24] | r3 = *(0x46c64);
0x00046c40 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00046c44 ldr r3, [pc, r3] | r3 = *(0x00046c4c);
0x00046c48 mov r4, 2 | r4 = 2;
0x00046c4c str r2, [r1, r3] | *((r1 + r3)) = r2;
0x00046c50 b 0x46c10 | goto label_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/libuClibc-1.0.31.so @ 0x465c0 */
| #include <stdint.h>
|
; (fcn) sym.gethostbyname_r () | void gethostbyname_r (int32_t arg_78h, int32_t arg_7ch, int32_t arg1) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_38h;
| void * s2;
| int32_t var_44h;
| int32_t var_48h;
| int32_t var_4ch;
| int32_t var_54h;
| r0 = arg1;
0x000465c0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000465c4 sub sp, sp, 0x54 |
0x000465c8 mov r6, r3 | r6 = r3;
0x000465cc ldr r3, [sp, 0x78] | r3 = *(arg_78h);
0x000465d0 mov sb, 0 | sb = 0;
0x000465d4 subs r8, r0, 0 | r8 -= arg_78h;
0x000465d8 str sb, [r3] | *(r3) = sb;
| if (r8 != arg_78h) {
0x000465dc moveq r4, 0x16 | r4 = 0x16;
| }
| if (r8 == arg_78h) {
0x000465e0 beq 0x46648 | goto label_0;
| }
0x000465e4 ldr r3, [pc, 0x2e8] | r3 = *(0x468d0);
0x000465e8 bl 0x11934 | fcn_00011934 ();
0x000465ec mov r5, r1 | r5 = r1;
0x000465f0 ldr r3, [pc, r3] | r3 = *(0x000465f8);
0x000465f4 mov r7, r2 | r7 = r2;
0x000465f8 ldr fp, [r0, r3] | fp = *((r0 + r3));
0x000465fc ldr r3, [pc, 0x2d4] | r3 = *(0x468d4);
0x00046600 mov sl, r0 | sl = r0;
0x00046604 ldr r3, [pc, r3] | r3 = *(0x0004660c);
0x00046608 str sb, [r0, r3] | *((r0 + r3)) = sb;
0x0004660c ldr r3, [sp, 0x7c] | r3 = *(arg_7ch);
0x00046610 str r6, [sp] | *(sp) = r6;
0x00046614 str r3, [sp, 8] | var_8h = r3;
0x00046618 ldr r3, [sp, 0x78] | r3 = *(arg_78h);
0x0004661c mov r0, r8 | r0 = r8;
0x00046620 str r3, [sp, 4] | var_4h = r3;
0x00046624 mov r3, r2 | r3 = r2;
0x00046628 mov r2, r1 | r2 = r1;
0x0004662c mov r1, 2 | r1 = 2;
0x00046630 bl 0x462e4 | r0 = fcn_000462e4 (r0, r1, r2, r3, r4);
0x00046634 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x00046638 bne 0x46654 | goto label_2;
| }
0x0004663c ldr r3, [pc, 0x298] | r3 = *(0x468d8);
0x00046640 ldr r3, [pc, r3] | r3 = *(0x00046648);
0x00046644 str fp, [sl, r3] | *((sl + r3)) = fp;
| do {
| label_0:
0x00046648 mov r0, r4 | r0 = r4;
0x0004664c add sp, sp, 0x54 |
0x00046650 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_2:
0x00046654 ldr r3, [sp, 0x7c] | r3 = *(arg_7ch);
0x00046658 ldr r3, [r3] | r3 = *(r3);
0x0004665c cmp r3, 1 |
| if (r3 == 1) {
0x00046660 beq 0x46690 | goto label_3;
| }
0x00046664 cmp r3, 4 |
| if (r3 == 4) {
0x00046668 beq 0x46688 | goto label_4;
| }
0x0004666c cmn r3, 1 |
0x00046670 bne 0x46648 |
| } while (r3 != 1);
0x00046674 ldr r3, [pc, 0x264] | r3 = *(0x468dc);
0x00046678 ldr r3, [pc, r3] | r3 = *(0x00046680);
0x0004667c ldr r3, [sl, r3] | r3 = *((sl + r3));
0x00046680 cmp r3, 2 |
| if (r3 != 2) {
0x00046684 bne 0x46648 | goto label_0;
| }
| label_4:
0x00046688 mov r4, sb | r4 = sb;
0x0004668c b 0x4669c | goto label_5;
| label_3:
0x00046690 sub r4, r4, 2 | r4 -= 2;
0x00046694 clz r4, r4 | r4 &= r4;
0x00046698 lsr r4, r4, 5 | r4 >>= 5;
| label_5:
0x0004669c ldr r3, [pc, 0x240] | r3 = *(0x468e0);
0x000466a0 bl 0x11934 | fcn_00011934 ();
0x000466a4 ldr r2, [sp, 0x7c] | r2 = *(arg_7ch);
0x000466a8 ldr r3, [pc, r3] | r3 = *(0x000466b0);
0x000466ac str r0, [sp, 0x14] | var_14h = r0;
0x000466b0 str fp, [r0, r3] | *((r0 + r3)) = fp;
0x000466b4 mvn r3, 0 | r3 = ~0;
0x000466b8 str r3, [r2] | *(r2) = r3;
0x000466bc mov r0, r8 | r0 = r8;
0x000466c0 bl 0x3e3c0 | r0 = strlen ();
0x000466c4 add sb, r0, 1 | sb = r0 + 1;
0x000466c8 cmp r6, sb |
0x000466cc bgt 0x466d8 |
| while (r1 <= 0xff) {
0x000466d0 mov r4, 0x22 | r4 = 0x22;
0x000466d4 b 0x46648 | goto label_0;
0x000466d8 mov r2, sb | r2 = sb;
0x000466dc mov r1, r8 | r1 = r8;
0x000466e0 mov r0, r7 | r0 = r7;
0x000466e4 bl 0x3e480 | memcpy (r0, r1, r2);
0x000466e8 add r2, r7, sb | r2 = r7 + sb;
0x000466ec rsb r3, r2, 0 | r3 = r2 - ;
0x000466f0 sub r6, r6, sb | r6 -= sb;
0x000466f4 and r3, r3, 3 | r3 &= 3;
0x000466f8 sub r6, r6, r3 | r6 -= r3;
0x000466fc sub r1, r6, 8 | r1 = r6 - 8;
0x00046700 cmp r1, 0xff |
0x00046704 str r1, [sp, 0x18] | var_18h = r1;
0x00046708 ble 0x466d0 |
| }
0x0004670c add sb, r2, r3 | sb = r2 + r3;
0x00046710 str r7, [r2, r3] | *((r2 + r3)) = r7;
0x00046714 mov fp, 0 |
0x00046718 add r3, sb, 0x10 | r3 = sb + 0x10;
0x0004671c str fp, [sb, 4] | *((sb + 4)) = fp;
0x00046720 mov r1, r3 | r1 = r3;
0x00046724 mov r0, r8 | r0 = r8;
0x00046728 str r3, [sp, 0x1c] | var_1ch = r3;
0x0004672c bl 0x445e0 | inet_aton ();
0x00046730 add sl, sb, 8 | sl = sb + 8;
0x00046734 cmp r0, fp |
| if (r0 != fp) {
0x00046738 beq 0x46778 |
0x0004673c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00046740 str fp, [sb, 0xc] | *((sb + 0xc)) = fp;
0x00046744 str r3, [sb, 8] | *((sb + 8)) = r3;
0x00046748 mov r3, 2 | r3 = 2;
0x0004674c str r3, [r5, 8] | *((r5 + 8)) = r3;
0x00046750 mov r3, 4 | r3 = 4;
0x00046754 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x00046758 ldr r3, [sp, 0x78] | r3 = *(arg_78h);
0x0004675c stm r5, {r7, sb} | *(r5) = r7;
| *((r5 + 4)) = sb;
0x00046760 str sl, [r5, 0x10] | *((r5 + 0x10)) = sl;
0x00046764 str r5, [r3] | *(r3) = r5;
0x00046768 ldr r3, [sp, 0x7c] | r3 = *(arg_7ch);
0x0004676c mov r4, fp | r4 = fp;
0x00046770 str fp, [r3] | *(r3) = fp;
0x00046774 b 0x46648 | goto label_0;
| }
0x00046778 cmp r4, 0 |
0x0004677c beq 0x46794 |
| while (r0 < 0) {
0x00046780 ldr r2, [sp, 0x7c] | r2 = *(arg_7ch);
0x00046784 mov r3, 1 | r3 = 1;
0x00046788 str r3, [r2] | *(r2) = r3;
0x0004678c mov r4, 2 | r4 = 2;
0x00046790 b 0x46648 | goto label_0;
0x00046794 sub r6, r6, 0x14 | r6 -= 0x14;
0x00046798 add r3, sp, 0x28 | r3 += var_28h;
0x0004679c add r2, sp, 0x24 | r2 += var_24h;
0x000467a0 mov r1, 1 | r1 = 1;
0x000467a4 mov r0, r8 | r0 = r8;
0x000467a8 str sl, [sp, 0x44] | var_44h = sl;
0x000467ac str r6, [sp, 0x48] | var_48h = r6;
0x000467b0 str r4, [sp, 0x4c] | var_4ch = r4;
0x000467b4 bl 0x44eb0 | r0 = fcn_00044eb0 (r0, r1);
0x000467b8 cmp r0, 0 |
0x000467bc blt 0x46780 |
| }
0x000467c0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000467c4 cmp r3, 1 |
| if (r3 != 1) {
0x000467c8 bne 0x468b0 | goto label_6;
| }
0x000467cc ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x000467d0 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000467d4 add r8, r1, 3 | r8 = r1 + 3;
0x000467d8 mul r2, r3, r1 | r2 = r3 * r1;
0x000467dc ldr r3, [sp, 0x18] | r3 = var_18h;
0x000467e0 lsl r8, r8, 2 | r8 <<= 2;
0x000467e4 add r6, r8, r2 | r6 = r8 + r2;
0x000467e8 subs r6, r3, r6 | r6 = r3 - r6;
| if (r6 >= r3) {
0x000467ec movmi r4, 0x22 | r4 = 0x22;
| }
| if (r6 < r3) {
0x000467f0 bmi 0x46890 | goto label_1;
| }
0x000467f4 add r0, sl, r8 | r0 = sl + r8;
0x000467f8 sub r8, r8, 4 | r8 -= 4;
0x000467fc mov r1, sl | r1 = sl;
0x00046800 add r8, sl, r8 | r8 = sl + r8;
0x00046804 bl 0x3e3b0 | memmove ();
0x00046808 mov r2, 4 | r2 = 4;
0x0004680c ldr r1, [sp, 0x3c] | r1 = s2;
0x00046810 mov r0, r8 | r0 = r8;
0x00046814 bl 0x3e480 | memcpy (r0, r1, r2);
0x00046818 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0004681c add r2, sb, 4 | r2 = sb + 4;
0x00046820 add r3, r3, 1 | r3++;
0x00046824 add r1, r8, r3, lsl 2 | r1 = r8 + (r3 << 2);
| do {
0x00046828 cmp r8, r1 |
| if (r8 == r1) {
0x0004682c bne 0x468a4 |
0x00046830 ldr fp, [sp, 0x28] | fp = var_28h;
0x00046834 mov r2, 0 | r2 = 0;
0x00046838 cmp fp, r2 |
0x0004683c str r2, [sl, r3, lsl 2] | offset_0 = r3 << 2;
| *((sl + offset_0)) = r2;
| if (fp != r2) {
0x00046840 beq 0x46864 |
0x00046844 mov r0, fp | r0 = fp;
0x00046848 bl 0x3e3c0 | r0 = strlen ();
0x0004684c cmp r0, r6 |
| if (r0 >= r6) {
0x00046850 bhs 0x46864 | goto label_7;
| }
0x00046854 mov r1, fp | r1 = fp;
0x00046858 mov r0, r8 | r0 = r8;
0x0004685c bl 0x3e970 | strcpy (r0, r1)
0x00046860 mov r7, r8 | r7 = r8;
| }
| label_7:
0x00046864 mov r3, 2 | r3 = 2;
0x00046868 str r3, [r5, 8] | *((r5 + 8)) = r3;
0x0004686c mov r3, 4 | r3 = 4;
0x00046870 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x00046874 ldr r3, [sp, 0x78] | r3 = *(arg_78h);
0x00046878 ldr r2, [sp, 0x7c] | r2 = *(arg_7ch);
0x0004687c stm r5, {r7, sb} | *(r5) = r7;
| *((r5 + 4)) = sb;
0x00046880 str sl, [r5, 0x10] | *((r5 + 0x10)) = sl;
0x00046884 str r5, [r3] | *(r3) = r5;
0x00046888 mov r3, 0 | r3 = 0;
0x0004688c str r3, [r2] | *(r2) = r3;
| label_1:
0x00046890 ldr r0, [sp, 0x28] | r0 = var_28h;
0x00046894 bl 0x120a8 | fcn_000120a8 ();
0x00046898 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0004689c bl 0x120a8 | fcn_000120a8 ();
0x000468a0 b 0x46648 | goto label_0;
| }
0x000468a4 str r8, [r2, 4]! | *((r2 += 4)) = r8;
0x000468a8 add r8, r8, 4 | r8 += 4;
0x000468ac b 0x46828 |
| } while (1);
| label_6:
0x000468b0 ldr r3, [sp, 0x7c] | r3 = *(arg_7ch);
0x000468b4 mov r2, 1 | r2 = 1;
0x000468b8 str r2, [r3] | *(r3) = r2;
0x000468bc ldr r3, [pc, 0x24] | r3 = *(0x468e4);
0x000468c0 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000468c4 ldr r3, [pc, r3] | r3 = *(0x000468cc);
0x000468c8 mov r4, 2 | r4 = 2;
0x000468cc str r2, [r1, r3] | *((r1 + r3)) = r2;
0x000468d0 b 0x46890 | goto label_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/libuClibc-1.0.31.so @ 0x14efc */
| #include <stdint.h>
|
; (fcn) sym.gethostname () | void gethostname (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| char * src;
| int32_t var_1h;
| int32_t var_188h;
| r0 = arg1;
| r1 = arg2;
0x00014efc push {r4, r5, r6, lr} |
0x00014f00 sub sp, sp, 0x188 |
0x00014f04 mov r4, sp | r4 = sp;
0x00014f08 mov r5, r0 | r5 = r0;
0x00014f0c mov r0, r4 | r0 = r4;
0x00014f10 mov r6, r1 | r6 = r1;
0x00014f14 bl 0x135cc | r0 = uname ();
0x00014f18 cmn r0, 1 |
| if (r0 == 1) {
0x00014f1c beq 0x14f50 | goto label_0;
| }
0x00014f20 add r4, r4, 0x41 | r4 += src;
0x00014f24 mov r0, r4 | r0 = r4;
0x00014f28 bl 0x3e3c0 | strlen ();
0x00014f2c add r0, r0, 1 | r0 += var_1h;
0x00014f30 cmp r0, r6 |
| if (r0 < r6) {
0x00014f34 bls 0x14f58 | goto label_1;
| }
0x00014f38 ldr r3, [pc, 0x2c] | r3 = *(0x14f68);
0x00014f3c bl 0x11934 | fcn_00011934 ();
0x00014f40 mov r2, 0x16 | r2 = 0x16;
0x00014f44 ldr r3, [pc, r3] | r3 = *(0x00014f4c);
0x00014f48 str r2, [r0, r3] | *((r0 + r3)) = r2;
0x00014f4c mvn r0, 0 | r0 = ~0;
| do {
| label_0:
0x00014f50 add sp, sp, 0x188 |
0x00014f54 pop {r4, r5, r6, pc} |
| label_1:
0x00014f58 mov r1, r4 | r1 = r4;
0x00014f5c mov r0, r5 | r0 = r5;
0x00014f60 bl 0x3e970 | strcpy (r0, r1)
0x00014f64 mov r0, 0 | r0 = 0;
0x00014f68 b 0x14f50 |
| } 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/libuClibc-1.0.31.so @ 0x1bff8 */
| #include <stdint.h>
|
; (fcn) sym.glob_pattern_p () | uint32_t glob_pattern_p (int32_t arg1, uint32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0001bff8 mov r2, r0 | r2 = r0;
0x0001bffc mov r0, 0 | r0 = 0;
| do {
0x0001c000 ldrb r3, [r2] | r3 = *(r2);
0x0001c004 cmp r3, 0 |
| if (r3 == 0) {
0x0001c008 bne 0x1c014 |
0x0001c00c mov r0, r3 | r0 = r3;
0x0001c010 bx lr | return r0;
| }
0x0001c014 cmp r3, 0x5b |
| if (r3 == 0x5b) {
0x0001c018 beq 0x1c06c | goto label_1;
| }
| if (r3 > 0x5b) {
0x0001c01c bhi 0x1c038 | goto label_2;
| }
0x0001c020 cmp r3, 0x2a |
| if (r3 == 0x2a) {
0x0001c024 beq 0x1c074 | goto label_3;
| }
0x0001c028 cmp r3, 0x3f |
| if (r3 == 0x3f) {
0x0001c02c beq 0x1c074 | goto label_3;
| }
| label_0:
0x0001c030 add r2, r2, 1 | r2++;
0x0001c034 b 0x1c000 |
| } while (1);
| label_2:
0x0001c038 cmp r3, 0x5c |
| if (r3 == 0x5c) {
0x0001c03c beq 0x1c054 | goto label_4;
| }
0x0001c040 cmp r3, 0x5d |
| if (r3 != 0x5d) {
0x0001c044 bne 0x1c030 | goto label_0;
| }
0x0001c048 cmp r0, 0 |
| if (r0 == 0) {
0x0001c04c beq 0x1c030 | goto label_0;
| }
0x0001c050 bx lr | return;
| label_4:
0x0001c054 cmp r1, 0 |
0x0001c058 ldrb r3, [r2, 1] | r3 = *((r2 + 1));
| if (r1 == 0) {
0x0001c05c beq 0x1c030 | goto label_0;
| }
0x0001c060 cmp r3, 0 |
| if (r3 == 0) {
0x0001c064 addne r2, r2, 1 | r2++;
| }
0x0001c068 b 0x1c030 | goto label_0;
| label_1:
0x0001c06c mov r0, 1 | r0 = 1;
0x0001c070 b 0x1c030 | goto label_0;
| label_3:
0x0001c074 mov r0, 1 | r0 = 1;
0x0001c078 bx lr | return r0;
| }
; 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/libuClibc-1.0.31.so @ 0x1c610 */
| #include <stdint.h>
|
; (fcn) sym.globfree () | void globfree (int32_t arg1) {
| r0 = arg1;
0x0001c610 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x0001c614 cmp r3, 0 |
| if (r3 != 0) {
0x0001c618 bxeq lr | return;
| }
0x0001c61c push {r4, r5, r6, lr} |
0x0001c620 mov r4, r0 | r4 = r0;
0x0001c624 mov r5, 0 | r5 = 0;
0x0001c628 b 0x1c648 |
| while (r5 <= r3) {
0x0001c62c ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001c630 add r3, r5, r3 | r3 = r5 + r3;
0x0001c634 ldr r0, [r0, r3, lsl 2] | offset_0 = r3 << 2;
| r0 = *((r0 + offset_0));
0x0001c638 cmp r0, 0 |
| if (r0 != 0) {
0x0001c63c beq 0x1c644 |
0x0001c640 bl 0x120a8 | fcn_000120a8 ();
| }
0x0001c644 add r5, r5, 1 | r5++;
0x0001c648 ldr r3, [r4] | r3 = *(r4);
0x0001c64c ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0001c650 cmp r5, r3 |
0x0001c654 blo 0x1c62c |
| }
0x0001c658 bl 0x120a8 | fcn_000120a8 ();
0x0001c65c mov r3, 0 | r3 = 0;
0x0001c660 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x0001c664 pop {r4, r5, r6, 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/libuClibc-1.0.31.so @ 0x1c668 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.glob () | void glob (uint32_t arg1, int32_t arg2) {
| int32_t var_e8h;
| int32_t var_e4h;
| int32_t var_e0h;
| char * src;
| int32_t var_d8h;
| int32_t var_d4h;
| int32_t var_c4h;
| int32_t var_7ch;
| int32_t var_78h;
| int32_t var_6ch;
| int32_t var_68h;
| int32_t var_64h;
| int32_t var_60h;
| int32_t var_5ch;
| int32_t var_0h;
| int32_t var_1h;
| int32_t var_8h;
| int32_t var_20h_2;
| int32_t var_20h;
| r0 = arg1;
| r1 = arg2;
0x0001c668 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001c66c cmp r3, 0 |
0x0001c670 cmpne r0, 0 | __asm ("cmpne r0, 0");
0x0001c674 add fp, sp, 0x20 |
0x0001c678 sub sp, sp, 0xd4 |
| if (r3 != 0) {
0x0001c67c beq 0x1c690 |
0x0001c680 bic ip, r1, 0x7e00 | ip = BIT_MASK (r1, 0x7e00);
0x0001c684 bic ip, ip, 0xff | ip = BIT_MASK (ip, 0xff);
0x0001c688 cmp ip, 0 |
| if (ip == 0) {
0x0001c68c beq 0x1c6b4 | goto label_7;
| }
| }
0x0001c690 ldr r3, [pc, 0x53c] | r3 = *(0x1cbd0);
0x0001c694 bl 0x11934 | fcn_00011934 ();
0x0001c698 mov r2, 0x16 | r2 = 0x16;
0x0001c69c ldr r3, [pc, r3] | r3 = *(0x0001c6a4);
0x0001c6a0 mvn r5, 0 | r5 = ~0;
0x0001c6a4 str r2, [r0, r3] | *((r0 + r3)) = r2;
| do {
| label_1:
0x0001c6a8 mov r0, r5 | r0 = r5;
0x0001c6ac sub sp, fp, 0x20 |
0x0001c6b0 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x0001c6b4 ands r5, r1, 8 | r5 = r1 & 8;
| if (r5 != r1) {
0x0001c6b8 streq r5, [r3, 8] | *((r3 + 8)) = r5;
| }
0x0001c6bc mov r6, r1 | r6 = r1;
0x0001c6c0 mov r1, 0x2f | r1 = 0x2f;
0x0001c6c4 mov r4, r3 | r4 = r3;
0x0001c6c8 mov r7, r0 | r7 = r0;
0x0001c6cc str r2, [fp, -0xe0] | var_e0h = r2;
0x0001c6d0 bl 0x3e928 | r0 = rindex ();
0x0001c6d4 subs r3, r0, 0 | r3 = r0 - 0;
| if (r3 != r0) {
0x0001c6d8 bne 0x1c848 | goto label_8;
| }
0x0001c6dc ands r8, r6, 0x5000 | r8 = r6 & 0x5000;
| if (r8 == r6) {
0x0001c6e0 beq 0x1c8f8 | goto label_9;
| }
0x0001c6e4 ldrb r2, [r7] | r2 = *(r7);
0x0001c6e8 cmp r2, 0x7e |
| if (r2 != 0x7e) {
0x0001c6ec bne 0x1c908 | goto label_10;
| }
0x0001c6f0 mov r0, r7 | r0 = r7;
0x0001c6f4 str r3, [fp, -0xd8] | var_d8h = r3;
0x0001c6f8 bl 0x3e3c0 | strlen ();
0x0001c6fc ldr r3, [fp, -0xd8] | r3 = var_d8h;
0x0001c700 mov sb, r7 | sb = r7;
0x0001c704 str r3, [fp, -0xdc] | src = r3;
0x0001c708 mov r8, r0 | r8 = r0;
| label_0:
0x0001c70c ands sl, r6, 0x20 | sl = r6 & 0x20;
| if (sl == r6) {
0x0001c710 bne 0x1c758 |
0x0001c714 cmp r5, 0 |
0x0001c718 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0001c71c str sl, [r4] | *(r4) = sl;
| if (r5 != 0) {
0x0001c720 streq r5, [r4, 4] | *((r4 + 4)) = r5;
| }
| if (r5 == 0) {
0x0001c724 beq 0x1c758 | goto label_11;
| }
0x0001c728 add r0, r0, 1 | r0++;
0x0001c72c lsl r0, r0, 2 | r0 <<= 2;
0x0001c730 bl 0x11a90 | r0 = fcn_00011a90 ();
0x0001c734 cmp r0, 0 |
0x0001c738 str r0, [r4, 4] | *((r4 + 4)) = r0;
| if (r0 == 0) {
0x0001c73c beq 0x1c9c0 | goto label_4;
| }
0x0001c740 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001c744 sub r2, r0, 4 | r2 = r0 - 4;
0x0001c748 add r0, r0, r3, lsl 2 | r0 += (r3 << 2);
0x0001c74c mov r3, sl | r3 = sl;
| label_2:
0x0001c750 cmp r0, r2 |
| if (r0 != r2) {
0x0001c754 bne 0x1c91c | goto label_12;
| }
| }
| label_11:
0x0001c758 ldr sl, [r4] | sl = *(r4);
0x0001c75c ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001c760 tst r6, 0x40 |
0x0001c764 add r3, sl, r3 | r3 = sl + r3;
| if ((r6 & 0x40) != 0) {
0x0001c768 moveq r1, 1 | r1 = 1;
| }
| if ((r6 & 0x40) == 0) {
0x0001c76c movne r1, 0 | r1 = 0;
| }
0x0001c770 mov r0, sb | r0 = sb;
0x0001c774 str r3, [fp, -0xd8] | var_d8h = r3;
0x0001c778 bl 0x1bff8 | r0 = glob_pattern_p ();
0x0001c77c cmp r0, 0 |
| if (r0 == 0) {
0x0001c780 beq 0x1caa0 | goto label_13;
| }
0x0001c784 tst r6, 0x200 |
| if ((r6 & 0x200) != 0) {
0x0001c788 beq 0x1c7b4 |
0x0001c78c ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0001c790 str r3, [fp, -0x64] | var_64h = r3;
0x0001c794 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0001c798 str r3, [fp, -0x68] | var_68h = r3;
0x0001c79c ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0001c7a0 str r3, [fp, -0x6c] | var_6ch = r3;
0x0001c7a4 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0001c7a8 str r3, [fp, -0x5c] | var_5ch = r3;
0x0001c7ac ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0001c7b0 str r3, [fp, -0x60] | var_60h = r3;
| }
0x0001c7b4 ldr r1, [pc, 0x41c] | r1 = *(0x1cbd4);
0x0001c7b8 sub r8, fp, 0x7c | r8 -= var_7ch;
0x0001c7bc and r1, r6, r1 | r1 = r6 & r1;
0x0001c7c0 orr r1, r1, 0x2000 | r1 |= 0x2000;
0x0001c7c4 mov r3, r8 | r3 = r8;
0x0001c7c8 ldr r2, [fp, -0xe0] | r2 = var_e0h;
0x0001c7cc orr r1, r1, 4 | r1 |= 4;
0x0001c7d0 mov r0, sb | r0 = sb;
0x0001c7d4 bl 0x1c668 | glob ();
0x0001c7d8 subs r5, r0, 0 | r5 -= var_0h;
0x0001c7dc bne 0x1c6a8 |
| } while (r5 != var_0h);
0x0001c7e0 bic r3, r6, 0x830 | r3 = BIT_MASK (r6, 0x830);
0x0001c7e4 orr r3, r3, 0x20 | r3 |= 0x20;
0x0001c7e8 mov sb, r5 | sb = r5;
0x0001c7ec str r3, [fp, -0xe4] | var_e4h = r3;
| label_3:
0x0001c7f0 ldr r3, [fp, -0x7c] | r3 = var_7ch;
0x0001c7f4 ldr sl, [r4] | sl = *(r4);
0x0001c7f8 cmp r3, sb |
| if (r3 > sb) {
0x0001c7fc bhi 0x1c924 | goto label_14;
| }
0x0001c800 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001c804 orr r5, r6, 0x100 | r5 = r6 | 0x100;
0x0001c808 add sl, sl, r3 | sl += r3;
0x0001c80c ldr r3, [fp, -0xd8] | r3 = var_d8h;
0x0001c810 cmp sl, r3 |
| if (sl != r3) {
0x0001c814 bne 0x1ca10 | goto label_15;
| }
0x0001c818 tst r6, 0x10 |
| if ((r6 & 0x10) == 0) {
0x0001c81c beq 0x1ca90 | goto label_16;
| }
0x0001c820 add r1, r3, 2 | r1 = r3 + 2;
0x0001c824 lsl r6, r1, 2 | r6 = r1 << 2;
0x0001c828 mov r1, r6 | r1 = r6;
0x0001c82c ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0001c830 bl 0x11d30 | r0 = fcn_00011d30 ();
0x0001c834 subs sb, r0, 0 | sb = r0 - 0;
| if (sb != r0) {
0x0001c838 bne 0x1c9d0 | goto label_17;
| }
0x0001c83c mov r0, r8 | r0 = r8;
0x0001c840 bl 0x1c610 | globfree ();
0x0001c844 b 0x1c9c0 | goto label_4;
| label_8:
0x0001c848 cmp r7, r3 |
| if (r7 == r3) {
0x0001c84c bne 0x1c868 |
0x0001c850 ldr sb, [pc, 0x384] | sb = "Cd";
0x0001c854 add r3, r7, 1 | r3 = r7 + 1;
0x0001c858 str r3, [fp, -0xdc] | src = r3;
0x0001c85c mov r8, 1 | r8 = 1;
0x0001c860 add sb, pc, sb | sb = pc + sb;
0x0001c864 b 0x1c70c | goto label_0;
| }
0x0001c868 sub r8, r3, r7 | r8 = r3 - r7;
0x0001c86c add r2, r8, 0xf | r2 = r8 + 0xf;
0x0001c870 bic r2, r2, 7 | r2 = BIT_MASK (r2, 7);
0x0001c874 sub sp, sp, r2 |
0x0001c878 add sl, sp, 8 | sl += var_8h;
0x0001c87c mov r2, r8 | r2 = r8;
0x0001c880 mov r1, r7 | r1 = r7;
0x0001c884 mov r0, sl | r0 = sl;
0x0001c888 str r3, [fp, -0xd8] | var_d8h = r3;
0x0001c88c bl 0x3e98c | mempcpy ();
0x0001c890 ldr r3, [fp, -0xd8] | r3 = var_d8h;
0x0001c894 mov r2, 0 | r2 = 0;
0x0001c898 cmp r8, 1 |
0x0001c89c mov sb, sl | sb = sl;
0x0001c8a0 strb r2, [r0] | *(r0) = r2;
0x0001c8a4 add r2, r3, 1 | r2 = r3 + 1;
0x0001c8a8 str r2, [fp, -0xdc] | src = r2;
0x0001c8ac ldrb r2, [r3, 1] | r2 = *((r3 + 1));
| if (r8 > 1) {
0x0001c8b0 movls r3, 0 | r3 = 0;
| }
| if (r8 <= 1) {
0x0001c8b4 movhi r3, 1 | r3 = 1;
| }
0x0001c8b8 cmp r2, 0 |
| if (r2 == 0) {
0x0001c8bc movne r3, 0 | r3 = 0;
| }
0x0001c8c0 cmp r3, 0 |
| if (r3 == 0) {
0x0001c8c4 beq 0x1c70c | goto label_0;
| }
0x0001c8c8 mov r3, r4 | r3 = r4;
0x0001c8cc ldr r2, [fp, -0xe0] | r2 = var_e0h;
0x0001c8d0 orr r1, r6, 2 | r1 = r6 | 2;
0x0001c8d4 mov r0, sl | r0 = sl;
0x0001c8d8 bl 0x1c668 | glob ();
0x0001c8dc subs r5, r0, 0 | r5 -= var_0h;
| if (r5 != var_0h) {
0x0001c8e0 ldreq r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| }
| if (r5 != var_0h) {
0x0001c8e4 andeq r6, r6, 2 | r6 &= 2;
| }
0x0001c8e8 biceq r3, r3, 2 | __asm ("biceq r3, r3, 2");
| if (r5 != var_0h) {
0x0001c8ec orreq r6, r3, r6 | r6 = r3 | r6;
| }
| if (r5 != var_0h) {
0x0001c8f0 streq r6, [r4, 0xc] | *((r4 + 0xc)) = r6;
| }
0x0001c8f4 b 0x1c6a8 | goto label_1;
| label_9:
0x0001c8f8 ldr sb, [pc, 0x2e0] | sb = "Cd";
0x0001c8fc str r7, [fp, -0xdc] | src = r7;
0x0001c900 add sb, pc, sb | sb = pc + sb;
0x0001c904 b 0x1c70c | goto label_0;
| label_10:
0x0001c908 ldr sb, [pc, 0x2d4] | sb = *(0x1cbe0);
0x0001c90c str r7, [fp, -0xdc] | src = r7;
0x0001c910 mov r8, r3 | r8 = r3;
0x0001c914 add sb, pc, sb | sb = pc + sb;
0x0001c918 b 0x1c70c | goto label_0;
| label_12:
0x0001c91c str r3, [r2, 4]! | *((r2 += 4)) = r3;
0x0001c920 b 0x1c750 | goto label_2;
| label_14:
0x0001c924 ldr r1, [fp, -0x78] | r1 = var_78h;
0x0001c928 lsl r3, sb, 2 | r3 = sb << 2;
0x0001c92c str r3, [fp, -0xe8] | var_e8h = r3;
0x0001c930 str r4, [sp] | *(sp) = r4;
0x0001c934 ldr r3, [fp, -0xe0] | r3 = var_e0h;
0x0001c938 ldr r2, [fp, -0xe4] | r2 = var_e4h;
0x0001c93c ldr r1, [r1, sb, lsl 2] | offset_0 = sb << 2;
| r1 = *((r1 + offset_0));
0x0001c940 ldr r0, [fp, -0xdc] | r0 = src;
0x0001c944 bl 0x1c07c | r0 = fcn_0001c07c (r0, r1, r2);
0x0001c948 cmp r0, 3 |
0x0001c94c mov r5, r0 | r5 = r0;
| if (r0 == 3) {
0x0001c950 beq 0x1c9c8 | goto label_18;
| }
0x0001c954 cmp r0, 0 |
| if (r0 != 0) {
0x0001c958 beq 0x1c978 |
0x0001c95c mov r0, r8 | r0 = r8;
0x0001c960 bl 0x1c610 | globfree ();
0x0001c964 mov r0, r4 | r0 = r4;
0x0001c968 bl 0x1c610 | globfree ();
0x0001c96c mov r3, 0 | r3 = 0;
0x0001c970 str r3, [r4] | *(r4) = r3;
0x0001c974 b 0x1c6a8 | goto label_1;
| }
0x0001c978 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001c97c ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0001c980 add r3, sl, r3 | r3 = sl + r3;
0x0001c984 ldr r2, [r4] | r2 = *(r4);
0x0001c988 add r1, r1, r3, lsl 2 | r1 += (r3 << 2);
0x0001c98c ldr r3, [fp, -0x78] | r3 = var_78h;
0x0001c990 lsl r0, sb, 2 | r0 = sb << 2;
0x0001c994 sub r2, r2, sl | r2 -= sl;
0x0001c998 ldr r0, [r3, r0] | r0 = *((r3 + r0));
0x0001c99c bl 0x1c550 | r0 = fcn_0001c550 (r0, r1);
0x0001c9a0 cmp r0, 0 |
0x0001c9a4 beq 0x1c9c8 |
| while (r3 == 0) {
0x0001c9a8 mov r0, r8 | r0 = r8;
0x0001c9ac bl 0x1c610 | globfree ();
0x0001c9b0 mov r0, r4 | r0 = r4;
0x0001c9b4 bl 0x1c610 | globfree ();
0x0001c9b8 mov r3, 0 | r3 = 0;
0x0001c9bc str r3, [r4] | *(r4) = r3;
| label_4:
0x0001c9c0 mov r5, 1 | r5 = 1;
0x0001c9c4 b 0x1c6a8 | goto label_1;
| label_18:
0x0001c9c8 add sb, sb, 1 | sb += var_1h;
0x0001c9cc b 0x1c7f0 | goto label_3;
| label_17:
0x0001c9d0 str sb, [r4, 4] | *((r4 + 4)) = sb;
0x0001c9d4 mov r0, r7 | r0 = r7;
0x0001c9d8 bl 0x3f894 | strdup ();
0x0001c9dc ldr r3, [fp, -0xd8] | r3 = var_d8h;
0x0001c9e0 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0001c9e4 str r0, [sb, r3, lsl 2] | offset_1 = r3 << 2;
| *((sb + offset_1)) = r0;
0x0001c9e8 ldr r3, [r1, r3, lsl 2] | offset_2 = r3 << 2;
| r3 = *((r1 + offset_2));
0x0001c9ec cmp r3, 0 |
0x0001c9f0 beq 0x1c9a8 |
| }
0x0001c9f4 ldr r3, [r4] | r3 = *(r4);
0x0001c9f8 add r1, r1, r6 | r1 += r6;
0x0001c9fc add r3, r3, 1 | r3++;
0x0001ca00 str r3, [r4] | *(r4) = r3;
0x0001ca04 mov r3, 0 | r3 = 0;
0x0001ca08 str r3, [r1, -4] | *((r1 - 4)) = r3;
0x0001ca0c str r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
| label_15:
0x0001ca10 mov r0, r8 | r0 = r8;
0x0001ca14 bl 0x1c610 | globfree ();
| label_5:
0x0001ca18 tst r5, 2 |
| if ((r5 & 2) != 0) {
0x0001ca1c beq 0x1ca54 |
0x0001ca20 ldr r3, [fp, -0xd8] | r3 = var_d8h;
0x0001ca24 and r8, r5, 0x200 | r8 = r5 & 0x200;
0x0001ca28 lsl r6, r3, 2 | r6 = r3 << 2;
0x0001ca2c mov r7, r3 | r7 = r3;
0x0001ca30 ldr r3, [pc, 0x1b0] | r3 = *(0x1cbe4);
0x0001ca34 sub sl, fp, 0x7c | sl -= var_7ch;
0x0001ca38 add r3, pc, r3 | r3 = pc + r3;
0x0001ca3c str r3, [fp, -0xdc] | src = r3;
| label_6:
0x0001ca40 ldr r3, [r4] | r3 = *(r4);
0x0001ca44 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0001ca48 add r3, r3, r2 | r3 += r2;
0x0001ca4c cmp r3, r7 |
| if (r3 > r7) {
0x0001ca50 bhi 0x1cb08 | goto label_19;
| }
| }
0x0001ca54 ands r5, r5, 4 | r5 &= 4;
| if (r5 != r5) {
0x0001ca58 movne r5, 0 | r5 = 0;
| goto label_20;
| }
| if (r5 != r5) {
| label_20:
0x0001ca5c bne 0x1c6a8 | goto label_1;
| }
0x0001ca60 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001ca64 ldr r1, [r4] | r1 = *(r4);
0x0001ca68 ldr ip, [fp, -0xd8] | ip = var_d8h;
0x0001ca6c add r1, r1, r3 | r1 += r3;
0x0001ca70 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0001ca74 ldr r3, [pc, 0x170] | r3 = *(0x1cbe8);
0x0001ca78 mov r2, 4 | r2 = 4;
0x0001ca7c add r3, pc, r3 | r3 = pc + r3;
0x0001ca80 sub r1, r1, ip | r1 -= ip;
0x0001ca84 add r0, r0, ip, lsl 2 | r0 += (ip << 2);
0x0001ca88 bl 0x4d1f4 | qsort ();
0x0001ca8c b 0x1c6a8 | goto label_1;
| label_16:
0x0001ca90 mov r0, r8 | r0 = r8;
0x0001ca94 bl 0x1c610 | globfree ();
0x0001ca98 mov r5, 3 | r5 = 3;
0x0001ca9c b 0x1c6a8 | goto label_1;
| label_13:
0x0001caa0 str r4, [sp] | *(sp) = r4;
0x0001caa4 ldr r3, [fp, -0xe0] | r3 = var_e0h;
0x0001caa8 mov r2, r6 | r2 = r6;
0x0001caac mov r1, sb | r1 = sb;
0x0001cab0 ldr r0, [fp, -0xdc] | r0 = src;
0x0001cab4 bl 0x1c07c | r0 = fcn_0001c07c (r0, r1, r2);
0x0001cab8 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 != r0) {
0x0001cabc bne 0x1c6a8 | goto label_1;
| }
0x0001cac0 cmp r8, 0 |
| if (r8 != 0) {
0x0001cac4 beq 0x1cb00 |
0x0001cac8 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001cacc ldr r2, [r4] | r2 = *(r4);
0x0001cad0 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0001cad4 add r3, sl, r3 | r3 = sl + r3;
0x0001cad8 sub r2, r2, sl | r2 -= sl;
0x0001cadc add r1, r1, r3, lsl 2 | r1 += (r3 << 2);
0x0001cae0 mov r0, sb | r0 = sb;
0x0001cae4 bl 0x1c550 | r0 = fcn_0001c550 (r0, r1);
0x0001cae8 cmp r0, 0 |
| if (r0 == 0) {
0x0001caec beq 0x1cb00 | goto label_21;
| }
0x0001caf0 mov r0, r4 | r0 = r4;
0x0001caf4 bl 0x1c610 | globfree ();
0x0001caf8 str r5, [r4] | *(r4) = r5;
0x0001cafc b 0x1c9c0 | goto label_4;
| }
| label_21:
0x0001cb00 mov r5, r6 | r5 = r6;
0x0001cb04 b 0x1ca18 | goto label_5;
| label_19:
0x0001cb08 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0001cb0c cmp r8, 0 |
0x0001cb10 mov sb, r8 | sb = r8;
0x0001cb14 ldr r0, [r2, r6] | r0 = *((r2 + r6));
| if (r8 == 0) {
0x0001cb18 beq 0x1cb8c | goto label_22;
| }
0x0001cb1c ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0001cb20 sub r1, fp, 0xd4 | r1 -= var_d4h;
0x0001cb24 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
0x0001cb28 cmp r0, 0 |
| if (r0 != 0) {
0x0001cb2c ldreq r3, [fp, -0xc4] | r3 = var_c4h;
| }
| if (r0 == 0) {
0x0001cb30 movne r3, 0 | r3 = 0;
| }
| if (r0 != 0) {
0x0001cb34 andeq r3, r3, 0xf000 | r3 &= 0xf000;
| }
| if (r0 != 0) {
0x0001cb38 subeq r3, r3, 0x4000 | r3 -= 0x4000;
| }
0x0001cb3c clzeq r3, r3 | __asm ("clzeq r3, r3");
| if (r0 != 0) {
0x0001cb40 lsreq r3, r3, 5 | r3 >>= 5;
| }
0x0001cb44 and r3, r3, 1 | r3 &= 1;
| do {
0x0001cb48 cmp r3, 0 |
| if (r3 == 0) {
0x0001cb4c beq 0x1cbc8 | goto label_23;
| }
0x0001cb50 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0001cb54 ldr sb, [r3, r6] | sb = *((r3 + r6));
0x0001cb58 mov r0, sb | r0 = sb;
0x0001cb5c bl 0x3e3c0 | r0 = strlen ();
0x0001cb60 add r1, r0, 2 | r1 = r0 + 2;
0x0001cb64 str r0, [fp, -0xe0] | var_e0h = r0;
0x0001cb68 mov r0, sb | r0 = sb;
0x0001cb6c bl 0x11d30 | fcn_00011d30 ();
0x0001cb70 ldr r2, [fp, -0xe0] | r2 = var_e0h;
0x0001cb74 subs sb, r0, 0 | sb = r0 - 0;
| if (sb != r0) {
0x0001cb78 bne 0x1cbb4 | goto label_24;
| }
0x0001cb7c mov r0, r4 | r0 = r4;
0x0001cb80 bl 0x1c610 | globfree ();
0x0001cb84 str sb, [r4] | *(r4) = sb;
0x0001cb88 b 0x1c9c0 | goto label_4;
| label_22:
0x0001cb8c mov r1, sl | r1 = sl;
0x0001cb90 bl 0x164b4 | r0 = stat ();
0x0001cb94 cmp r0, 0 |
| if (r0 != 0) {
0x0001cb98 ldreq r3, [fp, -0x6c] | r3 = var_6ch;
| }
| if (r0 != 0) {
0x0001cb9c andeq r3, r3, 0xf000 | r3 &= 0xf000;
| }
| if (r0 != 0) {
0x0001cba0 subeq sb, r3, 0x4000 | sb = r3 - 0x4000;
| }
0x0001cba4 clzeq sb, sb | __asm ("clzeq sb, sb");
| if (r0 != 0) {
0x0001cba8 lsreq sb, sb, 5 | sb >>= 5;
| }
0x0001cbac and r3, sb, 1 | r3 = sb & 1;
0x0001cbb0 b 0x1cb48 |
| } while (1);
| label_24:
0x0001cbb4 add r0, sb, r2 | r0 = sb + r2;
0x0001cbb8 ldr r1, [fp, -0xdc] | r1 = src;
0x0001cbbc bl 0x3e970 | strcpy (r0, r1)
0x0001cbc0 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0001cbc4 str sb, [r2, r6] | *((r2 + r6)) = sb;
| label_23:
0x0001cbc8 add r7, r7, 1 | r7++;
0x0001cbcc add r6, r6, 4 | r6 += 4;
0x0001cbd0 b 0x1ca40 | goto label_6;
| }
; 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/libuClibc-1.0.31.so @ 0x1d12c */
| #include <stdint.h>
|
; (fcn) sym.globfree64 () | void globfree64 (int32_t arg1) {
| r0 = arg1;
0x0001d12c ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x0001d130 cmp r3, 0 |
| if (r3 != 0) {
0x0001d134 bxeq lr | return;
| }
0x0001d138 push {r4, r5, r6, lr} |
0x0001d13c mov r4, r0 | r4 = r0;
0x0001d140 mov r5, 0 | r5 = 0;
0x0001d144 b 0x1d164 |
| while (r5 <= r3) {
0x0001d148 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001d14c add r3, r5, r3 | r3 = r5 + r3;
0x0001d150 ldr r0, [r0, r3, lsl 2] | offset_0 = r3 << 2;
| r0 = *((r0 + offset_0));
0x0001d154 cmp r0, 0 |
| if (r0 != 0) {
0x0001d158 beq 0x1d160 |
0x0001d15c bl 0x120a8 | fcn_000120a8 ();
| }
0x0001d160 add r5, r5, 1 | r5++;
0x0001d164 ldr r3, [r4] | r3 = *(r4);
0x0001d168 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0001d16c cmp r5, r3 |
0x0001d170 blo 0x1d148 |
| }
0x0001d174 bl 0x120a8 | fcn_000120a8 ();
0x0001d178 mov r3, 0 | r3 = 0;
0x0001d17c str r3, [r4, 4] | *((r4 + 4)) = r3;
0x0001d180 pop {r4, r5, r6, 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/libuClibc-1.0.31.so @ 0x1d184 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.glob64 () | void glob64 (uint32_t arg1, int32_t arg2) {
| int32_t var_108h;
| int32_t var_104h;
| int32_t var_100h;
| char * src;
| int32_t var_f8h;
| int32_t var_f4h;
| int32_t var_e4h;
| int32_t var_8ch;
| int32_t var_88h;
| int32_t var_7ch;
| int32_t var_78h;
| int32_t var_74h;
| int32_t var_70h;
| int32_t var_6ch;
| int32_t var_0h;
| int32_t var_1h;
| int32_t var_8h;
| int32_t var_20h_2;
| int32_t var_20h;
| int32_t var_2h;
| r0 = arg1;
| r1 = arg2;
0x0001d184 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001d188 cmp r3, 0 |
0x0001d18c cmpne r0, 0 | __asm ("cmpne r0, 0");
0x0001d190 add fp, sp, 0x20 |
0x0001d194 sub sp, sp, 0xf4 |
| if (r3 != 0) {
0x0001d198 beq 0x1d1ac |
0x0001d19c bic ip, r1, 0x7e00 | ip = BIT_MASK (r1, 0x7e00);
0x0001d1a0 bic ip, ip, 0xff | ip = BIT_MASK (ip, 0xff);
0x0001d1a4 cmp ip, 0 |
| if (ip == 0) {
0x0001d1a8 beq 0x1d1d0 | goto label_7;
| }
| }
0x0001d1ac ldr r3, [pc, 0x538] | r3 = *(0x1d6e8);
0x0001d1b0 bl 0x11934 | fcn_00011934 ();
0x0001d1b4 mov r2, 0x16 | r2 = 0x16;
0x0001d1b8 ldr r3, [pc, r3] | r3 = *(0x0001d1c0);
0x0001d1bc mvn r5, 0 | r5 = ~0;
0x0001d1c0 str r2, [r0, r3] | *((r0 + r3)) = r2;
| do {
| label_1:
0x0001d1c4 mov r0, r5 | r0 = r5;
0x0001d1c8 sub sp, fp, 0x20 |
0x0001d1cc pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x0001d1d0 ands r5, r1, 8 | r5 = r1 & 8;
| if (r5 != r1) {
0x0001d1d4 streq r5, [r3, 8] | *((r3 + 8)) = r5;
| }
0x0001d1d8 mov r6, r1 | r6 = r1;
0x0001d1dc mov r1, 0x2f | r1 = 0x2f;
0x0001d1e0 mov r4, r3 | r4 = r3;
0x0001d1e4 mov r7, r0 | r7 = r0;
0x0001d1e8 str r2, [fp, -0xfc] | src = r2;
0x0001d1ec bl 0x3e928 | r0 = rindex ();
0x0001d1f0 subs r3, r0, 0 | r3 = r0 - 0;
| if (r3 != r0) {
0x0001d1f4 bne 0x1d35c | goto label_8;
| }
0x0001d1f8 ands sb, r6, 0x5000 | sb = r6 & 0x5000;
| if (sb == r6) {
0x0001d1fc beq 0x1d40c | goto label_9;
| }
0x0001d200 ldrb r2, [r7] | r2 = *(r7);
0x0001d204 cmp r2, 0x7e |
| if (r2 != 0x7e) {
0x0001d208 bne 0x1d41c | goto label_10;
| }
0x0001d20c mov r0, r7 | r0 = r7;
0x0001d210 str r3, [fp, -0xf8] | var_f8h = r3;
0x0001d214 bl 0x3e3c0 | strlen ();
0x0001d218 mov sl, r7 | sl = r7;
0x0001d21c mov sb, r0 | sb = r0;
| label_0:
0x0001d220 ands r8, r6, 0x20 | r8 = r6 & 0x20;
| if (r8 == r6) {
0x0001d224 bne 0x1d26c |
0x0001d228 cmp r5, 0 |
0x0001d22c ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0001d230 str r8, [r4] | *(r4) = r8;
| if (r5 != 0) {
0x0001d234 streq r5, [r4, 4] | *((r4 + 4)) = r5;
| }
| if (r5 == 0) {
0x0001d238 beq 0x1d26c | goto label_11;
| }
0x0001d23c add r0, r0, 1 | r0++;
0x0001d240 lsl r0, r0, 2 | r0 <<= 2;
0x0001d244 bl 0x11a90 | r0 = fcn_00011a90 ();
0x0001d248 cmp r0, 0 |
0x0001d24c str r0, [r4, 4] | *((r4 + 4)) = r0;
| if (r0 == 0) {
0x0001d250 beq 0x1d4dc | goto label_4;
| }
0x0001d254 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001d258 sub r2, r0, 4 | r2 = r0 - 4;
0x0001d25c add r0, r0, r3, lsl 2 | r0 += (r3 << 2);
0x0001d260 mov r3, r8 | r3 = r8;
| label_2:
0x0001d264 cmp r0, r2 |
| if (r0 != r2) {
0x0001d268 bne 0x1d430 | goto label_12;
| }
| }
| label_11:
0x0001d26c ldr r8, [r4] | r8 = *(r4);
0x0001d270 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001d274 tst r6, 0x40 |
| if ((r6 & 0x40) != 0) {
0x0001d278 moveq r1, 1 | r1 = 1;
| }
| if ((r6 & 0x40) == 0) {
0x0001d27c movne r1, 0 | r1 = 0;
| }
0x0001d280 mov r0, sl | r0 = sl;
0x0001d284 add r8, r8, r3 | r8 += r3;
0x0001d288 bl 0x1bff8 | r0 = glob_pattern_p ();
0x0001d28c cmp r0, 0 |
| if (r0 == 0) {
0x0001d290 beq 0x1d5b4 | goto label_13;
| }
0x0001d294 tst r6, 0x200 |
| if ((r6 & 0x200) != 0) {
0x0001d298 beq 0x1d2c4 |
0x0001d29c ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0001d2a0 str r3, [fp, -0x74] | var_74h = r3;
0x0001d2a4 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0001d2a8 str r3, [fp, -0x78] | var_78h = r3;
0x0001d2ac ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0001d2b0 str r3, [fp, -0x7c] | var_7ch = r3;
0x0001d2b4 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0001d2b8 str r3, [fp, -0x6c] | var_6ch = r3;
0x0001d2bc ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0001d2c0 str r3, [fp, -0x70] | var_70h = r3;
| }
0x0001d2c4 ldr r1, [pc, 0x424] | r1 = *(0x1d6ec);
0x0001d2c8 sub sb, fp, 0x8c | sb -= var_8ch;
0x0001d2cc and r1, r6, r1 | r1 = r6 & r1;
0x0001d2d0 orr r1, r1, 0x2000 | r1 |= 0x2000;
0x0001d2d4 mov r3, sb | r3 = sb;
0x0001d2d8 ldr r2, [fp, -0xfc] | r2 = src;
0x0001d2dc orr r1, r1, 4 | r1 |= 4;
0x0001d2e0 mov r0, sl | r0 = sl;
0x0001d2e4 bl 0x1d184 | glob64 ();
0x0001d2e8 subs r5, r0, 0 | r5 -= var_0h;
0x0001d2ec bne 0x1d1c4 |
| } while (r5 != var_0h);
0x0001d2f0 bic r3, r6, 0x830 | r3 = BIT_MASK (r6, 0x830);
0x0001d2f4 orr r3, r3, 0x20 | r3 |= 0x20;
0x0001d2f8 mov sl, r5 | sl = r5;
0x0001d2fc str r3, [fp, -0x104] | var_104h = r3;
| label_3:
0x0001d300 ldr r3, [r4] | r3 = *(r4);
0x0001d304 str r3, [fp, -0x100] | var_100h = r3;
0x0001d308 ldr r3, [fp, -0x8c] | r3 = var_8ch;
0x0001d30c cmp r3, sl |
| if (r3 > sl) {
0x0001d310 bhi 0x1d438 | goto label_14;
| }
0x0001d314 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001d318 ldr r2, [fp, -0x100] | r2 = var_100h;
0x0001d31c orr r5, r6, 0x100 | r5 |= var_20h;
0x0001d320 add r3, r2, r3 | r3 = r2 + r3;
0x0001d324 cmp r3, r8 |
| if (r3 != r8) {
0x0001d328 bne 0x1d528 | goto label_15;
| }
0x0001d32c tst r6, 0x10 |
| if ((r6 & 0x10) == 0) {
0x0001d330 beq 0x1d5a4 | goto label_16;
| }
0x0001d334 add r1, r8, 2 | r1 = r8 + 2;
0x0001d338 lsl r6, r1, 2 | r6 = r1 << 2;
0x0001d33c mov r1, r6 | r1 = r6;
0x0001d340 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0001d344 bl 0x11d30 | r0 = fcn_00011d30 ();
0x0001d348 subs sl, r0, 0 | sl = r0 - 0;
| if (sl != r0) {
0x0001d34c bne 0x1d4ec | goto label_17;
| }
0x0001d350 mov r0, sb | r0 = sb;
0x0001d354 bl 0x1d12c | globfree64 ();
0x0001d358 b 0x1d4dc | goto label_4;
| label_8:
0x0001d35c cmp r7, r3 |
| if (r7 == r3) {
0x0001d360 bne 0x1d37c |
0x0001d364 ldr sl, [pc, 0x388] | sl = *(0x1d6f0);
0x0001d368 add r3, r7, 1 | r3 = r7 + 1;
0x0001d36c str r3, [fp, -0xf8] | var_f8h = r3;
0x0001d370 mov sb, 1 | sb = 1;
0x0001d374 add sl, pc, sl | sl = pc + sl;
0x0001d378 b 0x1d220 | goto label_0;
| }
0x0001d37c sub sb, r3, r7 | sb = r3 - r7;
0x0001d380 add r2, sb, 0xf | r2 = sb + 0xf;
0x0001d384 bic r2, r2, 7 | r2 = BIT_MASK (r2, 7);
0x0001d388 sub sp, sp, r2 |
0x0001d38c add r8, sp, 8 | r8 += var_8h;
0x0001d390 mov r2, sb | r2 = sb;
0x0001d394 mov r1, r7 | r1 = r7;
0x0001d398 mov r0, r8 | r0 = r8;
0x0001d39c str r3, [fp, -0xf8] | var_f8h = r3;
0x0001d3a0 bl 0x3e98c | mempcpy ();
0x0001d3a4 ldr r3, [fp, -0xf8] | r3 = var_f8h;
0x0001d3a8 mov r2, 0 | r2 = 0;
0x0001d3ac cmp sb, 1 |
0x0001d3b0 mov sl, r8 | sl = r8;
0x0001d3b4 strb r2, [r0] | *(r0) = r2;
0x0001d3b8 add r2, r3, 1 | r2 = r3 + 1;
0x0001d3bc str r2, [fp, -0xf8] | var_f8h = r2;
0x0001d3c0 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
| if (sb > 1) {
0x0001d3c4 movls r3, 0 | r3 = 0;
| }
| if (sb <= 1) {
0x0001d3c8 movhi r3, 1 | r3 = 1;
| }
0x0001d3cc cmp r2, 0 |
| if (r2 == 0) {
0x0001d3d0 movne r3, 0 | r3 = 0;
| }
0x0001d3d4 cmp r3, 0 |
| if (r3 == 0) {
0x0001d3d8 beq 0x1d220 | goto label_0;
| }
0x0001d3dc mov r3, r4 | r3 = r4;
0x0001d3e0 ldr r2, [fp, -0xfc] | r2 = src;
0x0001d3e4 orr r1, r6, 2 | r1 |= var_2h;
0x0001d3e8 mov r0, r8 | r0 = r8;
0x0001d3ec bl 0x1d184 | glob64 ();
0x0001d3f0 subs r5, r0, 0 | r5 -= var_0h;
| if (r5 != var_0h) {
0x0001d3f4 ldreq r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| }
| if (r5 != var_0h) {
0x0001d3f8 andeq r6, r6, 2 | r6 &= 2;
| }
0x0001d3fc biceq r3, r3, 2 | __asm ("biceq r3, r3, 2");
| if (r5 != var_0h) {
0x0001d400 orreq r6, r3, r6 | r6 = r3 | r6;
| }
| if (r5 != var_0h) {
0x0001d404 streq r6, [r4, 0xc] | *((r4 + 0xc)) = r6;
| }
0x0001d408 b 0x1d1c4 | goto label_1;
| label_9:
0x0001d40c ldr sl, [pc, 0x2e4] | sl = *(0x1d6f4);
0x0001d410 str r7, [fp, -0xf8] | var_f8h = r7;
0x0001d414 add sl, pc, sl | sl = pc + sl;
0x0001d418 b 0x1d220 | goto label_0;
| label_10:
0x0001d41c ldr sl, [pc, 0x2d8] | sl = *(0x1d6f8);
0x0001d420 str r7, [fp, -0xf8] | var_f8h = r7;
0x0001d424 mov sb, r3 | sb = r3;
0x0001d428 add sl, pc, sl | sl = pc + sl;
0x0001d42c b 0x1d220 | goto label_0;
| label_12:
0x0001d430 str r3, [r2, 4]! | *((r2 += 4)) = r3;
0x0001d434 b 0x1d264 | goto label_2;
| label_14:
0x0001d438 ldr r1, [fp, -0x88] | r1 = var_88h;
0x0001d43c lsl r3, sl, 2 | r3 = sl << 2;
0x0001d440 str r3, [fp, -0x108] | var_108h = r3;
0x0001d444 str r4, [sp] | *(sp) = r4;
0x0001d448 ldr r3, [fp, -0xfc] | r3 = src;
0x0001d44c ldr r2, [fp, -0x104] | r2 = var_104h;
0x0001d450 ldr r1, [r1, sl, lsl 2] | offset_0 = sl << 2;
| r1 = *((r1 + offset_0));
0x0001d454 ldr r0, [fp, -0xf8] | r0 = var_f8h;
0x0001d458 bl 0x1cc94 | r0 = fcn_0001cc94 (r0, r1, r2);
0x0001d45c cmp r0, 3 |
0x0001d460 mov r5, r0 | r5 = r0;
| if (r0 == 3) {
0x0001d464 beq 0x1d4e4 | goto label_18;
| }
0x0001d468 cmp r0, 0 |
| if (r0 != 0) {
0x0001d46c beq 0x1d48c |
0x0001d470 mov r0, sb | r0 = sb;
0x0001d474 bl 0x1d12c | globfree64 ();
0x0001d478 mov r0, r4 | r0 = r4;
0x0001d47c bl 0x1d12c | globfree64 ();
0x0001d480 mov r3, 0 | r3 = 0;
0x0001d484 str r3, [r4] | *(r4) = r3;
0x0001d488 b 0x1d1c4 | goto label_1;
| }
0x0001d48c ldr r1, [fp, -0x100] | r1 = var_100h;
0x0001d490 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001d494 ldr r0, [fp, -0x100] | r0 = var_100h;
0x0001d498 add r3, r1, r3 | r3 = r1 + r3;
0x0001d49c ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0001d4a0 ldr r2, [r4] | r2 = *(r4);
0x0001d4a4 add r1, r1, r3, lsl 2 | r1 += (r3 << 2);
0x0001d4a8 ldr r3, [fp, -0x88] | r3 = var_88h;
0x0001d4ac sub r2, r2, r0 | r2 -= r0;
0x0001d4b0 lsl r0, sl, 2 | r0 = sl << 2;
0x0001d4b4 ldr r0, [r3, r0] | r0 = *((r3 + r0));
0x0001d4b8 bl 0x1c550 | r0 = fcn_0001c550 (r0, r1);
0x0001d4bc cmp r0, 0 |
0x0001d4c0 beq 0x1d4e4 |
| while (r3 == 0) {
0x0001d4c4 mov r0, sb | r0 = sb;
0x0001d4c8 bl 0x1d12c | globfree64 ();
0x0001d4cc mov r0, r4 | r0 = r4;
0x0001d4d0 bl 0x1d12c | globfree64 ();
0x0001d4d4 mov r3, 0 | r3 = 0;
0x0001d4d8 str r3, [r4] | *(r4) = r3;
| label_4:
0x0001d4dc mov r5, 1 | r5 = 1;
0x0001d4e0 b 0x1d1c4 | goto label_1;
| label_18:
0x0001d4e4 add sl, sl, 1 | sl += var_1h;
0x0001d4e8 b 0x1d300 | goto label_3;
| label_17:
0x0001d4ec str sl, [r4, 4] | *((r4 + 4)) = sl;
0x0001d4f0 mov r0, r7 | r0 = r7;
0x0001d4f4 bl 0x3f894 | strdup ();
0x0001d4f8 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0001d4fc str r0, [sl, r8, lsl 2] | offset_1 = r8 << 2;
| *((sl + offset_1)) = r0;
0x0001d500 ldr r3, [r1, r8, lsl 2] | offset_2 = r8 << 2;
| r3 = *((r1 + offset_2));
0x0001d504 cmp r3, 0 |
0x0001d508 beq 0x1d4c4 |
| }
0x0001d50c ldr r3, [r4] | r3 = *(r4);
0x0001d510 add r1, r1, r6 | r1 += r6;
0x0001d514 add r3, r3, 1 | r3++;
0x0001d518 str r3, [r4] | *(r4) = r3;
0x0001d51c mov r3, 0 | r3 = 0;
0x0001d520 str r3, [r1, -4] | *((r1 - 4)) = r3;
0x0001d524 str r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
| label_15:
0x0001d528 mov r0, sb | r0 = sb;
0x0001d52c bl 0x1d12c | globfree64 ();
| label_5:
0x0001d530 tst r5, 2 |
| if ((r5 & 2) != 0) {
0x0001d534 beq 0x1d56c |
0x0001d538 sub r3, fp, 0x8c | r3 -= var_8ch;
0x0001d53c str r3, [fp, -0xf8] | var_f8h = r3;
0x0001d540 ldr r3, [pc, 0x1b8] | r3 = *(0x1d6fc);
0x0001d544 lsl r6, r8, 2 | r6 = r8 << 2;
0x0001d548 add r3, pc, r3 | r3 = pc + r3;
0x0001d54c mov r7, r8 | r7 = r8;
0x0001d550 and sb, r5, 0x200 | sb = r5 & 0x200;
0x0001d554 str r3, [fp, -0xfc] | src = r3;
| label_6:
0x0001d558 ldr r3, [r4] | r3 = *(r4);
0x0001d55c ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0001d560 add r3, r3, r2 | r3 += r2;
0x0001d564 cmp r3, r7 |
| if (r3 > r7) {
0x0001d568 bhi 0x1d620 | goto label_19;
| }
| }
0x0001d56c ands r5, r5, 4 | r5 &= 4;
| if (r5 != r5) {
0x0001d570 movne r5, 0 | r5 = 0;
| goto label_20;
| }
| if (r5 != r5) {
| label_20:
0x0001d574 bne 0x1d1c4 | goto label_1;
| }
0x0001d578 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001d57c ldr r1, [r4] | r1 = *(r4);
0x0001d580 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0001d584 add r1, r1, r3 | r1 += r3;
0x0001d588 ldr r3, [pc, 0x174] | r3 = *(0x1d700);
0x0001d58c mov r2, 4 | r2 = 4;
0x0001d590 add r3, pc, r3 | r3 = pc + r3;
0x0001d594 sub r1, r1, r8 | r1 -= r8;
0x0001d598 add r0, r0, r8, lsl 2 | r0 += (r8 << 2);
0x0001d59c bl 0x4d1f4 | qsort ();
0x0001d5a0 b 0x1d1c4 | goto label_1;
| label_16:
0x0001d5a4 mov r0, sb | r0 = sb;
0x0001d5a8 bl 0x1d12c | globfree64 ();
0x0001d5ac mov r5, 3 | r5 = 3;
0x0001d5b0 b 0x1d1c4 | goto label_1;
| label_13:
0x0001d5b4 ldr r7, [r4] | r7 = *(r4);
0x0001d5b8 ldr r3, [fp, -0xfc] | r3 = src;
0x0001d5bc str r4, [sp] | *(sp) = r4;
0x0001d5c0 mov r2, r6 | r2 = r6;
0x0001d5c4 mov r1, sl | r1 = sl;
0x0001d5c8 ldr r0, [fp, -0xf8] | r0 = var_f8h;
0x0001d5cc bl 0x1cc94 | r0 = fcn_0001cc94 (r0, r1, r2);
0x0001d5d0 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 != r0) {
0x0001d5d4 bne 0x1d1c4 | goto label_1;
| }
0x0001d5d8 cmp sb, 0 |
| if (sb != 0) {
0x0001d5dc beq 0x1d618 |
0x0001d5e0 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001d5e4 ldr r2, [r4] | r2 = *(r4);
0x0001d5e8 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0001d5ec add r3, r7, r3 | r3 = r7 + r3;
0x0001d5f0 sub r2, r2, r7 | r2 -= r7;
0x0001d5f4 add r1, r1, r3, lsl 2 | r1 += (r3 << 2);
0x0001d5f8 mov r0, sl | r0 = sl;
0x0001d5fc bl 0x1c550 | r0 = fcn_0001c550 (r0, r1);
0x0001d600 cmp r0, 0 |
| if (r0 == 0) {
0x0001d604 beq 0x1d618 | goto label_21;
| }
0x0001d608 mov r0, r4 | r0 = r4;
0x0001d60c bl 0x1d12c | globfree64 ();
0x0001d610 str r5, [r4] | *(r4) = r5;
0x0001d614 b 0x1d4dc | goto label_4;
| }
| label_21:
0x0001d618 mov r5, r6 | r5 = r6;
0x0001d61c b 0x1d530 | goto label_5;
| label_19:
0x0001d620 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0001d624 cmp sb, 0 |
0x0001d628 mov sl, sb | sl = sb;
0x0001d62c ldr r0, [r2, r6] | r0 = *((r2 + r6));
| if (sb == 0) {
0x0001d630 beq 0x1d6a4 | goto label_22;
| }
0x0001d634 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0001d638 sub r1, fp, 0xf4 | r1 -= var_f4h;
0x0001d63c blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
0x0001d640 cmp r0, 0 |
| if (r0 != 0) {
0x0001d644 ldreq r3, [fp, -0xe4] | r3 = var_e4h;
| }
| if (r0 == 0) {
0x0001d648 movne r3, 0 | r3 = 0;
| }
| if (r0 != 0) {
0x0001d64c andeq r3, r3, 0xf000 | r3 &= 0xf000;
| }
| if (r0 != 0) {
0x0001d650 subeq r3, r3, 0x4000 | r3 -= 0x4000;
| }
0x0001d654 clzeq r3, r3 | __asm ("clzeq r3, r3");
| if (r0 != 0) {
0x0001d658 lsreq r3, r3, 5 | r3 >>= 5;
| }
0x0001d65c and r3, r3, 1 | r3 &= 1;
| do {
0x0001d660 cmp r3, 0 |
| if (r3 == 0) {
0x0001d664 beq 0x1d6e0 | goto label_23;
| }
0x0001d668 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0001d66c ldr sl, [r3, r6] | sl = *((r3 + r6));
0x0001d670 mov r0, sl | r0 = sl;
0x0001d674 bl 0x3e3c0 | r0 = strlen ();
0x0001d678 add r1, r0, 2 | r1 = r0 + 2;
0x0001d67c str r0, [fp, -0x100] | var_100h = r0;
0x0001d680 mov r0, sl | r0 = sl;
0x0001d684 bl 0x11d30 | fcn_00011d30 ();
0x0001d688 ldr r2, [fp, -0x100] | r2 = var_100h;
0x0001d68c subs sl, r0, 0 | sl = r0 - 0;
| if (sl != r0) {
0x0001d690 bne 0x1d6cc | goto label_24;
| }
0x0001d694 mov r0, r4 | r0 = r4;
0x0001d698 bl 0x1d12c | globfree64 ();
0x0001d69c str sl, [r4] | *(r4) = sl;
0x0001d6a0 b 0x1d4dc | goto label_4;
| label_22:
0x0001d6a4 ldr r1, [fp, -0xf8] | r1 = var_f8h;
0x0001d6a8 bl 0x17f54 | r0 = stat64 ();
0x0001d6ac cmp r0, 0 |
| if (r0 != 0) {
0x0001d6b0 ldreq r3, [fp, -0x7c] | r3 = var_7ch;
| }
| if (r0 != 0) {
0x0001d6b4 andeq r3, r3, 0xf000 | r3 &= 0xf000;
| }
| if (r0 != 0) {
0x0001d6b8 subeq sl, r3, 0x4000 | sl = r3 - 0x4000;
| }
0x0001d6bc clzeq sl, sl | __asm ("clzeq sl, sl");
| if (r0 != 0) {
0x0001d6c0 lsreq sl, sl, 5 | sl >>= 5;
| }
0x0001d6c4 and r3, sl, 1 | r3 = sl & 1;
0x0001d6c8 b 0x1d660 |
| } while (1);
| label_24:
0x0001d6cc add r0, sl, r2 | r0 = sl + r2;
0x0001d6d0 ldr r1, [fp, -0xfc] | r1 = src;
0x0001d6d4 bl 0x3e970 | strcpy (r0, r1)
0x0001d6d8 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0001d6dc str sl, [r2, r6] | *((r2 + r6)) = sl;
| label_23:
0x0001d6e0 add r7, r7, 1 | r7++;
0x0001d6e4 add r6, r6, 4 | r6 += 4;
0x0001d6e8 b 0x1d558 | goto label_6;
| }
; 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/libuClibc-1.0.31.so @ 0x1d184 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.glob64 () | void glob64 (uint32_t arg1, int32_t arg2) {
| int32_t var_108h;
| int32_t var_104h;
| int32_t var_100h;
| char * src;
| int32_t var_f8h;
| int32_t var_f4h;
| int32_t var_e4h;
| int32_t var_8ch;
| int32_t var_88h;
| int32_t var_7ch;
| int32_t var_78h;
| int32_t var_74h;
| int32_t var_70h;
| int32_t var_6ch;
| int32_t var_0h;
| int32_t var_1h;
| int32_t var_8h;
| int32_t var_20h_2;
| int32_t var_20h;
| int32_t var_2h;
| r0 = arg1;
| r1 = arg2;
0x0001d184 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001d188 cmp r3, 0 |
0x0001d18c cmpne r0, 0 | __asm ("cmpne r0, 0");
0x0001d190 add fp, sp, 0x20 |
0x0001d194 sub sp, sp, 0xf4 |
| if (r3 != 0) {
0x0001d198 beq 0x1d1ac |
0x0001d19c bic ip, r1, 0x7e00 | ip = BIT_MASK (r1, 0x7e00);
0x0001d1a0 bic ip, ip, 0xff | ip = BIT_MASK (ip, 0xff);
0x0001d1a4 cmp ip, 0 |
| if (ip == 0) {
0x0001d1a8 beq 0x1d1d0 | goto label_7;
| }
| }
0x0001d1ac ldr r3, [pc, 0x538] | r3 = *(0x1d6e8);
0x0001d1b0 bl 0x11934 | fcn_00011934 ();
0x0001d1b4 mov r2, 0x16 | r2 = 0x16;
0x0001d1b8 ldr r3, [pc, r3] | r3 = *(0x0001d1c0);
0x0001d1bc mvn r5, 0 | r5 = ~0;
0x0001d1c0 str r2, [r0, r3] | *((r0 + r3)) = r2;
| do {
| label_1:
0x0001d1c4 mov r0, r5 | r0 = r5;
0x0001d1c8 sub sp, fp, 0x20 |
0x0001d1cc pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x0001d1d0 ands r5, r1, 8 | r5 = r1 & 8;
| if (r5 != r1) {
0x0001d1d4 streq r5, [r3, 8] | *((r3 + 8)) = r5;
| }
0x0001d1d8 mov r6, r1 | r6 = r1;
0x0001d1dc mov r1, 0x2f | r1 = 0x2f;
0x0001d1e0 mov r4, r3 | r4 = r3;
0x0001d1e4 mov r7, r0 | r7 = r0;
0x0001d1e8 str r2, [fp, -0xfc] | src = r2;
0x0001d1ec bl 0x3e928 | r0 = rindex ();
0x0001d1f0 subs r3, r0, 0 | r3 = r0 - 0;
| if (r3 != r0) {
0x0001d1f4 bne 0x1d35c | goto label_8;
| }
0x0001d1f8 ands sb, r6, 0x5000 | sb = r6 & 0x5000;
| if (sb == r6) {
0x0001d1fc beq 0x1d40c | goto label_9;
| }
0x0001d200 ldrb r2, [r7] | r2 = *(r7);
0x0001d204 cmp r2, 0x7e |
| if (r2 != 0x7e) {
0x0001d208 bne 0x1d41c | goto label_10;
| }
0x0001d20c mov r0, r7 | r0 = r7;
0x0001d210 str r3, [fp, -0xf8] | var_f8h = r3;
0x0001d214 bl 0x3e3c0 | strlen ();
0x0001d218 mov sl, r7 | sl = r7;
0x0001d21c mov sb, r0 | sb = r0;
| label_0:
0x0001d220 ands r8, r6, 0x20 | r8 = r6 & 0x20;
| if (r8 == r6) {
0x0001d224 bne 0x1d26c |
0x0001d228 cmp r5, 0 |
0x0001d22c ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0001d230 str r8, [r4] | *(r4) = r8;
| if (r5 != 0) {
0x0001d234 streq r5, [r4, 4] | *((r4 + 4)) = r5;
| }
| if (r5 == 0) {
0x0001d238 beq 0x1d26c | goto label_11;
| }
0x0001d23c add r0, r0, 1 | r0++;
0x0001d240 lsl r0, r0, 2 | r0 <<= 2;
0x0001d244 bl 0x11a90 | r0 = fcn_00011a90 ();
0x0001d248 cmp r0, 0 |
0x0001d24c str r0, [r4, 4] | *((r4 + 4)) = r0;
| if (r0 == 0) {
0x0001d250 beq 0x1d4dc | goto label_4;
| }
0x0001d254 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001d258 sub r2, r0, 4 | r2 = r0 - 4;
0x0001d25c add r0, r0, r3, lsl 2 | r0 += (r3 << 2);
0x0001d260 mov r3, r8 | r3 = r8;
| label_2:
0x0001d264 cmp r0, r2 |
| if (r0 != r2) {
0x0001d268 bne 0x1d430 | goto label_12;
| }
| }
| label_11:
0x0001d26c ldr r8, [r4] | r8 = *(r4);
0x0001d270 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001d274 tst r6, 0x40 |
| if ((r6 & 0x40) != 0) {
0x0001d278 moveq r1, 1 | r1 = 1;
| }
| if ((r6 & 0x40) == 0) {
0x0001d27c movne r1, 0 | r1 = 0;
| }
0x0001d280 mov r0, sl | r0 = sl;
0x0001d284 add r8, r8, r3 | r8 += r3;
0x0001d288 bl 0x1bff8 | r0 = glob_pattern_p ();
0x0001d28c cmp r0, 0 |
| if (r0 == 0) {
0x0001d290 beq 0x1d5b4 | goto label_13;
| }
0x0001d294 tst r6, 0x200 |
| if ((r6 & 0x200) != 0) {
0x0001d298 beq 0x1d2c4 |
0x0001d29c ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0001d2a0 str r3, [fp, -0x74] | var_74h = r3;
0x0001d2a4 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0001d2a8 str r3, [fp, -0x78] | var_78h = r3;
0x0001d2ac ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0001d2b0 str r3, [fp, -0x7c] | var_7ch = r3;
0x0001d2b4 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0001d2b8 str r3, [fp, -0x6c] | var_6ch = r3;
0x0001d2bc ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0001d2c0 str r3, [fp, -0x70] | var_70h = r3;
| }
0x0001d2c4 ldr r1, [pc, 0x424] | r1 = *(0x1d6ec);
0x0001d2c8 sub sb, fp, 0x8c | sb -= var_8ch;
0x0001d2cc and r1, r6, r1 | r1 = r6 & r1;
0x0001d2d0 orr r1, r1, 0x2000 | r1 |= 0x2000;
0x0001d2d4 mov r3, sb | r3 = sb;
0x0001d2d8 ldr r2, [fp, -0xfc] | r2 = src;
0x0001d2dc orr r1, r1, 4 | r1 |= 4;
0x0001d2e0 mov r0, sl | r0 = sl;
0x0001d2e4 bl 0x1d184 | glob64 ();
0x0001d2e8 subs r5, r0, 0 | r5 -= var_0h;
0x0001d2ec bne 0x1d1c4 |
| } while (r5 != var_0h);
0x0001d2f0 bic r3, r6, 0x830 | r3 = BIT_MASK (r6, 0x830);
0x0001d2f4 orr r3, r3, 0x20 | r3 |= 0x20;
0x0001d2f8 mov sl, r5 | sl = r5;
0x0001d2fc str r3, [fp, -0x104] | var_104h = r3;
| label_3:
0x0001d300 ldr r3, [r4] | r3 = *(r4);
0x0001d304 str r3, [fp, -0x100] | var_100h = r3;
0x0001d308 ldr r3, [fp, -0x8c] | r3 = var_8ch;
0x0001d30c cmp r3, sl |
| if (r3 > sl) {
0x0001d310 bhi 0x1d438 | goto label_14;
| }
0x0001d314 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001d318 ldr r2, [fp, -0x100] | r2 = var_100h;
0x0001d31c orr r5, r6, 0x100 | r5 |= var_20h;
0x0001d320 add r3, r2, r3 | r3 = r2 + r3;
0x0001d324 cmp r3, r8 |
| if (r3 != r8) {
0x0001d328 bne 0x1d528 | goto label_15;
| }
0x0001d32c tst r6, 0x10 |
| if ((r6 & 0x10) == 0) {
0x0001d330 beq 0x1d5a4 | goto label_16;
| }
0x0001d334 add r1, r8, 2 | r1 = r8 + 2;
0x0001d338 lsl r6, r1, 2 | r6 = r1 << 2;
0x0001d33c mov r1, r6 | r1 = r6;
0x0001d340 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0001d344 bl 0x11d30 | r0 = fcn_00011d30 ();
0x0001d348 subs sl, r0, 0 | sl = r0 - 0;
| if (sl != r0) {
0x0001d34c bne 0x1d4ec | goto label_17;
| }
0x0001d350 mov r0, sb | r0 = sb;
0x0001d354 bl 0x1d12c | globfree64 ();
0x0001d358 b 0x1d4dc | goto label_4;
| label_8:
0x0001d35c cmp r7, r3 |
| if (r7 == r3) {
0x0001d360 bne 0x1d37c |
0x0001d364 ldr sl, [pc, 0x388] | sl = *(0x1d6f0);
0x0001d368 add r3, r7, 1 | r3 = r7 + 1;
0x0001d36c str r3, [fp, -0xf8] | var_f8h = r3;
0x0001d370 mov sb, 1 | sb = 1;
0x0001d374 add sl, pc, sl | sl = pc + sl;
0x0001d378 b 0x1d220 | goto label_0;
| }
0x0001d37c sub sb, r3, r7 | sb = r3 - r7;
0x0001d380 add r2, sb, 0xf | r2 = sb + 0xf;
0x0001d384 bic r2, r2, 7 | r2 = BIT_MASK (r2, 7);
0x0001d388 sub sp, sp, r2 |
0x0001d38c add r8, sp, 8 | r8 += var_8h;
0x0001d390 mov r2, sb | r2 = sb;
0x0001d394 mov r1, r7 | r1 = r7;
0x0001d398 mov r0, r8 | r0 = r8;
0x0001d39c str r3, [fp, -0xf8] | var_f8h = r3;
0x0001d3a0 bl 0x3e98c | mempcpy ();
0x0001d3a4 ldr r3, [fp, -0xf8] | r3 = var_f8h;
0x0001d3a8 mov r2, 0 | r2 = 0;
0x0001d3ac cmp sb, 1 |
0x0001d3b0 mov sl, r8 | sl = r8;
0x0001d3b4 strb r2, [r0] | *(r0) = r2;
0x0001d3b8 add r2, r3, 1 | r2 = r3 + 1;
0x0001d3bc str r2, [fp, -0xf8] | var_f8h = r2;
0x0001d3c0 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
| if (sb > 1) {
0x0001d3c4 movls r3, 0 | r3 = 0;
| }
| if (sb <= 1) {
0x0001d3c8 movhi r3, 1 | r3 = 1;
| }
0x0001d3cc cmp r2, 0 |
| if (r2 == 0) {
0x0001d3d0 movne r3, 0 | r3 = 0;
| }
0x0001d3d4 cmp r3, 0 |
| if (r3 == 0) {
0x0001d3d8 beq 0x1d220 | goto label_0;
| }
0x0001d3dc mov r3, r4 | r3 = r4;
0x0001d3e0 ldr r2, [fp, -0xfc] | r2 = src;
0x0001d3e4 orr r1, r6, 2 | r1 |= var_2h;
0x0001d3e8 mov r0, r8 | r0 = r8;
0x0001d3ec bl 0x1d184 | glob64 ();
0x0001d3f0 subs r5, r0, 0 | r5 -= var_0h;
| if (r5 != var_0h) {
0x0001d3f4 ldreq r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| }
| if (r5 != var_0h) {
0x0001d3f8 andeq r6, r6, 2 | r6 &= 2;
| }
0x0001d3fc biceq r3, r3, 2 | __asm ("biceq r3, r3, 2");
| if (r5 != var_0h) {
0x0001d400 orreq r6, r3, r6 | r6 = r3 | r6;
| }
| if (r5 != var_0h) {
0x0001d404 streq r6, [r4, 0xc] | *((r4 + 0xc)) = r6;
| }
0x0001d408 b 0x1d1c4 | goto label_1;
| label_9:
0x0001d40c ldr sl, [pc, 0x2e4] | sl = *(0x1d6f4);
0x0001d410 str r7, [fp, -0xf8] | var_f8h = r7;
0x0001d414 add sl, pc, sl | sl = pc + sl;
0x0001d418 b 0x1d220 | goto label_0;
| label_10:
0x0001d41c ldr sl, [pc, 0x2d8] | sl = *(0x1d6f8);
0x0001d420 str r7, [fp, -0xf8] | var_f8h = r7;
0x0001d424 mov sb, r3 | sb = r3;
0x0001d428 add sl, pc, sl | sl = pc + sl;
0x0001d42c b 0x1d220 | goto label_0;
| label_12:
0x0001d430 str r3, [r2, 4]! | *((r2 += 4)) = r3;
0x0001d434 b 0x1d264 | goto label_2;
| label_14:
0x0001d438 ldr r1, [fp, -0x88] | r1 = var_88h;
0x0001d43c lsl r3, sl, 2 | r3 = sl << 2;
0x0001d440 str r3, [fp, -0x108] | var_108h = r3;
0x0001d444 str r4, [sp] | *(sp) = r4;
0x0001d448 ldr r3, [fp, -0xfc] | r3 = src;
0x0001d44c ldr r2, [fp, -0x104] | r2 = var_104h;
0x0001d450 ldr r1, [r1, sl, lsl 2] | offset_0 = sl << 2;
| r1 = *((r1 + offset_0));
0x0001d454 ldr r0, [fp, -0xf8] | r0 = var_f8h;
0x0001d458 bl 0x1cc94 | r0 = fcn_0001cc94 (r0, r1, r2);
0x0001d45c cmp r0, 3 |
0x0001d460 mov r5, r0 | r5 = r0;
| if (r0 == 3) {
0x0001d464 beq 0x1d4e4 | goto label_18;
| }
0x0001d468 cmp r0, 0 |
| if (r0 != 0) {
0x0001d46c beq 0x1d48c |
0x0001d470 mov r0, sb | r0 = sb;
0x0001d474 bl 0x1d12c | globfree64 ();
0x0001d478 mov r0, r4 | r0 = r4;
0x0001d47c bl 0x1d12c | globfree64 ();
0x0001d480 mov r3, 0 | r3 = 0;
0x0001d484 str r3, [r4] | *(r4) = r3;
0x0001d488 b 0x1d1c4 | goto label_1;
| }
0x0001d48c ldr r1, [fp, -0x100] | r1 = var_100h;
0x0001d490 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001d494 ldr r0, [fp, -0x100] | r0 = var_100h;
0x0001d498 add r3, r1, r3 | r3 = r1 + r3;
0x0001d49c ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0001d4a0 ldr r2, [r4] | r2 = *(r4);
0x0001d4a4 add r1, r1, r3, lsl 2 | r1 += (r3 << 2);
0x0001d4a8 ldr r3, [fp, -0x88] | r3 = var_88h;
0x0001d4ac sub r2, r2, r0 | r2 -= r0;
0x0001d4b0 lsl r0, sl, 2 | r0 = sl << 2;
0x0001d4b4 ldr r0, [r3, r0] | r0 = *((r3 + r0));
0x0001d4b8 bl 0x1c550 | r0 = fcn_0001c550 (r0, r1);
0x0001d4bc cmp r0, 0 |
0x0001d4c0 beq 0x1d4e4 |
| while (r3 == 0) {
0x0001d4c4 mov r0, sb | r0 = sb;
0x0001d4c8 bl 0x1d12c | globfree64 ();
0x0001d4cc mov r0, r4 | r0 = r4;
0x0001d4d0 bl 0x1d12c | globfree64 ();
0x0001d4d4 mov r3, 0 | r3 = 0;
0x0001d4d8 str r3, [r4] | *(r4) = r3;
| label_4:
0x0001d4dc mov r5, 1 | r5 = 1;
0x0001d4e0 b 0x1d1c4 | goto label_1;
| label_18:
0x0001d4e4 add sl, sl, 1 | sl += var_1h;
0x0001d4e8 b 0x1d300 | goto label_3;
| label_17:
0x0001d4ec str sl, [r4, 4] | *((r4 + 4)) = sl;
0x0001d4f0 mov r0, r7 | r0 = r7;
0x0001d4f4 bl 0x3f894 | strdup ();
0x0001d4f8 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0001d4fc str r0, [sl, r8, lsl 2] | offset_1 = r8 << 2;
| *((sl + offset_1)) = r0;
0x0001d500 ldr r3, [r1, r8, lsl 2] | offset_2 = r8 << 2;
| r3 = *((r1 + offset_2));
0x0001d504 cmp r3, 0 |
0x0001d508 beq 0x1d4c4 |
| }
0x0001d50c ldr r3, [r4] | r3 = *(r4);
0x0001d510 add r1, r1, r6 | r1 += r6;
0x0001d514 add r3, r3, 1 | r3++;
0x0001d518 str r3, [r4] | *(r4) = r3;
0x0001d51c mov r3, 0 | r3 = 0;
0x0001d520 str r3, [r1, -4] | *((r1 - 4)) = r3;
0x0001d524 str r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
| label_15:
0x0001d528 mov r0, sb | r0 = sb;
0x0001d52c bl 0x1d12c | globfree64 ();
| label_5:
0x0001d530 tst r5, 2 |
| if ((r5 & 2) != 0) {
0x0001d534 beq 0x1d56c |
0x0001d538 sub r3, fp, 0x8c | r3 -= var_8ch;
0x0001d53c str r3, [fp, -0xf8] | var_f8h = r3;
0x0001d540 ldr r3, [pc, 0x1b8] | r3 = *(0x1d6fc);
0x0001d544 lsl r6, r8, 2 | r6 = r8 << 2;
0x0001d548 add r3, pc, r3 | r3 = pc + r3;
0x0001d54c mov r7, r8 | r7 = r8;
0x0001d550 and sb, r5, 0x200 | sb = r5 & 0x200;
0x0001d554 str r3, [fp, -0xfc] | src = r3;
| label_6:
0x0001d558 ldr r3, [r4] | r3 = *(r4);
0x0001d55c ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0001d560 add r3, r3, r2 | r3 += r2;
0x0001d564 cmp r3, r7 |
| if (r3 > r7) {
0x0001d568 bhi 0x1d620 | goto label_19;
| }
| }
0x0001d56c ands r5, r5, 4 | r5 &= 4;
| if (r5 != r5) {
0x0001d570 movne r5, 0 | r5 = 0;
| goto label_20;
| }
| if (r5 != r5) {
| label_20:
0x0001d574 bne 0x1d1c4 | goto label_1;
| }
0x0001d578 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001d57c ldr r1, [r4] | r1 = *(r4);
0x0001d580 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0001d584 add r1, r1, r3 | r1 += r3;
0x0001d588 ldr r3, [pc, 0x174] | r3 = *(0x1d700);
0x0001d58c mov r2, 4 | r2 = 4;
0x0001d590 add r3, pc, r3 | r3 = pc + r3;
0x0001d594 sub r1, r1, r8 | r1 -= r8;
0x0001d598 add r0, r0, r8, lsl 2 | r0 += (r8 << 2);
0x0001d59c bl 0x4d1f4 | qsort ();
0x0001d5a0 b 0x1d1c4 | goto label_1;
| label_16:
0x0001d5a4 mov r0, sb | r0 = sb;
0x0001d5a8 bl 0x1d12c | globfree64 ();
0x0001d5ac mov r5, 3 | r5 = 3;
0x0001d5b0 b 0x1d1c4 | goto label_1;
| label_13:
0x0001d5b4 ldr r7, [r4] | r7 = *(r4);
0x0001d5b8 ldr r3, [fp, -0xfc] | r3 = src;
0x0001d5bc str r4, [sp] | *(sp) = r4;
0x0001d5c0 mov r2, r6 | r2 = r6;
0x0001d5c4 mov r1, sl | r1 = sl;
0x0001d5c8 ldr r0, [fp, -0xf8] | r0 = var_f8h;
0x0001d5cc bl 0x1cc94 | r0 = fcn_0001cc94 (r0, r1, r2);
0x0001d5d0 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 != r0) {
0x0001d5d4 bne 0x1d1c4 | goto label_1;
| }
0x0001d5d8 cmp sb, 0 |
| if (sb != 0) {
0x0001d5dc beq 0x1d618 |
0x0001d5e0 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001d5e4 ldr r2, [r4] | r2 = *(r4);
0x0001d5e8 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0001d5ec add r3, r7, r3 | r3 = r7 + r3;
0x0001d5f0 sub r2, r2, r7 | r2 -= r7;
0x0001d5f4 add r1, r1, r3, lsl 2 | r1 += (r3 << 2);
0x0001d5f8 mov r0, sl | r0 = sl;
0x0001d5fc bl 0x1c550 | r0 = fcn_0001c550 (r0, r1);
0x0001d600 cmp r0, 0 |
| if (r0 == 0) {
0x0001d604 beq 0x1d618 | goto label_21;
| }
0x0001d608 mov r0, r4 | r0 = r4;
0x0001d60c bl 0x1d12c | globfree64 ();
0x0001d610 str r5, [r4] | *(r4) = r5;
0x0001d614 b 0x1d4dc | goto label_4;
| }
| label_21:
0x0001d618 mov r5, r6 | r5 = r6;
0x0001d61c b 0x1d530 | goto label_5;
| label_19:
0x0001d620 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0001d624 cmp sb, 0 |
0x0001d628 mov sl, sb | sl = sb;
0x0001d62c ldr r0, [r2, r6] | r0 = *((r2 + r6));
| if (sb == 0) {
0x0001d630 beq 0x1d6a4 | goto label_22;
| }
0x0001d634 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0001d638 sub r1, fp, 0xf4 | r1 -= var_f4h;
0x0001d63c blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
0x0001d640 cmp r0, 0 |
| if (r0 != 0) {
0x0001d644 ldreq r3, [fp, -0xe4] | r3 = var_e4h;
| }
| if (r0 == 0) {
0x0001d648 movne r3, 0 | r3 = 0;
| }
| if (r0 != 0) {
0x0001d64c andeq r3, r3, 0xf000 | r3 &= 0xf000;
| }
| if (r0 != 0) {
0x0001d650 subeq r3, r3, 0x4000 | r3 -= 0x4000;
| }
0x0001d654 clzeq r3, r3 | __asm ("clzeq r3, r3");
| if (r0 != 0) {
0x0001d658 lsreq r3, r3, 5 | r3 >>= 5;
| }
0x0001d65c and r3, r3, 1 | r3 &= 1;
| do {
0x0001d660 cmp r3, 0 |
| if (r3 == 0) {
0x0001d664 beq 0x1d6e0 | goto label_23;
| }
0x0001d668 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0001d66c ldr sl, [r3, r6] | sl = *((r3 + r6));
0x0001d670 mov r0, sl | r0 = sl;
0x0001d674 bl 0x3e3c0 | r0 = strlen ();
0x0001d678 add r1, r0, 2 | r1 = r0 + 2;
0x0001d67c str r0, [fp, -0x100] | var_100h = r0;
0x0001d680 mov r0, sl | r0 = sl;
0x0001d684 bl 0x11d30 | fcn_00011d30 ();
0x0001d688 ldr r2, [fp, -0x100] | r2 = var_100h;
0x0001d68c subs sl, r0, 0 | sl = r0 - 0;
| if (sl != r0) {
0x0001d690 bne 0x1d6cc | goto label_24;
| }
0x0001d694 mov r0, r4 | r0 = r4;
0x0001d698 bl 0x1d12c | globfree64 ();
0x0001d69c str sl, [r4] | *(r4) = sl;
0x0001d6a0 b 0x1d4dc | goto label_4;
| label_22:
0x0001d6a4 ldr r1, [fp, -0xf8] | r1 = var_f8h;
0x0001d6a8 bl 0x17f54 | r0 = stat64 ();
0x0001d6ac cmp r0, 0 |
| if (r0 != 0) {
0x0001d6b0 ldreq r3, [fp, -0x7c] | r3 = var_7ch;
| }
| if (r0 != 0) {
0x0001d6b4 andeq r3, r3, 0xf000 | r3 &= 0xf000;
| }
| if (r0 != 0) {
0x0001d6b8 subeq sl, r3, 0x4000 | sl = r3 - 0x4000;
| }
0x0001d6bc clzeq sl, sl | __asm ("clzeq sl, sl");
| if (r0 != 0) {
0x0001d6c0 lsreq sl, sl, 5 | sl >>= 5;
| }
0x0001d6c4 and r3, sl, 1 | r3 = sl & 1;
0x0001d6c8 b 0x1d660 |
| } while (1);
| label_24:
0x0001d6cc add r0, sl, r2 | r0 = sl + r2;
0x0001d6d0 ldr r1, [fp, -0xfc] | r1 = src;
0x0001d6d4 bl 0x3e970 | strcpy (r0, r1)
0x0001d6d8 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0001d6dc str sl, [r2, r6] | *((r2 + r6)) = sl;
| label_23:
0x0001d6e0 add r7, r7, 1 | r7++;
0x0001d6e4 add r6, r6, 4 | r6 += 4;
0x0001d6e8 b 0x1d558 | goto label_6;
| }
; 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/libuClibc-1.0.31.so @ 0x44134 */
| #include <stdint.h>
|
; (fcn) sym.inet_ntop () | void inet_ntop (uint32_t arg1, int32_t arg2) {
| char * dest;
| char * format;
| int32_t var_ch;
| void * s;
| int32_t var_24h;
| char * src;
| char * var_0h;
| int32_t var_60h;
| int32_t var_64h;
| r0 = arg1;
| r1 = arg2;
0x00044134 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00044138 cmp r0, 2 |
0x0004413c sub sp, sp, 0x64 |
0x00044140 mov sb, r1 | sb = r1;
0x00044144 str r2, [sp, 4] | dest = r2;
0x00044148 mov fp, r3 |
| if (r0 != 2) {
0x0004414c beq 0x44170 |
0x00044150 cmp r0, 0xa |
| if (r0 == 0xa) {
0x00044154 beq 0x44188 | goto label_3;
| }
0x00044158 ldr r3, [pc, 0x258] | r3 = *(0x443b4);
0x0004415c bl 0x11934 | fcn_00011934 ();
0x00044160 mov r2, 0x61 | r2 = 0x61;
0x00044164 ldr r3, [pc, r3] | r3 = *(0x0004416c);
0x00044168 str r2, [r0, r3] | *((r0 + r3)) = r2;
0x0004416c b 0x44300 | goto label_4;
| }
0x00044170 mov r2, r3 | r2 = r3;
0x00044174 ldr r1, [sp, 4] | r1 = dest;
0x00044178 mov r0, sb | r0 = sb;
0x0004417c bl 0x43f34 | fcn_00043f34 (r0, r1);
| label_0:
0x00044180 add sp, sp, 0x64 |
0x00044184 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_3:
0x00044188 add sl, sp, 0x10 | sl += s;
0x0004418c mov r2, 0x20 | r2 = 0x20;
0x00044190 mov r1, 0 | r1 = 0;
0x00044194 mov r0, sl | r0 = sl;
0x00044198 bl 0x3e310 | memset (r0, r1, r2);
0x0004419c mov r2, 0 | r2 = 0;
| do {
0x000441a0 mov ip, sb |
0x000441a4 ldrb lr, [ip, r2]! |
0x000441a8 asr r1, r2, 1 | r1 = r2 >> 1;
0x000441ac ldrb r0, [ip, 1] | r0 = *((ip + 1));
0x000441b0 add r3, sp, 0x60 | r3 += var_60h;
0x000441b4 add r2, r2, 2 | r2 += 2;
0x000441b8 add r1, r3, r1, lsl 2 | r1 = r3 + (r1 << 2);
0x000441bc orr r0, r0, lr, lsl 8 | r0 |= (lr << 8);
0x000441c0 cmp r2, 0x10 |
0x000441c4 str r0, [r1, -0x50] | s = r0;
0x000441c8 bne 0x441a0 |
| } while (r2 != 0x10);
0x000441cc mov r5, 0 | r5 = 0;
0x000441d0 mvn r4, 0 | r4 = ~0;
0x000441d4 mov r1, r5 | r1 = r5;
0x000441d8 mov r2, r4 | r2 = r4;
0x000441dc mov r0, r5 | r0 = r5;
| do {
0x000441e0 ldr ip, [sl, r0, lsl 2] | offset_0 = r0 << 2;
| ip = *((sl + offset_0));
0x000441e4 cmp ip, 0 |
| if (ip == 0) {
0x000441e8 bne 0x44200 |
0x000441ec cmn r2, 1 |
| if (r2 == 1) {
0x000441f0 addne r1, r1, 1 | r1++;
| }
| if (r2 != 1) {
0x000441f4 moveq r2, r0 | r2 = r0;
| }
| if (r2 != 1) {
0x000441f8 moveq r1, 1 | r1 = 1;
| }
0x000441fc b 0x4422c |
| } else {
0x00044200 cmn r2, 1 |
| if (r2 == 1) {
0x00044204 beq 0x4422c | goto label_5;
| }
0x00044208 cmn r4, 1 |
| if (r4 == 1) {
0x0004420c movne ip, 0 |
| }
| if (r4 != 1) {
0x00044210 moveq ip, 1 |
| }
0x00044214 cmp r1, r5 |
| if (r1 <= r5) {
0x00044218 orrgt ip, ip, 1 |
| }
0x0004421c cmp ip, 0 |
| if (ip == 0) {
0x00044220 movne r4, r2 | r4 = r2;
| }
| if (ip == 0) {
0x00044224 movne r5, r1 | r5 = r1;
| }
0x00044228 mvn r2, 0 | r2 = ~0;
| }
| label_5:
0x0004422c add r0, r0, 1 | r0++;
0x00044230 cmp r0, 8 |
0x00044234 bne 0x441e0 |
| } while (r0 != 8);
0x00044238 cmn r2, 1 |
| if (r2 == 1) {
0x0004423c beq 0x4426c | goto label_6;
| }
0x00044240 cmn r4, 1 |
| if (r4 == 1) {
0x00044244 movne r0, 0 | r0 = 0;
| }
| if (r4 != 1) {
0x00044248 moveq r0, 1 | r0 = 1;
| }
0x0004424c cmp r5, r1 |
| if (r5 >= r1) {
0x00044250 orrlt r0, r0, 1 | r0 |= 1;
| }
0x00044254 cmp r0, 0 |
| if (r0 == 0) {
0x00044258 movne r5, r1 | r5 = r1;
| }
0x0004425c movne r4, r2 | r4 = r2;
| while (r4 != 1) {
0x00044260 cmp r5, 1 |
| if (r5 > 1) {
0x00044264 mvnle r4, 0 | r4 = ~0;
| }
0x00044268 b 0x44274 | goto label_7;
| label_6:
0x0004426c cmn r4, 1 |
0x00044270 bne 0x44260 |
| }
| label_7:
0x00044274 ldr r3, [pc, 0x140] | r3 = *(0x443b8);
0x00044278 add r2, sp, 0x30 | r2 += src;
0x0004427c add r3, pc, r3 | r3 = pc + r3;
0x00044280 str r3, [sp, 8] | format = r3;
0x00044284 mov r6, 0 | r6 = 0;
0x00044288 mov r8, r2 | r8 = r2;
0x0004428c mov r3, 0x3a | r3 = 0x3a;
| do {
0x00044290 cmp r4, r6 |
| if (r4 <= r6) {
0x00044294 movgt r1, 0 | r1 = 0;
| }
| if (r4 > r6) {
0x00044298 movle r1, 1 | r1 = 1;
| }
0x0004429c cmn r4, 1 |
| if (r4 != 1) {
0x000442a0 moveq r1, 0 | r1 = 0;
| }
0x000442a4 cmp r1, 0 |
| if (r1 == 0) {
0x000442a8 beq 0x44308 | goto label_8;
| }
0x000442ac add r1, r4, r5 | r1 = r4 + r5;
0x000442b0 cmp r1, r6 |
| if (r1 <= r6) {
0x000442b4 ble 0x44308 | goto label_8;
| }
0x000442b8 cmp r4, r6 |
| if (r4 != r6) {
0x000442bc strbeq r3, [r2] | *(r2) = r3;
| }
| if (r4 != r6) {
0x000442c0 addeq r2, r2, 1 | r2++;
| }
| label_2:
0x000442c4 add r6, r6, 1 | r6++;
0x000442c8 cmp r6, 8 |
0x000442cc bne 0x44290 |
| } while (r6 != 8);
0x000442d0 cmn r4, 1 |
| if (r4 != 1) {
0x000442d4 bne 0x4436c | goto label_9;
| }
| label_1:
0x000442d8 mov r3, 0 | r3 = 0;
0x000442dc strb r3, [r2], 1 | *(r2) = r3;
| r2++;
0x000442e0 sub r2, r2, r8 | r2 -= r8;
0x000442e4 cmp fp, r2 |
| if (fp >= r2) {
0x000442e8 bhs 0x443a8 | goto label_10;
| }
0x000442ec ldr r2, [pc, 0xcc] | r2 = *(0x443bc);
0x000442f0 bl 0x11934 | fcn_00011934 ();
0x000442f4 mov r1, 0x1c | r1 = 0x1c;
0x000442f8 ldr r2, [pc, r2] | r2 = *(0x00044300);
0x000442fc str r1, [r0, r2] | *((r0 + r2)) = r1;
| label_4:
0x00044300 mov r0, 0 | r0 = 0;
0x00044304 b 0x44180 | goto label_0;
| label_8:
0x00044308 cmp r6, 0 |
| if (r6 == 0) {
0x0004430c beq 0x44384 | goto label_11;
| }
0x00044310 cmp r4, 0 |
0x00044314 cmpeq r6, 6 | __asm ("cmpeq r6, 6");
0x00044318 add r7, r2, 1 | r7 += var_0h;
0x0004431c strb r3, [r2] | *(r2) = r3;
| if (r4 != 0) {
0x00044320 bne 0x44388 | goto label_12;
| }
0x00044324 cmp r5, 6 |
| if (r5 != 6) {
0x00044328 beq 0x44344 |
0x0004432c cmp r5, 5 |
| if (r5 != 5) {
0x00044330 bne 0x44388 | goto label_12;
| }
0x00044334 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00044338 ldr r1, [pc, 0x84] | r1 = *(0x443c0);
0x0004433c cmp r2, r1 |
| if (r2 != r1) {
0x00044340 bne 0x44388 | goto label_12;
| }
| }
0x00044344 sub r2, r7, r8 | r2 = r7 - r8;
0x00044348 rsb r2, r2, 0x2e | r2 = 0x2e - r2;
0x0004434c mov r1, r7 | r1 = r7;
0x00044350 add r0, sb, 0xc | r0 = sb + 0xc;
0x00044354 bl 0x43f34 | r0 = fcn_00043f34 (r0, r1);
0x00044358 cmp r0, 0 |
| if (r0 == 0) {
0x0004435c beq 0x44180 | goto label_0;
| }
0x00044360 mov r0, r7 | r0 = r7;
0x00044364 bl 0x3e3c0 | r0 = strlen ();
0x00044368 add r2, r7, r0 | r2 = r7 + r0;
| label_9:
0x0004436c add r4, r4, r5 | r4 += r5;
0x00044370 cmp r4, 8 |
| if (r4 != 8) {
0x00044374 moveq r3, 0x3a | r3 = 0x3a;
| }
| if (r4 != 8) {
0x00044378 strbeq r3, [r2] | *(r2) = r3;
| }
| if (r4 != 8) {
0x0004437c addeq r2, r2, 1 | r2++;
| }
0x00044380 b 0x442d8 | goto label_1;
| label_11:
0x00044384 mov r7, r2 | r7 = r2;
| label_12:
0x00044388 ldr r2, [sl, r6, lsl 2] | offset_1 = r6 << 2;
| r2 = *((sl + offset_1));
0x0004438c ldr r1, [sp, 8] | r1 = format;
0x00044390 mov r0, r7 | r0 = r7;
0x00044394 str r3, [sp, 0xc] | var_ch = r3;
0x00044398 bl 0x34d3c | sprintf ();
0x0004439c ldr r3, [sp, 0xc] | r3 = var_ch;
0x000443a0 add r2, r7, r0 | r2 = r7 + r0;
0x000443a4 b 0x442c4 | goto label_2;
| label_10:
0x000443a8 mov r1, r8 | r1 = r8;
0x000443ac ldr r0, [sp, 4] | r0 = dest;
0x000443b0 bl 0x3e970 | strcpy (r0, r1)
0x000443b4 b 0x44180 | 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/libuClibc-1.0.31.so @ 0x4cd34 */
| #include <stdint.h>
|
; (fcn) sym.ptsname_r () | void ptsname_r (int32_t arg1) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| char * s2;
| int32_t var_18h;
| r0 = arg1;
0x0004cd34 ldr r3, [pc, 0xc4] | r3 = *(0x4cdfc);
0x0004cd38 push {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0004cd3c ldr r3, [pc, r3] | r3 = *(0x0004cd44);
0x0004cd40 mov r4, r0 | r4 = r0;
0x0004cd44 sub sp, sp, 0x18 |
0x0004cd48 bl 0x11934 | fcn_00011934 ();
0x0004cd4c mov r7, r1 | r7 = r1;
0x0004cd50 ldr r8, [r0, r3] | r8 = *((r0 + r3));
0x0004cd54 mov sb, r2 | sb = r2;
0x0004cd58 mov r6, r0 | r6 = r0;
0x0004cd5c add r2, sp, 8 | r2 += var_8h;
0x0004cd60 mov r0, r4 | r0 = r4;
0x0004cd64 ldr r1, [pc, 0x98] | r1 = swscanf;
0x0004cd68 bl 0x165d8 | r0 = ioctl ();
0x0004cd6c subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x0004cd70 bne 0x4cdf0 | goto label_0;
| }
0x0004cd74 ldr r2, [sp, 8] | r2 = var_8h;
0x0004cd78 mvn r3, 9 | r3 = ~9;
0x0004cd7c add r5, sp, 0x17 | r5 += s2;
0x0004cd80 str r3, [sp] | *(sp) = r3;
0x0004cd84 mov r0, r5 | r0 = r5;
0x0004cd88 str r4, [sp, 4] | var_4h = r4;
0x0004cd8c asr r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x0004cd90 bl 0x369d8 | r0 = fcn_000369d8 (r0, r1, r2);
0x0004cd94 sub r5, r5, r0 | r5 -= r0;
0x0004cd98 add r5, r5, 0xa | r5 += 0xa;
0x0004cd9c cmp r5, sb |
0x0004cda0 mov sl, r0 | sl = r0;
| if (r5 < sb) {
0x0004cda4 bls 0x4cdbc | goto label_1;
| }
0x0004cda8 ldr r3, [pc, 0x58] | r3 = *(0x4ce04);
0x0004cdac mov r4, 0x22 | r4 = 0x22;
0x0004cdb0 ldr r3, [pc, r3] | r3 = *(0x0004cdb8);
| do {
0x0004cdb4 str r4, [r6, r3] | *((r6 + r3)) = r4;
0x0004cdb8 b 0x4cde4 | goto label_2;
| label_1:
0x0004cdbc ldr r1, [pc, 0x48] | r1 = *(0x4ce08);
0x0004cdc0 mov r0, r7 | r0 = r7;
0x0004cdc4 add r1, pc, r1 | r1 = pc + r1;
0x0004cdc8 bl 0x3e970 | strcpy (r0, r1)
0x0004cdcc mov r1, sl | r1 = sl;
0x0004cdd0 mov r0, r7 | r0 = r7;
0x0004cdd4 bl 0x3ea84 | strcat ();
0x0004cdd8 ldr r3, [pc, 0x30] | r3 = *(0x4ce0c);
0x0004cddc ldr r3, [pc, r3] | r3 = *(0x0004cde4);
0x0004cde0 str r8, [r6, r3] | *((r6 + r3)) = r8;
| label_2:
0x0004cde4 mov r0, r4 | r0 = r4;
0x0004cde8 add sp, sp, 0x18 |
0x0004cdec pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_0:
0x0004cdf0 ldr r3, [pc, 0x1c] | r3 = *(0x4ce10);
0x0004cdf4 mov r4, 0x19 | r4 = 0x19;
0x0004cdf8 ldr r3, [pc, r3] | r3 = sym.swscanf;
0x0004cdfc b 0x4cdb4 |
| } 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/libuClibc-1.0.31.so @ 0x4ba2c */
| #include <stdint.h>
|
; (fcn) sym.realpath () | void realpath (int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| char * var_8h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| void * s2;
| int32_t var_1000h;
| char * dest;
| int8_t var_1h;
| int8_t var_2h;
| int32_t var_1ch;
| r0 = arg1;
| r1 = arg2;
0x0004ba2c push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0004ba30 subs r8, r0, 0 | r8 = r0 - 0;
0x0004ba34 sub sp, sp, 0x1000 |
0x0004ba38 sub sp, sp, 0x1c |
| if (r8 != r0) {
0x0004ba3c bne 0x4ba64 | goto label_9;
| }
0x0004ba40 ldr r3, [pc, 0x2dc] | r3 = *(0x4bd20);
0x0004ba44 bl 0x11934 | fcn_00011934 ();
0x0004ba48 mov r2, 0x16 | r2 = 0x16;
0x0004ba4c ldr r3, [pc, r3] | r3 = *(0x0004ba54);
| do {
| label_0:
0x0004ba50 str r2, [r0, r3] | *((r0 + r3)) = r2;
| label_5:
0x0004ba54 mov r0, 0 | r0 = 0;
| label_1:
0x0004ba58 add sp, sp, 0x1000 |
0x0004ba5c add sp, sp, 0x1c |
0x0004ba60 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_9:
0x0004ba64 mov r5, r1 | r5 = r1;
0x0004ba68 ldrb r1, [r8] | r1 = *(r8);
0x0004ba6c cmp r1, 0 |
| if (r1 != 0) {
0x0004ba70 bne 0x4ba88 | goto label_10;
| }
0x0004ba74 ldr r3, [pc, 0x2ac] | r3 = fputs;
0x0004ba78 bl 0x11934 | fcn_00011934 ();
0x0004ba7c mov r2, 2 | r2 = 2;
0x0004ba80 ldr r3, [pc, r3] | r3 = *(0x0004ba88);
0x0004ba84 b 0x4ba50 |
| } while (1);
| label_10:
0x0004ba88 bl 0x3e3c0 | strlen ();
0x0004ba8c ldr r3, [pc, 0x298] | r3 = *(0x4bd28);
0x0004ba90 str r3, [sp, 8] | var_8h = r3;
0x0004ba94 cmp r0, r3 |
| if (r0 >= r3) {
0x0004ba98 bls 0x4bab0 |
0x0004ba9c ldr r3, [pc, 0x28c] | r3 = *(0x4bd2c);
0x0004baa0 bl 0x11934 | fcn_00011934 ();
0x0004baa4 mov r2, 0x24 | r2 = 0x24;
0x0004baa8 ldr r3, [pc, r3] | r3 = *(0x0004bab0);
0x0004baac b 0x4ba50 | goto label_0;
| }
0x0004bab0 ldr sb, [pc, 0x27c] | sb = *(0x4bd30);
0x0004bab4 add r7, sp, 0x18 | r7 += s2;
0x0004bab8 sub r4, sb, r0 | r4 = sb - r0;
0x0004babc add r6, r7, r4 | r6 = r7 + r4;
0x0004bac0 mov r1, r8 | r1 = r8;
0x0004bac4 mov r0, r6 | r0 = r6;
0x0004bac8 bl 0x3e970 | strcpy (r0, r1)
0x0004bacc cmp r5, 0 |
0x0004bad0 str sb, [sp, 0xc] | var_ch = sb;
| if (r5 == 0) {
0x0004bad4 movne sb, 0 | sb = 0;
| }
| if (r5 == 0) {
0x0004bad8 bne 0x4baec |
0x0004badc mov r0, 0x1000 | r0 = 0x1000;
0x0004bae0 bl 0x11a90 | r0 = fcn_00011a90 ();
0x0004bae4 mov sb, r0 | sb = r0;
0x0004bae8 mov r5, r0 | r5 = r0;
| }
0x0004baec ldrb r3, [r7, r4] | r3 = *((r7 + r4));
0x0004baf0 add sl, r5, 0xff0 | sl = r5 + 0xff0;
0x0004baf4 cmp r3, 0x2f |
0x0004baf8 add sl, sl, 0xe | sl += 0xe;
| if (r3 != 0x2f) {
0x0004bafc addeq r4, r5, 1 | r4 = r5 + 1;
| }
| if (r3 != 0x2f) {
0x0004bb00 strbeq r3, [r5] | *(r5) = r3;
| }
| if (r3 != 0x2f) {
0x0004bb04 addeq r6, r6, 1 | r6++;
| }
| if (r3 != 0x2f) {
0x0004bb08 beq 0x4bb40 |
0x0004bb0c ldr r1, [pc, 0x220] | r1 = *(0x4bd30);
0x0004bb10 mov r0, r5 | r0 = r5;
0x0004bb14 bl 0x139ac | r0 = getcwd ();
0x0004bb18 cmp r0, 0 |
| if (r0 == 0) {
0x0004bb1c beq 0x4bc4c | goto label_11;
| }
0x0004bb20 mov r0, r5 | r0 = r5;
0x0004bb24 bl 0x3e3c0 | r0 = strlen ();
0x0004bb28 add r4, r5, r0 | r4 = r5 + r0;
0x0004bb2c ldrb r3, [r4, -1] | r3 = *((r4 - 1));
0x0004bb30 cmp r3, 0x2f |
| if (r3 == 0x2f) {
0x0004bb34 movne r3, 0x2f | r3 = 0x2f;
| }
| if (r3 == 0x2f) {
0x0004bb38 addne r4, r4, 1 | r4++;
| }
| if (r3 != 0x2f) {
0x0004bb3c strbne r3, [r5, r0] | *((r5 + r0)) = r3;
| goto label_12;
| }
| }
| label_12:
0x0004bb40 add r3, r5, 1 | r3 = r5 + 1;
0x0004bb44 mov r2, 0 | r2 = 0;
0x0004bb48 str r3, [sp, 0x10] | var_10h = r3;
| do {
| label_4:
0x0004bb4c ldrb r3, [r6] | r3 = *(r6);
0x0004bb50 cmp r3, 0 |
| if (r3 == 0) {
0x0004bb54 bne 0x4bb80 |
0x0004bb58 add r3, r5, 1 | r3 = r5 + 1;
0x0004bb5c cmp r4, r3 |
| if (r4 != r3) {
0x0004bb60 beq 0x4bb70 |
0x0004bb64 ldrb r3, [r4, -1] | r3 = *((r4 - 1));
0x0004bb68 cmp r3, 0x2f |
| if (r3 == 0x2f) {
0x0004bb6c subeq r4, r4, 1 | r4--;
| goto label_13;
| }
| }
| label_13:
0x0004bb70 mov r3, 0 | r3 = 0;
0x0004bb74 strb r3, [r4] | *(r4) = r3;
0x0004bb78 mov r0, r5 | r0 = r5;
0x0004bb7c b 0x4ba58 | goto label_1;
| }
0x0004bb80 cmp r3, 0x2f |
| if (r3 != 0x2f) {
0x0004bb84 bne 0x4bb90 | goto label_14;
| }
| label_2:
0x0004bb88 add r6, r6, 1 | r6 += var_1h;
0x0004bb8c b 0x4bb4c |
| } while (1);
| label_14:
0x0004bb90 cmp r3, 0x2e |
| if (r3 != 0x2e) {
0x0004bb94 beq 0x4bbe0 |
| label_3:
0x0004bb98 mov r1, r6 | r1 = r6;
| label_6:
0x0004bb9c mov r6, r1 | r6 = r1;
0x0004bba0 ldrb r3, [r1], 1 | r3 = *(r1);
| r1++;
0x0004bba4 subs fp, r3, 0x2f |
| if (fp == r3) {
0x0004bba8 movne fp, 1 |
| }
0x0004bbac cmp r3, 0 |
| if (r3 != 0) {
0x0004bbb0 moveq fp, 0 |
| }
0x0004bbb4 cmp fp, 0 |
| if (fp != 0) {
0x0004bbb8 bne 0x4bc30 | goto label_15;
| }
0x0004bbbc add r3, r2, 1 | r3 = r2 + 1;
0x0004bbc0 cmp r2, 0x20 |
0x0004bbc4 str r3, [sp, 4] | var_4h = r3;
| if (r2 <= 0x20) {
0x0004bbc8 ble 0x4bc60 | goto label_16;
| }
0x0004bbcc ldr r3, [pc, 0x164] | r3 = *(0x4bd34);
0x0004bbd0 bl 0x11934 | fcn_00011934 ();
0x0004bbd4 mov r2, 0x28 | r2 = 0x28;
0x0004bbd8 ldr r3, [pc, r3] | r3 = *(0x0004bbe0);
0x0004bbdc b 0x4bc48 | goto label_17;
| }
0x0004bbe0 ldrb r3, [r6, 1] | r3 = var_1h;
0x0004bbe4 cmp r3, 0x2f |
0x0004bbe8 cmpne r3, 0 | __asm ("cmpne r3, 0");
| if (r3 == 0x2f) {
0x0004bbec beq 0x4bb88 | goto label_2;
| }
0x0004bbf0 cmp r3, 0x2e |
| if (r3 != 0x2e) {
0x0004bbf4 bne 0x4bb98 | goto label_3;
| }
0x0004bbf8 ldrb r3, [r6, 2] | r3 = var_2h;
0x0004bbfc cmp r3, 0x2f |
0x0004bc00 cmpne r3, 0 | __asm ("cmpne r3, 0");
| if (r3 != 0x2f) {
0x0004bc04 bne 0x4bb98 | goto label_3;
| }
0x0004bc08 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004bc0c add r6, r6, 2 | r6 += var_2h;
0x0004bc10 cmp r4, r3 |
| if (r4 == r3) {
0x0004bc14 beq 0x4bb4c | goto label_4;
| }
0x0004bc18 sub r3, r4, 1 | r3 = r4 - 1;
| do {
0x0004bc1c mov r4, r3 | r4 = r3;
0x0004bc20 ldrb r1, [r3, -1]! | r1 = *((r3 -= 1));
0x0004bc24 cmp r1, 0x2f |
0x0004bc28 bne 0x4bc1c |
| } while (r1 != 0x2f);
0x0004bc2c b 0x4bb4c | goto label_4;
| label_15:
0x0004bc30 cmp r4, sl |
| if (r4 < sl) {
0x0004bc34 bls 0x4bc58 | goto label_18;
| }
| label_7:
0x0004bc38 ldr r3, [pc, 0xfc] | r3 = *(0x4bd38);
0x0004bc3c bl 0x11934 | fcn_00011934 ();
0x0004bc40 mov r2, 0x24 | r2 = 0x24;
0x0004bc44 ldr r3, [pc, r3] | r3 = *(0x0004bc4c);
| label_17:
0x0004bc48 str r2, [r0, r3] | *((r0 + r3)) = r2;
| do {
| label_11:
0x0004bc4c mov r0, sb | r0 = sb;
0x0004bc50 bl 0x120a8 | fcn_000120a8 ();
0x0004bc54 b 0x4ba54 | goto label_5;
| label_18:
0x0004bc58 strb r3, [r4], 1 | *(r4) = r3;
| r4++;
0x0004bc5c b 0x4bb9c | goto label_6;
| label_16:
0x0004bc60 mov r0, r6 | r0 = r6;
0x0004bc64 bl 0x3e3c0 | strlen ();
0x0004bc68 ldr r2, [pc, 0xd0] | r2 = *(0x4bd3c);
0x0004bc6c strb fp, [r4] | *(r4) = fp;
0x0004bc70 ldr r2, [pc, r2] | r2 = *(0x0004bc78);
0x0004bc74 mov r1, r7 | r1 = r7;
0x0004bc78 mov r8, r0 | r8 = r0;
0x0004bc7c bl 0x11934 | fcn_00011934 ();
0x0004bc80 ldr fp, [r0, r2] | fp = *((r0 + r2));
0x0004bc84 str r0, [sp, 0x14] | var_14h = r0;
0x0004bc88 ldr r2, [pc, 0xa4] | r2 = *(0x4bd30);
0x0004bc8c mov r0, r5 | r0 = r5;
0x0004bc90 bl 0x14404 | readlink ();
0x0004bc94 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0004bc98 subs r2, r0, 0 | r2 = r0 - 0;
| if (r2 >= r0) {
0x0004bc9c bge 0x4bcd8 | goto label_19;
| }
0x0004bca0 ldr r2, [pc, 0x9c] | r2 = *(0x4bd40);
0x0004bca4 ldr r2, [pc, r2] | r2 = *(0x0004bcac);
0x0004bca8 ldr r3, [r3, r2] | r3 = *((r3 + r2));
0x0004bcac cmp r3, 0x16 |
0x0004bcb0 bne 0x4bc4c |
| } while (r3 != 0x16);
| label_8:
0x0004bcb4 ldr r3, [pc, 0x8c] | r3 = *(0x4bd44);
0x0004bcb8 bl 0x11934 | fcn_00011934 ();
0x0004bcbc ldr r2, [sp, 4] | r2 = var_4h;
0x0004bcc0 ldr r3, [pc, r3] | r3 = *(0x0004bcc8);
0x0004bcc4 add r4, r4, 1 | r4++;
0x0004bcc8 str fp, [r0, r3] | *((r0 + r3)) = fp;
0x0004bccc mov r3, 0x2f | r3 = 0x2f;
0x0004bcd0 strb r3, [r4, -1] | *((r4 - 1)) = r3;
0x0004bcd4 b 0x4bb4c | goto label_4;
| label_19:
0x0004bcd8 ldr r1, [sp, 8] | r1 = var_8h;
0x0004bcdc add r3, r2, r8 | r3 = r2 + r8;
0x0004bce0 cmp r3, r1 |
| if (r3 > r1) {
0x0004bce4 bhi 0x4bc38 | goto label_7;
| }
0x0004bce8 ldrb r3, [r7] | r3 = *(r7);
0x0004bcec cmp r3, 0x2f |
| if (r3 != 0x2f) {
0x0004bcf0 moveq r4, r5 | r4 = r5;
| }
| if (r3 == 0x2f) {
0x0004bcf4 beq 0x4bd04 | goto label_20;
| }
| do {
0x0004bcf8 ldrb r3, [r4, -1]! | r3 = *((r4 -= 1));
0x0004bcfc cmp r3, 0x2f |
0x0004bd00 bne 0x4bcf8 |
| } while (r3 != 0x2f);
| label_20:
0x0004bd04 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004bd08 mov r1, r7 | r1 = r7;
0x0004bd0c sub r6, r3, r8 | r6 = r3 - r8;
0x0004bd10 sub r6, r6, r2 | r6 -= r2;
0x0004bd14 add r6, r7, r6 | r6 = r7 + r6;
0x0004bd18 mov r0, r6 | r0 = r6;
0x0004bd1c bl 0x3e3b0 | memmove ();
0x0004bd20 b 0x4bcb4 | goto label_8;
| }
; 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/libuClibc-1.0.31.so @ 0x319d8 */
| #include <stdint.h>
|
; (fcn) sym.sgetspent_r () | void sgetspent_r (int32_t arg_18h, uint32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000319d8 push {r4, r5, r6, r7, r8, lr} |
0x000319dc ldr r7, [sp, 0x18] | r7 = *(arg_18h);
0x000319e0 mov ip, 0 |
0x000319e4 cmp r3, 0xff |
0x000319e8 str ip, [r7] | *(r7) = ip;
0x000319ec bhi 0x31a0c |
| while (r0 >= r8) {
0x000319f0 ldr r2, [pc, 0x5c] | r2 = *(0x31a50);
0x000319f4 bl 0x11934 | fcn_00011934 ();
0x000319f8 mov r3, 0x22 | r3 = 0x22;
0x000319fc ldr r2, [pc, r2] | r2 = *(0x00031a04);
0x00031a00 str r3, [r0, r2] | *((r0 + r2)) = r3;
0x00031a04 mov r0, r3 | r0 = r3;
0x00031a08 pop {r4, r5, r6, r7, r8, pc} |
0x00031a0c cmp r0, r2 |
0x00031a10 mov r6, r0 | r6 = r0;
0x00031a14 mov r8, r3 | r8 = r3;
0x00031a18 mov r4, r2 | r4 = r2;
0x00031a1c mov r5, r1 | r5 = r1;
| if (r0 == r2) {
0x00031a20 beq 0x31a3c | goto label_0;
| }
0x00031a24 bl 0x3e3c0 | r0 = strlen ();
0x00031a28 cmp r0, r8 |
0x00031a2c bhs 0x319f0 |
| }
0x00031a30 mov r1, r6 | r1 = r6;
0x00031a34 mov r0, r4 | r0 = r4;
0x00031a38 bl 0x3e970 | strcpy (r0, r1)
| label_0:
0x00031a3c mov r1, r4 | r1 = r4;
0x00031a40 mov r0, r5 | r0 = r5;
0x00031a44 bl 0x33408 | r0 = fcn_00033408 (r0, r1);
0x00031a48 cmp r0, 0 |
| if (r0 != 0) {
0x00031a4c streq r5, [r7] | *(r7) = r5;
| }
0x00031a50 pop {r4, r5, r6, r7, r8, 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/libuClibc-1.0.31.so @ 0x2c944 */
| #include <stdint.h>
|
; (fcn) sym.timegm () | void timegm (int32_t arg1) {
| void * s;
| char * dest;
| int32_t var_34h;
| r0 = arg1;
0x0002c944 push {r4, r5, lr} |
0x0002c948 sub sp, sp, 0x34 |
0x0002c94c mov r4, sp | r4 = sp;
0x0002c950 mov r5, r0 | r5 = r0;
0x0002c954 mov r2, 0x30 | r2 = 0x30;
0x0002c958 mov r1, 0 | r1 = 0;
0x0002c95c mov r0, r4 | r0 = r4;
0x0002c960 bl 0x3e310 | memset (r0, r1, r2);
0x0002c964 ldr r1, [pc, 0x20] | r1 = *(0x2c988);
0x0002c968 add r0, sp, 0x10 | r0 += dest;
0x0002c96c add r1, pc, r1 | r1 = pc + r1;
0x0002c970 bl 0x3e970 | strcpy (r0, r1)
0x0002c974 mov r2, r4 | r2 = r4;
0x0002c978 mov r1, 1 | r1 = 1;
0x0002c97c mov r0, r5 | r0 = r5;
0x0002c980 bl 0x2c990 | fcn_0002c990 (r0, r1);
0x0002c984 add sp, sp, 0x34 |
0x0002c988 pop {r4, r5, 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/libuClibc-1.0.31.so @ 0x405b4 */
| #include <stdint.h>
|
; (fcn) sym.ttyname_r () | void ttyname_r (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| void * var_4h;
| char * path;
| char * var_0h_2;
| void * buf;
| int32_t var_48h;
| int32_t var_48h_2;
| int32_t var_80h;
| int32_t var_90h;
| int32_t var_a0h;
| int32_t var_a0h_2;
| int32_t var_dch;
| r0 = arg1;
| r1 = arg2;
0x000405b4 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000405b8 sub sp, sp, 0xdc |
0x000405bc mov r8, r1 | r8 = r1;
0x000405c0 add r1, sp, 0x28 | r1 += buf;
0x000405c4 mov r4, r0 | r4 = r0;
0x000405c8 str r2, [sp] | *(sp) = r2;
0x000405cc bl 0x1452c | r0 = fstat ();
0x000405d0 cmp r0, 0 |
| if (r0 >= 0) {
0x000405d4 bge 0x405f4 | goto label_5;
| }
0x000405d8 ldr r3, [pc, 0x13c] | r3 = *(0x40718);
0x000405dc bl 0x11934 | fcn_00011934 ();
0x000405e0 ldr r3, [pc, r3] | r3 = *(0x000405e8);
0x000405e4 ldr sb, [r0, r3] | sb = *((r0 + r3));
| do {
0x000405e8 mov r0, sb | r0 = sb;
0x000405ec add sp, sp, 0xdc |
0x000405f0 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x000405f4 mov r0, r4 | r0 = r4;
0x000405f8 bl 0x4016c | r0 = isatty ();
0x000405fc cmp r0, 0 |
| if (r0 != 0) {
0x00040600 bne 0x40704 | goto label_6;
| }
| label_0:
0x00040604 mov sb, 0x19 | sb = 0x19;
| label_1:
0x00040608 ldr r3, [pc, 0x110] | r3 = *(0x4071c);
0x0004060c bl 0x11934 | fcn_00011934 ();
0x00040610 ldr r3, [pc, r3] | r3 = *(0x00040618);
0x00040614 str sb, [r0, r3] | *((r0 + r3)) = sb;
0x00040618 b 0x405e8 |
| } while (1);
| do {
0x0004061c add r6, r4, 1 | r6 = r4 + 1;
0x00040620 mov r1, r6 | r1 = r6;
0x00040624 mov r0, r5 | r0 = r5;
0x00040628 bl 0x3e970 | strcpy (r0, r1)
0x0004062c mov r0, r6 | r0 = r6;
0x00040630 bl 0x185ec | r0 = opendir ();
0x00040634 subs r7, r0, 0 | r7 = r0 - 0;
0x00040638 rsbne fp, sl, 0x1e | __asm ("rsbne fp, sl, 0x1e");
| if (r7 == r0) {
0x0004063c addne sl, r5, sl | sl = r5 + sl;
| }
| if (r7 != r0) {
0x00040640 bne 0x406e8 | goto label_7;
| }
| label_3:
0x00040644 ldrb r4, [r4] | r4 = *(r4);
0x00040648 add r4, r4, 1 | r4++;
0x0004064c add r4, r6, r4 | r4 = r6 + r4;
| label_4:
0x00040650 ldrb sl, [r4] | sl = *(r4);
0x00040654 cmp sl, 0 |
0x00040658 bne 0x4061c |
| } while (sl != 0);
0x0004065c b 0x40604 | goto label_0;
| label_2:
0x00040660 add sb, r0, 0xb | sb = r0 + 0xb;
0x00040664 mov r0, sb | r0 = sb;
0x00040668 bl 0x3e3c0 | r0 = strlen ();
0x0004066c cmp r0, fp |
| if (r0 > fp) {
0x00040670 bhi 0x406e8 | goto label_7;
| }
0x00040674 mov r1, sb | r1 = sb;
0x00040678 mov r0, sl | r0 = sl;
0x0004067c bl 0x3e970 | strcpy (r0, r1)
0x00040680 ldr r1, [sp, 4] | r1 = var_4h;
0x00040684 mov r0, r5 | r0 = r5;
0x00040688 bl 0x17250 | lstat ();
0x0004068c subs sb, r0, 0 | sb -= path;
| if (sb != path) {
0x00040690 bne 0x406e8 | goto label_7;
| }
0x00040694 ldr r3, [sp, 0x90] | r3 = var_90h;
0x00040698 and r3, r3, 0xf000 | r3 &= 0xf000;
0x0004069c cmp r3, 0x2000 |
| if (r3 != 0x2000) {
0x000406a0 bne 0x406e8 | goto label_7;
| }
0x000406a4 ldrd r0, r1, [sp, 0x48] | __asm ("ldrd r0, r1, [var_48h]");
0x000406a8 ldrd r2, r3, [sp, 0xa0] | __asm ("ldrd r2, r3, [var_a0h]");
0x000406ac cmp r1, r3 |
0x000406b0 cmpeq r0, r2 | __asm ("cmpeq r0, r2");
| if (r1 != r3) {
0x000406b4 bne 0x406e8 | goto label_7;
| }
0x000406b8 mov r0, r7 | r0 = r7;
0x000406bc bl 0x183d4 | closedir ();
0x000406c0 mov r0, r5 | r0 = r5;
0x000406c4 bl 0x3e3c0 | strlen ();
0x000406c8 ldr r3, [sp] | r3 = *(sp);
0x000406cc cmp r0, r3 |
| if (r0 > r3) {
0x000406d0 movhi sb, 0x22 | sb = 0x22;
| goto label_8;
| }
| if (r0 > r3) {
| label_8:
0x000406d4 bhi 0x40608 | goto label_1;
| }
0x000406d8 mov r1, r5 | r1 = r5;
0x000406dc mov r0, r8 | r0 = r8;
0x000406e0 bl 0x3e970 | strcpy (r0, r1)
0x000406e4 b 0x40608 | goto label_1;
| label_7:
0x000406e8 mov r0, r7 | r0 = r7;
0x000406ec bl 0x18778 | r0 = readdir ();
0x000406f0 cmp r0, 0 |
| if (r0 != 0) {
0x000406f4 bne 0x40660 | goto label_2;
| }
0x000406f8 mov r0, r7 | r0 = r7;
0x000406fc bl 0x183d4 | closedir ();
0x00040700 b 0x40644 | goto label_3;
| label_6:
0x00040704 ldr r4, [pc, 0x18] | r4 = *(0x40720);
0x00040708 add r3, sp, 0x80 | r3 += var_80h;
0x0004070c add r4, pc, r4 | r4 = pc + r4;
0x00040710 add r5, sp, 8 | r5 += path;
0x00040714 str r3, [sp, 4] | var_4h = r3;
0x00040718 b 0x40650 | goto label_4;
| }
; 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/libuClibc-1.0.31.so @ 0x30fb4 */
| #include <stdint.h>
|
; (fcn) sym.wordexp () | void wordexp (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_38h;
| int32_t var_3ch;
| int32_t var_40h;
| int32_t var_44h;
| char * dest;
| int32_t var_4ch;
| int32_t var_50h;
| int32_t var_58h;
| int32_t var_5ch;
| int32_t var_60h;
| int32_t var_64h;
| char * src;
| int32_t var_88h;
| int32_t var_8ch;
| r0 = arg1;
| r1 = arg2;
0x00030fb4 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00030fb8 mov fp, r2 |
0x00030fbc mov r7, r0 | r7 = r0;
0x00030fc0 mov r5, r1 | r5 = r1;
0x00030fc4 ldm r1, {r0, r1, r2} | r0 = *(r1);
| r1 = *((r1 + 4));
| r2 = *((r1 + 8));
0x00030fc8 sub sp, sp, 0x8c |
0x00030fcc mov r4, 0 | r4 = 0;
0x00030fd0 add r3, sp, 0x4c | r3 += var_4ch;
0x00030fd4 tst fp, 8 |
0x00030fd8 str r4, [sp, 0x40] | var_40h = r4;
0x00030fdc str r4, [sp, 0x3c] | var_3ch = r4;
0x00030fe0 str r4, [sp, 0x44] | var_44h = r4;
0x00030fe4 stm r3, {r0, r1, r2} | *(r3) = r0;
| *((r3 + 4)) = r1;
| *((r3 + 8)) = r2;
| if ((fp & 8) != 0) {
0x00030fe8 streq r1, [sp, 0x24] | var_24h = r1;
| }
| if ((fp & 8) != 0) {
0x00030fec beq 0x30ffc |
0x00030ff0 mov r0, r5 | r0 = r5;
0x00030ff4 bl 0x30f68 | wordfree ();
0x00030ff8 str r4, [sp, 0x24] | var_24h = r4;
| }
0x00030ffc ands r3, fp, 2 | r3 = fp & 2;
0x00031000 str r3, [sp, 0x2c] | var_2ch = r3;
| if (r3 != fp) {
0x00031004 bne 0x31058 | goto label_22;
| }
0x00031008 tst fp, 1 |
0x0003100c str r3, [r5] | *(r5) = r3;
| if ((fp & 1) == 0) {
0x00031010 beq 0x31038 | goto label_23;
| }
0x00031014 ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x00031018 mov r1, 4 | r1 = 4;
0x0003101c add r0, r0, 1 | r0++;
0x00031020 bl 0x11be0 | r0 = fcn_00011be0 ();
0x00031024 cmp r0, 0 |
0x00031028 str r0, [r5, 4] | *((r5 + 4)) = r0;
| if (r0 != 0) {
0x0003102c bne 0x31058 | goto label_22;
| }
| do {
| label_1:
0x00031030 mov r4, 1 | r4 = 1;
0x00031034 b 0x3138c | goto label_7;
| label_23:
0x00031038 mov r1, 4 | r1 = 4;
0x0003103c mov r0, 1 | r0 = 1;
0x00031040 bl 0x11be0 | r0 = fcn_00011be0 ();
0x00031044 cmp r0, 0 |
0x00031048 str r0, [r5, 4] | *((r5 + 4)) = r0;
0x0003104c beq 0x31030 |
| } while (r0 == 0);
0x00031050 ands r3, fp, 2 | r3 = fp & 2;
0x00031054 str r3, [r5, 8] | *((r5 + 8)) = r3;
| label_22:
0x00031058 ldr r0, [pc, 0x770] | r0 = *(0x317cc);
0x0003105c add r0, pc, r0 | r0 = pc + r0;
0x00031060 bl 0x4b980 | getenv (r0);
0x00031064 add r3, sp, 0x48 | r3 += dest;
0x00031068 str r3, [sp, 0x1c] | var_1ch = r3;
0x0003106c subs r8, r0, 0 | r8 = r0 - 0;
| if (r8 != r0) {
0x00031070 bne 0x310d8 | goto label_24;
| }
0x00031074 ldr r1, [pc, 0x758] | r1 = *(0x317d0);
0x00031078 mov r0, r3 | r0 = r3;
0x0003107c add r1, pc, r1 | r1 = pc + r1;
0x00031080 bl 0x3e970 | r0 = strcpy (r0, r1)
0x00031084 mov r8, r0 | r8 = r0;
| do {
0x00031088 mov r3, 0 | r3 = 0;
0x0003108c str r3, [sp, 0x38] | var_38h = r3;
0x00031090 ldr r3, [pc, 0x740] | r3 = *(0x317d4);
0x00031094 add r3, pc, r3 | r3 = pc + r3;
0x00031098 str r3, [sp, 0x30] | var_30h = r3;
0x0003109c ldr r3, [pc, 0x738] | r3 = *(0x317d8);
0x000310a0 add r3, pc, r3 | r3 = pc + r3;
0x000310a4 str r3, [sp, 0x34] | var_34h = r3;
| label_4:
0x000310a8 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000310ac ldrb r6, [r7, r3] | r6 = *((r7 + r3));
0x000310b0 cmp r6, 0 |
| if (r6 != 0) {
0x000310b4 bne 0x31134 | goto label_25;
| }
0x000310b8 ldr r1, [sp, 0x44] | r1 = var_44h;
0x000310bc cmp r1, 0 |
| if (r1 != 0) {
0x000310c0 moveq r4, r1 | r4 = r1;
| }
| if (r1 == 0) {
0x000310c4 beq 0x317c4 | goto label_26;
| }
0x000310c8 mov r0, r5 | r0 = r5;
0x000310cc bl 0x2ec60 | r0 = fcn_0002ec60 (r0, r1);
0x000310d0 mov r4, r0 | r4 = r0;
0x000310d4 b 0x317c4 | goto label_26;
| label_24:
0x000310d8 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000310dc mov r3, 0 | r3 = 0;
0x000310e0 sub r0, r8, 1 | r0 = r8 - 1;
0x000310e4 strb r3, [sp, 0x48] | dest = r3;
| label_0:
0x000310e8 ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x000310ec cmp r3, 0 |
| if (r3 != 0) {
0x000310f0 strbeq r3, [r2] | *(r2) = r3;
| }
0x000310f4 beq 0x31088 |
| } while (r3 == 0);
0x000310f8 sub r1, r3, 9 | r1 = r3 - 9;
0x000310fc cmp r3, 0x20 |
0x00031100 cmpne r1, 1 | __asm ("cmpne r1, 1");
| if (r3 > 0x20) {
0x00031104 bhi 0x310e8 | goto label_0;
| }
0x00031108 ldr r1, [sp, 0x1c] | r1 = var_1ch;
| do {
0x0003110c cmp r2, r1 |
| if (r2 < r1) {
0x00031110 bls 0x31128 | goto label_27;
| }
0x00031114 ldrb ip, [r1], 1 | ip = *(r1);
| r1++;
0x00031118 cmp ip, 0 |
0x0003111c cmpne ip, r3 | __asm ("cmpne ip, r3");
0x00031120 bne 0x3110c |
| } while (ip != 0);
0x00031124 b 0x310e8 | goto label_0;
| if (ip != 0) {
| label_27:
0x00031128 strbeq r3, [r2] | *(r2) = r3;
| }
| if (ip != 0) {
0x0003112c addeq r2, r2, 1 | r2++;
| }
0x00031130 b 0x310e8 | goto label_0;
| label_25:
0x00031134 cmp r6, 0x3f |
| if (r6 == 0x3f) {
0x00031138 beq 0x311b8 | goto label_28;
| }
| if (r6 > 0x3f) {
0x0003113c bhi 0x312c4 | goto label_29;
| }
0x00031140 cmp r6, 0x24 |
| if (r6 == 0x24) {
0x00031144 beq 0x31344 | goto label_30;
| }
| if (r6 > 0x24) {
0x00031148 bhi 0x311a8 | goto label_31;
| }
0x0003114c cmp r6, 0x22 |
| if (r6 == 0x22) {
0x00031150 beq 0x31404 | goto label_32;
| }
| do {
| label_3:
0x00031154 mov r1, r6 | r1 = r6;
0x00031158 ldr r0, [sp, 0x34] | r0 = var_34h;
0x0003115c bl 0x3ef3c | index ();
0x00031160 ldr r4, [sp, 0x44] | r4 = var_44h;
0x00031164 cmp r0, 0 |
| if (r0 != 0) {
0x00031168 bne 0x3176c | goto label_33;
| }
0x0003116c ldr r0, [pc, 0x66c] | r0 = *(0x317dc);
0x00031170 mov r1, r6 | r1 = r6;
0x00031174 add r0, pc, r0 | r0 = pc + r0;
0x00031178 bl 0x3ef3c | r0 = index ();
0x0003117c cmp r0, 0 |
| if (r0 != 0) {
0x00031180 bne 0x317a0 | goto label_34;
| }
0x00031184 mov r3, r6 | r3 = r6;
0x00031188 add r2, sp, 0x40 | r2 += var_40h;
0x0003118c add r1, sp, 0x3c | r1 += var_3ch;
0x00031190 mov r0, r4 | r0 = r4;
0x00031194 bl 0x2e9cc | r0 = fcn_0002e9cc (r0, r1);
0x00031198 cmp r0, 0 |
0x0003119c str r0, [sp, 0x44] | var_44h = r0;
| if (r0 != 0) {
0x000311a0 bne 0x31334 | goto label_21;
| }
0x000311a4 b 0x31030 | goto label_1;
| label_31:
0x000311a8 cmp r6, 0x27 |
| if (r6 == 0x27) {
0x000311ac beq 0x31520 | goto label_35;
| }
0x000311b0 cmp r6, 0x2a |
| label_2:
0x000311b4 bne 0x31154 |
| } while (r6 != 0x2a);
| label_28:
0x000311b8 mov r6, 0 | r6 = 0;
0x000311bc add r3, sp, 0x3c | r3 += var_3ch;
0x000311c0 mov r4, 1 | r4 = 1;
0x000311c4 add sl, sp, 0x40 | sl += var_40h;
0x000311c8 str r6, [sp, 0x58] | var_58h = r6;
0x000311cc str r6, [sp, 0x5c] | var_5ch = r6;
0x000311d0 str r6, [sp, 0x60] | var_60h = r6;
0x000311d4 str r3, [sp, 0x20] | var_20h = r3;
| label_13:
0x000311d8 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000311dc ldrb sb, [r7, r3] | sb = *((r7 + r3));
0x000311e0 str r3, [sp, 0x28] | var_28h = r3;
0x000311e4 cmp sb, 0 |
| if (sb != 0) {
0x000311e8 bne 0x31574 | goto label_36;
| }
| label_12:
0x000311ec ldr r3, [sp, 0x28] | r3 = var_28h;
0x000311f0 ldr r1, [sp, 0x44] | r1 = var_44h;
0x000311f4 sub sb, r3, 1 | sb = r3 - 1;
0x000311f8 add r0, sp, 0x58 | r0 += var_58h;
0x000311fc str sb, [sp, 0x38] | var_38h = sb;
0x00031200 bl 0x2ec60 | fcn_0002ec60 (r0, r1);
0x00031204 mov r6, 0 | r6 = 0;
0x00031208 add r3, sp, 0x64 | r3 += var_64h;
0x0003120c str r6, [sp, 0x40] | var_40h = r6;
0x00031210 str r6, [sp, 0x3c] | var_3ch = r6;
0x00031214 str r6, [sp, 0x44] | var_44h = r6;
0x00031218 str r3, [sp, 0x20] | var_20h = r3;
0x0003121c mov r4, r0 | r4 = r0;
| do {
0x00031220 cmp r4, 0 |
| if (r4 != 0) {
0x00031224 bne 0x31694 | goto label_37;
| }
0x00031228 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0003122c cmp r6, r3 |
| if (r6 >= r3) {
0x00031230 bhs 0x31694 | goto label_37;
| }
0x00031234 ldr r0, [sp, 0x5c] | r0 = var_5ch;
0x00031238 mov r2, r4 | r2 = r4;
0x0003123c ldr r3, [sp, 0x20] | r3 = var_20h;
0x00031240 mov r1, 0x10 | r1 = 0x10;
0x00031244 ldr r0, [r0, r6, lsl 2] | offset_0 = r6 << 2;
| r0 = *((r0 + offset_0));
0x00031248 bl 0x1c668 | r0 = glob ();
0x0003124c subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x00031250 bne 0x3174c | goto label_38;
| }
0x00031254 cmp r8, 0 |
0x00031258 ldr r0, [sp, 0x44] | r0 = var_44h;
| if (r8 == 0) {
0x0003125c beq 0x316f8 | goto label_39;
| }
0x00031260 ldrb r3, [r8] | r3 = *(r8);
0x00031264 cmp r3, 0 |
| if (r3 != 0) {
0x00031268 bne 0x316f8 | goto label_39;
| }
0x0003126c ldr r3, [sp, 0x68] | r3 = src;
0x00031270 add r4, sp, 0x40 | r4 += var_40h;
0x00031274 add sb, sp, 0x3c | sb += var_3ch;
0x00031278 ldr r3, [r3] | r3 = *(r3);
0x0003127c mov r2, r4 | r2 = r4;
0x00031280 mov r1, sb | r1 = sb;
0x00031284 bl 0x2ec24 | fcn_0002ec24 (r0, r1);
0x00031288 mov sl, 1 | sl = 1;
0x0003128c str r0, [sp, 0x44] | var_44h = r0;
| label_18:
0x00031290 ldr r3, [sp, 0x64] | r3 = var_64h;
0x00031294 cmp sl, r3 |
| if (sl < r3) {
0x00031298 bhs 0x312a8 |
0x0003129c ldr r0, [sp, 0x44] | r0 = var_44h;
0x000312a0 cmp r0, 0 |
| if (r0 != 0) {
0x000312a4 bne 0x316bc | goto label_40;
| }
| }
0x000312a8 ldr r0, [sp, 0x20] | r0 = var_20h;
0x000312ac bl 0x1c610 | globfree ();
0x000312b0 ldr r4, [sp, 0x44] | r4 = var_44h;
0x000312b4 clz r4, r4 | r4 &= r4;
0x000312b8 lsr r4, r4, 5 | r4 >>= 5;
| label_19:
0x000312bc add r6, r6, 1 | r6++;
0x000312c0 b 0x31220 |
| } while (1);
| label_29:
0x000312c4 cmp r6, 0x5c |
| if (r6 == 0x5c) {
0x000312c8 beq 0x31310 | goto label_41;
| }
| if (r6 <= 0x5c) {
0x000312cc bhi 0x312d8 |
0x000312d0 cmp r6, 0x5b |
0x000312d4 b 0x311b4 | goto label_2;
| }
0x000312d8 cmp r6, 0x60 |
| if (r6 == 0x60) {
0x000312dc beq 0x31380 | goto label_42;
| }
0x000312e0 cmp r6, 0x7e |
| if (r6 != 0x7e) {
0x000312e4 bne 0x31154 | goto label_3;
| }
0x000312e8 ldr r3, [r5] | r3 = *(r5);
0x000312ec add r2, sp, 0x40 | r2 += var_40h;
0x000312f0 str r3, [sp, 4] | var_4h = r3;
0x000312f4 add r3, sp, 0x38 | r3 += var_38h;
0x000312f8 str r3, [sp] | *(sp) = r3;
0x000312fc add r1, sp, 0x3c | r1 += var_3ch;
0x00031300 mov r3, r7 | r3 = r7;
0x00031304 add r0, sp, 0x44 | r0 += var_44h;
0x00031308 bl 0x2f1b8 | fcn_0002f1b8 (r0, r1, r2, r3);
0x0003130c b 0x3132c | goto label_5;
| label_41:
0x00031310 add r3, sp, 0x38 | r3 += var_38h;
0x00031314 str r3, [sp] | *(sp) = r3;
0x00031318 add r2, sp, 0x40 | r2 += var_40h;
0x0003131c mov r3, r7 | r3 = r7;
0x00031320 add r1, sp, 0x3c | r1 += var_3ch;
0x00031324 add r0, sp, 0x44 | r0 += var_44h;
0x00031328 bl 0x2ea44 | fcn_0002ea44 (r0, r1, r2);
| do {
| label_5:
0x0003132c subs r4, r0, 0 | r4 -= var_44h;
| if (r4 != var_44h) {
| label_17:
0x00031330 bne 0x3138c | goto label_7;
| }
| label_21:
0x00031334 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00031338 add r3, r3, 1 | r3++;
0x0003133c str r3, [sp, 0x38] | var_38h = r3;
0x00031340 b 0x310a8 | goto label_4;
| label_30:
0x00031344 mov r3, 0 | r3 = 0;
0x00031348 str r3, [sp, 0x14] | var_14h = r3;
0x0003134c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00031350 str r8, [sp, 0xc] | var_ch = r8;
0x00031354 str r3, [sp, 0x10] | var_10h = r3;
0x00031358 add r3, sp, 0x38 | r3 += var_38h;
0x0003135c str r3, [sp] | *(sp) = r3;
0x00031360 str r5, [sp, 8] | var_8h = r5;
0x00031364 str fp, [sp, 4] | var_4h = fp;
0x00031368 mov r3, r7 | r3 = r7;
0x0003136c add r2, sp, 0x40 | r2 += var_40h;
0x00031370 add r1, sp, 0x3c | r1 += var_3ch;
0x00031374 add r0, sp, 0x44 | r0 += var_44h;
0x00031378 bl 0x2fad0 | fcn_0002fad0 (r0, r1, r2, r3, r4, r5, r6);
0x0003137c b 0x3132c |
| } while (1);
| label_42:
0x00031380 tst fp, 4 |
| if ((fp & 4) == 0) {
0x00031384 beq 0x313c8 | goto label_43;
| }
| label_6:
0x00031388 mov r4, 4 | r4 = 4;
| do {
| label_7:
0x0003138c ldr r0, [sp, 0x44] | r0 = var_44h;
0x00031390 bl 0x120a8 | fcn_000120a8 ();
0x00031394 cmp r4, 1 |
| if (r4 == 1) {
0x00031398 beq 0x317c4 | goto label_26;
| }
0x0003139c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000313a0 cmp r3, 0 |
| if (r3 == 0) {
0x000313a4 bne 0x313b0 |
0x000313a8 mov r0, r5 | r0 = r5;
0x000313ac bl 0x30f68 | wordfree ();
| }
0x000313b0 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000313b4 str r3, [sp, 0x50] | var_50h = r3;
0x000313b8 add r3, sp, 0x4c | r3 += var_4ch;
0x000313bc ldm r3, {r0, r1, r2} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
0x000313c0 stm r5, {r0, r1, r2} | *(r5) = r0;
| *((r5 + 4)) = r1;
| *((r5 + 8)) = r2;
0x000313c4 b 0x317c4 | goto label_26;
| label_43:
0x000313c8 add r3, r3, 1 | r3++;
0x000313cc str r3, [sp, 0x38] | var_38h = r3;
0x000313d0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000313d4 str r8, [sp, 0xc] | var_ch = r8;
0x000313d8 str r3, [sp, 0x10] | var_10h = r3;
0x000313dc add r3, sp, 0x38 | r3 += var_38h;
0x000313e0 str r3, [sp] | *(sp) = r3;
0x000313e4 str r5, [sp, 8] | var_8h = r5;
0x000313e8 str fp, [sp, 4] | var_4h = fp;
0x000313ec mov r3, r7 | r3 = r7;
0x000313f0 add r2, sp, 0x40 | r2 += var_40h;
0x000313f4 add r1, sp, 0x3c | r1 += var_3ch;
0x000313f8 add r0, sp, 0x44 | r0 += var_44h;
0x000313fc bl 0x2f060 | fcn_0002f060 (r0, r1, r2, r3, r4, r5, r6);
0x00031400 b 0x3132c | goto label_5;
| label_32:
0x00031404 add r3, r3, 1 | r3++;
0x00031408 add r6, sp, 0x40 | r6 += var_40h;
0x0003140c add sb, sp, 0x3c | sb += var_3ch;
0x00031410 add sl, sp, 0x44 | sl += var_44h;
0x00031414 str r3, [sp, 0x38] | var_38h = r3;
| label_8:
0x00031418 ldr r2, [sp, 0x38] | r2 = var_38h;
0x0003141c ldrb r3, [r7, r2] | r3 = *((r7 + r2));
0x00031420 cmp r3, 0 |
| if (r3 != 0) {
0x00031424 bne 0x31430 | goto label_44;
| }
| label_10:
0x00031428 mov r4, 5 | r4 = 5;
0x0003142c b 0x3138c |
| } while (1);
| label_44:
0x00031430 cmp r3, 0x24 |
| if (r3 == 0x24) {
0x00031434 beq 0x314b0 | goto label_45;
| }
| if (r3 > 0x24) {
0x00031438 bhi 0x31464 | goto label_46;
| }
0x0003143c cmp r3, 0x22 |
| if (r3 == 0x22) {
0x00031440 beq 0x317a8 | goto label_47;
| }
| do {
0x00031444 mov r2, r6 | r2 = r6;
0x00031448 mov r1, sb | r1 = sb;
0x0003144c ldr r0, [sp, 0x44] | r0 = var_44h;
0x00031450 bl 0x2e9cc | r0 = fcn_0002e9cc (r0, r1);
0x00031454 cmp r0, 0 |
0x00031458 str r0, [sp, 0x44] | var_44h = r0;
| if (r0 != 0) {
0x0003145c bne 0x314f0 | goto label_48;
| }
0x00031460 b 0x31030 | goto label_1;
| label_46:
0x00031464 cmp r3, 0x5c |
| if (r3 == 0x5c) {
0x00031468 beq 0x31500 | goto label_49;
| }
0x0003146c cmp r3, 0x60 |
0x00031470 bne 0x31444 |
| } while (r3 != 0x60);
0x00031474 ands r1, fp, 4 | r1 = fp & 4;
| if (r1 != fp) {
0x00031478 bne 0x31388 | goto label_6;
| }
0x0003147c add r3, sp, 0x88 | r3 += var_88h;
0x00031480 add r2, r2, 1 | r2++;
0x00031484 str r2, [r3, -0x50]! | *((r3 -= 0x50)) = r2;
0x00031488 mov r0, sl | r0 = sl;
0x0003148c str r1, [sp, 0x10] | var_10h = r1;
0x00031490 str r1, [sp, 0xc] | var_ch = r1;
0x00031494 str r1, [sp, 8] | var_8h = r1;
0x00031498 stm sp, {r3, fp} | *(sp) = r3;
| *((sp + 4)) = fp;
0x0003149c mov r2, r6 | r2 = r6;
0x000314a0 mov r3, r7 | r3 = r7;
0x000314a4 mov r1, sb | r1 = sb;
0x000314a8 bl 0x2f060 | fcn_0002f060 (r0, r1, r2, r3, r4, r5, r6);
0x000314ac b 0x314e8 | goto label_9;
| label_45:
0x000314b0 mov r3, 1 | r3 = 1;
0x000314b4 str r3, [sp, 0x14] | var_14h = r3;
0x000314b8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000314bc str r8, [sp, 0xc] | var_ch = r8;
0x000314c0 str r3, [sp, 0x10] | var_10h = r3;
0x000314c4 add r3, sp, 0x38 | r3 += var_38h;
0x000314c8 str r3, [sp] | *(sp) = r3;
0x000314cc str r5, [sp, 8] | var_8h = r5;
0x000314d0 str fp, [sp, 4] | var_4h = fp;
0x000314d4 mov r3, r7 | r3 = r7;
0x000314d8 mov r2, r6 | r2 = r6;
0x000314dc mov r1, sb | r1 = sb;
0x000314e0 mov r0, sl | r0 = sl;
0x000314e4 bl 0x2fad0 | fcn_0002fad0 (r0, r1, r2, r3, r4, r5, r6);
| label_9:
0x000314e8 subs r4, r0, 0 | r4 -= var_44h;
| if (r4 != var_44h) {
0x000314ec bne 0x3138c | goto label_7;
| }
| label_48:
0x000314f0 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000314f4 add r3, r3, 1 | r3++;
0x000314f8 str r3, [sp, 0x38] | var_38h = r3;
0x000314fc b 0x31418 | goto label_8;
| label_49:
0x00031500 add r3, sp, 0x38 | r3 += var_38h;
0x00031504 str r3, [sp] | *(sp) = r3;
0x00031508 mov r2, r6 | r2 = r6;
0x0003150c mov r3, r7 | r3 = r7;
0x00031510 mov r1, sb | r1 = sb;
0x00031514 mov r0, sl | r0 = sl;
0x00031518 bl 0x2eaa8 | fcn_0002eaa8 (r0, r1, r2);
0x0003151c b 0x314e8 | goto label_9;
| label_35:
0x00031520 add r3, r3, 1 | r3++;
0x00031524 add r4, sp, 0x40 | r4 += var_40h;
0x00031528 add r6, sp, 0x3c | r6 += var_3ch;
0x0003152c str r3, [sp, 0x38] | var_38h = r3;
| label_11:
0x00031530 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00031534 ldrb r3, [r7, r3] | r3 = *((r7 + r3));
0x00031538 cmp r3, 0 |
| if (r3 == 0) {
0x0003153c beq 0x31428 | goto label_10;
| }
0x00031540 cmp r3, 0x27 |
| if (r3 == 0x27) {
0x00031544 beq 0x317a8 | goto label_47;
| }
0x00031548 mov r2, r4 | r2 = r4;
0x0003154c mov r1, r6 | r1 = r6;
0x00031550 ldr r0, [sp, 0x44] | r0 = var_44h;
0x00031554 bl 0x2e9cc | r0 = fcn_0002e9cc (r0, r1);
0x00031558 cmp r0, 0 |
0x0003155c str r0, [sp, 0x44] | var_44h = r0;
| if (r0 == 0) {
0x00031560 beq 0x31030 | goto label_1;
| }
0x00031564 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00031568 add r3, r3, 1 | r3++;
0x0003156c str r3, [sp, 0x38] | var_38h = r3;
0x00031570 b 0x31530 | goto label_11;
| label_36:
0x00031574 cmp r8, 0 |
| if (r8 == 0) {
0x00031578 movne r0, r8 | r0 = r8;
| }
| if (r8 != 0) {
0x0003157c ldreq r0, [sp, 0x30] | r0 = var_30h;
| }
0x00031580 mov r1, sb | r1 = sb;
0x00031584 bl 0x3ef3c | r0 = index ();
0x00031588 cmp r0, 0 |
| if (r0 != 0) {
0x0003158c bne 0x311ec | goto label_12;
| }
0x00031590 cmp sb, 0x27 |
| if (sb != 0x27) {
0x00031594 bne 0x3161c | goto label_50;
| }
0x00031598 cmp r6, 0 |
| if (r6 == 0) {
0x0003159c beq 0x316a4 | goto label_51;
| }
0x000315a0 cmp r6, 1 |
| if (r6 == 1) {
| label_14:
0x000315a4 beq 0x316b4 | goto label_52;
| }
| do {
0x000315a8 subs r2, r6, 1 | r2 = r6 - 1;
| if (r2 == r6) {
0x000315ac movne r2, 1 | r2 = 1;
| }
0x000315b0 cmp sb, 0x24 |
| if (sb == 0x24) {
0x000315b4 movne r2, 0 | r2 = 0;
| }
0x000315b8 cmp r2, 0 |
| if (r2 == 0) {
0x000315bc beq 0x31634 | goto label_53;
| }
0x000315c0 sub r3, r6, 2 | r3 = r6 - 2;
0x000315c4 clz r3, r3 | r3 &= r3;
0x000315c8 lsr r3, r3, 5 | r3 >>= 5;
0x000315cc str r3, [sp, 0x14] | var_14h = r3;
0x000315d0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000315d4 str r8, [sp, 0xc] | var_ch = r8;
0x000315d8 str r3, [sp, 0x10] | var_10h = r3;
0x000315dc add r3, sp, 0x58 | r3 += var_58h;
0x000315e0 str r3, [sp, 8] | var_8h = r3;
0x000315e4 add r3, sp, 0x38 | r3 += var_38h;
0x000315e8 str r3, [sp] | *(sp) = r3;
0x000315ec str fp, [sp, 4] | var_4h = fp;
0x000315f0 mov r3, r7 | r3 = r7;
0x000315f4 mov r2, sl | r2 = sl;
0x000315f8 ldr r1, [sp, 0x20] | r1 = var_20h;
0x000315fc add r0, sp, 0x44 | r0 += var_44h;
0x00031600 bl 0x2fad0 | fcn_0002fad0 (r0, r1, r2, r3, r4, r5, r6);
0x00031604 subs r4, r0, 0 | r4 -= var_44h;
| if (r4 != var_44h) {
| label_15:
0x00031608 bne 0x31694 | goto label_37;
| }
| label_16:
0x0003160c ldr r3, [sp, 0x38] | r3 = var_38h;
0x00031610 add r3, r3, 1 | r3++;
0x00031614 str r3, [sp, 0x38] | var_38h = r3;
0x00031618 b 0x311d8 | goto label_13;
| label_50:
0x0003161c cmp sb, 0x22 |
0x00031620 bne 0x315a8 |
| } while (sb != 0x22);
0x00031624 cmp r6, 0 |
| if (r6 == 0) {
0x00031628 beq 0x316ac | goto label_54;
| }
0x0003162c cmp r6, 2 |
0x00031630 b 0x315a4 | goto label_14;
| label_53:
0x00031634 cmp sb, 0x5c |
| if (sb != 0x5c) {
0x00031638 bne 0x31674 | goto label_55;
| }
0x0003163c add r3, sp, 0x38 | r3 += var_38h;
0x00031640 cmp r6, 0 |
0x00031644 str r3, [sp] | *(sp) = r3;
0x00031648 add r0, sp, 0x44 | r0 += var_44h;
0x0003164c mov r3, r7 | r3 = r7;
0x00031650 mov r2, sl | r2 = sl;
0x00031654 ldr r1, [sp, 0x20] | r1 = var_20h;
| if (r6 == 0) {
0x00031658 beq 0x3166c | goto label_56;
| }
0x0003165c bl 0x2eaa8 | r0 = fcn_0002eaa8 (r0, r1, r2);
| do {
0x00031660 mov r4, r0 | r4 = r0;
0x00031664 cmp r0, 0 |
0x00031668 b 0x31608 | goto label_15;
| label_56:
0x0003166c bl 0x2ea44 | fcn_0002ea44 (r0, r1, r2);
0x00031670 b 0x31660 |
| } while (1);
| label_55:
0x00031674 mov r3, sb | r3 = sb;
0x00031678 mov r2, sl | r2 = sl;
0x0003167c ldr r1, [sp, 0x20] | r1 = var_20h;
0x00031680 ldr r0, [sp, 0x44] | r0 = var_44h;
0x00031684 bl 0x2e9cc | r0 = fcn_0002e9cc (r0, r1);
0x00031688 cmp r0, 0 |
0x0003168c str r0, [sp, 0x44] | var_44h = r0;
| if (r0 != 0) {
0x00031690 bne 0x3160c | goto label_16;
| }
| label_37:
0x00031694 add r0, sp, 0x58 | r0 += var_58h;
0x00031698 bl 0x30f68 | wordfree ();
0x0003169c cmp r4, 0 |
0x000316a0 b 0x31330 | goto label_17;
| label_51:
0x000316a4 mov r6, 1 | r6 = 1;
0x000316a8 b 0x3160c | goto label_16;
| label_54:
0x000316ac mov r6, 2 | r6 = 2;
0x000316b0 b 0x3160c | goto label_16;
| label_52:
0x000316b4 mov r6, 0 | r6 = 0;
0x000316b8 b 0x3160c | goto label_16;
| label_40:
0x000316bc mov r3, 0x20 | r3 = 0x20;
0x000316c0 mov r2, r4 | r2 = r4;
0x000316c4 mov r1, sb | r1 = sb;
0x000316c8 bl 0x2e9cc | r0 = fcn_0002e9cc (r0, r1);
0x000316cc cmp r0, 0 |
0x000316d0 str r0, [sp, 0x44] | var_44h = r0;
| if (r0 != 0) {
0x000316d4 beq 0x316f0 |
0x000316d8 ldr r3, [sp, 0x68] | r3 = src;
0x000316dc mov r2, r4 | r2 = r4;
0x000316e0 ldr r3, [r3, sl, lsl 2] | offset_1 = sl << 2;
| r3 = *((r3 + offset_1));
0x000316e4 mov r1, sb | r1 = sb;
0x000316e8 bl 0x2ec24 | fcn_0002ec24 (r0, r1);
0x000316ec str r0, [sp, 0x44] | var_44h = r0;
| }
0x000316f0 add sl, sl, 1 | sl++;
0x000316f4 b 0x31290 | goto label_18;
| label_39:
0x000316f8 cmp r0, 0 |
| if (r0 != 0) {
0x000316fc beq 0x31714 |
0x00031700 bl 0x120a8 | fcn_000120a8 ();
0x00031704 mov r3, 0 | r3 = 0;
0x00031708 str r3, [sp, 0x40] | var_40h = r3;
0x0003170c str r3, [sp, 0x3c] | var_3ch = r3;
0x00031710 str r3, [sp, 0x44] | var_44h = r3;
| }
0x00031714 mov sb, 0 | sb = 0;
| label_20:
0x00031718 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0003171c cmp sb, r3 |
| if (sb > r3) {
0x00031720 blo 0x31730 |
0x00031724 ldr r0, [sp, 0x20] | r0 = var_20h;
0x00031728 bl 0x1c610 | globfree ();
0x0003172c b 0x312bc | goto label_19;
| }
0x00031730 ldr r3, [sp, 0x68] | r3 = src;
0x00031734 ldr r0, [r3, sb, lsl 2] | offset_2 = sb << 2;
| r0 = *((r3 + offset_2));
0x00031738 bl 0x3f894 | r0 = strdup ();
0x0003173c subs r1, r0, 0 | r1 = r0 - 0;
0x00031740 bne 0x31754 |
| while (r0 != 0) {
0x00031744 ldr r0, [sp, 0x20] | r0 = var_20h;
0x00031748 bl 0x1c610 | globfree ();
| label_38:
0x0003174c mov r4, 1 | r4 = 1;
0x00031750 b 0x312bc | goto label_19;
0x00031754 mov r0, r5 | r0 = r5;
0x00031758 bl 0x2ec60 | r0 = fcn_0002ec60 (r0, r1);
0x0003175c cmp r0, 0 |
0x00031760 bne 0x31744 |
| }
0x00031764 add sb, sb, 1 | sb++;
0x00031768 b 0x31718 | goto label_20;
| label_33:
0x0003176c cmp r4, 0 |
0x00031770 bne 0x31788 |
| while (r4 == r0) {
0x00031774 mov r3, 0 | r3 = 0;
0x00031778 str r3, [sp, 0x40] | var_40h = r3;
0x0003177c str r3, [sp, 0x3c] | var_3ch = r3;
0x00031780 str r3, [sp, 0x44] | var_44h = r3;
0x00031784 b 0x31334 | goto label_21;
0x00031788 mov r1, r4 | r1 = r4;
0x0003178c mov r0, r5 | r0 = r5;
0x00031790 bl 0x2ec60 | r0 = fcn_0002ec60 (r0, r1);
0x00031794 subs r4, r0, 0 | r4 = r0 - 0;
0x00031798 beq 0x31774 |
| }
0x0003179c b 0x3138c | goto label_7;
| label_34:
0x000317a0 mov r4, 2 | r4 = 2;
0x000317a4 b 0x3138c | goto label_7;
| label_47:
0x000317a8 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x000317ac cmp r1, 0 |
| if (r1 != 0) {
0x000317b0 bne 0x31334 | goto label_21;
| }
0x000317b4 mov r0, r5 | r0 = r5;
0x000317b8 bl 0x2ec60 | r0 = fcn_0002ec60 (r0, r1);
0x000317bc subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x000317c0 beq 0x31334 | goto label_21;
| }
| label_26:
0x000317c4 mov r0, r4 | r0 = r4;
0x000317c8 add sp, sp, 0x8c |
0x000317cc pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
[*] Function strcpy used 23 times libuClibc-1.0.31.so