[*] Binary protection state of libc.so.6
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function mmap tear down of libc.so.6
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x26d84 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00026d84 () | void fcn_00026d84 (int16_t arg1, int16_t arg2) {
| void * s1;
| int32_t var_4h;
| int16_t var_8h_2;
| int32_t var_18h;
| int32_t var_30h;
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
0x00026d84 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00026d88 movs r2, 1 | r2 = 1;
0x00026d8a sub sp, 0x84 |
0x00026d8c mov r4, r0 | r4 = r0;
0x00026d8e movs r3, 0 | r3 = 0;
0x00026d90 mov r8, r1 | r8 = r1;
0x00026d92 ldr r0, [r0] | r0 = *(r0);
0x00026d94 add r7, sp, 8 | r7 += s1;
0x00026d96 mov.w r1, 0x80000 | r1 = 0x80000;
0x00026d9a strd r2, r3, [r4, 4] | __asm ("strd r2, r3, [r4, 4]");
0x00026d9e bl 0xa5540 | open_nocancel ();
0x00026da0 smlal r1, lr, pc, r5 | __asm ("smlal r1, lr, pc, r5");
| if (r3 >= 0) {
0x00026da4 blt 0x26e08 |
0x00026da6 add.w r6, r7, 8 | r6 += var_8h_2;
0x00026daa mov r1, r6 | r1 = r6;
0x00026dac bl 0x9db70 | r0 = fstat64_time64 ();
0x00026db0 cmp r0, 0 |
| if (r0 < 0) {
0x00026db2 blt 0x26e66 | goto label_2;
| }
0x00026db4 ldr r3, [r7, 0x18] | r3 = var_18h;
0x00026db6 and r3, r3, 0xf000 | r3 &= 0xf000;
0x00026dba cmp.w r3, 0x4000 |
| if (r3 == sym.errno) {
0x00026dbe beq 0x26e74 | goto label_4;
| }
| label_1:
0x00026dc0 ldr r3, [pc, 0x164] |
0x00026dc2 mrc p15, 0, sb, c13, c0, 3 | __asm ("mrc p15, 0, sb, c13, c0, 3");
0x00026dc6 movs r0, 0 | r0 = 0;
0x00026dc8 movs r2, 1 | r2 = 1;
0x00026dca add r3, pc |
0x00026dcc ldr r3, [r3] | r3 = *(0x4dcf6);
0x00026dce ldr.w r3, [sb, r3] | r3 = *((sb + r3));
0x00026dd2 str r3, [r7, 4] | var_4h = r3;
0x00026dd4 movs r3, 2 | r3 = 2;
0x00026dd6 strd r5, r0, [sp] | __asm ("strd r5, r0, [sp]");
0x00026dda ldr r1, [r7, 0x30] | r1 = var_30h;
0x00026ddc bl 0xa9000 | r0 = mmap ()
0x00026de0 adds r3, r0, 1 | r3 = r0 + 1;
0x00026de2 mov r6, r0 | r6 = r0;
| if (r3 == r0) {
0x00026de4 beq 0x26e10 | goto label_5;
| }
0x00026de6 mov r0, r5 | r0 = r5;
0x00026de8 bl 0xa5410 | close_nocancel ();
| if (r6 == 0) {
0x00026dec cbz r6, 0x26e08 | goto label_0;
| }
0x00026dee ldr r2, [r7, 0x30] | r2 = var_30h;
0x00026df0 mov r1, r6 | r1 = r6;
0x00026df2 mov r0, r8 | r0 = r8;
0x00026df4 bl 0x26b10 | r0 = fcn_00026b10 (r0, r1, r2);
0x00026df8 cmp r0, 0 |
| if (r0 == 0) {
0x00026dfa beq.w 0x26f1c | goto label_6;
| }
0x00026dfe movs r3, 1 | r3 = 1;
| label_3:
0x00026e00 movs r2, 0 | r2 = 0;
0x00026e02 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00026e04 str r2, [r0] | *(r0) = r2;
0x00026e06 str r0, [r4, 8] | *((r4 + 8)) = r0;
| }
| label_0:
0x00026e08 adds r7, 0x7c | r7 += 0x7c;
0x00026e0a mov sp, r7 |
0x00026e0c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x00026e10 ldr r3, [pc, 0x118] |
0x00026e12 add r3, pc |
0x00026e14 ldr r3, [r3] | r3 = *(0x4dd42);
0x00026e16 ldr.w r3, [sb, r3] | r3 = *((sb + r3));
0x00026e1a cmp r3, 0x26 |
| if (r3 != 0x26) {
0x00026e1c bne 0x26e66 | goto label_2;
| }
0x00026e1e ldr r6, [r7, 0x30] | r6 = var_30h;
0x00026e20 mov r0, r6 | r0 = r6;
0x00026e22 blx 0x1df60 | fcn_0001df60 ();
0x00026e26 str r0, [r7] | *(r7) = r0;
| if (r0 == 0) {
0x00026e28 cbz r0, 0x26e66 | goto label_2;
| }
0x00026e2a subs.w sl, r6, 0 | sl = r6 - 0;
0x00026e2e it gt |
| if (sl <= r6) {
0x00026e30 ldrgt fp, [r7] | fp = *(r7);
| }
| if (sl > r6) {
0x00026e34 bgt 0x26e3e | goto label_7;
| }
0x00026e36 b 0x26ef6 | goto label_8;
| do {
0x00026e38 cmp.w sl, 0 |
| if (sl <= 0) {
0x00026e3c ble 0x26ef6 | goto label_8;
| }
| label_7:
0x00026e3e mov r2, sl | r2 = sl;
0x00026e40 mov r1, fp | r1 = fp;
0x00026e42 mov r0, r5 | r0 = r5;
0x00026e44 bl 0xa56cc | r0 = read_nocancel ();
0x00026e48 subs r6, r0, 0 | r6 = r0 - 0;
0x00026e4a sub.w sl, sl, r6 | sl -= r6;
0x00026e4e add fp, r6 |
0x00026e50 bgt 0x26e38 |
| } while (r6 > r0);
0x00026e52 ldr r0, [r7] | r0 = *(r7);
0x00026e54 blx 0x1ded4 | fcn_0001ded4 ();
| if (r6 == 0) {
0x00026e58 cbnz r6, 0x26e66 |
0x00026e5a ldr r3, [pc, 0xd4] |
0x00026e5c movs r2, 0x16 | r2 = 0x16;
0x00026e5e add r3, pc |
0x00026e60 ldr r3, [r3] | r3 = *(0x4dd94);
0x00026e62 str.w r2, [sb, r3] | __asm ("str.w r2, [sb, r3]");
| }
| label_2:
0x00026e66 mov r0, r5 | r0 = r5;
0x00026e68 bl 0xa5410 | close_nocancel ();
0x00026e6c adds r7, 0x7c | r7 += 0x7c;
0x00026e6e mov sp, r7 |
0x00026e70 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x00026e74 mov r0, r5 | r0 = r5;
0x00026e76 bl 0xa5410 | close_nocancel ();
0x00026e7a ldr.w sb, [r4] | sb = *(r4);
0x00026e7e mov r0, sb | r0 = sb;
0x00026e80 bl 0x6ae40 | strlen ();
0x00026e84 ldr r3, [pc, 0xb0] |
0x00026e86 mov r1, sb | r1 = sb;
0x00026e88 mov r5, r0 | r5 = r0;
0x00026e8a mov r2, r0 | r2 = r0;
0x00026e8c add r3, pc | r3 = 0x4ddc8;
0x00026e8e ldrb.w sl, [r3, r8] | sl = *((r3 + r8));
0x00026e92 add.w r3, sl, r0 | r3 = sl + r0;
0x00026e96 adds r3, 0xd | r3 += 0xd;
0x00026e98 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00026e9c sub.w sp, sp, r3 |
0x00026ea0 add.w sb, sp, 8 | sb += s1;
0x00026ea4 mov r0, sb | r0 = sb;
0x00026ea6 blx 0x6d540 | memcpy (r0, r1, r2);
0x00026eaa ldr.w ip, [pc, 0x90] | ip = *(0x00026f3c);
0x00026eae mov r3, r0 | r3 = r0;
0x00026eb0 ldr r1, [pc, 0x8c] |
0x00026eb2 add.w r2, sl, 1 | r2 = sl + 1;
0x00026eb6 add ip, pc |
0x00026eb8 ldr.w r0, [ip] | r0 = *(ip);
0x00026ebc add r1, pc | r1 = 0x4de00;
0x00026ebe ldrb.w r1, [r1, r8] | r1 = *((r1 + r8));
0x00026ec2 str r0, [r3, r5] | *((r3 + r5)) = r0;
0x00026ec4 adds r0, r3, r5 | r0 = r3 + r5;
0x00026ec6 ldrb.w r3, [ip, 4] | r3 = *((ip + 4));
0x00026eca adds r0, 5 | r0 += 5;
0x00026ecc strb r3, [r0, -0x1] | *((r0 - 0x1)) = r3;
0x00026ed0 ldr r3, [pc, 0x70] |
0x00026ed2 add r3, pc | r3 = 0x4de1a;
0x00026ed4 add r1, r3 | r1 += r3;
0x00026ed6 blx 0x6d540 | memcpy (r0, r1, r2);
0x00026eda mov.w r1, 0x80000 | r1 = 0x80000;
0x00026ede mov r0, sb | r0 = sb;
0x00026ee0 bl 0xa5540 | r0 = open_nocancel ();
0x00026ee4 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 < r0) {
0x00026ee6 blt 0x26e08 | goto label_0;
| }
0x00026ee8 mov r1, r6 | r1 = r6;
0x00026eea bl 0x9db70 | r0 = fstat64_time64 ();
0x00026eee cmp r0, 0 |
| if (r0 >= 0) {
0x00026ef0 bge.w 0x26dc0 | goto label_1;
| }
0x00026ef4 b 0x26e66 | goto label_2;
| label_8:
0x00026ef6 ldr r3, [pc, 0x3c] |
0x00026ef8 mov r0, r5 | r0 = r5;
0x00026efa ldr r2, [r7, 4] | r2 = var_4h;
0x00026efc add r3, pc |
0x00026efe ldr r3, [r3] | r3 = *(0x4de36);
0x00026f00 str.w r2, [sb, r3] | __asm ("str.w r2, [sb, r3]");
0x00026f04 bl 0xa5410 | close_nocancel ();
0x00026f08 ldr r2, [r7, 0x30] | r2 = var_30h;
0x00026f0a mov r0, r8 | r0 = r8;
0x00026f0c ldr r1, [r7] | r1 = *(r7);
0x00026f0e bl 0x26b10 | fcn_00026b10 (r0, r1, r2);
0x00026f12 movs r3, 0 | r3 = 0;
0x00026f14 cmp r0, 0 |
| if (r0 == 0) {
0x00026f16 beq.w 0x26e08 | goto label_0;
| }
0x00026f1a b 0x26e00 | goto label_3;
| label_6:
0x00026f1c ldr r1, [r7, 0x30] | r1 = var_30h;
0x00026f1e mov r0, r6 | r0 = r6;
0x00026f20 bl 0xa90c0 | munmap ();
0x00026f24 b 0x26e08 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x27eac */
| #include <stdint.h>
|
; (fcn) fcn.00027eac () | void fcn_00027eac (int16_t arg_28h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| int32_t var_ch;
| int32_t var_ch_2;
| int16_t var_14h;
| char * src;
| char * dest;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00027eac push {r7, lr} |
0x00027eae mov r6, r0 | r6 = r0;
0x00027eb0 sub sp, 0x20 |
0x00027eb2 ldr r4, [pc, 0xdc] |
0x00027eb4 mov r8, r1 | r8 = r1;
0x00027eb6 movs r0, 1 | r0 = 1;
0x00027eb8 movs r1, 0 | r1 = 0;
0x00027eba mov r5, r2 | r5 = r2;
0x00027ebc mov r7, r3 | r7 = r3;
0x00027ebe ldr.w sb, [sp, 0x28] | sb = *(arg_28h);
0x00027ec2 bl 0x5f740 | pthread_setcancelstate ();
0x00027ec6 ldr r3, [pc, 0xcc] | r3 = *(0x27f96);
0x00027ec8 add r4, pc | r4 = 0x4fe5e;
0x00027eca ldr r3, [r4, r3] | r3 = *(0x4fe5e);
0x00027ecc ldr r2, [r3] | r2 = *(0x4fe5e);
0x00027ece ldrb r3, [r2] | r3 = *(r2);
0x00027ed0 cmp r3, 0 |
| if (r3 == 0) {
0x00027ed2 beq 0x27f6c | goto label_3;
| }
0x00027ed4 ldr r3, [pc, 0xc0] |
0x00027ed6 add r3, pc | r3 = 0x4fe72;
0x00027ed8 cmp.w sb, 0 |
| if (sb == 0) {
0x00027edc beq 0x27f76 | goto label_4;
| }
| label_0:
0x00027ede ldr r1, [pc, 0xbc] |
0x00027ee0 add r1, pc | r1 = 0x4fe82;
| label_1:
0x00027ee2 str r5, [sp] | *(sp) = r5;
0x00027ee4 add r5, sp, 0x1c | r5 += dest;
0x00027ee6 strd r1, r8, [sp, 0xc] | __asm ("strd r1, r8, [var_ch]");
0x00027eea add r0, sp, 0x18 | r0 += src;
0x00027eec mov r1, r6 | r1 = r6;
0x00027eee strd r7, sb, [sp, 4] | __asm ("strd r7, sb, [var_4h]");
0x00027ef2 str r5, [sp, 0x14] | var_14h = r5;
0x00027ef4 bl 0x38ce0 | r0 = asprintf ();
0x00027ef8 cmp r0, 0 |
| if (r0 < 0) {
0x00027efa blt 0x27f80 | goto label_5;
| }
0x00027efc ldr r1, [pc, 0xa0] |
0x00027efe movs r0, 0 | r0 = 0;
0x00027f00 ldr r2, [sp, 0x18] | r2 = src;
0x00027f02 add r1, pc | r1 = 0x4fea6;
0x00027f04 bl 0x4bb90 | fcn_0004bb90 (r0);
0x00027f08 ldr r3, [pc, 0x98] | r3 = *(0x27fa4);
0x00027f0a ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00027f0c ldr r0, [r3] | r0 = *(0x27fa4);
0x00027f0e bl 0x4cbcc | fflush ();
0x00027f12 ldr r3, [pc, 0x94] | r3 = *(0x27faa);
0x00027f14 movs r0, 0 | r0 = 0;
0x00027f16 ldr r1, [sp, 0x1c] | r1 = dest;
0x00027f18 mov.w r2, -1 | r2 = -1;
0x00027f1c ldr r4, [r4, r3] | r4 = *((r4 + r3));
0x00027f1e movs r3, 0x22 | r3 = 0x22;
0x00027f20 strd r2, r0, [sp] | __asm ("strd r2, r0, [sp]");
0x00027f24 movs r2, 3 | r2 = 3;
0x00027f26 ldr r4, [r4, 0xc] | r4 = *((r4 + 0xc));
0x00027f28 add r1, r4 | r1 += r4;
0x00027f2a rsbs r4, r4, 0 | r4 -= ;
0x00027f2c ands r1, r4 | r1 &= r4;
0x00027f2e str r1, [sp, 0x1c] | dest = r1;
0x00027f30 bl 0xa9000 | r0 = mmap ()
0x00027f34 adds r3, r0, 1 | r3 = r0 + 1;
0x00027f36 mov r4, r0 | r4 = r0;
| if (r3 == r0) {
0x00027f38 beq 0x27f62 | goto label_6;
| }
0x00027f3a ldr r3, [sp, 0x1c] | r3 = dest;
0x00027f3c ldr r1, [sp, 0x18] | r1 = src;
0x00027f3e str r3, [r0], 4 | *(r0) = r3;
| r0 += 4;
0x00027f42 bl 0x6a5a0 | strcpy (r0, r1);
0x00027f46 ldr r3, [pc, 0x64] |
0x00027f48 add r3, pc | r3 = 0x4fefa;
| do {
0x00027f4a ldrex r0, [r3] | __asm ("ldrex r0, [r3]");
0x00027f4e strex r2, r4, [r3] | __asm ("strex r2, r4, [r3]");
0x00027f52 cmp r2, 0 |
0x00027f54 bne 0x27f4a |
| } while (r2 != 0);
0x00027f56 dmb ish | __asm ("dmb ish");
| if (r0 != 0) {
0x00027f5a cbz r0, 0x27f62 |
0x00027f5c ldr r1, [r0] | r1 = *(r0);
0x00027f5e bl 0xa90c0 | munmap ();
| }
| label_6:
0x00027f62 ldr r0, [sp, 0x18] | r0 = src;
0x00027f64 blx 0x1ded4 | fcn_0001ded4 ();
| label_2:
0x00027f68 bl 0x1df88 | abort ();
| label_3:
0x00027f6c ldr r3, [pc, 0x40] |
0x00027f6e add r3, pc | r3 = 0x4ff22;
0x00027f70 cmp.w sb, 0 |
| if (sb != 0) {
0x00027f74 bne 0x27ede | goto label_0;
| }
| label_4:
0x00027f76 ldr.w sb, [pc, 0x3c] | sb = *(0x00027fb4);
0x00027f7a add sb, pc | sb += pc;
0x00027f7c mov r1, sb | r1 = sb;
0x00027f7e b 0x27ee2 | goto label_1;
| label_5:
0x00027f80 ldr r1, [pc, 0x34] |
0x00027f82 movs r2, 0x12 | r2 = 0x12;
0x00027f84 movs r0, 2 | r0 = 2;
0x00027f86 add r1, pc | r1 = 0x4ff42;
0x00027f88 bl 0x9e6c0 | write (r0, r1, r2);
0x00027f8c b 0x27f68 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x29550 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.00029550 () | void fcn_00029550 (int16_t arg_0h, uint32_t arg1, int16_t arg2) {
| int16_t var_2h;
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int32_t var_50h_2;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int32_t var_60h_2;
| int16_t var_68h;
| int16_t var_90h;
| int16_t var_94h;
| r0 = arg1;
| r1 = arg2;
0x00029550 ldr.w r3, [pc, 0x644] |
0x00029554 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00029558 mrc p15, 0, r8, c13, c0, 3 | __asm ("mrc p15, 0, r8, c13, c0, 3");
0x0002955c sub.w r5, r8, 0x500 | r5 = r8 - 0x500;
0x00029560 vpush {d8} | __asm ("vpush {d8}");
0x00029564 add r3, pc | r3 = 0x53100;
0x00029566 sub sp, 0xdc |
0x00029568 ldr r2, [r3, 8] | r2 = *(0x53108);
0x0002956a mov r4, r0 | r4 = r0;
0x0002956c mov sl, r1 | sl = r1;
0x0002956e cmp r2, r5 |
| if (r2 == r5) {
0x00029570 beq 0x29594 | goto label_45;
| }
0x00029572 movs r2, 1 | r2 = 1;
| do {
0x00029574 ldrex r1, [r3] | __asm ("ldrex r1, [r3]");
0x00029578 cmp r1, 0 |
| if (r1 != 0) {
0x0002957a bne 0x29588 | goto label_46;
| }
0x0002957c strex r0, r2, [r3] | __asm ("strex r0, r2, [r3]");
0x00029580 cmp r0, 0 |
0x00029582 bne 0x29574 |
| } while (arg_0h != );
0x00029584 dmb ish | __asm ("dmb ish");
| if (arg_0h != ) {
| label_46:
0x00029588 bne.w 0x29916 | goto label_47;
| }
| label_3:
0x0002958c ldr.w r3, [pc, 0x60c] |
0x00029590 add r3, pc | r3 = 0x53130;
0x00029592 str r5, [r3, 8] | *((r3 + 8)) = r5;
| label_45:
0x00029594 ldr.w r5, [pc, 0x608] | r5 = *(0x00029ba0);
0x00029598 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0002959a add r5, pc | r5 += pc;
0x0002959c ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0002959e adds r2, r3, 1 | r2 = r3 + 1;
0x000295a0 str r2, [r5, 4] | *((r5 + 4)) = r2;
0x000295a2 cmp r1, 0 |
| if (r1 != 0) {
0x000295a4 bne.w 0x29810 | goto label_48;
| }
0x000295a8 ldr r0, [r4] | r0 = *(r4);
0x000295aa mov.w r2, -1 | r2 = -1;
0x000295ae str r1, [r4, 8] | *((r4 + 8)) = r1;
0x000295b0 str r2, [r4, 4] | *((r4 + 4)) = r2;
0x000295b2 cmp r0, 0 |
| if (r0 == 0) {
0x000295b4 beq.w 0x2980c | goto label_2;
| }
0x000295b8 bl 0xa5540 | r0 = open_nocancel ();
0x000295bc cmp.w r0, -1 |
0x000295c0 mov sb, r0 | sb = r0;
| if (r0 == -1) {
0x000295c2 beq.w 0x29808 | goto label_49;
| }
0x000295c6 add r1, sp, 0x68 | r1 += var_68h;
0x000295c8 bl 0x9db70 | r0 = fstat64_time64 ();
0x000295cc mov r7, r0 | r7 = r0;
0x000295ce cmp r0, 0 |
| if (r0 != 0) {
0x000295d0 bne.w 0x29906 | goto label_6;
| }
0x000295d4 ldr r3, [sp, 0x94] | r3 = var_94h;
0x000295d6 ldr r1, [sp, 0x90] | r1 = var_90h;
0x000295d8 subs r3, 0 |
0x000295da it ne |
| if (r3 == 0) {
0x000295dc movne r3, 1 | r3 = 1;
| }
0x000295de str r1, [sp, 0x10] | var_10h = r1;
0x000295e0 cmp r1, 0x2f |
0x000295e2 it ls |
| if (r1 > 0x2f) {
0x000295e4 orrls r3, r3, 1 | r3 |= 1;
| }
0x000295e8 cmp r3, 0 |
| if (r3 != 0) {
0x000295ea bne.w 0x29906 | goto label_6;
| }
0x000295ee movs r3, 2 | r3 = 2;
0x000295f0 movs r2, 1 | r2 = 1;
0x000295f2 strd sb, r0, [sp] | __asm ("strd sb, r0, [sp]");
0x000295f6 bl 0xa9000 | r0 = mmap ()
0x000295fa mov r3, r0 | r3 = r0;
0x000295fc str r0, [sp, 0xc] | var_ch = r0;
0x000295fe adds r3, 1 | r3++;
| if (r3 == 1) {
0x00029600 beq.w 0x2994e | goto label_50;
| }
0x00029604 mov r0, sb | r0 = sb;
0x00029606 bl 0xa5410 | close_nocancel ();
0x0002960a ldr r3, [sp, 0xc] | r3 = var_ch;
0x0002960c movw r2, 0x495 |
0x00029610 movt r2, 0xde12 | r2 = 0xde120495;
0x00029614 ldr.w r8, [r3] | r8 = *(r3);
0x00029618 movw r3, 0x12de |
0x0002961c movt r3, 0x9504 | r3 = 0x950412de;
0x00029620 subs.w fp, r8, r3 |
0x00029624 it ne |
| if (fp == r8) {
0x00029626 movne fp, 1 |
| }
0x0002962a cmp r8, r2 |
0x0002962c it ne |
| if (r8 != r2) {
0x0002962e cmpne r8, r3 | __asm ("cmpne r8, r3");
| }
| if (r8 != r2) {
0x00029630 bne.w 0x29800 | goto label_51;
| }
0x00029634 movs r7, 1 | r7 = 1;
| label_9:
0x00029636 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00029638 movs r0, 0x68 | r0 = 0x68;
0x0002963a vdup.32 d8, r3 | __asm ("vdup.32 d8, r3");
0x0002963e blx 0x1df60 | r0 = fcn_0001df60 ();
0x00029642 mov r5, r0 | r5 = r0;
0x00029644 cmp r0, 0 |
| if (r0 == 0) {
0x00029646 beq.w 0x2a046 | goto label_52;
| }
0x0002964a ldr r3, [sp, 0x10] | r3 = var_10h;
0x0002964c movw r2, 0x12de |
0x00029650 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00029652 movt r2, 0x9504 | r2 = 0x950412de;
0x00029656 cmp r8, r2 |
0x00029658 str r0, [r4, 8] | *((r4 + 8)) = r0;
0x0002965a strd r3, fp, [r0, 8] | __asm ("strd r3, fp, [r0, 8]");
0x0002965e mov.w r3, 0 | r3 = 0;
0x00029662 str r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x00029664 strd r1, r7, [r0] | __asm ("strd r1, r7, [r0]");
0x00029668 ldr r3, [r1, 4] | r3 = *((r1 + 4));
| if (r8 == r2) {
0x0002966a beq.w 0x2983e | goto label_53;
| }
0x0002966e rev r3, r3 | r3 = SWAP32 (r3);
0x00029670 cmp.w r3, 0x20000 |
0x00029674 mov r1, r3 | r1 = r3;
| if (r3 >= 0x20000) {
0x00029676 bhs.w 0x298d2 | goto label_14;
| }
0x0002967a ldr r0, [sp, 0xc] | r0 = var_ch;
0x0002967c ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x0002967e rev r2, r2 | r2 = SWAP32 (r2);
0x00029680 str r2, [r5, 0x14] | *((r5 + 0x14)) = r2;
0x00029682 add.w r2, r0, 0xc | r2 = r0 + 0xc;
0x00029686 vld1.32 {d16}, [r2] | __asm ("vld1.32 {d16}, [r2]");
0x0002968a ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x0002968c vrev32.8 d16, d16 | __asm ("vrev32.8 d16, d16");
0x00029690 vadd.i32 d16, d16, d8 | __asm ("vadd.i32 d16, d16, d8");
0x00029694 rev.w sb, r2 | r2 = SWAP32 (sb);
0x00029698 cmp.w sb, 2 |
0x0002969c str.w sb, [r5, 0x2c] | __asm ("str.w sb, [r5, 0x2c]");
0x000296a0 vstr d16, [r5, 0x18] | __asm ("vstr d16, [r5, 0x18]");
| if (sb < 2) {
0x000296a4 bls.w 0x2986a | goto label_54;
| }
0x000296a8 ldr r1, [sp, 0xc] | r1 = var_ch;
0x000296aa uxth r2, r3 | r2 = (int16_t) r3;
0x000296ac ldr r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x000296ae str.w fp, [r5, 0x34] | __asm ("str.w fp, [r5, 0x34]");
0x000296b2 rev r3, r3 | r3 = SWAP32 (r3);
0x000296b4 add r3, r1 | r3 += r1;
0x000296b6 str r3, [r5, 0x30] | *((r5 + 0x30)) = r3;
0x000296b8 cmp r2, 0 |
| if (r2 == 0) {
0x000296ba beq.w 0x29876 | goto label_4;
| }
0x000296be ldr r2, [sp, 0xc] | r2 = var_ch;
0x000296c0 ldr r2, [r2, 0x24] | r2 = *((r2 + 0x24));
0x000296c2 cmp r2, 0 |
| if (r2 == 0) {
0x000296c4 beq.w 0x29876 | goto label_4;
| }
0x000296c8 ldr r1, [sp, 0xc] | r1 = var_ch;
0x000296ca rev r2, r2 | r2 = SWAP32 (r2);
0x000296cc str r2, [sp, 0x24] | var_24h = r2;
0x000296ce ldr r2, [r1, 0x1c] | r2 = *((r1 + 0x1c));
0x000296d0 rev r2, r2 | r2 = SWAP32 (r2);
0x000296d2 str r2, [sp, 0x18] | var_18h = r2;
0x000296d4 ldr r2, [r1, 0x20] | r2 = *((r1 + 0x20));
0x000296d6 rev r2, r2 | r2 = SWAP32 (r2);
| label_5:
0x000296d8 ldr r6, [sp, 0x18] | r6 = var_18h;
0x000296da movs r1, 4 | r1 = 4;
0x000296dc str r3, [sp, 0x1c] | var_1ch = r3;
0x000296de ldr r3, [sp, 0xc] | r3 = var_ch;
0x000296e0 mov r0, r6 | r0 = r6;
0x000296e2 add r3, r2 | r3 += r2;
0x000296e4 str r3, [sp, 0x20] | var_20h = r3;
0x000296e6 blx 0x1dec4 | fcn_0001dec4 ();
0x000296ea str r0, [sp, 0x14] | var_14h = r0;
0x000296ec cmp r0, 0 |
| if (r0 == 0) {
0x000296ee beq.w 0x298d2 | goto label_14;
| }
0x000296f2 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000296f4 cmp r6, 0 |
| if (r6 == 0) {
0x000296f6 beq.w 0x299be | goto label_55;
| }
0x000296fa ldr.w r2, [pc, 0x4a8] | r2 = *(0x00029ba4);
0x000296fe movw fp, 0x12de |
0x00029702 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00029704 movt fp, 0x9504 | fp = 0x950412de;
0x00029708 str.w sl, [sp, 0x30] | __asm ("str.w sl, [var_30h]");
0x0002970c mov sl, r7 | sl = r7;
0x0002970e add r2, pc | r2 += pc;
0x00029710 ldr r6, [sp, 0xc] | r6 = var_ch;
0x00029712 str r2, [sp, 0x1c] | var_1ch = r2;
0x00029714 subs r0, r1, 4 | r0 = r1 - 4;
0x00029716 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00029718 movs r1, 0 | r1 = 0;
0x0002971a str r4, [sp, 0x20] | var_20h = r4;
0x0002971c ldr.w ip, [sp, 0x18] | ip = var_18h;
0x00029720 ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x00029722 add.w lr, r2, 4 | lr = r2 + 4;
0x00029726 mov r7, r2 | r7 = r2;
0x00029728 strd sb, r3, [sp, 0x28] | __asm ("strd sb, r3, [var_28h]");
0x0002972c b 0x29748 |
| while (sb != 0x50) {
0x0002972e cmp.w sb, 0x49 |
| if (sb == 0x49) {
0x00029732 bne 0x2973c |
0x00029734 ldrb r3, [r3, 1] | r3 = *((r3 + 1));
0x00029736 cmp r3, 0 |
0x00029738 it eq |
| if (r3 == 0) {
0x0002973a moveq r2, r4 | r2 = r4;
| goto label_0;
| }
| }
| label_0:
0x0002973c adds r1, 1 | r1++;
0x0002973e str r2, [r0, 4]! | *((r0 += 4)) = r2;
0x00029742 cmp r1, ip |
| if (r1 == ip) {
0x00029744 beq.w 0x299b2 | goto label_56;
| }
0x00029748 ldr.w r2, [r7, r1, lsl 3] | offset_0 = r1 << 3;
| r2 = *((r7 + offset_0));
0x0002974c cmp r8, fp |
0x0002974e ldr.w r3, [lr, r1, lsl 3] | offset_1 = r1 << 3;
| r3 = *((lr + offset_1));
0x00029752 itt ne |
| if (r8 != fp) {
0x00029754 revne r2, r2 | __asm ("revne r2, r2");
| }
| if (r8 != fp) {
0x00029756 revne r3, r3 | __asm ("revne r3, r3");
| }
0x00029758 add r3, r6 | r3 += r6;
0x0002975a cmp r2, 0 |
| if (r2 == 0) {
0x0002975c beq.w 0x298c8 | goto label_57;
| }
0x00029760 add r2, r3 | r2 += r3;
0x00029762 ldrb r2, [r2, -0x1] | r2 = *((r2 - 0x1));
0x00029766 cmp r2, 0 |
| if (r2 != 0) {
0x00029768 bne.w 0x298c8 | goto label_57;
| }
0x0002976c ldrb.w sb, [r3] | sb = *(r3);
0x00029770 cmp.w sb, 0x50 |
0x00029774 bne 0x2972e |
| }
0x00029776 ldrb.w sb, [r3, 1] | sb = *((r3 + 1));
0x0002977a cmp.w sb, 0x52 |
| if (sb != 0x52) {
0x0002977e bne 0x2973c | goto label_0;
| }
0x00029780 ldrb.w sb, [r3, 2] | sb = *((r3 + 2));
0x00029784 cmp.w sb, 0x49 |
| if (sb != 0x49) {
0x00029788 bne 0x2973c | goto label_0;
| }
0x0002978a ldrb r2, [r3, 3] | r2 = *((r3 + 3));
0x0002978c cmp r2, 0x69 |
0x0002978e it ne |
| if (r2 != 0x69) {
0x00029790 cmpne r2, 0x64 | __asm ("cmpne r2, 0x64");
| }
0x00029792 str r2, [sp, 0x1c] | var_1ch = r2;
0x00029794 ite eq |
| if (r2 != 0x69) {
0x00029796 moveq r2, 1 | r2 = 1;
| }
| if (r2 == 0x69) {
0x00029798 movne r2, 0 | r2 = 0;
| }
0x0002979a mov sb, r2 | sb = r2;
| if (r2 == 0x69) {
0x0002979c beq 0x297be | goto label_58;
| }
0x0002979e ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000297a0 cmp r2, 0x58 |
| if (r2 == 0x58) {
0x000297a2 beq.w 0x29eb0 | goto label_59;
| }
0x000297a6 subs r2, 0x6f | r2 -= 0x6f;
0x000297a8 uxtb r2, r2 | r2 = (int8_t) r2;
0x000297aa cmp r2, 9 |
| if (r2 > 9) {
0x000297ac bhi.w 0x29c1c | goto label_60;
| }
0x000297b0 movw sb, 0x241 | sb = 0x241;
0x000297b4 lsr.w r2, sb, r2 | r2 = sb >> r2;
0x000297b8 ands r2, r2, 1 | r2 &= 1;
| if (r2 == r2) {
0x000297bc beq 0x2973c | goto label_0;
| }
| label_58:
0x000297be ldrb r2, [r3, 4] | r2 = *((r3 + 4));
0x000297c0 cmp r2, 0x38 |
| if (r2 == 0x38) {
0x000297c2 beq.w 0x29b1c | goto label_61;
| }
| label_27:
0x000297c6 cmp r2, 0x31 |
| if (r2 == 0x31) {
0x000297c8 beq.w 0x29bd4 | goto label_62;
| }
0x000297cc cmp r2, 0x33 |
| if (r2 == 0x33) {
0x000297ce beq.w 0x29c24 | goto label_63;
| }
0x000297d2 cmp r2, 0x36 |
| if (r2 == 0x36) {
0x000297d4 beq.w 0x29c30 | goto label_64;
| }
0x000297d8 cmp r2, 0x4c |
| if (r2 == 0x4c) {
0x000297da beq.w 0x29c04 | goto label_65;
| }
0x000297de cmp r2, 0x46 |
| if (r2 == 0x46) {
0x000297e0 beq.w 0x29bec | goto label_66;
| }
0x000297e4 cmp r2, 0x4d |
| if (r2 != 0x4d) {
0x000297e6 bne.w 0x2a172 | goto label_67;
| }
0x000297ea ldrb r2, [r3, 5] | r2 = *((r3 + 5));
0x000297ec cmp r2, 0x41 |
0x000297ee it ne |
| if (r2 != 0x41) {
0x000297f0 movne r2, 0 | r2 = 0;
| goto label_68;
| }
| if (r2 != 0x41) {
| label_68:
0x000297f2 bne 0x2973c | goto label_0;
| }
0x000297f4 ldrb r2, [r3, 6] | r2 = *((r3 + 6));
0x000297f6 cmp r2, 0x58 |
| if (r2 == 0x58) {
0x000297f8 beq.w 0x29fe0 | goto label_69;
| }
0x000297fc movs r2, 0 | r2 = 0;
0x000297fe b 0x2973c | goto label_0;
| label_51:
0x00029800 ldrd r0, r1, [sp, 0xc] | __asm ("ldrd r0, r1, [var_10h]");
0x00029804 bl 0xa90c0 | munmap ();
| label_49:
0x00029808 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0002980a subs r3, 1 | r3--;
| label_2:
0x0002980c movs r2, 1 | r2 = 1;
0x0002980e str r2, [r4, 4] | *((r4 + 4)) = r2;
| label_48:
0x00029810 ldr r0, [pc, 0x394] |
0x00029812 add r0, pc | r0 = 0x533be;
0x00029814 str r3, [r0, 4] | *((r0 + 4)) = r3;
| if (r3 != 0) {
0x00029816 cbz r3, 0x29822 |
| label_1:
0x00029818 add sp, 0xdc |
0x0002981a vpop {d8} | __asm ("vpop {d8}");
0x0002981e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00029822 str r3, [r0, 8] | *((r0 + 8)) = r3;
0x00029824 dmb ish | __asm ("dmb ish");
| do {
0x00029828 ldrex r2, [r0] | __asm ("ldrex r2, [r0]");
0x0002982c strex r1, r3, [r0] | __asm ("strex r1, r3, [r0]");
0x00029830 cmp r1, 0 |
0x00029832 bne 0x29828 |
| } while (r1 != 0);
0x00029834 cmp r2, 1 |
| if (r2 <= 1) {
0x00029836 ble 0x29818 | goto label_1;
| }
0x00029838 bl 0x57f44 | lll_lock_wake_private ();
0x0002983c b 0x29818 | goto label_1;
| label_53:
0x0002983e cmp.w r3, 0x20000 |
0x00029842 mov r1, r3 | r1 = r3;
| if (r3 < 0x20000) {
0x00029844 bhs 0x298d2 |
0x00029846 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00029848 ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x0002984a ldr.w sb, [r0, 0x14] | sb = *((r0 + 0x14));
0x0002984e str r2, [r5, 0x14] | *((r5 + 0x14)) = r2;
0x00029850 add.w r2, r0, 0xc | r2 = r0 + 0xc;
0x00029854 cmp.w sb, 2 |
0x00029858 vld1.32 {d16}, [r2] | __asm ("vld1.32 {d16}, [r2]");
0x0002985c vadd.i32 d16, d16, d8 | __asm ("vadd.i32 d16, d16, d8");
0x00029860 str.w sb, [r5, 0x2c] | __asm ("str.w sb, [r5, 0x2c]");
0x00029864 vstr d16, [r5, 0x18] | __asm ("vstr d16, [r5, 0x18]");
| if (sb > 2) {
0x00029868 bhi 0x29928 | goto label_70;
| }
| label_54:
0x0002986a uxth r1, r1 | r1 = (int16_t) r1;
0x0002986c movs r3, 0 | r3 = 0;
0x0002986e str.w fp, [r5, 0x34] | __asm ("str.w fp, [r5, 0x34]");
0x00029872 str r3, [r5, 0x30] | *((r5 + 0x30)) = r3;
| if (r1 != 0) {
0x00029874 cbnz r1, 0x298d2 | goto label_14;
| }
| label_4:
0x00029876 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0002987a add.w r3, r5, 0x24 | r3 = r5 + 0x24;
0x0002987e movs r2, 0 | r2 = 0;
0x00029880 str r2, [r5, 0x20] | *((r5 + 0x20)) = r2;
0x00029882 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
| label_11:
0x00029886 mov.w r8, 0 | r8 = 0;
0x0002988a add.w r0, r5, 0x40 | r0 = r5 + 0x40;
0x0002988e mov r1, r8 | r1 = r8;
0x00029890 strd r8, r8, [r5, 0x38] | __asm ("strd r8, r8, [r5, 0x38]");
0x00029894 bl 0x5e794 | pthread_rwlock_init ();
0x00029898 add r2, sp, 0x60 | r2 += var_60h;
0x0002989a mov r3, r8 | r3 = r8;
0x0002989c str r2, [sp] | *(sp) = r2;
0x0002989e mov r1, sl | r1 = sl;
0x000298a0 ldr r2, [pc, 0x308] |
0x000298a2 mov r0, r4 | r0 = r4;
0x000298a4 add r2, pc | r2 = 0x53454;
0x000298a6 bl 0x287f4 | r0 = fcn_000287f4 (r0, r1, r2, r3);
0x000298aa adds r3, r0, 1 | r3 = r0 + 1;
0x000298ac it eq |
| if (r3 != r0) {
0x000298ae ldreq r0, [r5, 0x10] | r0 = *((r5 + 0x10));
| }
| if (r3 == r0) {
0x000298b0 beq 0x298d4 | goto label_71;
| }
0x000298b2 add.w r2, r5, 0x64 | r2 = r5 + 0x64;
0x000298b6 add.w r1, r5, 0x60 | r1 = r5 + 0x60;
0x000298ba bl 0x2b90c | fcn_0002b90c (r0, r1, r2);
0x000298be ldr r3, [pc, 0x2f0] |
0x000298c0 add r3, pc |
0x000298c2 ldr r3, [r3, 4] | r3 = *(0x5347a);
0x000298c4 subs r3, 1 | r3--;
0x000298c6 b 0x2980c | goto label_2;
| label_57:
0x000298c8 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000298ca mov r7, sl | r7 = sl;
0x000298cc ldr r4, [sp, 0x20] | r4 = var_20h;
0x000298ce blx 0x1ded4 | fcn_0001ded4 ();
| }
| label_14:
0x000298d2 movs r0, 0 | r0 = 0;
| label_71:
0x000298d4 blx 0x1ded4 | fcn_0001ded4 ();
| if (r7 != 0) {
0x000298d8 cbnz r7, 0x2991e | goto label_72;
| }
0x000298da ldr r0, [sp, 0xc] | r0 = var_ch;
0x000298dc blx 0x1ded4 | fcn_0001ded4 ();
| do {
0x000298e0 mov r0, r5 | r0 = r5;
0x000298e2 blx 0x1ded4 | fcn_0001ded4 ();
0x000298e6 ldr r3, [pc, 0x2cc] |
0x000298e8 movs r2, 0 | r2 = 0;
0x000298ea str r2, [r4, 8] | *((r4 + 8)) = r2;
0x000298ec add r3, pc |
0x000298ee ldr r3, [r3, 4] | r3 = *(0x534aa);
0x000298f0 subs r3, 1 | r3--;
0x000298f2 b 0x2980c | goto label_2;
| label_7:
0x000298f4 adds r0, 1 | r0++;
| if (r0 == 1) {
0x000298f6 bne 0x29906 |
0x000298f8 ldr r3, [pc, 0x298] |
0x000298fa add r3, pc |
0x000298fc ldr r3, [r3] | r3 = *(0x53492);
0x000298fe ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00029902 cmp r3, 4 |
| if (r3 == 4) {
0x00029904 beq 0x2995e | goto label_8;
| }
| }
| label_6:
0x00029906 mov r0, sb | r0 = sb;
0x00029908 bl 0xa5410 | close_nocancel ();
0x0002990c ldr r3, [pc, 0x2a8] |
0x0002990e add r3, pc |
0x00029910 ldr r3, [r3, 4] | r3 = *(0x534ce);
0x00029912 subs r3, 1 | r3--;
0x00029914 b 0x2980c | goto label_2;
| label_47:
0x00029916 mov r0, r3 | r0 = r3;
0x00029918 bl 0x57ea8 | lll_lock_wait_private ();
0x0002991c b 0x2958c | goto label_3;
| label_72:
0x0002991e ldrd r0, r1, [sp, 0xc] | __asm ("ldrd r0, r1, [var_10h]");
0x00029922 bl 0xa90c0 | munmap ();
0x00029926 b 0x298e0 |
| } while (1);
| label_70:
0x00029928 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0002992a uxth r2, r3 | r2 = (int16_t) r3;
0x0002992c ldr r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x0002992e str.w fp, [r5, 0x34] | __asm ("str.w fp, [r5, 0x34]");
0x00029932 add r3, r1 | r3 += r1;
0x00029934 str r3, [r5, 0x30] | *((r5 + 0x30)) = r3;
0x00029936 cmp r2, 0 |
| if (r2 == 0) {
0x00029938 beq 0x29876 | goto label_4;
| }
0x0002993a ldr r2, [sp, 0xc] | r2 = var_ch;
0x0002993c ldr r2, [r2, 0x24] | r2 = *((r2 + 0x24));
0x0002993e str r2, [sp, 0x24] | var_24h = r2;
0x00029940 cmp r2, 0 |
| if (r2 == 0) {
0x00029942 beq 0x29876 | goto label_4;
| }
0x00029944 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00029946 ldr r1, [r2, 0x1c] | r1 = *((r2 + 0x1c));
0x00029948 ldr r2, [r2, 0x20] | r2 = *((r2 + 0x20));
0x0002994a str r1, [sp, 0x18] | var_18h = r1;
0x0002994c b 0x296d8 | goto label_5;
| label_50:
0x0002994e ldr r5, [sp, 0x10] | r5 = var_10h;
0x00029950 mov r0, r5 | r0 = r5;
0x00029952 blx 0x1df60 | fcn_0001df60 ();
0x00029956 str r0, [sp, 0xc] | var_ch = r0;
0x00029958 cmp r0, 0 |
| if (r0 == 0) {
0x0002995a beq 0x29906 | goto label_6;
| }
0x0002995c mov fp, r0 |
| label_8:
0x0002995e mov r2, r5 | r2 = r5;
0x00029960 mov r1, fp | r1 = fp;
0x00029962 mov r0, sb | r0 = sb;
0x00029964 bl 0xa56cc | r0 = read_nocancel ();
0x00029968 cmp r0, 0 |
| if (r0 <= 0) {
0x0002996a ble 0x298f4 | goto label_7;
| }
0x0002996c subs r5, r5, r0 | r5 -= r0;
0x0002996e add fp, r0 |
| if (r5 != r5) {
0x00029970 bne 0x2995e | goto label_8;
| }
0x00029972 mov r0, sb | r0 = sb;
0x00029974 bl 0xa5410 | close_nocancel ();
0x00029978 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0002997a movw r2, 0x495 |
0x0002997e movt r2, 0xde12 | r2 = 0xde120495;
0x00029982 ldr.w r8, [r3] | r8 = *(r3);
0x00029986 movw r3, 0x12de |
0x0002998a movt r3, 0x9504 | r3 = 0x950412de;
0x0002998e subs.w fp, r8, r3 |
0x00029992 it ne |
| if (fp == r8) {
0x00029994 movne fp, 1 |
| }
0x00029998 cmp r8, r2 |
0x0002999a it ne |
| if (r8 == r2) {
0x0002999c cmpne r8, r3 | __asm ("cmpne r8, r3");
| goto label_73;
| }
| if (r8 == r2) {
| label_73:
0x0002999e beq.w 0x29636 | goto label_9;
| }
0x000299a2 ldr r0, [sp, 0xc] | r0 = var_ch;
0x000299a4 blx 0x1ded4 | fcn_0001ded4 ();
0x000299a8 ldr r3, [pc, 0x210] |
0x000299aa add r3, pc |
0x000299ac ldr r3, [r3, 4] | r3 = *(0x5356e);
0x000299ae subs r3, 1 | r3--;
0x000299b0 b 0x2980c | goto label_2;
| label_56:
0x000299b2 mov r7, sl | r7 = sl;
0x000299b4 ldrd sb, r3, [sp, 0x28] | __asm ("ldrd sb, r3, [var_28h]");
0x000299b8 ldr r4, [sp, 0x20] | r4 = var_20h;
0x000299ba ldr.w sl, [sp, 0x30] | sl = var_30h;
| label_55:
0x000299be movw ip, 0x12de |
0x000299c2 ldr r2, [sp, 0xc] | r2 = var_ch;
0x000299c4 movt ip, 0x9504 | ip = 0x950412de;
0x000299c8 lsl.w r6, sb, 2 | r6 = sb << 2;
0x000299cc cmp r8, ip |
0x000299ce ldrd r0, r1, [r2, 0x28] | __asm ("ldrd r0, r1, [r2, 0x28]");
| if (r8 == ip) {
0x000299d2 beq.w 0x29b14 | goto label_74;
| }
0x000299d6 ldr r2, [sp, 0xc] | r2 = var_ch;
0x000299d8 rev r0, r0 | r0 = SWAP32 (r0);
0x000299da rev r1, r1 | r1 = SWAP32 (r1);
0x000299dc add r0, r2 | r0 += r2;
0x000299de add r1, r2 | r1 += r2;
| label_16:
0x000299e0 str r5, [sp, 0x34] | var_34h = r5;
0x000299e2 movw sb, 0x12de |
0x000299e6 str r4, [sp, 0x38] | var_38h = r4;
0x000299e8 add r2, sp, 0x60 | r2 += var_60h;
0x000299ea ldr r5, [sp, 0x14] | r5 = var_14h;
0x000299ec movt sb, 0x9504 | sb = 0x950412de;
0x000299f0 ldr r4, [sp, 0x18] | r4 = var_18h;
0x000299f2 mov lr, r2 | lr = r2;
0x000299f4 str r7, [sp, 0x30] | var_30h = r7;
0x000299f6 mov r7, r0 | r7 = r0;
0x000299f8 mov fp, r1 |
0x000299fa str r1, [sp, 0x4c] | var_4ch = r1;
0x000299fc movs r1, 0 | r1 = 0;
0x000299fe str r0, [sp, 0x48] | var_48h = r0;
0x00029a00 str r6, [sp, 0x1c] | var_1ch = r6;
0x00029a02 str r3, [sp, 0x3c] | var_3ch = r3;
0x00029a04 str r1, [sp, 0x20] | var_20h = r1;
0x00029a06 str r6, [sp, 0x40] | var_40h = r6;
0x00029a08 str.w sl, [sp, 0x44] | __asm ("str.w sl, [var_44h]");
| label_10:
0x00029a0c cmp r8, sb |
| if (r8 == sb) {
0x00029a0e beq 0x29af0 | goto label_75;
| }
0x00029a10 ldr r3, [r7] | r3 = *(r7);
0x00029a12 mov.w ip, 0 |
| do {
0x00029a16 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00029a18 rev r3, r3 | r3 = SWAP32 (r3);
0x00029a1a adds r0, r2, r3 | r0 = r2 + r3;
0x00029a1c ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x00029a1e adds r2, 1 | r2++;
0x00029a20 it eq |
| if (r2 != 1) {
0x00029a22 moveq sl, 0 | sl = 0;
| }
| if (r2 != 1) {
0x00029a26 bne 0x29aaa | goto label_76;
| }
| label_12:
0x00029a28 str.w sl, [lr, ip, lsl 2] | __asm ("str.w sl, [lr, ip, lsl 2]");
0x00029a2c cmp.w ip, 0 |
| if (ip != 0) {
0x00029a30 bne 0x29a40 | goto label_77;
| }
0x00029a32 cmp r8, sb |
| if (r8 == sb) {
0x00029a34 beq 0x29a94 | goto label_78;
| }
0x00029a36 ldr.w r3, [fp] | r3 = *(fp);
0x00029a3a mov.w ip, 1 |
0x00029a3e b 0x29a16 |
| } while (1);
| label_77:
0x00029a40 ldrd r3, r2, [sp, 0x60] | __asm ("ldrd r3, r2, [var_60h]");
0x00029a44 adds r1, 1 | r1++;
0x00029a46 add r3, r2 | r3 += r2;
0x00029a48 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00029a4a add r2, r3 | r2 += r3;
0x00029a4c str r2, [sp, 0x1c] | var_1ch = r2;
| label_15:
0x00029a4e ldr r3, [sp, 0x20] | r3 = var_20h;
0x00029a50 adds r7, 4 | r7 += 4;
0x00029a52 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00029a54 add.w fp, fp, 4 |
0x00029a58 adds r3, 1 | r3++;
0x00029a5a cmp r3, r2 |
0x00029a5c str r3, [sp, 0x20] | var_20h = r3;
| if (r3 != r2) {
0x00029a5e bne 0x29a0c | goto label_10;
| }
0x00029a60 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00029a62 ldr r7, [sp, 0x30] | r7 = var_30h;
0x00029a64 ldr.w lr, [sp, 0x1c] | lr = var_1ch;
0x00029a68 ldr r5, [sp, 0x34] | r5 = var_34h;
0x00029a6a ldr r6, [sp, 0x40] | r6 = var_40h;
0x00029a6c ldr r4, [sp, 0x38] | r4 = var_38h;
0x00029a6e ldr.w sl, [sp, 0x44] | sl = var_44h;
0x00029a72 str r1, [sp, 0x18] | var_18h = r1;
0x00029a74 str r3, [sp, 0x28] | var_28h = r3;
0x00029a76 cmp r1, 0 |
| if (r1 != 0) {
0x00029a78 bne.w 0x29c3c | goto label_79;
| }
0x00029a7c ldr r3, [sp, 0x18] | r3 = var_18h;
0x00029a7e vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00029a82 str r3, [r5, 0x20] | *((r5 + 0x20)) = r3;
0x00029a84 add.w r3, r5, 0x24 | r3 = r5 + 0x24;
0x00029a88 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
| label_22:
0x00029a8c ldr r0, [sp, 0x14] | r0 = var_14h;
0x00029a8e blx 0x1ded4 | fcn_0001ded4 ();
0x00029a92 b 0x29886 | goto label_11;
| label_78:
0x00029a94 ldr.w r3, [fp] | r3 = *(fp);
0x00029a98 mov.w ip, 1 |
0x00029a9c ldr r2, [sp, 0xc] | r2 = var_ch;
0x00029a9e adds r0, r2, r3 | r0 = r2 + r3;
| label_13:
0x00029aa0 ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x00029aa2 mov.w sl, 0 | sl = 0;
0x00029aa6 adds r2, 1 | r2++;
| if (r2 == 1) {
0x00029aa8 beq 0x29a28 | goto label_12;
| }
| label_76:
0x00029aaa add.w r6, r0, 0xc | r6 = r0 + 0xc;
0x00029aae movs r3, 0 | r3 = 0;
0x00029ab0 mov sl, r1 | sl = r1;
0x00029ab2 str r7, [sp, 0x18] | var_18h = r7;
0x00029ab4 strd lr, ip, [sp, 0x28] | __asm ("strd lr, ip, [var_28h]");
0x00029ab8 b 0x29acc |
| while (r3 != r2) {
0x00029aba cmp r2, r4 |
| if (r2 >= r4) {
0x00029abc bhs 0x29afc | goto label_80;
| }
0x00029abe ldr.w r0, [r5, r2, lsl 2] | offset_2 = r2 << 2;
| r0 = *((r5 + offset_2));
0x00029ac2 adds r6, 8 | r6 += 8;
| if (r0 == 0) {
0x00029ac4 cbz r0, 0x29b0a | goto label_81;
| }
0x00029ac6 bl 0x6ae40 | r0 = strlen ();
0x00029aca adds r3, r0, r7 | r3 = r0 + r7;
0x00029acc ldrd r0, r2, [r6, -0x8] | __asm ("ldrd r0, r2, [r6, -0x8]");
0x00029ad0 cmp r8, sb |
0x00029ad2 ittte ne |
| if (r8 != sb) {
0x00029ad4 revne r0, r0 | __asm ("revne r0, r0");
| }
| if (r8 != sb) {
0x00029ad6 revne r2, r2 | __asm ("revne r2, r2");
| }
| if (r8 == sb) {
0x00029ad8 addne r7, r3, r0 | r7 = r3 + r0;
| }
| if (r8 != sb) {
0x00029ada addeq r7, r0, r3 | r7 = r0 + r3;
| }
0x00029adc adds r3, r2, 1 | r3 = r2 + 1;
0x00029ade bne 0x29aba |
| }
0x00029ae0 mov r1, sl | r1 = sl;
0x00029ae2 ldr.w ip, [sp, 0x2c] | ip = var_2ch;
0x00029ae6 mov sl, r7 | sl = r7;
0x00029ae8 ldr.w lr, [sp, 0x28] | lr = var_28h;
0x00029aec ldr r7, [sp, 0x18] | r7 = var_18h;
0x00029aee b 0x29a28 | goto label_12;
| label_75:
0x00029af0 ldr r3, [r7] | r3 = *(r7);
0x00029af2 mov.w ip, 0 |
0x00029af6 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00029af8 adds r0, r2, r3 | r0 = r2 + r3;
0x00029afa b 0x29aa0 | goto label_13;
| label_80:
0x00029afc ldr r0, [sp, 0x14] | r0 = var_14h;
0x00029afe ldrd r7, r5, [sp, 0x30] | __asm ("ldrd r7, r5, [var_34h]");
0x00029b02 ldr r4, [sp, 0x38] | r4 = var_38h;
0x00029b04 blx 0x1ded4 | fcn_0001ded4 ();
0x00029b08 b 0x298d2 | goto label_14;
| label_81:
0x00029b0a ldr r7, [sp, 0x18] | r7 = var_18h;
0x00029b0c mov r1, sl | r1 = sl;
0x00029b0e ldr.w lr, [sp, 0x28] | lr = var_28h;
0x00029b12 b 0x29a4e | goto label_15;
| label_74:
0x00029b14 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00029b16 add r0, r2 | r0 += r2;
0x00029b18 add r1, r2 | r1 += r2;
0x00029b1a b 0x299e0 | goto label_16;
| label_61:
0x00029b1c ldrb r3, [r3, 5] | r3 = *((r3 + 5));
0x00029b1e cmp r3, 0 |
| if (r3 != 0) {
0x00029b20 bne 0x29c20 | goto label_82;
| }
0x00029b22 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00029b24 sub.w sb, r3, 0x58 | sb = r3 - 0x58;
0x00029b28 cmp.w sb, 0x20 |
| if (sb > 0x20) {
0x00029b2c bhi.w 0x2a6be | goto label_83;
| }
| /* switch table (34 cases) at 0x29b34 */
0x00029b30 tbh [pc, sb, lsl 1] | __asm ("tbh [pc, sb, lsl 1]");
0x00029b76 ldr r2, [pc, 0x48] |
0x00029b78 add r2, pc | r2 = 0x5373e;
0x00029b7a b 0x2973c | goto label_0;
0x00029b7c ldr r2, [pc, 0x44] |
0x00029b7e add r2, pc | r2 = 0x53746;
0x00029b80 b 0x2973c | goto label_0;
0x00029b82 ldr r2, [pc, 0x44] |
0x00029b84 add r2, pc | r2 = 0x53752;
0x00029b86 b 0x2973c | goto label_0;
0x00029b88 ldr r2, [pc, 0x40] |
0x00029b8a add r2, pc | r2 = 0x5375a;
0x00029b8c b 0x2973c | goto label_0;
0x00029b8e ldr r2, [pc, 0x40] |
0x00029b90 add r2, pc | r2 = 0x53766;
0x00029b92 b 0x2973c | goto label_0;
| label_62:
0x00029bd4 ldrb r2, [r3, 5] | r2 = *((r3 + 5));
0x00029bd6 cmp r2, 0x36 |
0x00029bd8 it ne |
| if (r2 != 0x36) {
0x00029bda movne r2, 0 | r2 = 0;
| goto label_84;
| }
| if (r2 != 0x36) {
| label_84:
0x00029bdc bne.w 0x2973c | goto label_0;
| }
0x00029be0 ldrb r3, [r3, 6] | r3 = *((r3 + 6));
0x00029be2 cmp r3, 0 |
| if (r3 == 0) {
0x00029be4 beq.w 0x29ed0 | goto label_85;
| }
0x00029be8 movs r2, 0 | r2 = 0;
0x00029bea b 0x2973c | goto label_0;
| label_66:
0x00029bec ldrb r2, [r3, 5] | r2 = *((r3 + 5));
0x00029bee cmp r2, 0x41 |
0x00029bf0 it ne |
| if (r2 != 0x41) {
0x00029bf2 movne r2, 0 | r2 = 0;
| goto label_86;
| }
| if (r2 != 0x41) {
| label_86:
0x00029bf4 bne.w 0x2973c | goto label_0;
| }
0x00029bf8 ldrb r2, [r3, 6] | r2 = *((r3 + 6));
0x00029bfa cmp r2, 0x53 |
| if (r2 == 0x53) {
0x00029bfc beq.w 0x29fd4 | goto label_87;
| }
0x00029c00 movs r2, 0 | r2 = 0;
0x00029c02 b 0x2973c | goto label_0;
| label_65:
0x00029c04 ldrb r2, [r3, 5] | r2 = *((r3 + 5));
0x00029c06 cmp r2, 0x45 |
0x00029c08 it ne |
| if (r2 != 0x45) {
0x00029c0a movne r2, 0 | r2 = 0;
| goto label_88;
| }
| if (r2 != 0x45) {
| label_88:
0x00029c0c bne.w 0x2973c | goto label_0;
| }
0x00029c10 ldrb r2, [r3, 6] | r2 = *((r3 + 6));
0x00029c12 cmp r2, 0x41 |
| if (r2 == 0x41) {
0x00029c14 beq.w 0x2a03a | goto label_89;
| }
0x00029c18 movs r2, 0 | r2 = 0;
0x00029c1a b 0x2973c | goto label_0;
| label_60:
0x00029c1c mov r2, sb | r2 = sb;
0x00029c1e b 0x2973c | goto label_0;
| label_82:
0x00029c20 movs r2, 0 | r2 = 0;
0x00029c22 b 0x2973c | goto label_0;
| label_63:
0x00029c24 ldrb r2, [r3, 5] | r2 = *((r3 + 5));
0x00029c26 cmp r2, 0x32 |
| if (r2 == 0x32) {
0x00029c28 beq.w 0x29ec8 | goto label_90;
| }
0x00029c2c movs r2, 0 | r2 = 0;
0x00029c2e b 0x2973c | goto label_0;
| label_64:
0x00029c30 ldrb r2, [r3, 5] | r2 = *((r3 + 5));
0x00029c32 cmp r2, 0x34 |
| if (r2 == 0x34) {
0x00029c34 beq.w 0x29f24 | goto label_91;
| }
0x00029c38 movs r2, 0 | r2 = 0;
0x00029c3a b 0x2973c | goto label_0;
| label_79:
0x00029c3c add.w r0, lr, r1, lsl 4 | r0 = lr + (r1 << 4);
0x00029c40 blx 0x1df60 | fcn_0001df60 ();
0x00029c44 str r0, [sp, 0x1c] | var_1ch = r0;
0x00029c46 cmp r0, 0 |
| if (r0 == 0) {
0x00029c48 beq.w 0x298d2 | goto label_14;
| }
0x00029c4c ldr r3, [sp, 0x18] | r3 = var_18h;
0x00029c4e movw ip, 0x12de |
0x00029c52 movt ip, 0x9504 | ip = 0x950412de;
0x00029c56 str r0, [r5, 0x10] | *((r5 + 0x10)) = r0;
0x00029c58 strd r7, r5, [sp, 0x2c] | __asm ("strd r7, r5, [var_30h]");
0x00029c5c mov r5, ip | r5 = ip;
0x00029c5e str r6, [sp, 0x38] | var_38h = r6;
0x00029c60 mov.w lr, 0 | lr = 0;
0x00029c64 add.w sb, r0, r3, lsl 4 | sb = r0 + (r3 << 4);
0x00029c68 add.w r3, r0, r3, lsl 3 | r3 = r0 + (r3 << 3);
0x00029c6c ldr r7, [sp, 0x4c] | r7 = var_4ch;
0x00029c6e add.w fp, sb, r6 |
0x00029c72 str.w sb, [sp, 0x3c] | __asm ("str.w sb, [var_3ch]");
0x00029c76 ldr r6, [sp, 0x14] | r6 = var_14h;
0x00029c78 mov r0, lr | r0 = lr;
0x00029c7a ldr.w sb, [sp, 0x48] | sb = var_48h;
0x00029c7e ldr.w ip, [sp, 0xc] | ip = var_ch;
0x00029c82 str r3, [sp, 0x20] | var_20h = r3;
0x00029c84 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00029c86 strd r4, sl, [sp, 0x40] | __asm ("strd r4, sl, [var_40h]");
0x00029c8a mov sl, lr | sl = lr;
0x00029c8c str r3, [sp, 0x34] | var_34h = r3;
| label_20:
0x00029c8e cmp r8, r5 |
| if (r8 == r5) {
0x00029c90 beq 0x29d04 | goto label_92;
| }
0x00029c92 ldr.w r3, [sb] | r3 = *(sb);
0x00029c96 rev r3, r3 | r3 = SWAP32 (r3);
0x00029c98 add r3, ip | r3 += ip;
0x00029c9a ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00029c9c adds r2, 1 | r2++;
| if (r2 != 1) {
0x00029c9e bne 0x29d10 | goto label_93;
| }
| label_18:
0x00029ca0 ldr r3, [r7] | r3 = *(r7);
0x00029ca2 rev r3, r3 | r3 = SWAP32 (r3);
| label_19:
0x00029ca4 add r3, ip | r3 += ip;
0x00029ca6 movs r1, 1 | r1 = 1;
0x00029ca8 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00029caa adds r2, 1 | r2++;
| if (r2 != 1) {
0x00029cac bne 0x29d12 | goto label_94;
| }
| label_17:
0x00029cae lsls r3, r0, 3 | r3 = r0 << 3;
0x00029cb0 cmp r8, r5 |
0x00029cb2 str r3, [sp, 0x28] | var_28h = r3;
| if (r8 == r5) {
0x00029cb4 beq.w 0x29e98 | goto label_95;
| }
0x00029cb8 ldr.w r3, [sb] | r3 = *(sb);
0x00029cbc lsls r2, r0, 3 | r2 = r0 << 3;
0x00029cbe rev r4, r3 | r3 = SWAP32 (r4);
0x00029cc0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00029cc2 adds r1, r3, r2 | r1 = r3 + r2;
0x00029cc4 ldr.w r2, [ip, r4] | r2 = *((ip + r4));
0x00029cc8 add r4, ip | r4 += ip;
0x00029cca rev r2, r2 | r2 = SWAP32 (r2);
0x00029ccc add.w lr, ip, r2 | lr = ip + r2;
0x00029cd0 movs r2, 0 | r2 = 0;
| do {
0x00029cd2 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00029cd4 adds r3, 1 | r3++;
| if (r3 != 1) {
0x00029cd6 bne.w 0x29e28 | goto label_96;
| }
0x00029cd8 strh r7, [r4, 4] | *((r4 + 4)) = r7;
0x00029cda ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00029cdc rev r3, r3 | r3 = SWAP32 (r3);
| label_23:
0x00029cde strd r3, lr, [r1] | __asm ("strd r3, lr, [r1]");
| if (r2 != 0) {
| label_25:
0x00029ce2 cbnz r2, 0x29d36 | goto label_97;
| }
0x00029ce4 cmp r8, r5 |
| if (r8 == r5) {
0x00029ce6 beq.w 0x29e0a | goto label_98;
| }
0x00029cea ldr r3, [r7] | r3 = *(r7);
0x00029cec ldr r2, [sp, 0x28] | r2 = var_28h;
0x00029cee rev r4, r3 | r3 = SWAP32 (r4);
0x00029cf0 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00029cf2 adds r1, r3, r2 | r1 = r3 + r2;
0x00029cf4 ldr.w r2, [ip, r4] | r2 = *((ip + r4));
0x00029cf8 add r4, ip | r4 += ip;
0x00029cfa rev r2, r2 | r2 = SWAP32 (r2);
0x00029cfc add.w lr, ip, r2 | lr = ip + r2;
0x00029d00 movs r2, 1 | r2 = 1;
0x00029d02 b 0x29cd2 |
| } while (1);
| label_92:
0x00029d04 ldr.w r3, [sb] | r3 = *(sb);
0x00029d08 add r3, ip | r3 += ip;
0x00029d0a ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00029d0c adds r2, 1 | r2++;
| if (r2 == 1) {
0x00029d0e beq 0x29d32 | goto label_99;
| }
| label_93:
0x00029d10 movs r1, 0 | r1 = 0;
| label_94:
0x00029d12 adds r2, r3, 4 | r2 = r3 + 4;
0x00029d14 b 0x29d1e |
| while (r4 != r3) {
0x00029d16 ldr.w r3, [r6, r3, lsl 2] | offset_3 = r3 << 2;
| r3 = *((r6 + offset_3));
| if (r3 == 0) {
0x00029d1a cbz r3, 0x29d38 | goto label_100;
| }
0x00029d1c adds r2, 8 | r2 += 8;
0x00029d1e ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00029d20 cmp r8, r5 |
0x00029d22 it ne |
| if (r8 != r5) {
0x00029d24 revne r3, r3 | __asm ("revne r3, r3");
| }
0x00029d26 adds r4, r3, 1 | r4 = r3 + 1;
0x00029d28 bne 0x29d16 |
| }
0x00029d2a cmp r1, 0 |
| if (r1 != 0) {
0x00029d2c bne 0x29cae | goto label_17;
| }
0x00029d2e cmp r8, r5 |
| if (r8 != r5) {
0x00029d30 bne 0x29ca0 | goto label_18;
| }
| label_99:
0x00029d32 ldr r3, [r7] | r3 = *(r7);
0x00029d34 b 0x29ca4 | goto label_19;
| label_97:
0x00029d36 adds r0, 1 | r0++;
| label_100:
0x00029d38 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00029d3a add.w sl, sl, 1 | sl++;
0x00029d3e add.w sb, sb, 4 | sb += 4;
0x00029d42 adds r7, 4 | r7 += 4;
0x00029d44 cmp sl, r3 |
| if (sl != r3) {
0x00029d46 bne 0x29c8e | goto label_20;
| }
0x00029d48 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00029d4a ldr r7, [sp, 0x2c] | r7 = var_2ch;
0x00029d4c ldrd r5, r3, [sp, 0x30] | __asm ("ldrd r5, r3, [var_34h]");
0x00029d50 cmp r2, r0 |
0x00029d52 ldrd r6, sb, [sp, 0x38] | __asm ("ldrd r6, sb, [var_38h]");
0x00029d56 ldrd r4, sl, [sp, 0x40] | __asm ("ldrd r4, sl, [var_40h]");
| if (r2 != r0) {
0x00029d5a bne.w 0x2a6be | goto label_83;
| }
0x00029d5c strh r0, [r6, 0x24] | *((r6 + 0x24)) = r0;
0x00029d5e movw ip, 0x12de |
0x00029d62 adds r2, r3, r6 | r2 = r3 + r6;
0x00029d64 movt ip, 0x9504 | ip = 0x950412de;
0x00029d68 sub.w r0, sb, 4 | r0 = sb - 4;
| do {
0x00029d6c ldr r1, [r3], 4 | r1 = *(r3);
| r3 += 4;
0x00029d70 cmp r8, ip |
0x00029d72 it ne |
| if (r8 != ip) {
0x00029d74 revne r1, r1 | __asm ("revne r1, r1");
| }
0x00029d76 cmp r2, r3 |
0x00029d78 str r1, [r0, 4]! | *((r0 += 4)) = r1;
0x00029d7c bne 0x29d6c |
| } while (r2 != r3);
0x00029d7e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00029d80 mov.w fp, 0 |
0x00029d84 str r7, [sp, 0x24] | var_24h = r7;
0x00029d86 ldr r7, [sp, 0x18] | r7 = var_18h;
0x00029d88 adds r3, 4 | r3 += 4;
0x00029d8a strd r4, sl, [sp, 0x28] | __asm ("strd r4, sl, [var_28h]");
0x00029d8e mov sl, fp | sl = fp;
0x00029d90 mov r4, r3 | r4 = r3;
| label_21:
0x00029d92 ldr.w r0, [r4, sl, lsl 3] | offset_4 = sl << 3;
| r0 = *((r4 + offset_4));
0x00029d96 bl 0x2b9a8 | fcn_0002b9a8 (r0);
0x00029d98 mcr2 p8, 0, pc, c7, c5, 6 | __asm ("mcr2 p8, 0, pc, c7, c5, 6");
0x00029d9c add sp, 0xb0 |
0x00029d9e mov r8, r0 | r8 = r0;
0x00029da0 mov r1, fp | r1 = fp;
0x00029da2 bl 0xdc9dc | fcn_000dc9dc (r0, r1, r2);
0x00029da6 mov r0, r8 | r0 = r8;
0x00029da8 mov r6, r1 | r6 = r1;
0x00029daa sub.w r1, fp, 2 | r1 = fp - 2;
0x00029dae bl 0xdc9dc | fcn_000dc9dc (r0, r1, r2);
0x00029db2 add.w ip, r1, 1 |
0x00029db6 ldr.w r1, [sb, r6, lsl 2] | offset_5 = r6 << 2;
| r1 = *((sb + offset_5));
0x00029dba add.w r0, sb, r6, lsl 2 | r0 = sb + (r6 << 2);
0x00029dbe sub.w lr, fp, ip | lr = fp - ip;
0x00029dc2 sub.w r3, ip, fp | r3 = ip - fp;
| if (r1 == 0) {
0x00029dc6 cbz r1, 0x29ddc | goto label_101;
| }
| do {
0x00029dc8 cmp lr, r6 |
0x00029dca ite ls |
| if (lr > r6) {
0x00029dcc addls r6, r6, r3 | r6 += r3;
| }
| if (lr <= r6) {
0x00029dce addhi r6, ip | r6 += ip;
| }
0x00029dd0 ldr.w r2, [sb, r6, lsl 2] | offset_6 = r6 << 2;
| r2 = *((sb + offset_6));
0x00029dd4 add.w r0, sb, r6, lsl 2 | r0 = sb + (r6 << 2);
0x00029dd8 cmp r2, 0 |
0x00029dda bne 0x29dc8 |
| } while (r2 != 0);
| label_101:
0x00029ddc ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00029dde adds r3, 1 | r3++;
0x00029de0 add r3, sl | r3 += sl;
0x00029de2 add.w sl, sl, 1 | sl++;
0x00029de6 cmp r7, sl |
0x00029de8 str r3, [r0] | *(r0) = r3;
| if (r7 != sl) {
0x00029dea bne 0x29d92 | goto label_21;
| }
0x00029dec ldr r3, [sp, 0x18] | r3 = var_18h;
0x00029dee ldrd r7, r4, [sp, 0x24] | __asm ("ldrd r7, r4, [var_24h]");
0x00029df2 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x00029df6 str r3, [r5, 0x20] | *((r5 + 0x20)) = r3;
0x00029df8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00029dfa str.w sb, [r5, 0x30] | __asm ("str.w sb, [r5, 0x30]");
0x00029dfe str r3, [r5, 0x24] | *((r5 + 0x24)) = r3;
0x00029e00 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00029e02 str r3, [r5, 0x28] | *((r5 + 0x28)) = r3;
0x00029e04 movs r3, 0 | r3 = 0;
0x00029e06 str r3, [r5, 0x34] | *((r5 + 0x34)) = r3;
0x00029e08 b 0x29a8c | goto label_22;
| label_98:
0x00029e0a ldr r4, [r7] | r4 = *(r7);
0x00029e0c ldr r3, [sp, 0x20] | r3 = var_20h;
0x00029e0e ldr r2, [sp, 0x28] | r2 = var_28h;
0x00029e10 adds r1, r3, r2 | r1 = r3 + r2;
0x00029e12 ldr.w r3, [ip, r4] | r3 = *((ip + r4));
0x00029e16 movs r2, 1 | r2 = 1;
0x00029e18 add r4, ip | r4 += ip;
0x00029e1a add.w lr, ip, r3 | lr = ip + r3;
| label_26:
0x00029e1e ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00029e20 adds r3, 1 | r3++;
| if (r3 == 1) {
0x00029e22 bne 0x29e28 |
0x00029e24 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00029e26 b 0x29cde | goto label_23;
| }
| label_96:
0x00029e28 strd sb, r2, [sp, 0x48] | __asm ("strd sb, r2, [var_4ch]");
0x00029e2c adds r4, 0xc | r4 += 0xc;
0x00029e2e str.w sl, [sp, 0x58] | __asm ("str.w sl, [var_58h]");
0x00029e32 mov sb, lr | sb = lr;
0x00029e34 mov sl, r1 | sl = r1;
0x00029e36 str.w fp, [r1, 4] | __asm ("str.w fp, [r1, 4]");
0x00029e3a strd r0, ip, [sp, 0x50] | __asm ("strd r0, ip, [var_50h]");
0x00029e3e str r7, [sp, 0x5c] | var_5ch = r7;
0x00029e40 b 0x29e60 |
| while (r2 == 0) {
| label_24:
0x00029e42 adds r2, r7, 1 | r2 = r7 + 1;
0x00029e44 add.w r4, r4, 8 | r4 += 8;
| if (r2 == r7) {
0x00029e48 beq 0x29e7e | goto label_102;
| }
0x00029e4a ldr.w r7, [r6, r7, lsl 2] | offset_7 = r7 << 2;
| r7 = *((r6 + offset_7));
0x00029e4e mov r0, r7 | r0 = r7;
0x00029e50 bl 0x6ae40 | strlen ();
0x00029e54 mov r1, r7 | r1 = r7;
0x00029e56 mov r2, r0 | r2 = r0;
0x00029e58 mov r0, fp | r0 = fp;
0x00029e5a add fp, r2 |
0x00029e5c blx 0x6d540 | memcpy (r0, r1, r2);
0x00029e60 ldrd r2, r7, [r4, -0x8] | __asm ("ldrd r2, r7, [r4, -0x8]");
0x00029e64 cmp r8, r5 |
0x00029e66 itt ne |
| if (r8 != r5) {
0x00029e68 revne r2, r2 | __asm ("revne r2, r2");
| }
| if (r8 != r5) {
0x00029e6a revne r7, r7 | __asm ("revne r7, r7");
| }
0x00029e6c cmp r2, 0 |
0x00029e6e beq 0x29e42 |
| }
0x00029e70 mov r1, sb | r1 = sb;
0x00029e72 mov r0, fp | r0 = fp;
0x00029e74 add sb, r2 | sb += r2;
0x00029e76 add fp, r2 |
0x00029e78 blx 0x6d540 | memcpy (r0, r1, r2);
0x00029e7c b 0x29e42 | goto label_24;
| label_102:
0x00029e7e mov r1, sl | r1 = sl;
0x00029e80 ldrd sb, r2, [sp, 0x48] | __asm ("ldrd sb, r2, [var_4ch]");
0x00029e84 ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x00029e86 ldrd r0, ip, [sp, 0x50] | __asm ("ldrd r0, ip, [var_50h]");
0x00029e8a ldr r7, [sp, 0x5c] | r7 = var_5ch;
0x00029e8c sub.w r3, fp, r3 | r3 = fp - r3;
0x00029e90 ldr.w sl, [sp, 0x58] | sl = var_58h;
0x00029e94 str r3, [r1] | *(r1) = r3;
0x00029e96 b 0x29ce2 | goto label_25;
| label_95:
0x00029e98 ldr.w r4, [sb] | r4 = *(sb);
0x00029e9c lsls r2, r0, 3 | r2 = r0 << 3;
0x00029e9e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00029ea0 adds r1, r3, r2 | r1 = r3 + r2;
0x00029ea2 ldr.w r3, [ip, r4] | r3 = *((ip + r4));
0x00029ea4 adds r0, 4 | r0 += 4;
0x00029ea6 movs r2, 0 | r2 = 0;
0x00029ea8 add r4, ip | r4 += ip;
0x00029eaa add.w lr, ip, r3 | lr = ip + r3;
0x00029eae b 0x29e1e | goto label_26;
| label_59:
0x00029eb0 ldrb r2, [r3, 4] | r2 = *((r3 + 4));
0x00029eb2 cmp r2, 0x38 |
| if (r2 != 0x38) {
0x00029eb4 bne.w 0x297c6 | goto label_27;
| }
0x00029eb8 ldrb r3, [r3, 5] | r3 = *((r3 + 5));
0x00029eba cmp r3, 0 |
| if (r3 == 0) {
0x00029ebc bne.w 0x2a08a |
0x00029ec0 ldr.w r2, [pc, 0x800] |
0x00029ec4 add r2, pc | r2 = 0x5458c;
0x00029ec6 b 0x2973c | goto label_0;
| label_90:
0x00029ec8 ldrb r3, [r3, 6] | r3 = *((r3 + 6));
| if (r3 != 0) {
0x00029eca cbz r3, 0x29f2c |
0x00029ecc movs r2, 0 | r2 = 0;
0x00029ece b 0x2973c | goto label_0;
| label_85:
0x00029ed0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00029ed2 sub.w sb, r3, 0x58 | sb = r3 - 0x58;
0x00029ed6 cmp.w sb, 0x20 |
| if (sb > 0x20) {
0x00029eda bhi.w 0x2a6be | goto label_83;
| }
| /* switch table (34 cases) at 0x29ee2 */
0x00029ede tbh [pc, sb, lsl 1] | __asm ("tbh [pc, sb, lsl 1]");
| label_91:
0x00029f24 ldrb r3, [r3, 6] | r3 = *((r3 + 6));
| if (r3 == 0) {
0x00029f26 cbz r3, 0x29f80 | goto label_103;
| }
0x00029f28 movs r2, 0 | r2 = 0;
0x00029f2a b 0x2973c | goto label_0;
| }
0x00029f2c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00029f2e sub.w sb, r3, 0x58 | sb = r3 - 0x58;
0x00029f32 cmp.w sb, 0x20 |
| if (sb > 0x20) {
0x00029f36 bhi.w 0x2a6be | goto label_83;
| }
| /* switch table (34 cases) at 0x29f3e */
0x00029f3a tbh [pc, sb, lsl 1] | __asm ("tbh [pc, sb, lsl 1]");
| label_103:
0x00029f80 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00029f82 sub.w sb, r3, 0x58 | sb = r3 - 88;
0x00029f86 cmp.w sb, 0x20 |
| if (sb > 0x20) {
0x00029f8a bhi.w 0x2a6be | goto label_83;
| }
| /* switch table (34 cases) at 0x29f92 */
0x00029f8e tbh [pc, sb, lsl 1] | __asm ("tbh [pc, sb, lsl 1]");
| label_87:
0x00029fd4 ldrb r2, [r3, 7] | r2 = *((r3 + 7));
0x00029fd6 cmp r2, 0x54 |
| if (r2 != 84) {
0x00029fd8 beq 0x2a062 |
0x00029fda movs r2, 0 | r2 = 0;
0x00029fdc b.w 0x2973c | goto label_0;
| label_69:
0x00029fe0 ldrb r3, [r3, 7] | r3 = *((r3 + 7));
0x00029fe2 cmp r3, 0 |
| if (r3 != 0) {
0x00029fe4 bne 0x2a090 | goto label_104;
| }
0x00029fe6 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00029fe8 sub.w sb, r3, 0x58 | sb = r3 - 0x58;
0x00029fec cmp.w sb, 0x20 |
| if (sb > 0x20) {
0x00029ff0 bhi.w 0x2a6be | goto label_83;
| }
| /* switch table (34 cases) at 0x29ff8 */
0x00029ff4 tbh [pc, sb, lsl 1] | __asm ("tbh [pc, sb, lsl 1]");
| label_89:
0x0002a03a ldrb r2, [r3, 7] | r2 = *((r3 + 7));
0x0002a03c cmp r2, 0x53 |
| if (r2 != 83) {
0x0002a03e beq 0x2a054 |
0x0002a040 movs r2, 0 | r2 = 0;
0x0002a042 b.w 0x2973c | goto label_0;
| label_52:
0x0002a046 ldr.w r3, [pc, 0x680] | r3 = *(0x0002a6c8);
0x0002a04a add r3, pc | r3 += pc;
0x0002a04c ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0002a04e subs r3, 1 | r3--;
0x0002a050 b.w 0x2980c | goto label_2;
| }
0x0002a054 ldrb r2, [r3, 8] | r2 = *((r3 + 8));
0x0002a056 cmp r2, 0x54 |
| if (r2 == 0x54) {
0x0002a058 beq.w 0x2a472 | goto label_105;
| }
0x0002a05c movs r2, 0 | r2 = 0;
0x0002a05e b.w 0x2973c | goto label_0;
| if (r5 != 0) {
0x0002a060 cbnz r5, 0x2a0be | goto label_106;
| }
| }
0x0002a062 ldrb r2, [r3, 8] | r2 = *((r3 + 8));
0x0002a064 cmp r2, 0x38 |
| if (r2 == 0x38) {
0x0002a066 beq.w 0x2a27e | goto label_107;
| }
0x0002a06a cmp r2, 0x31 |
| if (r2 == 0x31) {
0x0002a06c beq.w 0x2a272 | goto label_108;
| }
0x0002a070 cmp r2, 0x33 |
| if (r2 == 0x33) {
0x0002a072 beq.w 0x2a3a0 | goto label_109;
| }
0x0002a076 cmp r2, 0x36 |
| if (r2 != 0x36) {
0x0002a078 bne.w 0x2a26c | goto label_110;
| }
0x0002a07c ldrb r2, [r3, 9] | r2 = *((r3 + 9));
0x0002a07e cmp r2, 0x34 |
| if (r2 == 0x34) {
0x0002a080 beq.w 0x2a210 | goto label_111;
| }
0x0002a084 movs r2, 0 | r2 = 0;
0x0002a086 b.w 0x2973c | goto label_0;
| }
0x0002a08a mov r2, sb | r2 = sb;
0x0002a08c b.w 0x2973c | goto label_0;
| label_104:
0x0002a090 movs r2, 0 | r2 = 0;
0x0002a092 b.w 0x2973c | goto label_0;
0x0002a096 ldr.w r2, [pc, 0x634] | r2 = *(0x0002a6cc);
0x0002a09a add r2, pc | r2 += pc;
0x0002a09c b.w 0x2973c | goto label_0;
0x0002a0a0 ldr.w r2, [pc, 0x62c] |
0x0002a0a4 add r2, pc | r2 = 0x54778;
0x0002a0a6 b.w 0x2973c | goto label_0;
0x0002a0aa ldr.w r2, [pc, 0x628] | r2 = *(0x0002a6d4);
0x0002a0ae add r2, pc | r2 += pc;
0x0002a0b0 b.w 0x2973c | goto label_0;
0x0002a0b4 ldr.w r2, [pc, 0x620] |
0x0002a0b8 add r2, pc | r2 = 0x54794;
0x0002a0ba b.w 0x2973c | goto label_0;
| label_106:
0x0002a0be ldr.w r2, [pc, 0x61c] | r2 = *(0x0002a6dc);
0x0002a0c2 add r2, pc | r2 += pc;
0x0002a0c4 b.w 0x2973c | goto label_0;
0x0002a0c8 ldr.w r2, [pc, 0x614] |
0x0002a0cc add r2, pc | r2 = 0x547b0;
0x0002a0ce b.w 0x2973c | goto label_0;
0x0002a0d2 ldr.w r2, [pc, 0x610] | r2 = *(0x0002a6e4);
0x0002a0d6 add r2, pc | r2 += pc;
0x0002a0d8 b.w 0x2973c | goto label_0;
0x0002a0dc ldr.w r2, [pc, 0x608] |
0x0002a0e0 add r2, pc | r2 = 0x547cc;
0x0002a0e2 b.w 0x2973c | goto label_0;
0x0002a0e6 ldr.w r2, [pc, 0x604] | r2 = *(0x0002a6ec);
0x0002a0ea add r2, pc | r2 += pc;
0x0002a0ec b.w 0x2973c | goto label_0;
0x0002a0f0 ldr.w r2, [pc, 0x5fc] |
0x0002a0f4 add r2, pc | r2 = 0x547e8;
0x0002a0f6 b.w 0x2973c | goto label_0;
0x0002a0fa ldr.w r2, [pc, 0x5f8] | r2 = *(0x0002a6f4);
0x0002a0fe add r2, pc | r2 += pc;
0x0002a100 b.w 0x2973c | goto label_0;
0x0002a104 ldr.w r2, [pc, 0x5f0] |
0x0002a108 add r2, pc | r2 = 0x54804;
0x0002a10a b.w 0x2973c | goto label_0;
0x0002a10e ldr.w r2, [pc, 0x5ec] | r2 = *(0x0002a6fc);
0x0002a112 add r2, pc | r2 += pc;
0x0002a114 b.w 0x2973c | goto label_0;
0x0002a118 ldr.w r2, [pc, 0x5e4] |
0x0002a11c add r2, pc | r2 = 0x54820;
0x0002a11e b.w 0x2973c | goto label_0;
0x0002a122 ldr.w r2, [pc, 0x5e0] | r2 = *(0x0002a704);
0x0002a126 add r2, pc | r2 += pc;
0x0002a128 b.w 0x2973c | goto label_0;
0x0002a12c ldr.w r2, [pc, 0x5d8] |
0x0002a130 add r2, pc | r2 = 0x5483c;
0x0002a132 b.w 0x2973c | goto label_0;
0x0002a136 ldr.w r2, [pc, 0x5d4] | r2 = *(0x0002a70c);
0x0002a13a add r2, pc | r2 += pc;
0x0002a13c b.w 0x2973c | goto label_0;
0x0002a140 ldr.w r2, [pc, 0x5cc] |
0x0002a144 add r2, pc | r2 = 0x54858;
0x0002a146 b.w 0x2973c | goto label_0;
0x0002a14a ldr.w r2, [pc, 0x5c8] | r2 = *(0x0002a714);
0x0002a14e add r2, pc | r2 += pc;
0x0002a150 b.w 0x2973c | goto label_0;
0x0002a154 ldr.w r2, [pc, 0x5c0] |
0x0002a158 add r2, pc | r2 = 0x54874;
0x0002a15a b.w 0x2973c | goto label_0;
0x0002a15e ldr.w r2, [pc, 0x5bc] | r2 = *(0x0002a71c);
0x0002a162 add r2, pc | r2 += pc;
0x0002a164 b.w 0x2973c | goto label_0;
0x0002a168 ldr.w r2, [pc, 0x5b4] |
0x0002a16c add r2, pc | r2 = 0x54890;
0x0002a16e b.w 0x2973c | goto label_0;
| label_67:
0x0002a172 cmp r2, 0x50 |
| if (r2 != 0x50) {
0x0002a174 bne 0x2a1ec | goto label_112;
| }
0x0002a176 ldrb r2, [r3, 5] | r2 = *((r3 + 5));
0x0002a178 cmp r2, 0x54 |
0x0002a17a it ne |
| if (r2 != 0x54) {
0x0002a17c movne r2, 0 | r2 = 0;
| goto label_113;
| }
| if (r2 != 0x54) {
| label_113:
0x0002a17e bne.w 0x2973c | goto label_0;
| }
0x0002a182 ldrb r2, [r3, 6] | r2 = *((r3 + 6));
0x0002a184 cmp r2, 0x52 |
| if (r2 != 0x52) {
0x0002a186 beq 0x2a18e |
0x0002a188 movs r2, 0 | r2 = 0;
0x0002a18a b.w 0x2973c | goto label_0;
| }
0x0002a18e ldrb r3, [r3, 7] | r3 = *((r3 + 7));
| if (r3 == 0) {
0x0002a190 cbnz r3, 0x2a1e6 |
0x0002a192 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0002a194 sub.w sb, r3, 0x58 | sb = r3 - 0x58;
0x0002a198 cmp.w sb, 0x20 |
| if (sb > 0x20) {
0x0002a19c bhi.w 0x2a6be | goto label_83;
| }
| /* switch table (34 cases) at 0x2a1a4 */
0x0002a1a0 tbh [pc, sb, lsl 1] | __asm ("tbh [pc, sb, lsl 1]");
| }
0x0002a1e6 movs r2, 0 | r2 = 0;
0x0002a1e8 b.w 0x2973c | goto label_0;
| label_112:
0x0002a1ec movs r2, 0 | r2 = 0;
0x0002a1ee b.w 0x2973c | goto label_0;
0x0002a1f2 ldr.w r2, [pc, 0x530] | r2 = *(0x0002a724);
0x0002a1f6 add r2, pc | r2 += pc;
0x0002a1f8 b.w 0x2973c | goto label_0;
0x0002a1fc ldr.w r2, [pc, 0x528] |
0x0002a200 add r2, pc | r2 = 0x5492c;
0x0002a202 b.w 0x2973c | goto label_0;
0x0002a206 ldr.w r2, [pc, 0x524] | r2 = *(0x0002a72c);
0x0002a20a add r2, pc | r2 += pc;
0x0002a20c b.w 0x2973c | goto label_0;
| label_111:
0x0002a210 ldrb r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x0002a212 cmp r3, 0 |
| if (r3 != 0) {
0x0002a214 bne.w 0x2a46c | goto label_114;
| }
0x0002a218 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0002a21a sub.w sb, r3, 0x58 | sb = r3 - 0x58;
0x0002a21e cmp.w sb, 0x20 |
| if (sb > 0x20) {
0x0002a222 bhi.w 0x2a6be | goto label_83;
| }
| /* switch table (34 cases) at 0x2a22a */
0x0002a226 tbh [pc, sb, lsl 1] | __asm ("tbh [pc, sb, lsl 1]");
| label_110:
0x0002a26c movs r2, 0 | r2 = 0;
0x0002a26e b.w 0x2973c | goto label_0;
| label_108:
0x0002a272 ldrb r2, [r3, 9] | r2 = *((r3 + 9));
0x0002a274 cmp r2, 0x36 |
| if (r2 != 0x36) {
0x0002a276 beq 0x2a2da |
0x0002a278 movs r2, 0 | r2 = 0;
0x0002a27a b.w 0x2973c | goto label_0;
| label_107:
0x0002a27e ldrb r3, [r3, 9] | r3 = *((r3 + 9));
0x0002a280 cmp r3, 0 |
| if (r3 != 0) {
0x0002a282 bne.w 0x2a39a | goto label_115;
| }
0x0002a286 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0002a288 sub.w sb, r3, 0x58 | sb = r3 - 0x58;
0x0002a28c cmp.w sb, 0x20 |
| if (sb > 0x20) {
0x0002a290 bhi.w 0x2a6be | goto label_83;
| }
| /* switch table (34 cases) at 0x2a298 */
0x0002a294 tbh [pc, sb, lsl 1] | __asm ("tbh [pc, sb, lsl 1]");
| }
0x0002a2da ldrb r3, [r3, 0xa] | r3 = *((r3 + 0xa));
| if (r3 != 0) {
0x0002a2dc cbz r3, 0x2a2ee |
0x0002a2de movs r2, 0 | r2 = 0;
0x0002a2e0 b.w 0x2973c | goto label_0;
0x0002a2e4 ldr.w r2, [pc, 0x448] |
0x0002a2e8 add r2, pc | r2 = 0x54a1c;
0x0002a2ea b.w 0x2973c | goto label_0;
| }
0x0002a2ee ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0002a2f0 sub.w sb, r3, 0x58 | sb = r3 - 0x58;
0x0002a2f4 cmp.w sb, 0x20 |
| if (sb > 0x20) {
0x0002a2f8 bhi.w 0x2a6be | goto label_83;
| }
| /* switch table (34 cases) at 0x2a300 */
0x0002a2fc tbh [pc, sb, lsl 1] | __asm ("tbh [pc, sb, lsl 1]");
0x0002a342 ldr r2, [pc, 0x3f0] |
0x0002a344 add r2, pc | r2 = 0x54a7e;
0x0002a346 b.w 0x2973c | goto label_0;
0x0002a34a ldr r2, [pc, 0x3ec] |
0x0002a34c add r2, pc | r2 = 0x54a8a;
0x0002a34e b.w 0x2973c | goto label_0;
0x0002a352 ldr r2, [pc, 0x3e8] |
0x0002a354 add r2, pc | r2 = 0x54a96;
0x0002a356 b.w 0x2973c | goto label_0;
0x0002a35a ldr r2, [pc, 0x3e4] |
0x0002a35c add r2, pc | r2 = 0x54aa2;
0x0002a35e b.w 0x2973c | goto label_0;
| if (r5 != 0) {
0x0002a360 cbnz r5, 0x2a39e | void (*0x2a39e)() ();
| }
0x0002a362 ldr r2, [pc, 0x3e0] |
0x0002a364 add r2, pc | r2 = 0x54aae;
0x0002a366 b.w 0x2973c | goto label_0;
0x0002a36a ldr r2, [pc, 0x3dc] |
0x0002a36c add r2, pc | r2 = 0x54aba;
0x0002a36e b.w 0x2973c | goto label_0;
0x0002a372 ldr r2, [pc, 0x3d8] |
0x0002a374 add r2, pc | r2 = 0x54ac6;
0x0002a376 b.w 0x2973c | goto label_0;
0x0002a37a ldr r2, [pc, 0x3d4] |
0x0002a37c add r2, pc | r2 = 0x54ad2;
0x0002a37e b.w 0x2973c | goto label_0;
0x0002a382 ldr r2, [pc, 0x3d0] |
0x0002a384 add r2, pc | r2 = 0x54ade;
0x0002a386 b.w 0x2973c | goto label_0;
0x0002a38a ldr r2, [pc, 0x3cc] |
0x0002a38c add r2, pc | r2 = 0x54aea;
0x0002a38e b.w 0x2973c | goto label_0;
0x0002a392 ldr r2, [pc, 0x3c8] |
0x0002a394 add r2, pc | r2 = 0x54af6;
0x0002a396 b.w 0x2973c | goto label_0;
| label_115:
0x0002a39a movs r2, 0 | r2 = 0;
0x0002a39c b.w 0x2973c | goto label_0;
| label_109:
0x0002a3a0 ldrb r2, [r3, 9] | r2 = *((r3 + 9));
0x0002a3a2 cmp r2, 0x32 |
| if (r2 != 0x32) {
0x0002a3a4 beq 0x2a3b4 |
0x0002a3a6 movs r2, 0 | r2 = 0;
0x0002a3a8 b.w 0x2973c | goto label_0;
0x0002a3ac ldr r2, [pc, 0x3b0] |
0x0002a3ae add r2, pc | r2 = 0x54b12;
0x0002a3b0 b.w 0x2973c | goto label_0;
| }
0x0002a3b4 ldrb r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x0002a3b6 cmp r3, 0 |
| if (r3 == 0) {
0x0002a3b8 bne 0x2a44e |
0x0002a3ba ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0002a3bc sub.w sb, r3, 0x58 | sb = r3 - 0x58;
0x0002a3c0 cmp.w sb, 0x20 |
| if (sb > 0x20) {
0x0002a3c4 bhi.w 0x2a6be | goto label_83;
| }
| /* switch table (34 cases) at 0x2a3cc */
0x0002a3c8 tbh [pc, sb, lsl 1] | __asm ("tbh [pc, sb, lsl 1]");
0x0002a40e ldr r2, [pc, 0x354] |
0x0002a410 add r2, pc | r2 = 0x54b7a;
0x0002a412 b.w 0x2973c | goto label_0;
0x0002a416 ldr r2, [pc, 0x350] |
0x0002a418 add r2, pc | r2 = 0x54b86;
0x0002a41a b.w 0x2973c | goto label_0;
0x0002a41e ldr r2, [pc, 0x34c] |
0x0002a420 add r2, pc | r2 = 0x54b92;
0x0002a422 b.w 0x2973c | goto label_0;
0x0002a426 ldr r2, [pc, 0x348] |
0x0002a428 add r2, pc | r2 = 0x54b9e;
0x0002a42a b.w 0x2973c | goto label_0;
0x0002a42e ldr r2, [pc, 0x344] |
0x0002a430 add r2, pc | r2 = 0x54baa;
0x0002a432 b.w 0x2973c | goto label_0;
0x0002a436 ldr r2, [pc, 0x340] |
0x0002a438 add r2, pc | r2 = 0x54bb6;
0x0002a43a b.w 0x2973c | goto label_0;
0x0002a43e ldr r2, [pc, 0x33c] |
0x0002a440 add r2, pc | r2 = 0x54bc2;
0x0002a442 b.w 0x2973c | goto label_0;
0x0002a446 ldr r2, [pc, 0x338] |
0x0002a448 add r2, pc | r2 = 0x54bce;
0x0002a44a b.w 0x2973c | goto label_0;
| }
0x0002a44e movs r2, 0 | r2 = 0;
0x0002a450 b.w 0x2973c | goto label_0;
0x0002a454 ldr r2, [pc, 0x32c] |
0x0002a456 add r2, pc | r2 = 0x54bde;
0x0002a458 b.w 0x2973c | goto label_0;
0x0002a45c ldr r2, [pc, 0x328] |
0x0002a45e add r2, pc | r2 = 0x54bea;
0x0002a460 b.w 0x2973c | goto label_0;
0x0002a464 ldr r2, [pc, 0x324] |
0x0002a466 add r2, pc | r2 = 0x54bf6;
0x0002a468 b.w 0x2973c | goto label_0;
| label_114:
0x0002a46c movs r2, 0 | r2 = 0;
0x0002a46e b.w 0x2973c | goto label_0;
| label_105:
0x0002a472 ldrb r2, [r3, 9] | r2 = *((r3 + 9));
0x0002a474 cmp r2, 0x38 |
| if (r2 != 0x38) {
0x0002a476 beq 0x2a516 |
0x0002a478 cmp r2, 0x31 |
| if (r2 != 0x31) {
0x0002a47a beq 0x2a50a |
0x0002a47c cmp r2, 0x33 |
| if (r2 == 0x33) {
0x0002a47e bne 0x2a4f8 |
0x0002a480 ldrb r2, [r3, 0xa] | r2 = *((r3 + 0xa));
0x0002a482 cmp r2, 0x32 |
| if (r2 != 0x32) {
0x0002a484 beq 0x2a49c |
0x0002a486 movs r2, 0 | r2 = 0;
0x0002a488 b.w 0x2973c | goto label_0;
0x0002a48c ldr r2, [pc, 0x300] |
0x0002a48e add r2, pc | r2 = 0x54c22;
0x0002a490 b.w 0x2973c | goto label_0;
0x0002a494 ldr r2, [pc, 0x2fc] |
0x0002a496 add r2, pc | r2 = 0x54c2e;
0x0002a498 b.w 0x2973c | goto label_0;
| }
0x0002a49c ldrb r3, [r3, 0xb] | r3 = *((r3 + 0xb));
0x0002a49e cmp r3, 0 |
| if (r3 != 0) {
0x0002a4a0 bne.w 0x2a6b8 | goto label_116;
| }
0x0002a4a4 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0002a4a6 sub.w sb, r3, 0x58 | sb = r3 - 0x58;
0x0002a4aa cmp.w sb, 0x20 |
| if (sb > 0x20) {
0x0002a4ae bhi.w 0x2a6be | goto label_83;
| }
| /* switch table (34 cases) at 0x2a4b6 */
0x0002a4b2 tbh [pc, sb, lsl 1] | __asm ("tbh [pc, sb, lsl 1]");
| }
0x0002a4f8 cmp r2, 0x36 |
| if (r2 != 0x36) {
0x0002a4fa bne.w 0x2a62c | goto label_117;
| }
0x0002a4fe ldrb r2, [r3, 0xa] | r2 = *((r3 + 0xa));
0x0002a500 cmp r2, 0x34 |
| if (r2 == 0x34) {
0x0002a502 beq 0x2a5f6 | goto label_118;
| }
0x0002a504 movs r2, 0 | r2 = 0;
0x0002a506 b.w 0x2973c | goto label_0;
| }
0x0002a50a ldrb r2, [r3, 0xa] | r2 = *((r3 + 0xa));
0x0002a50c cmp r2, 0x36 |
| if (r2 == 0x36) {
0x0002a50e beq 0x2a550 | goto label_119;
| }
0x0002a510 movs r2, 0 | r2 = 0;
0x0002a512 b.w 0x2973c | goto label_0;
| }
0x0002a516 ldrb r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x0002a518 cmp r3, 0 |
| if (r3 == 0) {
0x0002a51a bne 0x2a5f0 |
0x0002a51c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0002a51e sub.w sb, r3, 0x58 | sb = r3 - 0x58;
0x0002a522 cmp.w sb, 0x20 |
| if (sb > 0x20) {
0x0002a526 bhi.w 0x2a6be | goto label_83;
| }
| /* switch table (33 cases) at 0x2a52e */
0x0002a52a tbb [pc, sb] | __asm ("tbb aav.0x000000ff");
| label_119:
0x0002a550 ldrb r3, [r3, 0xb] | r3 = *((r3 + 0xb));
0x0002a552 cmp r3, 0 |
| if (r3 == 0) {
0x0002a554 bne 0x2a5c2 |
0x0002a556 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0002a558 sub.w sb, r3, 0x58 | sb = r3 - 0x58;
0x0002a55c cmp.w sb, 0x20 |
| if (sb > 0x20) {
0x0002a560 bhi.w 0x2a6be | goto label_83;
| }
| /* switch table (33 cases) at 0x2a568 */
0x0002a564 tbb [pc, sb] | __asm ("tbb aav.0x000000ff");
0x0002a58a ldr r2, [pc, 0x20c] |
0x0002a58c add r2, pc | r2 = 0x54d2a;
0x0002a58e b.w 0x2973c | goto label_0;
0x0002a592 ldr r2, [pc, 0x208] |
0x0002a594 add r2, pc | r2 = 0x54d36;
0x0002a596 b.w 0x2973c | goto label_0;
0x0002a59a ldr r2, [pc, 0x204] |
0x0002a59c add r2, pc | r2 = 0x54d42;
0x0002a59e b.w 0x2973c | goto label_0;
0x0002a5a2 ldr r2, [pc, 0x200] |
0x0002a5a4 add r2, pc | r2 = 0x54d4e;
0x0002a5a6 b.w 0x2973c | goto label_0;
0x0002a5aa ldr r2, [pc, 0x1fc] |
0x0002a5ac add r2, pc | r2 = 0x54d5a;
0x0002a5ae b.w 0x2973c | goto label_0;
0x0002a5b2 ldr r2, [pc, 0x1f8] |
0x0002a5b4 add r2, pc | r2 = 0x54d66;
0x0002a5b6 b.w 0x2973c | goto label_0;
0x0002a5ba ldr r2, [pc, 0x1f4] |
0x0002a5bc add r2, pc | r2 = 0x54d72;
0x0002a5be b.w 0x2973c | goto label_0;
| }
0x0002a5c2 movs r2, 0 | r2 = 0;
0x0002a5c4 b.w 0x2973c | goto label_0;
0x0002a5c8 ldr r2, [pc, 0x1e8] |
0x0002a5ca add r2, pc | r2 = 0x54d82;
0x0002a5cc b.w 0x2973c | goto label_0;
0x0002a5d0 ldr r2, [pc, 0x1e4] |
0x0002a5d2 add r2, pc | r2 = 0x54d8e;
0x0002a5d4 b.w 0x2973c | goto label_0;
0x0002a5d8 ldr r2, [pc, 0x1e0] |
0x0002a5da add r2, pc | r2 = 0x54d9a;
0x0002a5dc b.w 0x2973c | goto label_0;
0x0002a5e0 ldr r2, [pc, 0x1dc] |
0x0002a5e2 add r2, pc | r2 = 0x54da6;
0x0002a5e4 b.w 0x2973c | goto label_0;
0x0002a5e8 ldr r2, [pc, 0x1d8] |
0x0002a5ea add r2, pc | r2 = 0x54db2;
0x0002a5ec b.w 0x2973c | goto label_0;
| }
0x0002a5f0 movs r2, 0 | r2 = 0;
0x0002a5f2 b.w 0x2973c | goto label_0;
| label_118:
0x0002a5f6 ldrb r3, [r3, 0xb] | r3 = *((r3 + 0xb));
| if (r3 == 0) {
0x0002a5f8 cbnz r3, 0x2a662 |
0x0002a5fa ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0002a5fc sub.w sb, r3, 0x58 | sb = r3 - 0x58;
0x0002a600 cmp.w sb, 0x20 |
| if (sb > 0x20) {
0x0002a604 bhi 0x2a6be | goto label_83;
| }
| /* switch table (33 cases) at 0x2a60a */
0x0002a606 tbb [pc, sb] | __asm ("tbb aav.0x000000ff");
| label_117:
0x0002a62c movs r2, 0 | r2 = 0;
0x0002a62e b.w 0x2973c | goto label_0;
0x0002a632 ldr r2, [pc, 0x194] |
0x0002a634 add r2, pc | r2 = 0x54e02;
0x0002a636 b.w 0x2973c | goto label_0;
0x0002a63a ldr r2, [pc, 0x190] |
0x0002a63c add r2, pc | r2 = 0x54e0e;
0x0002a63e b.w 0x2973c | goto label_0;
0x0002a642 ldr r2, [pc, 0x18c] |
0x0002a644 add r2, pc | r2 = 0x54e1a;
0x0002a646 b.w 0x2973c | goto label_0;
0x0002a64a ldr r2, [pc, 0x188] |
0x0002a64c add r2, pc | r2 = 0x54e26;
0x0002a64e b.w 0x2973c | goto label_0;
0x0002a652 ldr r2, [pc, 0x184] |
0x0002a654 add r2, pc | r2 = 0x54e32;
0x0002a656 b.w 0x2973c | goto label_0;
0x0002a65a ldr r2, [pc, 0x180] |
0x0002a65c add r2, pc | r2 = 0x54e3e;
0x0002a65e b.w 0x2973c | goto label_0;
| }
0x0002a662 movs r2, 0 | r2 = 0;
0x0002a664 b.w 0x2973c | goto label_0;
0x0002a668 ldr r2, [pc, 0x174] |
0x0002a66a add r2, pc | r2 = 0x54e4e;
0x0002a66c b.w 0x2973c | goto label_0;
0x0002a670 ldr r2, [pc, 0x170] |
0x0002a672 add r2, pc | r2 = 0x54e5a;
0x0002a674 b.w 0x2973c | goto label_0;
0x0002a678 ldr r2, [pc, 0x16c] |
0x0002a67a add r2, pc | r2 = 0x54e66;
0x0002a67c b.w 0x2973c | goto label_0;
0x0002a680 ldr r2, [pc, 0x168] |
0x0002a682 add r2, pc | r2 = 0x54e72;
0x0002a684 b.w 0x2973c | goto label_0;
0x0002a688 ldr r2, [pc, 0x164] |
0x0002a68a add r2, pc | r2 = 0x54e7e;
0x0002a68c b.w 0x2973c | goto label_0;
0x0002a690 ldr r2, [pc, 0x160] |
0x0002a692 add r2, pc | r2 = 0x54e8a;
0x0002a694 b.w 0x2973c | goto label_0;
0x0002a698 ldr r2, [pc, 0x15c] |
0x0002a69a add r2, pc | r2 = 0x54e96;
0x0002a69c b.w 0x2973c | goto label_0;
0x0002a6a0 ldr r2, [pc, 0x158] |
0x0002a6a2 add r2, pc | r2 = 0x54ea2;
0x0002a6a4 b.w 0x2973c | goto label_0;
0x0002a6a8 ldr r2, [pc, 0x154] |
0x0002a6aa add r2, pc | r2 = 0x54eae;
0x0002a6ac b.w 0x2973c | goto label_0;
0x0002a6b0 ldr r2, [pc, 0x150] |
0x0002a6b2 add r2, pc | r2 = 0x54eba;
0x0002a6b4 b.w 0x2973c | goto label_0;
| label_116:
0x0002a6b8 movs r2, 0 | r2 = 0;
0x0002a6ba b.w 0x2973c | goto label_0;
| label_83:
0x0002a6be bl 0x1df88 | abort ();
0x0002a6c2 nop |
0x0002a6c4 ldrh r0, [r0, 0xc] | r0 = *((r0 + 0xc));
0x0002a6c6 movs r4, r1 | r4 = r1;
0x0002a6c8 push {r1, r2, r3, r5} |
0x0002a6ca movs r5, r1 | r5 = r1;
0x0002a6cc ldrb r6, [r7, 0x1c] | r6 = *((r7 + 0x1c));
0x0002a6ce movs r4, r1 | r4 = r1;
0x0002a6d0 ldm r4, {r2, r4, r6} | r2 = *(r4);
| r4 = *((r4 + 4));
| r6 = *((r4 + 8));
0x0002a6d2 movs r4, r1 | r4 = r1;
| if (r4 != r1) {
0x0002a6d4 beq 0x2a7c4 |
0x0002a6d6 movs r4, r1 | r4 = r1;
0x0002a6d8 ldrb r4, [r3, 0x1c] | r4 = *((r3 + 0x1c));
0x0002a6da movs r4, r1 | r4 = r1;
0x0002a6dc ldrb r6, [r4, 0x1c] | r6 = *((r4 + 0x1c));
0x0002a6de movs r4, r1 | r4 = r1;
0x0002a6e0 ldm r7, {r2, r3, r4, r5, r6, r7} | r2 = *(r7);
| r3 = *((r7 + 4));
| r4 = *((r7 + 8));
| r5 = *((r7 + 12));
| r6 = *((r7 + 16));
| r7 = *((r7 + 20));
0x0002a6e2 movs r4, r1 | r4 = r1;
0x0002a6e4 ldrb r2, [r7, 0x1b] | r2 = *((r7 + 0x1b));
0x0002a6e6 movs r4, r1 | r4 = r1;
0x0002a6e8 strh r4, [r2, 0x1c] | *((r2 + 0x1c)) = r4;
0x0002a6ea movs r4, r1 | r4 = r1;
0x0002a6ec strh r2, [r3, 0x3a] | *((r3 + 0x3a)) = r2;
0x0002a6ee movs r4, r1 | r4 = r1;
0x0002a6f0 strh r0, [r2, 0x3a] | *((r2 + 0x3a)) = r0;
0x0002a6f2 movs r4, r1 | r4 = r1;
0x0002a6f4 ldrb r2, [r4, 0x1b] | r2 = *((r4 + 0x1b));
0x0002a6f6 movs r4, r1 | r4 = r1;
0x0002a6f8 ldrb r4, [r4, 0x1b] | r4 = *((r4 + 0x1b));
0x0002a6fa movs r4, r1 | r4 = r1;
0x0002a6fc ldrb r2, [r2, 0x1b] | r2 = *((r2 + 0x1b));
0x0002a6fe movs r4, r1 | r4 = r1;
0x0002a700 ldrb r0, [r7, 0x1a] | r0 = *((r7 + 0x1a));
0x0002a702 movs r4, r1 | r4 = r1;
0x0002a704 ldrb r2, [r0, 0x1b] | r2 = *((r0 + 0x1b));
0x0002a706 movs r4, r1 | r4 = r1;
0x0002a708 ldrb r0, [r5, 0x1a] | r0 = *((r5 + 0x1a));
0x0002a70a movs r4, r1 | r4 = r1;
0x0002a70c ldm r7, {r1, r2, r3, r7} | r1 = *(r7);
| r2 = *((r7 + 4));
| r3 = *((r7 + 8));
| r7 = *((r7 + 12));
0x0002a70e movs r4, r1 | r4 = r1;
0x0002a710 ldrb r4, [r1, 0x1a] | r4 = *((r1 + 0x1a));
0x0002a712 movs r4, r1 | r4 = r1;
0x0002a714 strh r6, [r4, 0x18] | *((r4 + 0x18)) = r6;
0x0002a716 movs r4, r1 | r4 = r1;
0x0002a718 strh r4, [r5, 0x36] | *((r5 + 0x36)) = r4;
0x0002a71a movs r4, r1 | r4 = r1;
0x0002a71c ldm r3!, {r1, r2, r4, r7} | r1 = *(r3!);
| r2 = *((r3! + 4));
| r4 = *((r3! + 8));
| r7 = *((r3! + 12));
0x0002a71e movs r4, r1 | r4 = r1;
0x0002a720 ldm r7, {r3, r4, r5, r7} | r3 = *(r7);
| r4 = *((r7 + 4));
| r5 = *((r7 + 8));
| r7 = *((r7 + 12));
0x0002a722 movs r4, r1 | r4 = r1;
0x0002a724 ldrb r6, [r6, 0x17] | r6 = *((r6 + 0x17));
0x0002a726 movs r4, r1 | r4 = r1;
0x0002a728 ldrb r4, [r4, 0x17] | r4 = *((r4 + 0x17));
0x0002a72a movs r4, r1 | r4 = r1;
0x0002a72c ldrb r6, [r2, 0x17] | r6 = *((r2 + 0x17));
0x0002a72e movs r4, r1 | r4 = r1;
0x0002a730 ldm r2!, {r4} | r4 = *(r2!);
0x0002a732 movs r4, r1 | r4 = r1;
0x0002a734 ldm r5, {r5, r6, r7} | r5 = *(r5);
| r6 = *((r5 + 4));
| r7 = *((r5 + 8));
0x0002a736 movs r4, r1 | r4 = r1;
0x0002a738 ldm r5, {r2, r3, r4, r5, r6} | r2 = *(r5);
| r3 = *((r5 + 4));
| r4 = *((r5 + 8));
| r5 = *((r5 + 12));
| r6 = *((r5 + 16));
0x0002a73a movs r4, r1 | r4 = r1;
0x0002a73c ldm r1!, {r2, r5, r7} | r2 = *(r1!);
| r5 = *((r1! + 4));
| r7 = *((r1! + 8));
0x0002a73e movs r4, r1 | r4 = r1;
0x0002a740 ldm r5!, {r3, r6, r7} | r3 = *(r5!);
| r6 = *((r5! + 4));
| r7 = *((r5! + 8));
0x0002a742 movs r4, r1 | r4 = r1;
0x0002a744 ldm r5, {r2, r5, r6} | r2 = *(r5);
| r5 = *((r5 + 4));
| r6 = *((r5 + 8));
0x0002a746 movs r4, r1 | r4 = r1;
0x0002a748 ldrb r4, [r4, 0x11] | r4 = *((r4 + 0x11));
0x0002a74a movs r4, r1 | r4 = r1;
0x0002a74c strh r0, [r0, 8] | *((r0 + 8)) = r0;
0x0002a74e movs r4, r1 | r4 = r1;
0x0002a750 strh r0, [r1, 0x26] | *((r1 + 0x26)) = r0;
0x0002a752 movs r4, r1 | r4 = r1;
0x0002a754 ldrb r4, [r1, 0x11] | r4 = *((r1 + 0x11));
0x0002a756 movs r4, r1 | r4 = r1;
0x0002a758 strh r0, [r5, 6] | *((r5 + 6)) = r0;
0x0002a75a movs r4, r1 | r4 = r1;
0x0002a75c strh r0, [r6, 0x24] | *((r6 + 0x24)) = r0;
0x0002a75e movs r4, r1 | r4 = r1;
0x0002a760 ldrb r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x0002a762 movs r4, r1 | r4 = r1;
0x0002a764 ldrb r4, [r3, 0xf] | r4 = *((r3 + 0xf));
0x0002a766 movs r4, r1 | r4 = r1;
0x0002a768 ldrb r4, [r1, 0xf] | r4 = *((r1 + 0xf));
0x0002a76a movs r4, r1 | r4 = r1;
0x0002a76c ldm r0!, {r3, r4, r6, r7} | r3 = *(r0!);
| r4 = *((r0! + 4));
| r6 = *((r0! + 8));
| r7 = *((r0! + 12));
0x0002a76e movs r4, r1 | r4 = r1;
0x0002a770 ldm r4, {r2, r3, r4, r5, r6, r7} | r2 = *(r4);
| r3 = *((r4 + 4));
| r4 = *((r4 + 8));
| r5 = *((r4 + 12));
| r6 = *((r4 + 16));
| r7 = *((r4 + 20));
0x0002a772 movs r4, r1 | r4 = r1;
0x0002a774 ldm r4, {r3, r4, r7} | r3 = *(r4);
| r4 = *((r4 + 4));
| r7 = *((r4 + 8));
0x0002a776 movs r4, r1 | r4 = r1;
0x0002a778 ldrb r0, [r3, 0xe] | r0 = *((r3 + 0xe));
0x0002a77a movs r4, r1 | r4 = r1;
0x0002a77c strh r4, [r6] | *(r6) = r4;
0x0002a77e movs r4, r1 | r4 = r1;
0x0002a780 strh r4, [r7, 0x1e] | *((r7 + 0x1e)) = r4;
0x0002a782 movs r4, r1 | r4 = r1;
0x0002a784 ldrb r6, [r7, 0xd] | r6 = *((r7 + 0xd));
0x0002a786 movs r4, r1 | r4 = r1;
0x0002a788 ldrb r2, [r1, 0xe] | r2 = *((r1 + 0xe));
0x0002a78a movs r4, r1 | r4 = r1;
0x0002a78c ldrb r2, [r6, 0xd] | r2 = *((r6 + 0xd));
0x0002a78e movs r4, r1 | r4 = r1;
0x0002a790 ldm r0!, {r1, r3, r5, r6} | r1 = *(r0!);
| r3 = *((r0! + 4));
| r5 = *((r0! + 8));
| r6 = *((r0! + 12));
0x0002a792 movs r4, r1 | r4 = r1;
0x0002a794 ldm r4!, {r1, r2, r3, r7} | r1 = *(r4!);
| r2 = *((r4! + 4));
| r3 = *((r4! + 8));
| r7 = *((r4! + 12));
0x0002a796 movs r4, r1 | r4 = r1;
0x0002a798 stm r7!, {r2, r3, r5, r6} | *(r7!) = r2;
| *((r7! + 4)) = r3;
| *((r7! + 8)) = r5;
| *((r7! + 12)) = r6;
0x0002a79a movs r4, r1 | r4 = r1;
0x0002a79c stm r7!, {r2, r5, r6} | *(r7!) = r2;
| *((r7! + 4)) = r5;
| *((r7! + 8)) = r6;
0x0002a79e movs r4, r1 | r4 = r1;
0x0002a7a0 ldm r3, {r3, r7} | r3 = *(r3);
| r7 = *((r3 + 4));
0x0002a7a2 movs r4, r1 | r4 = r1;
0x0002a7a4 ldm r3!, {r2, r5} | r2 = *(r3!);
| r5 = *((r3! + 4));
0x0002a7a6 movs r4, r1 | r4 = r1;
0x0002a7a8 ldrb r4, [r4, 8] | r4 = *((r4 + 8));
0x0002a7aa movs r4, r1 | r4 = r1;
0x0002a7ac ldrb r0, [r0, 0x1b] | r0 = *((r0 + 0x1b));
0x0002a7ae movs r4, r1 | r4 = r1;
0x0002a7b0 strh r0, [r1, 0x14] | *((r1 + 0x14)) = r0;
0x0002a7b2 movs r4, r1 | r4 = r1;
0x0002a7b4 ldm r3, {r1, r3, r4, r6} | r1 = *(r3);
| r3 = *((r3 + 4));
| r4 = *((r3 + 8));
| r6 = *((r3 + 12));
0x0002a7b6 movs r4, r1 | r4 = r1;
0x0002a7b8 ldm r2, {r1, r2, r4, r5, r6, r7} | r1 = *(r2);
| r2 = *((r2 + 4));
| r4 = *((r2 + 8));
| r5 = *((r2 + 12));
| r6 = *((r2 + 16));
| r7 = *((r2 + 20));
0x0002a7ba movs r4, r1 | r4 = r1;
0x0002a7bc ldrb r6, [r6, 7] | r6 = *((r6 + 7));
0x0002a7be movs r4, r1 | r4 = r1;
0x0002a7c0 ldrb r2, [r2, 0x1a] | r2 = *((r2 + 0x1a));
0x0002a7c2 movs r4, r1 | r4 = r1;
| }
0x0002a7c4 strh r2, [r3, 0x12] | *((r3 + 0x12)) = r2;
0x0002a7c6 movs r4, r1 | r4 = r1;
0x0002a7c8 ldrb r4, [r5, 6] | r4 = *((r5 + 6));
0x0002a7ca movs r4, r1 | r4 = r1;
0x0002a7cc ldrb r0, [r6, 6] | r0 = *((r6 + 6));
0x0002a7ce movs r4, r1 | r4 = r1;
0x0002a7d0 ldrb r0, [r4, 6] | r0 = *((r4 + 6));
0x0002a7d2 movs r4, r1 | r4 = r1;
0x0002a7d4 ldrb r0, [r1, 6] | r0 = *((r1 + 6));
0x0002a7d6 movs r4, r1 | r4 = r1;
0x0002a7d8 ldrb r4, [r2, 6] | r4 = *((r2 + 6));
0x0002a7da movs r4, r1 | r4 = r1;
0x0002a7dc ldrb r4, [r7, 5] | r4 = *((r7 + 5));
0x0002a7de movs r4, r1 | r4 = r1;
0x0002a7e0 ldm r2, {r1, r2, r3, r4, r6} | r1 = *(r2);
| r2 = *((r2 + 4));
| r3 = *((r2 + 8));
| r4 = *((r2 + 12));
| r6 = *((r2 + 16));
0x0002a7e2 movs r4, r1 | r4 = r1;
0x0002a7e4 ldrb r6, [r3, 5] | r6 = *((r3 + 5));
0x0002a7e6 movs r4, r1 | r4 = r1;
0x0002a7e8 ldrb r2, [r7, 0x17] | r2 = *((r7 + 0x17));
0x0002a7ea movs r4, r1 | r4 = r1;
0x0002a7ec strh r2, [r0, 0xe] | *((r0 + 0xe)) = r2;
0x0002a7ee movs r4, r1 | r4 = r1;
0x0002a7f0 stm r6!, {r1, r2, r3, r5, r6} | *(r6!) = r1;
| *((r6! + 4)) = r2;
| *((r6! + 8)) = r3;
| *((r6! + 12)) = r5;
| *((r6! + 16)) = r6;
0x0002a7f2 movs r4, r1 | r4 = r1;
0x0002a7f4 ldm r2!, {r1, r4, r7} | r1 = *(r2!);
| r4 = *((r2! + 4));
| r7 = *((r2! + 8));
0x0002a7f6 movs r4, r1 | r4 = r1;
0x0002a7f8 ldm r2, {r1, r2, r3, r5} | r1 = *(r2);
| r2 = *((r2 + 4));
| r3 = *((r2 + 8));
| r5 = *((r2 + 12));
0x0002a7fa movs r4, r1 | r4 = r1;
0x0002a7fc ldrb r6, [r5, 4] | r6 = *((r5 + 4));
0x0002a7fe movs r4, r1 | r4 = r1;
0x0002a800 ldrb r2, [r1, 0x17] | r2 = *((r1 + 0x17));
0x0002a802 movs r4, r1 | r4 = r1;
0x0002a804 strh r2, [r2, 0xc] | *((r2 + 0xc)) = r2;
0x0002a806 movs r4, r1 | r4 = r1;
0x0002a808 ldr r2, [pc, 8] | r2 = *(0x0002a814);
0x0002a80a ldr r1, [r1] | r1 = *(r1);
0x0002a80c ldr r0, [r0] | r0 = *(r0);
0x0002a80e add r2, pc | r2 += pc;
0x0002a810 b.w 0x68fec | void (*0x68fec)() ();
| do {
0x00032942 adds r3, r4, r7 | r3 = r4 + r7;
0x00032944 mov r2, r3 | r2 = r3;
| if (r3 <= r4) {
0x00032946 blo.w 0x32ad4 | goto label_120;
| }
0x0003294a sub.w r2, r3, r8 | r2 = r3 - r8;
0x0003294e mov.w ip, -1 |
0x00032952 adds.w r3, sl, r8 | r3 = sl + r8;
0x00032956 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x0003295a mov r0, r2 | r0 = r2;
0x0003295c mov r4, r3 | r4 = r3;
0x0003295e cmp.w fp, 0 |
| if (fp != 0) {
0x00032962 bne 0x32a58 | goto label_121;
| }
0x00032964 mov.w r3, -1 | r3 = -1;
0x00032968 mov.w fp, 0x20 |
0x0003296c movs r6, 1 | r6 = 1;
0x0003296e str r3, [sp, 0x14] | var_14h = r3;
0x00032970 movs r3, 0 | r3 = 0;
0x00032972 str r3, [sp, 0x48] | var_48h = r3;
| label_28:
0x00032974 cmp r7, r0 |
0x00032976 mov.w sb, 1 | sb = 1;
0x0003297a beq 0x32942 |
| } while (r7 == r0);
0x0003297c ldr r1, [sp, 0x24] | r1 = var_24h;
0x0003297e bl 0xdc9dc | fcn_000dc9dc (r0, r1, r2);
0x00032982 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00032984 mov r5, r0 | r5 = r0;
0x00032986 lsrs r0, r4, 0x10 | r0 = r4 >> 0x10;
0x00032988 orr.w r1, r0, r1, lsl 16 | r1 = r0 | (r1 << 16);
0x0003298c mul ip, r5, r3 |
0x00032990 cmp ip, r1 |
| if (ip >= r1) {
0x00032992 bls 0x329b2 |
0x00032994 adds r1, r7, r1 | r1 = r7 + r1;
0x00032996 add.w lr, r5, -1 | lr = r5 + -1;
0x0003299a ite lo |
| if (r1 >= r7) {
0x0003299c movlo r0, 1 | r0 = 1;
| }
| if (r1 < r7) {
0x0003299e movhs r0, 0 | r0 = 0;
| }
0x000329a0 cmp ip, r1 |
0x000329a2 ite ls |
| if (ip > r1) {
0x000329a4 movls r0, 0 | r0 = 0;
| }
| if (ip <= r1) {
0x000329a6 andhi r0, r0, 1 | r0 &= 1;
| }
0x000329aa cmp r0, 0 |
| if (r0 != 0) {
0x000329ac bne.w 0x32f2a | goto label_122;
| }
0x000329b0 mov r5, lr | r5 = lr;
| }
| label_32:
0x000329b2 sub.w r0, r1, ip | r0 = r1 - ip;
0x000329b6 ldr r1, [sp, 0x24] | r1 = var_24h;
0x000329b8 bl 0xdc9dc | fcn_000dc9dc (r0, r1, r2);
0x000329bc uxth r3, r4 | r3 = (int16_t) r4;
0x000329be orr.w r1, r3, r1, lsl 16 | r1 = r3 | (r1 << 16);
0x000329c2 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000329c4 mul r3, r0, r3 | r3 = r0 * r3;
0x000329c8 cmp r3, r1 |
| if (r3 >= r1) {
0x000329ca bls 0x329f6 |
0x000329cc adds r1, r7, r1 | r1 = r7 + r1;
0x000329ce add.w lr, r0, -1 | lr = r0 + -1;
0x000329d2 ite hs |
| if (r1 < r7) {
0x000329d4 movhs ip, 1 |
| }
| if (r1 < r7) {
0x000329d8 mov.w ip, 0 |
| }
0x000329dc eor ip, ip, 1 |
0x000329e0 cmp r3, r1 |
0x000329e2 ite ls |
| if (r3 > r1) {
0x000329e4 movls ip, 0 |
| }
| if (r3 > r1) {
0x000329e8 and ip, ip, 1 |
| }
0x000329ec cmp.w ip, 0 |
| if (ip != 0) {
0x000329f0 bne.w 0x32f58 | goto label_123;
| }
0x000329f4 mov r0, lr | r0 = lr;
| }
| label_33:
0x000329f6 orr.w ip, r0, r5, lsl 16 |
0x000329fa subs r2, r1, r3 | r2 = r1 - r3;
0x000329fc umull r0, r1, r8, ip | r0:r1 = r8 * ip;
| do {
| label_29:
0x00032a00 cmp r1, r2 |
| if (r1 <= r2) {
0x00032a02 bhi 0x32a16 |
0x00032a04 ite eq |
| if (r1 != r2) {
0x00032a06 moveq r3, 1 | r3 = 1;
| }
| if (r1 == r2) {
0x00032a08 movne r3, 0 | r3 = 0;
| }
0x00032a0a cmp r0, 0 |
0x00032a0c ite eq |
| if (r0 != 0) {
0x00032a0e moveq r3, 0 | r3 = 0;
| }
| if (r0 == 0) {
0x00032a10 andne r3, r3, 1 | r3 &= 1;
| }
| if (r3 == 0) {
0x00032a14 cbz r3, 0x32a28 | goto label_124;
| }
| }
0x00032a16 subs.w r3, r0, r8 | r3 = r0 - r8;
0x00032a1a sbc r1, r1, 0 | __asm ("sbc r1, r1, 0");
0x00032a1e adds r2, r2, r7 | r2 += r7;
0x00032a20 add.w ip, ip, -1 |
0x00032a24 mov r0, r3 | r0 = r3;
0x00032a26 blo 0x32a00 |
| } while (r2 <= r2);
| label_124:
0x00032a28 subs.w r3, sl, r0 | r3 = sl - r0;
0x00032a2c sbc.w r0, r2, r1 | __asm ("sbc.w r0, r2, r1");
0x00032a30 mov r4, r3 | r4 = r3;
0x00032a32 cmp.w fp, 0 |
| if (fp == 0) {
0x00032a36 bne 0x32a58 |
0x00032a38 cmp.w ip, 0 |
| if (ip != 0) {
0x00032a3c bne.w 0x32e48 | goto label_125;
| }
0x00032a40 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00032a42 movs r6, 1 | r6 = 1;
0x00032a44 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00032a46 str.w fp, [sp, 0x48] | __asm ("str.w fp, [var_48h]");
0x00032a4a subs r2, 0x20 | r2 -= 0x20;
0x00032a4c sbc r3, r3, 0 | __asm ("sbc r3, r3, 0");
0x00032a50 str r2, [sp, 0x20] | var_20h = r2;
0x00032a52 strd fp, r3, [sp, 0x14] | __asm ("strd fp, r3, [sp, 0x14]");
0x00032a56 b 0x32974 | goto label_28;
| }
| label_121:
0x00032a58 cmp.w fp, 0x15 |
| if (fp <= 0x15) {
0x00032a5c ble 0x32ae8 | goto label_126;
| }
0x00032a5e mov r5, ip | r5 = ip;
0x00032a60 str.w fp, [sp, 0x1c] | __asm ("str.w fp, [var_1ch]");
0x00032a64 mov ip, r6 |
0x00032a66 mov fp, r4 |
0x00032a68 ldr r6, [sp, 0x34] | r6 = var_34h;
0x00032a6a mov r4, r0 | r4 = r0;
0x00032a6c cmp.w sb, 0 |
| if (sb == 0) {
0x00032a70 beq 0x32af6 | goto label_127;
| }
0x00032a72 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00032a74 str r3, [r6, 4] | *((r6 + 4)) = r3;
0x00032a76 cmp.w ip, 0 |
| if (ip != 0) {
0x00032a7a beq 0x32a88 |
0x00032a7c ldr r3, [sp, 0x30] | r3 = var_30h;
0x00032a7e ldr r2, [sp, 0x20] | r2 = var_20h;
0x00032a80 str r2, [r3] | *(r3) = r2;
0x00032a82 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00032a84 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00032a86 str r2, [r3] | *(r3) = r2;
| }
0x00032a88 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00032a8a str r3, [r6] | *(r6) = r3;
| do {
| label_30:
0x00032a8c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00032a8e mov sl, fp | sl = fp;
0x00032a90 rsbs.w r3, r3, 0x35 | r3 = 0x35 - r3;
| if (ip != 0) {
0x00032a94 bne.w 0x32cb2 | goto label_128;
| }
0x00032a98 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00032a9a movs r7, 0x1f | r7 = 0x1f;
0x00032a9c ldr r3, [r3] | r3 = *(r3);
0x00032a9e str r3, [sp, 0x20] | var_20h = r3;
0x00032aa0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00032aa2 ldr r3, [r3] | r3 = *(r3);
0x00032aa4 str r3, [sp, 0x18] | var_18h = r3;
| label_31:
0x00032aa6 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00032aa8 mov r0, r6 | r0 = r6;
0x00032aaa strd r5, r7, [sp, 4] | __asm ("strd r5, r7, [sp, 4]");
0x00032aae orr.w sl, r3, sl | sl = r3 | sl;
0x00032ab2 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00032ab4 str r3, [sp] | *(sp) = r3;
0x00032ab6 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00032ab8 subs r2, r3, 1 | r2 = r3 - 1;
0x00032aba ldr r3, [sp, 0x18] | r3 = var_18h;
0x00032abc adc r3, r3, -1 | __asm ("adc r3, r3, -1");
0x00032ac0 orrs.w sl, sl, r4 | sl |= r4;
0x00032ac4 ite ne |
| if (sl == sl) {
0x00032ac6 movne r1, 1 | r1 = 1;
| }
| if (sl != sl) {
0x00032ac8 moveq r1, 0 | r1 = 0;
| }
0x00032aca str r1, [sp, 0xc] | var_ch = r1;
0x00032acc bl 0x311f8 | fcn_000311f8 (r0, r1, r2, r3, r4, r5);
0x00032ad0 b.w 0x3192e | void (*0x3192e)() ();
| label_120:
0x00032ad4 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x00032ad6 cmp.w r8, 0 |
0x00032ada ite eq |
| if (r8 != 0) {
0x00032adc moveq r1, r8 | r1 = r8;
| }
| if (r8 == 0) {
0x00032ade subne r1, r8, 1 | r1 = r8 - 1;
| }
0x00032ae2 mov.w ip, -1 |
0x00032ae6 b 0x32a00 | goto label_29;
| label_126:
0x00032ae8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00032aea add.w fp, fp, 0x20 |
0x00032aee str.w ip, [sp, 0x14] | __asm ("str.w ip, [var_14h]");
0x00032af2 str r3, [sp, 0x48] | var_48h = r3;
0x00032af4 b 0x32974 | goto label_28;
| label_127:
0x00032af6 cmp.w ip, 0 |
0x00032afa beq 0x32a8c |
| } while (ip == 0);
0x00032afc ldr r3, [sp, 0x30] | r3 = var_30h;
0x00032afe ldr r2, [sp, 0x20] | r2 = var_20h;
0x00032b00 str r2, [r3] | *(r3) = r2;
0x00032b02 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00032b04 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00032b06 str r2, [r3] | *(r3) = r2;
0x00032b08 b 0x32a8c | goto label_30;
| label_128:
0x00032cb2 movs r2, 2 | r2 = 2;
0x00032cb4 mov r1, r6 | r1 = r6;
0x00032cb6 mov r0, r6 | r0 = r6;
0x00032cb8 bl 0x37594 | fcn_00037594 (r0, r1, r2, r3);
0x00032cbc ldr r3, [sp, 0x30] | r3 = var_30h;
0x00032cbe ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00032cc0 ldr r2, [r6] | r2 = *(r6);
0x00032cc2 ldr r3, [r3] | r3 = *(r3);
0x00032cc4 sub.w r7, r1, 0x16 | r7 = r1 - 0x16;
0x00032cc8 str r3, [sp, 0x20] | var_20h = r3;
0x00032cca ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00032ccc ldr r3, [r3] | r3 = *(r3);
0x00032cce str r3, [sp, 0x18] | var_18h = r3;
0x00032cd0 sub.w r3, r1, 0x15 | r3 = r1 - 0x15;
0x00032cd4 lsr.w r3, r5, r3 | r3 = r5 >> r3;
0x00032cd8 orrs r3, r2 | r3 |= r2;
0x00032cda str r3, [r6] | *(r6) = r3;
0x00032cdc b 0x32aa6 | goto label_31;
| label_125:
0x00032e48 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00032e4a clz fp, ip |
0x00032e4e movs r6, 1 | r6 = 1;
0x00032e50 str.w ip, [sp, 0x14] | __asm ("str.w ip, [var_14h]");
0x00032e54 subs.w r2, r3, fp | r2 = r3 - fp;
0x00032e58 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00032e5a rsb.w fp, fp, 0x20 |
0x00032e5e str r2, [sp, 0x20] | var_20h = r2;
0x00032e60 sbc r3, r3, 0 | __asm ("sbc r3, r3, 0");
0x00032e64 str r3, [sp, 0x18] | var_18h = r3;
0x00032e66 movs r3, 0 | r3 = 0;
0x00032e68 str r3, [sp, 0x48] | var_48h = r3;
0x00032e6a b 0x32974 | goto label_28;
| label_122:
0x00032f2a subs r5, 2 | r5 -= 2;
0x00032f2c add r1, r7 | r1 += r7;
0x00032f2e b 0x329b2 | goto label_32;
| label_123:
0x00032f58 subs r0, 2 | r0 -= 2;
0x00032f5a add r1, r7 | r1 += r7;
0x00032f5c b 0x329f6 | goto label_33;
0x000338f8 str.w r4, [sl] | __asm ("str.w r4, [sl]");
0x000338fc str.w r3, [r8] | __asm ("str.w r3, [r8]");
| do {
| label_34:
0x00033900 mov r0, r5 | r0 = r5;
0x00033902 add sp, 0xc |
0x00033904 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_35:
0x00033934 cmp r0, 0 |
0x00033936 beq 0x33900 |
| } while (r0 == 0);
| label_37:
0x00033938 ldr.w r3, [r8] | r3 = *(r8);
0x0003393c cmp r3, 0x11 |
0x0003393e ittt le |
| if (r3 > 0x11) {
0x00033940 addle r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 > 0x11) {
0x00033942 strle r2, [r8] | *(r8) = r2;
| }
| if (r3 > 0x11) {
0x00033946 str.w r0, [sl, r3, lsl 2] | __asm ("str.w r0, [sl, r3, lsl 2]");
| goto label_129;
| }
| if (r3 <= 0x11) {
| label_129:
0x0003394a ble 0x33900 | goto label_34;
| }
0x0003394c ldr r3, [pc, 0x4c] |
0x0003394e mov.w r2, 0x1c4 | r2 = 0x1c4;
0x00033952 ldr r1, [pc, 0x4c] |
0x00033954 ldr r0, [pc, 0x4c] |
0x00033956 add r3, pc | r3 = 0x672f6;
0x00033958 add r1, pc | r1 = 0x672fe;
0x0003395a add r0, pc | r0 = 0x67302;
0x0003395c bl 0x27fbc | assert_fail ();
| label_36:
0x00033960 ldr r3, [r1], 4 | r3 = *(r1);
| r1 += 4;
0x00033964 adds r3, 1 | r3++;
0x00033966 str r3, [r1, -0x4] | *((r1 - 0x4)) = r3;
0x0003396a cmp r3, 0 |
| if (r3 != 0) {
0x0003396c bne 0x33934 | goto label_35;
| }
0x0003396e subs r2, 1 | r2--;
| if (r2 != 1) {
0x00033970 bne 0x33960 | goto label_36;
| }
0x00033972 adds r0, 1 | r0++;
0x00033974 cmp r0, 0 |
| if (r0 == 0) {
0x00033976 beq 0x33900 | goto label_34;
| }
0x00033978 b 0x33938 | goto label_37;
| label_38:
0x000391ee movs r3, 0xa | r3 = 0xa;
0x000391f0 mov r1, r5 | r1 = r5;
0x000391f2 mov r0, r5 | r0 = r5;
0x000391f4 bl 0x37ae4 | r0 = fcn_00037ae4 (r0, r1);
| if (r0 != 0) {
0x000391f8 cbz r0, 0x39206 |
0x000391fa ldrd r2, r3, [r4, 0xc] | __asm ("ldrd r2, r3, [r4, 0xc]");
0x000391fe adds r1, r3, 1 | r1 = r3 + 1;
0x00039200 str r1, [r4, 0x10] | *((r4 + 0x10)) = r1;
0x00039202 str.w r0, [r2, r3, lsl 2] | __asm ("str.w r0, [r2, r3, lsl 2]");
| }
0x00039206 mov r0, r6 | r0 = r6;
0x00039208 add sp, 8 |
0x0003920a pop {r4, r5, r6, pc} |
0x00039218 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x0003921a bl 0x36f6c | fcn_00036f6c (r0, r1, r2, r3, r4, r5);
0x0003921e ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00039220 ldrd r1, r2, [r4, 0x18] | __asm ("ldrd r1, r2, [r4, 0x18]");
0x00039224 subs r3, r3, r1 | r3 -= r1;
0x00039226 str.w r0, [r2, r3, lsl 2] | __asm ("str.w r0, [r2, r3, lsl 2]");
0x0003922a ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0003922c ldr r6, [r2] | r6 = *(r2);
0x0003922e str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
| if (r3 == 0) {
0x00039230 cbz r3, 0x39286 | goto label_130;
| }
0x00039232 ldr r5, [r4, 0xc] | r5 = *((r4 + 0xc));
0x00039234 add.w r2, r5, r3, lsl 2 | r2 = r5 + (r3 << 2);
0x00039238 b 0x3923e |
| while (r0 == 0) {
0x0003923a str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
| if (r3 == 0) {
0x0003923c cbz r3, 0x39286 | goto label_130;
| }
0x0003923e ldr r0, [r2, -0x4]! | r0 = *((r2 -= 0x4));
0x00039242 subs r3, 1 | r3--;
0x00039244 cmp r0, 0 |
0x00039246 beq 0x3923a |
| }
0x00039248 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x0003924a adds r6, 0x30 | r6 += 0x30;
0x0003924c b 0x391ee | goto label_38;
| label_130:
0x00039286 movs r3, 1 | r3 = 1;
0x00039288 adds r6, 0x30 | r6 += 0x30;
0x0003928a mov r0, r6 | r0 = r6;
0x0003928c str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0003928e add sp, 8 |
0x00039290 pop {r4, r5, r6, pc} |
| label_42:
0x000392c4 sub.w r8, r8, r5 | r8 -= r5;
0x000392c8 add.w sb, sp, 0x30 | sb += var_30h;
0x000392cc mov.w r3, 0x400 | r3 = 0x400;
0x000392d0 movs r2, 1 | r2 = 1;
0x000392d2 mov r1, r8 | r1 = r8;
0x000392d4 mov r0, r7 | r0 = r7;
0x000392d6 str.w sb, [r7] | __asm ("str.w sb, [r7]");
0x000392da str r3, [r7, 4] | *((r7 + 4)) = r3;
0x000392dc bl 0x67868 | r0 = libc_scratch_buffer_set_array_size ();
0x000392e0 cmp r0, 0 |
| if (r0 == 0) {
0x000392e2 beq 0x3938a | goto label_131;
| }
0x000392e4 ldr.w sl, [r7] | sl = *(r7);
0x000392e8 mov r1, r5 | r1 = r5;
0x000392ea mov r2, r8 | r2 = r8;
0x000392ec mov r0, sl | r0 = sl;
0x000392ee blx 0x6d540 | r0 = memcpy (r0, r1, r2);
0x000392f2 add.w r5, r0, r8 | r5 = r0 + r8;
0x000392f6 subs r3, r5, 1 | r3 = r5 - 1;
0x000392f8 cmp sl, r3 |
| if (sl > r3) {
0x000392fa bhi 0x3934c | goto label_132;
| }
0x000392fc mrc p15, 0, r8, c13, c0, 3 | __asm ("mrc p15, 0, r8, c13, c0, 3");
0x00039300 b 0x3930e |
| while (r2 > 9) {
| if (r6 != 0) {
0x00039302 cbnz r6, 0x39360 | goto label_133;
| }
| label_40:
0x00039304 strb r3, [r4, -0x1] | *((r4 - 0x1)) = r3;
0x00039308 subs r4, 1 | r4--;
| label_41:
0x0003930a cmp r5, sl |
| if (r5 == sl) {
0x0003930c beq 0x3934c | goto label_132;
| }
| label_39:
0x0003930e ldrb r3, [r5, -0x1]! | r3 = *((r5 -= 0x1));
0x00039312 sub.w r2, r3, 0x30 | r2 = r3 - 0x30;
0x00039316 cmp r2, 9 |
0x00039318 bhi 0x39302 |
| }
0x0003931a ldr r2, [pc, 0xc8] |
0x0003931c adds r3, 1 | r3++;
0x0003931e add r2, pc |
0x00039320 ldr r2, [r2] |
0x00039322 ldr.w r2, [r8, r2] | r2 = *((r8 + r2));
0x00039326 ldr r2, [r2] | r2 = *(0x72708);
0x00039328 ldr.w fp, [r2, r3, lsl 2] | fp = *(0x72708);
0x0003932c mov r0, fp | r0 = fp;
0x0003932e bl 0x6ae40 | r0 = strlen ();
0x00039332 subs r1, r4, r0 | r1 = r4 - r0;
| if (r0 == 0) {
0x00039334 cbz r0, 0x39346 | goto label_134;
| }
0x00039336 add.w r3, fp, r0 | r3 = fp + r0;
| do {
0x0003933a ldrb r2, [r3, -0x1]! | r2 = *((r3 -= 0x1));
0x0003933e cmp fp, r3 |
0x00039340 strb r2, [r4, -0x1]! | *((r4 -= 0x1)) = r2;
0x00039344 bne 0x3933a |
| } while (fp != r3);
| label_134:
0x00039346 cmp r5, sl |
0x00039348 mov r4, r1 | r4 = r1;
| if (r5 != sl) {
0x0003934a bne 0x3930e | goto label_39;
| }
| label_132:
0x0003934c ldr r0, [r7] | r0 = *(r7);
0x0003934e cmp r0, sb |
| if (r0 != sb) {
0x00039350 beq 0x39356 |
0x00039352 blx 0x1ded4 | fcn_0001ded4 ();
| }
0x00039356 mov r0, r4 | r0 = r4;
0x00039358 addw sp, sp, 0x434 | __asm ("addw sp, sp, aav.0x000000ff");
0x0003935c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_133:
0x00039360 and r2, r3, 0xfd | r2 = r3 & 0xfd;
0x00039364 cmp r2, 0x2c |
| if (r2 != 0x2c) {
0x00039366 bne 0x39304 | goto label_40;
| }
0x00039368 cmp r3, 0x2e |
0x0003936a ite eq |
| if (r3 != 0x2e) {
0x0003936c moveq fp, sp |
| }
| if (r3 == 0x2e) {
0x0003936e addne fp, sp, 0x14 |
| }
0x00039372 mov r0, fp | r0 = fp;
0x00039374 bl 0x6ae40 | r0 = strlen ();
0x00039378 mov r2, r0 | r2 = r0;
0x0003937a subs r4, r4, r0 | r4 -= r0;
0x0003937c cmp r0, 0 |
| if (r0 == 0) {
0x0003937e beq 0x3930a | goto label_41;
| }
0x00039380 mov r1, fp | r1 = fp;
0x00039382 mov r0, r4 | r0 = r4;
0x00039384 blx 0x6d540 | memcpy (r0, r1, r2);
0x00039388 b 0x3930a | goto label_41;
| label_131:
0x0003938a mov r0, r5 | r0 = r5;
0x0003938c addw sp, sp, 0x434 | __asm ("addw sp, sp, aav.0x000000ff");
0x00039390 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000393ac adds r2, r0, 1 | r2 = r0 + 1;
0x000393ae mov r1, sb | r1 = sb;
0x000393b0 it ne |
| if (r2 == r0) {
0x000393b2 strbne sl, [fp, r0] | *((fp + r0)) = sl;
| }
0x000393b6 mov.w sb, 0 | sb = 0;
0x000393ba add.w sl, sp, 0x14 | sl += var_14h;
0x000393be it eq |
| if (r2 != r0) {
0x000393c0 moveq r3, 0x2e | r3 = 0x2e;
| }
0x000393c2 mov r2, r7 | r2 = r7;
0x000393c4 mov r0, sl | r0 = sl;
0x000393c6 strd sb, sb, [r7] | __asm ("strd sb, sb, [r7]");
0x000393ca it eq |
| if (r2 == r0) {
0x000393cc strheq r3, [fp] | __asm ("strheq r3, [fp]");
| }
0x000393d0 bl 0x6ea18 | r0 = wcrtomb ();
0x000393d4 adds r3, r0, 1 | r3 = r0 + 1;
0x000393d6 itet eq |
| if (r3 != r0) {
0x000393d8 moveq r3, 0x2c | r3 = 0x2c;
| }
| if (r3 == r0) {
0x000393da strbne sb, [sl, r0] | *((sl + r0)) = sb;
| }
| if (r3 == r0) {
0x000393de strh.w r3, [sl] | *(sl) = r3;
| }
0x000393e2 b 0x392c4 | goto label_42;
| do {
| label_44:
0x0003d51a mov.w r4, -1 | r4 = -1;
| label_43:
0x0003d51e mov r0, r4 | r0 = r4;
0x0003d520 add sp, 0x134 |
0x0003d522 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0003d54c bne 0x3d51a |
| } while (r3 != r0);
0x0003d54e cmp r4, 0 |
| if (r4 < 0) {
0x0003d550 blt 0x3d51e | goto label_43;
| }
0x0003d552 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0003d554 adds r4, r4, r3 | r4 += r3;
0x0003d556 bvc 0x3d51e | __asm ("bvc aav.0x000000ff");
| goto label_43;
0x0003d558 ldr r3, [pc, 0x80] |
0x0003d55a mrc p15, 0, r2, c13, c0, 3 | __asm ("mrc p15, 0, r2, c13, c0, 3");
0x0003d55e movs r1, 0x4b | r1 = 0x4b;
0x0003d560 add r3, pc |
0x0003d562 ldr r3, [r3] | r3 = *(0x7ab40);
0x0003d564 str r1, [r2, r3] | *((r2 + r3)) = r1;
0x0003d566 b 0x3d51a | goto label_44;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x534ac */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000534ac () | void fcn_000534ac (int16_t arg1) {
| int16_t var_0h;
| size_t s2;
| int16_t var_fh_2;
| int16_t var_8h_2;
| int32_t var_8h_3;
| int16_t var_fh;
| int16_t var_10h;
| int16_t var_8h;
| int32_t var_4h_3;
| int32_t var_ch;
| int16_t var_0h_2;
| int16_t var_34h;
| int16_t var_4h_2;
| r0 = arg1;
0x000534ac push {r1, r2, r3} |
0x000534ae push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000534b2 sub sp, 0x1c |
0x000534b4 add r7, sp, 8 | r7 += var_8h;
0x000534b6 add.w r3, r7, 0x34 | r3 += var_34h;
0x000534ba mov.w r8, 0 | r8 = 0;
0x000534be ldr r4, [r3], 4 | r4 = *(r3);
| r3 += 4;
0x000534c2 and sb, r0, 1 | sb = r0 & 1;
0x000534c6 ldr.w sl, [pc, 0x154] | sl = *(0x0005361c);
0x000534ca mov r6, r8 | r6 = r8;
0x000534cc ldrb r5, [r4] | r5 = *(r4);
0x000534ce add sl, pc | sl += pc;
0x000534d0 str r3, [r7, 0xc] | var_ch = r3;
0x000534d2 cmp r5, 0 |
| if (r5 == 0) {
0x000534d4 beq 0x535a2 | goto label_3;
| }
| label_1:
0x000534d6 mov r3, r5 | r3 = r5;
0x000534d8 mov r0, r4 | r0 = r4;
0x000534da b 0x534e8 |
| while (r3 != 0x25) {
| label_0:
0x000534dc adds r0, 1 | r0++;
0x000534de movs r1, 0x25 | r1 = 0x25;
0x000534e0 bl 0x696d8 | r0 = strchrnul ();
0x000534e4 ldrb r3, [r0] | r3 = *(r0);
| if (r3 == 0) {
0x000534e6 cbz r3, 0x534f2 | goto label_4;
| }
0x000534e8 cmp r3, 0x25 |
0x000534ea bne 0x534dc |
| }
0x000534ec ldrb r3, [r0, 1] | r3 = *((r0 + 1));
0x000534ee cmp r3, 0x73 |
| if (r3 != 0x73) {
0x000534f0 bne 0x534dc | goto label_0;
| }
| label_4:
0x000534f2 cmp r5, 0x25 |
0x000534f4 beq 0x53514 |
| while (r3 != 0x73) {
0x000534f6 subs r3, r0, r4 | r3 = r0 - r4;
0x000534f8 mov r1, r4 | r1 = r4;
0x000534fa mov r4, r0 | r4 = r0;
| label_2:
0x000534fc sub sp, 0x10 |
0x000534fe add.w r2, r8, 1 | r2 = r8 + 1;
0x00053502 strd r1, r3, [sp, 8] | __asm ("strd r1, r3, [var_8h_2]");
0x00053506 add r0, sp, 8 | r0 += var_8h_2;
0x00053508 str r6, [sp, 0x10] | var_10h = r6;
0x0005350a ldrb r5, [r4] | r5 = *(r4);
| if (r5 == 0) {
0x0005350c cbz r5, 0x53532 | goto label_5;
| }
0x0005350e mov r8, r2 | r8 = r2;
0x00053510 mov r6, r0 | r6 = r0;
0x00053512 b 0x534d6 | goto label_1;
0x00053514 ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x00053516 cmp r3, 0x73 |
0x00053518 bne 0x534f6 |
| }
0x0005351a ldr r3, [r7, 0xc] | r3 = var_ch;
0x0005351c adds r4, 2 | r4 += 2;
0x0005351e ldr r1, [r3] | r1 = *(r3);
0x00053520 adds r3, 4 | r3 += 4;
0x00053522 str r3, [r7, 0xc] | var_ch = r3;
0x00053524 mov r0, r1 | r0 = r1;
0x00053526 str r1, [r7, 4] | var_4h_3 = r1;
0x00053528 bl 0x6ae40 | strlen ();
0x0005352c ldr r1, [r7, 4] | r1 = var_4h_3;
0x0005352e mov r3, r0 | r3 = r0;
0x00053530 b 0x534fc | goto label_2;
| label_5:
0x00053532 mov r0, sp | r0 = sp;
0x00053534 lsls r5, r2, 3 | r5 = r2 << 3;
0x00053536 sub.w r0, r0, r2, lsl 3 | r0 -= (r2 << 3);
0x0005353a mov ip, r3 |
0x0005353c mov sp, r0 |
0x0005353e sub.w r0, r5, 8 | r0 = r5 - 8;
0x00053542 add.w r4, sp, 0xf | r4 += var_fh;
0x00053546 lsr.w lr, r4, 3 | lr = r4 >> 3;
0x0005354a bic r4, r4, 7 | r4 = BIT_MASK (s2, );
0x0005354e str.w r1, [r0, lr, lsl 3] | __asm ("str.w r1, [r0, lr, lsl 3]");
0x00053552 adds r1, r4, r0 | r1 = r4 + r0;
0x00053554 str r3, [r1, 4] | var_8h_2 = r3;
0x00053556 cmp.w r8, 0 |
| if (r8 == 0) {
0x0005355a beq 0x53570 | goto label_6;
| }
| do {
0x0005355c ldrd r0, r3, [r6] | __asm ("ldrd r0, r3, [r6]");
0x00053560 subs r1, 8 | r1 -= 8;
0x00053562 cmp r1, r4 |
0x00053564 ldr r6, [r6, 8] | r6 = *((r6 + 8));
0x00053566 add ip, r3 |
0x00053568 strd r0, r3, [r1] | __asm ("strd r0, r3, [r1]");
0x0005356c mov r3, ip | r3 = ip;
0x0005356e bne 0x5355c |
| } while (r1 != r4);
| do {
| label_6:
0x00053570 movs r0, 2 | r0 = 2;
0x00053572 mov r1, r4 | r1 = r4;
0x00053574 mov.w ip, 0x92 |
0x00053578 bl 0x1e530 | r0 = fcn_0001e530 ();
0x0005357c adds r6, r0, 4 | r6 = r0 + 4;
0x0005357e ite ne |
| if (r6 == r0) {
0x00053580 movne r1, 0 | r1 = 0;
| }
| if (r6 != r0) {
0x00053582 moveq r1, 1 | r1 = 1;
| }
0x00053584 cmn.w r0, 0x1000 |
0x00053588 it ls |
| if (r0 > 0x1000) {
0x0005358a movls r1, 0 | r1 = 0;
| }
0x0005358c cmp r1, 0 |
0x0005358e bne 0x53570 |
| } while (r1 != 0);
0x00053590 cmp.w sb, 0 |
| if (sb != 0) {
0x00053594 bne 0x535aa | goto label_7;
| }
| do {
0x00053596 adds r7, 0x14 | r7 += 0x14;
0x00053598 mov sp, r7 |
0x0005359a pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0005359e add sp, 0xc |
0x000535a0 bx lr | return;
| label_3:
0x000535a2 cmp.w sb, 0 |
0x000535a6 beq 0x53596 |
| } while (sb == 0);
0x000535a8 b 0x5360e | goto label_8;
| label_7:
0x000535aa ldr r2, [pc, 0x74] |
0x000535ac mov r0, r1 | r0 = r1;
0x000535ae ldr.w r2, [sl, r2] | r2 = *((sl + r2));
0x000535b2 str r1, [sp, 4] | s2 = r1;
0x000535b4 ldr r2, [r2, 0xc] | r2 = *(0x5362e);
0x000535b6 add r3, r2 | r3 += r2;
0x000535b8 rsbs r2, r2, 0 | r2 -= ;
0x000535ba and.w r6, r3, r2 | r6 = r3 & r2;
0x000535bc lsls r2, r0, 0x18 | r2 = r0 << 0x18;
0x000535be mov.w r2, -1 | r2 = -1;
0x000535c2 str r2, [sp] | *(sp) = r2;
0x000535c4 movs r3, 0x22 | r3 = 0x22;
0x000535c6 movs r2, 3 | r2 = 3;
0x000535c8 mov r1, r6 | r1 = r6;
0x000535ca bl 0xa9000 | r0 = mmap ()
0x000535ce cmp.w r0, -1 |
0x000535d2 mov r8, r0 | r8 = r0;
| if (r0 == -1) {
0x000535d4 beq 0x5360e | goto label_8;
| }
0x000535d6 add r5, r4 | r5 += r4;
0x000535d8 str r6, [r0], 4 | *(r0) = r6;
| r0 += 4;
| do {
0x000535dc ldrd r1, r2, [r4] | __asm ("ldrd r1, r2, [r4]");
0x000535e0 adds r4, 8 | r4 += 8;
0x000535e2 blx 0x6d540 | memcpy (r0, r1, r2);
0x000535e6 ldr r2, [r4, -0x4] | r2 = *((r4 - 0x4));
0x000535ea cmp r5, r4 |
0x000535ec mov r3, r0 | r3 = r0;
0x000535ee add r0, r2 | r0 += r2;
0x000535f0 bne 0x535dc |
| } while (r5 != r4);
0x000535f2 ldr r1, [pc, 0x30] |
0x000535f4 movs r0, 0 | r0 = 0;
0x000535f6 strb r0, [r3, r2] | *((r3 + r2)) = r0;
0x000535f8 add r1, pc | r1 = 0xa6c22;
0x000535fa mov r3, r1 | r3 = r1;
| do {
0x000535fc ldrex r0, [r3] | __asm ("ldrex r0, [r3]");
0x00053600 strex r2, r8, [r3] | __asm ("strex r2, r8, [r3]");
0x00053604 cmp r2, 0 |
0x00053606 bne 0x535fc |
| } while (r2 != 0);
0x00053608 dmb ish | __asm ("dmb ish");
0x0005360c cbnz r0, 0x53612 |
| while (1) {
| label_8:
0x0005360e bl 0x1df88 | r0 = abort ();
0x00053612 ldr r1, [r0] | r1 = *(r0);
0x00053614 bl 0xa90c0 | munmap ();
0x00053618 b 0x5360e |
| }
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x60380 */
| #include <stdint.h>
|
; (fcn) fcn.00060380 () | void fcn_00060380 (int16_t arg1, char * arg2, int16_t arg3) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_78h;
| void * s1;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00060380 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00060384 sub sp, 0x194 |
0x00060386 mov r8, r0 | r8 = r0;
0x00060388 mov r7, r1 | r7 = r1;
0x0006038a mov r4, r2 | r4 = r2;
0x0006038c bl 0x6ae40 | r0 = strlen ();
0x00060390 cmp r0, 0xff |
0x00060392 it hi |
| if (r0 <= 0xff) {
0x00060394 movhi r6, 0 | r6 = 0;
| }
| if (r0 > 0xff) {
0x00060396 bhi 0x6042e | goto label_1;
| }
0x00060398 mov r5, r0 | r5 = r0;
0x0006039a add r1, sp, 8 | r1 += var_8h;
0x0006039c mov r0, r7 | r0 = r7;
0x0006039e bl 0x9db70 | r0 = fstat64_time64 ();
0x000603a2 cmp r0, 0 |
| if (r0 != 0) {
0x000603a4 bne 0x60436 | goto label_5;
| }
0x000603a6 ldr r0, [pc, 0x154] |
0x000603a8 movs r3, 1 | r3 = 1;
0x000603aa add r0, pc | r0 = 0xc08ac;
| do {
0x000603ac ldrex r2, [r0] | __asm ("ldrex r2, [r0]");
0x000603b0 cmp r2, 0 |
| if (r2 != 0) {
0x000603b2 bne 0x603c0 | goto label_6;
| }
0x000603b4 strex r1, r3, [r0] | __asm ("strex r1, r3, [r0]");
0x000603b8 cmp r1, 0 |
0x000603ba bne 0x603ac |
| } while (r1 != 0);
0x000603bc dmb ish | __asm ("dmb ish");
| if (r1 != 0) {
| label_6:
0x000603c0 bne.w 0x604da | goto label_7;
| }
| label_3:
0x000603c4 add.w sb, r5, 1 | sb = r5 + 1;
0x000603c8 mov r1, r8 | r1 = r8;
0x000603ca mov r2, sb | r2 = sb;
0x000603cc add r0, sp, 0x90 | r0 += s1;
0x000603ce blx 0x6d540 | memcpy (r0, r1, r2);
0x000603d2 ldr r1, [pc, 0x12c] |
0x000603d4 add r0, sp, 0x78 | r0 += var_78h;
0x000603d6 ldr r2, [pc, 0x12c] |
0x000603d8 vldr d16, [sp, 8] | __asm ("vldr d16, [sp, 8]");
0x000603dc vldr d17, [sp, 0x10] | __asm ("vldr d17, [sp, 0x10]");
0x000603e0 add r1, pc | r1 = 0xc08e6;
0x000603e2 adds r1, 4 | r1 += 4;
0x000603e4 add r2, pc | r2 = 0xc08ee;
0x000603e6 vstr d16, [sp, 0x78] | __asm ("vstr d16, [sp, 0x78]");
0x000603ea vstr d17, [sp, 0x80] | __asm ("vstr d17, [sp, 0x80]");
0x000603ee bl 0xa9f78 | r0 = tfind ();
0x000603f2 mov r6, r0 | r6 = r0;
0x000603f4 cmp r0, 0 |
| if (r0 == 0) {
0x000603f6 beq 0x60470 | goto label_8;
| }
0x000603f8 ldr r3, [r0] | r3 = *(r0);
0x000603fa subs r1, r4, 1 | r1 = r4 - 1;
0x000603fc ldrd r2, r6, [r3, 0x10] | __asm ("ldrd r2, r6, [r3, 0x10]");
0x00060400 subs r5, r4, r6 | r5 = r4 - r6;
0x00060402 add.w r2, r2, 1 | r2++;
0x00060406 it ne |
| if (r5 == r4) {
0x00060408 movne r5, 1 | r5 = 1;
| }
0x0006040a adds r1, 3 | r1 += 3;
0x0006040c it hi |
| if (r1 <= 3) {
0x0006040e movhi r5, 0 | r5 = 0;
| }
0x00060410 str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
| label_0:
0x00060412 ldr r0, [pc, 0xf4] |
0x00060414 movs r2, 0 | r2 = 0;
0x00060416 dmb ish | __asm ("dmb ish");
0x0006041a add r0, pc | r0 = 0xc0928;
| do {
0x0006041c ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x00060420 strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x00060424 cmp r1, 0 |
0x00060426 bne 0x6041c |
| } while (r1 != 0);
0x00060428 cmp r3, 1 |
| if (r3 > 1) {
0x0006042a bgt 0x604b8 | goto label_9;
| }
| if (r5 != 0) {
0x0006042c cbnz r5, 0x6044a | goto label_2;
| }
| do {
| label_1:
0x0006042e mov r0, r6 | r0 = r6;
0x00060430 add sp, 0x194 |
0x00060432 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_5:
0x00060436 movs r6, 0 | r6 = 0;
0x00060438 subs r3, r4, 1 | r3 = r4 - 1;
0x0006043a subs r5, r4, r6 | r5 = r4 - r6;
0x0006043c it ne |
| if (r5 == r4) {
0x0006043e movne r5, 1 | r5 = 1;
| }
0x00060440 adds r3, 3 | r3 += 3;
0x00060442 it hi |
| if (r3 <= 3) {
0x00060444 movhi r5, 0 | r5 = 0;
| }
0x00060446 cmp r5, 0 |
0x00060448 beq 0x6042e |
| } while (r5 == 0);
| label_2:
0x0006044a ldr r2, [pc, 0xa8] |
0x0006044c mrc p15, 0, r3, c13, c0, 3 | __asm ("mrc p15, 0, r3, c13, c0, 3");
0x00060450 movs r1, 0x10 | r1 = 0x10;
0x00060452 mov r0, r4 | r0 = r4;
0x00060454 mov r4, r3 | r4 = r3;
0x00060456 add r2, pc |
0x00060458 ldr r2, [r2] | r2 = *(0xc0950);
0x0006045a ldr r5, [r3, r2] | r5 = *((r3 + r2));
0x0006045c bl 0xa90c0 | munmap ();
0x00060460 ldr r3, [pc, 0x94] |
0x00060462 mov r0, r6 | r0 = r6;
0x00060464 add r3, pc |
0x00060466 ldr r3, [r3] | r3 = *(0xc0960);
0x00060468 str r5, [r4, r3] | *((r4 + r3)) = r5;
0x0006046a add sp, 0x194 |
0x0006046c pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_8:
0x00060470 add.w r0, r5, 0x19 | r0 = r5 + 0x19;
0x00060474 blx 0x1df60 | r0 = fcn_0001df60 ();
0x00060478 mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x0006047a cbz r0, 0x604c8 | goto label_10;
| }
| if (r4 == 0) {
0x0006047c cbz r4, 0x604e0 | goto label_11;
| }
| label_4:
0x0006047e vldr d16, [sp, 8] | __asm ("vldr d16, [sp, 8]");
0x00060482 vldr d17, [sp, 0x10] | __asm ("vldr d17, [sp, 0x10]");
0x00060486 movs r3, 1 | r3 = 1;
0x00060488 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x0006048a mov r2, sb | r2 = sb;
0x0006048c mov r1, r8 | r1 = r8;
0x0006048e add.w r0, r5, 0x18 | r0 = r5 + 0x18;
0x00060492 str r4, [r5, 0x14] | *((r5 + 0x14)) = r4;
0x00060494 vst1.64 {d16, d17}, [r5:0x40] | __asm ("vst1.64 {d16, d17}, [r5:0x40]");
0x00060498 blx 0x6d540 | memcpy (r0, r1, r2);
0x0006049c adds r3, r4, 1 | r3 = r4 + 1;
| if (r3 == r4) {
0x0006049e beq 0x604c2 | goto label_12;
| }
0x000604a0 ldr r1, [pc, 0x68] |
0x000604a2 mov r0, r5 | r0 = r5;
0x000604a4 ldr r2, [pc, 0x68] |
0x000604a6 add r1, pc | r1 = 0xc09b6;
0x000604a8 add r2, pc | r2 = 0xc09bc;
0x000604aa adds r1, 4 | r1 += 4;
0x000604ac bl 0xa9e70 | r0 = tsearch ();
| if (r0 == 0) {
0x000604b0 cbz r0, 0x604c2 | goto label_12;
| }
0x000604b2 mov r6, r4 | r6 = r4;
0x000604b4 movs r5, 0 | r5 = 0;
0x000604b6 b 0x60412 | goto label_0;
| label_9:
0x000604b8 bl 0x57f44 | lll_lock_wake_private ();
0x000604bc cmp r5, 0 |
| if (r5 == 0) {
0x000604be beq 0x6042e | goto label_1;
| }
0x000604c0 b 0x6044a | goto label_2;
| label_12:
0x000604c2 mov r0, r5 | r0 = r5;
0x000604c4 blx 0x1ded4 | fcn_0001ded4 ();
| label_10:
0x000604c8 subs r5, r4, 0 | r5 = r4 - 0;
0x000604ca add.w r3, r4, -1 | r3 = r4 + -1;
0x000604ce it ne |
| if (r5 == r4) {
0x000604d0 movne r5, 1 | r5 = 1;
| }
0x000604d2 adds r3, 3 | r3 += 3;
0x000604d4 it hi |
| if (r3 <= 3) {
0x000604d6 movhi r5, 0 | r5 = 0;
| }
0x000604d8 b 0x60412 | goto label_0;
| label_7:
0x000604da bl 0x57ea8 | lll_lock_wait_private ();
0x000604de b 0x603c4 | goto label_3;
| label_11:
0x000604e0 mov r0, r4 | r0 = r4;
0x000604e2 strd r7, r4, [sp] | __asm ("strd r7, r4, [sp]");
0x000604e6 movs r3, 1 | r3 = 1;
0x000604e8 movs r2, 3 | r2 = 3;
0x000604ea movs r1, 0x10 | r1 = 0x10;
0x000604ec bl 0xa9000 | r0 = mmap ()
0x000604f0 mov r4, r0 | r4 = r0;
0x000604f2 b 0x6047e | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x63f74 */
| #include <stdint.h>
|
; (fcn) fcn.00063f74 () | void fcn_00063f74 (uint32_t arg1, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x00063f74 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00063f78 mov sb, r2 | sb = r2;
0x00063f7a ldr r2, [pc, 0x150] |
0x00063f7c ldr.w r8, [pc, 0x150] | r8 = *(0x000640d0);
0x00063f80 add r2, pc |
0x00063f82 vpush {d8} | __asm ("vpush {d8}");
0x00063f86 ldr r2, [r2, 0x18] | r2 = *(0xc806a);
0x00063f88 sub sp, 8 |
0x00063f8a add r8, pc | r8 += pc;
0x00063f8c lsls r5, r2, 2 | r5 = r2 << 2;
| if (r2 == 0) {
0x00063f8e cbnz r2, 0x63f98 |
0x00063f90 mov.w r2, 0x8000 | r2 = 0x8000;
0x00063f94 mov.w r5, 0x100000 | r5 = 0x100000;
| }
0x00063f98 add r1, r0 | r1 += r0;
0x00063f9a cmp r1, r2 |
| if (r1 > r2) {
0x00063f9c blo 0x63fa4 |
0x00063f9e cmp r1, r5 |
| if (r1 > r5) {
0x00063fa0 bhi 0x64096 | goto label_5;
| }
0x00063fa2 mov r2, r1 | r2 = r1;
| }
| label_1:
0x00063fa4 ldr.w sl, [pc, 0x12c] | sl = *(0x000640d4);
0x00063fa8 orr r6, r3, 0x22 | r6 = r3 | 0x22;
0x00063fac add.w r3, sb, -1 | r3 = sb + -1;
0x00063fb0 rsb.w r7, sb, 0 | r7 = sb - ;
0x00063fb4 add r3, r2 | r3 += r2;
0x00063fb6 add sl, pc | sl += pc;
0x00063fb8 ands r7, r3 | r7 &= r3;
0x00063fba ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x00063fbe vdup.32 d8, r7 | __asm ("vdup.32 d8, r7");
0x00063fc2 cmp r0, 0 |
| if (r0 == 0) {
0x00063fc4 beq 0x64042 | goto label_6;
| }
0x00063fc6 movs r4, 0 | r4 = 0;
0x00063fc8 mov.w r3, -1 | r3 = -1;
0x00063fcc strd r3, r4, [sp] | __asm ("strd r3, r4, [sp]");
0x00063fd0 mov r2, r4 | r2 = r4;
0x00063fd2 mov r1, r5 | r1 = r5;
0x00063fd4 mov r3, r6 | r3 = r6;
0x00063fd6 bl 0xa9000 | r0 = mmap ()
0x00063fda adds r1, r0, 1 | r1 = r0 + 1;
0x00063fdc str.w r4, [sl, 0xc] | __asm ("str.w r4, [sl, 0xc]");
0x00063fe0 mov r4, r0 | r4 = r0;
| if (r1 == r0) {
0x00063fe2 beq 0x64042 | goto label_6;
| }
0x00063fe4 subs r3, r5, 1 | r3 = r5 - 1;
0x00063fe6 tst r0, r3 |
| if ((r0 & r3) != 0) {
0x00063fe8 bne 0x6403c | goto label_7;
| }
| label_4:
0x00063fea movs r2, 3 | r2 = 3;
0x00063fec mov r1, r7 | r1 = r7;
0x00063fee mov r0, r4 | r0 = r4;
0x00063ff0 bl 0xa90e0 | r0 = mprotect ();
0x00063ff4 cmp r0, 0 |
| if (r0 != 0) {
0x00063ff6 bne 0x6408a | goto label_8;
| }
| do {
0x00063ff8 ldr r3, [pc, 0xdc] |
0x00063ffa add r3, pc |
0x00063ffc ldr r3, [r3, 0x14] | r3 = *(0xc80ea);
0x00063ffe subs r3, 1 | r3--;
0x00064000 cmp r3, r7 |
| if (r3 < r7) {
0x00064002 bhs 0x64024 |
0x00064004 ldr r3, [pc, 0xd4] |
0x00064006 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x0006400a ldr r3, [r3, 0xc] | r3 = *(0x640e8);
0x0006400c subs r2, r3, 1 | r2 = r3 - 1;
0x0006400e ands r2, r4 | r2 &= r4;
0x00064010 ittte ne |
| if (r2 == r4) {
0x00064012 addne r7, r7, r2 | r7 += r2;
| }
| if (r2 != r4) {
0x00064014 rsbne r3, r3, 0 | __asm ("rsbne r3, r3, 0");
| }
| if (r2 == r4) {
0x00064016 andne r0, r3, r4 | r0 = r3 & r4;
| }
| if (r2 == r4) {
0x0006401a mov r0, r4 | r0 = r4;
| }
0x0006401c movs r2, 0xe | r2 = 0xe;
0x0006401e mov r1, r7 | r1 = r7;
0x00064020 bl 0xa9180 | madvise ();
| }
0x00064024 add.w r3, r4, 8 | r3 = r4 + 8;
0x00064028 vst1.32 {d8}, [r3] | __asm ("vst1.32 {d8}, [r3]");
0x0006402c str.w sb, [r4, 0x10] | __asm ("str.w sb, [r4, 0x10]");
| label_0:
0x00064030 mov r0, r4 | r0 = r4;
0x00064032 add sp, 8 |
0x00064034 vpop {d8} | __asm ("vpop {d8}");
0x00064038 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_7:
0x0006403c mov r1, r5 | r1 = r5;
0x0006403e bl 0xa90c0 | munmap ();
| label_6:
0x00064042 movs r4, 0 | r4 = 0;
0x00064044 mov.w r3, -1 | r3 = -1;
0x00064048 mov r2, r4 | r2 = r4;
0x0006404a strd r3, r4, [sp] | __asm ("strd r3, r4, [sp]");
0x0006404e lsls r1, r5, 1 | r1 = r5 << 1;
0x00064050 mov r3, r6 | r3 = r6;
0x00064052 mov r0, r4 | r0 = r4;
0x00064054 bl 0xa9000 | r0 = mmap ()
0x00064058 adds r2, r0, 1 | r2 = r0 + 1;
| if (r2 == r0) {
0x0006405a beq 0x640a8 | goto label_9;
| }
0x0006405c subs r4, r5, 1 | r4 = r5 - 1;
0x0006405e rsbs r3, r5, 0 | r3 = r5 - ;
0x00064060 add r4, r0 | r4 += r0;
0x00064062 ands r4, r3 | r4 &= r3;
0x00064064 subs r6, r4, r0 | r6 = r4 - r0;
0x00064066 add.w sl, r4, r5 | sl = r4 + r5;
| if (r6 != r4) {
0x0006406a bne 0x640a0 | goto label_10;
| }
0x0006406c ldr r3, [pc, 0x70] |
0x0006406e add r3, pc | r3 = 0xc8152;
0x00064070 str.w sl, [r3, 0xc] | __asm ("str.w sl, [r3, 0xc]");
| label_3:
0x00064074 subs r1, r5, r6 | r1 = r5 - r6;
0x00064076 mov r0, sl | r0 = sl;
0x00064078 bl 0xa90c0 | munmap ();
0x0006407c movs r2, 3 | r2 = 3;
0x0006407e mov r1, r7 | r1 = r7;
0x00064080 mov r0, r4 | r0 = r4;
0x00064082 bl 0xa90e0 | r0 = mprotect ();
0x00064086 cmp r0, 0 |
0x00064088 beq 0x63ff8 |
| } while (r0 == 0);
| label_8:
0x0006408a mov r1, r5 | r1 = r5;
0x0006408c mov r0, r4 | r0 = r4;
0x0006408e bl 0xa90c0 | munmap ();
| label_2:
0x00064092 movs r4, 0 | r4 = 0;
0x00064094 b 0x64030 | goto label_0;
| label_5:
0x00064096 cmp r0, r5 |
0x00064098 it ls |
| if (r0 <= r5) {
0x0006409a movls r2, r5 | r2 = r5;
| goto label_11;
| }
| if (r0 < r5) {
| label_11:
0x0006409c bls 0x63fa4 | goto label_1;
| }
0x0006409e b 0x64092 | goto label_2;
| label_10:
0x000640a0 mov r1, r6 | r1 = r6;
0x000640a2 bl 0xa90c0 | munmap ();
0x000640a6 b 0x64074 | goto label_3;
| label_9:
0x000640a8 mov r3, r6 | r3 = r6;
0x000640aa mov r2, r4 | r2 = r4;
0x000640ac str r0, [sp] | *(sp) = r0;
0x000640ae mov r1, r5 | r1 = r5;
0x000640b0 mov r0, r4 | r0 = r4;
0x000640b2 str r4, [sp, 4] | var_4h = r4;
0x000640b4 bl 0xa9000 | r0 = mmap ()
0x000640b8 adds r3, r0, 1 | r3 = r0 + 1;
0x000640ba mov r4, r0 | r4 = r0;
| if (r3 == r0) {
0x000640bc beq 0x64092 | goto label_2;
| }
0x000640be subs r3, r5, 1 | r3 = r5 - 1;
0x000640c0 tst r0, r3 |
| if ((r0 & r3) == 0) {
0x000640c2 beq 0x63fea | goto label_4;
| }
0x000640c4 mov r1, r5 | r1 = r5;
0x000640c6 bl 0xa90c0 | munmap ();
0x000640ca b 0x64092 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x6467c */
| #include <stdint.h>
|
; (fcn) fcn.0006467c () | void fcn_0006467c (int16_t arg_28h, int16_t arg_2ch, int16_t arg1, uint32_t arg2, int16_t arg3, uint32_t arg4) {
| int32_t var_0h;
| int32_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0006467c push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00064680 sub sp, 0xc |
0x00064682 ldr r4, [pc, 0xa4] |
0x00064684 mov r6, r0 | r6 = r0;
0x00064686 ldr r0, [sp, 0x28] | r0 = *(arg_28h);
0x00064688 add r4, pc | r4 = 0xc8db6;
0x0006468a ldr.w sb, [pc, 0xa0] | sb = *(0x0006472c);
0x0006468e ldr r7, [r4, 4] | r7 = *(0xc8dba);
0x00064690 ldr r4, [r6] | r4 = *(r6);
0x00064692 add sb, pc | sb += pc;
0x00064694 ldr.w r8, [sp, 0x2c] | r8 = *(arg_2ch);
0x00064698 lsls r5, r7, 0x1e | r5 = r7 << 0x1e;
0x0006469a itttt pl |
| if (r5 < r7) {
0x0006469c addpl r5, r0, -1 | r5 = r0 + -1;
| }
| if (r5 >= r7) {
0x000646a0 rsbpl r0, r0, 0 | __asm ("rsbpl r0, r0, 0");
| }
| if (r5 < r7) {
0x000646a2 addpl r2, r2, r5 | r2 += r5;
| }
| if (r5 >= r7) {
0x000646a4 adds r2, r2, r4 | r2 += r4;
| }
0x000646a6 it pl |
| if (r2 < r2) {
0x000646a8 andpl r4, r2, r0 | r4 = r2 & r0;
| }
0x000646ac cmp r4, r3 |
0x000646ae mov r5, r4 | r5 = r4;
0x000646b0 it lo |
| if (r4 >= r3) {
0x000646b2 movlo r4, r3 | r4 = r3;
| }
0x000646b4 cmp r3, r5 |
0x000646b6 it hi |
| if (r3 <= r5) {
0x000646b8 movhi r5, r4 | r5 = r4;
| }
0x000646ba cmp r1, r5 |
0x000646bc it hs |
| if (r1 < r5) {
0x000646be movhs r7, 0 | r7 = 0;
| }
| if (r1 >= r5) {
0x000646c0 bhs 0x646f2 | goto label_1;
| }
0x000646c2 mov.w r3, -1 | r3 = -1;
0x000646c6 movs r0, 0 | r0 = 0;
0x000646c8 strd r3, r0, [sp] | __asm ("strd r3, r0, [sp]");
0x000646cc movs r2, 3 | r2 = 3;
0x000646ce orr r3, r8, 0x22 | r3 = r8 | 0x22;
0x000646d2 mov r1, r5 | r1 = r5;
0x000646d4 bl 0xa9000 | r0 = mmap ()
0x000646d8 adds r3, r0, 1 | r3 = r0 + 1;
0x000646da mov r7, r0 | r7 = r0;
| if (r3 == r0) {
0x000646dc beq 0x646f2 | goto label_1;
| }
0x000646de tst.w r8, 0x40000 |
0x000646e2 beq 0x646fa |
| while (r3 >= r5) {
| label_0:
0x000646e4 ldr r2, [pc, 0x48] |
0x000646e6 add r2, pc | r2 = 0xc8e1a;
0x000646e8 ldr r3, [r2, 4] | r3 = *(0xc8e1e);
0x000646ea orr r3, r3, 2 | r3 |= 2;
0x000646ee str r3, [r2, 4] | *((r2 + 4)) = r3;
0x000646f0 str r4, [r6] | *(r6) = r4;
| label_1:
0x000646f2 mov r0, r7 | r0 = r7;
0x000646f4 add sp, 0xc |
0x000646f6 pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x000646fa ldr r3, [pc, 0x38] |
0x000646fc add r3, pc |
0x000646fe ldr r3, [r3, 0x14] | r3 = *(0xc8e4a);
0x00064700 subs r3, 1 | r3--;
0x00064702 cmp r3, r5 |
0x00064704 bhs 0x646e4 |
| }
0x00064706 ldr r3, [pc, 0x30] |
0x00064708 ldr.w r3, [sb, r3] | r3 = *((sb + r3));
0x0006470c ldr r3, [r3, 0xc] | r3 = *(0x64746);
0x0006470e subs r2, r3, 1 | r2 = r3 - 1;
0x00064710 ands r2, r0 | r2 &= r0;
0x00064712 ittte ne |
| if (r2 == r0) {
0x00064714 addne r5, r5, r2 | r5 += r2;
| }
| if (r2 != r0) {
0x00064716 rsbne r3, r3, 0 | __asm ("rsbne r3, r3, 0");
| }
| if (r2 == r0) {
0x00064718 andne r0, r3 | r0 &= r3;
| }
| if (r2 != r0) {
0x0006471a moveq r0, r7 | r0 = r7;
| }
0x0006471c mov r1, r5 | r1 = r5;
0x0006471e movs r2, 0xe | r2 = 0xe;
0x00064720 bl 0xa9180 | madvise ();
0x00064724 b 0x646e4 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x6473c */
| #include <stdint.h>
|
; (fcn) fcn.0006473c () | void fcn_0006473c (uint32_t arg1, int16_t arg2, int16_t arg3) {
| int32_t var_0h;
| int32_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0006473c push {r4, r5, r6, r7, lr} |
0x0006473e adds r4, r1, 3 | r4 = r1 + 3;
0x00064740 add r4, r0 | r4 += r0;
0x00064742 rsbs r1, r1, 0 | r1 -= ;
0x00064744 ands r4, r1 | r4 &= r1;
0x00064746 sub sp, 0xc |
0x00064748 ldr r7, [pc, 0x110] |
0x0006474a cmp r0, r4 |
0x0006474c add r7, pc | r7 = 0xc8fac;
0x0006474e blo 0x64758 |
| while (r2 == r0) {
0x00064750 mov.w r0, -1 | r0 = -1;
| label_3:
0x00064754 add sp, 0xc |
0x00064756 pop {r4, r5, r6, r7, pc} |
0x00064758 mov.w r3, -1 | r3 = -1;
0x0006475c movs r0, 0 | r0 = 0;
0x0006475e strd r3, r0, [sp] | __asm ("strd r3, r0, [sp]");
0x00064762 mov r6, r2 | r6 = r2;
0x00064764 orr r3, r2, 0x22 | r3 = r2 | 0x22;
0x00064768 mov r1, r4 | r1 = r4;
0x0006476a movs r2, 3 | r2 = 3;
0x0006476c bl 0xa9000 | r0 = mmap ()
0x00064770 adds r2, r0, 1 | r2 = r0 + 1;
0x00064772 mov r5, r0 | r5 = r0;
0x00064774 beq 0x64750 |
| }
0x00064776 lsls r3, r6, 0xd | r3 = r6 << 0xd;
| if (r3 >= r6) {
0x00064778 bpl 0x6481c | goto label_6;
| }
| label_5:
0x0006477a ands r3, r5, 7 | r3 = r5 & 7;
0x0006477e add.w r0, r5, 8 | r0 = r5 + 8;
| if (r3 != r5) {
0x00064782 bne 0x64848 | goto label_7;
| }
0x00064784 ldr r6, [pc, 0xd8] |
0x00064786 orr r2, r4, 2 | r2 = r4 | 2;
0x0006478a strd r3, r2, [r5] | __asm ("strd r3, r2, [r5]");
0x0006478e add r6, pc | r6 = 0xc8ff2;
0x00064790 add.w r1, r6, 0x20 | r1 = r6 + 0x20;
| label_0:
0x00064794 ldr r2, [r6, 0x20] | r2 = *((r6 + 0x20));
0x00064796 adds r3, r2, 1 | r3 = r2 + 1;
| do {
0x00064798 ldrex r5, [r1] | __asm ("ldrex r5, [r1]");
0x0006479c cmp r5, r2 |
| if (r5 != r2) {
0x0006479e bne 0x647ac | goto label_8;
| }
0x000647a0 strex r7, r3, [r1] | __asm ("strex r7, r3, [r1]");
0x000647a4 cmp r7, 0 |
0x000647a6 bne 0x64798 |
| } while (r7 != 0);
0x000647a8 dmb ish | __asm ("dmb ish");
| if (r7 != 0) {
| label_8:
0x000647ac bne 0x64794 | goto label_0;
| }
0x000647ae ldr r1, [pc, 0xb4] |
0x000647b0 add r1, pc | r1 = 0xc901a;
0x000647b2 add.w r5, r1, 0x28 | r5 = r1 + 0x28;
| label_1:
0x000647b6 ldr r2, [r1, 0x28] | r2 = *((r1 + 0x28));
0x000647b8 cmp r3, r2 |
| if (r3 <= r2) {
0x000647ba ble 0x647d2 | goto label_9;
| }
| do {
0x000647bc ldrex r6, [r5] | __asm ("ldrex r6, [r5]");
0x000647c0 cmp r6, r2 |
| if (r6 != r2) {
0x000647c2 bne 0x647d0 | goto label_10;
| }
0x000647c4 strex r7, r3, [r5] | __asm ("strex r7, r3, [r5]");
0x000647c8 cmp r7, 0 |
0x000647ca bne 0x647bc |
| } while (r7 != 0);
0x000647cc dmb ish | __asm ("dmb ish");
| if (r7 != 0) {
| label_10:
0x000647d0 bne 0x647b6 | goto label_1;
| }
| label_9:
0x000647d2 ldr r5, [pc, 0x94] |
0x000647d4 add r5, pc | r5 = 0xc9042;
0x000647d6 add.w r1, r5, 0x30 | r1 = r5 + 0x30;
| label_2:
0x000647da ldr r2, [r5, 0x30] | r2 = *((r5 + 0x30));
0x000647dc adds r3, r4, r2 | r3 = r4 + r2;
| do {
0x000647de ldrex r6, [r1] | __asm ("ldrex r6, [r1]");
0x000647e2 cmp r6, r2 |
| if (r6 != r2) {
0x000647e4 bne 0x647f2 | goto label_11;
| }
0x000647e6 strex r7, r3, [r1] | __asm ("strex r7, r3, [r1]");
0x000647ea cmp r7, 0 |
0x000647ec bne 0x647de |
| } while (r7 != 0);
0x000647ee dmb ish | __asm ("dmb ish");
| if (r7 != 0) {
| label_11:
0x000647f2 bne 0x647da | goto label_2;
| }
0x000647f4 ldr r1, [pc, 0x74] |
0x000647f6 add r1, pc | r1 = 0xc9066;
0x000647f8 add.w r4, r1, 0x34 | r4 = r1 + 0x34;
| label_4:
0x000647fc ldr r2, [r1, 0x34] | r2 = *((r1 + 0x34));
0x000647fe cmp r3, r2 |
| if (r3 < r2) {
0x00064800 bls 0x64754 | goto label_3;
| }
| do {
0x00064802 ldrex r5, [r4] | __asm ("ldrex r5, [r4]");
0x00064806 cmp r5, r2 |
| if (r5 != r2) {
0x00064808 bne 0x64816 | goto label_12;
| }
0x0006480a strex r6, r3, [r4] | __asm ("strex r6, r3, [r4]");
0x0006480e cmp r6, 0 |
0x00064810 bne 0x64802 |
| } while (r6 != 0);
0x00064812 dmb ish | __asm ("dmb ish");
| if (r6 != 0) {
| label_12:
0x00064816 bne 0x647fc | goto label_4;
| }
0x00064818 add sp, 0xc |
0x0006481a pop {r4, r5, r6, r7, pc} |
| label_6:
0x0006481c ldr r3, [pc, 0x50] |
0x0006481e add r3, pc |
0x00064820 ldr r3, [r3, 0x14] | r3 = *(0xc90a6);
0x00064822 subs r3, 1 | r3--;
0x00064824 cmp r3, r4 |
| if (r3 >= r4) {
0x00064826 bhs 0x6477a | goto label_5;
| }
0x00064828 ldr r3, [pc, 0x48] | r3 = *(0x64874);
0x0006482a ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x0006482c ldr r2, [r3, 0xc] | r2 = *(0x64880);
0x0006482e subs r3, r2, 1 | r3 = r2 - 1;
0x00064830 ands r3, r0 | r3 &= r0;
0x00064832 ittte ne |
| if (r3 != r0) {
0x00064834 rsbne r2, r2, 0 | __asm ("rsbne r2, r2, 0");
| }
| if (r3 == r0) {
0x00064836 addne r1, r4, r3 | r1 = r4 + r3;
| }
| if (r3 == r0) {
0x00064838 andne r0, r2 | r0 &= r2;
| }
| if (r3 != r0) {
0x0006483a moveq r1, r4 | r1 = r4;
| }
0x0006483c it eq |
| if (r3 != r0) {
0x0006483e moveq r0, r5 | r0 = r5;
| }
0x00064840 movs r2, 0xe | r2 = 0xe;
0x00064842 bl 0xa9180 | madvise ();
0x00064846 b 0x6477a | goto label_5;
| label_7:
0x00064848 ldr r3, [pc, 0x2c] |
0x0006484a movs r0, 1 | r0 = 1;
0x0006484c ldr r2, [pc, 0x2c] |
0x0006484e ldr r1, [pc, 0x30] |
0x00064850 add r3, pc | r3 = 0xc90cc;
0x00064852 add r2, pc | r2 = 0xc90d2;
0x00064854 add r1, pc | r1 = 0xc90da;
0x00064856 bl 0x534ac | fcn_000534ac (r0);
0x0006485a nop |
0x0006485c invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x6492c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0006492c () | void fcn_0006492c (int16_t arg_ch, int16_t arg_10h, int16_t arg1, uint32_t arg2, int16_t arg3) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_ch;
| int16_t var_4h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_27h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0006492c ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x0006492e push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00064932 mov r7, r2 | r7 = r2;
0x00064934 ldr.w r8, [pc, 0x614] | r8 = *(0x00064f4c);
0x00064938 sub sp, 0x2c |
0x0006493a bic r5, r3, 7 | r5 = BIT_MASK (r3, 7);
0x0006493e rsbs r2, r5, 0 | r2 = r5 - ;
0x00064940 cmp r2, r1 |
0x00064942 add r8, pc | r8 += pc;
| if (r2 <= r1) {
0x00064944 blo.w 0x64c5c | goto label_21;
| }
0x00064948 ands sl, r1, 7 | sl = r1 & 7;
0x0006494c mov r4, r1 | r4 = r1;
| if (sl != r1) {
0x0006494e bne.w 0x64c5c | goto label_21;
| }
0x00064952 cmp r5, 0xf |
| if (r5 < 0xf) {
0x00064954 bls.w 0x64c70 | goto label_22;
| }
0x00064958 ldr.w r2, [pc, 0x5f4] | r2 = *(0x00064f50);
0x0006495c mov r6, r0 | r6 = r0;
0x0006495e add r2, pc | r2 += pc;
0x00064960 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00064962 cmp r5, r2 |
| if (r5 > r2) {
0x00064964 bhi 0x649e8 | goto label_23;
| }
0x00064966 add.w r8, r1, r5 | r8 = r1 + r5;
0x0006496a ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x0006496e cmp r3, 8 |
| if (r3 < 8) {
0x00064970 bls.w 0x64c78 | goto label_24;
| }
0x00064974 ldr.w r2, [r0, 0x450] | r2 = *((r0 + 0x450));
0x00064978 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x0006497c cmp r3, r2 |
| if (r3 >= r2) {
0x0006497e bhs.w 0x64c78 | goto label_24;
| }
| label_4:
0x00064982 ldr.w r3, [pc, 0x5d0] | r3 = *(0x00064f54);
0x00064986 add r3, pc | r3 += pc;
0x00064988 ldr r1, [r3] | r1 = *(r3);
0x0006498a cmp r1, 0 |
| if (r1 != 0) {
0x0006498c bne.w 0x64d2a | goto label_25;
| }
| label_8:
0x00064990 movs r3, 1 | r3 = 1;
0x00064992 lsrs r5, r5, 3 | r5 >>= 3;
0x00064994 str r3, [r6, 8] | *((r6 + 8)) = r3;
0x00064996 ldr.w r3, [pc, 0x5c0] | r3 = *(0x00064f58);
0x0006499a add.w r2, r6, r5, lsl 2 | r2 = r6 + (r5 << 2);
0x0006499e add r3, pc | r3 += pc;
0x000649a0 ldrb r1, [r3] | r1 = *(r3);
0x000649a2 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x000649a4 cmp r1, 0 |
| if (r1 != 0) {
0x000649a6 bne.w 0x64c0c | goto label_26;
| }
0x000649aa adds r1, r5, 1 | r1 = r5 + 1;
0x000649ac add.w r0, r4, 8 | r0 = r4 + 8;
0x000649b0 add.w r1, r6, r1, lsl 2 | r1 = r6 + (r1 << 2);
0x000649b4 lsrs r0, r0, 0xc | r0 >>= 0xc;
0x000649b6 b 0x649da | goto label_27;
| label_0:
0x000649b8 eor.w r2, r0, r3 | r2 = r0 ^ r3;
0x000649bc str r2, [r4, 8] | *((r4 + 8)) = r2;
0x000649be dmb ish | __asm ("dmb ish");
| do {
0x000649c2 ldrex r2, [r1] | __asm ("ldrex r2, [r1]");
0x000649c6 cmp r2, r3 |
| if (r2 != r3) {
0x000649c8 bne 0x649d2 | goto label_28;
| }
0x000649ca strex r6, r4, [r1] | __asm ("strex r6, r4, [r1]");
0x000649ce cmp r6, 0 |
0x000649d0 bne 0x649c2 |
| } while (r6 != 0);
| label_28:
0x000649d2 cmp r3, r2 |
| if (r3 == r2) {
0x000649d4 beq.w 0x64c20 | goto label_29;
| }
0x000649d8 mov r3, r2 | r3 = r2;
| label_27:
0x000649da cmp r3, r4 |
| if (r3 != r4) {
0x000649dc bne 0x649b8 | goto label_0;
| }
| label_2:
0x000649de ldr.w r0, [pc, 0x57c] | r0 = *(0x00064f5c);
0x000649e2 add r0, pc | r0 += pc;
0x000649e4 bl 0x636c8 | fcn_000636c8 (r0);
| label_23:
0x000649e8 lsls r3, r3, 0x1e | r3 <<= 0x1e;
| if (r3 < r3) {
0x000649ea bmi.w 0x64c64 | goto label_30;
| }
0x000649ee ldr.w r3, [pc, 0x570] | r3 = *(0x00064f60);
0x000649f2 eor r7, r7, 1 | r7 ^= 1;
0x000649f6 add r3, pc | r3 += pc;
0x000649f8 ldrb r3, [r3] | r3 = *(r3);
0x000649fa cmp r3, 0 |
0x000649fc ite ne |
| if (r3 == 0) {
0x000649fe movne r7, 0 | r7 = 0;
| }
| if (r3 != 0) {
0x00064a00 andeq r7, r7, 1 | r7 &= 1;
| }
0x00064a04 cmp r7, 0 |
| if (r7 != 0) {
0x00064a06 bne.w 0x64c3c | goto label_31;
| }
0x00064a0a mov.w sl, 1 | sl = 1;
| label_3:
0x00064a0e ldr r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x00064a10 adds r7, r4, r5 | r7 = r4 + r5;
0x00064a12 cmp r3, r4 |
| if (r3 == r4) {
0x00064a14 beq.w 0x64d42 | goto label_32;
| }
0x00064a18 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x00064a1a lsls r0, r2, 0x1e | r0 = r2 << 0x1e;
| if (r0 >= r2) {
0x00064a1c bpl.w 0x64ddc | goto label_33;
| }
| label_13:
0x00064a20 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x00064a22 lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
| if (r1 >= r3) {
0x00064a24 bpl.w 0x64df2 | goto label_34;
| }
0x00064a28 cmp r3, 8 |
0x00064a2a bic sb, r3, 7 | sb = BIT_MASK (r3, 7);
| if (r3 < 8) {
0x00064a2e bls.w 0x64d22 | goto label_35;
| }
0x00064a32 ldr.w r3, [r6, 0x450] | r3 = *((r6 + 0x450));
0x00064a36 cmp r3, sb |
| if (r3 < sb) {
0x00064a38 bls.w 0x64d22 | goto label_35;
| }
0x00064a3c ldr.w r3, [pc, 0x524] |
0x00064a40 add r3, pc | r3 = 0xc99a8;
0x00064a42 ldr r1, [r3] | r1 = *(0xc99a8);
0x00064a44 cmp r1, 0 |
| if (r1 != 0) {
0x00064a46 bne.w 0x64e22 | goto label_36;
| }
| label_15:
0x00064a4a ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00064a4c lsls r2, r3, 0x1f | r2 = r3 << 0x1f;
| if (r2 >= r3) {
0x00064a4e bmi 0x64a68 |
0x00064a50 ldr r3, [r4] | r3 = *(r4);
0x00064a52 subs r4, r4, r3 | r4 -= r3;
0x00064a54 add r5, r3 | r5 += r3;
0x00064a56 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00064a58 bic r2, r2, 7 | r2 = BIT_MASK (r2, 7);
0x00064a5c cmp r2, r3 |
| if (r2 != r3) {
0x00064a5e bne.w 0x64e40 | goto label_37;
| }
0x00064a62 mov r0, r4 | r0 = r4;
0x00064a64 bl 0x63cb4 | fcn_00063cb4 (r0);
| }
0x00064a68 ldr r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x00064a6a cmp r3, r7 |
| if (r3 == r7) {
0x00064a6c beq.w 0x64d16 | goto label_38;
| }
0x00064a70 add.w r3, r7, sb | r3 = r7 + sb;
0x00064a74 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00064a76 lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 >= r3) {
0x00064a78 bpl.w 0x64d38 | goto label_39;
| }
0x00064a7c ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x00064a7e bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x00064a82 str r3, [r7, 4] | *((r7 + 4)) = r3;
| label_9:
0x00064a84 ldr r2, [r6, 0x3c] | r2 = *((r6 + 0x3c));
0x00064a86 add.w r3, r6, 0x34 | r3 = r6 + 0x34;
0x00064a8a ldr r1, [r2, 0xc] | r1 = *((r2 + 0xc));
0x00064a8c cmp r1, r3 |
| if (r1 != r3) {
0x00064a8e bne.w 0x64e38 | goto label_40;
| }
0x00064a92 cmp.w r5, 0x200 |
0x00064a96 orr r3, r5, 1 | r3 = r5 | 1;
0x00064a9a strd r2, r1, [r4, 8] | __asm ("strd r2, r1, [r4, 8]");
| if (r5 <= 0x200) {
0x00064a9e blo.w 0x64cca | goto label_41;
| }
0x00064aa2 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00064aa6 add.w r1, r4, 0x10 | r1 = r4 + 0x10;
0x00064aaa vst1.32 {d16}, [r1] | __asm ("vst1.32 {d16}, [r1]");
0x00064aae str r4, [r6, 0x3c] | *((r6 + 0x3c)) = r4;
0x00064ab0 str r4, [r2, 0xc] | *((r2 + 0xc)) = r4;
0x00064ab2 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00064ab4 str r5, [r4, r5] | *((r4 + r5)) = r5;
| label_7:
0x00064ab6 cmp.w r5, 0x10000 |
| if (r5 <= 0x10000) {
0x00064aba blo.w 0x64cd2 | goto label_10;
| }
0x00064abe ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00064ac0 cmp r3, 0 |
| if (r3 != 0) {
0x00064ac2 bne.w 0x64dc6 | goto label_42;
| }
| label_11:
0x00064ac6 ldr.w r3, [pc, 0x4a0] | r3 = *(0x00064f68);
0x00064aca add r3, pc | r3 += pc;
0x00064acc cmp r6, r3 |
| if (r6 == r3) {
0x00064ace beq.w 0x64dfa | goto label_43;
| }
0x00064ad2 ldr.w r3, [pc, 0x498] |
0x00064ad6 ldr r7, [r6, 0x34] | r7 = *((r6 + 0x34));
0x00064ad8 add r3, pc |
0x00064ada ldr r3, [r3, 0x18] | r3 = *(0xc9a62);
0x00064adc cmp r3, 0 |
| if (r3 == 0) {
0x00064ade beq.w 0x64e16 | goto label_44;
| }
0x00064ae2 lsl.w sb, r3, 2 | sb = r3 << 2;
0x00064ae6 rsb.w r5, sb, 0 | r5 = sb - ;
| label_14:
0x00064aea ands r5, r7 | r5 &= r7;
0x00064aec ldr r3, [r5] | r3 = *(r5);
0x00064aee cmp r3, r6 |
| if (r3 != r6) {
0x00064af0 bne.w 0x64f3a | goto label_45;
| }
0x00064af4 ldr.w r3, [pc, 0x478] |
0x00064af8 add r3, pc | r3 = 0xc9a6c;
0x00064afa ldr.w fp, [r3, 4] | fp = *(0xc9a70);
0x00064afe add.w r3, r5, 0x18 | r3 = r5 + 0x18;
0x00064b02 cmp r7, r3 |
| if (r7 != r3) {
0x00064b04 bne.w 0x64eb0 | goto label_46;
| }
0x00064b08 ldr.w r3, [pc, 0x468] | r3 = *(0x00064f74);
0x00064b0c add.w r2, fp, 0x10 | r2 += arg_10h;
0x00064b10 mov r1, r7 | r1 = r7;
0x00064b12 str.w fp, [sp, 0x18] | __asm ("str.w fp, [var_18h]");
0x00064b14 add sp, 0x60 |
0x00064b16 mov r7, r6 | r7 = r6;
0x00064b18 str r2, [sp, 0xc] | var_ch = r2;
0x00064b1a add r3, pc | r3 += pc;
0x00064b1c str.w sl, [sp, 0x14] | __asm ("str.w sl, [var_14h]");
0x00064b20 mov fp, r3 |
0x00064b22 str.w r8, [sp, 0x1c] | __asm ("str.w r8, [var_1ch]");
0x00064b26 b 0x64b50 |
| while (r2 < r3) {
| label_1:
0x00064b28 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00064b2a adds r2, r1, r4 | r2 = r1 + r4;
0x00064b2c subs r3, 1 | r3--;
0x00064b2e tst r2, r3 |
| if ((r2 & r3) != 0) {
0x00064b30 bne.w 0x64ed8 | goto label_47;
| }
0x00064b34 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x00064b36 add r3, r5 | r3 += r5;
0x00064b38 cmp r2, r3 |
| if (r2 != r3) {
0x00064b3a bne.w 0x64ec6 | goto label_48;
| }
0x00064b3e add.w r3, r5, 0x18 | r3 = r5 + 0x18;
0x00064b42 orr r4, r4, 1 | r4 |= 1;
0x00064b44 lsls r1, r0, 0x10 | r1 = r0 << 0x10;
0x00064b46 cmp r1, r3 |
0x00064b48 str r1, [r7, 0x34] | *((r7 + 0x34)) = r1;
0x00064b4a str r4, [r1, 4] | *((r1 + 4)) = r4;
| if (r1 != r3) {
0x00064b4c bne.w 0x64dce | goto label_49;
| }
0x00064b50 mov r0, r5 | r0 = r5;
0x00064b52 ldr r5, [r5, 4] | r5 = *((r5 + 4));
0x00064b54 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x00064b56 sub.w r3, r2, 8 | r3 = r2 - 8;
0x00064b5a adds r4, r5, r3 | r4 = r5 + r3;
0x00064b5c and r4, r4, 7 | r4 &= 7;
0x00064b60 subs r3, r3, r4 | r3 -= r4;
0x00064b62 adds r6, r5, r3 | r6 = r5 + r3;
0x00064b64 ldr.w ip, [r6, 4] | ip = *((r6 + 4));
0x00064b68 cmp.w ip, 1 |
| if (ip != 1) {
0x00064b6c bne.w 0x64efc | goto label_50;
| }
0x00064b70 ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x00064b72 sub.w sl, r6, r3 | sl = r6 - r3;
0x00064b76 rsb.w r8, r3, 0 | r8 = r3 - ;
0x00064b7a ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x00064b7e bic lr, r3, 7 | lr = BIT_MASK (r3, 7);
0x00064b82 orr.w r4, lr, r4 | r4 = lr | r4;
0x00064b86 add.w lr, r4, 7 | lr = r4 + 7;
0x00064b8a adds r4, 8 | r4 += 8;
0x00064b8c cmp.w lr, 0x1e |
| if (lr > 0x1e) {
0x00064b90 bhi.w 0x64eea | goto label_51;
| }
0x00064b94 tst.w r3, 1 |
0x00064b98 itt eq |
| if ((r3 & 1) != 0) {
0x00064b9a ldreq r3, [r6, r8] | r3 = *((r6 + r8));
| }
| if ((r3 & 1) == 0) {
0x00064b9e adds r4, r4, r3 | r4 += r3;
| }
0x00064ba0 cmp r4, 0 |
0x00064ba2 ite le |
| if (r4 > 0) {
0x00064ba4 movle r3, 0 | r3 = 0;
| }
| if (r4 <= 0) {
0x00064ba6 movgt r3, 1 | r3 = 1;
| }
0x00064ba8 cmp sb, r4 |
0x00064baa it ls |
| if (sb > r4) {
0x00064bac movls r3, 0 | r3 = 0;
| }
0x00064bae cmp r3, 0 |
| if (r3 == 0) {
0x00064bb0 beq.w 0x64eb4 | goto label_52;
| }
0x00064bb4 sub.w r2, sb, r2 | r2 = sb - r2;
0x00064bb8 ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x00064bba add.w ip, r2, r4 |
0x00064bbe ldr r2, [sp, 0xc] | r2 = var_ch;
0x00064bc0 add r3, r2 | r3 += r2;
0x00064bc2 cmp ip, r3 |
| if (ip <= r3) {
0x00064bc4 blo.w 0x64d4a | goto label_53;
| }
0x00064bc8 ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x00064bca mov r1, sb | r1 = sb;
0x00064bcc ldr.w r3, [r7, 0x450] | r3 = *((r7 + 0x450));
0x00064bd0 subs r3, r3, r2 | r3 -= r2;
0x00064bd2 add.w r2, r0, sb | r2 = r0 + sb;
0x00064bd6 str.w r3, [r7, 0x450] | __asm ("str.w r3, aav.0x000000ff");
0x00064bda ldr.w r3, [fp, 0xc] | r3 = *(arg_ch);
0x00064bde cmp r3, r2 |
0x00064be0 itt eq |
| if (r3 != r2) {
0x00064be2 moveq r3, 0 | r3 = 0;
| }
| if (r3 != r2) {
0x00064be4 streq r3, [fp, 0xc] | *(arg_ch) = r3;
| }
0x00064be8 bl 0xa90c0 | munmap ();
0x00064bec ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x00064bf0 lsls r2, r3, 0x1f | r2 = r3 << 0x1f;
0x00064bf2 it mi |
| if (r2 >= r3) {
0x00064bf4 movmi r1, sl | r1 = sl;
| }
0x00064bf6 bmi 0x64b28 |
| }
0x00064bf8 ldr.w r1, [r6, r8] | r1 = *((r6 + r8));
0x00064bfc sub.w r1, sl, r1 | r1 = sl - r1;
0x00064c00 mov r0, r1 | r0 = r1;
0x00064c02 str r1, [sp, 0x10] | var_4h = r1;
0x00064c04 bl 0x63cb4 | fcn_00063cb4 (r0);
0x00064c08 ldr r1, [sp, 0x10] | r1 = var_4h;
0x00064c0a b 0x64b28 | goto label_1;
| label_26:
0x00064c0c cmp r4, r3 |
0x00064c0e itttt ne |
| if (r4 == r3) {
0x00064c10 addne r1, r4, 8 | r1 = r4 + 8;
| }
| if (r4 == r3) {
0x00064c14 eorne r1, r3, r1, lsr 12 | r1 = r3 ^ (r1 >> 12);
| }
| if (r4 != r3) {
0x00064c18 str r1, [r4, 8] | *((r4 + 8)) = r1;
| }
| if (r4 == r3) {
0x00064c1a str r4, [r2, 4] | *((r2 + 4)) = r4;
| goto label_54;
| }
| if (r4 == r3) {
| label_54:
0x00064c1c beq.w 0x649de | goto label_2;
| }
| label_29:
0x00064c20 cmp r3, 0 |
0x00064c22 ite eq |
| if (r3 != 0) {
0x00064c24 moveq r7, 0 | r7 = 0;
| }
| if (r3 == 0) {
0x00064c26 andne r7, r7, 1 | r7 &= 1;
| }
| if (r7 != 0) {
0x00064c2a cbz r7, 0x64c36 |
0x00064c2c ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00064c2e cmp.w r5, r3, lsr 3 |
| if (r5 != r3) {
0x00064c32 bne.w 0x64e30 | goto label_55;
| }
| }
| label_5:
0x00064c36 add sp, 0x2c |
0x00064c38 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_31:
0x00064c3c movs r3, 1 | r3 = 1;
| do {
0x00064c3e ldrex r2, [r6] | __asm ("ldrex r2, [r6]");
0x00064c42 cmp r2, 0 |
| if (r2 != 0) {
0x00064c44 bne 0x64c52 | goto label_56;
| }
0x00064c46 strex r1, r3, [r6] | __asm ("strex r1, r3, [r6]");
0x00064c4a cmp r1, 0 |
0x00064c4c bne 0x64c3e |
| } while (r1 != 0);
0x00064c4e dmb ish | __asm ("dmb ish");
| if (r1 == 0) {
| label_56:
0x00064c52 beq.w 0x64a0e | goto label_3;
| }
0x00064c56 bl 0x57ea8 | lll_lock_wait_private ();
0x00064c5a b 0x64a0e | goto label_3;
| label_21:
0x00064c5c ldr r0, [pc, 0x318] |
0x00064c5e add r0, pc | r0 = 0xc9bda;
0x00064c60 bl 0x636c8 | fcn_000636c8 (r0);
| label_30:
0x00064c64 mov r0, r1 | r0 = r1;
0x00064c66 add sp, 0x2c |
0x00064c68 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00064c6c b.w 0x637b4 | void (*0x637b4)() ();
| label_22:
0x00064c70 ldr r0, [pc, 0x308] |
0x00064c72 add r0, pc | r0 = 0xc9bf2;
0x00064c74 bl 0x636c8 | fcn_000636c8 (r0);
| label_24:
0x00064c78 movs r3, 1 | r3 = 1;
| if (r7 != 0) {
0x00064c7a cbnz r7, 0x64cc2 | goto label_6;
| }
| do {
0x00064c7c ldrex r2, [r6] | __asm ("ldrex r2, [r6]");
0x00064c80 cmp r2, 0 |
| if (r2 != 0) {
0x00064c82 bne 0x64c90 | goto label_57;
| }
0x00064c84 strex r1, r3, [r6] | __asm ("strex r1, r3, [r6]");
0x00064c88 cmp r1, 0 |
0x00064c8a bne 0x64c7c |
| } while (r1 != 0);
0x00064c8c dmb ish | __asm ("dmb ish");
| if (r1 != 0) {
| label_57:
0x00064c90 bne.w 0x64e48 | goto label_58;
| }
| label_16:
0x00064c94 ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x00064c98 cmp r3, 8 |
| if (r3 < 8) {
0x00064c9a bls 0x64cf8 | goto label_59;
| }
0x00064c9c movs r1, 0 | r1 = 0;
0x00064c9e bic r8, r3, 7 | r8 = BIT_MASK (r3, 7);
0x00064ca2 ldr.w r3, [r6, 0x450] | r3 = *((r6 + 0x450));
0x00064ca6 dmb ish | __asm ("dmb ish");
| do {
0x00064caa ldrex r2, [r6] | __asm ("ldrex r2, [r6]");
0x00064cae strex r0, r1, [r6] | __asm ("strex r0, r1, [r6]");
0x00064cb2 cmp r0, 0 |
0x00064cb4 bne 0x64caa |
| } while (r0 != 0);
0x00064cb6 cmp r2, 1 |
| if (r2 > 1) {
0x00064cb8 bgt.w 0x64e50 | goto label_60;
| }
| label_17:
0x00064cbc cmp r8, r3 |
| if (r8 <= r3) {
0x00064cbe blo.w 0x64982 | goto label_4;
| }
| label_6:
0x00064cc2 ldr r0, [pc, 0x2bc] |
0x00064cc4 add r0, pc | r0 = 0xc9c4a;
0x00064cc6 bl 0x636c8 | fcn_000636c8 (r0);
| label_41:
0x00064cca str r4, [r6, 0x3c] | *((r6 + 0x3c)) = r4;
0x00064ccc str r4, [r2, 0xc] | *((r2 + 0xc)) = r4;
0x00064cce str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00064cd0 str r5, [r4, r5] | *((r4 + r5)) = r5;
| label_10:
0x00064cd2 cmp.w sl, 0 |
| if (sl != 0) {
0x00064cd6 bne 0x64c36 | goto label_5;
| }
0x00064cd8 dmb ish | __asm ("dmb ish");
| do {
0x00064cdc ldrex r3, [r6] | __asm ("ldrex r3, [r6]");
0x00064ce0 strex r2, sl, [r6] | __asm ("strex r2, sl, [r6]");
0x00064ce4 cmp r2, 0 |
0x00064ce6 bne 0x64cdc |
| } while (r2 != 0);
0x00064ce8 cmp r3, 1 |
| if (r3 <= 1) {
0x00064cea ble 0x64c36 | goto label_5;
| }
0x00064cec mov r0, r6 | r0 = r6;
0x00064cee add sp, 0x2c |
0x00064cf0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00064cf4 b.w 0x57f44 | void (*0x57f44)() ();
| label_59:
0x00064cf8 movs r2, 0 | r2 = 0;
0x00064cfa dmb ish | __asm ("dmb ish");
| do {
0x00064cfe ldrex r3, [r6] | __asm ("ldrex r3, [r6]");
0x00064d02 strex r1, r2, [r6] | __asm ("strex r1, r2, [r6]");
0x00064d06 cmp r1, 0 |
0x00064d08 bne 0x64cfe |
| } while (r1 != 0);
0x00064d0a cmp r3, 1 |
| if (r3 <= 1) {
0x00064d0c ble 0x64cc2 | goto label_6;
| }
0x00064d0e mov r0, r6 | r0 = r6;
0x00064d10 bl 0x57f44 | lll_lock_wake_private ();
0x00064d14 b 0x64cc2 | goto label_6;
| label_38:
0x00064d16 add r5, sb | r5 += sb;
0x00064d18 orr r3, r5, 1 | r3 = r5 | 1;
0x00064d1c str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00064d1e str r4, [r6, 0x34] | *((r6 + 0x34)) = r4;
0x00064d20 b 0x64ab6 | goto label_7;
| label_35:
0x00064d22 ldr r0, [pc, 0x260] |
0x00064d24 add r0, pc | r0 = 0xc9cae;
0x00064d26 bl 0x636c8 | fcn_000636c8 (r0);
| label_25:
0x00064d2a sub.w r2, r5, 8 | r2 = r5 - 8;
0x00064d2e add.w r0, r4, 8 | r0 = r4 + 8;
0x00064d32 blx 0x68e50 | memset (r0, r1, r2);
0x00064d36 b 0x64990 | goto label_8;
| label_39:
0x00064d38 mov r0, r7 | r0 = r7;
0x00064d3a add r5, sb | r5 += sb;
0x00064d3c bl 0x63cb4 | fcn_00063cb4 (r0);
0x00064d40 b 0x64a84 | goto label_9;
| label_32:
0x00064d42 ldr r0, [pc, 0x244] |
0x00064d44 add r0, pc | r0 = 0xc9cd2;
0x00064d46 bl 0x636c8 | fcn_000636c8 (r0);
| label_53:
0x00064d4a ldrd sl, fp, [sp, 0x14] | __asm ("ldrd sl, fp, [var_14h]");
0x00064d4e mov r6, r7 | r6 = r7;
0x00064d50 ldr.w r8, [sp, 0x1c] | r8 = var_1ch;
0x00064d54 mov r7, r1 | r7 = r1;
0x00064d56 ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x00064d58 mov r5, r0 | r5 = r0;
| label_12:
0x00064d5a ldr r2, [pc, 0x230] |
0x00064d5c bic r4, r4, 7 | r4 = BIT_MASK (r4, 7);
0x00064d60 add r2, pc | r2 = 0xc9cf2;
0x00064d62 ldr r3, [r2] | r3 = *(0xc9cf2);
0x00064d64 cmp r4, r3 |
| if (r4 <= r3) {
0x00064d66 blo 0x64cd2 | goto label_10;
| }
0x00064d68 sub.w r3, r4, 0x11 | r3 = r4 - 0x11;
0x00064d6c cmp fp, r3 |
0x00064d6e ite lo |
| if (fp >= r3) {
0x00064d70 movlo r1, 0 | r1 = 0;
| }
| if (fp < r3) {
0x00064d72 movhs r1, 1 | r1 = 1;
| }
0x00064d74 orrs.w r1, r1, r3, lsr 31 | r1 |= (r3 >> 31);
| if (r1 != r1) {
0x00064d78 bne 0x64cd2 | goto label_10;
| }
0x00064d7a ldr r1, [r5, 0x10] | r1 = *((r5 + 0x10));
0x00064d7c sub.w r3, r3, fp | r3 -= fp;
0x00064d80 rsb.w sb, r1, 0 | sb = r1 - ;
0x00064d84 ands.w sb, sb, r3 | sb &= r3;
| if (sb == sb) {
0x00064d88 beq 0x64cd2 | goto label_10;
| }
0x00064d8a ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x00064d8c sub.w fp, r3, sb |
0x00064d90 cmp.w fp, 0x17 |
| if (fp <= 0x17) {
0x00064d94 ble 0x64cd2 | goto label_10;
| }
0x00064d96 ldr r3, [r2, 0x40] | r3 = *((r2 + 0x40));
0x00064d98 cmp r3, 0 |
| if (r3 < 0) {
0x00064d9a blt 0x64e5c | goto label_61;
| }
| if (r3 != 0) {
0x00064d9c bne 0x64e8c | goto label_62;
| }
| label_18:
0x00064d9e movs r2, 4 | r2 = 4;
0x00064da0 mov r1, sb | r1 = sb;
0x00064da2 add.w r0, r5, fp | r0 = r5 + fp;
0x00064da6 bl 0xa9180 | madvise ();
0x00064da8 invalid |
| label_19:
0x00064daa ldr.w r2, [r6, 0x450] | r2 = *((r6 + 0x450));
0x00064dae sub.w r4, r4, sb | r4 -= sb;
0x00064db2 orr r4, r4, 1 | r4 |= 1;
0x00064db6 str.w fp, [r5, 8] | __asm ("str.w fp, [r5, 8]");
0x00064dba sub.w r2, r2, sb | r2 -= sb;
0x00064dbe str.w r2, [r6, 0x450] | __asm ("str.w r2, aav.0x000000ff");
0x00064dc2 str r4, [r7, 4] | *((r7 + 4)) = r4;
0x00064dc4 b 0x64cd2 | goto label_10;
| label_42:
0x00064dc6 mov r0, r6 | r0 = r6;
0x00064dc8 bl 0x63d34 | fcn_00063d34 (r0);
0x00064dcc b 0x64ac6 | goto label_11;
| label_49:
0x00064dce mov r6, r7 | r6 = r7;
0x00064dd0 ldrd sl, fp, [sp, 0x14] | __asm ("ldrd sl, fp, [var_14h]");
0x00064dd4 ldr.w r8, [sp, 0x1c] | r8 = var_1ch;
0x00064dd8 mov r7, r1 | r7 = r1;
0x00064dda b 0x64d5a | goto label_12;
| label_33:
0x00064ddc ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00064dde bic r2, r2, 7 | r2 = BIT_MASK (r2, 7);
0x00064de2 add r3, r2 | r3 += r2;
0x00064de4 cmp r7, r3 |
| if (r7 <= r3) {
0x00064de6 blo.w 0x64a20 | goto label_13;
| }
0x00064dea ldr r0, [pc, 0x1a4] |
0x00064dec add r0, pc | r0 = 0xc9d82;
0x00064dee bl 0x636c8 | fcn_000636c8 (r0);
| label_34:
0x00064df2 ldr r0, [pc, 0x1a0] |
0x00064df4 add r0, pc | r0 = 0xc9d8e;
0x00064df6 bl 0x636c8 | fcn_000636c8 (r0);
| label_43:
0x00064dfa ldr r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x00064dfc ldr r2, [pc, 0x198] |
0x00064dfe ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00064e00 add r2, pc | r2 = 0xc9d9c;
0x00064e02 ldr r1, [r2] | r1 = *(0xc9d9c);
0x00064e04 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00064e08 cmp r3, r1 |
| if (r3 <= r1) {
0x00064e0a blo.w 0x64cd2 | goto label_10;
| }
0x00064e0e ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x00064e10 bl 0x648a0 | fcn_000648a0 (r0);
0x00064e14 b 0x64cd2 | goto label_10;
| label_44:
0x00064e16 movs r5, 0 | r5 = 0;
0x00064e18 mov.w sb, 0x100000 | sb = 0x100000;
0x00064e1c movt r5, 0xfff0 | r5 = (r5 & 0xFFFF) | 0xfff00000;
0x00064e20 b 0x64aea | goto label_14;
| label_36:
0x00064e22 sub.w r2, r5, 8 | r2 = r5 - 8;
0x00064e26 add.w r0, r4, 8 | r0 = r4 + 8;
0x00064e2a blx 0x68e50 | memset (r0, r1, r2);
0x00064e2e b 0x64a4a | goto label_15;
| label_55:
0x00064e30 ldr r0, [pc, 0x168] |
0x00064e32 add r0, pc | r0 = 0xc9dd2;
0x00064e34 bl 0x636c8 | fcn_000636c8 (r0);
| label_40:
0x00064e38 ldr r0, [pc, 0x164] |
0x00064e3a add r0, pc | r0 = 0xc9dde;
0x00064e3c bl 0x636c8 | fcn_000636c8 (r0);
| label_37:
0x00064e40 ldr r0, [pc, 0x160] |
0x00064e42 add r0, pc | r0 = 0xc9dea;
0x00064e44 bl 0x636c8 | fcn_000636c8 (r0);
| label_58:
0x00064e48 mov r0, r6 | r0 = r6;
0x00064e4a bl 0x57ea8 | lll_lock_wait_private ();
0x00064e4e b 0x64c94 | goto label_16;
| label_60:
0x00064e50 mov r0, r6 | r0 = r6;
0x00064e52 str r3, [sp, 0xc] | var_ch = r3;
0x00064e54 bl 0x57f44 | lll_lock_wake_private ();
0x00064e58 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00064e5a b 0x64cbc | goto label_17;
| label_61:
0x00064e5c ldr r3, [pc, 0x148] | r3 = *(0x64fa8);
0x00064e5e ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00064e62 ldr.w r8, [r3] | r8 = *(0x64fa8);
0x00064e66 str.w r8, [r2, 0x40] | __asm ("str.w r8, [r2, 0x40]");
0x00064e6a cmp.w r8, 0 |
| if (r8 != 0) {
0x00064e6e bne 0x64e8c | goto label_62;
| }
0x00064e70 ldr r0, [pc, 0x138] |
0x00064e72 mov.w r1, 0x80000 | r1 = 0x80000;
0x00064e76 add r0, pc | r0 = 0xc9e26;
0x00064e78 bl 0xa5540 | r0 = open_nocancel ();
0x00064e7c subs r3, r0, 0 | r3 = r0 - 0;
0x00064e7e str r3, [sp, 0xc] | var_ch = r3;
| if (r3 >= r0) {
0x00064e80 bge 0x64f0e | goto label_63;
| }
| label_20:
0x00064e82 ldr r3, [pc, 0x12c] |
0x00064e84 add r3, pc |
0x00064e86 ldr r3, [r3, 0x40] | r3 = *(0xc9e7a);
0x00064e88 cmp r3, 0 |
| if (r3 == 0) {
0x00064e8a beq 0x64d9e | goto label_18;
| }
| label_62:
0x00064e8c mov.w r3, -1 | r3 = -1;
0x00064e90 movs r2, 0 | r2 = 0;
0x00064e92 strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x00064e96 mov r1, sb | r1 = sb;
0x00064e98 movs r3, 0x32 | r3 = 0x32;
0x00064e9a add.w r0, r5, fp | r0 = r5 + fp;
0x00064e9e bl 0xa9000 | mmap ()
0x00064ea2 adds r0, 1 | r0++;
0x00064ea4 it ne |
| if (r0 != 1) {
0x00064ea6 strne fp, [r5, 0xc] | *((r5 + 0xc)) = fp;
| goto label_64;
| }
| if (r0 != 1) {
| label_64:
0x00064eaa bne.w 0x64daa | goto label_19;
| }
0x00064eae b 0x64cd2 | goto label_10;
| label_46:
0x00064eb0 ldr r4, [r7, 4] | r4 = *((r7 + 4));
0x00064eb2 b 0x64d5a | goto label_12;
| label_52:
0x00064eb4 ldr r3, [pc, 0xfc] |
0x00064eb6 movs r0, 1 | r0 = 1;
0x00064eb8 ldr r2, [pc, 0xfc] |
0x00064eba ldr r1, [pc, 0x100] |
0x00064ebc add r3, pc | r3 = 0xc9e74;
0x00064ebe add r2, pc | r2 = 0xc9e7a;
0x00064ec0 add r1, pc | r1 = 0xc9e82;
0x00064ec2 bl 0x534ac | fcn_000534ac (r0);
| label_48:
0x00064ec6 ldr r3, [pc, 0xf8] |
0x00064ec8 movs r0, 1 | r0 = 1;
0x00064eca ldr r2, [pc, 0xf8] |
0x00064ecc ldr r1, [pc, 0xf8] |
0x00064ece add r3, pc | r3 = 0xc9e94;
0x00064ed0 add r2, pc | r2 = 0xc9e9a;
0x00064ed2 add r1, pc | r1 = 0xc9e9e;
0x00064ed4 bl 0x534ac | fcn_000534ac (r0);
| label_47:
0x00064ed8 ldr r3, [pc, 0xf0] |
0x00064eda movs r0, 1 | r0 = 1;
0x00064edc ldr r2, [pc, 0xf0] |
0x00064ede ldr r1, [pc, 0xf4] |
0x00064ee0 add r3, pc | r3 = 0xc9eb0;
0x00064ee2 add r2, pc | r2 = 0xc9eb6;
0x00064ee4 add r1, pc | r1 = 0xc9ebe;
0x00064ee6 bl 0x534ac | fcn_000534ac (r0);
| label_51:
0x00064eea ldr r3, [pc, 0xec] |
0x00064eec mov r0, ip | r0 = ip;
0x00064eee ldr r2, [pc, 0xec] |
0x00064ef0 ldr r1, [pc, 0xec] |
0x00064ef2 add r3, pc | r3 = 0xc9ed0;
0x00064ef4 add r2, pc | r2 = 0xc9ed6;
0x00064ef6 add r1, pc | r1 = 0xc9eda;
0x00064ef8 bl 0x534ac | fcn_000534ac (r0);
| label_50:
0x00064efc ldr r3, [pc, 0xe4] |
0x00064efe movs r0, 1 | r0 = 1;
0x00064f00 ldr r2, [pc, 0xe4] |
0x00064f02 ldr r1, [pc, 0xe8] |
0x00064f04 add r3, pc | r3 = 0xc9eec;
0x00064f06 add r2, pc | r2 = 0xc9ef2;
0x00064f08 add r1, pc | r1 = 0xc9efa;
0x00064f0a bl 0x534ac | fcn_000534ac (r0);
| label_63:
0x00064f0e movs r2, 1 | r2 = 1;
0x00064f10 add.w r1, sp, 0x27 | r1 += var_27h;
0x00064f14 bl 0xa56cc | r0 = read_nocancel ();
0x00064f18 cmp r0, 0 |
| if (r0 > 0) {
0x00064f1a ble 0x64f2a |
0x00064f1c ldrb.w r3, [sp, 0x27] | r3 = var_27h;
0x00064f20 subs r3, 0x32 | r3 -= 0x32;
0x00064f22 rsbs.w r8, r3, 0 | r8 = r3 - ;
0x00064f26 adc.w r8, r8, r3 | __asm ("adc.w r8, r8, r3");
| }
0x00064f2a ldr r2, [pc, 0xc4] |
0x00064f2c ldr r0, [sp, 0xc] | r0 = var_ch;
0x00064f2e add r2, pc | r2 = 0xc9f24;
0x00064f30 str.w r8, [r2, 0x40] | __asm ("str.w r8, [r2, 0x40]");
0x00064f34 bl 0xa5410 | close_nocancel ();
0x00064f38 b 0x64e82 | goto label_20;
| label_45:
0x00064f3a ldr r3, [pc, 0xb8] |
0x00064f3c movs r0, 1 | r0 = 1;
0x00064f3e ldr r2, [pc, 0xb8] |
0x00064f40 ldr r1, [pc, 0xb8] |
0x00064f42 add r3, pc | r3 = 0xc9f3c;
0x00064f44 add r2, pc | r2 = 0xc9f42;
0x00064f46 add r1, pc | r1 = 0xc9f46;
0x00064f48 bl 0x534ac | fcn_000534ac (r0);
0x00064f4c adds.w r0, sl, 0x890000 | r0 = sl + 0x890000;
0x00064f50 adds r3, 0x3a | r3 += 0x3a;
0x00064f52 movs r2, r1 | r2 = r1;
0x00064f54 adds r3, 0x12 | r3 += 0x12;
0x00064f56 movs r2, r1 | r2 = r1;
0x00064f58 subs r5, 0x62 | r5 -= 0x62;
0x00064f5a movs r2, r1 | r2 = r1;
0x00064f5c lsls r6, r6, 1 | r6 <<= 1;
0x00064f5e movs r1, r1 |
0x00064f60 subs r5, 0xa | r5 -= 0xa;
0x00064f62 movs r2, r1 | r2 = r1;
0x00064f64 adds r2, 0x58 | r2 += 0x58;
0x00064f66 movs r2, r1 | r2 = r1;
0x00064f68 smlabb r0, r6, sb, r0 | __asm ("smlabb r0, r6, sb, r0");
0x00064f6c addw r0, r0, 0x809 | __asm ("addw r0, r0, aav.0x000000ff");
0x00064f70 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x9bc98 */
| #include <stdint.h>
|
; (fcn) fcn.0009bc98 () | void fcn_0009bc98 (int16_t arg_210h, int16_t arg_214h, int16_t arg_218h, int16_t arg_21ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_bp_0h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_14h;
| int32_t var_8h_2;
| int32_t var_ch_2;
| int32_t var_10h;
| int32_t var_14h_2;
| int32_t var_18h;
| int32_t var_18h_2;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_28h;
| int16_t var_40h;
| void * s;
| int32_t var_28h_2;
| int32_t var_30h;
| void * var_98h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0009bc98 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0009bc9c sub sp, 0x1ec |
0x0009bc9e mov sb, r3 | sb = r3;
0x0009bca0 strd r1, r2, [sp, 8] | __asm ("strd r1, r2, [var_8h]");
0x0009bca4 mov sl, r0 | sl = r0;
0x0009bca6 movs r4, 0 | r4 = 0;
0x0009bca8 ldr r3, [sp, 0x210] | r3 = *(arg_210h);
0x0009bcaa ldr r2, [pc, 0x174] |
0x0009bcac subs r3, 4 | r3 -= 4;
0x0009bcae add r2, pc | r2 = 0x137ad4;
| do {
0x0009bcb0 ldr r5, [r3, 4]! | r5 = *((r3 += 4));
0x0009bcb4 mov r6, r4 | r6 = r4;
0x0009bcb6 adds r4, 1 | r4++;
0x0009bcb8 cmp r5, 0 |
0x0009bcba bne 0x9bcb0 |
| } while (r5 != 0);
0x0009bcbc ldr r3, [pc, 0x164] |
0x0009bcbe mov r0, r5 | r0 = r5;
0x0009bcc0 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0009bcc2 ldr r3, [r3, 0xc] | r3 = *(0x9be30);
0x0009bcc4 add.w r6, r3, r6, lsl 2 | r6 = r3 + (r6 << 2);
0x0009bcc8 rsbs r3, r3, 0 | r3 -= ;
0x0009bcca add.w r6, r6, 0x8200 | r6 += 0x8200;
0x0009bcce adds r6, 3 | r6 += 3;
0x0009bcd0 ands r6, r3 | r6 &= r3;
0x0009bcd2 ldr r3, [pc, 0x154] | r3 = *(0x9be2a);
0x0009bcd4 mov r1, r6 | r1 = r6;
0x0009bcd6 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0009bcd8 str r5, [sp, 4] | var_4h = r5;
0x0009bcda ldr.w r2, [r3, 0x8e0] | r2 = *(0x9c70a);
0x0009bcde mov.w r3, -1 | r3 = -1;
0x0009bce2 str r3, [sp] | *(sp) = r3;
0x0009bce4 movs r3, 0x22 |
0x0009bce6 movt r3, 2 | r3 = 0x20022;
0x0009bcea lsls r2, r2, 2 | r2 <<= 2;
0x0009bcec and r2, r2, 4 | r2 &= 4;
0x0009bcf0 orr r2, r2, 3 | r2 |= 3;
0x0009bcf4 bl 0xa9000 | r0 = mmap ()
0x0009bcf8 cmp.w r0, -1 |
0x0009bcfc mov r8, r0 | r8 = r0;
| if (r0 == -1) {
0x0009bcfe beq 0x9bdf2 | goto label_2;
| }
0x0009bd00 add.w fp, sp, 0x10 |
0x0009bd04 movs r0, 1 | r0 = 1;
0x0009bd06 mov r1, fp | r1 = fp;
0x0009bd08 add r7, sp, 0x14 | r7 += var_14h;
0x0009bd0a bl 0x5f740 | pthread_setcancelstate ();
0x0009bd0e ldr r3, [sp, 8] | r3 = var_8h;
0x0009bd10 str r5, [r7, 0x28] | var_28h = r5;
0x0009bd12 str r3, [r7, 8] | var_8h_2 = r3;
0x0009bd14 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0009bd16 str r3, [r7, 0x10] | var_10h = r3;
0x0009bd18 ldr r3, [sp, 0x21c] | r3 = *(arg_21ch);
0x0009bd1a str r3, [r7, 0xc] | var_ch_2 = r3;
0x0009bd1c cmp.w sb, 0 |
| if (sb == 0) {
0x0009bd20 beq 0x9bde2 | goto label_3;
| }
| label_1:
0x0009bd22 ldr r3, [sp, 0x210] | r3 = *(arg_210h);
0x0009bd24 movs r0, 0 | r0 = 0;
0x0009bd26 ldr r1, [pc, 0x104] |
0x0009bd28 mov r2, r7 | r2 = r7;
0x0009bd2a mov.w ip, 0xaf |
0x0009bd2e str.w sb, [r7, 0x14] | __asm ("str.w sb, [var_14h_2]");
0x0009bd32 strd r3, r4, [r7, 0x18] | __asm ("strd r3, r4, [var_18h]");
0x0009bd36 ldr r3, [sp, 0x214] | r3 = *(arg_214h);
0x0009bd38 add r1, pc | r1 = 0x137b6a;
0x0009bd3a str r3, [r7, 0x20] | var_20h = r3;
0x0009bd3c ldr r3, [sp, 0x218] | r3 = *(arg_218h);
0x0009bd3e str r3, [r7, 0x24] | var_24h = r3;
0x0009bd40 movs r3, 8 | r3 = 8;
0x0009bd42 bl 0x1e530 | fcn_0001e530 ();
0x0009bd46 movs r2, 0x50 | r2 = 0x50;
0x0009bd48 movs r1, 0 | r1 = 0;
0x0009bd4a add r0, sp, 0x48 | r0 += s;
0x0009bd4c movs r4, 0 | r4 = 0;
0x0009bd4e blx 0x68e50 | memset (r0, r1, r2);
0x0009bd52 vldr d16, [pc, 0xb4] | __asm ("vldr d16, aav.0x000000ff");
0x0009bd56 add r0, sp, 0x40 | r0 += var_40h;
0x0009bd58 ldr r1, [pc, 0xd4] |
0x0009bd5a mov r2, r7 | r2 = r7;
0x0009bd5c str.w r8, [r0, 0x28] | __asm ("str.w r8, [var_28h_2]");
0x0009bd60 vstr d16, [sp, 0x40] | __asm ("vstr d16, [sp, 0x40]");
0x0009bd64 vldr d16, [pc, 0xa8] | __asm ("vldr d16, aav.0x000000ff");
0x0009bd68 add r1, pc | r1 = 0x137b9c;
0x0009bd6a str r6, [r0, 0x30] | var_30h = r6;
0x0009bd6c vstr d16, [r0, 0x20] | __asm ("vstr d16, [r0, 0x20]");
0x0009bd70 bl 0xac8f4 | fcn_000ac8f4 (r0, r1, r2);
0x0009bd74 subs r5, r0, 0 | r5 -= var_40h;
| if (r5 <= var_40h) {
0x0009bd76 ble 0x9bdd2 | goto label_4;
| }
0x0009bd78 ldr.w sb, [r7, 0x28] | sb = var_28h;
0x0009bd7c cmp sb, r4 |
| if (sb > r4) {
0x0009bd7e bgt 0x9bdc0 | goto label_5;
| }
| label_0:
0x0009bd80 mov r1, r6 | r1 = r6;
0x0009bd82 mov r0, r8 | r0 = r8;
0x0009bd84 bl 0xa90c0 | munmap ();
0x0009bd88 clz r3, sb | r3 &= sb;
0x0009bd8c cmp.w sl, 0 |
0x0009bd90 lsr.w r3, r3, 5 | r3 >>= 5;
0x0009bd94 it eq |
| if (sl != 0) {
0x0009bd96 moveq r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x0009bd98 cbz r3, 0x9bd9e | goto label_6;
| }
0x0009bd9a str.w r5, [sl] | __asm ("str.w r5, [sl]");
| do {
| label_6:
0x0009bd9e movs r0, 2 | r0 = 2;
0x0009bda0 mov r1, r7 | r1 = r7;
0x0009bda2 movs r2, 0 | r2 = 0;
0x0009bda4 movs r3, 8 | r3 = 8;
0x0009bda6 mov.w ip, 0xaf |
0x0009bdaa bl 0x1e530 | fcn_0001e530 ();
0x0009bdae ldr.w r0, [fp] | r0 = *(fp);
0x0009bdb2 mov r1, r2 | r1 = r2;
0x0009bdb4 bl 0x5f740 | pthread_setcancelstate ();
0x0009bdb8 mov r0, sb | r0 = sb;
0x0009bdba add sp, 0x1ec |
0x0009bdbc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x0009bdc0 mov r1, r4 | r1 = r4;
0x0009bdc2 mov r2, r4 | r2 = r4;
0x0009bdc4 bl 0x8330c | waitpid ();
0x0009bdc8 mov r1, r6 | r1 = r6;
0x0009bdca mov r0, r8 | r0 = r8;
0x0009bdcc bl 0xa90c0 | munmap ();
0x0009bdd0 b 0x9bd9e |
| } while (1);
| label_4:
0x0009bdd2 ldr r3, [pc, 0x44] |
0x0009bdd4 mrc p15, 0, r2, c13, c0, 3 | __asm ("mrc p15, 0, r2, c13, c0, 3");
0x0009bdd8 add r3, pc |
0x0009bdda ldr r3, [r3] | r3 = *(0x137bf6);
0x0009bddc ldr.w sb, [r2, r3] | sb = *((r2 + r3));
0x0009bde0 b 0x9bd80 | goto label_0;
| label_3:
0x0009bde2 mov r1, sb | r1 = sb;
0x0009bde4 add r0, sp, 0x98 | r0 += var_98h;
0x0009bde6 mov.w r2, 0x150 | r2 = 0x150;
0x0009bdea mov sb, r0 | sb = r0;
0x0009bdec blx 0x68e50 | memset (r0, r1, r2);
0x0009bdf0 b 0x9bd22 | goto label_1;
| label_2:
0x0009bdf2 ldr r3, [pc, 0x28] |
0x0009bdf4 mrc p15, 0, r2, c13, c0, 3 | __asm ("mrc p15, 0, r2, c13, c0, 3");
0x0009bdf8 add r3, pc |
0x0009bdfa ldr r3, [r3] | r3 = *(0x137c1a);
0x0009bdfc ldr.w sb, [r2, r3] | sb = *((r2 + r3));
0x0009be00 mov r0, sb | r0 = sb;
0x0009be02 add sp, 0x1ec |
0x0009be04 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0xd7a88 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000d7a88 () | void fcn_000d7a88 (int16_t arg1, int16_t arg3, char * s) {
| int32_t var_0h_3;
| int32_t var_4h;
| int16_t var_0h;
| int16_t var_4h_2;
| int16_t var_8h;
| int32_t var_4h_3;
| char * s1;
| int32_t var_8h_3;
| int32_t var_10h;
| int32_t var_14h;
| int16_t var_18h;
| int32_t var_18h_2;
| int32_t var_20h;
| int16_t var_24h;
| int32_t var_2ch;
| int32_t var_34h;
| int32_t var_34h_2;
| int32_t var_3ch;
| int32_t var_40h;
| int16_t var_44h;
| int32_t var_44h_2;
| int32_t var_4ch;
| int32_t var_50h;
| int32_t var_54h;
| int32_t var_58h;
| int32_t var_5ch;
| int16_t var_60h;
| int32_t var_88h;
| int32_t var_88h_2;
| int16_t var_0h_2;
| r0 = arg1;
| r2 = arg3;
| r1 = s;
0x000d7a88 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000d7a8c sub sp, 0xdc |
0x000d7a8e mov r4, r0 | r4 = r0;
0x000d7a90 mov r0, r1 | r0 = r1;
0x000d7a92 add r7, sp, 8 | r7 += var_8h;
0x000d7a94 mov r6, r1 | r6 = r1;
0x000d7a96 mov sb, r2 | sb = r2;
0x000d7a98 bl 0x6ae40 | strlen ();
0x000d7a9c ldr r3, [pc, 0x244] |
0x000d7a9e mrc p15, 0, r5, c13, c0, 3 | __asm ("mrc p15, 0, r5, c13, c0, 3");
0x000d7aa2 mov r8, r0 | r8 = r0;
0x000d7aa4 add.w fp, r0, 1 |
0x000d7aa8 mov r1, r6 | r1 = r6;
0x000d7aaa mov r0, r4 | r0 = r4;
0x000d7aac add r3, pc |
0x000d7aae ldr r3, [r3] | r3 = *(0x1af794);
0x000d7ab0 mov r2, fp | r2 = fp;
0x000d7ab2 ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x000d7ab4 str r3, [r7, 0x14] | var_14h = r3;
0x000d7ab6 add.w r3, r8, 8 | r3 = r8 + 8;
0x000d7aba bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x000d7abe sub.w sp, sp, r3 |
0x000d7ac2 bl 0xd7774 | r0 = fcn_000d7774 (r0, r1, r2);
0x000d7ac6 subs r4, r0, 0 | r4 = r0 - 0;
0x000d7ac8 add r3, sp, 8 | r3 += var_8h;
0x000d7aca it lt |
| if (r4 >= r0) {
0x000d7acc movlt r6, -1 | r6 = -1;
| }
0x000d7ad0 str r3, [r7, 8] | s1 = r3;
| if (r4 >= r0) {
0x000d7ad2 blt 0xd7b2c |
0x000d7ad4 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x000d7ad8 movw r1, 0x1388 | r1 = 0x1388;
0x000d7adc strd r3, fp, [r7, 0x34] | __asm ("strd r3, fp, [var_34h]");
0x000d7ae0 add.w r3, r7, 0x24 | r3 += var_24h;
0x000d7ae4 add.w sl, r7, 0x44 | sl += var_44h;
0x000d7ae8 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x000d7aec movs r3, 0 | r3 = 0;
0x000d7aee strd r3, r3, [r7, 0x44] | __asm ("strd r3, r3, [var_44h]");
0x000d7af2 str r3, [r7, 0x5c] | var_5ch = r3;
0x000d7af4 movs r3, 0x10 | r3 = 0x10;
0x000d7af6 str r3, [r7, 0x58] | var_58h = r3;
0x000d7af8 str r3, [r7, 0x20] | var_20h = r3;
0x000d7afa add.w r3, r7, 0x18 | r3 += var_18h;
0x000d7afe str r3, [r7, 0x3c] | var_3ch = r3;
0x000d7b00 movs r3, 8 | r3 = 8;
0x000d7b02 str r3, [r7, 0x40] | var_40h = r3;
0x000d7b04 add.w r3, r7, 0x34 | r3 += var_34h;
0x000d7b08 str r3, [r7, 0x4c] | var_4ch = r3;
0x000d7b0a movs r3, 2 | r3 = 2;
0x000d7b0c str r3, [r7, 0x50] | var_50h = r3;
0x000d7b0e add.w r3, r7, 0x20 | r3 += var_20h;
0x000d7b12 str r3, [r7, 0x54] | var_54h = r3;
0x000d7b14 mov.w r3, -1 | r3 = -1;
0x000d7b18 str r3, [r7, 0x2c] | var_2ch = r3;
0x000d7b1a bl 0xd76b8 | r0 = fcn_000d76b8 (r0, r1);
0x000d7b1e cmp r0, 0 |
| if (r0 > 0) {
0x000d7b20 bgt 0xd7b78 | goto label_7;
| }
| label_1:
0x000d7b22 mov.w r6, -1 | r6 = -1;
| label_2:
0x000d7b26 mov r0, r4 | r0 = r4;
0x000d7b28 bl 0x9ede0 | close (r0);
| }
0x000d7b2c ldr.w r4, [sb] | r4 = *(sb);
0x000d7b30 ldr r3, [pc, 0x1b4] |
0x000d7b32 ldr r2, [r7, 0x14] | r2 = var_14h;
0x000d7b34 add r3, pc |
0x000d7b36 ldr r3, [r3] | r3 = *(0x1af820);
0x000d7b38 str r2, [r5, r3] | *((r5 + r3)) = r2;
0x000d7b3a str.w r6, [sb] | __asm ("str.w r6, [sb]");
| if (r4 == 0) {
0x000d7b3e cbz r4, 0xd7b62 | goto label_8;
| }
0x000d7b40 add.w r2, r4, 0xc | r2 = r4 + 0xc;
| label_0:
0x000d7b44 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000d7b46 subs r1, r3, 1 | r1 = r3 - 1;
| do {
0x000d7b48 ldrex r0, [r2] | __asm ("ldrex r0, [r2]");
0x000d7b4c cmp r0, r3 |
| if (r0 != r3) {
0x000d7b4e bne 0xd7b5c | goto label_9;
| }
0x000d7b50 strex r5, r1, [r2] | __asm ("strex r5, r1, [r2]");
0x000d7b54 cmp r5, 0 |
0x000d7b56 bne 0xd7b48 |
| } while (r5 != 0);
0x000d7b58 dmb ish | __asm ("dmb ish");
| if (r5 != 0) {
| label_9:
0x000d7b5c bne 0xd7b44 | goto label_0;
| }
0x000d7b5e cmp r3, 1 |
| if (r3 == 1) {
0x000d7b60 beq 0xd7bba | goto label_10;
| }
| label_8:
0x000d7b62 mov r0, r6 | r0 = r6;
0x000d7b64 adds r7, 0xd4 | r7 += 0xd4;
0x000d7b66 mov sp, r7 |
0x000d7b68 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| do {
0x000d7b6c ldr r3, [pc, 0x17c] |
0x000d7b6e add r3, pc |
0x000d7b70 ldr r3, [r3] | r3 = *(0x1af85e);
0x000d7b72 ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x000d7b74 cmp r3, 4 |
| if (r3 != 4) {
0x000d7b76 bne 0xd7b88 | goto label_11;
| }
| label_7:
0x000d7b78 mov.w r2, 0x40000000 | r2 = 0x40000000;
0x000d7b7c mov r1, sl | r1 = sl;
0x000d7b7e mov r0, r4 | r0 = r4;
0x000d7b80 bl 0xad570 | r0 = recvmsg (r0, r1);
0x000d7b84 adds r3, r0, 1 | r3 = r0 + 1;
0x000d7b86 beq 0xd7b6c |
| } while (r3 == r0);
| label_11:
0x000d7b88 ldr r3, [r7, 0x58] | r3 = var_58h;
0x000d7b8a cmp r3, 0xb |
| if (r3 < 0xb) {
0x000d7b8c bls 0xd7b22 | goto label_1;
| }
0x000d7b8e ldr r3, [r7, 0x54] | r3 = var_54h;
0x000d7b90 cmp r3, 0 |
| if (r3 == 0) {
0x000d7b92 beq 0xd7b22 | goto label_1;
| }
0x000d7b94 ldr r3, [r3] | r3 = *(r3);
0x000d7b96 cmp r3, 0x10 |
| if (r3 != 0x10) {
0x000d7b98 bne 0xd7b22 | goto label_1;
| }
0x000d7b9a cmp fp, r0 |
0x000d7b9c ldr.w sl, [r7, 0x2c] | sl = var_2ch;
| if (fp != r0) {
0x000d7ba0 bne 0xd7bda | goto label_12;
| }
0x000d7ba2 ldr r0, [r7, 8] | r0 = s1;
0x000d7ba4 mov r1, r6 | r1 = r6;
0x000d7ba6 bl 0x69790 | r0 = strcmp (r0, r1);
0x000d7baa cmp r0, 0 |
| if (r0 == 0) {
0x000d7bac beq 0xd7c80 | goto label_13;
| }
| do {
| label_3:
0x000d7bae mov r0, sl | r0 = sl;
0x000d7bb0 mov.w r6, -1 | r6 = -1;
0x000d7bb4 bl 0x9ede0 | close (r0);
0x000d7bb8 b 0xd7b26 | goto label_2;
| label_10:
0x000d7bba ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000d7bbc cmp r3, 0 |
| if (r3 != 0) {
0x000d7bbe bne.w 0xd7cd2 | goto label_14;
| }
0x000d7bc2 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x000d7bc4 ldr r0, [r4] | r0 = *(r4);
0x000d7bc6 bl 0xa90c0 | munmap ();
0x000d7bca mov r0, r4 | r0 = r4;
0x000d7bcc blx 0x1ded4 | fcn_0001ded4 ();
0x000d7bd0 mov r0, r6 | r0 = r6;
0x000d7bd2 adds r7, 0xd4 | r7 += 0xd4;
0x000d7bd4 mov sp, r7 |
0x000d7bd6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_12:
0x000d7bda add.w r8, r8, 9 | r8 += 9;
0x000d7bde cmp r8, r0 |
0x000d7be0 bne 0xd7bae |
| } while (r8 != r0);
0x000d7be2 ldr r0, [r7, 8] | r0 = s1;
0x000d7be4 mov r1, r6 | r1 = r6;
0x000d7be6 bl 0x69790 | r0 = strcmp (r0, r1);
0x000d7bea cmp r0, 0 |
| if (r0 != 0) {
0x000d7bec bne 0xd7bae | goto label_3;
| }
0x000d7bee ldr r1, [r7, 0x18] | r1 = var_18h;
| label_4:
0x000d7bf0 movs r0, 0 | r0 = 0;
0x000d7bf2 movs r3, 1 | r3 = 1;
0x000d7bf4 mov r2, r3 | r2 = r3;
0x000d7bf6 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000d7bfa str r0, [sp, 4] | var_4h_2 = r0;
0x000d7bfc bl 0xa9000 | r0 = mmap ()
0x000d7c00 cmp.w r0, -1 |
0x000d7c04 mov r8, r0 | r8 = r0;
| if (r0 == -1) {
0x000d7c06 beq 0xd7bae | goto label_3;
| }
0x000d7c08 ldr r3, [r0] | r3 = *(r0);
0x000d7c0a cmp r3, 2 |
| if (r3 == 2) {
0x000d7c0c bne 0xd7c76 |
0x000d7c0e ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x000d7c10 cmp r3, 0x78 |
| if (r3 != 0x78) {
0x000d7c12 bne 0xd7c76 | goto label_5;
| }
0x000d7c14 ldr r3, [r0, 0x28] | r3 = *((r0 + 0x28));
| if (r3 == 0) {
0x000d7c16 cbz r3, 0xd7c76 | goto label_5;
| }
0x000d7c18 ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x000d7c1a cmp r2, 0 |
| if (r2 == 0) {
0x000d7c1c beq 0xd7ca2 | goto label_15;
| }
| label_6:
0x000d7c1e ldr.w r2, [r8, 0x2c] | r2 = *((r8 + 0x2c));
0x000d7c22 lsl.w fp, r3, 2 |
0x000d7c26 ldrd r1, r0, [r7, 0x18] | __asm ("ldrd r1, r0, [var_18h]");
0x000d7c2a add.w fp, fp, 0xf |
0x000d7c2e bic fp, fp, 0xf | fp = BIT_MASK (fp, 0xf);
0x000d7c32 add.w r3, r2, 0x78 | r3 = r2 + 0x78;
0x000d7c36 add r3, fp | r3 += fp;
0x000d7c38 str r2, [r7, 0x10] | var_10h = r2;
0x000d7c3a cmp r1, r3 |
0x000d7c3c str r3, [r7, 8] | s1 = r3;
0x000d7c3e sbcs r0, r0, 0 | __asm ("sbcs r0, r0, 0");
| if (r1 <= r3) {
0x000d7c42 blo 0xd7c78 | goto label_16;
| }
0x000d7c44 movs r0, 0x14 | r0 = 0x14;
0x000d7c46 str r1, [r7, 4] | var_4h_3 = r1;
0x000d7c48 blx 0x1df60 | fcn_0001df60 ();
0x000d7c4c ldr r1, [r7, 4] | r1 = var_4h_3;
0x000d7c4e mov r6, r0 | r6 = r0;
| if (r0 == 0) {
0x000d7c50 cbz r0, 0xd7c78 | goto label_16;
| }
0x000d7c52 ldr.w r1, [r8, 4] | r1 = *((r8 + 4));
0x000d7c56 ldr r3, [r7, 8] | r3 = s1;
0x000d7c58 ldr r2, [r7, 0x10] | r2 = var_10h;
0x000d7c5a add fp, r1 |
0x000d7c5c str.w r8, [r0] | __asm ("str.w r8, [r0]");
0x000d7c60 str r3, [r0, 8] | *((r0 + 8)) = r3;
0x000d7c62 add.w r3, r8, fp | r3 = r8 + fp;
0x000d7c66 str r3, [r0, 4] | *((r0 + 4)) = r3;
0x000d7c68 movs r3, 1 | r3 = 1;
0x000d7c6a str r2, [r0, 0x10] | *((r0 + 0x10)) = r2;
0x000d7c6c str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x000d7c6e mov r0, sl | r0 = sl;
0x000d7c70 bl 0x9ede0 | close (r0);
0x000d7c74 b 0xd7b26 | goto label_2;
| }
| label_5:
0x000d7c76 ldr r1, [r7, 0x18] | r1 = var_18h;
| label_16:
0x000d7c78 mov r0, r8 | r0 = r8;
0x000d7c7a bl 0xa90c0 | munmap ();
0x000d7c7e b 0xd7bae | goto label_3;
| label_13:
0x000d7c80 add.w r1, r7, 0x60 | r1 += var_60h;
0x000d7c84 mov r0, sl | r0 = sl;
0x000d7c86 bl 0x9db70 | r0 = fstat64_time64 ();
0x000d7c8a cmp r0, 0 |
| if (r0 != 0) {
0x000d7c8c bne 0xd7bae | goto label_3;
| }
0x000d7c8e ldrd r1, r3, [r7, 0x88] | __asm ("ldrd r1, r3, [var_88h]");
0x000d7c92 cmp r1, 0x78 |
0x000d7c94 sbcs r2, r3, 0 | __asm ("sbcs r2, r3, 0");
0x000d7c98 it ge |
| if (r1 < 0x78) {
0x000d7c9a strdge r1, r3, [r7, 0x18] | __asm ("strdge r1, r3, [var_18h]");
| goto label_17;
| }
| if (r1 >= 0x78) {
| label_17:
0x000d7c9e bge 0xd7bf0 | goto label_4;
| }
0x000d7ca0 b 0xd7bae | goto label_3;
| label_15:
0x000d7ca2 ldrd r2, r3, [r8, 0x10] | __asm ("ldrd r2, r3, [r8, 0x10]");
0x000d7ca6 add.w r1, r7, 0x60 | r1 += var_60h;
0x000d7ca8 lsls r0, r4, 5 | r0 = r4 << 5;
0x000d7caa movs r0, 5 | r0 = 5;
0x000d7cac strd r2, r3, [r7, 8] | __asm ("strd r2, r3, [s1]");
0x000d7cb0 bl 0x7fd44 | clock_gettime ();
0x000d7cb4 ldr r1, [r7, 0x60] | r1 = var_60h;
0x000d7cb6 ldrd r2, r3, [r7, 8] | __asm ("ldrd r2, r3, [s1]");
0x000d7cba adds.w r0, r2, 0x12c | r0 = r2 + 0x12c;
0x000d7cbe asr.w r2, r1, 0x1f | r2 = r1 >> 0x1f;
0x000d7cc2 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000d7cc6 cmp r0, r1 |
0x000d7cc8 sbcs r3, r2 | __asm ("sbcs r3, r2");
| if (r0 <= r1) {
0x000d7cca blo 0xd7c76 | goto label_5;
| }
0x000d7ccc ldr.w r3, [r8, 0x28] | r3 = *((r8 + 0x28));
0x000d7cd0 b 0xd7c1e | goto label_6;
| label_14:
0x000d7cd2 ldr r3, [pc, 0x1c] |
0x000d7cd4 movs r2, 0xf8 | r2 = 0xf8;
0x000d7cd6 ldr r1, [pc, 0x1c] |
0x000d7cd8 ldr r0, [pc, 0x1c] |
0x000d7cda add r3, pc | r3 = 0x1af9d0;
0x000d7cdc add r1, pc | r1 = 0x1af9d6;
0x000d7cde add r0, pc | r0 = 0x1af9da;
0x000d7ce0 bl 0x27fbc | assert_fail ();
0x000d7ce4 stm r4!, {r3, r5} | *(r4!) = r3;
| *((r4! + 4)) = r5;
0x000d7ce6 movs r2, r0 | r2 = r0;
0x000d7ce8 stm r3!, {r5, r7} | *(r3!) = r5;
| *((r3! + 4)) = r7;
0x000d7cea movs r2, r0 | r2 = r0;
0x000d7cec stm r3!, {r1, r2, r5, r6} | *(r3!) = r1;
| *((r3! + 4)) = r2;
| *((r3! + 8)) = r5;
| *((r3! + 12)) = r6;
0x000d7cee movs r2, r0 | r2 = r0;
0x000d7cf0 adds r2, r5, r2 | r2 = r5 + r2;
0x000d7cf2 movs r2, r0 | r2 = r0;
0x000d7cf4 adds r0, r0, r2 | r0 += r2;
0x000d7cf6 movs r2, r0 | r2 = r0;
0x000d7cf8 adds r6, r1, r2 | r6 = r1 + r2;
0x000d7cfa movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x2bba8 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) sym.__open_catalog () | void open_catalog (int16_t arg_1h, int16_t arg_2h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_20h;
| int16_t var_38h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0002bba8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0002bbac mov fp, r1 |
0x0002bbae sub sp, 0x84 |
0x0002bbb0 movs r1, 0x2f | r1 = 0x2f;
0x0002bbb2 mov sb, r0 | sb = r0;
0x0002bbb4 mov r8, r2 | r8 = r2;
0x0002bbb6 mov r7, r3 | r7 = r3;
0x0002bbb8 bl 0x69630 | r0 = strchr ();
0x0002bbbc subs r5, r0, 0 | r5 = r0 - 0;
0x0002bbbe it ne |
| if (r5 == r0) {
0x0002bbc0 movne r5, 1 | r5 = 1;
| }
0x0002bbc2 cmp.w fp, 0 |
0x0002bbc6 it eq |
| if (fp != 0) {
0x0002bbc8 orreq r5, r5, 1 | r5 |= 1;
| }
0x0002bbcc cmp r5, 0 |
| if (r5 == 0) {
0x0002bbce beq 0x2bcce | goto label_25;
| }
0x0002bbd0 movs r1, 0 | r1 = 0;
0x0002bbd2 mov r0, sb | r0 = sb;
0x0002bbd4 bl 0xa5540 | r0 = open_nocancel ();
0x0002bbd8 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 < r0) {
0x0002bbda blt.w 0x2bffe | goto label_26;
| }
0x0002bbde movs r6, 0 | r6 = 0;
| label_11:
0x0002bbe0 add r1, sp, 0x10 | r1 += var_10h;
0x0002bbe2 mov r0, r4 | r0 = r4;
0x0002bbe4 bl 0x9db70 | r0 = fstat64_time64 ();
0x0002bbe8 cmp r0, 0 |
| if (r0 >= 0) {
0x0002bbea blt 0x2bc0c |
0x0002bbec ldr r3, [sp, 0x20] | r3 = var_20h;
0x0002bbee and r3, r3, 0xf000 | r3 &= 0xf000;
0x0002bbf2 cmp.w r3, 0x8000 |
| if (r3 == 0x8000) {
0x0002bbf6 bne 0x2bbfe |
0x0002bbf8 ldr r1, [sp, 0x38] | r1 = var_38h;
0x0002bbfa cmp r1, 0xb |
| if (r1 > 0xb) {
0x0002bbfc bhi 0x2bc24 | goto label_27;
| }
| }
0x0002bbfe ldr r3, [pc, 0x2b0] |
0x0002bc00 mrc p15, 0, r2, c13, c0, 3 | __asm ("mrc p15, 0, r2, c13, c0, 3");
0x0002bc04 movs r1, 0x16 | r1 = 0x16;
0x0002bc06 add r3, pc |
0x0002bc08 ldr r3, [r3] | r3 = *(0x57abc);
0x0002bc0a str r1, [r2, r3] | *((r2 + r3)) = r1;
| }
| label_2:
0x0002bc0c mov.w r5, -1 | r5 = -1;
| label_0:
0x0002bc10 mov r0, r4 | r0 = r4;
0x0002bc12 bl 0xa5410 | close_nocancel ();
0x0002bc16 mov r0, r6 | r0 = r6;
0x0002bc18 blx 0x1ded4 | fcn_0001ded4 ();
0x0002bc1c mov r0, r5 | r0 = r5;
0x0002bc1e add sp, 0x84 |
0x0002bc20 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_27:
0x0002bc24 movs r5, 0 | r5 = 0;
0x0002bc26 movs r3, 2 | r3 = 2;
0x0002bc28 str r1, [r7, 0x18] | *((r7 + 0x18)) = r1;
0x0002bc2a movs r2, 1 | r2 = 1;
0x0002bc2c mov r0, r5 | r0 = r5;
0x0002bc2e strd r4, r5, [sp] | __asm ("strd r4, r5, [sp]");
0x0002bc32 bl 0xa9000 | r0 = mmap ()
0x0002bc36 adds r3, r0, 1 | r3 = r0 + 1;
0x0002bc38 str r0, [r7, 0x14] | *((r7 + 0x14)) = r0;
| if (r3 == r0) {
0x0002bc3a beq.w 0x2c002 | goto label_28;
| }
0x0002bc3e ldr r2, [r0] | r2 = *(r0);
0x0002bc40 movw r3, 0x8de |
0x0002bc44 movt r3, 0x9604 | r3 = 0x960408de;
0x0002bc48 str r5, [r7] | *(r7) = r5;
0x0002bc4a cmp r2, r3 |
0x0002bc4c it eq |
| if (r2 != r3) {
0x0002bc4e moveq ip, r5 |
| }
| if (r2 != r3) {
0x0002bc50 bne.w 0x2c05a | goto label_29;
| }
| label_21:
0x0002bc54 ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x0002bc56 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x0002bc58 str r3, [r7, 4] | *((r7 + 4)) = r3;
| label_19:
0x0002bc5a mul lr, r3, r2 | lr = r3 * r2;
0x0002bc5e add.w r5, r0, 0xc | r5 = r0 + 0xc;
0x0002bc62 str r2, [r7, 8] | *((r7 + 8)) = r2;
0x0002bc64 movs r2, 0 | r2 = 0;
0x0002bc66 str r5, [r7, 0xc] | *((r7 + 0xc)) = r5;
0x0002bc68 add.w lr, lr, lr, lsl 1 | lr += (lr << 1);
0x0002bc6c lsl.w sb, lr, 1 | sb = lr << 1;
0x0002bc70 cmp.w lr, 2 |
0x0002bc74 add.w r1, sb, 3 | r1 = sb + 3;
0x0002bc78 add.w r1, r0, r1, lsl 2 | r1 = r0 + (r1 << 2);
0x0002bc7c str r1, [r7, 0x10] | *((r7 + 0x10)) = r1;
| if (lr < 2) {
0x0002bc7e bls 0x2bc96 | goto label_30;
| }
0x0002bc80 movs r3, 2 | r3 = 2;
0x0002bc82 mov r8, r1 | r8 = r1;
| do {
0x0002bc84 ldr.w r1, [r5, r3, lsl 2] | offset_0 = r3 << 2;
| r1 = *((r5 + offset_0));
0x0002bc88 adds r3, 3 | r3 += 3;
0x0002bc8a cmp r2, r1 |
0x0002bc8c it lo |
| if (r2 >= r1) {
0x0002bc8e movlo r2, r1 | r2 = r1;
| }
0x0002bc90 cmp lr, r3 |
0x0002bc92 bhi 0x2bc84 |
| } while (lr > r3);
0x0002bc94 mov r1, r8 | r1 = r8;
| label_30:
0x0002bc96 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0002bc98 add.w r5, sb, 0xc | r5 = sb + 0xc;
0x0002bc9c add r5, r2 | r5 += r2;
0x0002bc9e cmp r3, r5 |
| if (r3 < r5) {
0x0002bca0 bls 0x2bcc0 | goto label_31;
| }
0x0002bca2 ldrb r5, [r1, r2] | r5 = *((r1 + r2));
0x0002bca4 subs r3, 0xd | r3 -= 0xd;
0x0002bca6 add r3, sb | r3 += sb;
0x0002bca8 add r1, r2 | r1 += r2;
0x0002bcaa cmp r5, 0 |
| if (r5 == 0) {
0x0002bcac beq 0x2bc10 | goto label_0;
| }
0x0002bcae adds r3, r2, r3 | r3 = r2 + r3;
| if (r3 == r2) {
0x0002bcb0 beq 0x2bcc0 | goto label_31;
| }
0x0002bcb2 add r3, r1 | r3 += r1;
| label_1:
0x0002bcb4 ldrb r5, [r1, 1]! | r5 = *((r1 += 1));
0x0002bcb8 cmp r5, 0 |
| if (r5 == 0) {
0x0002bcba beq 0x2bc10 | goto label_0;
| }
0x0002bcbc cmp r1, r3 |
| if (r1 != r3) {
0x0002bcbe bne 0x2bcb4 | goto label_1;
| }
| label_31:
0x0002bcc0 cmp.w ip, 0 |
| if (ip == 0) {
0x0002bcc4 beq.w 0x2bff6 | goto label_18;
| }
| label_23:
0x0002bcc8 blx 0x1ded4 | fcn_0001ded4 ();
0x0002bccc b 0x2bc0c | goto label_2;
| label_25:
0x0002bcce ldrb.w r3, [fp] | r3 = *(fp);
0x0002bcd2 cmp r3, 0 |
| if (r3 == 0) {
0x0002bcd4 beq.w 0x2bffe | goto label_26;
| }
0x0002bcd8 movw sl, 0x101 | sl = 0x101;
0x0002bcdc mov r6, r5 | r6 = r5;
0x0002bcde str r7, [sp, 0xc] | var_ch = r7;
| do {
0x0002bce0 cmp r3, 0x3a |
| if (r3 != 0x3a) {
0x0002bce2 bne 0x2bd2e | goto label_32;
| }
0x0002bce4 mov r0, sb | r0 = sb;
0x0002bce6 bl 0x6ae40 | r0 = strlen ();
0x0002bcea cmp r5, r0 |
0x0002bcec mov r4, r0 | r4 = r0;
| if (r5 < r0) {
0x0002bcee bls.w 0x2bf72 | goto label_33;
| }
| label_14:
0x0002bcf2 mov r2, r4 | r2 = r4;
0x0002bcf4 mov r1, sb | r1 = sb;
0x0002bcf6 mov r0, r6 | r0 = r6;
0x0002bcf8 mov r7, fp | r7 = fp;
0x0002bcfa blx 0x6d540 | memcpy (r0, r1, r2);
0x0002bcfe adds r3, r4, 1 | r3 = r4 + 1;
| label_24:
0x0002bd00 cmp r5, r3 |
| if (r5 < r3) {
0x0002bd02 bls.w 0x2bed6 | goto label_20;
| }
| label_9:
0x0002bd06 mov.w r3, 0 | r3 = 0;
0x0002bd0a strb r3, [r6, r4] | *((r6 + r4)) = r3;
0x0002bd0c cmp r4, 0 |
| if (r4 != 0) {
0x0002bd0e bne.w 0x2befe | goto label_34;
| }
| label_10:
0x0002bd12 ldrb r3, [r7, 1] | r3 = *((r7 + 1));
0x0002bd14 add.w fp, r7, 1 |
0x0002bd18 cmp r3, 0 |
0x0002bd1a bne 0x2bce0 |
| } while (r3 != 0);
| label_5:
0x0002bd1c mov r0, r6 | r0 = r6;
0x0002bd1e mov.w r5, -1 | r5 = -1;
0x0002bd22 blx 0x1ded4 | fcn_0001ded4 ();
0x0002bd26 mov r0, r5 | r0 = r5;
0x0002bd28 add sp, 0x84 |
0x0002bd2a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_32:
0x0002bd2e ldrb.w r7, [fp] | r7 = *(fp);
0x0002bd32 cmp r7, 0x3a |
0x0002bd34 it ne |
| if (r7 != 0x3a) {
0x0002bd36 cmpne r7, 0 | __asm ("cmpne r7, 0");
| }
0x0002bd38 itet ne |
| if (r7 == 0x3a) {
0x0002bd3a movne r4, 1 | r4 = 1;
| }
| if (r7 != 0x3a) {
0x0002bd3c moveq r4, 0 | r4 = 0;
| }
| if (r7 == 0x3a) {
0x0002bd3e movne r4, 0 | r4 = 0;
| }
| if (r7 != 0x3a) {
0x0002bd40 bne 0x2bd60 | goto label_35;
| }
0x0002bd42 b 0x2c074 | goto label_36;
| do {
0x0002bd44 adds r3, r4, 1 | r3 = r4 + 1;
0x0002bd46 cmp r5, r3 |
| if (r5 < r3) {
0x0002bd48 bls 0x2be2c | goto label_37;
| }
| label_6:
0x0002bd4a strb r7, [r6, r4] | *((r6 + r4)) = r7;
0x0002bd4c add.w fp, fp, 1 |
0x0002bd50 mov r4, r3 | r4 = r3;
| label_3:
0x0002bd52 ldrb.w r7, [fp] | r7 = *(fp);
0x0002bd56 cmp r7, 0x3a |
0x0002bd58 it ne |
| if (r7 != 0x3a) {
0x0002bd5a cmpne r7, 0 | __asm ("cmpne r7, 0");
| }
| if (r7 == 0x3a) {
0x0002bd5c beq.w 0x2c0ac | goto label_38;
| }
| label_35:
0x0002bd60 cmp r7, 0x25 |
0x0002bd62 bne 0x2bd44 |
| } while (r7 != 0x25);
0x0002bd64 ldrb.w r3, [fp, 1] | r3 = *(arg_1h);
0x0002bd68 add.w r7, fp, 2 | r7 += arg_2h;
0x0002bd6c cmp r3, 0x63 |
| if (r3 == 0x63) {
0x0002bd6e beq 0x2be4a | goto label_39;
| }
| if (r3 <= 0x63) {
0x0002bd70 bhi 0x2bd9c |
0x0002bd72 cmp r3, 0x4c |
| if (r3 == 0x4c) {
0x0002bd74 beq.w 0x2bf12 | goto label_40;
| }
0x0002bd78 cmp r3, 0x4e |
| if (r3 != 0x4e) {
0x0002bd7a bne 0x2bdc6 | goto label_41;
| }
0x0002bd7c mov r0, sb | r0 = sb;
0x0002bd7e bl 0x6ae40 | r0 = strlen ();
0x0002bd82 add.w fp, r4, r0 |
0x0002bd84 lsrs r0, r0, 0xc | r0 >>= 0xc;
0x0002bd86 mov r2, r0 | r2 = r0;
0x0002bd88 cmp r5, fp |
| if (r5 < fp) {
0x0002bd8a bls.w 0x2bfb2 | goto label_42;
| }
| label_16:
0x0002bd8e adds r0, r6, r4 | r0 = r6 + r4;
0x0002bd90 mov r1, sb | r1 = sb;
0x0002bd92 mov r4, fp | r4 = fp;
0x0002bd94 mov fp, r7 |
0x0002bd96 blx 0x6d540 | memcpy (r0, r1, r2);
0x0002bd9a b 0x2bd52 | goto label_3;
| }
0x0002bd9c cmp r3, 0x6c |
| if (r3 == 0x6c) {
0x0002bd9e beq 0x2bdde | goto label_43;
| }
0x0002bda0 cmp r3, 0x74 |
| if (r3 != 0x74) {
0x0002bda2 bne.w 0x2beb4 | goto label_44;
| }
0x0002bda6 mov r2, r8 | r2 = r8;
0x0002bda8 b 0x2bdae |
| while (r3 != 0) {
0x0002bdaa cmp r3, 0x2e |
| if (r3 == 0x2e) {
0x0002bdac beq 0x2bdc2 | goto label_7;
| }
0x0002bdae mov r1, r2 | r1 = r2;
0x0002bdb0 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x0002bdb4 cmp r3, 0 |
0x0002bdb6 it ne |
| if (r3 != 0) {
0x0002bdb8 cmpne r3, 0x5f | __asm ("cmpne r3, 0x5f");
| }
0x0002bdba bne 0x2bdaa |
| }
0x0002bdbc cmp r3, 0x5f |
| if (r3 == 0x5f) {
0x0002bdbe beq.w 0x2bf30 | goto label_45;
| }
| do {
| label_7:
0x0002bdc2 mov fp, r7 |
0x0002bdc4 b 0x2bd52 | goto label_3;
| label_41:
0x0002bdc6 cmp r3, 0x25 |
| if (r3 != 0x25) {
0x0002bdc8 bne 0x2beb4 | goto label_44;
| }
0x0002bdca adds r3, r4, 1 | r3 = r4 + 1;
0x0002bdcc cmp r5, r3 |
| if (r5 < r3) {
0x0002bdce bls.w 0x2bf90 | goto label_46;
| }
| label_15:
0x0002bdd2 mov.w r2, 0x25 | r2 = 0x25;
0x0002bdd6 mov fp, r7 |
0x0002bdd8 strb r2, [r6, r4] | *((r6 + r4)) = r2;
0x0002bdda mov r4, r3 | r4 = r3;
0x0002bddc b 0x2bd52 | goto label_3;
| label_43:
0x0002bdde mov fp, r8 |
0x0002bde0 b 0x2be06 | goto label_47;
| label_4:
0x0002bde2 ldrb r1, [fp], 1 | r1 = *(fp);
| fp++;
0x0002bde6 ldrb.w r2, [fp] | r2 = *(fp);
0x0002bdea strb r1, [r6, r3] | *((r6 + r3)) = r1;
0x0002bdec cmp r2, 0 |
0x0002bdee it ne |
| if (r2 != 0) {
0x0002bdf0 cmpne r2, 0x5f | __asm ("cmpne r2, 0x5f");
| }
0x0002bdf2 ite ne |
| if (r2 == 0) {
0x0002bdf4 movne r3, 1 | r3 = 1;
| }
| if (r2 != 0) {
0x0002bdf6 moveq r3, 0 | r3 = 0;
| }
0x0002bdf8 cmp r2, 0x2e |
0x0002bdfa ite eq |
| if (r2 != 0x2e) {
0x0002bdfc moveq r3, 0 | r3 = 0;
| }
| if (r2 == 0x2e) {
0x0002bdfe andne r3, r3, 1 | r3 &= 1;
| }
0x0002be02 cmp r3, 0 |
0x0002be04 beq 0x2bdc2 |
| } while (r3 == 0);
| label_47:
0x0002be06 mov r3, r4 | r3 = r4;
0x0002be08 adds r4, 1 | r4++;
0x0002be0a cmp r4, r5 |
| if (r4 <= r5) {
0x0002be0c blo 0x2bde2 | goto label_4;
| }
0x0002be0e cmp r5, sl |
0x0002be10 ite hs |
| if (r5 < sl) {
0x0002be12 addhs r5, r5, r5 | r5 += r5;
| }
| if (r5 >= sl) {
0x0002be14 addlo r5, sl | r5 += sl;
| }
0x0002be16 mov r0, r6 | r0 = r6;
0x0002be18 mov r1, r5 | r1 = r5;
0x0002be1a str r3, [sp, 8] | var_8h = r3;
0x0002be1c blx 0x1deac | fcn_0001deac ();
0x0002be20 ldr r3, [sp, 8] | r3 = var_8h;
0x0002be22 cmp r0, 0 |
| if (r0 == 0) {
0x0002be24 beq.w 0x2bd1c | goto label_5;
| }
0x0002be28 mov r6, r0 | r6 = r0;
0x0002be2a b 0x2bde2 | goto label_4;
| label_37:
0x0002be2c cmp r5, sl |
0x0002be2e ite hs |
| if (r5 < sl) {
0x0002be30 addhs r5, r5, r5 | r5 += r5;
| }
| if (r5 >= sl) {
0x0002be32 addlo r5, sl | r5 += sl;
| }
0x0002be34 mov r0, r6 | r0 = r6;
0x0002be36 mov r1, r5 | r1 = r5;
0x0002be38 str r3, [sp, 8] | var_8h = r3;
0x0002be3a blx 0x1deac | fcn_0001deac ();
0x0002be3e ldr r3, [sp, 8] | r3 = var_8h;
0x0002be40 cmp r0, 0 |
| if (r0 == 0) {
0x0002be42 beq.w 0x2bd1c | goto label_5;
| }
0x0002be46 mov r6, r0 | r6 = r0;
0x0002be48 b 0x2bd4a | goto label_6;
| label_39:
0x0002be4a mov r2, r8 | r2 = r8;
| do {
0x0002be4c mov r1, r2 | r1 = r2;
0x0002be4e ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x0002be52 cmp r3, 0 |
0x0002be54 it ne |
| if (r3 != 0) {
0x0002be56 cmpne r3, 0x2e | __asm ("cmpne r3, 0x2e");
| }
0x0002be58 bne 0x2be4c |
| } while (r3 != 0);
0x0002be5a cmp r3, 0x2e |
| if (r3 != 0x2e) {
0x0002be5c bne 0x2bdc2 | goto label_7;
| }
0x0002be5e str r7, [sp, 8] | var_8h = r7;
0x0002be60 add.w fp, r1, 2 |
0x0002be64 mov r7, r5 | r7 = r5;
0x0002be66 b 0x2be74 |
| while (r4 <= r7) {
0x0002be68 ldrb r2, [fp], 1 | r2 = *(fp);
| fp++;
0x0002be6c ldrb.w r3, [fp] | r3 = *(fp);
0x0002be70 strb r2, [r6, r5] | *((r6 + r5)) = r2;
| if (r3 == 0) {
0x0002be72 cbz r3, 0x2bea6 | goto label_12;
| }
| label_8:
0x0002be74 mov r5, r4 | r5 = r4;
0x0002be76 adds r4, 1 | r4++;
0x0002be78 cmp r4, r7 |
0x0002be7a blo 0x2be68 |
| }
0x0002be7c movw r3, 0x101 | r3 = 0x101;
0x0002be80 mov r0, r6 | r0 = r6;
0x0002be82 cmp r7, r3 |
0x0002be84 ite hs |
| if (r7 < r3) {
0x0002be86 addhs r7, r7, r7 | r7 += r7;
| }
| if (r7 >= r3) {
0x0002be88 addlo r7, r7, r3 | r7 += r3;
| }
0x0002be8a mov r1, r7 | r1 = r7;
0x0002be8c blx 0x1deac | r0 = fcn_0001deac ();
0x0002be90 cmp r0, 0 |
| if (r0 == 0) {
0x0002be92 beq.w 0x2bd1c | goto label_5;
| }
0x0002be96 ldrb r2, [fp], 1 | r2 = *(fp);
| fp++;
0x0002be9a mov r6, r0 | r6 = r0;
0x0002be9c ldrb.w r3, [fp] | r3 = *(fp);
0x0002bea0 strb r2, [r6, r5] | *((r6 + r5)) = r2;
0x0002bea2 cmp r3, 0 |
| if (r3 != 0) {
0x0002bea4 bne 0x2be74 | goto label_8;
| }
| label_12:
0x0002bea6 mov r5, r7 | r5 = r7;
0x0002bea8 ldr r7, [sp, 8] | r7 = var_8h;
0x0002beaa mov fp, r7 |
0x0002beac b 0x2bd52 | goto label_3;
| label_44:
0x0002beb4 ldrb.w r3, [fp, 2] | r3 = *(arg_2h);
0x0002beb8 cmp r3, 0x3a |
0x0002beba it ne |
| if (r3 != 0x3a) {
0x0002bebc cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
| if (r3 == 0x3a) {
0x0002bebe beq 0x2becc | goto label_48;
| }
| do {
0x0002bec0 ldrb r3, [r7, 1]! | r3 = *((r7 += 1));
0x0002bec4 cmp r3, 0 |
0x0002bec6 it ne |
| if (r3 != 0) {
0x0002bec8 cmpne r3, 0x3a | __asm ("cmpne r3, 0x3a");
| }
0x0002beca bne 0x2bec0 |
| } while (r3 != 0);
| label_48:
0x0002becc movs r3, 1 | r3 = 1;
0x0002bece movs r4, 0 | r4 = 0;
0x0002bed0 cmp r5, r3 |
| if (r5 > r3) {
0x0002bed2 bhi.w 0x2bd06 | goto label_9;
| }
| label_20:
0x0002bed6 movw r3, 0x101 | r3 = 0x101;
0x0002beda mov r0, r6 | r0 = r6;
0x0002bedc cmp r5, r3 |
0x0002bede ite hs |
| if (r5 < r3) {
0x0002bee0 addhs r5, r5, r5 | r5 += r5;
| }
| if (r5 >= r3) {
0x0002bee2 addlo r5, r5, r3 | r5 += r3;
| }
0x0002bee4 mov r1, r5 | r1 = r5;
0x0002bee6 blx 0x1deac | r0 = fcn_0001deac ();
0x0002beea cmp r0, 0 |
| if (r0 == 0) {
0x0002beec beq.w 0x2bd1c | goto label_5;
| }
0x0002bef0 mov r6, r0 | r6 = r0;
0x0002bef2 mov.w r3, 0 | r3 = 0;
0x0002bef6 strb r3, [r6, r4] | *((r6 + r4)) = r3;
0x0002bef8 cmp r4, 0 |
| if (r4 == 0) {
0x0002befa beq.w 0x2bd12 | goto label_10;
| }
| label_34:
0x0002befe movs r1, 0 | r1 = 0;
0x0002bf00 mov r0, r6 | r0 = r6;
0x0002bf02 bl 0xa5540 | r0 = open_nocancel ();
0x0002bf06 cmp r0, 0 |
| if (r0 < 0) {
0x0002bf08 blt.w 0x2bd12 | goto label_10;
| }
0x0002bf0c ldr r7, [sp, 0xc] | r7 = var_ch;
0x0002bf0e mov r4, r0 | r4 = r0;
0x0002bf10 b 0x2bbe0 | goto label_11;
| label_40:
0x0002bf12 mov r0, r8 | r0 = r8;
0x0002bf14 bl 0x6ae40 | r0 = strlen ();
0x0002bf18 add.w fp, r4, r0 |
0x0002bf1c mov r2, r0 | r2 = r0;
0x0002bf1e cmp r5, fp |
| if (r5 < fp) {
0x0002bf20 bls 0x2bfd4 | goto label_49;
| }
| label_17:
0x0002bf22 adds r0, r6, r4 | r0 = r6 + r4;
0x0002bf24 mov r1, r8 | r1 = r8;
0x0002bf26 mov r4, fp | r4 = fp;
0x0002bf28 mov fp, r7 |
0x0002bf2a blx 0x6d540 | memcpy (r0, r1, r2);
0x0002bf2e b 0x2bd52 | goto label_3;
| label_45:
0x0002bf30 str r7, [sp, 8] | var_8h = r7;
0x0002bf32 add.w fp, r1, 2 |
0x0002bf36 mov r7, r5 | r7 = r5;
0x0002bf38 b 0x2bf4c | goto label_50;
| label_13:
0x0002bf3a ldrb r2, [fp], 1 | r2 = *(fp);
| fp++;
0x0002bf3e ldrb.w r3, [fp] | r3 = *(fp);
0x0002bf42 strb r2, [r6, r5] | *((r6 + r5)) = r2;
0x0002bf44 cmp r3, 0 |
0x0002bf46 it ne |
| if (r3 == 0) {
0x0002bf48 cmpne r3, 0x2e | __asm ("cmpne r3, 0x2e");
| goto label_51;
| }
| if (r3 == 0) {
| label_51:
0x0002bf4a beq 0x2bea6 | goto label_12;
| }
| label_50:
0x0002bf4c mov r5, r4 | r5 = r4;
0x0002bf4e adds r4, 1 | r4++;
0x0002bf50 cmp r4, r7 |
| if (r4 <= r7) {
0x0002bf52 blo 0x2bf3a | goto label_13;
| }
0x0002bf54 movw r3, 0x101 | r3 = 0x101;
0x0002bf58 mov r0, r6 | r0 = r6;
0x0002bf5a cmp r7, r3 |
0x0002bf5c ite hs |
| if (r7 < r3) {
0x0002bf5e addhs r7, r7, r7 | r7 += r7;
| }
| if (r7 >= r3) {
0x0002bf60 addlo r7, r7, r3 | r7 += r3;
| }
0x0002bf62 mov r1, r7 | r1 = r7;
0x0002bf64 blx 0x1deac | r0 = fcn_0001deac ();
0x0002bf68 cmp r0, 0 |
| if (r0 == 0) {
0x0002bf6a beq.w 0x2bd1c | goto label_5;
| }
0x0002bf6e mov r6, r0 | r6 = r0;
0x0002bf70 b 0x2bf3a | goto label_13;
| label_33:
0x0002bf72 add.w r3, r0, 0x100 | r3 = r0 + 0x100;
0x0002bf76 mov r0, r6 | r0 = r6;
0x0002bf78 cmp r3, r5 |
0x0002bf7a ite hs |
| if (r3 < r5) {
0x0002bf7c addhs r5, r5, r3 | r5 += r3;
| }
| if (r3 >= r5) {
0x0002bf7e addlo r5, r5, r5 | r5 += r5;
| }
0x0002bf80 mov r1, r5 | r1 = r5;
0x0002bf82 blx 0x1deac | r0 = fcn_0001deac ();
0x0002bf86 cmp r0, 0 |
| if (r0 == 0) {
0x0002bf88 beq.w 0x2bd1c | goto label_5;
| }
0x0002bf8c mov r6, r0 | r6 = r0;
0x0002bf8e b 0x2bcf2 | goto label_14;
| label_46:
0x0002bf90 movw r2, 0x101 | r2 = 0x101;
0x0002bf94 mov r0, r6 | r0 = r6;
0x0002bf96 cmp r5, r2 |
0x0002bf98 ite hs |
| if (r5 < r2) {
0x0002bf9a addhs r5, r5, r5 | r5 += r5;
| }
| if (r5 >= r2) {
0x0002bf9c addlo r5, r5, r2 | r5 += r2;
| }
0x0002bf9e str r3, [sp, 8] | var_8h = r3;
0x0002bfa0 mov r1, r5 | r1 = r5;
0x0002bfa2 blx 0x1deac | fcn_0001deac ();
0x0002bfa6 ldr r3, [sp, 8] | r3 = var_8h;
0x0002bfa8 cmp r0, 0 |
| if (r0 == 0) {
0x0002bfaa beq.w 0x2bd1c | goto label_5;
| }
0x0002bfae mov r6, r0 | r6 = r0;
0x0002bfb0 b 0x2bdd2 | goto label_15;
| label_42:
0x0002bfb2 add.w r3, r0, 0x100 | r3 = r0 + 0x100;
0x0002bfb6 str r0, [sp, 8] | var_8h = r0;
0x0002bfb8 cmp r3, r5 |
0x0002bfba ite hs |
| if (r3 < r5) {
0x0002bfbc addhs r5, r5, r3 | r5 += r3;
| }
| if (r3 >= r5) {
0x0002bfbe addlo r5, r5, r5 | r5 += r5;
| }
0x0002bfc0 mov r0, r6 | r0 = r6;
0x0002bfc2 mov r1, r5 | r1 = r5;
0x0002bfc4 blx 0x1deac | fcn_0001deac ();
0x0002bfc8 ldr r2, [sp, 8] | r2 = var_8h;
0x0002bfca cmp r0, 0 |
| if (r0 == 0) {
0x0002bfcc beq.w 0x2bd1c | goto label_5;
| }
0x0002bfd0 mov r6, r0 | r6 = r0;
0x0002bfd2 b 0x2bd8e | goto label_16;
| label_49:
0x0002bfd4 add.w r3, r0, 0x100 | r3 = r0 + 0x100;
0x0002bfd8 str r0, [sp, 8] | var_8h = r0;
0x0002bfda cmp r3, r5 |
0x0002bfdc ite hs |
| if (r3 < r5) {
0x0002bfde addhs r5, r5, r3 | r5 += r3;
| }
| if (r3 >= r5) {
0x0002bfe0 addlo r5, r5, r5 | r5 += r5;
| }
0x0002bfe2 mov r0, r6 | r0 = r6;
0x0002bfe4 mov r1, r5 | r1 = r5;
0x0002bfe6 blx 0x1deac | fcn_0001deac ();
0x0002bfea ldr r2, [sp, 8] | r2 = var_8h;
0x0002bfec cmp r0, 0 |
| if (r0 == 0) {
0x0002bfee beq.w 0x2bd1c | goto label_5;
| }
0x0002bff2 mov r6, r0 | r6 = r0;
0x0002bff4 b 0x2bf22 | goto label_17;
| label_18:
0x0002bff6 ldr r1, [r7, 0x18] | r1 = *((r7 + 0x18));
0x0002bff8 bl 0xa90c0 | munmap ();
0x0002bffc b 0x2bc0c | goto label_2;
| label_26:
0x0002bffe movs r6, 0 | r6 = 0;
0x0002c000 b 0x2bd1c | goto label_5;
| label_28:
0x0002c002 ldr r5, [sp, 0x38] | r5 = var_38h;
0x0002c004 mov r0, r5 | r0 = r5;
0x0002c006 mov sb, r5 | sb = r5;
0x0002c008 blx 0x1df60 | fcn_0001df60 ();
0x0002c00c str r0, [r7, 0x14] | *((r7 + 0x14)) = r0;
0x0002c00e cmp r0, 0 |
| if (r0 == 0) {
0x0002c010 beq.w 0x2bc0c | goto label_2;
| }
0x0002c014 mrc p15, 0, r8, c13, c0, 3 | __asm ("mrc p15, 0, r8, c13, c0, 3");
0x0002c018 mov r1, r0 | r1 = r0;
0x0002c01a mov r3, r5 | r3 = r5;
| do {
0x0002c01c sub.w r3, r3, sb | r3 -= sb;
0x0002c020 mov r2, sb | r2 = sb;
0x0002c022 add r1, r3 | r1 += r3;
0x0002c024 mov r0, r4 | r0 = r4;
0x0002c026 bl 0xa56cc | r0 = read_nocancel ();
0x0002c02a subs r2, r0, 1 | r2 = r0 - 1;
0x0002c02c ldr r3, [pc, 0x84] | r3 = *(0x2c0b4);
0x0002c02e adds r2, 3 | r2 += 3;
| if (r2 >= 3) {
0x0002c030 bls 0x2c04a |
0x0002c032 adds r0, 1 | r0++;
| if (r0 == 1) {
0x0002c034 bne 0x2c042 |
0x0002c036 add r3, pc | r3 += pc;
0x0002c038 ldr r3, [r3] | r3 = *(r3);
0x0002c03a ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x0002c03e cmp r3, 4 |
| if (r3 == 4) {
0x0002c040 beq 0x2c04e | goto label_52;
| }
| }
0x0002c042 ldr r0, [r7, 0x14] | r0 = *((r7 + 0x14));
0x0002c044 blx 0x1ded4 | fcn_0001ded4 ();
0x0002c048 b 0x2bc0c | goto label_2;
| }
0x0002c04a sub.w sb, sb, r0 | sb -= r0;
| label_52:
0x0002c04e ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x0002c050 cmp.w sb, 0 |
| if (sb == 0) {
0x0002c054 beq 0x2c084 | goto label_53;
| }
0x0002c056 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0002c058 b 0x2c01c |
| } while (1);
| label_29:
0x0002c05a movw r3, 0x496 |
0x0002c05e movt r3, 0xde08 | r3 = 0xde080496;
0x0002c062 cmp r2, r3 |
| if (r2 != r3) {
0x0002c064 bne 0x2bff6 | goto label_18;
| }
0x0002c066 mov ip, r5 |
| label_22:
0x0002c068 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x0002c06a ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x0002c06c rev r3, r3 | r3 = SWAP32 (r3);
0x0002c06e rev r2, r2 | r2 = SWAP32 (r2);
0x0002c070 str r3, [r7, 4] | *((r7 + 4)) = r3;
0x0002c072 b 0x2bc5a | goto label_19;
| label_36:
0x0002c074 cmp r5, 1 |
0x0002c076 itt hi |
| if (r5 <= 1) {
0x0002c078 movhi r7, fp | r7 = fp;
| }
| if (r5 > 1) {
0x0002c07a strbhi r4, [r6] | *(r6) = r4;
| goto label_54;
| }
| if (r5 > 1) {
| label_54:
0x0002c07c bhi.w 0x2bd12 | goto label_10;
| }
0x0002c080 mov r7, fp | r7 = fp;
0x0002c082 b 0x2bed6 | goto label_20;
| label_53:
0x0002c084 ldr r2, [r1] | r2 = *(r1);
0x0002c086 movw r3, 0x8de |
0x0002c088 lsls r6, r3, 0xf | r6 = r3 << 0xf;
0x0002c08a movt r3, 0x9604 | r3 = 0x960408de;
0x0002c08e mov.w ip, 1 |
0x0002c092 mov r0, r1 | r0 = r1;
0x0002c094 str.w ip, [r7] | __asm ("str.w ip, [r7]");
0x0002c098 cmp r2, r3 |
| if (r2 == r3) {
0x0002c09a beq.w 0x2bc54 | goto label_21;
| }
0x0002c09e movw r3, 0x496 |
0x0002c0a2 movt r3, 0xde08 | r3 = 0xde080496;
0x0002c0a6 cmp r2, r3 |
| if (r2 == r3) {
0x0002c0a8 beq 0x2c068 | goto label_22;
| }
0x0002c0aa b 0x2bcc8 | goto label_23;
| label_38:
0x0002c0ac mov r7, fp | r7 = fp;
0x0002c0ae adds r3, r4, 1 | r3 = r4 + 1;
0x0002c0b0 b 0x2bd00 | goto label_24;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x5a7dc */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.pthread_create () | void pthread_create (int16_t arg_0h, int16_t arg_4h, int16_t arg_8h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_bp_8h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_36h;
| int16_t var_37h;
| int16_t var_38h;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_c4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0005a7dc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0005a7e0 sub sp, 0xd4 |
0x0005a7e2 ldr.w r4, [pc, 0x7ac] | r4 = *(0x0005af90);
0x0005a7e6 strd r2, r3, [sp, 0x14] | __asm ("strd r2, r3, [var_14h]");
0x0005a7ea add r4, pc | r4 += pc;
0x0005a7ec ldr.w r8, [pc, 0x7a4] |
0x0005a7f0 ldrb r3, [r4] | r3 = *(r4);
0x0005a7f2 str r0, [sp, 0x10] | var_10h = r0;
0x0005a7f4 add r8, pc | r8 = 0xb578c;
0x0005a7f6 str r1, [sp, 8] | var_8h = r1;
0x0005a7f8 cmp r3, 0 |
| if (r3 != 0) {
0x0005a7fa bne.w 0x5ac7c | goto label_39;
| }
| label_7:
0x0005a7fe ldr r3, [sp, 8] | r3 = var_8h;
0x0005a800 subs r3, 1 | r3--;
0x0005a802 adds r3, 3 | r3 += 3;
| if (r3 < 3) {
0x0005a804 bls 0x5a840 | goto label_40;
| }
0x0005a806 add r5, sp, 0x40 | r5 += var_40h;
0x0005a808 mov r0, r5 | r0 = r5;
0x0005a80a bl 0x5b394 | pthread_getattr_default_np ();
0x0005a80e str r0, [sp, 0xc] | var_ch = r0;
| if (r0 != 0) {
0x0005a810 cbnz r0, 0x5a838 | goto label_41;
| }
0x0005a812 movs r3, 1 | r3 = 1;
0x0005a814 str r3, [sp, 0x1c] | var_1ch = r3;
0x0005a816 b 0x5a846 |
| while (r3 < r3) {
0x0005a818 ldr.w sl, [r5, 0x10] | sl = *((r5 + 0x10));
0x0005a81c mov r3, r4 | r3 = r4;
| label_5:
0x0005a81e ldr r2, [sp, 0x20] | r2 = var_20h;
0x0005a820 add.w r2, r2, 0x800 | r2 += 0x800;
0x0005a824 cmp r2, r3 |
| if (r2 < r3) {
0x0005a826 bls.w 0x5abc2 | goto label_42;
| }
| label_0:
0x0005a82a movs r3, 0x16 | r3 = 0x16;
0x0005a82c str r3, [sp, 0xc] | var_ch = r3;
| label_3:
0x0005a82e ldr r3, [sp, 0x1c] | r3 = var_1ch;
| if (r3 != 0) {
0x0005a830 cbz r3, 0x5a838 |
0x0005a832 add r0, sp, 0x40 | r0 += var_40h;
0x0005a834 bl 0x58810 | pthread_attr_destroy (r0);
| }
| label_41:
0x0005a838 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0005a83a add sp, 0xd4 |
0x0005a83c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_40:
0x0005a840 ldr r5, [sp, 8] | r5 = var_8h;
0x0005a842 movs r3, 0 | r3 = 0;
0x0005a844 str r3, [sp, 0x1c] | var_1ch = r3;
0x0005a846 bl 0xa6aec | getpagesize ();
0x0005a84a ldr.w r3, [pc, 0x74c] | r3 = *(0x5af9a);
0x0005a84e mov sb, r0 | sb = r0;
0x0005a850 add.w fp, r0, -1 |
0x0005a854 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x0005a858 ldrd r4, r7, [r3, 0x164] | __asm ("ldrd r4, r7, aav.0x000000ff");
0x0005a85c add r4, r7 | r4 += r7;
0x0005a85e mov r1, r7 | r1 = r7;
0x0005a860 subs r4, 1 | r4--;
0x0005a862 mov r0, r4 | r0 = r4;
0x0005a864 bl 0xdc9dc | fcn_000dc9dc (r0, r1, r2);
0x0005a868 subs r3, r4, r1 | r3 = r4 - r1;
0x0005a86a str r3, [sp, 0x20] | var_20h = r3;
0x0005a86c ands.w r3, sb, fp | r3 = sb & fp;
0x0005a870 str r3, [sp, 0xc] | var_ch = r3;
| if (r3 != sb) {
0x0005a872 bne.w 0x5b19a | goto label_43;
| }
0x0005a876 ldr r4, [r5, 0x14] | r4 = *((r5 + 0x14));
0x0005a878 cmp r4, 0 |
| if (r4 == 0) {
0x0005a87a beq.w 0x5ab6a | goto label_44;
| }
0x0005a87e ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x0005a880 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x0005a882 bmi 0x5a818 |
| }
| label_4:
0x0005a884 ldr.w r3, [pc, 0x714] | r3 = *(0x5af9c);
0x0005a888 rsbs r7, r7, 0 | r7 -= ;
0x0005a88a ldr.w sl, [r8, r3] | sl = *((r8 + r3));
0x0005a88e ands.w r3, r7, r4 | r3 = r7 & r4;
0x0005a892 str r3, [sp, 0x24] | var_24h = r3;
0x0005a894 ldr.w r2, [sl, 0x8e0] | r2 = *((sl + 0x8e0));
| if (r3 == r7) {
0x0005a898 beq.w 0x5b1ac | goto label_45;
| }
0x0005a89c ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0005a89e rsb.w r0, sb, 0 | r0 = sb - ;
0x0005a8a2 add.w r8, fp, r3 | r8 = fp + r3;
0x0005a8a6 and.w r8, r8, r0 | r8 &= r0;
0x0005a8aa cmp r3, r8 |
| if (r3 > r8) {
0x0005a8ac bhi 0x5a82a | goto label_0;
| }
0x0005a8ae ldr r3, [sp, 0x24] | r3 = var_24h;
0x0005a8b0 adds.w sb, r3, r8 | sb = r3 + r8;
0x0005a8b4 ite hs |
| if (sb < r3) {
0x0005a8b6 movhs r6, 1 | r6 = 1;
| }
| if (sb < r3) {
0x0005a8b8 movlo r6, 0 | r6 = 0;
| goto label_46;
| }
| if (sb >= r3) {
| label_46:
0x0005a8ba bhs 0x5a82a | goto label_0;
| }
0x0005a8bc ldr r3, [sp, 0x20] | r3 = var_20h;
0x0005a8be add.w r1, r3, 0x800 | r1 = r3 + 0x800;
0x0005a8c2 add r1, fp | r1 += fp;
0x0005a8c4 add r1, r8 | r1 += r8;
0x0005a8c6 ands r1, r0 | r1 &= r0;
0x0005a8c8 cmp sb, r1 |
| if (sb <= r1) {
0x0005a8ca blo 0x5a82a | goto label_0;
| }
0x0005a8cc addw r0, sl, 0x928 | __asm ("addw r0, sl, aav.0x000000ff");
0x0005a8d0 movs r1, 1 | r1 = 1;
| do {
0x0005a8d2 ldrex r4, [r0] | __asm ("ldrex r4, [r0]");
0x0005a8d6 cmp r4, 0 |
| if (r4 != 0) {
0x0005a8d8 bne 0x5a8e6 | goto label_47;
| }
0x0005a8da strex r3, r1, [r0] | __asm ("strex r3, r1, [r0]");
0x0005a8de cmp r3, 0 |
0x0005a8e0 bne 0x5a8d2 |
| } while (r3 != 0);
0x0005a8e2 dmb ish | __asm ("dmb ish");
| if (r3 != 0) {
| label_47:
0x0005a8e6 bne.w 0x5b06e | goto label_48;
| }
| label_26:
0x0005a8ea lsls r2, r2, 2 | r2 <<= 2;
0x0005a8ec addw ip, sl, 0x918 | __asm ("addw ip, sl, aav.0x000000ff");
0x0005a8f0 and fp, r2, 4 |
0x0005a8f4 ldr.w r2, [sl, 0x918] | r2 = *((sl + 0x918));
0x0005a8f8 orr r3, fp, 3 | r3 = fp | 3;
0x0005a8fc str r3, [sp, 0x2c] | var_2ch = r3;
0x0005a8fe cmp r2, ip |
| if (r2 == ip) {
0x0005a900 beq.w 0x5ae76 | goto label_49;
| }
0x0005a904 movs r4, 0 | r4 = 0;
0x0005a906 b 0x5a90e |
| while (r3 > 0) {
| label_1:
0x0005a908 ldr r2, [r2] | r2 = *(r2);
0x0005a90a cmp r2, ip |
| if (r2 == ip) {
0x0005a90c beq 0x5a93a | goto label_50;
| }
| label_2:
0x0005a90e ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x0005a910 cmp r3, 0 |
0x0005a912 bgt 0x5a908 |
| }
0x0005a914 ldr.w r3, [r2, 0x244] | r3 = *((r2 + 0x244));
0x0005a918 cmp sb, r3 |
| if (sb > r3) {
0x0005a91a bhi 0x5a908 | goto label_1;
| }
0x0005a91c sub.w lr, r2, 0x60 | lr = r2 - 0x60;
| if (sb == r3) {
0x0005a920 beq.w 0x5b05a | goto label_51;
| }
0x0005a924 cmp r4, 0 |
| if (r4 == 0) {
0x0005a926 beq.w 0x5acca | goto label_52;
| }
0x0005a92a ldr.w r1, [r4, 0x2a4] | r1 = *((r4 + 0x2a4));
0x0005a92e ldr r2, [r2] | r2 = *(r2);
0x0005a930 cmp r3, r1 |
0x0005a932 it lo |
| if (r3 >= r1) {
0x0005a934 movlo r4, lr | r4 = lr;
| }
0x0005a936 cmp r2, ip |
| if (r2 != ip) {
0x0005a938 bne 0x5a90e | goto label_2;
| }
| label_50:
0x0005a93a cmp r4, 0 |
| if (r4 == 0) {
0x0005a93c beq.w 0x5ae76 | goto label_49;
| }
| label_22:
0x0005a940 ldr.w r2, [r4, 0x2a4] | r2 = *((r4 + 0x2a4));
0x0005a944 cmp.w r2, sb, lsl 2 |
| if (r2 > sb) {
0x0005a948 bhi.w 0x5ae76 | goto label_49;
| }
0x0005a94c add.w r3, r4, 0x60 | r3 = r4 + 0x60;
0x0005a950 mov.w r2, -1 | r2 = -1;
0x0005a954 mov r7, r3 | r7 = r3;
0x0005a956 mov r0, r3 | r0 = r3;
0x0005a958 str.w r2, [r4, 0x214] | __asm ("str.w r2, aav.0x000000ff");
0x0005a95c str r3, [sp, 0x24] | var_24h = r3;
0x0005a95e bl 0x57f70 | fcn_00057f70 (r0);
0x0005a962 addw r1, sl, 0x908 | __asm ("addw r1, sl, aav.0x000000ff");
0x0005a966 mov r0, r7 | r0 = r7;
0x0005a968 bl 0x57fa4 | fcn_00057fa4 (r0, r1);
0x0005a96c ldr.w r1, [r4, 0x2a4] | r1 = *((r4 + 0x2a4));
0x0005a970 addw r0, sl, 0x928 | __asm ("addw r0, sl, aav.0x000000ff");
0x0005a974 ldr.w r2, [sl, 0x920] | r2 = *((sl + 0x920));
0x0005a978 subs r2, r2, r1 | r2 -= r1;
0x0005a97a movs r1, 0 | r1 = 0;
0x0005a97c str.w r2, [sl, 0x920] | __asm ("str.w r2, aav.0x000000ff");
0x0005a980 dmb ish | __asm ("dmb ish");
| do {
0x0005a984 ldrex r2, [r0] | __asm ("ldrex r2, [r0]");
0x0005a988 strex r7, r1, [r0] | __asm ("strex r7, r1, [r0]");
0x0005a98c cmp r7, 0 |
0x0005a98e bne 0x5a984 |
| } while (r7 != 0);
0x0005a990 cmp r2, 1 |
| if (r2 > 1) {
0x0005a992 bgt.w 0x5b08e | goto label_53;
| }
| label_29:
0x0005a996 ldr.w fp, [r4, 0x500] | fp = *((r4 + 0x500));
0x0005a99a movs r2, 0 | r2 = 0;
0x0005a99c ldr.w r3, [r4, 0x2a4] | r3 = *((r4 + 0x2a4));
0x0005a9a0 str.w r2, [r4, 0x4c4] | __asm ("str.w r2, aav.0x000000ff");
0x0005a9a4 str.w r2, [r4, 0x4c8] | __asm ("str.w r2, aav.0x000000ff");
0x0005a9a8 str.w r2, [r4, 0x80] | __asm ("str.w r2, [r4, 0x80]");
0x0005a9ac str r2, [r4, 0x78] | *((r4 + 0x78)) = r2;
0x0005a9ae str.w r2, [r4, 0x20c] | __asm ("str.w r2, aav.0x000000ff");
0x0005a9b2 str.w r2, [r4, 0x240] | __asm ("str.w r2, aav.0x000000ff");
0x0005a9b6 strb.w r2, [r4, 0x4bd] | *((r4 + 0x4bd)) = r2;
0x0005a9ba str.w r2, [r4, 0x4c0] | __asm ("str.w r2, aav.0x000000ff");
0x0005a9be ldr r2, [fp, -0x8] | r2 = *((fp - 0x8));
0x0005a9c2 str r3, [sp, 0x20] | var_20h = r3;
0x0005a9c4 ldr.w r3, [r4, 0x2a0] | r3 = *((r4 + 0x2a0));
0x0005a9c8 str r3, [sp, 0x28] | var_28h = r3;
0x0005a9ca cmp r2, 0 |
| if (r2 == 0) {
0x0005a9cc beq.w 0x5b078 | goto label_54;
| }
0x0005a9d0 add.w r7, fp, 4 | r7 += arg_4h;
| do {
0x0005a9d4 adds r6, 1 | r6++;
0x0005a9d6 ldr.w r0, [r7, r6, lsl 3] | offset_0 = r6 << 3;
| r0 = *((r7 + offset_0));
0x0005a9da blx 0x1ded4 | fcn_0001ded4 ();
0x0005a9de ldr r2, [fp, -0x8] | r2 = *((fp - 0x8));
0x0005a9e2 cmp r6, r2 |
0x0005a9e4 blo 0x5a9d4 |
| } while (r6 <= r2);
0x0005a9e6 adds r2, 1 | r2++;
0x0005a9e8 lsls r2, r2, 3 | r2 <<= 3;
| label_27:
0x0005a9ea movs r1, 0 | r1 = 0;
0x0005a9ec mov r0, fp | r0 = fp;
0x0005a9ee add.w r7, r4, 0x500 | r7 = r4 + 0x500;
0x0005a9f2 blx 0x68e50 | memset (r0, r1, r2);
0x0005a9f6 movs r1, 1 | r1 = 1;
0x0005a9f8 mov r0, r7 | r0 = r7;
0x0005a9fa blx 0x1df44 | nptl_change_stack_perm ();
| label_16:
0x0005a9fe ldr.w r1, [r4, 0x2a8] | r1 = *((r4 + 0x2a8));
0x0005aa02 cmp r8, r1 |
| if (r8 > r1) {
0x0005aa04 bhi.w 0x5b07c | goto label_55;
| }
0x0005aa08 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0005aa0a sub.w r1, r1, r8 | r1 -= r8;
0x0005aa0e sub.w sb, r3, sb | sb = r3 - sb;
0x0005aa12 cmp r1, sb |
| if (r1 > sb) {
0x0005aa14 bhi.w 0x5b094 | goto label_56;
| }
| label_28:
0x0005aa18 mov sb, r4 | sb = r4;
0x0005aa1a str.w r8, [r4, 0x2ac] | __asm ("str.w r8, aav.0x000000ff");
| label_6:
0x0005aa1e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0005aa20 mvn r0, 0x13 | r0 = ~0x13;
0x0005aa24 ldr r7, [r5, 8] | r7 = *((r5 + 8));
0x0005aa26 add.w ip, r4, 0x230 |
0x0005aa2a ldr.w sl, [r4, 0x2a0] | sl = *((r4 + 0x2a0));
0x0005aa2e sub.w r8, r4, 0x500 | r8 = r4 - 0x500;
0x0005aa32 str.w r3, [r4, 0x228] | __asm ("str.w r3, aav.0x000000ff");
0x0005aa36 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0005aa38 bic r1, r7, 0x60 | r1 = BIT_MASK (r7, 0x60);
0x0005aa3c sub.w r8, r8, sl | r8 -= sl;
0x0005aa40 str.w r3, [r4, 0x22c] | __asm ("str.w r3, aav.0x000000ff");
0x0005aa44 ldr r3, [sp, 8] | r3 = var_8h;
0x0005aa46 sub.w r6, r3, -1 | r6 = r3 - -1;
0x0005aa4a mrc p15, 0, r3, c13, c0, 3 | __asm ("mrc p15, 0, r3, c13, c0, 3");
0x0005aa4e clz r6, r6 | r6 &= r6;
0x0005aa52 lsrs r6, r6, 5 | r6 >>= 5;
0x0005aa54 strb.w r6, [r4, 0x4bc] | *((r4 + 0x4bc)) = r6;
0x0005aa58 sub.w r6, r3, 0x500 | r6 = r3 - 0x500;
0x0005aa5c ldr.w r2, [r6, 0x84] | r2 = *((r6 + 0x84));
0x0005aa60 sub.w r3, r3, 0x2d0 | r3 -= 0x2d0;
0x0005aa64 ldrd lr, fp, [r6, 0x220] | __asm ("ldrd lr, fp, [r6, aav.0x00000220]");
0x0005aa68 and r2, r2, 0x60 | r2 &= 0x60;
0x0005aa6c orrs r2, r1 | r2 |= r1;
0x0005aa6e movs r1, 0 | r1 = 0;
0x0005aa70 str.w r2, [r4, 0x84] | __asm ("str.w r2, [r4, 0x84]");
0x0005aa74 str.w r1, [r4, 0x210] | __asm ("str.w r1, aav.0x000000ff");
0x0005aa78 str r1, [r4, 0x74] | *((r4 + 0x74)) = r1;
0x0005aa7a ldr.w r1, [r3, 0x2b4] | r1 = *((r3 + 0x2b4));
0x0005aa7e str r0, [r4, 0x70] | *((r4 + 0x70)) = r0;
0x0005aa80 add.w r0, r4, 0x6c | r0 = r4 + 0x6c;
0x0005aa84 str r0, [r4, 0x6c] | *((r4 + 0x6c)) = r0;
0x0005aa86 cmp r1, 0 |
0x0005aa88 itt ge |
| if (r1 < 0) {
0x0005aa8a orrge r2, r2, 0x80 | r2 |= 0x80;
| }
| if (r1 >= 0) {
0x0005aa8e str.w r2, [r4, 0x84] | __asm ("str.w r2, [r4, 0x84]");
| }
0x0005aa92 tst.w r7, 1 |
0x0005aa96 ite ne |
| if ((r7 & 1) == 0) {
0x0005aa98 movne r2, r4 | r2 = r4;
| }
| if ((r7 & 1) != 0) {
0x0005aa9a moveq r2, 0 | r2 = 0;
| }
0x0005aa9c str.w r2, [r4, 0x218] | __asm ("str.w r2, aav.0x000000ff");
0x0005aaa0 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x0005aaa2 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x0005aaa6 lsls r3, r7, 0x1e | r3 = r7 << 0x1e;
0x0005aaa8 strd lr, fp, [r4, 0x220] | __asm ("strd lr, fp, [r4, aav.0x00000220]");
| if (r3 < r7) {
0x0005aaac bmi.w 0x5adfc | goto label_57;
| }
| label_15:
0x0005aab0 ldr.w r7, [pc, 0x4ec] |
0x0005aab4 add r7, pc | r7 = 0xb5a58;
0x0005aab6 ldr r3, [r7] | r3 = *(0xb5a58);
0x0005aab8 cmp r3, 1 |
| if (r3 == 1) {
0x0005aaba beq.w 0x5adf4 | goto label_58;
| }
| label_14:
0x0005aabe ldr r2, [sp, 0x10] | r2 = var_10h;
0x0005aac0 adds r1, r3, 1 | r1 = r3 + 1;
0x0005aac2 str.w sb, [r2] | __asm ("str.w sb, [r2]");
0x0005aac6 ldr.w r2, [pc, 0x4dc] | r2 = *(0x0005afa4);
0x0005aaca add r2, pc | r2 += pc;
| do {
0x0005aacc ldrex r0, [r2] | __asm ("ldrex r0, [r2]");
0x0005aad0 cmp r0, r3 |
| if (r0 != r3) {
0x0005aad2 bne 0x5aae0 | goto label_59;
| }
0x0005aad4 strex r7, r1, [r2] | __asm ("strex r7, r1, [r2]");
0x0005aad8 cmp r7, 0 |
0x0005aada bne 0x5aacc |
| } while (r7 != 0);
0x0005aadc dmb ish | __asm ("dmb ish");
| if (r7 != 0) {
| label_59:
0x0005aae0 bne.w 0x5add2 | goto label_60;
| }
| label_12:
0x0005aae4 ldr.w r1, [pc, 0x4c0] |
0x0005aae8 movs r0, 0 | r0 = 0;
0x0005aaea add r7, sp, 0x38 | r7 += var_38h;
0x0005aaec movs r3, 8 | r3 = 8;
0x0005aaee mov r2, r7 | r2 = r7;
0x0005aaf0 mov.w ip, 0xaf |
0x0005aaf4 add r1, pc | r1 = 0xb5aa0;
0x0005aaf6 strb.w r0, [sp, 0x36] | var_36h = r0;
0x0005aafa strb.w r0, [sp, 0x37] | var_37h = r0;
0x0005aafe bl 0x1e530 | fcn_0001e530 ();
0x0005ab02 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x0005ab04 cmp r3, 0 |
| if (r3 == 0) {
0x0005ab06 beq.w 0x5acce | goto label_61;
| }
0x0005ab0a ldrb.w r2, [r3, 0x88] | r2 = *((r3 + 0x88));
0x0005ab0e cmp r2, 0 |
| if (r2 == 0) {
0x0005ab10 beq.w 0x5acce | goto label_61;
| }
0x0005ab14 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0005ab16 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0005ab18 str.w r2, [r4, 0x4b8] | __asm ("str.w r2, aav.0x000000ff");
| label_8:
0x0005ab1c str.w r3, [r4, 0x4b4] | __asm ("str.w r3, aav.0x000000ff");
0x0005ab20 ldrb.w r3, [r6, 0x209] | r3 = *((r6 + 0x209));
0x0005ab24 cmp r3, 0 |
| if (r3 != 0) {
0x0005ab26 bne.w 0x5ad02 | goto label_62;
| }
| label_10:
0x0005ab2a add.w r2, sp, 0x37 | r2 += var_37h;
0x0005ab2e mov r3, sl | r3 = sl;
0x0005ab30 mov r1, r5 | r1 = r5;
0x0005ab32 str r2, [sp, 4] | var_4h = r2;
0x0005ab34 mov r0, r4 | r0 = r4;
0x0005ab36 add.w r2, sp, 0x36 | r2 += var_36h;
0x0005ab3a str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0005ab3e bl 0x5a310 | fcn_0005a310 (r0, r1, r2, r3, r4, r5);
0x0005ab42 mov r1, r7 | r1 = r7;
0x0005ab44 mov r5, r0 | r5 = r0;
0x0005ab46 movs r2, 0 | r2 = 0;
0x0005ab48 movs r0, 2 | r0 = 2;
0x0005ab4a movs r3, 8 | r3 = 8;
0x0005ab4c mov.w ip, 0xaf |
0x0005ab50 bl 0x1e530 | fcn_0001e530 ();
0x0005ab54 cmp r5, 0 |
| if (r5 != 0) {
0x0005ab56 bne.w 0x5b06a | goto label_63;
| }
| label_18:
0x0005ab5a ldrb.w r3, [sp, 0x36] | r3 = var_36h;
0x0005ab5e cmp r3, 0 |
| if (r3 != 0) {
0x0005ab60 bne.w 0x5ace0 | goto label_64;
| }
| label_9:
0x0005ab64 movs r3, 1 | r3 = 1;
0x0005ab66 str r3, [r6] | *(r6) = r3;
0x0005ab68 b 0x5a82e | goto label_3;
| label_44:
0x0005ab6a ldr.w r0, [pc, 0x440] |
0x0005ab6e movs r3, 1 | r3 = 1;
0x0005ab70 add r0, pc | r0 = 0xb5b22;
| do {
0x0005ab72 ldrex r2, [r0] | __asm ("ldrex r2, [r0]");
0x0005ab76 cmp r2, 0 |
| if (r2 != 0) {
0x0005ab78 bne 0x5ab86 | goto label_65;
| }
0x0005ab7a strex r1, r3, [r0] | __asm ("strex r1, r3, [r0]");
0x0005ab7e cmp r1, 0 |
0x0005ab80 bne 0x5ab72 |
| } while (r1 != 0);
0x0005ab82 dmb ish | __asm ("dmb ish");
| if (r1 != 0) {
| label_65:
0x0005ab86 bne.w 0x5b064 | goto label_66;
| }
| label_24:
0x0005ab8a ldr.w r0, [pc, 0x424] |
0x0005ab8e movs r2, 0 | r2 = 0;
0x0005ab90 ldr.w r3, [pc, 0x420] | r3 = *(0x0005afb4);
0x0005ab94 add r0, pc | r0 = 0xb5b4a;
0x0005ab96 add r3, pc | r3 += pc;
0x0005ab98 ldr r4, [r3, 0x14] | r4 = *((r3 + 0x14));
0x0005ab9a dmb ish | __asm ("dmb ish");
| do {
0x0005ab9e ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x0005aba2 strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x0005aba6 cmp r1, 0 |
0x0005aba8 bne 0x5ab9e |
| } while (r1 != 0);
0x0005abaa cmp r3, 1 |
| if (r3 > 1) {
0x0005abac bgt.w 0x5b05e | goto label_67;
| }
| label_23:
0x0005abb0 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x0005abb2 lsls r2, r3, 0x1c | r2 = r3 << 0x1c;
| if (r2 >= r3) {
0x0005abb4 bpl.w 0x5a884 | goto label_4;
| }
0x0005abb8 ldrd sl, r3, [r5, 0x10] | __asm ("ldrd sl, r3, [r5, 0x10]");
0x0005abbc cmp r3, 0 |
| if (r3 != 0) {
0x0005abbe bne.w 0x5a81e | goto label_5;
| }
| label_42:
0x0005abc2 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0005abc4 subs r7, 1 | r7--;
0x0005abc6 sub.w sb, sl, r3 | sb = sl - r3;
0x0005abca and.w r7, r7, sb | r7 &= sb;
0x0005abce cmp r7, r4 |
| if (r7 >= r4) {
0x0005abd0 bhs.w 0x5b210 | goto label_68;
| }
0x0005abd4 sub.w sb, sb, 0x500 | sb -= 0x500;
0x0005abd8 mov.w r2, 0x500 | r2 = 0x500;
0x0005abdc sub.w sb, sb, r7 | sb -= r7;
0x0005abe0 movs r1, 0 | r1 = 0;
0x0005abe2 mov r0, sb | r0 = sb;
0x0005abe4 movs r7, 1 | r7 = 1;
0x0005abe6 blx 0x68e50 | memset (r0, r1, r2);
0x0005abea sub.w r3, sl, r4 | r3 = sl - r4;
0x0005abee add.w r0, sb, 0x500 | r0 = sb + 0x500;
0x0005abf2 strd r3, r4, [sb, 0x2a0] | __asm ("strd r3, r4, aav.0x000000ff");
0x0005abf6 add.w r3, sb, 0x88 | r3 = sb + 0x88;
0x0005abfa str.w r3, [sb, 0x188] | __asm ("str.w r3, aav.0x000000ff");
0x0005abfe mov.w r3, -1 | r3 = -1;
0x0005ac02 strb.w r7, [sb, 0x20a] | *((sb + 0x20a)) = r7;
0x0005ac06 mov r4, sb | r4 = sb;
0x0005ac08 str.w r7, [sb] | __asm ("str.w r7, [sb]");
0x0005ac0c str.w r3, [sb, 0x214] | __asm ("str.w r3, aav.0x000000ff");
0x0005ac10 blx 0x1df20 | r0 = tunable_get_val ();
0x0005ac14 cmp r0, 0 |
| if (r0 == 0) {
0x0005ac16 beq.w 0x5b126 | goto label_69;
| }
0x0005ac18 strh r6, [r0, 0x14] | *((r0 + 0x14)) = r6;
0x0005ac1a ldr r3, [pc, 0x380] | r3 = *(0x5af9e);
0x0005ac1c ldr.w sl, [r8, r3] | sl = *((r8 + r3));
0x0005ac20 addw r0, sl, 0x928 | __asm ("addw r0, sl, aav.0x000000ff");
| do {
0x0005ac24 ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x0005ac28 cmp r3, 0 |
| if (r3 != 0) {
0x0005ac2a bne 0x5ac38 | goto label_70;
| }
0x0005ac2c strex r2, r7, [r0] | __asm ("strex r2, r7, [r0]");
0x0005ac30 cmp r2, 0 |
0x0005ac32 bne 0x5ac24 |
| } while (r2 != 0);
0x0005ac34 dmb ish | __asm ("dmb ish");
| if (r2 != 0) {
| label_70:
0x0005ac38 bne.w 0x5b162 | goto label_71;
| }
| label_33:
0x0005ac3c ldr.w r2, [sl, 0x910] | r2 = *((sl + 0x910));
0x0005ac40 add.w r3, sb, 0x60 | r3 = sb + 0x60;
0x0005ac44 add.w r1, sl, 0x910 | r1 = sl + 0x910;
0x0005ac48 addw r0, sl, 0x928 | __asm ("addw r0, sl, aav.0x000000ff");
0x0005ac4c str.w r1, [sb, 0x64] | __asm ("str.w r1, [sb, 0x64]");
0x0005ac50 str.w r2, [sb, 0x60] | __asm ("str.w r2, [sb, 0x60]");
0x0005ac54 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x0005ac56 movs r2, 0 | r2 = 0;
0x0005ac58 dmb ish | __asm ("dmb ish");
0x0005ac5c str.w r3, [sl, 0x910] | __asm ("str.w r3, aav.0x000000ff");
0x0005ac60 dmb ish | __asm ("dmb ish");
| do {
0x0005ac64 ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x0005ac68 strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x0005ac6c cmp r1, 0 |
0x0005ac6e bne 0x5ac64 |
| } while (r1 != 0);
0x0005ac70 cmp r3, 1 |
| if (r3 <= 1) {
0x0005ac72 ble.w 0x5aa1e | goto label_6;
| }
0x0005ac76 bl 0x57f44 | lll_lock_wake_private ();
0x0005ac7a b 0x5aa1e | goto label_6;
| label_39:
0x0005ac7c ldr r3, [pc, 0x338] |
0x0005ac7e add r5, sp, 0x44 | r5 += var_44h;
0x0005ac80 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0005ac84 add r1, sp, 0x40 | r1 += var_40h;
0x0005ac86 movs r2, 0 | r2 = 0;
0x0005ac88 movs r0, 0x21 | r0 = 0x21;
0x0005ac8a add r3, pc |
0x0005ac8c str r3, [sp, 0x40] | var_40h = r3;
0x0005ac8e movs r3, 4 | r3 = 4;
0x0005ac90 vst1.32 {d16}, [r5] | __asm ("vst1.32 {d16}, [r5]");
0x0005ac94 movt r3, 0x1800 | r3 = 0x180b5c46;
0x0005ac98 str r3, [sp, 0xc4] | var_c4h = r3;
0x0005ac9a bl 0x2c938 | libc_sigaction ();
0x0005ac9e vld1.32 {d16}, [r5] | __asm ("vld1.32 {d16}, [r5]");
0x0005aca2 mov r1, r5 | r1 = r5;
0x0005aca4 movs r0, 1 | r0 = 1;
0x0005aca6 movs r2, 0 | r2 = 0;
0x0005aca8 vldr d17, [pc, 0x2dc] | __asm ("vldr d17, aav.0x000000ff");
0x0005acac movs r3, 8 | r3 = 8;
0x0005acae vorr d16, d16, d17 | __asm ("vorr d16, d16, d17");
0x0005acb2 mov.w ip, 0xaf |
0x0005acb6 vst1.32 {d16}, [r5] | __asm ("vst1.32 {d16}, [r5]");
0x0005acba bl 0x1e530 | fcn_0001e530 ();
0x0005acbe ldr r3, [pc, 0x2fc] | r3 = *(0x5afbe);
0x0005acc0 strb r2, [r4] | *(r4) = r2;
0x0005acc2 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x0005acc6 strb r2, [r3] | *(r3) = r2;
0x0005acc8 b 0x5a7fe | goto label_7;
| label_52:
0x0005acca mov r4, lr | r4 = lr;
0x0005accc b 0x5a908 | goto label_1;
| label_61:
0x0005acce ldm.w r7, {r0, r1} | r0 = *(r7);
| r1 = *((r7 + 4));
0x0005acd2 addw r3, r4, 0x4b4 | __asm ("addw r3, r4, aav.0x000000ff");
0x0005acd6 stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x0005acda bic r3, r0, 0x80000000 | r3 = BIT_MASK (r0, 0x80000000);
0x0005acde b 0x5ab1c | goto label_8;
| label_64:
0x0005ace0 add.w r0, r4, 0x210 | r0 = r4 + 0x210;
0x0005ace4 movs r2, 0 | r2 = 0;
0x0005ace6 dmb ish | __asm ("dmb ish");
| do {
0x0005acea ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x0005acee strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x0005acf2 cmp r1, 0 |
0x0005acf4 bne 0x5acea |
| } while (r1 != 0);
0x0005acf6 cmp r3, 1 |
| if (r3 <= 1) {
0x0005acf8 ble.w 0x5ab64 | goto label_9;
| }
0x0005acfc bl 0x57f44 | lll_lock_wake_private ();
0x0005ad00 b 0x5ab64 | goto label_9;
| label_62:
0x0005ad02 ldr.w fp, [pc, 0x2bc] | fp = *(0x0005afc0);
0x0005ad06 ldr.w r2, [r4, 0x230] | r2 = *((r4 + 0x230));
0x0005ad0a add fp, pc |
0x0005ad0c ldr.w r3, [fp] | r3 = *(fp);
0x0005ad10 orrs r3, r2 | r3 |= r2;
0x0005ad12 lsls r2, r3, 0x18 | r2 = r3 << 0x18;
| if (r2 >= r3) {
0x0005ad14 bpl.w 0x5ab2a | goto label_10;
| }
0x0005ad18 add.w r2, sp, 0x37 | r2 += var_37h;
0x0005ad1c mov r1, r5 | r1 = r5;
0x0005ad1e str r2, [sp, 4] | var_4h = r2;
0x0005ad20 movs r2, 1 | r2 = 1;
0x0005ad22 strb.w r2, [sp, 0x36] | var_36h = r2;
0x0005ad26 mov r3, sl | r3 = sl;
0x0005ad28 add.w r2, sp, 0x36 | r2 += var_36h;
0x0005ad2c mov r0, r4 | r0 = r4;
0x0005ad2e str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0005ad32 bl 0x5a310 | r0 = fcn_0005a310 (r0, r1, r2, r3, r4, r5);
0x0005ad36 mov r5, r0 | r5 = r0;
0x0005ad38 cmp r0, 0 |
| if (r0 == 0) {
0x0005ad3a beq.w 0x5afc8 | goto label_72;
| }
0x0005ad3e movs r0, 2 | r0 = 2;
0x0005ad40 mov r1, r7 | r1 = r7;
0x0005ad42 movs r2, 0 | r2 = 0;
0x0005ad44 movs r3, 8 | r3 = 8;
0x0005ad46 mov.w ip, 0xaf |
0x0005ad4a bl 0x1e530 | fcn_0001e530 ();
0x0005ad4e str r5, [sp, 0xc] | var_ch = r5;
| label_25:
0x0005ad50 ldrb.w r3, [sp, 0x37] | r3 = var_37h;
| if (r3 == 0) {
0x0005ad54 cbz r3, 0x5ada0 | goto label_73;
| }
0x0005ad56 ldrb.w r3, [sp, 0x36] | r3 = var_36h;
0x0005ad5a cmp r3, 0 |
| if (r3 == 0) {
0x0005ad5c beq.w 0x5b1c0 | goto label_74;
| }
0x0005ad60 add.w r0, r4, 0x210 | r0 = r4 + 0x210;
0x0005ad64 movs r2, 0 | r2 = 0;
0x0005ad66 movs r3, 1 | r3 = 1;
0x0005ad68 str.w r3, [r4, 0x20c] | __asm ("str.w r3, aav.0x000000ff");
0x0005ad6c dmb ish | __asm ("dmb ish");
| do {
0x0005ad70 ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x0005ad74 strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x0005ad78 cmp r1, 0 |
0x0005ad7a bne 0x5ad70 |
| } while (r1 != 0);
0x0005ad7c cmp r3, 1 |
| if (r3 > 1) {
0x0005ad7e bgt.w 0x5b16e | goto label_75;
| }
| label_35:
0x0005ad82 add.w r6, r4, 0x68 | r6 = r4 + 0x68;
0x0005ad86 movs r5, 0x80 | r5 = 0x80;
0x0005ad88 b 0x5ad96 |
| while (r1 != 0) {
0x0005ad8a movs r3, 0 | r3 = 0;
0x0005ad8c mov r0, r6 | r0 = r6;
0x0005ad8e mov r2, r3 | r2 = r3;
0x0005ad90 str r5, [sp] | *(sp) = r5;
0x0005ad92 bl 0x57d24 | fcn_00057d24 (r0, r1, r2, r3, r4);
0x0005ad96 ldr r1, [r4, 0x68] | r1 = *((r4 + 0x68));
0x0005ad98 dmb ish | __asm ("dmb ish");
0x0005ad9c cmp r1, 0 |
0x0005ad9e bne 0x5ad8a |
| }
| label_73:
0x0005ada0 ldr r3, [pc, 0x220] |
0x0005ada2 add r3, pc | r3 = 0xb5d6a;
| label_11:
0x0005ada4 ldr r2, [r3] | r2 = *(r3);
0x0005ada6 subs r1, r2, 1 | r1 = r2 - 1;
| do {
0x0005ada8 ldrex r0, [r3] | __asm ("ldrex r0, [r3]");
0x0005adac cmp r0, r2 |
| if (r0 != r2) {
0x0005adae bne 0x5adbc | goto label_76;
| }
0x0005adb0 strex r5, r1, [r3] | __asm ("strex r5, r1, [r3]");
0x0005adb4 cmp r5, 0 |
0x0005adb6 bne 0x5ada8 |
| } while (r5 != 0);
0x0005adb8 dmb ish | __asm ("dmb ish");
| if (r5 != 0) {
| label_76:
0x0005adbc bne 0x5ada4 | goto label_11;
| }
0x0005adbe mov r0, r4 | r0 = r4;
0x0005adc0 bl 0x58064 | fcn_00058064 (r0);
| label_20:
0x0005adc4 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0005adc6 cmp r3, 0xc |
| if (r3 != 0xc) {
0x0005adc8 bne.w 0x5a82e | goto label_3;
| }
| label_31:
0x0005adcc movs r3, 0xb | r3 = 0xb;
0x0005adce str r3, [sp, 0xc] | var_ch = r3;
0x0005add0 b 0x5a82e | goto label_3;
| label_60:
0x0005add2 mov r1, r2 | r1 = r2;
| label_13:
0x0005add4 ldr r3, [r2] | r3 = *(r2);
0x0005add6 adds r0, r3, 1 | r0 = r3 + 1;
| do {
0x0005add8 ldrex r7, [r1] | __asm ("ldrex r7, [r1]");
0x0005addc cmp r7, r3 |
| if (r7 != r3) {
0x0005adde bne 0x5adee | goto label_77;
| }
0x0005ade0 strex ip, r0, [r1] | __asm ("strex ip, r0, [r1]");
0x0005ade4 cmp.w ip, 0 |
0x0005ade8 bne 0x5add8 |
| } while (ip != 0);
0x0005adea dmb ish | __asm ("dmb ish");
| if (ip == 0) {
| label_77:
0x0005adee beq.w 0x5aae4 | goto label_12;
| }
0x0005adf2 b 0x5add4 | goto label_13;
| label_58:
0x0005adf4 bl 0x5626c | IO_enable_locks ();
0x0005adf8 ldr r3, [r7] | r3 = *(r7);
0x0005adfa b 0x5aabe | goto label_14;
| label_57:
0x0005adfc tst.w r7, 0x60 |
| if ((r7 & 0x60) == 0) {
0x0005ae00 beq.w 0x5aab0 | goto label_15;
| }
0x0005ae04 ldr.w r3, [r4, 0x84] | r3 = *((r4 + 0x84));
0x0005ae08 lsls r0, r7, 0x19 | r0 = r7 << 0x19;
0x0005ae0a itttt mi |
| if (r0 >= r7) {
0x0005ae0c ldrmi r2, [r5, 4] | r2 = *((r5 + 4));
| }
| if (r0 >= r7) {
0x0005ae0e orrmi r3, r3, 0x40 | r3 |= 0x40;
| }
| if (r0 >= r7) {
0x0005ae12 strmi r2, [r4, 0x224] | *((r4 + 0x224)) = r2;
| }
| if (r0 < r7) {
0x0005ae16 str.w r3, [r4, 0x84] | __asm ("str.w r3, [r4, 0x84]");
| }
0x0005ae1a lsls r1, r7, 0x1a | r1 = r7 << 0x1a;
0x0005ae1c itttt mi |
| if (r1 >= r7) {
0x0005ae1e ldrmi r2, [r5] | r2 = *(r5);
| }
| if (r1 >= r7) {
0x0005ae20 orrmi r3, r3, 0x20 | r3 |= 0x20;
| }
| if (r1 >= r7) {
0x0005ae24 strmi r3, [r4, 0x84] | *((r4 + 0x84)) = r3;
| }
| if (r1 < r7) {
0x0005ae28 str.w r2, [r4, 0x220] | __asm ("str.w r2, aav.0x000000ff");
| }
0x0005ae2c and r2, r3, 0x60 | r2 = r3 & 0x60;
0x0005ae30 cmp r2, 0x60 |
| if (r2 == 0x60) {
0x0005ae32 beq.w 0x5aab0 | goto label_15;
| }
0x0005ae36 ands r0, r3, 0x40 | r0 = r3 & 0x40;
| if (r0 == r3) {
0x0005ae3a bne 0x5ae54 |
0x0005ae3c mov.w ip, 0x9d |
0x0005ae40 bl 0x1e530 | fcn_0001e530 ();
0x0005ae44 ldr.w r3, [r4, 0x84] | r3 = *((r4 + 0x84));
0x0005ae48 str.w r0, [r4, 0x224] | __asm ("str.w r0, aav.0x000000ff");
0x0005ae4c orr r3, r3, 0x40 | r3 |= 0x40;
0x0005ae50 str.w r3, [r4, 0x84] | __asm ("str.w r3, [r4, 0x84]");
| }
0x0005ae54 ands r0, r3, 0x20 | r0 = r3 & 0x20;
| if (r0 != r3) {
0x0005ae58 bne.w 0x5aab0 | goto label_15;
| }
0x0005ae5c add.w r1, r4, 0x220 | r1 = r4 + 0x220;
0x0005ae60 mov.w ip, 0x9b |
0x0005ae64 bl 0x1e530 | fcn_0001e530 ();
0x0005ae68 ldr.w r3, [r4, 0x84] | r3 = *((r4 + 0x84));
0x0005ae6c orr r3, r3, 0x20 | r3 |= 0x20;
0x0005ae70 str.w r3, [r4, 0x84] | __asm ("str.w r3, [r4, 0x84]");
0x0005ae74 b 0x5aab0 | goto label_15;
| label_49:
0x0005ae76 addw r0, sl, 0x928 | __asm ("addw r0, sl, aav.0x000000ff");
0x0005ae7a movs r2, 0 | r2 = 0;
0x0005ae7c dmb ish | __asm ("dmb ish");
| do {
0x0005ae80 ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x0005ae84 strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x0005ae88 cmp r1, 0 |
0x0005ae8a bne 0x5ae80 |
| } while (r1 != 0);
0x0005ae8c cmp r3, 1 |
| if (r3 > 1) {
0x0005ae8e bgt.w 0x5b15c | goto label_78;
| }
| label_32:
0x0005ae92 movs r0, 0 | r0 = 0;
0x0005ae94 mov.w r3, -1 | r3 = -1;
0x0005ae98 cmp.w r8, 0 |
0x0005ae9c strd r3, r0, [sp] | __asm ("strd r3, r0, [sp]");
0x0005aea0 mov.w r3, 0x22 | r3 = 0x22;
0x0005aea4 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0005aea6 movt r3, 2 | r3 = (r3 & 0xFFFF) | 0x20000;
0x0005aea8 lsls r2, r0, 0xc | r2 = r0 << 0xc;
0x0005aeaa it ne |
| if (r2 == r0) {
0x0005aeac movne r2, r0 | r2 = r0;
| }
0x0005aeae mov r1, sb | r1 = sb;
0x0005aeb0 bl 0xa9000 | r0 = mmap ()
0x0005aeb4 mov r3, r0 | r3 = r0;
0x0005aeb6 str r0, [sp, 0x28] | var_28h = r0;
0x0005aeb8 adds r3, 1 | r3++;
| if (r3 == 1) {
0x0005aeba beq.w 0x5b14c | goto label_79;
| }
0x0005aebe ldr r3, [sp, 0x28] | r3 = var_28h;
0x0005aec0 cmp r3, 0 |
| if (r3 == 0) {
0x0005aec2 beq.w 0x5b1d4 | goto label_80;
| }
0x0005aec6 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0005aec8 sub.w r4, sb, r3 | r4 = sb - r3;
0x0005aecc ldr r3, [sp, 0x28] | r3 = var_28h;
0x0005aece add r4, r3 | r4 += r3;
0x0005aed0 ands r4, r7 | r4 &= r7;
0x0005aed2 sub.w r4, r4, 0x500 | r4 -= 0x500;
0x0005aed6 cmp.w r8, 0 |
| if (r8 != 0) {
0x0005aeda beq 0x5aeee |
0x0005aedc ldr r1, [sp, 0x24] | r1 = var_24h;
0x0005aede add.w r0, r3, r8 | r0 = r3 + r8;
0x0005aee2 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0005aee4 bl 0xa90e0 | r0 = mprotect ();
0x0005aee8 cmp r0, 0 |
| if (r0 != 0) {
0x0005aeea bne.w 0x5b01e | goto label_81;
| }
| }
| label_19:
0x0005aeee ldr r3, [sp, 0x28] | r3 = var_28h;
0x0005aef0 mov.w r2, -1 | r2 = -1;
0x0005aef4 add.w r7, r4, 0x500 | r7 = r4 + 0x500;
0x0005aef8 str.w r8, [r4, 0x2a8] | __asm ("str.w r8, aav.0x000000ff");
0x0005aefc mov r0, r7 | r0 = r7;
0x0005aefe str.w r2, [r4, 0x214] | __asm ("str.w r2, aav.0x000000ff");
0x0005af02 strd r3, sb, [r4, 0x2a0] | __asm ("strd r3, sb, aav.0x000000ff");
0x0005af06 add.w r3, r4, 0x88 | r3 = r4 + 0x88;
0x0005af0a str.w r3, [r4, 0x188] | __asm ("str.w r3, aav.0x000000ff");
0x0005af0e movs r3, 1 | r3 = 1;
0x0005af10 str r3, [r4] | *(r4) = r3;
0x0005af12 blx 0x1df20 | tunable_get_val ();
0x0005af16 movs r3, 1 | r3 = 1;
0x0005af18 cmp r0, 0 |
| if (r0 == 0) {
0x0005af1a beq.w 0x5b100 | goto label_82;
| }
0x0005af1e addw r0, sl, 0x928 | __asm ("addw r0, sl, aav.0x000000ff");
| do {
0x0005af22 ldrex r2, [r0] | __asm ("ldrex r2, [r0]");
0x0005af26 cmp r2, 0 |
| if (r2 != 0) {
0x0005af28 bne 0x5af36 | goto label_83;
| }
0x0005af2a strex r1, r3, [r0] | __asm ("strex r1, r3, [r0]");
0x0005af2e cmp r1, 0 |
0x0005af30 bne 0x5af22 |
| } while (r1 != 0);
0x0005af32 dmb ish | __asm ("dmb ish");
| if (r1 != 0) {
| label_83:
0x0005af36 bne.w 0x5b054 | goto label_84;
| }
| label_21:
0x0005af3a add.w r3, r4, 0x60 | r3 = r4 + 0x60;
0x0005af3e addw r1, sl, 0x908 | __asm ("addw r1, sl, aav.0x000000ff");
0x0005af42 mov r0, r3 | r0 = r3;
0x0005af44 str r3, [sp, 0x24] | var_24h = r3;
0x0005af46 bl 0x57fa4 | fcn_00057fa4 (r0, r1);
0x0005af4a dmb ish | __asm ("dmb ish");
0x0005af4e addw r0, sl, 0x928 | __asm ("addw r0, sl, aav.0x000000ff");
0x0005af52 movs r2, 0 | r2 = 0;
| do {
0x0005af54 ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x0005af58 strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x0005af5c cmp r1, 0 |
0x0005af5e bne 0x5af54 |
| } while (r1 != 0);
0x0005af60 cmp r3, 1 |
| if (r3 > 1) {
0x0005af62 bgt.w 0x5b168 | goto label_85;
| }
| label_34:
0x0005af66 ldr.w r3, [sl, 0x8e0] | r3 = *((sl + 0x8e0));
0x0005af6a cmp.w fp, 0 |
0x0005af6e ite ne |
| if (fp == 0) {
0x0005af70 movne r3, 0 | r3 = 0;
| }
| if (fp != 0) {
0x0005af72 andeq r3, r3, 1 | r3 &= 1;
| }
0x0005af76 cmp r3, 0 |
| if (r3 != 0) {
0x0005af78 bne.w 0x5b180 | goto label_86;
| }
| label_38:
0x0005af7c str.w sb, [sp, 0x20] | __asm ("str.w sb, [var_20h]");
0x0005af80 b 0x5a9fe | goto label_16;
| label_72:
0x0005afc8 ldrb.w r3, [sp, 0x36] | r3 = var_36h;
0x0005afcc cmp r3, 0 |
| if (r3 == 0) {
0x0005afce beq.w 0x5b1fc | goto label_87;
| }
0x0005afd2 ldrb.w r3, [r4, 0x20b] | r3 = *((r4 + 0x20b));
0x0005afd6 cmp r3, 0 |
| if (r3 == 0) {
0x0005afd8 beq.w 0x5b1e8 | goto label_88;
| }
0x0005afdc add.w r3, fp, 8 | r3 += arg_8h;
0x0005afe0 movs r2, 8 | r2 = 8;
0x0005afe2 str.w r4, [r4, 0x23c] | __asm ("str.w r4, aav.0x000000ff");
0x0005afe6 str.w r2, [r4, 0x238] | __asm ("str.w r2, aav.0x000000ff");
| label_17:
0x0005afea ldr.w r2, [fp, 8] | r2 = *(arg_8h);
0x0005afee str.w r2, [r4, 0x240] | __asm ("str.w r2, aav.0x000000ff");
| do {
0x0005aff2 ldrex r1, [r3] | __asm ("ldrex r1, [r3]");
0x0005aff6 cmp r1, r2 |
| if (r1 != r2) {
0x0005aff8 bne 0x5b006 | goto label_89;
| }
0x0005affa strex r0, sb, [r3] | __asm ("strex r0, sb, [r3]");
0x0005affe cmp r0, 0 |
0x0005b000 bne 0x5aff2 |
| } while (r0 != 0);
0x0005b002 dmb ish | __asm ("dmb ish");
| if (r0 != 0) {
| label_89:
0x0005b006 bne 0x5afea | goto label_17;
| }
0x0005b008 bl 0x57ba4 | nptl_create_event ();
0x0005b00c mov r1, r7 | r1 = r7;
0x0005b00e movs r0, 2 | r0 = 2;
0x0005b010 movs r2, 0 | r2 = 0;
0x0005b012 movs r3, 8 | r3 = 8;
0x0005b014 mov.w ip, 0xaf |
0x0005b018 bl 0x1e530 | fcn_0001e530 ();
0x0005b01c b 0x5ab5a | goto label_18;
| label_81:
0x0005b01e ldr r3, [pc, 0x218] |
0x0005b020 mrc p15, 0, r7, c13, c0, 3 | __asm ("mrc p15, 0, r7, c13, c0, 3");
0x0005b024 add r3, pc |
0x0005b026 ldr r3, [r3] | r3 = *(0xb6262);
0x0005b028 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x0005b02a cmp r3, 0 |
| if (r3 == 0) {
0x0005b02c beq.w 0x5aeee | goto label_19;
| }
0x0005b030 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0005b032 mov r1, sb | r1 = sb;
0x0005b034 bl 0xa90c0 | munmap ();
0x0005b038 ldr r3, [pc, 0x200] |
0x0005b03a add r3, pc |
0x0005b03c ldr r3, [r3] | r3 = *(0xb627a);
0x0005b03e ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x0005b040 str r3, [sp, 0xc] | var_ch = r3;
| label_30:
0x0005b042 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0005b044 cmp r3, 0 |
| if (r3 != 0) {
0x0005b046 bne.w 0x5adc4 | goto label_20;
| }
0x0005b04a ldr r3, [sp, 0xc] | r3 = var_ch;
0x0005b04c ldr r2, [sp, 0x14] | r2 = var_14h;
0x0005b04e str.w r2, [r3, 0x228] | __asm ("str.w r2, aav.0x000000ff");
0x0005b052 udf 0xff | __asm ("udf 0xff");
| label_84:
0x0005b054 bl 0x57ea8 | lll_lock_wait_private ();
0x0005b058 b 0x5af3a | goto label_21;
| label_51:
0x0005b05a mov r4, lr | r4 = lr;
0x0005b05c b 0x5a940 | goto label_22;
| label_67:
0x0005b05e bl 0x57f44 | lll_lock_wake_private ();
0x0005b062 b 0x5abb0 | goto label_23;
| label_66:
0x0005b064 bl 0x57ea8 | lll_lock_wait_private ();
0x0005b068 b 0x5ab8a | goto label_24;
| label_63:
0x0005b06a str r5, [sp, 0xc] | var_ch = r5;
0x0005b06c b 0x5ad50 | goto label_25;
| label_48:
0x0005b06e str r2, [sp, 0x28] | var_28h = r2;
0x0005b070 bl 0x57ea8 | lll_lock_wait_private ();
0x0005b074 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0005b076 b 0x5a8ea | goto label_26;
| label_54:
0x0005b078 movs r2, 8 | r2 = 8;
0x0005b07a b 0x5a9ea | goto label_27;
| label_55:
0x0005b07c ldr r0, [sp, 0x28] | r0 = var_28h;
0x0005b07e movs r2, 0 | r2 = 0;
0x0005b080 mov r1, r8 | r1 = r8;
0x0005b082 bl 0xa90e0 | mprotect ();
0x0005b084 strh fp, [sp], -0x68 | *(sp) = fp;
| sp += -0x68;
| do {
0x0005b088 str.w r8, [r4, 0x2a8] | __asm ("str.w r8, aav.0x000000ff");
0x0005b08c b 0x5aa18 | goto label_28;
| label_53:
0x0005b08e bl 0x57f44 | lll_lock_wake_private ();
0x0005b092 b 0x5a996 | goto label_29;
| label_56:
0x0005b094 ldrd r3, r2, [sp, 0x28] | __asm ("ldrd r3, r2, [var_28h]");
0x0005b098 add.w r0, r3, r8 | r0 = r3 + r8;
0x0005b09c bl 0xa90e0 | r0 = mprotect ();
0x0005b0a0 cmp r0, 0 |
0x0005b0a2 beq 0x5b088 |
| } while (r0 == 0);
0x0005b0a4 addw r0, sl, 0x928 | __asm ("addw r0, sl, aav.0x000000ff");
0x0005b0a8 movs r3, 1 | r3 = 1;
| do {
0x0005b0aa ldrex r2, [r0] | __asm ("ldrex r2, [r0]");
0x0005b0ae cmp r2, 0 |
| if (r2 != 0) {
0x0005b0b0 bne 0x5b0be | goto label_90;
| }
0x0005b0b2 strex r1, r3, [r0] | __asm ("strex r1, r3, [r0]");
0x0005b0b6 cmp r1, 0 |
0x0005b0b8 bne 0x5b0aa |
| } while (r1 != 0);
0x0005b0ba dmb ish | __asm ("dmb ish");
| if (r1 != 0) {
| label_90:
0x0005b0be bne 0x5b17a | goto label_91;
| }
| label_37:
0x0005b0c0 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0005b0c2 bl 0x57f70 | fcn_00057f70 (r0);
0x0005b0c6 dmb ish | __asm ("dmb ish");
0x0005b0ca addw r0, sl, 0x928 | __asm ("addw r0, sl, aav.0x000000ff");
0x0005b0ce movs r2, 0 | r2 = 0;
| do {
0x0005b0d0 ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x0005b0d4 strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x0005b0d8 cmp r1, 0 |
0x0005b0da bne 0x5b0d0 |
| } while (r1 != 0);
0x0005b0dc cmp r3, 1 |
| if (r3 > 1) {
0x0005b0de bgt 0x5b174 | goto label_92;
| }
| label_36:
0x0005b0e0 mov r0, r7 | r0 = r7;
0x0005b0e2 movs r1, 0 | r1 = 0;
0x0005b0e4 blx 0x1deec | fcn_0001deec ();
0x0005b0e8 ldr r1, [sp, 0x20] | r1 = var_20h;
0x0005b0ea ldr r0, [sp, 0x28] | r0 = var_28h;
0x0005b0ec bl 0xa90c0 | munmap ();
0x0005b0f0 ldr r3, [pc, 0x14c] |
0x0005b0f2 mrc p15, 0, r2, c13, c0, 3 | __asm ("mrc p15, 0, r2, c13, c0, 3");
0x0005b0f6 add r3, pc |
0x0005b0f8 ldr r3, [r3] | r3 = *(0xb633a);
0x0005b0fa ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0005b0fc str r3, [sp, 0xc] | var_ch = r3;
0x0005b0fe b 0x5b042 | goto label_30;
| label_82:
0x0005b100 ldr r3, [pc, 0x140] |
0x0005b102 mrc p15, 0, r4, c13, c0, 3 | __asm ("mrc p15, 0, r4, c13, c0, 3");
0x0005b106 add r3, pc |
0x0005b108 ldr r3, [r3] | r3 = *(0xb634e);
0x0005b10a ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0005b10c cmp r3, 0xc |
| if (r3 != 0xc) {
0x0005b10e bne.w 0x5b224 | goto label_93;
| }
0x0005b112 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0005b114 mov r1, sb | r1 = sb;
0x0005b116 bl 0xa90c0 | munmap ();
0x0005b11a ldr r3, [pc, 0x12c] |
0x0005b11c add r3, pc |
0x0005b11e ldr r3, [r3] | r3 = *(0xb636a);
0x0005b120 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0005b122 str r3, [sp, 0xc] | var_ch = r3;
0x0005b124 b 0x5b042 | goto label_30;
| label_69:
0x0005b126 ldr r3, [pc, 0x124] |
0x0005b128 mrc p15, 0, r2, c13, c0, 3 | __asm ("mrc p15, 0, r2, c13, c0, 3");
0x0005b12c add r3, pc |
0x0005b12e ldr r3, [r3] | r3 = *(0xb637e);
0x0005b130 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0005b132 cmp r3, 0xc |
| if (r3 == 0xc) {
0x0005b134 beq.w 0x5adcc | goto label_31;
| }
0x0005b138 ldr r3, [pc, 0x118] |
0x0005b13a mov.w r2, 0x134 | r2 = 0x134;
0x0005b13e ldr r1, [pc, 0x118] |
0x0005b140 ldr r0, [pc, 0x118] |
0x0005b142 add r3, pc | r3 = 0xb639a;
0x0005b144 add r1, pc | r1 = 0xb63a2;
0x0005b146 add r0, pc | r0 = 0xb63a6;
0x0005b148 bl 0x27fbc | assert_fail ();
| label_79:
0x0005b14c ldr r3, [pc, 0x100] |
0x0005b14e mrc p15, 0, r2, c13, c0, 3 | __asm ("mrc p15, 0, r2, c13, c0, 3");
0x0005b152 add r3, pc |
0x0005b154 ldr r3, [r3] | r3 = *(0xb63a6);
0x0005b156 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0005b158 str r3, [sp, 0xc] | var_ch = r3;
0x0005b15a b 0x5b042 | goto label_30;
| label_78:
0x0005b15c bl 0x57f44 | lll_lock_wake_private ();
0x0005b160 b 0x5ae92 | goto label_32;
| label_71:
0x0005b162 bl 0x57ea8 | lll_lock_wait_private ();
0x0005b166 b 0x5ac3c | goto label_33;
| label_85:
0x0005b168 bl 0x57f44 | lll_lock_wake_private ();
0x0005b16c b 0x5af66 | goto label_34;
| label_75:
0x0005b16e bl 0x57f44 | lll_lock_wake_private ();
0x0005b172 b 0x5ad82 | goto label_35;
| label_92:
0x0005b174 bl 0x57f44 | lll_lock_wake_private ();
0x0005b178 b 0x5b0e0 | goto label_36;
| label_91:
0x0005b17a bl 0x57ea8 | lll_lock_wait_private ();
0x0005b17e b 0x5b0c0 | goto label_37;
| label_86:
0x0005b180 mov r0, r4 | r0 = r4;
0x0005b182 blx 0x1df50 | r0 = fcn_0001df50 ();
0x0005b186 mov r3, r0 | r3 = r0;
0x0005b188 cmp r0, 0 |
| if (r0 == 0) {
0x0005b18a beq.w 0x5af7c | goto label_38;
| }
0x0005b18c add r6, sp, 0x3dc | r6 = sp + 0x3dc;
0x0005b18e ldr r0, [sp, 0x28] | r0 = var_28h;
0x0005b190 mov r1, sb | r1 = sb;
0x0005b192 str r3, [sp, 0xc] | var_ch = r3;
0x0005b194 bl 0xa90c0 | munmap ();
0x0005b198 b 0x5adc4 | goto label_20;
| label_43:
0x0005b19a ldr r3, [pc, 0xc4] |
0x0005b19c movs r2, 0xdf | r2 = 0xdf;
0x0005b19e ldr r1, [pc, 0xc4] |
0x0005b1a0 ldr r0, [pc, 0xc4] |
0x0005b1a2 add r3, pc | r3 = 0xb6408;
0x0005b1a4 add r1, pc | r1 = 0xb640e;
0x0005b1a6 add r0, pc | r0 = 0xb6412;
0x0005b1a8 bl 0x27fbc | assert_fail ();
| label_45:
0x0005b1ac ldr r3, [pc, 0xbc] |
0x0005b1ae movw r2, 0x14d | r2 = 0x14d;
0x0005b1b2 ldr r1, [pc, 0xbc] |
0x0005b1b4 ldr r0, [pc, 0xbc] |
0x0005b1b6 add r3, pc | r3 = 0xb6426;
0x0005b1b8 add r1, pc | r1 = 0xb642e;
0x0005b1ba add r0, pc | r0 = 0xb6432;
0x0005b1bc bl 0x27fbc | assert_fail ();
| label_74:
0x0005b1c0 ldr r3, [pc, 0xb4] | r3 = *(0x5b278);
0x0005b1c2 movw r2, 0x34e | r2 = 0x34e;
0x0005b1c6 ldr r1, [pc, 0xb4] |
0x0005b1c8 ldr r0, [pc, 0xb4] |
0x0005b1ca add r3, pc | r3 += pc;
0x0005b1cc add r1, pc | r1 = 0xb644e;
0x0005b1ce add r0, pc | r0 = 0xb6452;
0x0005b1d0 bl 0x27fbc | assert_fail ();
| label_80:
0x0005b1d4 ldr r3, [pc, 0xac] |
0x0005b1d6 mov.w r2, 0x176 | r2 = 0x176;
0x0005b1da ldr r1, [pc, 0xac] |
0x0005b1dc ldr r0, [pc, 0xac] |
0x0005b1de add r3, pc | r3 = 0xb6466;
0x0005b1e0 add r1, pc | r1 = 0xb646e;
0x0005b1e2 add r0, pc | r0 = 0xb6472;
0x0005b1e4 bl 0x27fbc | assert_fail ();
| label_88:
0x0005b1e8 ldr r3, [pc, 0xa4] |
0x0005b1ea movw r2, 0x329 | r2 = 0x329;
0x0005b1ee ldr r1, [pc, 0xa4] |
0x0005b1f0 ldr r0, [pc, 0xa4] |
0x0005b1f2 add r3, pc | r3 = 0xb6486;
0x0005b1f4 add r1, pc | r1 = 0xb648e;
0x0005b1f6 add r0, pc | r0 = 0xb6492;
0x0005b1f8 bl 0x27fbc | assert_fail ();
| label_87:
0x0005b1fc ldr r3, [pc, 0x9c] |
0x0005b1fe mov.w r2, 0x328 | r2 = 0x328;
0x0005b202 ldr r1, [pc, 0x9c] |
0x0005b204 ldr r0, [pc, 0x9c] |
0x0005b206 add r3, pc | r3 = 0xb64a6;
0x0005b208 add r1, pc | r1 = 0xb64ae;
0x0005b20a add r0, pc | r0 = 0xb64b2;
0x0005b20c bl 0x27fbc | assert_fail ();
| label_68:
0x0005b210 ldr r3, [pc, 0x94] |
0x0005b212 mov.w r2, 0x108 | r2 = 0x108;
0x0005b216 ldr r1, [pc, 0x94] |
0x0005b218 ldr r0, [pc, 0x94] |
0x0005b21a add r3, pc | r3 = 0xb64c6;
0x0005b21c add r1, pc | r1 = 0xb64ce;
0x0005b21e add r0, pc | r0 = 0xb64d2;
0x0005b220 bl 0x27fbc | assert_fail ();
| label_93:
0x0005b224 ldr r3, [pc, 0x8c] |
0x0005b226 mov.w r2, 0x1aa | r2 = 0x1aa;
0x0005b22a ldr r1, [pc, 0x8c] |
0x0005b22c ldr r0, [pc, 0x8c] |
0x0005b22e add r3, pc | r3 = 0xb64e6;
0x0005b230 add r1, pc | r1 = 0xb64ee;
0x0005b232 add r0, pc | r0 = 0xb64f2;
0x0005b234 bl 0x27fbc | assert_fail ();
0x0005b238 ldrh r0, [r6, 0x34] | r0 = *((r6 + 0x34));
0x0005b23a movs r2, r1 | r2 = r1;
0x0005b23c ldrh r2, [r3, 0x34] | r2 = *((r3 + 0x34));
0x0005b23e movs r2, r1 | r2 = r1;
0x0005b240 ldrh r6, [r3, 0x2e] | r6 = *((r3 + 0x2e));
0x0005b242 movs r2, r1 | r2 = r1;
0x0005b244 ldrh r6, [r1, 0x2e] | r6 = *((r1 + 0x2e));
0x0005b246 movs r2, r1 | r2 = r1;
0x0005b248 ldrh r0, [r7, 0x2c] | r0 = *((r7 + 0x2c));
0x0005b24a movs r2, r1 | r2 = r1;
0x0005b24c ldrh r0, [r5, 0x2c] | r0 = *((r5 + 0x2c));
0x0005b24e movs r2, r1 | r2 = r1;
0x0005b250 ldrh r2, [r0, 0x2c] | r2 = *((r0 + 0x2c));
0x0005b252 movs r2, r1 | r2 = r1;
0x0005b254 ldrh r2, [r0, 0x20] | r2 = *((r0 + 0x20));
0x0005b256 movs r1, r1 |
0x0005b258 ldrh r4, [r4, 0x1a] | r4 = *((r4 + 0x1a));
0x0005b25a movs r1, r1 |
0x0005b25c ldrh r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x0005b25e movs r1, r1 |
0x0005b260 ldrh r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x0005b262 movs r1, r1 |
0x0005b264 ldrh r4, [r0, 0x18] | r4 = *((r0 + 0x18));
0x0005b266 movs r1, r1 |
0x0005b268 ldrh r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x0005b26a movs r1, r1 |
0x0005b26c ldrh r6, [r1, 0x1c] | r6 = *((r1 + 0x1c));
0x0005b26e movs r1, r1 |
0x0005b270 ldrh r0, [r6, 0x16] | r0 = *((r6 + 0x16));
0x0005b272 movs r1, r1 |
0x0005b274 ldrh r6, [r6] | r6 = *(r6);
0x0005b276 movs r1, r1 |
0x0005b278 ldrh r2, [r1, 0x1c] | r2 = *((r1 + 0x1c));
0x0005b27a movs r1, r1 |
0x0005b27c ldrh r0, [r1, 0x14] | r0 = *((r1 + 0x14));
0x0005b27e movs r1, r1 |
0x0005b280 ldrh r2, [r0, 0x1a] | r2 = *((r0 + 0x1a));
0x0005b282 movs r1, r1 |
0x0005b284 ldrh r6, [r4, 0x1a] | r6 = *((r4 + 0x1a));
0x0005b286 movs r1, r1 |
0x0005b288 ldrh r0, [r1, 0x16] | r0 = *((r1 + 0x16));
0x0005b28a movs r1, r1 |
0x0005b28c ldrh r6, [r3, 0x18] | r6 = *((r3 + 0x18));
0x0005b28e movs r1, r1 |
0x0005b290 ldrh r2, [r4, 0x1a] | r2 = *((r4 + 0x1a));
0x0005b292 movs r1, r1 |
0x0005b294 ldrh r0, [r4, 0x12] | r0 = *((r4 + 0x12));
0x0005b296 movs r1, r1 |
0x0005b298 ldrh r6, [r2, 0x18] | r6 = *((r2 + 0x18));
0x0005b29a movs r1, r1 |
0x0005b29c ldrh r6, [r1, 0x1a] | r6 = *((r1 + 0x1a));
0x0005b29e movs r1, r1 |
0x0005b2a0 ldrh r4, [r1, 0x12] | r4 = *((r1 + 0x12));
0x0005b2a2 movs r1, r1 |
0x0005b2a4 ldrh r6, [r0, 0x18] | r6 = *((r0 + 0x18));
0x0005b2a6 movs r1, r1 |
0x0005b2a8 ldrh r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x0005b2aa movs r1, r1 |
0x0005b2ac ldrh r4, [r1, 0x14] | r4 = *((r1 + 0x14));
0x0005b2ae movs r1, r1 |
0x0005b2b0 ldrh r6, [r0, 0x16] | r6 = *((r0 + 0x16));
0x0005b2b2 movs r1, r1 |
0x0005b2b4 ldrh r6, [r2, 0x18] | r6 = *((r2 + 0x18));
0x0005b2b6 movs r1, r1 |
0x0005b2b8 ldrh r0, [r7, 0x12] | r0 = *((r7 + 0x12));
0x0005b2ba movs r1, r1 |
0x0005b2bc ldrh r6, [r7, 0x14] | r6 = *((r7 + 0x14));
0x0005b2be movs r1, r1 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x60070 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.sem_open () | void sem_open (int16_t arg1) {
| int16_t var_0h;
| int16_t var_sp_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_24h;
| char * var_2ch;
| int16_t var_1h;
| int16_t var_39h;
| int16_t var_4h_2;
| char * path;
| int16_t var_1h_2;
| int16_t var_174h;
| int16_t var_178h;
| int16_t var_17ch;
| r0 = arg1;
0x00060070 push {r1, r2, r3} |
0x00060072 mov r1, r0 | r1 = r0;
0x00060074 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00060078 sub sp, 0x150 |
0x0006007a add.w sb, sp, 0x40 | sb += path;
0x0006007e mov r7, r0 | r7 = r0;
0x00060080 movs r2, 1 | r2 = 1;
0x00060082 mov r0, sb | r0 = sb;
0x00060084 bl 0x9c2d8 | r0 = shm_get_name ();
0x00060088 cmp r0, 0 |
| if (r0 != 0) {
0x0006008a bne 0x6017c | goto label_9;
| }
0x0006008c add.w fp, sp, 0x10 |
0x00060090 movs r0, 1 | r0 = 1;
0x00060092 mov r1, fp | r1 = fp;
0x00060094 bl 0x5f740 | pthread_setcancelstate ();
0x00060098 ldr r3, [sp, 0x174] | r3 = var_174h;
0x0006009a and r3, r3, 0xc0 | r3 &= 0xc0;
0x0006009e cmp r3, 0xc0 |
| if (r3 == 0xc0) {
0x000600a0 beq 0x600f0 | goto label_10;
| }
| label_8:
0x000600a2 ldr r3, [sp, 0x174] | r3 = var_174h;
0x000600a4 mov r0, sb | r0 = sb;
0x000600a6 bic r1, r3, 0x8000 | r1 = BIT_MASK (r3, 0x8000);
0x000600aa bic r1, r1, 0x43 | r1 = BIT_MASK (r1, 0x43);
0x000600ae orr r1, r1, 0x8000 | r1 |= 0x8000;
0x000600b2 orr r1, r1, 2 | r1 |= 2;
0x000600b6 bl 0x9e2d8 | open (r0, r1, r2);
0x000600b8 vst1.8 {d4, d5, d6}, [pc], r4 | __asm ("vst1.8 {d4, d5, d6}, [pc], r4");
0x000600bc adds r0, r4, 1 | r0 += var_1h_2;
| if (r0 != var_1h_2) {
0x000600be bne 0x6018e | goto label_11;
| }
0x000600c0 ldr r3, [sp, 0x174] | r3 = var_174h;
0x000600c2 lsls r1, r3, 0x19 | r1 = r3 << 0x19;
0x000600c4 bmi 0x600de |
| while (r3 != 2) {
| label_0:
0x000600c6 movs r5, 0 | r5 = 0;
| label_3:
0x000600c8 ldr.w r0, [fp] | r0 = *(fp);
0x000600cc movs r1, 0 | r1 = 0;
0x000600ce bl 0x5f740 | pthread_setcancelstate ();
| label_2:
0x000600d2 mov r0, r5 | r0 = r5;
0x000600d4 add sp, 0x150 |
0x000600d6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000600da add sp, 0xc |
0x000600dc bx lr | return;
0x000600de ldr r3, [pc, 0x1a8] |
0x000600e0 mrc p15, 0, r8, c13, c0, 3 | __asm ("mrc p15, 0, r8, c13, c0, 3");
0x000600e4 add r3, pc |
0x000600e6 ldr r3, [r3] | r3 = *(0xc0372);
0x000600e8 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x000600ec cmp r3, 2 |
0x000600ee bne 0x600c6 |
| }
| label_10:
0x000600f0 ldr r3, [sp, 0x17c] | r3 = var_17ch;
0x000600f2 add r2, sp, 0x178 | r2 += var_178h;
0x000600f4 str r2, [sp, 0x14] | var_14h = r2;
0x000600f6 ldr r2, [sp, 0x178] | r2 = var_178h;
0x000600f8 cmp r3, 0 |
0x000600fa str r2, [sp, 8] | var_8h = r2;
| if (r3 < 0) {
0x000600fc blt 0x601c0 | goto label_12;
| }
0x000600fe ldr.w lr, [pc, 0x1ac] |
0x00060102 lsls r3, r3, 1 | r3 <<= 1;
0x00060104 add r2, sp, 0x1c | r2 += var_1ch;
0x00060106 vldr d16, [pc, 0x178] | __asm ("vldr d16, aav.0x000000ff");
0x00060108 lsrs r6, r3, 0xd | r6 = r3 >> 0xd;
0x0006010a str r3, [sp, 0x18] | var_18h = r3;
0x0006010c movs r3, 0 | r3 = 0;
0x0006010e add lr, pc | lr += pc;
0x00060110 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00060114 str r3, [sp, 0x24] | var_24h = r3;
0x00060116 add r6, sp, 0x2c | r6 += var_2ch;
0x00060118 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x0006011c mov r4, r6 | r4 = r6;
0x0006011e add.w ip, sp, 0x18 |
0x00060122 movs r5, 0x32 | r5 = 0x32;
0x00060124 ldr.w r8, [pc, 0x188] |
0x00060128 mrc p15, 0, sl, c13, c0, 3 | __asm ("mrc p15, 0, sl, c13, c0, 3");
0x0006012c str r7, [sp, 0xc] | var_ch = r7;
0x0006012e stm r4!, {r0, r1, r2, r3} | *(r4!) = r0;
| *((r4! + 4)) = r1;
| *((r4! + 8)) = r2;
| *((r4! + 12)) = r3;
0x00060130 ldr.w r3, [lr] | r3 = *(lr);
0x00060134 add r8, pc | r8 = 0xc03e8;
0x00060136 ldr r7, [sp, 8] | r7 = var_8h;
0x00060138 str r3, [r4] | *(r4) = r3;
0x0006013a mov r4, ip | r4 = ip;
0x0006013c b 0x60168 | goto label_13;
| label_1:
0x0006013e bl 0x9e2d8 | open (r0, r1, r2);
0x00060142 adds r2, r0, 1 | r2 += var_1h;
0x00060144 ldr r3, [pc, 0x144] | r3 = *(0x6028c);
0x00060146 add.w r2, sp, 0x39 | r2 += var_39h;
| if (r2 != var_1h) {
0x0006014a bne 0x601d0 | goto label_14;
| }
0x0006014c add r3, pc | r3 += pc;
0x0006014e ldr r3, [r3] | r3 = *(r3);
0x00060150 ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x00060154 cmp r3, 0x11 |
| if (r3 != 0x11) {
0x00060156 bne 0x600c6 | goto label_0;
| }
0x00060158 subs r5, 1 | r5--;
| if (r5 == 1) {
0x0006015a beq 0x6020a | goto label_15;
| }
0x0006015c ldr.w r0, [r8] | r0 = *(r8);
0x00060160 ldrh.w r3, [r8, 4] | r3 = *((r8 + 4));
0x00060164 str r0, [r2] | *(r2) = r0;
0x00060166 strh r3, [r2, 4] | var_4h_2 = r3;
| label_13:
0x00060168 mov r0, r6 | r0 = r6;
0x0006016a bl 0xa7318 | r0 = mktemp ();
0x0006016e mov r3, r0 | r3 = r0;
0x00060170 mov r2, r7 | r2 = r7;
0x00060172 movs r1, 0xc2 | r1 = 0xc2;
0x00060174 mov r0, r6 | r0 = r6;
0x00060176 cmp r3, 0 |
| if (r3 != 0) {
0x00060178 bne 0x6013e | goto label_1;
| }
0x0006017a b 0x600c6 | goto label_0;
| label_9:
0x0006017c ldr r3, [pc, 0x110] |
0x0006017e mrc p15, 0, r2, c13, c0, 3 | __asm ("mrc p15, 0, r2, c13, c0, 3");
0x00060182 movs r1, 0x16 | r1 = 0x16;
0x00060184 movs r5, 0 | r5 = 0;
0x00060186 add r3, pc |
0x00060188 ldr r3, [r3] | r3 = *(0xc041a);
0x0006018a str r1, [r2, r3] | *((r2 + r3)) = r1;
0x0006018c b 0x600d2 | goto label_2;
| label_11:
0x0006018e movs r2, 0 | r2 = 0;
0x00060190 mov r1, r4 | r1 = r4;
0x00060192 mov r0, r7 | r0 = r7;
0x00060194 mrc p15, 0, r8, c13, c0, 3 | __asm ("mrc p15, 0, r8, c13, c0, 3");
0x00060198 bl 0x60380 | r0 = fcn_00060380 (r0, r1, r2);
0x0006019c mov r5, r0 | r5 = r0;
| label_7:
0x0006019e adds r3, r5, 1 | r3 = r5 + 1;
0x000601a0 it eq |
| if (r3 != r5) {
0x000601a2 moveq r5, 0 | r5 = 0;
| }
| label_4:
0x000601a4 ldr r3, [pc, 0xec] |
0x000601a6 mov r0, r4 | r0 = r4;
0x000601a8 add r3, pc |
0x000601aa ldr r3, [r3] | r3 = *(0xc0440);
0x000601ac ldr.w r4, [r8, r3] | r4 = *((r8 + r3));
0x000601b0 bl 0x9ede0 | close (r0);
0x000601b4 ldr r3, [pc, 0xe0] |
0x000601b6 add r3, pc |
0x000601b8 ldr r3, [r3] | r3 = *(0xc0452);
0x000601ba str.w r4, [r8, r3] | __asm ("str.w r4, [r8, r3]");
0x000601bc ands r3, r0 | r3 &= r0;
0x000601be b 0x600c8 | goto label_3;
| label_12:
0x000601c0 ldr r3, [pc, 0xd8] |
0x000601c2 mrc p15, 0, r2, c13, c0, 3 | __asm ("mrc p15, 0, r2, c13, c0, 3");
0x000601c6 movs r1, 0x16 | r1 = 0x16;
0x000601c8 add r3, pc |
0x000601ca ldr r3, [r3] | r3 = *(0xc0468);
0x000601cc str r1, [r2, r3] | *((r2 + r3)) = r1;
0x000601ce b 0x600c6 | goto label_0;
| label_14:
0x000601d0 mov ip, r4 |
0x000601d2 ldr r7, [sp, 0xc] | r7 = var_ch;
0x000601d4 mov r4, r0 | r4 = r0;
0x000601d6 mrc p15, 0, r8, c13, c0, 3 | __asm ("mrc p15, 0, r8, c13, c0, 3");
0x000601da mov r5, ip | r5 = ip;
0x000601dc b 0x601ea |
| while (r1 == var_1h) {
0x000601de add r3, pc | r3 += pc;
0x000601e0 ldr r3, [r3] | r3 = *(r3);
0x000601e2 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x000601e6 cmp r3, 4 |
| if (r3 != 4) {
0x000601e8 bne 0x60200 | goto label_5;
| }
0x000601ea mov r1, r5 | r1 = r5;
0x000601ec movs r2, 0x10 | r2 = 0x10;
0x000601ee mov r0, r4 | r0 = r4;
0x000601f0 bl 0x9e6c0 | write (r0, r1, r2);
0x000601f4 adds r1, r0, 1 | r1 += var_1h;
0x000601f6 ldr r3, [pc, 0xa8] | r3 = *(0x602a2);
0x000601f8 beq 0x601de |
| }
0x000601fa cmp r0, 0x10 |
0x000601fc mov r5, r0 | r5 = r0;
0x000601fe beq 0x60218 |
| while (r0 == -1) {
| label_5:
0x00060200 mov r0, r6 | r0 = r6;
0x00060202 bl 0x9f9d0 | unlink ();
0x00060204 invalid |
| label_6:
0x00060206 movs r5, 0 | r5 = 0;
0x00060208 b 0x601a4 | goto label_4;
| label_15:
0x0006020a ldr r3, [pc, 0x98] |
0x0006020c movs r2, 0xb | r2 = 0xb;
0x0006020e add r3, pc |
0x00060210 ldr r3, [r3] | r3 = *(0xc04b8);
0x00060212 str.w r2, [sl, r3] | __asm ("str.w r2, [sl, r3]");
0x00060216 b 0x600c6 | goto label_0;
0x00060218 movs r0, 0 | r0 = 0;
0x0006021a movs r3, 1 | r3 = 1;
0x0006021c movs r2, 3 | r2 = 3;
0x0006021e mov r1, r5 | r1 = r5;
0x00060220 str r4, [sp] | *(sp) = r4;
0x00060222 str r0, [sp, 4] | var_4h = r0;
0x00060224 bl 0xa9000 | r0 = mmap ()
0x00060228 cmp.w r0, -1 |
0x0006022c mov sl, r0 | sl = r0;
0x0006022e beq 0x60200 |
| }
0x00060230 mov r1, sb | r1 = sb;
0x00060232 mov r0, r6 | r0 = r6;
0x00060234 bl 0x9f910 | r0 = link ();
| if (r0 == 0) {
0x00060238 cbz r0, 0x6025e | goto label_16;
| }
0x0006023a mov r1, r5 | r1 = r5;
0x0006023c mov r0, sl | r0 = sl;
0x0006023e bl 0xa90c0 | munmap ();
0x00060242 ldr r3, [sp, 0x174] | r3 = var_174h;
0x00060244 lsls r2, r3, 0x18 | r2 = r3 << 0x18;
| if (r2 < r3) {
0x00060246 bmi 0x60200 | goto label_5;
| }
0x00060248 ldr r3, [pc, 0x5c] |
0x0006024a mov r0, r6 | r0 = r6;
0x0006024c add r3, pc |
0x0006024e ldr r3, [r3] | r3 = *(0xc04f8);
0x00060250 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00060254 cmp r3, 0x11 |
| if (r3 != 0x11) {
0x00060256 beq 0x60272 |
0x00060258 bl 0x9f9d0 | unlink ();
0x0006025c b 0x60206 | goto label_6;
| label_16:
0x0006025e mov r2, sl | r2 = sl;
0x00060260 mov r0, r7 | r0 = r7;
0x00060262 mov r1, r4 | r1 = r4;
0x00060264 bl 0x60380 | r0 = fcn_00060380 (r0, r1, r2);
0x00060268 mov r5, r0 | r5 = r0;
0x0006026a mov r0, r6 | r0 = r6;
0x0006026c bl 0x9f9d0 | unlink ();
0x00060270 b 0x6019e | goto label_7;
| }
0x00060272 bl 0x9f9d0 | unlink ();
0x00060276 mov r0, r4 | r0 = r4;
0x00060278 bl 0x9ede0 | close (r0);
0x0006027c b 0x600a2 | goto label_8;
| }
[*] Function mmap used 17 times libc.so.6