[*] Binary protection state of ld-linux-armhf.so.3
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function printf tear down of ld-linux-armhf.so.3
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x21ec */
| #include <stdint.h>
|
; (fcn) fcn.000021ec () | void fcn_000021ec () {
| if (? >= ?) {
0x000021ec strlt r4, [r8, -0x802] | *((r8 - 0x802)) = r4;
| }
0x000021f0 add r0, pc | r0 += pc;
0x000021f2 bl 0x8b5c | dl_fatal_printf ()
0x000021f6 nop |
0x000021f8 str r4, [r7, 0x58] | *((r7 + 0x58)) = r4;
0x000021fa movs r1, r0 | r1 = r0;
0x000021fc ldr r3, [pc, 0x10] |
0x000021fe add r3, pc | r3 = 0x4412;
0x00002200 cmp r3, r0 |
| if (r3 != r0) {
0x00002202 beq 0x220c |
0x00002204 ldr r3, [pc, 0xc] |
0x00002206 add r3, pc |
0x00002208 ldr r3, [r3] | r3 = *(0x441e);
0x0000220a bx r3 | return uint32_t (*r3)() ();
| }
0x0000220c bx lr | return;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x2b90 */
| #include <stdint.h>
|
; (fcn) fcn.00002b90 () | void fcn_00002b90 () {
0x00002b90 ldr r3, [pc, 0xec] |
0x00002b92 push.w {r4, r5, r6, r7, r8, lr} |
0x00002b96 add r3, pc | r3 = 0x581a;
0x00002b98 ldr r0, [r3] | r0 = *(0x581a);
0x00002b9a ldrb.w r3, [r0, 0x1a6] | r3 = *((r0 + 0x1a6));
0x00002b9e lsls r3, r3, 0x1c | r3 <<= 0x1c;
| if (r3 < r3) {
0x00002ba0 bmi 0x2c2e | goto label_2;
| }
0x00002ba2 ldr r3, [pc, 0xe0] |
0x00002ba4 vmov.i8 d16, 0xff | __asm ("vmov.i8 d16, 0xff");
0x00002ba8 add r3, pc | r3 = 0x5832;
0x00002baa adds r3, 8 | r3 += 8;
0x00002bac vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
| do {
0x00002bb0 ldr r5, [pc, 0xd4] |
0x00002bb2 bl 0x26a4 | r0 = fcn_000026a4 (r0);
0x00002bb6 mov r4, r0 | r4 = r0;
0x00002bb8 ldr r7, [pc, 0xd0] |
0x00002bba add r5, pc | r5 = 0x5846;
0x00002bbc ldr r0, [r5, 4] |
0x00002bbe add r7, pc | r7 = 0x584e;
0x00002bc0 ldr r3, [r7] | r3 = *(0x584e);
0x00002bc2 add.w r0, r0, r0, lsl 2 | r0 = 0x584a;
0x00002bc6 lsls r0, r0, 2 | r0 <<= 2;
0x00002bc8 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00002bca mov r6, r0 | r6 = r0;
0x00002bcc str r0, [r5] | *(r5) = r0;
| if (r4 == 0) {
0x00002bce cbnz r4, 0x2be2 |
0x00002bd0 cmp r0, 0 |
| if (r0 == 0) {
0x00002bd2 beq 0x2c5a | goto label_3;
| }
0x00002bd4 str r4, [r5, 4] | *((r5 + 4)) = r4;
0x00002bd6 bl 0x26a4 | fcn_000026a4 (r0);
0x00002bda ldr r1, [r5, 4] | r1 = *((r5 + 4));
| if (r1 != 0) {
0x00002bdc cbnz r1, 0x2c3a | goto label_4;
| }
| label_0:
0x00002bde pop.w {r4, r5, r6, r7, r8, pc} |
| }
0x00002be2 cmp r4, 0x3f |
0x00002be4 ldr r3, [r7] | r3 = *(r7);
0x00002be6 it lo |
| if (r4 >= 0x3f) {
0x00002be8 movlo r4, 0x3f | r4 = 0x3f;
| }
0x00002bea add.w r0, r4, r4, lsl 2 | r0 = r4 + (r4 << 2);
0x00002bee lsls r0, r0, 2 | r0 <<= 2;
0x00002bf0 adds r0, 0x10 | r0 += 0x10;
0x00002bf2 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00002bf4 mov r6, r0 | r6 = r0;
| if (r0 == 0) {
0x00002bf6 cbz r0, 0x2c54 | goto label_5;
| }
0x00002bf8 ldr r7, [pc, 0x94] |
0x00002bfa movs r3, 0 | r3 = 0;
0x00002bfc vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00002c00 ldr.w r8, [r5] | r8 = *(r5);
0x00002c04 add r7, pc | r7 = 0x5898;
0x00002c06 str r4, [r0, 0xc] | *((r0 + 0xc)) = r4;
0x00002c08 str r0, [r7] | *(r7) = r0;
0x00002c0a vst1.32 {d16}, [r0] | __asm ("vst1.32 {d16}, [r0]");
0x00002c0e str r3, [r0, 8] | *((r0 + 8)) = r3;
0x00002c10 cmp.w r8, 0 |
| if (r8 == 0) {
0x00002c14 beq 0x2c5a | goto label_3;
| }
0x00002c16 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x00002c18 bl 0x26a4 | fcn_000026a4 (r0);
0x00002c1c ldr r1, [r5, 4] | r1 = *((r5 + 4));
| if (r1 != 0) {
0x00002c1e cbnz r1, 0x2c62 | goto label_6;
| }
| label_1:
0x00002c20 ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x00002c22 add.w r0, r6, 0x10 | r0 = r6 + 0x10;
0x00002c26 pop.w {r4, r5, r6, r7, r8, lr} |
0x00002c2a b.w 0x2af4 | void (*0x2af4)() ();
| label_2:
0x00002c2e ldr r1, [pc, 0x64] |
0x00002c30 add r1, pc | r1 = 0x58ca;
0x00002c32 adds r1, 8 | r1 += 8;
0x00002c34 bl 0x2648 | fcn_00002648 (r0, r1);
0x00002c38 b 0x2bb0 |
| } while (1);
| label_4:
0x00002c3a mov r0, r6 | r0 = r6;
0x00002c3c bl 0x2af4 | fcn_00002af4 (r0, r1);
0x00002c40 ldrd r2, r3, [r5] | __asm ("ldrd r2, r3, [r5]");
0x00002c44 subs r3, 1 | r3--;
0x00002c46 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x00002c4a add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x00002c4e ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00002c50 str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
0x00002c52 b 0x2bde | goto label_0;
| label_5:
0x00002c54 ldr r3, [pc, 0x40] |
0x00002c56 add r3, pc | r3 = 0x58f2;
0x00002c58 str r0, [r3] | *(r3) = r0;
| label_3:
0x00002c5a ldr r0, [pc, 0x40] |
0x00002c5c add r0, pc | r0 = 0x58fe;
0x00002c5e bl 0x8b5c | dl_fatal_printf ()
| label_6:
0x00002c62 mov r0, r8 | r0 = r8;
0x00002c64 bl 0x2af4 | fcn_00002af4 (r0, r1);
0x00002c68 ldrd r2, r3, [r5] | __asm ("ldrd r2, r3, [r5]");
0x00002c6c ldr r6, [r7] | r6 = *(r7);
0x00002c6e subs r3, 1 | r3--;
0x00002c70 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x00002c74 add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x00002c78 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00002c7a str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
0x00002c7c b 0x2c20 | goto label_1;
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x62e4).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x8b78 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00008b78 () | void fcn_00008b78 (int16_t arg_10h, int16_t arg_28h) {
| int16_t var_0h;
| int16_t var_4h_2;
| int16_t var_8h;
0x00008b78 ldr.w r3, [pc, 0x4ac] | r3 = *(0x00009028);
0x00008b7c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00008b80 sub.w sp, sp, 0x26c |
0x00008b84 add r7, sp, 8 | r7 += var_8h;
0x00008b86 add r3, pc | r3 += pc;
0x00008b88 ldr.w r6, [r3, 0x5dc] | r6 = *((r3 + 0x5dc));
0x00008b8c ldrh.w r1, [r6, 0x168] | r1 = *((r6 + 0x168));
0x00008b90 ldr.w r3, [r6, 0x160] | r3 = *((r6 + 0x160));
0x00008b94 lsls r1, r1, 5 | r1 <<= 5;
0x00008b96 adds r2, r3, r1 | r2 = r3 + r1;
0x00008b98 cmp r3, r2 |
| if (r3 >= r2) {
0x00008b9a bhs.w 0x8fae | goto label_7;
| }
0x00008b9e ldr.w r2, [pc, 0x48c] | r2 = *(0x0000902c);
0x00008ba2 add r1, r3 | r1 += r3;
0x00008ba4 adds r1, 0x20 | r1 += 0x20;
0x00008ba6 adds r3, 0x20 | r3 += 0x20;
0x00008ba8 movs r4, 0 | r4 = 0;
0x00008baa mov.w r0, -1 | r0 = -1;
0x00008bae add r2, pc | r2 += pc;
0x00008bb0 mov r8, r6 | r8 = r6;
0x00008bb2 ldr r5, [r2, 0xc] | r5 = *((r2 + 0xc));
0x00008bb4 rsb.w ip, r5, 0 |
0x00008bb8 subs r5, 1 | r5--;
0x00008bba b 0x8bc2 |
| while (r2 != 1) {
| label_0:
0x00008bbc adds r3, 0x20 | r3 += 0x20;
0x00008bbe cmp r3, r1 |
| if (r3 == r1) {
0x00008bc0 beq 0x8bf8 | goto label_8;
| }
| label_1:
0x00008bc2 ldr r2, [r3, -0x20] | r2 = *((r3 - 0x20));
0x00008bc6 cmp r2, 1 |
0x00008bc8 bne 0x8bbc |
| }
0x00008bca ldr r2, [r3, -0x8] | r2 = *((r3 - 0x8));
0x00008bce lsls r6, r2, 0x1f | r6 = r2 << 0x1f;
| if (r6 >= r2) {
0x00008bd0 bpl 0x8bbc | goto label_0;
| }
0x00008bd2 ldr r2, [r3, -0x18] | r2 = *((r3 - 0x18));
0x00008bd6 adds r3, 0x20 | r3 += 0x20;
0x00008bd8 ldr r6, [r3, -0x2c] | r6 = *((r3 - 0x2c));
0x00008bdc and.w lr, ip, r2 | lr = ip & r2;
0x00008be0 add r2, r6 | r2 += r6;
0x00008be2 cmp r0, lr |
0x00008be4 add r2, r5 | r2 += r5;
0x00008be6 it hs |
| if (r0 < lr) {
0x00008be8 movhs r0, lr | r0 = lr;
| }
0x00008bea and.w r2, r2, ip | r2 &= ip;
0x00008bee cmp r4, r2 |
0x00008bf0 it lo |
| if (r4 >= r2) {
0x00008bf2 movlo r4, r2 | r4 = r2;
| }
0x00008bf4 cmp r3, r1 |
| if (r3 != r1) {
0x00008bf6 bne 0x8bc2 | goto label_1;
| }
| label_8:
0x00008bf8 mov r6, r8 | r6 = r8;
0x00008bfa mov r1, r0 | r1 = r0;
0x00008bfc mov r2, r4 | r2 = r4;
| label_3:
0x00008bfe ldr r3, [r6] | r3 = *(r6);
0x00008c00 ldr.w r5, [pc, 0x42c] |
0x00008c04 add r0, r3 | r0 += r3;
0x00008c06 adds r3, 3 | r3 += 3;
0x00008c08 add r3, r4 | r3 += r4;
0x00008c0a bic r0, r0, 3 | r0 = BIT_MASK (r0, 3);
0x00008c0e bic r3, r3, 3 | r3 = BIT_MASK (r3, 3);
0x00008c12 movs r4, 0 | r4 = 0;
0x00008c14 sub.w r8, r3, r0 | r8 = r3 - r0;
0x00008c18 add r5, pc | r5 = 0x11c4c;
0x00008c1a str r3, [r7, 0x18] | *((r7 + 0x18)) = r3;
0x00008c1c add.w r3, r8, r8, lsl 1 | r3 = r8 + (r8 << 1);
0x00008c20 str r4, [r5] | *(r5) = r4;
0x00008c22 movw r4, 0x1387 | r4 = 0x1387;
0x00008c26 cmp r3, r4 |
| if (r3 < r4) {
0x00008c28 bls.w 0x8dca | goto label_9;
| }
0x00008c2c movs r4, 0x63 |
0x00008c2e movt r4, 0x640 | r4 = 0x6400063;
0x00008c32 cmp r3, r4 |
| if (r3 < r4) {
0x00008c34 bls.w 0x9008 | goto label_10;
| }
0x00008c38 movs r3, 0x40 | r3 = 0x40;
0x00008c3a mov.w r4, 0x100000 | r4 = 0x100000;
0x00008c3e movt r3, 0x600 | r3 = (r3 & 0xFFFF) | 0x6000000;
0x00008c42 str r3, [r7, 0x24] | *((r7 + 0x24)) = r3;
0x00008c44 mov.w r3, 0x800000 | r3 = 0x800000;
0x00008c48 str r3, [r7, 0x1c] | *((r7 + 0x1c)) = r3;
| do {
| label_6:
0x00008c4a ldr r6, [pc, 0x3e8] |
0x00008c4c lsr.w lr, r8, 2 | lr = r8 >> 2;
0x00008c50 movw r3, 0x6d67 |
0x00008c54 ldr.w sb, [pc, 0x3e0] |
0x00008c58 movt r3, 0x6e6f | r3 = 0x6e6f6d67;
0x00008c5c movs r5, 0 | r5 = 0;
0x00008c5e add r6, pc | r6 = 0x11c98;
0x00008c60 strd r5, r5, [r7, 0x34] | __asm ("strd r5, r5, [r7, 0x34]");
0x00008c64 str r4, [r6, 0x10] | *((r6 + 0x10)) = r4;
0x00008c66 add.w r4, r7, 0x40 | r4 = r7 + 0x40;
0x00008c6a str r0, [r6, 4] | *((r6 + 4)) = r0;
0x00008c6c movw r0, 0xffff |
0x00008c70 strd r1, r2, [r4] | __asm ("strd r1, r2, [r4]");
0x00008c74 add.w r2, r7, 0x2c | r2 = r7 + 0x2c;
0x00008c78 movt r0, 1 | r0 = 0x1ffff;
0x00008c7c str r2, [r7, 0x20] | *((r7 + 0x20)) = r2;
0x00008c7e movs r2, 4 | r2 = 4;
0x00008c80 strd r3, r0, [r7, 0x2c] | __asm ("strd r3, r0, [r7, 0x2c]");
0x00008c84 str.w lr, [r4, 8] | __asm ("str.w lr, [r4, 8]");
0x00008c88 add sb, pc | sb = 0x11cc4;
0x00008c8a str r2, [r6, 0xc] | *((r6 + 0xc)) = r2;
0x00008c8c str.w r8, [r6, 8] | __asm ("str.w r8, [r6, 8]");
0x00008c90 str r5, [r7, 0x3c] | *((r7 + 0x3c)) = r5;
0x00008c92 bl 0x14950 | fcn_00014950 ();
0x00008c96 ldr r2, [pc, 0x3a4] |
0x00008c98 ldr.w sl, [sb, 0x174] | sl = *(0x11e38);
0x00008c9c str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x00008c9e add r2, pc | r2 = 0x11ce0;
0x00008ca0 str r5, [r7, 0x58] | *((r7 + 0x58)) = r5;
0x00008ca2 ldm.w r2, {r0, r1} | r0 = *(r2);
| r1 = *((r2 + 4));
0x00008ca6 add.w r2, r7, 0x50 | r2 = r7 + 0x50;
0x00008caa str.w r5, [r7, 0x5b] | __asm ("str.w r5, [r7, 0x5b]");
0x00008cae stm.w r2, {r0, r1} | *(r2) = r0;
| *((r2 + 4)) = r1;
0x00008cb2 movs r2, 0x73 | r2 = 0x73;
0x00008cb4 mov r0, sl | r0 = sl;
0x00008cb6 strb r2, [r4, 0x1f] | *((r4 + 0x1f)) = r2;
0x00008cb8 bl 0x161c0 | fcn_000161c0 (r0, r1);
0x00008cbc ldr.w r6, [sb, 0x170] | r6 = *(0x11e34);
0x00008cc0 mov fp, r0 |
0x00008cc2 mov r0, r6 | r0 = r6;
0x00008cc4 bl 0x161c0 | r0 = fcn_000161c0 (r0, r1);
0x00008cc8 add fp, r0 |
0x00008cca mov r1, sl | r1 = sl;
0x00008ccc add.w fp, fp, 0x11 |
0x00008cd0 bic fp, fp, 7 | fp = BIT_MASK (fp, 7);
0x00008cd4 sub.w sp, sp, fp |
0x00008cd8 add.w sl, sp, 8 | sl += var_8h;
0x00008cdc mov r0, sl | r0 = sl;
0x00008cde bl 0x15ea0 | fcn_00015ea0 ();
0x00008ce2 movs r2, 0x2f | r2 = 0x2f;
0x00008ce4 mov r1, r6 | r1 = r6;
0x00008ce6 strb r2, [r0], 1 | *(r0) = r2;
| r0++;
0x00008cea bl 0x15ea0 | fcn_00015ea0 ();
0x00008cee ldr.w ip, [pc, 0x350] |
0x00008cf2 mov r6, r0 | r6 = r0;
0x00008cf4 mov.w r2, 0x1b6 | r2 = 0x1b6;
0x00008cf8 add ip, pc | ip = 0x11d3e;
0x00008cfa ldm.w ip!, {r0, r1} | r0 = *(ip!);
| r1 = *((ip! + 4));
0x00008cfe str r1, [r6, 4] | *((r6 + 4)) = r1;
0x00008d00 ldrb.w r1, [ip] | r1 = *(ip);
0x00008d04 str r0, [r6] | *(r6) = r0;
0x00008d06 mov r0, sl | r0 = sl;
0x00008d08 strb r1, [r6, 8] | *((r6 + 8)) = r1;
0x00008d0a movw r1, 0x8042 | r1 = 0x8042;
0x00008d0e bl 0x14db0 | r0 = fcn_00014db0 (r0);
0x00008d12 adds r1, r0, 1 | r1 = r0 + 1;
0x00008d14 mov r6, r0 | r6 = r0;
| if (r1 == r0) {
0x00008d16 beq 0x8e0c | goto label_11;
| }
0x00008d18 add.w fp, r7, 0x60 |
0x00008d1c mov r1, fp | r1 = fp;
0x00008d1e bl 0x14994 | r0 = fcn_00014994 (r0, r1);
0x00008d22 cmp r0, 0 |
| if (r0 < 0) {
0x00008d24 blt 0x8dda | goto label_12;
| }
0x00008d26 ldr.w r2, [fp, 0x10] | r2 = *(arg_10h);
0x00008d2a and r2, r2, 0xf000 | r2 &= 0xf000;
0x00008d2e cmp.w r2, 0x8000 |
| if (r2 != 0x8000) {
0x00008d32 bne 0x8dda | goto label_12;
| }
0x00008d34 ldr r0, [r7, 0x24] | r0 = *((r7 + 0x24));
0x00008d36 lsr.w r3, r8, 1 | r3 = r8 >> 1;
0x00008d3a ldrd r1, r2, [fp, 0x28] | __asm ("ldrd r1, r2, [arg_28h]");
0x00008d3e str r3, [r7, 0x14] | *((r7 + 0x14)) = r3;
0x00008d40 add r0, r3 | r0 += r3;
0x00008d42 orrs.w r3, r1, r2 | r3 = r1 | r2;
0x00008d44 lsls r2, r0, 0xc | r2 = r0 << 0xc;
0x00008d46 str r0, [r7, 0x24] | *((r7 + 0x24)) = r0;
| if (r2 == r0) {
0x00008d48 beq.w 0x8f3a | goto label_13;
| }
0x00008d4c ldr r0, [r7, 0x24] | r0 = *((r7 + 0x24));
0x00008d4e asrs r3, r0, 0x1f | r3 = r0 >> 0x1f;
0x00008d50 cmp r2, r3 |
0x00008d52 it eq |
| if (r2 == r3) {
0x00008d54 cmpeq r1, r0 | __asm ("cmpeq r1, r0");
| }
| if (r2 != r3) {
0x00008d56 bne 0x8e18 | goto label_14;
| }
| label_2:
0x00008d58 mov.w sb, 0 | sb = 0;
0x00008d5c str r6, [sp] | *(sp) = r6;
0x00008d5e str.w sb, [sp, 4] | __asm ("str.w sb, [var_4h_2]");
0x00008d60 str r0, [sp, 0x10] | *((sp + 0x10)) = r0;
0x00008d62 movs r3, 1 | r3 = 1;
0x00008d64 ldr r1, [r7, 0x24] | r1 = *((r7 + 0x24));
0x00008d66 movs r2, 3 | r2 = 3;
0x00008d68 mov r0, sb | r0 = sb;
0x00008d6a bl 0x14fc4 | r0 = fcn_00014fc4 (r0, r1);
0x00008d6e adds r3, r0, 1 | r3 = r0 + 1;
0x00008d70 mov r5, r0 | r5 = r0;
| if (r3 == r0) {
0x00008d72 beq.w 0x8fba | goto label_15;
| }
0x00008d76 mov r0, r6 | r0 = r6;
0x00008d78 bl 0x14c44 | fcn_00014c44 ();
0x00008d7c ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x00008d7e add.w r3, r5, 0x38 | r3 = r5 + 0x38;
0x00008d82 str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
0x00008d84 ldr r2, [pc, 0x2bc] |
0x00008d86 adds r6, r1, 4 | r6 = r1 + 4;
0x00008d88 add r6, r3 | r6 += r3;
0x00008d8a ldrd r3, r1, [fp, 0x28] | __asm ("ldrd r3, r1, [arg_28h]");
0x00008d8e add r2, pc | r2 = 0x11dd6;
0x00008d90 adds r0, r6, 4 | r0 = r6 + 4;
0x00008d92 str r6, [r2, 0x14] | *((r2 + 0x14)) = r6;
0x00008d94 orrs r3, r1 | r3 |= r1;
0x00008d96 str r0, [r2, 0x18] | *((r2 + 0x18)) = r0;
| if (r3 == r1) {
0x00008d98 beq 0x8e3a | goto label_16;
| }
0x00008d9a ldr r1, [r7, 0x20] | r1 = *((r7 + 0x20));
0x00008d9c movs r2, 0x14 | r2 = 0x14;
0x00008d9e mov r0, r5 | r0 = r5;
0x00008da0 bl 0x15418 | r0 = fcn_00015418 (r0, r1, r2);
| if (r0 == 0) {
0x00008da4 cbnz r0, 0x8dc0 |
0x00008da6 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
| if (r3 != 0) {
0x00008da8 cbnz r3, 0x8dc0 | goto label_17;
| }
0x00008daa mov r1, r4 | r1 = r4;
0x00008dac movs r2, 0x20 | r2 = 0x20;
0x00008dae add.w r0, r5, 0x18 | r0 = r5 + 0x18;
0x00008db2 bl 0x15418 | r0 = fcn_00015418 (r0, r1, r2);
| if (r0 != 0) {
0x00008db6 cbnz r0, 0x8dc0 | goto label_17;
| }
0x00008db8 ldr r3, [r6, -0x4] | r3 = *((r6 - 0x4));
0x00008dbc cmp r3, 1 |
| if (r3 == 1) {
0x00008dbe beq 0x8e70 | goto label_18;
| }
| }
| label_17:
0x00008dc0 ldr r1, [r7, 0x24] | r1 = *((r7 + 0x24));
0x00008dc2 mov r0, r5 | r0 = r5;
0x00008dc4 bl 0x15010 | fcn_00015010 (r0);
0x00008dc8 b 0x8e1e | goto label_19;
| label_9:
0x00008dca mov.w r3, 0x190 | r3 = 0x190;
0x00008dce movs r4, 0x32 | r4 = 0x32;
0x00008dd0 str r3, [r7, 0x1c] | *((r7 + 0x1c)) = r3;
0x00008dd2 mov.w r3, 0x1300 | r3 = 0x1300;
0x00008dd6 str r3, [r7, 0x24] | *((r7 + 0x24)) = r3;
0x00008dd8 b 0x8c4a |
| } while (1);
| label_12:
0x00008dda ldr r3, [pc, 0x26c] |
0x00008ddc ldr r5, [pc, 0x26c] |
0x00008dde add r3, pc | r3 = 0x11e2c;
0x00008de0 ldr r4, [r3] | r4 = *(0x11e2c);
0x00008de2 add r5, pc | r5 = 0x11e32;
| label_4:
0x00008de4 mov r0, r6 | r0 = r6;
0x00008de6 bl 0x14c44 | fcn_00014c44 ();
| do {
0x00008dea add.w r1, r7, 0xd0 | r1 = r7 + 0xd0;
0x00008dee mov r0, r4 | r0 = r4;
0x00008df0 mov.w r2, 0x190 | r2 = 0x190;
0x00008df4 bl 0xfa88 | fcn_0000fa88 (r0, r1);
0x00008df8 mov r1, sl | r1 = sl;
0x00008dfa mov r2, r0 | r2 = r0;
0x00008dfc mov r0, r5 | r0 = r5;
0x00008dfe bl 0x8b3c | fcn_00008b3c ();
0x00008e02 add.w r7, r7, 0x264 | r7 += 0x264;
0x00008e06 mov sp, r7 |
0x00008e08 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x00008e0c ldr r3, [pc, 0x240] |
0x00008e0e ldr r5, [pc, 0x244] |
0x00008e10 add r3, pc | r3 = 0x11e64;
0x00008e12 ldr r4, [r3] | r4 = *(0x11e64);
0x00008e14 add r5, pc | r5 = 0x11e6e;
0x00008e16 b 0x8dea |
| } while (1);
| label_14:
0x00008e18 mov r0, r6 | r0 = r6;
0x00008e1a bl 0x14c44 | fcn_00014c44 ();
| label_19:
0x00008e1e ldr r3, [pc, 0x238] |
0x00008e20 mov r1, sl | r1 = sl;
0x00008e22 ldr r0, [pc, 0x238] |
0x00008e24 add r3, pc | r3 = 0x11e82;
0x00008e26 ldr.w r2, [r3, 0x170] | r2 = *(0x11ff2);
0x00008e2a add r0, pc | r0 = 0x11e8c;
0x00008e2c bl 0x8b3c | fcn_00008b3c ();
0x00008e30 add.w r7, r7, 0x264 | r7 += 0x264;
0x00008e34 mov sp, r7 |
0x00008e36 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_16:
0x00008e3a ldr.w ip, [r7, 0x20] | ip = *((r7 + 0x20));
0x00008e3e mov.w lr, 1 | lr = 1;
0x00008e42 str.w sb, [r5, 0x14] | __asm ("str.w sb, [r5, 0x14]");
0x00008e46 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x00008e4a str r0, [r5] | *(r5) = r0;
0x00008e4c ldr.w r0, [ip] | r0 = *(ip);
0x00008e50 str r1, [r5, 4] | *((r5 + 4)) = r1;
0x00008e52 str r2, [r5, 8] | *((r5 + 8)) = r2;
0x00008e54 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x00008e56 str r0, [r5, 0x10] | *((r5 + 0x10)) = r0;
0x00008e58 ldm r4!, {r0, r1, r2, r3} | r0 = *(r4!);
| r1 = *((r4! + 4));
| r2 = *((r4! + 8));
| r3 = *((r4! + 12));
0x00008e5a str r0, [r5, 0x18] | *((r5 + 0x18)) = r0;
0x00008e5c str r1, [r5, 0x1c] | *((r5 + 0x1c)) = r1;
0x00008e5e str r2, [r5, 0x20] | *((r5 + 0x20)) = r2;
0x00008e60 str r3, [r5, 0x24] | *((r5 + 0x24)) = r3;
0x00008e62 ldm r4!, {r0, r1, r2, r3} | r0 = *(r4!);
| r1 = *((r4! + 4));
| r2 = *((r4! + 8));
| r3 = *((r4! + 12));
0x00008e64 str r0, [r5, 0x28] | *((r5 + 0x28)) = r0;
0x00008e66 str r1, [r5, 0x2c] | *((r5 + 0x2c)) = r1;
0x00008e68 str r2, [r5, 0x30] | *((r5 + 0x30)) = r2;
0x00008e6a str r3, [r5, 0x34] | *((r5 + 0x34)) = r3;
0x00008e6c str lr, [r6, -0x4] |
| label_18:
0x00008e70 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x00008e72 movs r1, 1 | r1 = 1;
0x00008e74 ldr r0, [r7, 0x1c] | r0 = *((r7 + 0x1c));
0x00008e76 add r0, r3 | r0 += r3;
0x00008e78 ldr r3, [pc, 0x1e4] |
0x00008e7a add r3, pc |
0x00008e7c ldr r3, [r3] | r3 = *(0x11ede);
0x00008e7e blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00008e80 ldr r2, [pc, 0x1e0] |
0x00008e82 add r2, pc | r2 = 0x11eea;
0x00008e84 str r0, [r2, 0x1c] | *((r2 + 0x1c)) = r0;
0x00008e86 cmp r0, 0 |
| if (r0 == 0) {
0x00008e88 beq.w 0x8ff8 | goto label_20;
| }
0x00008e8c ldr r4, [r7, 0x14] | r4 = *((r7 + 0x14));
0x00008e8e movs r3, 0 | r3 = 0;
0x00008e90 ldr r1, [r2, 0x14] | r1 = *((r2 + 0x14));
0x00008e92 str r3, [r2, 0x24] | *((r2 + 0x24)) = r3;
0x00008e94 adds r6, r0, r4 | r6 = r0 + r4;
0x00008e96 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x00008e98 str r6, [r2, 0x20] | *((r2 + 0x20)) = r6;
0x00008e9a ldr r2, [r1] | r2 = *(r1);
0x00008e9c ldr r5, [pc, 0x1c8] |
0x00008e9e cmp r2, r3 |
0x00008ea0 it lo |
| if (r2 >= r3) {
0x00008ea2 ldrlo r3, [r1] | r3 = *(r1);
| }
0x00008ea4 add r5, pc | r5 = 0x11f10;
0x00008ea6 str r3, [r5, 0x28] | *((r5 + 0x28)) = r3;
| if (r3 == 0) {
0x00008ea8 cbz r3, 0x8ee6 | goto label_21;
| }
0x00008eaa ldr.w lr, [r5, 0x18] |
0x00008eae add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00008eb2 add.w r2, lr, r3, lsl 2 | r2 = lr + (r3 << 2);
0x00008eb6 subs r2, 0xc | r2 -= 0xc;
| do {
0x00008eb8 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x00008eba cmp r2, lr |
0x00008ebc ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00008ebe lsr.w r1, r1, 2 | r1 >>= 2;
0x00008ec2 add.w ip, r3, 1 |
0x00008ec6 str.w ip, [r5, 0x24] | __asm ("str.w ip, [r5, 0x24]");
0x00008eca add.w ip, r6, r3, lsl 3 |
0x00008ece ldrh.w sb, [r0, r1, lsl 1] | offset_0 = r1 << 1;
| sb = *((r0 + offset_0));
0x00008ed2 str.w r2, [r6, r3, lsl 3] | __asm ("str.w r2, [r6, r3, lsl 3]");
0x00008ed6 uxth r3, r3 | r3 = (int16_t) r3;
0x00008ed8 sub.w r2, r2, 0xc | r2 -= 0xc;
0x00008edc strh.w sb, [ip, 4] | *((ip + 4)) = sb;
0x00008ee0 strh.w r3, [r0, r1, lsl 1] | offset_1 = r1 << 1;
| *((r0 + offset_1)) = r3;
0x00008ee4 bne 0x8eb8 |
| } while (r2 != lr);
| label_21:
0x00008ee6 ldr r3, [pc, 0x184] |
0x00008ee8 add r3, pc | r3 = 0x11f5a;
0x00008eea ldr r5, [r3, 4] | r5 = *(0x11f5e);
0x00008eec ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x00008eee subs r4, r3, r5 | r4 = r3 - r5;
0x00008ef0 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x00008ef2 cmp r4, r3 |
0x00008ef4 it ls |
| if (r4 > r3) {
0x00008ef6 movls r3, 0x10000 | r3 = 0x10000;
| }
| if (r4 >= r3) {
0x00008efa bls 0x8f1e |
0x00008efc ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x00008efe mov r0, r4 | r0 = r4;
0x00008f00 bl 0x16b60 | r0 = fcn_00016b60 (r0, r1, r2);
0x00008f04 cmp.w r0, 0x10000 |
0x00008f08 it hs |
| if (r0 < 0x10000) {
0x00008f0a movhs r3, 1 | r3 = 1;
| }
| if (r0 >= 0x10000) {
0x00008f0c bhs 0x8f1e | goto label_5;
| }
0x00008f0e cmp r0, 0xff |
| if (r0 < 0xff) {
0x00008f10 bls 0x8fd6 | goto label_22;
| }
0x00008f12 mov r1, r0 | r1 = r0;
0x00008f14 mov.w r0, 0x10000 | r0 = 0x10000;
0x00008f18 bl 0x16b60 | r0 = fcn_00016b60 (r0, r1, r2);
0x00008f1c mov r3, r0 | r3 = r0;
| }
| label_5:
0x00008f1e ldrd r0, r1, [r7, 0x10] | __asm ("ldrd r0, r1, [r7, 0x10]");
0x00008f22 mov r2, r5 | r2 = r5;
0x00008f24 bl 0x148c8 | fcn_000148c8 (r0, r1, r2, r3);
0x00008f28 ldr r3, [pc, 0x144] |
0x00008f2a movs r2, 1 | r2 = 1;
0x00008f2c add.w r7, r7, 0x264 | r7 += 0x264;
0x00008f30 add r3, pc | r3 = 0x11fa4;
0x00008f32 str r2, [r3] | *(r3) = r2;
0x00008f34 mov sp, r7 |
0x00008f36 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_13:
0x00008f3a ldr.w r2, [sb, 0xc] | r2 = *((sb + 0xc));
0x00008f3e mov r1, r5 | r1 = r5;
0x00008f40 str.w sp, [r7, 0xc] | __asm ("str.w sp, [r7, 0xc]");
0x00008f44 adds r3, r2, 7 | r3 = r2 + 7;
0x00008f46 str r2, [r7, 0x10] | *((r7 + 0x10)) = r2;
0x00008f48 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00008f4c sub.w sp, sp, r3 |
0x00008f50 add r3, sp, 8 | r3 += var_8h;
0x00008f52 mov r0, r3 | r0 = r3;
0x00008f54 str r3, [r7, 8] | *((r7 + 8)) = r3;
0x00008f56 blx 0x159e0 | fcn_000159e0 (r0, r1);
0x00008f5a ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x00008f5c mov r0, r6 | r0 = r6;
0x00008f5e ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x00008f60 rsbs r1, r2, 0 | r1 = r2 - ;
0x00008f62 mov r2, r5 | r2 = r5;
0x00008f64 ands r1, r3 | r1 &= r3;
0x00008f66 bl 0x14bd8 | fcn_00014bd8 (r0, r1);
0x00008f68 cdp2 p0, 3, c3, c7, c1, 0 | __asm ("cdp2 p0, 3, c3, c7, c1, 0");
| if (r1 == r3) {
0x00008f6c beq 0x8fc6 | goto label_23;
| }
0x00008f6e ldr r5, [pc, 0x104] |
0x00008f70 str.w r8, [r7, 0x10] | __asm ("str.w r8, [r7, 0x10]");
0x00008f74 str r4, [r7, 4] | *((r7 + 4)) = r4;
0x00008f76 add r5, pc | r5 = 0x11ff0;
0x00008f78 ldr.w r8, [r7, 0x24] | r8 = *((r7 + 0x24));
0x00008f7c mov r4, r5 | r4 = r5;
0x00008f7e ldr r5, [r7, 8] | r5 = *((r7 + 8));
0x00008f80 b 0x8f88 |
| while (r2 == r0) {
0x00008f82 ldr r2, [r4] | r2 = *(r4);
0x00008f84 cmp r2, 4 |
| if (r2 != 4) {
0x00008f86 bne 0x8fc6 | goto label_23;
| }
0x00008f88 ldr.w r2, [sb, 0xc] | r2 = *((sb + 0xc));
0x00008f8c mov r1, r5 | r1 = r5;
0x00008f8e mov r0, r6 | r0 = r6;
0x00008f90 subs r2, 1 | r2--;
0x00008f92 and.w r2, r2, r8 | r2 &= r8;
0x00008f96 bl 0x14e64 | r0 = fcn_00014e64 ();
0x00008f9a adds r2, r0, 1 | r2 = r0 + 1;
0x00008f9c beq 0x8f82 |
| }
0x00008f9e cmp r0, 0 |
0x00008fa0 ldr.w r8, [r7, 0x10] | r8 = *((r7 + 0x10));
0x00008fa4 ldr r4, [r7, 4] | r4 = *((r7 + 4));
| if (r0 >= 0) {
0x00008fa6 blt 0x8fc6 |
0x00008fa8 ldr.w sp, [r7, 0xc] | sp = *((r7 + 0xc));
0x00008fac b 0x8d58 | goto label_2;
| label_7:
0x00008fae movs r2, 0 | r2 = 0;
0x00008fb0 mov.w r1, -1 | r1 = -1;
0x00008fb4 mov r4, r2 | r4 = r2;
0x00008fb6 mov r0, r1 | r0 = r1;
0x00008fb8 b 0x8bfe | goto label_3;
| label_15:
0x00008fba ldr r3, [pc, 0xbc] |
0x00008fbc ldr r5, [pc, 0xbc] |
0x00008fbe add r3, pc | r3 = 0x1203c;
0x00008fc0 ldr r4, [r3] | r4 = *(0x1203c);
0x00008fc2 add r5, pc | r5 = 0x12042;
0x00008fc4 b 0x8de4 | goto label_4;
| }
| label_23:
0x00008fc6 ldr r3, [pc, 0xb8] |
0x00008fc8 ldr r5, [pc, 0xb8] |
0x00008fca ldr.w sp, [r7, 0xc] | sp = *((r7 + 0xc));
0x00008fce add r3, pc | r3 = 0x12054;
0x00008fd0 ldr r4, [r3] | r4 = *(0x12054);
0x00008fd2 add r5, pc | r5 = 0x1205a;
0x00008fd4 b 0x8de4 | goto label_4;
| label_22:
0x00008fd6 cmp.w r4, 0x1000000 |
0x00008fda itete lo |
| if (r4 >= 0x1000000) {
0x00008fdc ldrlo r1, [r7, 0x14] | r1 = *((r7 + 0x14));
| }
| if (r4 < 0x1000000) {
0x00008fde lsrhs r1, r8, 9 | r1 = r8 >> 9;
| }
| if (r4 < 0x1000000) {
0x00008fe2 lslhs r0, r4, 8 | r0 = r4 << 8;
| }
| if (r4 >= 0x1000000) {
0x00008fe4 mov r0, r4 | r0 = r4;
| }
0x00008fe6 bl 0x16b60 | r0 = fcn_00016b60 (r0, r1, r2);
0x00008fea mov r1, r0 | r1 = r0;
0x00008fec mov.w r0, 0x1000000 | r0 = 0x1000000;
0x00008ff0 bl 0x16b60 | r0 = fcn_00016b60 (r0, r1, r2);
0x00008ff4 mov r3, r0 | r3 = r0;
0x00008ff6 b 0x8f1e | goto label_5;
| label_20:
0x00008ff8 ldr r1, [r7, 0x24] | r1 = *((r7 + 0x24));
0x00008ffa mov r0, r5 | r0 = r5;
0x00008ffc bl 0x15010 | fcn_00015010 (r0);
0x00009000 ldr r0, [pc, 0x84] |
0x00009002 add r0, pc | r0 = 0x1208e;
0x00009004 bl 0x8b5c | dl_fatal_printf ()
| label_10:
0x00009008 movw r4, 0x851f |
| /* if there is a right shift of 5, then it's a division by 1/100 */
0x0000900c movt r4, 0x51eb | r4 = 0x51eb851f;
0x00009010 umull r3, r4, r3, r4 | r3:r4 = r3 * r4;
0x00009014 movs r3, 0x60 | r3 = 0x60;
0x00009016 lsrs r4, r4, 5 | r4 >>= 5;
0x00009018 mul r3, r4, r3 | r3 = r4 * r3;
0x0000901c adds r3, 0x40 | r3 += 0x40;
0x0000901e str r3, [r7, 0x24] | *((r7 + 0x24)) = r3;
0x00009020 lsls r3, r4, 3 | r3 = r4 << 3;
0x00009022 str r3, [r7, 0x1c] | *((r7 + 0x1c)) = r3;
0x00009024 b 0x8c4a | goto label_6;
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x960c).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0xbec8 */
| #include <stdint.h>
|
; (fcn) fcn.0000bec8 () | void fcn_0000bec8 (uint32_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0000bec8 ldr r2, [pc, 0x64] |
0x0000beca push {r3, r4, r5, r6, r7, lr} |
0x0000becc mov r4, r1 | r4 = r1;
0x0000bece adds r1, 0x10 | r1 += 0x10;
0x0000bed0 ldr r6, [r0, -0x8] | r6 = *((r0 - 0x8));
0x0000bed4 add r2, pc | r2 = 0x17e08;
0x0000bed6 lsls r1, r1, 3 | r1 <<= 3;
0x0000bed8 ldr.w r7, [r2, 0x8fc] | r7 = *(0x18704);
0x0000bedc add.w r5, r4, 0xe | r5 = r4 + 0xe;
0x0000bee0 cmp r7, r0 |
| if (r7 == r0) {
0x0000bee2 beq 0xbf0a | goto label_3;
| }
0x0000bee4 ldr r2, [pc, 0x4c] |
0x0000bee6 subs r0, 8 | r0 -= 8;
0x0000bee8 add r2, pc | r2 = 0x17e20;
0x0000beea ldr r3, [r2] | r3 = *(0x17e20);
0x0000beec blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x0000beee mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0000bef0 cbz r0, 0xbf28 | goto label_4;
| }
0x0000bef2 adds r7, r6, 2 | r7 = r6 + 2;
0x0000bef4 lsls r7, r7, 3 | r7 <<= 3;
| do {
0x0000bef6 subs r2, r5, r6 | r2 = r5 - r6;
0x0000bef8 str r5, [r4] | *(r4) = r5;
0x0000befa lsls r2, r2, 3 | r2 <<= 3;
0x0000befc movs r1, 0 | r1 = 0;
0x0000befe adds r0, r4, r7 | r0 = r4 + r7;
0x0000bf00 blx 0x159e0 | fcn_000159e0 (r0, r1);
0x0000bf04 add.w r0, r4, 8 | r0 = r4 + 8;
0x0000bf08 pop {r3, r4, r5, r6, r7, pc} |
| label_3:
0x0000bf0a ldr r3, [pc, 0x2c] |
0x0000bf0c mov r0, r1 | r0 = r1;
0x0000bf0e add r3, pc |
0x0000bf10 ldr r3, [r3] | r3 = *(0x17e4c);
0x0000bf12 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000bf14 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0000bf16 cbz r0, 0xbf28 | goto label_4;
| }
0x0000bf18 sub.w r1, r7, 8 | r1 = r7 - 8;
0x0000bf1c adds r7, r6, 2 | r7 = r6 + 2;
0x0000bf1e lsls r7, r7, 3 | r7 <<= 3;
0x0000bf20 mov r2, r7 | r2 = r7;
0x0000bf22 blx 0x16400 | fcn_00016400 (r0, r1);
0x0000bf26 b 0xbef6 |
| } while (1);
| label_4:
0x0000bf28 ldr r0, [pc, 0x10] |
0x0000bf2a add r0, pc | r0 = 0x17e6a;
0x0000bf2c bl 0x8b5c | dl_fatal_printf ()
0x0000bf30 movs r1, 0x28 | r1 = 0x28;
0x0000bf32 movs r1, r0 | r1 = r0;
0x0000bf34 subs r0, r2, 0 | r0 = r2 - 0;
0x0000bf36 movs r1, r0 | r1 = r0;
0x0000bf38 adds r6, r4, 7 | r6 = r4 + 7;
0x0000bf3a movs r1, r0 | r1 = r0;
0x0000bf3c b 0xc00c | goto label_5;
| label_2:
0x0000bfbe ldr r2, [pc, 0x84] |
0x0000bfc0 add r2, pc | r2 = 0x1800a;
0x0000bfc2 str.w r3, [r2, 0x8e8] | __asm ("str.w r3, [r2, 0x8e8]");
| label_1:
0x0000bfc6 str.w r3, [r0, 0x258] | __asm ("str.w r3, [r0, 0x258]");
0x0000bfca pop {r4, r5, r6, pc} |
| do {
| label_0:
0x0000bfe4 sub.w r2, r3, ip | r2 = r3 - ip;
0x0000bfe8 cmp r2, r4 |
| if (r2 >= r4) {
0x0000bfea bhs 0xc00c | goto label_5;
| }
0x0000bfec add.w r2, r1, r2, lsl 3 | r2 = r1 + (r2 << 3);
0x0000bff0 ldr r6, [r2, 0xc] | r6 = *((r2 + 0xc));
| if (r6 == 0) {
0x0000bff2 cbz r6, 0xc016 | goto label_6;
| }
0x0000bff4 adds r3, 1 | r3++;
0x0000bff6 cmp lr, r3 |
0x0000bff8 bhs 0xbfe4 |
| } while (lr >= r3);
0x0000bffa ldr r3, [pc, 0x4c] |
0x0000bffc movs r2, 0x9c | r2 = 0x9c;
0x0000bffe ldr r1, [pc, 0x4c] |
0x0000c000 ldr r0, [pc, 0x4c] |
0x0000c002 add r3, pc | r3 = 0x18050;
0x0000c004 add r1, pc | r1 = 0x18056;
0x0000c006 add r0, pc | r0 = 0x1805a;
0x0000c008 bl 0xfba4 | fcn_0000fba4 (r0);
| label_5:
0x0000c00c ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x0000c00e add ip, r4 |
| if (r1 != 0) {
0x0000c010 cbz r1, 0xc018 |
0x0000c012 ldr r4, [r1] | r4 = *(r1);
0x0000c014 b 0xbfe4 | goto label_0;
| label_6:
0x0000c016 str r0, [r2, 0xc] | *((r2 + 0xc)) = r0;
| }
0x0000c018 cmp r3, r5 |
| if (r3 < r5) {
0x0000c01a bls 0xbfc6 | goto label_1;
| }
0x0000c01c adds r5, 1 | r5++;
0x0000c01e cmp r3, r5 |
| if (r3 == r5) {
0x0000c020 bne 0xc02e |
0x0000c022 ldr r2, [pc, 0x30] |
0x0000c024 movs r1, 0 | r1 = 0;
0x0000c026 add r2, pc | r2 = "ECONNRESET";
0x0000c028 strb.w r1, [r2, 0x8e4] | *((r2 + 0x8e4)) = r1;
0x0000c02c b 0xbfbe | goto label_2;
| }
0x0000c02e ldr r3, [pc, 0x28] |
0x0000c030 movs r2, 0xae | r2 = 0xae;
0x0000c032 ldr r1, [pc, 0x28] |
0x0000c034 ldr r0, [pc, 0x28] |
0x0000c036 add r3, pc | r3 = 0x18094;
0x0000c038 add r1, pc | r1 = 0x1809a;
0x0000c03a add r0, pc | r0 = 0x1809e;
0x0000c03c bl 0xfba4 | fcn_0000fba4 (r0);
0x0000c040 movs r0, 0x4c | r0 = 0x4c;
0x0000c042 movs r1, r0 | r1 = r0;
0x0000c044 movs r0, 0x3c | r0 = 0x3c;
0x0000c046 movs r1, r0 | r1 = r0;
0x0000c048 b 0xc4f8 |
0x0000c4f8 adds r7, r5, 4 | r7 = r5 + 4;
0x0000c4fa add r6, pc | r6 += pc;
| do {
0x0000c4fc adds r4, 1 | r4++;
0x0000c4fe ldr r3, [r6] | r3 = *(r6);
0x0000c500 ldr.w r0, [r7, r4, lsl 3] | offset_0 = r4 << 3;
| r0 = *((r7 + offset_0));
0x0000c504 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000c506 ldr r3, [r5, -0x8] | r3 = *((r5 - 0x8));
0x0000c50a cmp r4, r3 |
0x0000c50c blo 0xc4fc |
| } while (r4 <= r3);
0x0000c50e ldr r3, [pc, 0x38] |
0x0000c510 add r3, pc |
0x0000c512 ldr.w r3, [r3, 0x8fc] | r3 = *(0x1935a);
0x0000c516 cmp r3, r5 |
| if (r3 != r5) {
0x0000c518 beq 0xc526 |
0x0000c51a ldr r3, [pc, 0x30] |
0x0000c51c sub.w r0, r5, 8 | r0 = r5 - 8;
0x0000c520 add r3, pc |
0x0000c522 ldr r3, [r3] | r3 = *(0x18a72);
0x0000c524 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| }
0x0000c526 cmp.w sb, 0 |
| if (sb != 0) {
0x0000c52a beq 0xc540 |
0x0000c52c ldr r3, [pc, 0x20] |
0x0000c52e subw r8, r8, 0x504 | __asm ("subw r8, r8, 0x504");
0x0000c532 ldr.w r0, [r8] | r0 = *(r8);
0x0000c536 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0000c53a add r3, pc |
0x0000c53c ldr r3, [r3] | r3 = *(0x18a8e);
0x0000c53e bx r3 | return uint32_t (*r3)() ();
| }
0x0000c540 pop.w {r4, r5, r6, r7, r8, sb, sl, 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/ld-linux-armhf.so.3 @ 0xbf40 */
| #include <stdint.h>
|
; (fcn) fcn.0000bf40 () | void fcn_0000bf40 (int16_t arg1) {
| int16_t var_4h;
| r0 = arg1;
0x0000bf40 push {r4, r5, r6, lr} |
0x0000bf42 sub sp, 8 |
0x0000bf44 movs r2, 0 | r2 = 0;
0x0000bf46 add r6, sp, 4 | r6 += var_4h;
0x0000bf48 mov r5, r0 | r5 = r0;
0x0000bf4a mov r1, r6 | r1 = r6;
0x0000bf4c mov r0, r2 | r0 = r2;
0x0000bf4e bl 0xdf8c | tunable_get_val ();
0x0000bf52 ldr r4, [sp, 4] | r4 = var_4h;
0x0000bf54 movs r2, 0 | r2 = 0;
0x0000bf56 mov r1, r6 | r1 = r6;
0x0000bf58 movs r0, 0x18 | r0 = 0x18;
0x0000bf5a bl 0xdf8c | tunable_get_val ();
0x0000bf5e cmp r4, 0x10 |
0x0000bf60 mov r3, r4 | r3 = r4;
0x0000bf62 it hs |
| if (r4 < 0x10) {
0x0000bf64 movhs r3, 0x10 | r3 = 0x10;
| }
0x0000bf66 ldr r1, [sp, 4] | r1 = var_4h;
0x0000bf68 rsb.w r2, r3, 0x10 | r2 = 0x10 - r3;
0x0000bf6c cmp r2, r5 |
| if (r2 > r5) {
0x0000bf6e blo 0xbf94 |
0x0000bf70 add r3, r5 | r3 += r5;
0x0000bf72 ldr r0, [pc, 0x2c] |
0x0000bf74 subs r2, r3, 1 | r2 = r3 - 1;
0x0000bf76 ldr r4, [pc, 0x2c] |
0x0000bf78 add r3, r2 | r3 += r2;
0x0000bf7a add.w r3, r3, r3, lsl 3 | r3 += (r3 << 3);
0x0000bf7e add r0, pc | r0 = 0x17f24;
0x0000bf80 str.w r1, [r0, 0x8f8] | __asm ("str.w r1, [r0, 0x8f8]");
0x0000bf84 add r4, pc | r4 = 0x17f2e;
0x0000bf86 add.w r1, r1, r3, lsl 4 | r1 += (r3 << 4);
0x0000bf8a adds r1, 0x90 | r1 += 0x90;
0x0000bf8c str.w r1, [r4, 0x16c] | __asm ("str.w r1, [r4, 0x16c]");
0x0000bf90 add sp, 8 |
0x0000bf92 pop {r4, r5, r6, pc} |
| }
0x0000bf94 ldr r0, [pc, 0x10] |
0x0000bf96 mov r1, r5 | r1 = r5;
0x0000bf98 add r0, pc | r0 = "ENODEV";
0x0000bf9a bl 0x8b5c | dl_fatal_printf ()
0x0000bf9e nop |
0x0000bfa0 movs r0, 0x7e | r0 = 0x7e;
0x0000bfa2 movs r1, r0 | r1 = r0;
0x0000bfa4 adds r0, r4, 6 | r0 = r4 + 6;
0x0000bfa6 movs r1, r0 | r1 = r0;
0x0000bfa8 b 0xc054 |
0x0000c054 subs r6, r2, 7 | r6 = r2 - 7;
0x0000c056 movs r1, r0 | r1 = r0;
0x0000c058 b 0xc4a0 | return void (*0xc4a0)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0xda94 */
| #include <stdint.h>
|
; (fcn) fcn.0000da94 () | void fcn_0000da94 (int16_t arg1) {
| 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;
| int32_t var_20h_2;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int32_t var_38h_2;
| r0 = arg1;
0x0000da94 ldr.w r3, [pc, 0x414] |
0x0000da98 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000da9c mov sb, r0 | sb = r0;
0x0000da9e sub sp, 0x44 |
0x0000daa0 add r3, pc |
0x0000daa2 ldr r3, [r3] | r3 = *(0x1b950);
0x0000daa4 cmp r3, 0 |
| if (r3 != 0) {
0x0000daa6 bne.w 0xde68 | goto label_19;
| }
| label_14:
0x0000daaa ldr.w r3, [pc, 0x404] | r3 = *(0x0000deb0);
0x0000daae ldr.w fp, [pc, 0x404] | fp = *(0x0000deb4);
0x0000dab2 add r3, pc | r3 += pc;
0x0000dab4 str r3, [sp, 8] | var_8h = r3;
0x0000dab6 add fp, pc |
0x0000dab8 ldr r3, [pc, 0x3fc] |
0x0000daba add r3, pc | r3 = 0x1b976;
0x0000dabc strd r3, fp, [sp, 0x10] | __asm ("strd r3, fp, [var_0hx10]");
| label_1:
0x0000dac0 mov r6, sb | r6 = sb;
| label_0:
0x0000dac2 mov r5, r6 | r5 = r6;
0x0000dac4 cmp r6, 0 |
| if (r6 == 0) {
0x0000dac6 beq.w 0xdcd2 | goto label_20;
| }
0x0000daca ldr r0, [r6], 4 | r0 = *(r6);
| r6 += 4;
0x0000dace cmp r0, 0 |
| if (r0 == 0) {
0x0000dad0 beq.w 0xdcd2 | goto label_20;
| }
0x0000dad4 ldrb r3, [r0] | r3 = *(r0);
0x0000dad6 cmp r3, 0 |
0x0000dad8 it ne |
| if (r3 != 0) {
0x0000dada cmpne r3, 0x3d | __asm ("cmpne r3, 0x3d");
| }
0x0000dadc ite ne |
| if (r3 == 0) {
0x0000dade movne r4, 1 | r4 = 1;
| }
| if (r3 != 0) {
0x0000dae0 moveq r4, 0 | r4 = 0;
| }
| if (r3 == 0) {
0x0000dae2 beq 0xdafa | goto label_21;
| }
0x0000dae4 mov r2, r0 | r2 = r0;
| do {
0x0000dae6 mov r1, r2 | r1 = r2;
0x0000dae8 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x0000daec cmp r3, 0 |
0x0000daee it ne |
| if (r3 != 0) {
0x0000daf0 cmpne r3, 0x3d | __asm ("cmpne r3, 0x3d");
| }
0x0000daf2 bne 0xdae6 |
| } while (r3 != 0);
0x0000daf4 rsb.w r4, r0, 1 | r4 = 1 - r0;
0x0000daf8 add r4, r1 | r4 += r1;
| label_21:
0x0000dafa cmp r3, 0 |
| if (r3 == 0) {
0x0000dafc beq 0xdac2 | goto label_0;
| }
0x0000dafe mov r8, r0 | r8 = r0;
0x0000db00 ldr r0, [pc, 0x3b8] |
0x0000db02 adds r4, 1 | r4++;
0x0000db04 mov sb, r6 | sb = r6;
0x0000db06 add.w fp, r8, r4 |
0x0000db0a mov r1, r8 | r1 = r8;
0x0000db0c add r0, pc | r0 = 0x1b9cc;
0x0000db0e movs r3, 0x47 | r3 = 0x47;
0x0000db10 b 0xdb1a |
| while (r3 == 0) {
0x0000db12 ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x0000db16 cmp r3, 0 |
| if (r3 == 0) {
0x0000db18 beq 0xdbca | goto label_22;
| }
0x0000db1a ldrb r2, [r1], 1 | r2 = *(r1);
| r1++;
0x0000db1e subs r3, r2, r3 | r3 = r2 - r3;
0x0000db20 it ne |
| if (r3 == r2) {
0x0000db22 movne r3, 1 | r3 = 1;
| }
0x0000db24 cmp r2, 0 |
0x0000db26 it eq |
| if (r2 != 0) {
0x0000db28 orreq r3, r3, 1 | r3 |= 1;
| }
0x0000db2c cmp r3, 0 |
0x0000db2e beq 0xdb12 |
| }
| label_4:
0x0000db30 ldr r7, [pc, 0x38c] |
0x0000db32 movs r4, 0 | r4 = 0;
0x0000db34 mov ip, r4 |
0x0000db36 add r7, pc | r7 = 0x1b9fa;
0x0000db38 b 0xdb4a | goto label_23;
| label_2:
0x0000db3a add.w ip, ip, 1 |
0x0000db3e adds r7, 0x70 | r7 += 0x70;
0x0000db40 cmp.w ip, 0x1b |
0x0000db44 add.w r4, r4, 0x70 | r4 += 0x70;
| if (ip == 0x1b) {
0x0000db48 beq 0xdac0 | goto label_1;
| }
| label_23:
0x0000db4a ldrb.w r3, [r7, 0x50] | r3 = *((r7 + 0x50));
0x0000db4e cmp r3, 0 |
| if (r3 != 0) {
0x0000db50 bne 0xdb3a | goto label_2;
| }
0x0000db52 ldrb.w r6, [r7, 0x58] | r6 = *((r7 + 0x58));
0x0000db56 cmp r6, 0 |
| if (r6 == 0) {
0x0000db58 beq 0xdb3a | goto label_2;
| }
0x0000db5a add.w lr, r7, 0x58 | lr = r7 + 0x58;
0x0000db5e mov r0, r8 | r0 = r8;
0x0000db60 mov sl, lr | sl = lr;
0x0000db62 mov r1, r6 | r1 = r6;
| label_3:
0x0000db64 ldrb r2, [r0], 1 | r2 = *(r0);
| r0++;
0x0000db68 clz r3, r2 | r3 &= r2;
0x0000db6c lsrs r3, r3, 5 | r3 >>= 5;
0x0000db6e cmp r2, r1 |
0x0000db70 it ne |
| if (r2 == r1) {
0x0000db72 orrne r3, r3, 1 | r3 |= 1;
| }
0x0000db76 cmp r3, 0 |
| if (r3 != 0) {
0x0000db78 bne 0xdb3a | goto label_2;
| }
0x0000db7a ldrb r1, [sl, 1]! | r1 = *((sl += 1));
0x0000db7e cmp r1, 0 |
| if (r1 != 0) {
0x0000db80 bne 0xdb64 | goto label_3;
| }
0x0000db82 ldrb r3, [r0] | r3 = *(r0);
0x0000db84 cmp r3, 0x3d |
| if (r3 != 0x3d) {
0x0000db86 bne 0xdb3a | goto label_2;
| }
0x0000db88 ldr r3, [sp, 8] | r3 = var_8h;
0x0000db8a ldr r3, [r3] | r3 = *(r3);
| if (r3 == 0) {
0x0000db8c cbz r3, 0xdb98 | goto label_24;
| }
0x0000db8e ldr r3, [r7, 0x54] | r3 = *((r7 + 0x54));
0x0000db90 cmp r3, 0 |
| if (r3 == 0) {
0x0000db92 beq 0xdc76 | goto label_25;
| }
| label_8:
0x0000db94 cmp r3, 2 |
| if (r3 != 2) {
0x0000db96 bne 0xdb3a | goto label_2;
| }
| label_24:
0x0000db98 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000db9a rsb ip, ip, ip, lsl 3 |
0x0000db9e add.w r3, r3, ip, lsl 4 | r3 += (ip << 4);
0x0000dba2 ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x0000dba4 cmp r3, 3 |
0x0000dba6 it eq |
| if (r3 != 3) {
0x0000dba8 streq fp, [sp, 0x38] | var_38h = fp;
| }
| if (r3 != 3) {
0x0000dbac beq 0xdbba |
0x0000dbae movs r1, 0 | r1 = 0;
0x0000dbb0 mov r0, fp | r0 = fp;
0x0000dbb2 bl 0x74e4 | fcn_000074e4 (r0, r1);
0x0000dbb6 strd r0, r1, [sp, 0x38] | __asm ("strd r0, r1, [var_38h]");
| }
0x0000dbba ldr r0, [sp, 0x10] | r0 = var_10h;
0x0000dbbc movs r3, 0 | r3 = 0;
0x0000dbbe add r1, sp, 0x38 | r1 += var_38h;
0x0000dbc0 mov r2, r3 | r2 = r3;
0x0000dbc2 add r0, r4 | r0 += r4;
0x0000dbc4 bl 0xd954 | fcn_0000d954 (r0, r1, r2, r3);
0x0000dbc8 b 0xdac0 | goto label_1;
| label_22:
0x0000dbca ldrb r3, [r1] | r3 = *(r1);
0x0000dbcc cmp r3, 0x3d |
| if (r3 != 0x3d) {
0x0000dbce bne 0xdb30 | goto label_4;
| }
0x0000dbd0 add.w r3, r8, -1 | r3 = r8 + -1;
| do {
0x0000dbd4 mov r1, r3 | r1 = r3;
0x0000dbd6 ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x0000dbda cmp r2, 0 |
0x0000dbdc bne 0xdbd4 |
| } while (r2 != 0);
0x0000dbde rsb.w r7, r8, 1 | r7 = 1 - r8;
0x0000dbe2 add r7, r1 | r7 += r1;
0x0000dbe4 adds r0, r7, 2 | r0 = r7 + 2;
0x0000dbe6 bl 0x7290 | r0 = fcn_00007290 (r0);
0x0000dbea mov r6, r0 | r6 = r0;
0x0000dbec cmp r0, 0 |
| if (r0 == 0) {
0x0000dbee beq.w 0xde9c | goto label_26;
| }
0x0000dbf2 adds r2, r7, 1 | r2 = r7 + 1;
0x0000dbf4 add.w r3, r8, r2 | r3 = r8 + r2;
0x0000dbf8 add r2, r0 | r2 += r0;
| do {
0x0000dbfa ldrb r1, [r3, -0x1]! | r1 = *((r3 -= 0x1));
0x0000dbfe cmp r3, r8 |
0x0000dc00 strb r1, [r2, -0x1]! | *((r2 -= 0x1)) = r1;
0x0000dc04 bne 0xdbfa |
| } while (r3 != r8);
0x0000dc06 ldrb.w sl, [r6, r4] | sl = *((r6 + r4));
0x0000dc0a adds r2, r6, r4 | r2 = r6 + r4;
0x0000dc0c str r2, [sp, 0xc] | var_ch = r2;
0x0000dc0e cmp.w sl, 0 |
| if (sl == 0) {
0x0000dc12 beq 0xdc72 | goto label_27;
| }
0x0000dc14 ldr r3, [pc, 0x2ac] |
0x0000dc16 cmp.w sl, 0x3d |
0x0000dc1a it ne |
| if (sl != 0x3d) {
0x0000dc1c cmpne sl, 0x3a | __asm ("cmpne sl, 0x3a");
| }
0x0000dc20 strd r5, sb, [sp, 0x24] | __asm ("strd r5, sb, [var_28h]");
0x0000dc24 mov ip, r2 |
0x0000dc26 mov sb, fp | sb = fp;
0x0000dc28 add r3, pc | r3 = 0x1baf0;
0x0000dc2a ldr r0, [r3] | r0 = *(0x1baf0);
0x0000dc2c ldr r3, [pc, 0x298] |
0x0000dc2e add r3, pc | r3 = 0x1bafa;
0x0000dc30 str r3, [sp, 0x30] | var_30h = r3;
0x0000dc32 ldr r3, [pc, 0x298] |
0x0000dc34 add r3, pc | r3 = 0x1bb06;
0x0000dc36 str r3, [sp, 0x34] | var_34h = r3;
0x0000dc38 ldr r3, [pc, 0x294] |
0x0000dc3a add r3, pc | r3 = 0x1bb0e;
0x0000dc3c str r3, [sp, 0x2c] | var_2ch = r3;
0x0000dc3e mov.w r3, 0 | r3 = 0;
0x0000dc42 strd r3, r6, [sp, 0x1c] | __asm ("strd r3, r6, [var_20h]");
| if (sl == 0x3d) {
0x0000dc46 beq.w 0xdd82 | goto label_28;
| }
| label_10:
0x0000dc4a mov r3, sl | r3 = sl;
0x0000dc4c mov r2, ip | r2 = ip;
| if (r3 == 0) {
0x0000dc4e cbz r3, 0xdc62 | goto label_29;
| }
| do {
0x0000dc50 ldrb r3, [r2, 1] | r3 = *((r2 + 1));
0x0000dc52 adds r1, r2, 1 | r1 = r2 + 1;
0x0000dc54 cmp r3, 0x3d |
0x0000dc56 it ne |
| if (r3 != 0x3d) {
0x0000dc58 cmpne r3, 0x3a | __asm ("cmpne r3, 0x3a");
| }
| if (r3 == 0x3d) {
0x0000dc5a beq 0xdcd8 | goto label_30;
| }
0x0000dc5c mov r2, r1 | r2 = r1;
0x0000dc5e cmp r3, 0 |
0x0000dc60 bne 0xdc50 |
| } while (r3 != 0);
| label_29:
0x0000dc62 ldrd r6, r5, [sp, 0x20] | __asm ("ldrd r6, r5, [var_20h]");
0x0000dc66 ldr.w sb, [sp, 0x28] | sb = var_28h;
| if (r0 != 0) {
0x0000dc6a cbz r0, 0xdc72 |
0x0000dc6c ldr r2, [sp, 0xc] | r2 = var_ch;
0x0000dc6e ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0000dc70 strb r3, [r2, r1] | *((r2 + r1)) = r3;
| }
| label_27:
0x0000dc72 str r6, [r5] | *(r5) = r6;
0x0000dc74 b 0xdac0 | goto label_1;
| label_25:
0x0000dc76 ldr r1, [r5] | r1 = *(r5);
0x0000dc78 mov sb, r5 | sb = r5;
0x0000dc7a cmp r1, 0 |
| if (r1 == 0) {
0x0000dc7c beq.w 0xdb3a | goto label_2;
| }
0x0000dc80 mov r2, r5 | r2 = r5;
0x0000dc82 mov r0, r1 | r0 = r1;
| if (r6 == 0) {
0x0000dc84 cbz r6, 0xdcb4 | goto label_31;
| }
| label_5:
0x0000dc86 mov sb, lr | sb = lr;
0x0000dc88 b 0xdc90 |
| while (r3 == 0) {
0x0000dc8a ldrb r6, [sb, 1]! | r6 = *((sb += 1));
| if (r6 == 0) {
0x0000dc8e cbz r6, 0xdcb4 | goto label_31;
| }
0x0000dc90 ldrb r1, [r0], 1 | r1 = *(r0);
| r0++;
0x0000dc94 clz r3, r1 | r3 &= r1;
0x0000dc98 lsrs r3, r3, 5 | r3 >>= 5;
0x0000dc9a cmp r1, r6 |
0x0000dc9c it ne |
| if (r1 == r6) {
0x0000dc9e orrne r3, r3, 1 | r3 |= 1;
| }
0x0000dca2 cmp r3, 0 |
0x0000dca4 beq 0xdc8a |
| }
| label_6:
0x0000dca6 ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x0000dca8 adds r2, 4 | r2 += 4;
| if (r0 == 0) {
0x0000dcaa cbz r0, 0xdccc | goto label_32;
| }
| label_7:
0x0000dcac ldrb.w r6, [r7, 0x58] | r6 = *((r7 + 0x58));
0x0000dcb0 cmp r6, 0 |
| if (r6 != 0) {
0x0000dcb2 bne 0xdc86 | goto label_5;
| }
| label_31:
0x0000dcb4 ldrb r3, [r0] | r3 = *(r0);
0x0000dcb6 cmp r3, 0x3d |
| if (r3 != 0x3d) {
0x0000dcb8 bne 0xdca6 | goto label_6;
| }
0x0000dcba mov r3, r2 | r3 = r2;
| do {
0x0000dcbc ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x0000dcbe str r1, [r3], 4 | *(r3) = r1;
| r3 += 4;
0x0000dcc2 cmp r1, 0 |
0x0000dcc4 bne 0xdcbc |
| } while (r1 != 0);
0x0000dcc6 ldr r0, [r2] | r0 = *(r2);
0x0000dcc8 cmp r0, 0 |
| if (r0 != 0) {
0x0000dcca bne 0xdcac | goto label_7;
| }
| label_32:
0x0000dccc ldr r3, [r7, 0x54] | r3 = *((r7 + 0x54));
0x0000dcce mov sb, r5 | sb = r5;
0x0000dcd0 b 0xdb94 | goto label_8;
| label_20:
0x0000dcd2 add sp, 0x44 |
0x0000dcd4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_30:
0x0000dcd8 rsb.w r1, ip, 2 | r1 = 2 - ip;
0x0000dcdc add r2, r1 | r2 += r1;
| label_11:
0x0000dcde cmp r3, 0x3a |
0x0000dce0 add.w r6, ip, r2 | r6 = ip + r2;
| if (r3 == 0x3a) {
0x0000dce4 beq 0xdd6e | goto label_33;
| }
0x0000dce6 ldrb.w r4, [ip, r2] | r4 = *((ip + r2));
0x0000dcea ldr r3, [sp, 0xc] | r3 = var_ch;
0x0000dcec cmp r4, 0 |
0x0000dcee it ne |
| if (r4 != 0) {
0x0000dcf0 cmpne r4, 0x3a | __asm ("cmpne r4, 0x3a");
| }
0x0000dcf2 sub.w r3, r6, r3 | r3 = r6 - r3;
0x0000dcf6 it ne |
| if (r4 == 0) {
0x0000dcf8 movne r4, 1 | r4 = 1;
| }
0x0000dcfa add r3, sb | r3 += sb;
0x0000dcfc it eq |
| if (r4 != 0) {
0x0000dcfe moveq r4, 0 | r4 = 0;
| }
0x0000dd00 str r3, [sp, 0x18] | var_18h = r3;
| if (r4 == 0) {
0x0000dd02 beq.w 0xde8e | goto label_34;
| }
0x0000dd06 adds r3, r6, 1 | r3 = r6 + 1;
0x0000dd08 movs r4, 0 | r4 = 0;
| do {
0x0000dd0a mov r5, r3 | r5 = r3;
0x0000dd0c ldrb r2, [r3], 1 | r2 = *(r3);
| r3++;
0x0000dd10 adds r4, 1 | r4++;
0x0000dd12 cmp r2, 0x3a |
0x0000dd14 it ne |
| if (r2 != 0x3a) {
0x0000dd16 cmpne r2, 0 | __asm ("cmpne r2, 0");
| }
0x0000dd18 bne 0xdd0a |
| } while (r2 != 0x3a);
| label_16:
0x0000dd1a ldr r7, [pc, 0x1b8] |
0x0000dd1c mov.w fp, 0 |
0x0000dd20 mov r2, sl | r2 = sl;
0x0000dd22 mov lr, r0 | lr = r0;
0x0000dd24 add r7, pc | r7 = 0x1bbfe;
| label_9:
0x0000dd26 ldrb r0, [r7] | r0 = *(r7);
0x0000dd28 str r7, [sp, 4] | var_4h = r7;
0x0000dd2a cmp r0, 0 |
| if (r0 == 0) {
0x0000dd2c beq.w 0xde8a | goto label_35;
| }
0x0000dd30 mov r1, ip | r1 = ip;
0x0000dd32 mov sl, r7 | sl = r7;
0x0000dd34 mov r3, r0 | r3 = r0;
0x0000dd36 b 0xdd3e |
| while (r3 == 0) {
0x0000dd38 ldrb r3, [sl, 1]! | r3 = *((sl += 1));
| if (r3 == 0) {
0x0000dd3c cbz r3, 0xdd88 | goto label_36;
| }
0x0000dd3e ldrb r8, [r1], 1 | r8 = *(r1);
| r1++;
0x0000dd42 subs.w r3, r8, r3 | r3 = r8 - r3;
0x0000dd46 it ne |
| if (r3 == r8) {
0x0000dd48 movne r3, 1 | r3 = 1;
| }
0x0000dd4a cmp.w r8, 0 |
0x0000dd4e it eq |
| if (r8 != 0) {
0x0000dd50 orreq r3, r3, 1 | r3 |= 1;
| }
0x0000dd54 cmp r3, 0 |
0x0000dd56 beq 0xdd38 |
| }
| label_12:
0x0000dd58 add.w fp, fp, 1 |
0x0000dd5c adds r7, 0x70 | r7 += 0x70;
0x0000dd5e cmp.w fp, 0x1b |
| if (fp != 0x1b) {
0x0000dd62 bne 0xdd26 | goto label_9;
| }
0x0000dd64 mov r0, lr | r0 = lr;
| label_13:
0x0000dd66 ldrb r3, [r5] | r3 = *(r5);
| if (r3 != 0) {
0x0000dd68 cbz r3, 0xdd6e |
0x0000dd6a adds r4, 1 | r4++;
0x0000dd6c add r6, r4 | r6 += r4;
| }
| label_33:
0x0000dd6e ldrb.w sl, [r6] | sl = *(r6);
0x0000dd72 mov ip, r6 |
0x0000dd74 cmp.w sl, 0x3d |
0x0000dd78 it ne |
| if (sl == 0x3d) {
0x0000dd7a cmpne sl, 0x3a | __asm ("cmpne sl, 0x3a");
| goto label_37;
| }
| if (sl != 0x3d) {
| label_37:
0x0000dd7e bne.w 0xdc4a | goto label_10;
| }
| label_28:
0x0000dd82 mov r3, sl | r3 = sl;
0x0000dd84 movs r2, 1 | r2 = 1;
0x0000dd86 b 0xdcde | goto label_11;
| label_36:
0x0000dd88 ldrb r3, [r1] | r3 = *(r1);
| label_15:
0x0000dd8a cmp r3, 0x3d |
| if (r3 != 0x3d) {
0x0000dd8c bne 0xdd58 | goto label_12;
| }
0x0000dd8e mov r3, lr | r3 = lr;
0x0000dd90 mov lr, r0 | lr = r0;
0x0000dd92 mov r0, r3 | r0 = r3;
0x0000dd94 ldr.w r8, [sp, 4] | r8 = var_4h;
0x0000dd98 lsl.w r3, fp, 3 | r3 = fp << 3;
0x0000dd9c cmp r0, 0 |
| if (r0 == 0) {
0x0000dd9e beq 0xde32 | goto label_38;
| }
0x0000dda0 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0000dda2 sub.w r2, r3, fp | r2 = r3 - fp;
0x0000dda6 add.w r2, r1, r2, lsl 4 | r2 = r1 + (r2 << 4);
0x0000ddaa ldr r2, [r2, 0x54] | r2 = *((r2 + 0x54));
0x0000ddac cmp r2, 0 |
| if (r2 == 0) {
0x0000ddae beq 0xdd66 | goto label_13;
| }
0x0000ddb0 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0000ddb2 cmp r1, 0 |
| if (r1 == 0) {
0x0000ddb4 beq 0xde92 | goto label_39;
| }
0x0000ddb6 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0000ddb8 movs r2, 0x3a | r2 = 0x3a;
0x0000ddba add.w ip, r1, 1 |
0x0000ddbe str.w ip, [sp, 0x1c] | __asm ("str.w ip, [var_1ch]");
0x0000ddc2 strb r2, [r0, r1] | *((r0 + r1)) = r2;
0x0000ddc4 adds r1, 2 | r1 += 2;
0x0000ddc6 ldrb.w lr, [r7] |
0x0000ddca add.w r2, r0, ip | r2 = r0 + ip;
| label_17:
0x0000ddce cmp.w lr, 0 |
| if (lr == 0) {
0x0000ddd2 beq 0xde98 | goto label_40;
| }
0x0000ddd4 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0000ddd6 mov r0, lr | r0 = lr;
0x0000ddd8 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0000ddda subs r2, 1 | r2--;
0x0000dddc add r2, r1 | r2 += r1;
| do {
0x0000ddde mov r1, r2 | r1 = r2;
0x0000dde0 strb r0, [r2, 1]! | *((r2 += 1)) = r0;
0x0000dde4 ldrb r0, [r7, 1]! | r0 = *((r7 += 1));
0x0000dde8 cmp r0, 0 |
0x0000ddea bne 0xddde |
| } while (r0 != 0);
0x0000ddec ldr r0, [sp, 0xc] | r0 = var_ch;
0x0000ddee rsb.w r2, r0, 2 | r2 = 2 - r0;
0x0000ddf0 lsls r2, r0, 8 | r2 = r0 << 8;
0x0000ddf2 add r2, r1 | r2 += r1;
0x0000ddf4 adds r1, r2, 1 | r1 = r2 + 1;
0x0000ddf6 add r2, r0 | r2 += r0;
0x0000ddf8 str r1, [sp, 0x1c] | var_1ch = r1;
| label_18:
0x0000ddfa movs r1, 0x3d | r1 = 0x3d;
0x0000ddfc strb r1, [r2] | *(r2) = r1;
| if (r4 == 0) {
0x0000ddfe cbz r4, 0xde20 | goto label_41;
| }
0x0000de00 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0000de02 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0000de04 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0000de06 subs r2, 1 | r2--;
0x0000de08 subs r1, 1 | r1--;
0x0000de0a adds r7, r2, r4 | r7 = r2 + r4;
0x0000de0c add r1, r0 | r1 += r0;
| do {
0x0000de0e ldrb r0, [r2, 1]! | r0 = *((r2 += 1));
0x0000de12 cmp r2, r7 |
0x0000de14 strb r0, [r1, 1]! | *((r1 += 1)) = r0;
0x0000de18 bne 0xde0e |
| } while (r2 != r7);
0x0000de1a ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0000de1c add r2, r4 | r2 += r4;
0x0000de1e str r2, [sp, 0x1c] | var_1ch = r2;
| label_41:
0x0000de20 ldr r2, [pc, 0xb4] |
0x0000de22 sub.w r1, r3, fp | r1 = r3 - fp;
0x0000de26 add r2, pc | r2 = 0x1bd02;
0x0000de28 add.w r2, r2, r1, lsl 4 | r2 += (r1 << 4);
0x0000de2c ldr r2, [r2, 0x54] | r2 = *((r2 + 0x54));
0x0000de2e cmp r2, 2 |
| if (r2 != 2) {
0x0000de30 bne 0xdea4 | goto label_42;
| }
| label_38:
0x0000de32 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0000de34 sub.w r3, r3, fp | r3 -= fp;
0x0000de38 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0000de3a movs r1, 0 | r1 = 0;
0x0000de3c add.w r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
0x0000de40 strb r1, [r0, r4] | *((r0 + r4)) = r1;
0x0000de42 ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x0000de44 cmp r3, 3 |
| if (r3 == 3) {
0x0000de46 beq 0xde62 | goto label_43;
| }
0x0000de48 bl 0x74e4 | fcn_000074e4 (r0, r1);
0x0000de4c strd r0, r1, [sp, 0x38] | __asm ("strd r0, r1, [var_38h]");
| do {
0x0000de50 movs r3, 0 | r3 = 0;
0x0000de52 mov r0, r8 | r0 = r8;
0x0000de54 mov r2, r3 | r2 = r3;
0x0000de56 add r1, sp, 0x38 | r1 += var_38h;
0x0000de58 bl 0xd954 | fcn_0000d954 (r0, r1, r2, r3);
0x0000de5c ldr r3, [sp, 0x34] | r3 = var_34h;
0x0000de5e ldr r0, [r3] | r0 = *(r3);
0x0000de60 b 0xdd66 | goto label_13;
| label_43:
0x0000de62 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0000de64 str r3, [sp, 0x38] | var_38h = r3;
0x0000de66 b 0xde50 |
| } while (1);
| label_19:
0x0000de68 ldr r0, [pc, 0x70] |
0x0000de6a movs r1, 0 | r1 = 0;
0x0000de6c mov.w ip, 0x21 |
0x0000de70 add r0, pc | r0 = 0x1bd50;
0x0000de72 bl 0x13fd0 | r0 = fcn_00013fd0 ();
0x0000de76 cmn.w r0, 0x1000 |
| if (r0 > 0x1000) {
0x0000de7a bhi.w 0xdaaa | goto label_14;
| }
0x0000de7e ldr r3, [pc, 0x60] |
0x0000de80 movs r2, 2 | r2 = 2;
0x0000de82 add r3, pc | r3 = 0x1bd68;
0x0000de84 str.w r2, [r3, 0xbb4] | __asm ("str.w r2, [r3, 0xbb4]");
0x0000de88 b 0xdaaa | goto label_14;
| label_35:
0x0000de8a mov r3, r2 | r3 = r2;
0x0000de8c b 0xdd8a | goto label_15;
| label_34:
0x0000de8e mov r5, r6 | r5 = r6;
0x0000de90 b 0xdd1a | goto label_16;
| label_39:
0x0000de92 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0000de94 movs r1, 1 | r1 = 1;
0x0000de96 b 0xddce | goto label_17;
| label_40:
0x0000de98 str r1, [sp, 0x1c] | var_1ch = r1;
0x0000de9a b 0xddfa | goto label_18;
| label_26:
0x0000de9c ldr r0, [pc, 0x44] |
0x0000de9e add r0, pc | r0 = 0x1bd86;
0x0000dea0 bl 0x8b5c | dl_fatal_printf ()
| label_42:
0x0000dea4 ldr r3, [pc, 0x40] |
0x0000dea6 add r3, pc | r3 = 0x1bd92;
0x0000dea8 ldr r0, [r3] | r0 = *(0x1bd92);
0x0000deaa b 0xdd66 | goto label_13;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0xf01c */
| #include <stdint.h>
|
; (fcn) fcn.0000f01c () | void fcn_0000f01c (uint32_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int32_t var_8h;
| int32_t var_8h_2;
| int16_t var_10h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0000f01c ldr.w ip, [pc, 0x6c] |
0x0000f020 mov r5, r1 | r5 = r1;
0x0000f022 push {r7, lr} |
0x0000f024 mov r4, r2 | r4 = r2;
0x0000f026 sub.w sp, sp, 0x410 |
0x0000f02a mov r6, r3 | r6 = r3;
0x0000f02c add ip, pc | ip = 0x1e0bc;
0x0000f02e ldr.w r7, [ip] |
0x0000f032 ldr r7, [r7] | r7 = GLIBC_PRIVATE;
| if (r7 == 0) {
0x0000f034 cbz r7, 0xf07c | goto label_2;
| }
| if (r4 == 0) {
0x0000f036 cbz r4, 0xf084 | goto label_3;
| }
| label_1:
0x0000f038 ldrb r3, [r5] | r3 = *(r5);
| if (r3 == 0) {
0x0000f03a cbz r3, 0xf062 | goto label_4;
| }
0x0000f03c ldr.w r8, [pc, 0x50] |
0x0000f040 add r8, pc | r8 = 0x1e0d4;
| if (r0 != 0) {
0x0000f042 cbnz r0, 0xf06c | goto label_5;
| }
| do {
0x0000f044 ldr r3, [pc, 0x4c] |
0x0000f046 add r3, pc | r3 = 0x1e0de;
0x0000f048 mov r0, r3 | r0 = r3;
| label_0:
0x0000f04a strd r3, r0, [sp, 8] | __asm ("strd r3, r0, [var_8h]");
0x0000f04e mov r2, r4 | r2 = r4;
0x0000f050 ldr r0, [pc, 0x44] |
0x0000f052 mov r3, r5 | r3 = r5;
0x0000f054 mov r1, r7 | r1 = r7;
0x0000f056 str r6, [sp, 4] | var_4h = r6;
0x0000f058 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0000f05c add r0, pc | r0 = 0x1e0f8;
0x0000f05e bl 0x8b5c | dl_fatal_printf ()
| label_4:
0x0000f062 ldr.w r8, [pc, 0x38] | r8 = *(0x0000f09c);
0x0000f066 add r8, pc | r8 += pc;
0x0000f068 cmp r0, 0 |
0x0000f06a beq 0xf044 |
| } while (r0 == 0);
| label_5:
0x0000f06c mov.w r2, 0x400 | r2 = 0x400;
0x0000f070 add r1, sp, 0x10 | r1 += var_10h;
0x0000f072 bl 0xfa88 | fcn_0000fa88 (r0, r1);
0x0000f076 ldr r3, [pc, 0x28] |
0x0000f078 add r3, pc | r3 = 0x1e11e;
0x0000f07a b 0xf04a | goto label_0;
| label_2:
0x0000f07c ldr r7, [pc, 0x24] |
0x0000f07e add r7, pc | r7 = 0x1e126;
0x0000f080 cmp r4, 0 |
| if (r4 != 0) {
0x0000f082 bne 0xf038 | goto label_1;
| }
| label_3:
0x0000f084 ldr r4, [pc, 0x20] |
0x0000f086 add r4, pc | r4 = 0x1e132;
0x0000f088 b 0xf038 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0xfb8c */
| #include <stdint.h>
|
; (fcn) fcn.0000fb8c () | void fcn_0000fb8c (int16_t arg_338h, int16_t arg1) {
| r0 = arg1;
0x0000fb8c mov r1, r0 | r1 = r0;
0x0000fb8e ldr r0, [pc, 8] | r0 = *(0x0000fb98);
0x0000fb90 push {r3, lr} |
0x0000fb92 add r0, pc | r0 += pc;
0x0000fb94 bl 0x8b5c | dl_fatal_printf ()
0x0000fb98 str r0, [sp, 0x338] | *(arg_338h) = r0;
0x0000fb9a movs r0, r0 |
0x0000fb9c movs r0, 0x7f | r0 = 0x7f;
0x0000fb9e push {r3, lr} |
0x0000fba0 bl 0x151e8 | fcn_000151e8 (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/ld-linux-armhf.so.3 @ 0xfba4 */
| #include <stdint.h>
|
; (fcn) fcn.0000fba4 () | void fcn_0000fba4 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
0x0000fba4 push {lr} |
0x0000fba6 sub sp, 0xc |
| if (r3 == 0) {
0x0000fba8 cbz r3, 0xfbba | goto label_0;
| }
0x0000fbaa ldr r4, [pc, 0x18] |
0x0000fbac add r4, pc | r4 = 0x1f776;
| do {
0x0000fbae str r0, [sp, 4] | var_4h = r0;
0x0000fbb0 ldr r0, [pc, 0x14] |
0x0000fbb2 str r4, [sp] | *(sp) = r4;
0x0000fbb4 add r0, pc | r0 = 0x1f780;
0x0000fbb6 bl 0x8b5c | dl_fatal_printf ()
| label_0:
0x0000fbba ldr r3, [pc, 0x10] |
0x0000fbbc add r3, pc | r3 = 0x1f78e;
0x0000fbbe mov r4, r3 | r4 = r3;
0x0000fbc0 b 0xfbae |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x10b30 */
| #include <stdint.h>
|
; (fcn) fcn.00010b30 () | void fcn_00010b30 (int16_t arg1) {
| r0 = arg1;
0x00010b30 push {r3, r4, r5, r6, r7, lr} |
0x00010b32 ldr r4, [pc, 0xdc] |
0x00010b34 add r4, pc | r4 = 0x2174a;
0x00010b36 ldr.w r7, [r4, 0x8fc] | r7 = *(0x22046);
0x00010b3a ldr.w r6, [r4, 0x8e8] | r6 = *(0x22032);
0x00010b3e str.w r6, [r4, 0x8f0] | __asm ("str.w r6, [r4, 0x8f0]");
0x00010b42 cmp r7, 0 |
| if (r7 != 0) {
0x00010b44 bne 0x10bd6 | goto label_2;
| }
0x00010b46 ldr r3, [pc, 0xcc] | r3 = *(0x10c16);
| label_1:
0x00010b48 mov r5, r0 | r5 = r0;
0x00010b4a add.w r0, r6, 0x40 | r0 = r6 + 0x40;
0x00010b4e movs r1, 1 | r1 = 1;
0x00010b50 lsls r0, r0, 3 | r0 <<= 3;
0x00010b52 adds r6, 0x3f | r6 += 0x3f;
0x00010b54 add r3, pc | r3 += pc;
0x00010b56 ldr r3, [r3] | r3 = *(r3);
0x00010b58 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00010b5a ldr r2, [r4, 0x58] | r2 = *((r4 + 0x58));
0x00010b5c mov ip, r0 |
0x00010b5e str.w r0, [r4, 0x8ec] | __asm ("str.w r0, [r4, 0x8ec]");
0x00010b62 str r6, [ip], 8 | *(ip) = r6;
| ip += 8;
0x00010b66 str r7, [r0, 4] | *((r0 + 4)) = r7;
0x00010b68 cmp r2, 0 |
| if (r2 != 0) {
0x00010b6a bne 0x10be0 | goto label_3;
| }
0x00010b6c ldr r3, [r4] | r3 = *(r4);
| if (r3 == 0) {
0x00010b6e cbz r3, 0x10bdc | goto label_4;
| }
| do {
0x00010b70 ldr.w r1, [r3, 0x248] | r1 = *((r3 + 0x248));
| if (r1 != 0) {
0x00010b74 cbz r1, 0x10b7e |
0x00010b76 add.w r1, ip, r2, lsl 3 | r1 = ip + (r2 << 3);
0x00010b7a adds r2, 1 | r2++;
0x00010b7c str r3, [r1, 4] | *((r1 + 4)) = r3;
| }
0x00010b7e ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00010b80 cmp r3, 0 |
0x00010b82 bne 0x10b70 |
| } while (r3 != 0);
| do {
0x00010b84 ldr r6, [pc, 0x90] |
0x00010b86 add r6, pc | r6 = 0x217a2;
0x00010b88 ldr.w r3, [r6, 0x8e8] | r3 = *(0x2208a);
0x00010b8c cmp r3, r2 |
| if (r3 != r2) {
0x00010b8e bne 0x10bf4 | goto label_5;
| }
0x00010b90 mov r0, r5 | r0 = r5;
0x00010b92 bl 0xbf40 | r0 = fcn_0000bf40 (r0);
0x00010b96 bl 0xc0a8 | fcn_0000c0a8 ();
0x00010b9a bl 0xc230 | r0 = fcn_0000c230 ();
0x00010b9e mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00010ba0 cbz r0, 0x10c08 | goto label_6;
| }
0x00010ba2 ldr r3, [r0] | r3 = *(r0);
| label_0:
0x00010ba4 mov.w ip, 5 |
0x00010ba8 movt ip, 0xf |
0x00010bac str.w r3, [r6, 0x8fc] | __asm ("str.w r3, [r6, 0x8fc]");
0x00010bb0 bl 0x13fd0 | r0 = fcn_00013fd0 ();
0x00010bb4 cmn.w r0, 0x1000 |
| if (r0 <= 0x1000) {
0x00010bb8 bhi 0x10bca |
0x00010bba bl 0xc974 | fcn_0000c974 ();
0x00010bbe ldr r3, [pc, 0x5c] |
0x00010bc0 movs r2, 1 | r2 = 1;
0x00010bc2 mov r0, r4 | r0 = r4;
0x00010bc4 add r3, pc | r3 = 0x217e6;
0x00010bc6 strb r2, [r3] | *(r3) = r2;
0x00010bc8 pop {r3, r4, r5, r6, r7, pc} |
| }
0x00010bca ldr r1, [pc, 0x54] |
0x00010bcc ldr r0, [pc, 0x54] |
0x00010bce add r1, pc | r1 = 0x217f4;
0x00010bd0 add r0, pc | r0 = 0x217f8;
0x00010bd2 bl 0x8b5c | dl_fatal_printf ()
| label_2:
0x00010bd6 movs r4, 0 | r4 = 0;
0x00010bd8 mov r0, r4 | r0 = r4;
0x00010bda pop {r3, r4, r5, r6, r7, pc} |
| label_4:
0x00010bdc mov r2, r3 | r2 = r3;
0x00010bde b 0x10b84 |
| } while (1);
| label_3:
0x00010be0 ldr r3, [pc, 0x44] |
0x00010be2 mov.w r2, 0x2fc | r2 = 0x2fc;
0x00010be6 ldr r1, [pc, 0x44] |
0x00010be8 ldr r0, [pc, 0x44] |
0x00010bea add r3, pc | r3 = 0x21816;
0x00010bec add r1, pc | r1 = 0x2181e;
0x00010bee add r0, pc | r0 = 0x21822;
0x00010bf0 bl 0xfba4 | fcn_0000fba4 (r0);
| label_5:
0x00010bf4 ldr r3, [pc, 0x3c] |
0x00010bf6 mov.w r2, 0x308 | r2 = 0x308;
0x00010bfa ldr r1, [pc, 0x3c] |
0x00010bfc ldr r0, [pc, 0x3c] |
0x00010bfe add r3, pc | r3 = 0x21836;
0x00010c00 add r1, pc | r1 = 0x2183e;
0x00010c02 add r0, pc | r0 = 0x21842;
0x00010c04 bl 0xfba4 | fcn_0000fba4 (r0);
| label_6:
0x00010c08 ldr r0, [pc, 0x34] |
0x00010c0a add r0, pc | r0 = 0x2184e;
0x00010c0c bl 0x8b5c | dl_fatal_printf ()
| if (r4 < 0) {
0x00010c10 bmi 0x10ba4 | goto label_0;
| }
0x00010c12 movs r0, r0 |
| if (r0 != r0) {
0x00010c14 bne 0x10b48 | goto label_1;
| }
0x00010c16 movs r0, r0 |
| if (r0 < r0) {
0x00010c18 bmi 0x10d08 | void (*0x10d08)() ();
| }
0x00010c1a movs r0, r0 |
0x00010c1c udf 0xc | __asm ("udf 0xc");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x125d8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000125d8 () | void fcn_000125d8 (int16_t arg_0h, uint32_t arg_4h, int16_t arg_8h, int16_t arg_ch, int16_t arg_10h, int16_t arg_17h, uint32_t arg1, int16_t arg3, uint32_t arg4) {
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
| do {
| label_0:
0x00011612 invalid |
0x00011614 bl 0xef8c | r0 = fcn_0000ef8c (r0);
0x00011618 mov r5, r0 | r5 = r0;
0x0001161a cmp r0, 0 |
| if (r0 == 0) {
0x0001161c beq 0x11694 | goto label_65;
| }
0x0001161e ldrb r3, [r0] | r3 = *(r0);
0x00011620 cmp r3, 0 |
0x00011622 it ne |
| if (r3 != 0) {
0x00011624 cmpne r3, 0x3d | __asm ("cmpne r3, 0x3d");
| }
0x00011626 it ne |
| if (r3 == 0) {
0x00011628 movne r2, r0 | r2 = r0;
| }
0x0001162a beq 0x11612 |
| } while (r3 == 0);
| do {
0x0001162c mov r1, r2 | r1 = r2;
0x0001162e ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x00011632 cmp r3, 0 |
0x00011634 it ne |
| if (r3 != 0) {
0x00011636 cmpne r3, 0x3d | __asm ("cmpne r3, 0x3d");
| }
0x00011638 bne 0x1162c |
| } while (r3 != 0);
0x0001163a cmp r3, 0x3d |
| if (r3 != 0x3d) {
0x0001163c bne 0x11612 | goto label_0;
| }
0x0001163e subs r1, r1, r5 | r1 -= r5;
0x00011640 subs r1, 3 | r1 -= 3;
0x00011642 cmp r1, 0x10 |
| if (r1 > 0x10) {
0x00011644 bhi 0x11612 | goto label_0;
| }
0x00011646 adr r3, 8 | r3 = 8;
0x00011648 ldr.w r1, [r3, r1, lsl 2] | offset_0 = r1 << 2;
| r1 = *((r3 + offset_0));
0x0001164c add r3, r1 | r3 += r1;
| /* switch table (17 cases) at 0x11650 */
0x0001164e bx r3 | return uint32_t (*r3)() ();
| label_65:
0x00011694 ldr.w r3, [pc, 0x644] | r3 = *(0x00011cdc);
0x00011698 mov sb, r0 | sb = r0;
0x0001169a add r3, pc | r3 += pc;
0x0001169c ldr r3, [r3] | r3 = *(r3);
0x0001169e cmp r3, 0 |
| if (r3 != 0) {
0x000116a0 bne.w 0x131b4 | goto label_66;
| }
0x000116a4 ldrb.w r3, [sl, 0x169] | r3 = *((sl + 0x169));
0x000116a8 cmp r4, 0 |
0x000116aa ite eq |
| if (r4 != 0) {
0x000116ac moveq r3, 0 | r3 = 0;
| }
| if (r4 == 0) {
0x000116ae andne r3, r3, 1 | r3 &= 1;
| }
0x000116b2 cmp r3, 0 |
| if (r3 != 0) {
0x000116b4 bne.w 0x12ad6 | goto label_67;
| }
| label_10:
0x000116b8 ldr.w r2, [pc, 0x624] | r2 = *(0x00011ce0);
0x000116bc ldr r1, [r7, 0x38] | r1 = *((r7 + 0x38));
0x000116be ldr.w r3, [pc, 0x624] | r3 = *(0x00011ce4);
0x000116c2 add r2, pc | r2 += pc;
0x000116c4 ldr r4, [r2] | r4 = *(r2);
0x000116c6 ldr r1, [r1] | r1 = *(r1);
0x000116c8 add r3, pc | r3 += pc;
0x000116ca ldr r0, [r4] | r0 = *(r4);
0x000116cc cmp r1, r3 |
0x000116ce str r4, [r7, 0x14] | *((r7 + 0x14)) = r4;
0x000116d0 str r0, [r7, 0x1c] | *((r7 + 0x1c)) = r0;
| if (r1 != r3) {
0x000116d2 bne.w 0x11b50 | goto label_68;
| }
0x000116d6 ldr r6, [r2, 4] | r6 = *((r2 + 4));
0x000116d8 ldr.w r2, [pc, 0x60c] | r2 = *(0x00011ce8);
0x000116dc cmp r6, 1 |
0x000116de add r2, pc | r2 += pc;
0x000116e0 str.w r0, [r2, 0x5f4] | __asm ("str.w r0, [r2, 0x5f4]");
| if (r6 <= 1) {
0x000116e4 ble.w 0x135a8 | goto label_69;
| }
0x000116e8 ldr.w r1, [pc, 0x600] |
0x000116ec ldr.w r3, [pc, 0x600] |
0x000116f0 ldr.w r2, [pc, 0x600] | r2 = *(0x00011cf4);
0x000116f4 add r1, pc | r1 = 0x233e4;
0x000116f6 ldr.w r8, [pc, 0x600] |
0x000116fa str r1, [r7, 0x34] | *((r7 + 0x34)) = r1;
0x000116fc add r3, pc | r3 = 0x233f0;
0x000116fe ldr.w r1, [pc, 0x5fc] |
0x00011702 add r2, pc | r2 += pc;
0x00011704 str.w sb, [r7, 0xc] | __asm ("str.w sb, [r7, 0xc]");
0x00011708 add r8, pc | r8 = 0x23406;
0x0001170a str.w fp, [r7, 8] | __asm ("str.w fp, [r7, 8]");
0x0001170e mov sb, r3 | sb = r3;
0x00011710 add r1, pc |
0x00011712 mov fp, r2 |
0x00011714 str r1, [r7, 0x30] | *((r7 + 0x30)) = r1;
0x00011716 ldr.w r1, [pc, 0x5e8] | r1 = *(0x00011d00);
0x0001171a add r1, pc |
0x0001171c str r1, [r7, 0x10] | *((r7 + 0x10)) = r1;
0x0001171e ldr.w r1, [pc, 0x5e4] | r1 = *(0x00011d04);
0x00011722 add r1, pc |
0x00011724 str r1, [r7, 0x20] | *((r7 + 0x20)) = r1;
0x00011726 ldr.w r1, [pc, 0x5e0] | r1 = *(0x00011d08);
0x0001172a add r1, pc | r1 = 0x57984;
0x0001172c str r1, [r7, 0x3c] | *((r7 + 0x3c)) = r1;
0x0001172e movs r1, 0 | r1 = 0;
0x00011730 str r1, [r7, 4] | *((r7 + 4)) = r1;
0x00011732 b 0x11758 |
| while (r0 == 0) {
0x00011734 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x00011738 cmp r3, 6 |
| if (r3 != 6) {
0x0001173a beq 0x1174a |
0x0001173c ldr r2, [r7, 0x3c] | r2 = *((r7 + 0x3c));
0x0001173e movs r3, 1 | r3 = 1;
0x00011740 str.w r3, [sl, 0x164] | __asm ("str.w r3, [sl, 0x164]");
0x00011744 mov.w r3, -1 | r3 = -1;
0x00011748 str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
| }
| label_1:
0x0001174a subs r6, 1 | r6--;
0x0001174c adds r4, 4 | r4 += 4;
| label_3:
0x0001174e cmp r6, 1 |
0x00011750 strd r4, r6, [r8] | __asm ("strd r4, r6, [r8]");
| if (r6 == 1) {
0x00011754 beq.w 0x1199e | goto label_70;
| }
| label_2:
0x00011758 ldr r5, [r4, 4] | r5 = *((r4 + 4));
0x0001175a mov r1, sb | r1 = sb;
0x0001175c mov r0, r5 | r0 = r5;
0x0001175e bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x00011762 cmp r0, 0 |
0x00011764 beq 0x11734 |
| }
0x00011766 mov r1, fp | r1 = fp;
0x00011768 mov r0, r5 | r0 = r5;
0x0001176a bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x0001176e cmp r0, 0 |
| if (r0 == 0) {
0x00011770 bne.w 0x11978 |
0x00011774 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x00011778 cmp r3, 6 |
0x0001177a itt ne |
| if (r3 == 6) {
0x0001177c movne r3, 2 | r3 = 2;
| }
| if (r3 == 6) {
0x0001177e strne r3, [sl, 0x164] | *((sl + 0x164)) = r3;
| }
0x00011780 adds r1, 0x64 | r1 += 0x64;
0x00011782 b 0x1174a | goto label_1;
| }
0x00011978 ldr r1, [r7, 0x34] | r1 = *((r7 + 0x34));
0x0001197a mov r0, r5 | r0 = r5;
0x0001197c bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x00011980 cmp r0, 0 |
| if (r0 != 0) {
0x00011982 bne.w 0x11b0a | goto label_71;
| }
0x00011986 subs r6, 1 | r6--;
0x00011988 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x0001198a cmp r6, 1 |
0x0001198c add.w r4, r4, 4 | r4 += 4;
0x00011990 mov.w r2, 1 | r2 = 1;
0x00011994 strd r4, r6, [r8] | __asm ("strd r4, r6, [r8]");
0x00011998 str r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
| if (r6 != 1) {
0x0001199a bne.w 0x11758 | goto label_2;
| }
| label_70:
0x0001199e ldrd fp, sb, [r7, 8] | __asm ("ldrd fp, sb, [r7, 8]");
| label_34:
0x000119a2 ldr.w r0, [sl, 0x164] | r0 = *((sl + 0x164));
0x000119a6 cmp r0, 4 |
| if (r0 == 4) {
0x000119a8 beq.w 0x13578 | goto label_72;
| }
| label_32:
0x000119ac cmp r0, 5 |
| if (r0 == 5) {
0x000119ae beq.w 0x13d3e | goto label_73;
| }
0x000119b2 ldr r3, [pc, 0x3ac] |
0x000119b4 add r3, pc | r3 = 0x2371a;
0x000119b6 ldr r2, [r3, 4] | r2 = *(0x2371e);
0x000119b8 cmp r2, 1 |
| if (r2 <= 1) {
0x000119ba ble.w 0x12d48 | goto label_74;
| }
0x000119bc strh r5, [r0, 0xe] | *((r0 + 0xe)) = r5;
0x000119be ldrd r1, r5, [r7, 0x28] | __asm ("ldrd r1, r5, [r7, 0x28]");
0x000119c2 subs r2, 1 | r2--;
0x000119c4 ldr r4, [r3] | r4 = *(r3);
0x000119c6 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x000119c8 add.w r1, r5, r1, lsl 5 | r1 = r5 + (r1 << 5);
0x000119cc adds r2, r4, 4 | r2 = r4 + 4;
0x000119ce str r2, [r3] | *(r3) = r2;
0x000119d0 mov r2, r5 | r2 = r5;
0x000119d2 cmp r5, r1 |
| if (r5 >= r1) {
0x000119d4 bhs 0x119f6 | goto label_75;
| }
0x000119d6 movw r3, 0xe551 |
0x000119da movt r3, 0x6474 | r3 = 0x6474e551;
0x000119de b 0x119e6 |
| while (r5 != r3) {
0x000119e0 adds r2, 0x20 | r2 += 0x20;
0x000119e2 cmp r2, r1 |
| if (r2 >= r1) {
0x000119e4 bhs 0x119f6 | goto label_75;
| }
0x000119e6 ldr r5, [r2] | r5 = *(r2);
0x000119e8 cmp r5, r3 |
0x000119ea bne 0x119e0 |
| }
0x000119ec ldr r3, [pc, 0x374] |
0x000119ee ldr r2, [r2, 0x18] | r2 = *((r2 + 0x18));
0x000119f0 add r3, pc | r3 = 0x23758;
0x000119f2 str.w r2, [r3, 0x8e0] | __asm ("str.w r2, [r3, 0x8e0]");
| label_75:
0x000119f6 bic r3, r0, 4 | r3 = BIT_MASK (r0, 4);
0x000119fa ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x000119fc cmp r3, 2 |
| if (r3 == 2) {
0x000119fe beq.w 0x13a20 | goto label_76;
| }
0x00011a02 movs r3, 0 | r3 = 0;
0x00011a04 mov.w r2, 0x20000000 | r2 = 0x20000000;
0x00011a08 strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x00011a0c mov r0, r3 | r0 = r3;
0x00011a0e mov r2, r3 | r2 = r3;
0x00011a10 bl 0x5834 | fcn_00005834 (r0, r1, r2, r3, r4, r5);
| label_49:
0x00011a14 ldr r3, [pc, 0x350] |
0x00011a16 ldr.w r8, [sl, 0x164] | r8 = *((sl + 0x164));
0x00011a1a add r3, pc | r3 = 0x23786;
0x00011a1c ldr r4, [r3] | r4 = *(0x23786);
0x00011a1e cmp.w r8, 0 |
| if (r8 != 0) {
0x00011a22 bne.w 0x13a0c | goto label_77;
| }
0x00011a24 strh r3, [r6, 0x3e] | *((r6 + 0x3e)) = r3;
0x00011a26 ldr.w r2, [r3, 0x648] | r2 = *((r3 + 0x648));
0x00011a2a ldrb.w r1, [r3, 0x796] | r1 = *((r3 + 0x796));
0x00011a2e ldr r5, [r2, 4] | r5 = *((r2 + 4));
0x00011a30 ldr.w r2, [r3, 0x624] | r2 = *((r3 + 0x624));
0x00011a34 lsls r1, r1, 0x1a | r1 <<= 0x1a;
0x00011a36 ite mi |
| if (r1 >= r1) {
0x00011a38 ldrmi r3, [r3, 0x5f0] | r3 = *((r3 + 0x5f0));
| }
| if (r1 >= r1) {
0x00011a3c mov r3, r8 | r3 = r8;
| }
0x00011a3e ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00011a40 add r5, r2 | r5 += r2;
0x00011a42 add r5, r3 | r5 += r3;
0x00011a44 ldr r3, [r4, 0x58] | r3 = *((r4 + 0x58));
| if (r3 != 0) {
0x00011a46 cbz r3, 0x11a6a |
0x00011a48 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x00011a4a mov r0, r5 | r0 = r5;
0x00011a4c ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00011a4e ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00011a50 ldrb.w r3, [r4, 0x1a6] | r3 = *((r4 + 0x1a6));
0x00011a54 add r1, r2 | r1 += r2;
0x00011a56 ands r3, r3, 0x20 | r3 &= 0x20;
0x00011a5a it ne |
| if (r3 == r3) {
0x00011a5c ldrne r3, [r4] | r3 = *(r4);
| }
0x00011a5e add r1, r3 | r1 += r3;
0x00011a60 bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x00011a64 cmp r0, 0 |
| if (r0 == 0) {
0x00011a66 beq.w 0x13b76 | goto label_78;
| }
0x00011a68 strh r6, [r0, 4] | *((r0 + 4)) = r6;
| }
0x00011a6a ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x00011a6c ldrh.w r3, [r4, 0x168] | r3 = *((r4 + 0x168));
0x00011a70 cmp r2, 0 |
| if (r2 != 0) {
0x00011a72 bne.w 0x13a18 | goto label_79;
| }
0x00011a74 strh r1, [r2, 0x3e] | *((r2 + 0x3e)) = r1;
0x00011a76 cmp r3, 0 |
| if (r3 == 0) {
0x00011a78 beq.w 0x13124 | goto label_80;
| }
0x00011a7c ldr.w r6, [r4, 0x160] | r6 = *((r4 + 0x160));
0x00011a80 b 0x11a8c |
| while (r2 != 3) {
0x00011a82 add.w r8, r8, 1 | r8++;
0x00011a86 cmp r8, r3 |
| if (r8 == r3) {
0x00011a88 beq.w 0x13124 | goto label_80;
| }
0x00011a8c lsl.w r2, r8, 5 | r2 = r8 << 5;
0x00011a90 ldr r2, [r6, r2] | r2 = *((r6 + r2));
0x00011a92 cmp r2, 3 |
0x00011a94 bne 0x11a82 |
| }
| label_48:
0x00011a96 ldr r2, [pc, 0x2d4] |
0x00011a98 ldr r1, [r7, 0x38] | r1 = *((r7 + 0x38));
0x00011a9a add r2, pc | r2 = 0x2380c;
0x00011a9c str r2, [r4, 4] | *((r4 + 4)) = r2;
0x00011a9e ldr.w r2, [r4, 0x164] | r2 = *((r4 + 0x164));
0x00011aa2 str r2, [r1] | *(r1) = r2;
0x00011aa4 ldrb.w r2, [r4, 0x1a5] | r2 = *((r4 + 0x1a5));
0x00011aa8 orr r2, r2, 1 | r2 |= 1;
0x00011aac strb.w r2, [r4, 0x1a5] | *((r4 + 0x1a5)) = r2;
0x00011ab0 ldr r2, [r7, 0x18] | r2 = *((r7 + 0x18));
0x00011ab2 ldr r1, [r2] | r1 = *(0x2380c);
0x00011ab4 ldr r2, [pc, 0x2b8] |
0x00011ab6 add r2, pc | r2 = 0x2382a;
0x00011ab8 ldr r0, [r2] | r0 = *(0x2382a);
0x00011aba cmp r1, 0 |
| if (r1 == 0) {
0x00011abc beq.w 0x12ebc | goto label_81;
| }
0x00011ac0 ldr r2, [r7, 0x18] | r2 = *((r7 + 0x18));
0x00011ac2 ldr r5, [r7, 0x38] | r5 = *((r7 + 0x38));
| label_15:
0x00011ac4 subs r1, 3 | r1 -= 3;
0x00011ac6 cmp r1, 0x1c |
| if (r1 > 0x1c) {
0x00011ac8 bhi.w 0x12eb2 | goto label_18;
| }
| /* switch table (30 cases) at 0x11ad0 */
0x00011acc tbh [pc, r1, lsl 1] | __asm ("tbh [pc, r1, lsl 1]");
| label_71:
0x00011b0a ldr r1, [r7, 0x30] | r1 = *((r7 + 0x30));
0x00011b0c mov r0, r5 | r0 = r5;
0x00011b0e bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
| if (r0 == 0) {
0x00011b12 cbnz r0, 0x11b2c |
0x00011b14 cmp r6, 2 |
| if (r6 == 2) {
0x00011b16 beq.w 0x1308c | goto label_82;
| }
0x00011b1a ldr r3, [r4, 8]! | r3 = *((r4 += 8));
0x00011b1e subs r6, 2 | r6 -= 2;
0x00011b20 str.w r3, [sl, 0x14c] | __asm ("str.w r3, [sl, 0x14c]");
0x00011b24 ldr r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x00011b26 str.w r3, [sl, 0x150] | __asm ("str.w r3, [sl, 0x150]");
0x00011b2a b 0x1174e | goto label_3;
| }
0x00011b2c ldr r1, [r7, 0x10] | r1 = *((r7 + 0x10));
0x00011b2e mov r0, r5 | r0 = r5;
0x00011b30 bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x00011b34 cmp r0, 0 |
| if (r0 != 0) {
0x00011b36 bne.w 0x12a74 | goto label_83;
| }
0x00011b3a cmp r6, 2 |
| if (r6 == 2) {
0x00011b3c beq.w 0x12e68 | goto label_20;
| }
0x00011b40 ldr r3, [pc, 0x230] |
0x00011b42 subs r6, 2 | r6 -= 2;
0x00011b44 ldr r2, [r4, 8]! | r2 = *((r4 += 8));
0x00011b48 add r3, pc | r3 = 0x238c0;
0x00011b4a str.w r2, [r3, 0x15c] | __asm ("str.w r2, [r3, 0x15c]");
0x00011b4e b 0x1174e | goto label_3;
| label_68:
0x00011b50 ldr r1, [pc, 0x224] |
0x00011b52 movs r5, 0 | r5 = 0;
0x00011b54 mov.w r3, 0x20000000 | r3 = 0x20000000;
0x00011b58 mov r2, r5 | r2 = r5;
0x00011b5a strd r3, r5, [sp] | __asm ("strd r3, r5, [sp]");
0x00011b5e mov r3, r5 | r3 = r5;
0x00011b60 add r1, pc | r1 = 0x238dc;
0x00011b62 mov r0, r1 | r0 = r1;
0x00011b64 bl 0x7698 | r0 = fcn_00007698 (r0, r1, r2, r3, r4, r5, r6);
0x00011b68 mov r4, r0 | r4 = r0;
0x00011b6a cmp r0, 0 |
| if (r0 == 0) {
0x00011b6c beq.w 0x13d22 | void (*0x13d22)() ();
| }
0x00011b70 ldr r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x00011b72 mov r1, r5 | r1 = r5;
0x00011b74 str.w r3, [r0, 0x160] | __asm ("str.w r3, [r0, 0x160]");
0x00011b78 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x00011b7a strh.w r3, [r0, 0x168] | *((r0 + 0x168)) = r3;
0x00011b7e ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x00011b80 ldr r3, [r3] | r3 = *(r3);
0x00011b82 str.w r3, [r0, 0x164] | __asm ("str.w r3, [r0, 0x164]");
0x00011b86 bl 0x7618 | fcn_00007618 (r0, r1);
0x00011b8a ldr r3, [pc, 0x1f0] |
0x00011b8c add r3, pc |
0x00011b8e ldr r3, [r3] | r3 = *(0x2390e);
0x00011b90 cmp r3, r4 |
| if (r3 != r4) {
0x00011b92 bne.w 0x13d98 | goto label_84;
| }
0x00011b96 ldrh.w r3, [r4, 0x168] | r3 = *((r4 + 0x168));
0x00011b9a ldr.w r6, [r4, 0x160] | r6 = *((r4 + 0x160));
0x00011b9e str r5, [r7, 0x2c] | *((r7 + 0x2c)) = r5;
| label_16:
0x00011ba0 vmov.i64 d16, 0xffffffff | __asm ("vmov.i64 d16, 0xffffffff");
0x00011ba4 add.w r2, r4, 0x1c4 | r2 = r4 + 0x1c4;
0x00011ba8 movs r1, 0 | r1 = 0;
0x00011baa lsls r3, r3, 5 | r3 <<= 5;
0x00011bac str.w r1, [r4, 0x1cc] | __asm ("str.w r1, [r4, 0x1cc]");
0x00011bb0 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00011bb4 adds r5, r6, r3 | r5 = r6 + r3;
0x00011bb6 ldr.w r2, [r4, 0x1a0] | r2 = *((r4 + 0x1a0));
0x00011bba cmp r5, r6 |
0x00011bbc add.w r2, r2, 1 | r2++;
0x00011bc0 str.w r2, [r4, 0x1a0] | __asm ("str.w r2, [r4, 0x1a0]");
0x00011bc4 ldrb.w r2, [r4, 0x1a6] | r2 = *((r4 + 0x1a6));
0x00011bc8 orr r2, r2, 8 | r2 |= 8;
0x00011bcc strb.w r2, [r4, 0x1a6] | *((r4 + 0x1a6)) = r2;
| if (r5 < r6) {
0x00011bd0 bls.w 0x132f6 | goto label_85;
| }
0x00011bd4 ldr r3, [pc, 0x1a8] |
0x00011bd6 mov ip, r1 |
0x00011bd8 ldr r0, [pc, 0x1a8] |
0x00011bda add.w r8, r5, 0x10 | r8 = r5 + 0x10;
0x00011bde ldr r2, [pc, 0x1a8] |
0x00011be0 add r3, pc |
0x00011be2 str r1, [r7, 0xc] | *((r7 + 0xc)) = r1;
0x00011be4 ldr r3, [r3, 0xc] | r3 = *(0x23970);
0x00011be6 add r0, pc | r0 = 0x2396e;
0x00011be8 str r0, [r7, 0x20] | *((r7 + 0x20)) = r0;
0x00011bea add r2, pc | r2 = 0x23978;
0x00011bec ldr r0, [pc, 0x19c] |
0x00011bee movw r1, 0xe551 |
0x00011bf2 str r2, [r7, 0x34] | *((r7 + 0x34)) = r2;
0x00011bf4 rsbs r2, r3, 0 | r2 = r3 - ;
0x00011bf6 str r2, [r7, 0x38] | *((r7 + 0x38)) = r2;
0x00011bf8 subs r3, 1 | r3--;
0x00011bfa add r0, pc | r0 = 0x2398a;
0x00011bfc ldr r2, [r7, 0x34] | r2 = *((r7 + 0x34));
0x00011bfe str r0, [r7, 0x18] | *((r7 + 0x18)) = r0;
0x00011c00 movw r0, 0xe552 |
0x00011c04 str r3, [r7, 0x28] | *((r7 + 0x28)) = r3;
0x00011c06 movt r1, 0x6474 | r1 = 0x6474e551;
0x00011c0a vldr d18, [pc, 0xb4] | __asm ("vldr d18, [0x00011cc4]");
0x00011c0e movt r0, 0x6474 | r0 = 0x6474e552;
0x00011c12 add.w r3, r6, 0x10 | r3 = r6 + 0x10;
0x00011c16 adds r2, 0xc | r2 += 0xc;
0x00011c18 str.w ip, [r7, 0x30] | __asm ("str.w ip, [r7, 0x30]");
0x00011c1c strd r5, r2, [r7, 0x10] | __asm ("strd r5, r2, [r7, 0x10]");
0x00011c20 str r6, [r7, 0x3c] | *((r7 + 0x3c)) = r6;
| label_12:
0x000124ea bl 0xc064 | fcn_0000c064 ();
0x000124ee ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x000124f0 str r0, [r7, 0x1c] | *((r7 + 0x1c)) = r0;
| if (r3 != 0) {
0x000124f2 cbz r3, 0x124f8 |
0x000124f4 ldr r2, [r7, 0x20] | r2 = *((r7 + 0x20));
0x000124f6 str r2, [r3, 4] | *((r3 + 4)) = r2;
| }
0x000124f8 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x000124fa movs r5, 1 | r5 = 1;
0x000124fc str r5, [r3, 0xc] | *((r3 + 0xc)) = r5;
0x000124fe bl 0x16d8 | dl_debug_state ();
0x00012502 mov r1, r5 | r1 = r5;
0x00012504 mov r0, r4 | r0 = r4;
0x00012506 bl 0xe298 | fcn_0000e298 (r0, r1, r2, r3);
0x0001250a ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x0001250c ldr r3, [r3] | r3 = *(r3);
0x0001250e cmp r3, 0 |
| if (r3 != 0) {
0x00012510 bne.w 0x13c44 | goto label_86;
| }
0x00012514 ldr.w r5, [sl, 0x154] | r5 = *((sl + 0x154));
0x00012518 cmp r5, 0 |
| if (r5 != 0) {
0x0001251a bne.w 0x134a6 | goto label_87;
| }
| label_28:
0x0001251e ldr.w r0, [sl, 0x158] | r0 = *((sl + 0x158));
0x00012522 cmp r0, 0 |
| if (r0 != 0) {
0x00012524 bne.w 0x13496 | goto label_88;
| }
| label_27:
0x00012528 ldr.w r6, [pc, 0x4d8] | r6 = *(0x00012a04);
0x0001252c movs r1, 4 | r1 = 4;
0x0001252e add r6, pc | r6 += pc;
0x00012530 mov r0, r6 | r0 = r6;
0x00012532 bl 0x14c1c | r0 = fcn_00014c1c ();
0x00012536 cmp r0, 0 |
| if (r0 == 0) {
0x00012538 beq.w 0x1337a | goto label_89;
| }
| label_26:
0x0001253c ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x0001253e ldr r6, [r3] | r6 = *(r3);
0x00012540 cmp r6, 0 |
| if (r6 != 0) {
0x00012542 bne.w 0x13338 | goto label_90;
| }
| label_25:
0x00012546 ldr.w r3, [pc, 0x4c0] | r3 = *(0x00012a08);
0x0001254a add r3, pc | r3 += pc;
0x0001254c ldr.w r0, [r3, 0x180] | r0 = *((r3 + 0x180));
| if (r0 != 0) {
0x00012550 cbz r0, 0x12558 |
0x00012552 movs r1, 0 | r1 = 0;
0x00012554 bl 0xe3a8 | fcn_0000e3a8 (r0, r1, r2, r3);
| }
0x00012558 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x0001255c movs r0, 0 | r0 = 0;
0x0001255e str r0, [sp] | *(sp) = r0;
0x00012560 mov r2, r5 | r2 = r5;
0x00012562 mov r0, r4 | r0 = r4;
0x00012564 mov r1, r6 | r1 = r6;
0x00012566 sub.w r3, r3, 3 | r3 -= 3;
0x00012568 lsls r3, r0, 0xc | r3 = r0 << 0xc;
0x0001256a clz r3, r3 | r3 &= r3;
0x0001256e lsrs r3, r3, 5 | r3 >>= 5;
0x00012570 bl 0x1860 | fcn_00001860 (r0, r1, r2, r3, r4, r5);
0x00012574 ldr.w r0, [r4, 0x170] | r0 = *((r4 + 0x170));
0x00012578 cmp r0, 0 |
| if (r0 == 0) {
0x0001257a beq.w 0x13300 | goto label_91;
| }
0x0001257e ldr.w r5, [r4, 0x16c] | r5 = *((r4 + 0x16c));
0x00012582 add.w r3, r5, r0, lsl 2 | r3 = r5 + (r0 << 2);
| do {
0x00012586 ldr r1, [r3, -0x4]! | r1 = *((r3 -= 0x4));
0x0001258a ldrb.w r2, [r1, 0x1a4] | r2 = *((r1 + 0x1a4));
0x0001258e cmp r5, r3 |
0x00012590 orr r2, r2, 0x20 | r2 |= 0x20;
0x00012594 strb.w r2, [r1, 0x1a4] | *((r1 + 0x1a4)) = r2;
0x00012598 bne 0x12586 |
| } while (r5 != r3);
0x0001259a ldr.w r1, [pc, 0x470] | r1 = *(0x00012a0c);
0x0001259e add r1, pc | r1 += pc;
0x000125a0 ldr.w r2, [r1, 0x5fc] | r2 = *((r1 + 0x5fc));
0x000125a4 ldr.w r1, [r1, 0x600] | r1 = *((r1 + 0x600));
0x000125a8 str r2, [r1, 0xc] | *((r1 + 0xc)) = r2;
| if (r2 != 0) {
0x000125aa cbz r2, 0x125ae |
0x000125ac str r1, [r2, 0x10] | *((r2 + 0x10)) = r1;
| }
0x000125ae cmp r0, 1 |
| if (r0 == 1) {
0x000125b0 beq.w 0x13314 | goto label_92;
| }
0x000125b4 ldr.w ip, [pc, 0x458] | ip = *(0x00012a10);
0x000125b8 movs r2, 1 | r2 = 1;
0x000125ba add ip, pc |
0x000125bc add.w r6, ip, 0x5f0 | r6 = ip + 0x5f0;
0x000125c0 b 0x125ca |
| while (r1 != r6) {
0x000125c2 adds r2, 1 | r2++;
0x000125c4 cmp r0, r2 |
| if (r0 == r2) {
0x000125c6 beq.w 0x13314 | goto label_92;
| }
0x000125ca ldr r1, [r3, 4]! | r1 = *((r3 += 4));
0x000125ce cmp r1, r6 |
0x000125d0 bne 0x125c2 |
| }
0x000125d2 cmp r0, r2 |
0x000125d4 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
| if (r0 < r2) {
0x000125d8 bls.w 0x13d36 | void (*0x13d36)() ();
| }
0x000125dc add.w r1, r2, 0x40000000 | r1 = r2 + 0x40000000;
0x000125e0 subs r1, 1 | r1--;
0x000125e2 ldr.w r6, [r5, r1, lsl 2] | offset_1 = r1 << 2;
| r6 = *((r5 + offset_1));
0x000125e6 lsls r1, r1, 2 | r1 <<= 2;
0x000125e8 str.w r6, [ip, 0x600] | __asm ("str.w r6, [ip, 0x600]");
0x000125ec cmp r3, 0 |
| if (r3 != 0) {
0x000125ee bne.w 0x1358a | goto label_93;
| }
0x000125f2 adds r2, 1 | r2++;
0x000125f4 cmp r2, r0 |
0x000125f6 ldr.w r2, [pc, 0x41c] | r2 = *(0x00012a14);
0x000125fa itet lo |
| if (r2 >= r0) {
0x000125fc addlo r5, r5, r1 | r5 += r1;
| }
| if (r2 < r0) {
0x000125fe movhs r1, r3 | r1 = r3;
| }
| if (r2 >= r0) {
0x00012600 ldrlo r1, [r5, 8] | r1 = *((r5 + 8));
| }
0x00012602 add r2, pc | r2 += pc;
0x00012604 ldr.w r5, [pc, 0x410] |
0x00012608 ldr.w r2, [r2, 0x180] | r2 = *((r2 + 0x180));
0x0001260c add r5, pc | r5 = 0x25028;
0x0001260e str.w r1, [r5, 0x5fc] | __asm ("str.w r1, [r5, 0x5fc]");
0x00012612 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
| if (r2 != 0) {
0x00012614 cbz r2, 0x12630 |
0x00012616 subs.w ip, r2, r1 |
0x0001261a it ne |
| if (ip == r2) {
0x0001261c movne ip, 1 |
| }
0x00012620 cmp r2, r0 |
0x00012622 it ne |
| if (r2 == r0) {
0x00012624 movne ip, 0 |
| }
0x00012628 cmp.w ip, 0 |
| if (ip != 0) {
0x0001262c bne.w 0x132ea | goto label_94;
| }
| }
| label_24:
0x00012630 cmp r1, r0 |
| if (r1 != r0) {
0x00012632 bne.w 0x13dac | goto label_95;
| }
| label_33:
0x00012636 ldr r2, [pc, 0x3e4] |
0x00012638 add r2, pc |
0x0001263a add.w r0, r2, 0x5f0 | r0 = r2 + 0x5f0;
0x0001263e str r0, [r6, 0xc] | *((r6 + 0xc)) = r0;
0x00012640 ldr.w r2, [r2, 0x5fc] | r2 = *(0x25656);
| if (r2 != 0) {
0x00012644 cbz r2, 0x12652 |
0x00012646 ldr r1, [r2, 0x10] | r1 = *((r2 + 0x10));
0x00012648 cmp r6, r1 |
0x0001264a it eq |
| if (r6 != r1) {
0x0001264c streq r0, [r2, 0x10] | *((r2 + 0x10)) = r0;
| }
| if (r6 != r1) {
0x0001264e bne.w 0x13df8 | goto label_96;
| }
| }
0x00012652 movs r2, 1 | r2 = 1;
0x00012654 str r2, [r7, 0x2c] | *((r7 + 0x2c)) = r2;
| label_21:
0x0001268c ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
| if (r3 != 0) {
0x0001268e cbz r3, 0x126b0 |
0x00012690 ldr r3, [pc, 0x398] |
0x00012692 movs r6, 0 | r6 = 0;
0x00012694 ldr r1, [r7, 0x24] | r1 = *((r7 + 0x24));
0x00012696 ldr r2, [pc, 0x398] | r2 = *(0x12a32);
0x00012698 add r3, pc | r3 = 0x250c8;
0x0001269a ldr r5, [pc, 0x398] |
0x0001269c ldr r2, [r1, r2] | r2 = *((r1 + r2));
0x0001269e ldr r1, [r3] | r1 = *(0x250c8);
0x000126a0 add r5, pc | r5 = 0x250da;
0x000126a2 ldr r0, [r1] | r0 = *(0x250c8);
0x000126a4 str r6, [r3] | *(r3) = r6;
0x000126a6 ldr r3, [r1, 4] | r3 = *(0x250cc);
0x000126a8 bic r0, r0, 0xff | r0 = BIT_MASK (r0, 0xff);
0x000126ac str r0, [r2] | *(r2) = r0;
0x000126ae str r3, [r5, 8] | *((r5 + 8)) = r3;
| }
0x000126b0 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x000126b4 cmp r3, 0 |
| if (r3 != 0) {
0x000126b6 bne.w 0x134dc | goto label_97;
| }
| label_44:
0x000126ba ldr r2, [pc, 0x37c] |
0x000126bc add.w r1, r4, 0x16c | r1 = r4 + 0x16c;
0x000126c0 ldr r3, [pc, 0x378] |
0x000126c2 add r2, pc |
0x000126c4 str r1, [r2, 8] | *((r2 + 8)) = r1;
0x000126c6 add r3, pc | r3 = 0x25106;
0x000126c8 ldr.w r2, [r2, 0x5e8] | r2 = *(0x256e8);
0x000126cc adds r3, 0x18 | r3 += 0x18;
0x000126ce ldm r1, {r0, r1} | r0 = *(r1);
| r1 = *((r1 + 4));
0x000126d0 str.w r2, [r3, 0x160] | __asm ("str.w r2, [r3, 0x160]");
0x000126d4 ldr r2, [r3, -0x18] | r2 = *(0x250ee);
0x000126d8 stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x000126dc lsls r5, r2, 0x16 | r5 = r2 << 0x16;
| if (r5 < r2) {
0x000126de bmi.w 0x134c0 | goto label_98;
| }
| label_30:
0x000126e2 ldr r2, [pc, 0x35c] |
0x000126e4 ldr.w r0, [r4, 0x170] | r0 = *((r4 + 0x170));
0x000126e8 add r2, pc | r2 = 0x2512e;
0x000126ea ldr.w r3, [r2, 0x170] | r3 = *(0x2529e);
0x000126ec adds r1, 0x70 | r1 += 0x70;
0x000126ee subs r5, r0, 1 | r5 = r0 - 1;
0x000126f0 ldr r1, [r2, 0x2c] | r1 = *(0x2515a);
0x000126f2 subs r3, 0 |
0x000126f4 it ne |
| if (r3 == 0) {
0x000126f6 movne r3, 1 | r3 = 1;
| }
0x000126f8 orrs r1, r3 | r1 |= r3;
0x000126fa str r1, [r2, 0x2c] | *((r2 + 0x2c)) = r1;
0x000126fc cmp r0, 0 |
| if (r0 == 0) {
0x000126fe beq 0x1277c | goto label_99;
| }
0x00012700 ldr r6, [pc, 0x340] |
0x00012702 mov fp, r3 |
0x00012704 ldr.w r8, [pc, 0x340] | r8 = *(0x00012a48);
0x00012708 ldr.w sl, [pc, 0x340] |
0x0001270c add r6, pc |
0x0001270e str.w sb, [r7, 0x3c] | __asm ("str.w sb, [r7, 0x3c]");
0x00012712 add.w r6, r6, 0x5f0 | r6 = 0x25744;
0x00012716 add r8, pc | r8 += pc;
0x00012718 add sl, pc | sl = 0x25168;
0x0001271a b 0x12720 |
| while (r3 == 0) {
| label_4:
0x0001271c subs r5, 1 | r5--;
| if (r5 <= 1) {
0x0001271e blo 0x12778 | goto label_100;
| }
| label_5:
0x00012720 ldr.w r3, [r4, 0x208] | r3 = *((r4 + 0x208));
0x00012724 movs r2, 1 | r2 = 1;
0x00012726 ldr.w sb, [r3, r5, lsl 2] | offset_2 = r5 << 2;
| sb = *((r3 + offset_2));
0x0001272a ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x0001272e ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00012730 cmp r3, 0 |
| if (r3 != 0) {
0x00012732 bne.w 0x1294a | goto label_7;
| }
| label_6:
0x00012736 ldrb.w r3, [sb, 0x1a6] | r3 = *((sb + 0x1a6));
0x0001273a cmp sb, r6 |
0x0001273c bfc r3, 4, 1 | value_3 = BIT_MASK (1, );
| value_3 = ~value_3;
| r3 &= value_3;
0x00012740 strb.w r3, [sb, 0x1a6] | *((sb + 0x1a6)) = r3;
| if (sb != r6) {
0x00012744 beq 0x1275c |
0x00012746 ldr.w r2, [r8, 0x2c] | r2 = *((r8 + 0x2c));
0x0001274a mov r3, fp | r3 = fp;
0x0001274c ldr.w r1, [sb, 0x1e4] | r1 = *((sb + 0x1e4));
0x00012750 mov r0, sb | r0 = sb;
0x00012752 subs r2, 0 |
0x00012754 it ne |
| if (r2 == 0) {
0x00012756 movne r2, 1 | r2 = 1;
| }
0x00012758 bl 0x960c | fcn_0000960c (r0, r1, r2, r3, r4, r5, r6);
| }
0x0001275c ldr.w r3, [sb, 0x248] | r3 = *((sb + 0x248));
0x00012760 cmp r3, 0 |
0x00012762 beq 0x1271c |
| }
0x00012764 ldrb.w r3, [sl] | r3 = *(sl);
0x00012768 cmp r3, 0 |
| if (r3 == 0) {
0x0001276a beq 0x1271c | goto label_4;
| }
0x0001276c mov r0, sb | r0 = sb;
0x0001276e movs r1, 1 | r1 = 1;
0x00012770 bl 0xc794 | fcn_0000c794 (r0, r1);
0x00012774 subs r5, 1 | r5--;
| if (r5 >= 1) {
0x00012776 bhs 0x12720 | goto label_5;
| }
| label_100:
0x00012778 ldr.w sb, [r7, 0x3c] | sb = *((r7 + 0x3c));
| label_99:
0x0001277c ldr r3, [pc, 0x2d0] |
0x0001277e add r3, pc |
0x00012780 ldr.w r3, [r3, 0x5dc] | r3 = *(0x257ae);
0x00012784 cmp r3, 0 |
| if (r3 != 0) {
0x00012786 bne.w 0x134b8 | goto label_101;
| }
| label_29:
0x0001278a ldr r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x0001278c cmp r3, 0 |
| if (r3 != 0) {
0x0001278e bne.w 0x12956 | goto label_102;
| }
0x00012792 ldr r3, [pc, 0x2c0] |
0x00012794 add r3, pc |
0x00012796 ldr.w r3, [r3, 0x8e8] | r3 = *(0x25ad6);
0x0001279a cmp r3, 0 |
| if (r3 == 0) {
0x0001279c beq.w 0x12956 | goto label_102;
| }
| label_8:
0x000127a0 ldr r2, [pc, 0x2b4] |
0x000127a2 add r2, pc | r2 = 0x251fe;
0x000127a4 ldr.w r3, [r2, 0x900] | r3 = *(0x25afe);
0x000127a8 adds r3, 1 | r3++;
0x000127aa str.w r3, [r2, 0x900] | __asm ("str.w r3, [r2, 0x900]");
| label_9:
0x000127ae movs r1, 0 | r1 = 0;
0x000127b0 mov r0, sb | r0 = sb;
0x000127b2 bl 0xc2bc | dl_allocate_tls_init ();
0x000127b6 ldr r3, [pc, 0x2a4] |
0x000127b8 add r3, pc | r3 = 0x2521a;
0x000127ba ldrb r3, [r3] | r3 = *(r3);
| if (r3 == 0) {
0x000127bc cbnz r3, 0x127d8 |
0x000127be mov.w ip, 5 |
0x000127c2 mov r0, sb | r0 = sb;
0x000127c4 movt ip, 0xf |
0x000127c8 bl 0x13fd0 | r0 = fcn_00013fd0 ();
0x000127cc cmn.w r0, 0x1000 |
| if (r0 > 0x1000) {
0x000127d0 bhi.w 0x12e58 | goto label_103;
| }
0x000127d4 bl 0xc974 | fcn_0000c974 ();
| }
0x000127d8 ldr r3, [pc, 0x284] |
0x000127da ldr r5, [pc, 0x288] |
0x000127dc add r3, pc | r3 = 0x25240;
0x000127de add r5, pc | r5 = 0x25248;
0x000127e0 ldr.w r2, [r3, 0x178] | r2 = *(0x253b8);
0x000127e4 ldr.w r3, [r5, 0x5e8] | r3 = *(0x25830);
0x000127e8 cmp r2, r3 |
| if (r2 != r3) {
0x000127ea bne.w 0x13d0e | void (*0x13d0e)() ();
| }
0x000127ee ldr r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x000127f0 cmp r3, 0 |
| if (r3 != 0) {
0x000127f2 bne.w 0x1305e | goto label_104;
| }
| label_19:
0x000127f6 ldr r3, [pc, 0x270] |
0x000127f8 movs r1, 1 | r1 = 1;
0x000127fa add r3, pc | r3 = 0x25268;
0x000127fc ldr r0, [r3, 0x14] | r0 = *(0x2527c);
0x000127fe bl 0xa40 | _text ();
0x00012802 bl 0x100c0 | fcn_000100c0 ();
0x00012804 mrrc2 p1, 0, r2, sp, c0 | __asm ("mrrc2 p1, 0, r2, sp, c0");
0x00012808 mov r0, r1 | r0 = r1;
0x0001280a bl 0xe2f4 | fcn_0000e2f4 (r0);
0x0001280e movs r0, 0 | r0 = 0;
0x00012810 bl 0x16dc | fcn_000016dc (r0);
0x00012814 movs r3, 0 | r3 = 0;
0x00012816 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00012818 bl 0x16d8 | dl_debug_state ();
0x0001281c bl 0xd928 | fcn_0000d928 ();
0x00012820 add.w r7, r7, 0x1dc | r7 += 0x1dc;
0x00012824 mov sp, r7 |
0x00012826 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x0001294a str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0001294c ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0001294e cmp r3, 0 |
| if (r3 == 0) {
0x00012950 beq.w 0x12736 | goto label_6;
| }
0x00012954 b 0x1294a | goto label_7;
| label_102:
0x00012956 bl 0xc064 | fcn_0000c064 ();
0x0001295a ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x0001295c cmp r0, r3 |
| if (r0 != r3) {
0x0001295e bne.w 0x127a0 | goto label_8;
| }
0x00012962 b 0x127ae | goto label_9;
| label_83:
0x00012a74 ldr.w r1, [pc, 0xc44] | r1 = *(0x000136bc);
0x00012a78 mov r0, r5 | r0 = r5;
0x00012a7a add r1, pc | r1 += pc;
0x00012a7c bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x00012a80 cmp r0, 0 |
| if (r0 != 0) {
0x00012a82 bne.w 0x12e7a | goto label_105;
| }
0x00012a86 cmp r6, 2 |
| if (r6 == 2) {
0x00012a88 beq.w 0x130b0 | goto label_106;
| }
0x00012a8c ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00012a8e ldrb r3, [r2] | r3 = *(r2);
| if (r3 != 0) {
0x00012a90 cbz r3, 0x12aae |
0x00012a92 ldr.w r3, [sl, 0x40] | r3 = *((sl + 0x40));
0x00012a96 cmp r3, 0x10 |
| if (r3 == 0x10) {
0x00012a98 beq.w 0x13c58 | goto label_107;
| }
0x00012a9c str.w r2, [sl, r3, lsl 2] | __asm ("str.w r2, [sl, r3, lsl 2]");
0x00012aa0 adds r3, 1 | r3++;
0x00012aa2 cmp r3, 1 |
0x00012aa4 str.w r3, [sl, 0x40] | __asm ("str.w r3, [sl, 0x40]");
0x00012aa8 it eq |
| if (r3 == 1) {
0x00012aaa streq r2, [sl, 0x48] | *((sl + 0x48)) = r2;
| goto label_108;
| }
| }
| label_108:
0x00012aae subs r6, 2 | r6 -= 2;
0x00012ab0 adds r4, 8 | r4 += 8;
0x00012ab2 b.w 0x1174e | goto label_3;
| label_67:
0x00012ad6 mov r0, r4 | r0 = r4;
0x00012ad8 bl 0x161c0 | r0 = fcn_000161c0 (r0, r1);
0x00012adc add.w r3, r0, 0x13 | r3 = r0 + 0x13;
0x00012ae0 str.w sp, [r7, 0x3c] | __asm ("str.w sp, [r7, 0x3c]");
0x00012ae4 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00012ae8 add.w r6, r0, 0xb | r6 = r0 + 0xb;
0x00012aec sub.w sp, sp, r3 |
0x00012af0 mov r5, r0 | r5 = r0;
0x00012af2 add.w r8, sp, 0x10 | r8 += arg_10h;
0x00012af6 strb.w sb, [r8, r6] | *((r8 + r6)) = sb;
0x00012afa bl 0x15230 | fcn_00015230 ();
0x00012afe add.w r2, r8, r6 | r2 = r8 + r6;
0x00012b02 asrs r1, r0, 0x1f | r1 = r0 >> 0x1f;
0x00012b04 movs r3, 0xa | r3 = 0xa;
0x00012b06 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00012b0a bl 0xfd84 | fcn_0000fd84 (r0, r1, r2, r3, r4, r5, r6);
0x00012b0e movs r3, 0x2e | r3 = 0x2e;
0x00012b10 mov r1, r4 | r1 = r4;
0x00012b12 strb r3, [r0, -0x1] | *((r0 - 0x1)) = r3;
0x00012b16 mvns r3, r5 | r3 = ~r5;
0x00012b18 add r0, r3 | r0 += r3;
0x00012b1a mov r2, r5 | r2 = r5;
0x00012b1c blx 0x16400 | fcn_00016400 (r0, r1);
0x00012b20 mov.w r2, 0x1b6 | r2 = 0x1b6;
0x00012b24 movw r1, 0x8441 | r1 = 0x8441;
0x00012b28 bl 0x14db0 | fcn_00014db0 (r0);
0x00012b2c ldr.w r3, [pc, 0xb98] | r3 = *(0x000136c8);
0x00012b30 adds r4, r0, 1 | r4 = r0 + 1;
0x00012b32 it eq |
| if (r4 != r0) {
0x00012b34 moveq r0, 1 | r0 = 1;
| }
0x00012b36 add r3, pc | r3 += pc;
0x00012b38 str r0, [r3, 0x28] | *((r3 + 0x28)) = r0;
0x00012b3a ldr.w sp, [r7, 0x3c] | sp = *((r7 + 0x3c));
0x00012b3e b.w 0x116b8 | goto label_10;
| do {
| label_13:
0x00012bb6 ldr r0, [r7, 0x3c] | r0 = *((r7 + 0x3c));
0x00012bb8 bl 0x10a7c | r0 = fcn_00010a7c (r0);
0x00012bbc mov r5, r0 | r5 = r0;
0x00012bbe cmp r0, 0 |
| if (r0 == 0) {
0x00012bc0 beq 0x12c54 | goto label_109;
| }
| label_11:
0x00012bc2 add.w r4, r7, 0x4c | r4 = r7 + 0x4c;
0x00012bc6 movs r3, 0 | r3 = 0;
0x00012bc8 str r3, [r4] | *(r4) = r3;
0x00012bca add.w r6, r7, 0x50 | r6 = r7 + 0x50;
0x00012bce str r3, [r6, 4] | *((r6 + 4)) = r3;
0x00012bd0 add.w r8, r7, 0x47 | r8 = r7 + 0x47;
0x00012bd4 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x00012bd6 add.w sb, r7, 0x48 | sb = r7 + 0x48;
0x00012bda str r0, [r6] | *(r6) = r0;
0x00012bdc mov r2, r8 | r2 = r8;
0x00012bde mov r1, r4 | r1 = r4;
0x00012be0 mov r0, sb | r0 = sb;
0x00012be2 ldr.w sl, [r3, 0x8e8] | sl = *((r3 + 0x8e8));
0x00012be6 str r6, [sp] | *(sp) = r6;
0x00012be8 ldr r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x00012bea blx 0xa04 | fcn_00000a04 ();
0x00012bee ldr r2, [r4] | r2 = *(r4);
0x00012bf0 cmp r2, 0 |
| if (r2 != 0) {
0x00012bf2 bne 0x12c76 | goto label_110;
| }
0x00012bf4 ldr r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x00012bf6 mov r2, r8 | r2 = r8;
0x00012bf8 mov r1, r4 | r1 = r4;
0x00012bfa mov r0, sb | r0 = sb;
0x00012bfc str.w r3, [fp] | __asm ("str.w r3, [fp]");
0x00012c00 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00012c02 str.w r3, [fp, 4] | __asm ("str.w r3, [arg_4h]");
0x00012c06 ldr.w r3, [pc, 0xadc] | r3 = *(0x000136e4);
0x00012c0a str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x00012c0e add r3, pc | r3 += pc;
0x00012c10 str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
0x00012c12 blx 0xa04 | fcn_00000a04 ();
0x00012c14 cdp p8, 0xf, c6, c8, c3, 1 | __asm ("cdp p8, 0xf, c6, c8, c3, 1");
0x00012c18 cmp r3, 0 |
| if (r3 == 0) {
0x00012c1a beq 0x12ca8 | goto label_111;
| }
0x00012c1c ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x00012c1e mov r1, sl | r1 = sl;
0x00012c20 bl 0x10c44 | fcn_00010c44 (r0, r1, r2, r3, r4, r5);
0x00012c24 ldr r6, [r4] | r6 = *(r4);
0x00012c26 mov r1, r5 | r1 = r5;
0x00012c28 ldrb.w r4, [r8] | r4 = *(r8);
0x00012c2c ldr.w r0, [pc, 0xab8] | r0 = *(0x000136e8);
0x00012c30 mov r2, r6 | r2 = r6;
0x00012c32 add r0, pc | r0 += pc;
0x00012c34 bl 0x8b3c | fcn_00008b3c ();
0x00012c38 cmp r4, 0 |
0x00012c3a beq 0x12bb6 |
| } while (r4 == 0);
0x00012c3c ldr.w r3, [pc, 0xaac] | r3 = *(0x000136ec);
0x00012c40 mov r0, r6 | r0 = r6;
0x00012c42 add r3, pc | r3 += pc;
0x00012c44 ldr r3, [r3] | r3 = *(r3);
0x00012c46 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00012c48 ldr r0, [r7, 0x3c] | r0 = *((r7 + 0x3c));
0x00012c4a bl 0x10a7c | r0 = fcn_00010a7c (r0);
0x00012c4e mov r5, r0 | r5 = r0;
0x00012c50 cmp r0, 0 |
| if (r0 != 0) {
0x00012c52 bne 0x12bc2 | goto label_11;
| }
| label_109:
0x00012c54 ldr.w r5, [pc, 0xa98] |
0x00012c58 mov r8, r0 | r8 = r0;
0x00012c5a ldrd sb, r4, [r7, 0x18] | __asm ("ldrd sb, r4, [r7, 0x18]");
0x00012c5e ldr r6, [r7, 0x14] | r6 = *((r7 + 0x14));
0x00012c60 add r5, pc | r5 = 0x26354;
0x00012c62 ldr.w sl, [r7, 0x3c] | sl = *((r7 + 0x3c));
0x00012c66 ldr.w r3, [r5, 0x1cc] | r3 = *(0x26520);
0x00012c6a cmp r3, 0 |
| if (r3 != 0) {
0x00012c6c bne.w 0x12faa | goto label_112;
| }
| label_17:
0x00012c70 movs r3, 0 | r3 = 0;
0x00012c72 str r3, [r7, 0x3c] | *((r7 + 0x3c)) = r3;
0x00012c74 b 0x124ea | goto label_12;
| label_110:
0x00012c76 ldrb.w r4, [r8] | r4 = *(r8);
0x00012c7a mov r1, r5 | r1 = r5;
0x00012c7c ldr.w r0, [pc, 0xa74] | r0 = *(0x000136f4);
0x00012c80 str r2, [r7, 0x38] | *((r7 + 0x38)) = r2;
0x00012c82 add r0, pc | r0 += pc;
0x00012c84 bl 0x8b3c | fcn_00008b3c ();
0x00012c88 cmp r4, 0 |
| if (r4 == 0) {
0x00012c8a beq 0x12bb6 | goto label_13;
| }
0x00012c8c ldr.w r3, [pc, 0xa68] | r3 = *(0x000136f8);
0x00012c90 ldr r2, [r7, 0x38] | r2 = *((r7 + 0x38));
0x00012c92 add r3, pc | r3 += pc;
0x00012c94 ldr r3, [r3] | r3 = *(r3);
0x00012c96 mov r0, r2 | r0 = r2;
0x00012c98 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x00012c9a b 0x12bb6 | goto label_13;
| label_111:
0x00012ca8 ldr.w r2, [fp, 8] | r2 = *(arg_8h);
0x00012cac cmp r2, 0 |
| if (r2 == 0) {
0x00012cae beq.w 0x13d5c | goto label_113;
| }
0x00012cb2 movs r0, 2 | r0 = 2;
0x00012cb4 str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x00012cb6 blx r2 | uint32_t (*r2)(uint32_t, uint32_t) (r0, r3);
0x00012cb8 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00012cba mov r2, r0 | r2 = r0;
0x00012cbc cmp r0, 0 |
| if (r0 == 0) {
0x00012cbe beq.w 0x13006 | goto label_114;
| }
0x00012cc2 cmp r0, 2 |
| if (r0 > 2) {
0x00012cc4 bhi.w 0x139f2 | goto label_115;
| }
0x00012cc8 ldr.w r2, [pc, 0xa30] |
0x00012ccc movs r0, 0x24 | r0 = 0x24;
0x00012cce str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x00012cd0 add r2, pc |
0x00012cd2 ldr r2, [r2] | r2 = *(0x263d0);
0x00012cd4 blx r2 | uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x00012cd6 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00012cd8 cmp r0, 0 |
| if (r0 == 0) {
0x00012cda beq.w 0x13c18 | goto label_116;
| }
0x00012cde ldr.w r5, [pc, 0xa20] | r5 = *(0x00013700);
0x00012ce2 mov sl, r3 | sl = r3;
0x00012ce4 subs r3, r0, 4 | r3 = r0 - 4;
0x00012ce6 strd r6, r0, [r7, 8] | __asm ("strd r6, r0, [r7, 8]");
0x00012cea mov r6, fp | r6 = fp;
0x00012cec mov fp, r3 |
0x00012cee add r5, pc | r5 += pc;
0x00012cf0 add.w r5, r5, 0x370 | r5 += 0x370;
0x00012cf4 b 0x12d12 |
| while (r3 != 0) {
0x00012cf6 movs r3, 0 | r3 = 0;
| label_14:
0x00012cf8 mov r0, r5 | r0 = r5;
0x00012cfa movs r1, 0 | r1 = 0;
0x00012cfc str r3, [fp, 4]! | *(arg_4h) = r3;
0x00012d00 add.w sl, sl, 1 | sl++;
0x00012d04 bl 0x15a60 | void (*0x15a60)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00012d08 ldrb r2, [r0, 1] | r2 = *((r0 + 1));
0x00012d0a adds r5, r0, 1 | r5 = r0 + 1;
0x00012d0c cmp r2, 0 |
| if (r2 == 0) {
0x00012d0e beq.w 0x13164 | goto label_117;
| }
0x00012d12 str r5, [r6] | *(r6) = r5;
0x00012d14 mov r2, r8 | r2 = r8;
0x00012d16 str r6, [sp] | *(sp) = r6;
0x00012d18 mov r1, r4 | r1 = r4;
0x00012d1a ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x00012d1c mov r0, sb | r0 = sb;
0x00012d1e blx 0xa04 | fcn_00000a04 ();
0x00012d22 ldr r3, [r4] | r3 = *(r4);
0x00012d24 cmp r3, 0 |
0x00012d26 bne 0x12cf6 |
| }
0x00012d28 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00012d2a b 0x12cf8 | goto label_14;
| label_74:
0x00012d48 cmp r0, 6 |
| if (r0 == 6) {
0x00012d4a beq.w 0x12ffe | goto label_50;
| }
0x00012d4e ldr r0, [r7, 0x1c] | r0 = *((r7 + 0x1c));
0x00012d50 movs r1, 0 | r1 = 0;
0x00012d52 bl 0x102c0 | fcn_000102c0 (r0, r1);
0x00012d56 ldr.w r1, [pc, 0x9b0] | r1 = *(0x00013708);
0x00012d5a movs r2, 7 | r2 = 7;
0x00012d5c mov r0, r5 | r0 = r5;
0x00012d5e add r1, pc | r1 += pc;
0x00012d60 bl 0x15418 | r0 = fcn_00015418 (r0, r1, r2);
0x00012d64 cmp r0, 0 |
| if (r0 == 0) {
0x00012d66 beq.w 0x12fa0 | goto label_118;
| }
0x00012d6a ldr.w r1, [pc, 0x9a0] | r1 = *(0x0001370c);
0x00012d6e movs r2, 7 | r2 = 7;
0x00012d70 mov r0, r5 | r0 = r5;
0x00012d72 add r1, pc | r1 += pc;
0x00012d74 bl 0x15418 | r0 = fcn_00015418 (r0, r1, r2);
0x00012d78 cmp r0, 0 |
| if (r0 != 0) {
0x00012d7a bne.w 0x11612 | goto label_0;
| }
0x00012d7e ldrb r3, [r5, 8] | r3 = *((r5 + 8));
0x00012d80 cmp r3, 0 |
| if (r3 == 0) {
0x00012d82 beq.w 0x11612 | goto label_0;
| }
0x00012d86 ldr.w r3, [pc, 0x988] |
0x00012d8a adds r5, 8 | r5 += 8;
0x00012d8c add r3, pc | r3 = 0x264a2;
0x00012d8e str.w r5, [r3, 0x170] | __asm ("str.w r5, [r3, 0x170]");
0x00012d92 b.w 0x11612 | goto label_0;
| label_103:
0x00012e58 ldr.w r1, [pc, 0x8c0] |
0x00012e5c ldr.w r0, [pc, 0x8c0] | r0 = *(0x00013720);
0x00012e60 add r1, pc | r1 = 0x26580;
0x00012e62 add r0, pc | r0 += pc;
0x00012e64 bl 0x8b5c | dl_fatal_printf ()
| label_20:
0x00012e68 ldr.w r1, [pc, 0x8b8] | r1 = *(0x00013724);
0x00012e6c mov r0, r5 | r0 = r5;
0x00012e6e add r1, pc | r1 += pc;
0x00012e70 bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x00012e74 cmp r0, 0 |
| if (r0 == 0) {
0x00012e76 beq.w 0x130b0 | goto label_106;
| }
| label_105:
0x00012e7a ldr.w r1, [pc, 0x8ac] |
0x00012e7e mov r0, r5 | r0 = r5;
0x00012e80 add r1, pc | r1 = 0x265ae;
0x00012e82 bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x00012e86 cmp r0, 0 |
| if (r0 != 0) {
0x00012e88 bne.w 0x130f6 | goto label_119;
| }
0x00012e8c cmp r6, 2 |
| if (r6 == 2) {
0x00012e8e beq.w 0x130be | goto label_22;
| }
0x00012e92 ldr r3, [r4, 8]! | r3 = *((r4 += 8));
0x00012e96 subs r6, 2 | r6 -= 2;
0x00012e98 str.w r3, [sl, 0x158] | __asm ("str.w r3, [sl, 0x158]");
0x00012e9c b.w 0x1174e | goto label_3;
0x00012eae ldr r1, [r5] | r1 = *(r5);
0x00012eb0 str r1, [r2, 4] | *((r2 + 4)) = r1;
| label_18:
0x00012eb2 ldr r1, [r2, 8]! | r1 = *((r2 += 8));
0x00012eb6 cmp r1, 0 |
| if (r1 != 0) {
0x00012eb8 bne.w 0x11ac4 | goto label_15;
| }
| label_81:
0x00012ebc ldr r2, [r7, 4] | r2 = *((r7 + 4));
| if (r2 != 0) {
0x00012ebe cbz r2, 0x12ec4 |
0x00012ec0 ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x00012ec2 str r2, [r0] | *(r0) = r2;
| }
0x00012ec4 ldr r2, [r7, 0x14] | r2 = *((r7 + 0x14));
0x00012ec6 subs r1, r0, r2 | r1 = r0 - r2;
| if (r1 == r0) {
0x00012ec8 beq 0x12f78 | goto label_120;
| }
0x00012eca asrs r2, r1, 2 | r2 = r1 >> 2;
0x00012ecc ldr.w r6, [pc, 0x85c] |
0x00012ed0 mvn r5, 0xc0000000 | r5 = ~0xc0000000;
0x00012ed4 sub.w ip, r5, r2 |
0x00012ed8 ldr.w r3, [r0, ip, lsl 2] | offset_4 = ip << 2;
| r3 = *((r0 + offset_4));
0x00012edc add r6, pc | r6 = 0x2660c;
0x00012ede ldr r5, [r6, 4] | r5 = *(0x26610);
0x00012ee0 subs r2, r3, r2 | r2 = r3 - r2;
0x00012ee2 add.w r3, r0, ip, lsl 2 | r3 = r0 + (ip << 2);
0x00012ee6 cmp r2, r5 |
| if (r2 != r5) {
0x00012ee8 bne.w 0x13c60 | goto label_121;
| }
0x00012eec str.w r2, [r0, ip, lsl 2] | __asm ("str.w r2, [r0, ip, lsl 2]");
0x00012ef0 ldr.w r0, [pc, 0x83c] | r0 = *(0x00013730);
0x00012ef4 ldr r2, [r6] | r2 = *(r6);
0x00012ef6 add r0, pc | r0 += pc;
0x00012ef8 subs r2, r2, r1 | r2 -= r1;
0x00012efa str r2, [r6] | *(r6) = r2;
0x00012efc ldr r2, [r0] | r2 = *(r0);
0x00012efe subs r2, r2, r1 | r2 -= r1;
0x00012f00 str r2, [r0] | *(r0) = r2;
0x00012f02 adds r2, r1, 4 | r2 = r1 + 4;
0x00012f04 rsbs r0, r1, 0 | r0 = r1 - ;
0x00012f06 add r2, r3 | r2 += r3;
| do {
0x00012f08 mov r1, r2 | r1 = r2;
0x00012f0a ldr r5, [r2], 4 | r5 = *(r2);
| r2 += 4;
0x00012f0e mov r6, r3 | r6 = r3;
0x00012f10 str r5, [r3, 4]! | *((r3 += 4)) = r5;
0x00012f14 cmp r5, 0 |
0x00012f16 bne 0x12f08 |
| } while (r5 != 0);
0x00012f18 ldr.w r2, [pc, 0x818] | r2 = *(0x00013734);
0x00012f1c adds r6, 8 | r6 += 8;
0x00012f1e add r2, pc | r2 += pc;
0x00012f20 ldr r2, [r2] | r2 = *(r2);
0x00012f22 cmp r2, r6 |
| if (r2 != r6) {
0x00012f24 bne.w 0x13c9c | goto label_122;
| }
| do {
0x00012f28 mov r2, r1 | r2 = r1;
0x00012f2a ldr r5, [r1, 4]! | r5 = *((r1 += 4));
0x00012f2e mov r6, r3 | r6 = r3;
0x00012f30 str r5, [r3, 4]! | *((r3 += 4)) = r5;
0x00012f34 cmp r5, 0 |
0x00012f36 bne 0x12f28 |
| } while (r5 != 0);
0x00012f38 ldr.w r5, [pc, 0x7fc] | r5 = *(0x00013738);
0x00012f3c adds r6, 8 | r6 += 8;
0x00012f3e add r5, pc | r5 += pc;
0x00012f40 ldr r1, [r5, 0x48] | r1 = *((r5 + 0x48));
0x00012f42 add r1, r0 | r1 += r0;
0x00012f44 cmp r1, r6 |
0x00012f46 str r1, [r5, 0x48] | *((r5 + 0x48)) = r1;
0x00012f48 it eq |
| if (r1 != r6) {
0x00012f4a addeq r2, 8 | r2 += 8;
| }
| if (r1 != r6) {
0x00012f4c bne.w 0x13c88 | goto label_123;
| }
| do {
0x00012f50 ldr r0, [r2] | r0 = *(r2);
0x00012f52 mov r3, fp | r3 = fp;
0x00012f54 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x00012f56 adds r6, 8 | r6 += 8;
0x00012f58 adds r2, 8 | r2 += 8;
0x00012f5a stm r3!, {r0, r1} | *(r3!) = r0;
| *((r3! + 4)) = r1;
0x00012f5c mov r3, fp | r3 = fp;
0x00012f5e ldm r3!, {r0, r1} | r0 = *(r3!);
| r1 = *((r3! + 4));
0x00012f60 str r0, [r6, -0x8] | *((r6 - 0x8)) = r0;
0x00012f64 str r1, [r6, -0x4] | *((r6 - 0x4)) = r1;
0x00012f68 ldr.w r3, [fp] | r3 = *(fp);
0x00012f6c cmp r3, 0 |
0x00012f6e bne 0x12f50 |
| } while (r3 != 0);
0x00012f70 ldrh.w r3, [r4, 0x168] | r3 = *((r4 + 0x168));
0x00012f74 ldr.w r6, [r4, 0x160] | r6 = *((r4 + 0x160));
| label_120:
0x00012f78 movs r2, 1 | r2 = 1;
0x00012f7a str r2, [r7, 0x2c] | *((r7 + 0x2c)) = r2;
0x00012f7c b.w 0x11ba0 | goto label_16;
| label_118:
0x00012fa0 adds r5, 8 | r5 += 8;
0x00012fa2 str.w r5, [sl, 0x154] | __asm ("str.w r5, [sl, 0x154]");
0x00012fa6 b.w 0x11612 | goto label_0;
| label_112:
0x00012faa mov r1, r0 | r1 = r0;
0x00012fac mov r0, r4 | r0 = r4;
0x00012fae bl 0xe3a8 | fcn_0000e3a8 (r0, r1, r2, r3);
0x00012fb2 ldr.w r0, [pc, 0x790] |
0x00012fb6 mov r1, r8 | r1 = r8;
0x00012fb8 add r0, pc |
0x00012fba add.w r0, r0, 0x5f0 | r0 = 0x26cf2;
0x00012fbe bl 0xe3a8 | fcn_0000e3a8 (r0, r1, r2, r3);
0x00012fc2 ldr.w r3, [r5, 0x1cc] | r3 = *((r5 + 0x1cc));
0x00012fc6 cmp r3, r6 |
| if (r3 < r6) {
0x00012fc8 bls.w 0x12c70 | goto label_17;
| }
0x00012fcc ldr.w r3, [pc, 0x778] |
0x00012fd0 movw r2, 0x723 | r2 = 0x723;
0x00012fd4 ldr.w r1, [pc, 0x774] | r1 = *(0x0001374c);
0x00012fd8 ldr.w r0, [pc, 0x774] |
0x00012fdc add r3, pc | r3 = 0x26728;
0x00012fde add r1, pc | r1 += pc;
0x00012fe0 add r0, pc | r0 = 0x26734;
0x00012fe2 bl 0xfba4 | r0 = fcn_0000fba4 (r0);
0x00012fe6 ldr r1, [r0] | r1 = *(r0);
0x00012fe8 str r1, [r2, 4] | *((r2 + 4)) = r1;
0x00012fea b 0x12eb2 | goto label_18;
0x00012fec str r3, [r2, 4] | *((r2 + 4)) = r3;
0x00012fee b 0x12eb2 | goto label_18;
0x00012ff0 str r6, [r2, 4] | *((r2 + 4)) = r6;
0x00012ff2 b 0x12eb2 | goto label_18;
| label_50:
0x00012ffe ldr r0, [r7, 0x1c] | r0 = *((r7 + 0x1c));
0x00013000 mov r1, sl | r1 = sl;
0x00013002 bl 0x10310 | fcn_00010310 (r0, r1);
| label_114:
0x00013006 ldr.w r3, [pc, 0x74c] | r3 = *(0x00013754);
0x0001300a add r3, pc | r3 += pc;
0x0001300c ldr r3, [r3] | r3 = *(r3);
0x0001300e lsls r2, r3, 0x19 | r2 = r3 << 0x19;
| if (r2 < r3) {
0x00013010 bmi.w 0x13620 | goto label_124;
| }
| label_36:
0x00013014 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x00013016 mov r1, sl | r1 = sl;
0x00013018 bl 0x10c44 | fcn_00010c44 (r0, r1, r2, r3, r4, r5);
0x0001301c b 0x12bb6 | goto label_13;
| label_104:
0x0001305e bl 0x2b90 | fcn_00002b90 ();
0x00013062 mov r0, r4 | r0 = r4;
0x00013064 bl 0xfca8 | r0 = fcn_0000fca8 (r0);
0x00013068 bl 0xfe44 | fcn_0000fe44 (r0, r1);
0x0001306c ldrb.w r1, [r5, 0x794] | r1 = *((r5 + 0x794));
0x00013070 movs r3, 0 | r3 = 0;
0x00013072 mov r2, r3 | r2 = r3;
0x00013074 add.w r0, r5, 0x5f0 | r0 = r5 + 0x5f0;
0x00013078 bfc r1, 3, 1 | value_5 = BIT_MASK (1, );
| value_5 = ~value_5;
| r1 &= value_5;
0x0001307c strb.w r1, [r5, 0x794] | *((r5 + 0x794)) = r1;
0x00013080 ldr.w r1, [r4, 0x1e4] | r1 = *((r4 + 0x1e4));
0x00013084 bl 0x960c | fcn_0000960c (r0, r1, r2, r3, r4, r5, r6);
0x00013088 b.w 0x127f6 | goto label_19;
| label_82:
0x0001308c ldr.w r1, [pc, 0x6d0] | r1 = *(0x00013760);
0x00013090 mov r0, r5 | r0 = r5;
0x00013092 add r1, pc | r1 += pc;
0x00013094 bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x00013098 cmp r0, 0 |
| if (r0 == 0) {
0x0001309a beq.w 0x12e68 | goto label_20;
| }
0x0001309e ldr.w r1, [pc, 0x6c4] |
0x000130a2 mov r0, r5 | r0 = r5;
0x000130a4 add r1, pc | r1 = 0x2680e;
0x000130a6 bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x000130aa cmp r0, 0 |
| if (r0 != 0) {
0x000130ac bne.w 0x13294 | goto label_125;
| }
| label_106:
0x000130b0 ldr.w r1, [pc, 0x6b4] | r1 = *(0x00013768);
0x000130b4 mov r0, r5 | r0 = r5;
0x000130b6 add r1, pc | r1 += pc;
0x000130b8 bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
| if (r0 != 0) {
0x000130bc cbnz r0, 0x130f6 | goto label_119;
| }
| label_22:
0x000130be ldr.w r1, [pc, 0x6ac] |
0x000130c2 mov r0, r5 | r0 = r5;
0x000130c4 add r1, pc | r1 = 0x26836;
0x000130c6 bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x000130ca cmp r0, 0 |
| if (r0 == 0) {
0x000130cc beq.w 0x1325e | goto label_126;
| }
| do {
| label_23:
0x000130d0 ldr.w r1, [pc, 0x69c] | r1 = *(0x00013770);
0x000130d4 mov r0, r5 | r0 = r5;
0x000130d6 add r1, pc | r1 += pc;
0x000130d8 bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x000130dc cmp r0, 0 |
| if (r0 != 0) {
0x000130de bne.w 0x1326c | goto label_127;
| }
0x000130e2 cmp r6, 2 |
| if (r6 == 2) {
0x000130e4 beq.w 0x132b8 | goto label_128;
| }
0x000130e8 ldr r3, [r4, 8]! | r3 = *((r4 += 8));
0x000130ec subs r6, 2 | r6 -= 2;
0x000130ee str.w r3, [sl, 0x15c] | __asm ("str.w r3, [sl, 0x15c]");
0x000130f2 b.w 0x1174e | goto label_3;
| label_119:
0x000130f6 ldr.w r1, [pc, 0x67c] |
0x000130fa mov r0, r5 | r0 = r5;
0x000130fc add r1, pc | r1 = 0x26876;
0x000130fe bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x00013102 cmp r0, 0 |
0x00013104 bne 0x130d0 |
| } while (r0 != 0);
0x00013106 cmp r6, 2 |
| if (r6 == 2) {
0x00013108 beq.w 0x132b8 | goto label_128;
| }
0x0001310c ldr r3, [r4, 8]! | r3 = *((r4 += 8));
0x00013110 subs r6, 2 | r6 -= 2;
0x00013112 str r3, [r7, 4] | *((r7 + 4)) = r3;
0x00013114 b.w 0x1174e | goto label_3;
| label_80:
0x00013124 ldr.w r3, [pc, 0x650] |
0x00013128 add r3, pc | r3 = 0x268a4;
0x0001312a ldr r1, [r3] | r1 = *(0x268a4);
0x0001312c ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x0001312e ldr r6, [r1] | r6 = *(0x268a4);
| if (r3 != 0) {
0x00013130 cbz r3, 0x13134 |
0x00013132 str r3, [r1] | *(r1) = r3;
| }
0x00013134 ldr.w r3, [pc, 0x644] | r3 = *(0x0001377c);
0x00013138 mov r0, r6 | r0 = r6;
0x0001313a mov.w ip, 0xb |
0x0001313e add r3, pc | r3 += pc;
0x00013140 ldr r2, [r3] | r2 = *(r3);
0x00013142 bl 0x13fd0 | r0 = fcn_00013fd0 ();
0x00013146 rsbs r4, r0, 0 | r4 = r0 - ;
0x00013148 mov r0, r4 | r0 = r4;
0x0001314a bl 0x16190 | r0 = fcn_00016190 (r0);
0x0001314e mov r3, r0 | r3 = r0;
0x00013150 cmp r0, 0 |
| if (r0 == 0) {
0x00013152 beq.w 0x139d2 | goto label_129;
| }
0x00013156 ldr.w r0, [pc, 0x628] | r0 = *(0x00013780);
0x0001315a mov r2, r6 | r2 = r6;
0x0001315c mov r1, r5 | r1 = r5;
0x0001315e add r0, pc | r0 += pc;
0x00013160 bl 0x8b5c | dl_fatal_printf ()
| label_117:
0x00013164 cmp.w sl, 8 |
0x00013168 mov fp, r6 |
0x0001316a ldr r1, [r7, 0xc] | r1 = *((r7 + 0xc));
0x0001316c ldr r6, [r7, 8] | r6 = *((r7 + 8));
| if (sl != 8) {
0x0001316e bne.w 0x13c74 | goto label_130;
| }
0x00013172 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x00013174 str r2, [r1, 0x20] | *((r1 + 0x20)) = r2;
0x00013176 cmp r3, 0 |
| if (r3 == 0) {
0x00013178 beq.w 0x139e2 | goto label_131;
| }
0x0001317c ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x0001317e str r1, [r7, 0x10] | *((r7 + 0x10)) = r1;
0x00013180 str r1, [r3, 0x20] | *((r3 + 0x20)) = r1;
| label_47:
0x00013182 ldr.w r0, [pc, 0x600] |
0x00013186 ldr.w r2, [pc, 0x600] | r2 = *(0x00013788);
0x0001318a ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x0001318c add r0, pc | r0 = 0x26916;
0x0001318e ldr.w r3, [r0, 0x1cc] | r3 = *(0x26ae2);
0x00013192 add r2, pc | r2 += pc;
0x00013194 add.w r5, r2, 0x5f0 | r5 = r2 + 0x5f0;
0x00013198 add.w r4, r3, 0x10c | r4 = r3 + 0x10c;
0x0001319c adds r3, 1 | r3++;
0x0001319e str.w r5, [r2, r4, lsl 3] | __asm ("str.w r5, [r2, r4, lsl 3]");
0x000131a2 str.w r3, [r0, 0x1cc] | __asm ("str.w r3, [r0, 0x1cc]");
0x000131a6 ldrb.w r3, [r1, 0x1a6] | r3 = *((r1 + 0x1a6));
0x000131aa orr r3, r3, 1 | r3 |= 1;
0x000131ac lsls r1, r0, 0xc | r1 = r0 << 0xc;
0x000131ae strb.w r3, [r1, 0x1a6] | *((r1 + 0x1a6)) = r3;
0x000131b2 b 0x12bb6 | goto label_13;
| label_66:
0x000131b4 ldr.w r4, [pc, 0x5d4] |
0x000131b8 add r4, pc |
0x000131ba add.w r4, r4, 0x26c | r4 = 0x26bb4;
| do {
0x000131be mov r0, r4 | r0 = r4;
0x000131c0 bl 0xefb8 | fcn_0000efb8 (r0);
0x000131c4 mov r0, r4 | r0 = r4;
0x000131c6 bl 0x161c0 | r0 = fcn_000161c0 (r0, r1);
0x000131ca add r4, r0 | r4 += r0;
0x000131cc ldrb r5, [r4, 1] | r5 = *((r4 + 1));
0x000131ce adds r4, 1 | r4++;
0x000131d0 cmp r5, 0 |
0x000131d2 bne 0x131be |
| } while (r5 != 0);
0x000131d4 ldr.w r0, [pc, 0x5b8] | r0 = *(0x00013790);
0x000131d8 mov r1, r5 | r1 = r5;
0x000131da add r0, pc | r0 += pc;
0x000131dc bl 0x14c1c | r0 = fcn_00014c1c ();
| if (r0 != 0) {
0x000131e0 cbz r0, 0x131ea |
0x000131e2 ldr.w r3, [pc, 0x5b0] | r3 = *(0x00013794);
0x000131e6 add r3, pc | r3 += pc;
0x000131e8 str r5, [r3] | *(r3) = r5;
| }
0x000131ea ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x000131ee cmp r3, 0 |
| if (r3 == 0) {
0x000131f0 beq.w 0x116b8 | goto label_10;
| }
0x000131f4 movs r0, 5 | r0 = 5;
0x000131f6 bl 0x151e8 | fcn_000151e8 (r0);
0x000131fa b.w 0x116b8 | goto label_10;
0x000131fe mov r0, sb | r0 = sb;
0x00013200 bl 0x10b30 | r0 = fcn_00010b30 (r0);
0x00013204 mov sb, r0 | sb = r0;
0x00013206 b.w 0x1268c | goto label_21;
| label_126:
0x0001325e ldr.w r1, [pc, 0x53c] |
0x00013262 mov r0, r5 | r0 = r5;
0x00013264 add r1, pc | r1 = 0x26a06;
0x00013266 bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
| if (r0 == 0) {
0x0001326a cbz r0, 0x132b8 | goto label_128;
| }
| label_127:
0x0001326c ldr.w r1, [pc, 0x530] | r1 = *(0x000137a0);
0x00013270 mov r0, r5 | r0 = r5;
0x00013272 add r1, pc | r1 += pc;
0x00013274 bl 0x15bb0 | fcn_00015bb0 (r0, r1, r2, r3);
0x00013278 subs r3, r6, 2 | r3 = r6 - 2;
0x0001327a it ne |
| if (r3 == r6) {
0x0001327c movne r3, 1 | r3 = 1;
| }
0x0001327e cmp r0, 0 |
0x00013280 it ne |
| if (r0 == 0) {
0x00013282 movne r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x00013284 cbz r3, 0x132b8 | goto label_128;
| }
0x00013286 ldr r3, [r4, 8]! | r3 = *((r4 += 8));
0x0001328a subs r6, 2 | r6 -= 2;
0x0001328c str.w r3, [sl, 0x160] | __asm ("str.w r3, [sl, 0x160]");
0x00013290 b.w 0x1174e | goto label_3;
| label_125:
0x00013294 ldr.w r1, [pc, 0x50c] | r1 = *(0x000137a4);
0x00013298 mov r0, r5 | r0 = r5;
0x0001329a add r1, pc | r1 += pc;
0x0001329c bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x000132a0 cmp r0, 0 |
| if (r0 == 0) {
0x000132a2 beq.w 0x130be | goto label_22;
| }
0x000132a6 ldr.w r1, [pc, 0x500] |
0x000132aa mov r0, r5 | r0 = r5;
0x000132ac add r1, pc | r1 = 0x26a5a;
0x000132ae bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x000132b2 cmp r0, 0 |
| if (r0 != 0) {
0x000132b4 bne.w 0x130d0 | goto label_23;
| }
| label_128:
0x000132b8 ldr.w r1, [pc, 0x4f0] | r1 = *(0x000137ac);
0x000132bc mov r0, r5 | r0 = r5;
0x000132be add r1, pc | r1 += pc;
0x000132c0 bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x000132c4 cmp r0, 0 |
| if (r0 == 0) {
0x000132c6 beq.w 0x13594 | goto label_132;
| }
0x000132ca ldr.w r1, [pc, 0x4e4] |
0x000132ce mov r0, r5 | r0 = r5;
0x000132d0 add r1, pc | r1 = 0x26a86;
0x000132d2 bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x000132d6 cmp r0, 0 |
| if (r0 != 0) {
0x000132d8 bne.w 0x13a8a | goto label_133;
| }
0x000132dc movs r3, 5 | r3 = 5;
0x000132de subs r6, 1 | r6--;
0x000132e0 adds r4, 4 | r4 += 4;
0x000132e2 str.w r3, [sl, 0x164] | __asm ("str.w r3, [sl, 0x164]");
0x000132e6 b.w 0x1174e | goto label_3;
| label_94:
0x000132ea ldr r0, [r2, 0xc] | r0 = *((r2 + 0xc));
0x000132ec mov r6, r2 | r6 = r2;
0x000132ee str.w r2, [r5, 0x600] | __asm ("str.w r2, [r5, 0x600]");
0x000132f0 movs r6, 0 | r6 = 0;
0x000132f2 b.w 0x12630 | goto label_24;
| label_85:
0x000132f6 str r1, [r7, 0xc] | *((r7 + 0xc)) = r1;
| if (r6 == 0) {
0x000132f8 beq.w 0x11dac | void (*0x11dac)() ();
| }
0x000132fc b.w 0x11cb6 | void (*0x11cb6)() ();
| label_91:
0x00013300 ldr.w r2, [pc, 0x4b0] |
0x00013304 add r2, pc |
0x00013306 ldr.w r3, [r2, 0x5fc] | r3 = *(0x270b8);
0x0001330a ldr.w r2, [r2, 0x600] | r2 = *(0x270bc);
0x0001330e str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
| if (r3 != 0) {
0x00013310 cbz r3, 0x13314 |
0x00013312 str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
| }
| label_92:
0x00013314 movs r2, 0 | r2 = 0;
0x00013316 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x0001331a str r2, [r7, 0x2c] | *((r7 + 0x2c)) = r2;
0x0001331c b.w 0x12656 | void (*0x12656)() ();
| label_90:
0x00013338 lsls r3, r5, 2 | r3 = r5 << 2;
0x0001333a adds r3, 7 | r3 += 7;
0x0001333c bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00013340 sub.w sp, sp, r3 |
0x00013344 movs r3, 0 | r3 = 0;
0x00013346 add r1, sp, 0x10 | r1 += arg_10h;
0x00013348 add r2, sp, 0xc | r2 += arg_ch;
| do {
0x0001334a str r6, [r2, 4]! | *((r2 += 4)) = r6;
0x0001334e adds r3, 1 | r3++;
0x00013350 ldr r6, [r6, 0xc] | r6 = *((r6 + 0xc));
0x00013352 cmp r6, 0 |
0x00013354 bne 0x1334a |
| } while (r6 != 0);
0x00013356 cmp r5, r3 |
0x00013358 it eq |
| if (r5 == r3) {
0x0001335a moveq r6, r1 | r6 = r1;
| goto label_134;
| }
| if (r5 == r3) {
| label_134:
0x0001335c beq.w 0x12546 | goto label_25;
| }
0x00013360 ldr.w r3, [pc, 0x454] |
0x00013364 movw r2, 0x7ad | r2 = 0x7ad;
0x00013368 ldr.w r1, [pc, 0x450] | r1 = *(0x000137bc);
0x0001336c ldr.w r0, [pc, 0x450] |
0x00013370 add r3, pc | r3 = 0x26b2c;
0x00013372 add r1, pc | r1 += pc;
0x00013374 add r0, pc | r0 = 0x26b38;
0x00013376 bl 0xfba4 | fcn_0000fba4 (r0);
| label_89:
0x0001337a add.w r8, r7, 0x50 | r8 = r7 + 0x50;
0x0001337e mov r0, r6 | r0 = r6;
0x00013380 movs r2, 3 | r2 = 3;
0x00013382 mov r1, r8 | r1 = r8;
0x00013384 bl 0x7418 | r0 = fcn_00007418 (r0, r1, r2);
0x00013388 adds r3, r0, 1 | r3 = r0 + 1;
0x0001338a mov r6, r0 | r6 = r0;
| if (r3 == r0) {
0x0001338c beq.w 0x1253c | goto label_26;
| }
0x00013390 ldr.w r3, [r8] | r3 = *(r8);
0x00013394 str.w r0, [fp] | __asm ("str.w r0, [fp]");
0x00013398 cmp r3, 0 |
| if (r3 == 0) {
0x0001339a beq.w 0x13b80 | goto label_135;
| }
0x0001339e mov r6, r5 | r6 = r5;
0x000133a0 strd sl, r0, [r7, 0x34] | __asm ("strd sl, r0, [r7, 0x34]");
0x000133a4 mov r5, r4 | r5 = r4;
0x000133a6 mov sl, r8 | sl = r8;
0x000133a8 mov r4, r3 | r4 = r3;
0x000133aa mov r8, r0 | r8 = r0;
| label_46:
0x000133ac mov r2, r4 | r2 = r4;
0x000133ae ldr r0, [r7, 0x38] | r0 = *((r7 + 0x38));
0x000133b0 movs r1, 0x23 | r1 = 0x23;
0x000133b2 bl 0x168e0 | r0 = fcn_000168e0 (r0, r1, r2);
0x000133b6 mov r2, r0 | r2 = r0;
| if (r0 == 0) {
0x000133b8 cbz r0, 0x133e0 | goto label_136;
| }
0x000133ba ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x000133bc subs r0, r0, r3 | r0 -= r3;
0x000133be mov r3, r2 | r3 = r2;
0x000133c0 subs r0, r4, r0 | r0 = r4 - r0;
0x000133c2 subs r4, r0, 1 | r4 = r0 - 1;
0x000133c4 add r4, r2 | r4 += r2;
0x000133c6 b 0x133d6 |
| while (r3 != r4) {
0x000133c8 ldrb r1, [r3, 1] | r1 = *((r3 + 1));
0x000133ca add.w ip, r3, 1 |
0x000133ce cmp r1, 0xa |
| if (r1 == 0xa) {
0x000133d0 beq.w 0x139c4 | goto label_137;
| }
0x000133d4 mov r3, ip | r3 = ip;
0x000133d6 cmp r3, r4 |
0x000133d8 mov.w r1, 0x20 | r1 = 0x20;
0x000133dc strb r1, [r3] | *(r3) = r1;
0x000133de bne 0x133c8 |
| }
| label_136:
0x000133e0 mov r4, r5 | r4 = r5;
0x000133e2 mov r5, r6 | r5 = r6;
0x000133e4 mov r6, r8 | r6 = r8;
0x000133e6 mov r8, sl | r8 = sl;
0x000133e8 ldr.w r0, [r8] | r0 = *(r8);
0x000133ec ldr.w sl, [r7, 0x34] | sl = *((r7 + 0x34));
0x000133f0 subs r2, r0, 1 | r2 = r0 - 1;
0x000133f2 ldrb r3, [r6, r2] | r3 = *((r6 + r2));
0x000133f4 add r2, r6 | r2 += r6;
0x000133f6 cmp r3, 0x20 |
0x000133f8 it ne |
| if (r3 != 0x20) {
0x000133fa cmpne r3, 0x3a | __asm ("cmpne r3, 0x3a");
| }
0x000133fc sub.w r3, r3, 9 | r3 -= 9;
0x00013400 ite ne |
| if (r3 == 0x20) {
0x00013402 movne r1, 1 | r1 = 1;
| }
| if (r3 != 0x20) {
0x00013404 moveq r1, 0 | r1 = 0;
| }
0x00013406 cmp r3, 1 |
0x00013408 ite ls |
| if (r3 > 1) {
0x0001340a movls r1, 0 | r1 = 0;
| }
| if (r3 <= 1) {
0x0001340c andhi r1, r1, 1 | r1 &= 1;
| }
0x00013410 cmp r1, 0 |
| if (r1 != 0) {
0x00013412 bne.w 0x13bca | goto label_138;
| }
| label_59:
0x00013416 movs r3, 0 | r3 = 0;
0x00013418 strb r3, [r2] | *(r2) = r3;
| if (r6 == 0) {
0x0001341a cbz r6, 0x13488 | goto label_139;
| }
| label_60:
0x0001341c ldr r2, [pc, 0x3a4] |
0x0001341e str.w r6, [fp] | __asm ("str.w r6, [fp]");
0x00013420 str r0, [r0] | *(r0) = r0;
0x00013422 add r2, pc | r2 = 0x26bea;
0x00013424 strd r3, r2, [r7, 0x34] | __asm ("strd r3, r2, [r7, 0x34]");
0x00013428 b 0x13432 |
| while (r0 != 0) {
0x0001342a ldrb r2, [r2] | r2 = *(r2);
0x0001342c cmp r2, 0 |
| if (r2 != 0) {
0x0001342e bne.w 0x13b68 | goto label_140;
| }
| label_58:
0x00013432 ldr r1, [r7, 0x38] | r1 = *((r7 + 0x38));
0x00013434 mov r0, fp | r0 = fp;
0x00013436 bl 0xfde8 | r0 = fcn_0000fde8 (r0, r1);
0x0001343a mov r2, r0 | r2 = r0;
0x0001343c cmp r0, 0 |
0x0001343e bne 0x1342a |
| }
0x00013440 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
| if (r3 != 0) {
| label_61:
0x00013442 cbz r3, 0x13488 |
| label_63:
0x00013444 ldr.w r1, [r8] | r1 = *(r8);
0x00013448 subs r2, r3, r6 | r2 = r3 - r6;
0x0001344a mov r0, r3 | r0 = r3;
0x0001344c str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
0x0001344e subs r1, r1, r2 | r1 -= r2;
0x00013450 bl 0x1635c | fcn_0001635c (r0, r1);
0x00013454 ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x00013456 mov r2, r0 | r2 = r0;
0x00013458 mov.w ip, 0 |
0x0001345c mov r1, r3 | r1 = r3;
0x0001345e add.w r3, r0, 8 | r3 = r0 + 8;
0x00013462 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00013466 sub.w sp, sp, r3 |
0x0001346a add.w r0, sp, 0x17 | r0 += arg_17h;
0x0001346e lsrs r3, r0, 3 | r3 = r0 >> 3;
0x00013470 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x00013474 strb.w ip, [r2, r3, lsl 3] | offset_6 = r3 << 3;
| *((r2 + offset_6)) = ip;
0x00013478 blx 0x16400 | fcn_00016400 (r0, r1);
0x0001347c ldr r2, [pc, 0x348] |
0x0001347e mov r1, r4 | r1 = r4;
0x00013480 add r2, pc | r2 = 0x26c4c;
0x00013482 bl 0x10838 | r0 = fcn_00010838 (r0, r1, r2);
0x00013486 add r5, r0 | r5 += r0;
| }
| label_139:
0x00013488 ldr.w r1, [r8] | r1 = *(r8);
0x0001348c mov r0, r6 | r0 = r6;
0x0001348e bl 0x15010 | fcn_00015010 (r0);
0x00013492 b.w 0x1253c | goto label_26;
| label_88:
0x00013496 ldr r2, [pc, 0x334] |
0x00013498 mov r1, r4 | r1 = r4;
0x0001349a add r2, pc | r2 = 0x26c6c;
0x0001349c bl 0x114f0 | r0 = fcn_000114f0 (r0, r1, r2);
0x000134a0 add r5, r0 | r5 += r0;
0x000134a2 b.w 0x12528 | goto label_27;
| label_87:
0x000134a6 ldr r2, [pc, 0x328] |
0x000134a8 mov r0, r5 | r0 = r5;
0x000134aa mov r1, r4 | r1 = r4;
0x000134ac add r2, pc | r2 = 0x26c82;
0x000134ae bl 0x114f0 | r0 = fcn_000114f0 (r0, r1, r2);
0x000134b2 mov r5, r0 | r5 = r0;
0x000134b4 b.w 0x1251e | goto label_28;
| label_101:
0x000134b8 bl 0x8b78 | fcn_00008b78 (r0, r1);
0x000134bc b.w 0x1278a | goto label_29;
| label_98:
0x000134c0 ldr r0, [pc, 0x310] |
0x000134c2 mov r5, r4 | r5 = r4;
0x000134c4 add r0, pc | r0 = 0x26c9c;
0x000134c6 bl 0x8aa8 | fcn_00008aa8 ();
| do {
0x000134ca mov r0, r5 | r0 = r5;
0x000134cc movs r1, 0 | r1 = 0;
0x000134ce bl 0x7ec4 | fcn_00007ec4 (r0, r1, r2, r3);
0x000134d2 ldr r5, [r5, 0xc] | r5 = *((r5 + 0xc));
0x000134d4 cmp r5, 0 |
0x000134d6 bne 0x134ca |
| } while (r5 != 0);
0x000134d8 b.w 0x126e2 | goto label_30;
| label_97:
0x000134dc ldr r2, [pc, 0x2f8] |
0x000134de add r2, pc | r2 = 0x26cba;
0x000134e0 ldr r1, [r2] | r1 = *(0x26cba);
0x000134e2 lsls r0, r1, 0x17 | r0 = r1 << 0x17;
| if (r0 < r1) {
0x000134e4 bmi 0x135b0 | goto label_141;
| }
0x000134e6 ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x000134e8 cmp r2, 0 |
| if (r2 == 0) {
0x000134ea beq.w 0x13afc | goto label_142;
| }
0x000134ee ldrb.w r2, [sl, 0x168] | r2 = *((sl + 0x168));
0x000134f2 cmp r2, 0 |
| if (r2 != 0) {
0x000134f4 bne.w 0x13af0 | goto label_143;
| }
0x000134f8 ldr r5, [r4, 0xc] | r5 = *((r4 + 0xc));
0x000134fa cmp r5, 0 |
| if (r5 == 0) {
0x000134fc beq.w 0x1363c | goto label_51;
| }
| label_56:
0x00013500 ldr r3, [pc, 0x2d8] |
0x00013502 ldr.w r8, [pc, 0x2dc] | r8 = *(0x000137e0);
0x00013506 add r3, pc | r3 = 0x26ce6;
0x00013508 str r3, [r7, 0x3c] | *((r7 + 0x3c)) = r3;
0x0001350a add r8, pc | r8 += pc;
0x0001350c ldr r3, [pc, 0x2d4] |
0x0001350e add r3, pc | r3 = 0x26cf6;
0x00013510 str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
0x00013512 b 0x13560 |
| while (r1 >= r3) {
0x00013514 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x00013516 mov r0, r6 | r0 = r6;
0x00013518 mov r1, r2 | r1 = r2;
0x0001351a str r2, [r7, 0x34] | *((r7 + 0x34)) = r2;
0x0001351c bl 0x15bb0 | fcn_00015bb0 (r0, r1, r2, r3);
0x00013520 ldr.w r3, [r5, 0x1c4] | r3 = *((r5 + 0x1c4));
0x00013524 ldr r2, [r7, 0x34] | r2 = *((r7 + 0x34));
0x00013526 cmp r0, 0 |
| if (r0 == 0) {
0x00013528 beq.w 0x139b4 | goto label_144;
| }
0x0001352c ldrb r1, [r6] | r1 = *(r6);
| if (r1 == 0) {
0x0001352e cbnz r1, 0x1353c |
0x00013530 ldr r1, [r7, 0x38] | r1 = *((r7 + 0x38));
0x00013532 ldr r1, [r1] | r1 = *(r1);
0x00013534 ldr r6, [r1] | r6 = *(r1);
0x00013536 cmp r6, 0 |
| if (r6 == 0) {
0x00013538 beq.w 0x13aea | goto label_145;
| }
| }
| label_55:
0x0001353c ldrb r1, [r2] | r1 = *(r2);
| if (r1 == 0) {
0x0001353e cbnz r1, 0x1354c |
0x00013540 ldr.w r2, [r8] | r2 = *(r8);
0x00013544 ldr r2, [r2] | r2 = *(r2);
0x00013546 cmp r2, 0 |
| if (r2 == 0) {
0x00013548 beq.w 0x13ad2 | goto label_146;
| }
| }
| label_53:
0x0001354c str r3, [sp] | *(sp) = r3;
0x0001354e mov r1, r6 | r1 = r6;
0x00013550 ldr r0, [r7, 0x3c] | r0 = *((r7 + 0x3c));
0x00013552 movs r3, 8 | r3 = 8;
0x00013554 bl 0x8b1c | fcn_00008b1c ();
| label_31:
0x00013558 ldr r5, [r5, 0xc] | r5 = *((r5 + 0xc));
0x0001355a cmp r5, 0 |
| if (r5 == 0) {
0x0001355c beq.w 0x13aa8 | goto label_147;
| }
0x00013560 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00013562 ldr r6, [r3] | r6 = *(r3);
0x00013564 ldrb.w r3, [r5, 0x1a5] | r3 = *((r5 + 0x1a5));
0x00013568 lsls r1, r3, 0x19 | r1 = r3 << 0x19;
0x0001356a bpl 0x13514 |
| }
0x0001356c ldr r0, [pc, 0x278] |
0x0001356e mov r1, r6 | r1 = r6;
0x00013570 add r0, pc | r0 = 0x26d5c;
0x00013572 bl 0x8b1c | fcn_00008b1c ();
0x00013576 b 0x13558 | goto label_31;
| label_72:
0x00013578 bl 0xdeec | fcn_0000deec ();
0x0001357c movs r0, 0 | r0 = 0;
0x0001357e bl 0x151e8 | fcn_000151e8 (r0);
0x00013582 ldr.w r0, [sl, 0x164] | r0 = *((sl + 0x164));
0x00013586 b.w 0x119ac | goto label_32;
| label_93:
0x0001358a ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x0001358c str.w r2, [ip, 0x5fc] | __asm ("str.w r2, [ip, 0x5fc]");
0x00013590 b.w 0x12636 | goto label_33;
| label_132:
0x00013594 movs r3, 4 | r3 = 4;
0x00013596 subs r6, 1 | r6--;
0x00013598 adds r4, 4 | r4 += 4;
0x0001359a str.w r3, [sl, 0x164] | __asm ("str.w r3, [sl, 0x164]");
0x0001359e b.w 0x1174e | goto label_3;
| label_69:
0x000135a8 movs r3, 0 | r3 = 0;
0x000135aa str r3, [r7, 4] | *((r7 + 4)) = r3;
0x000135ac b.w 0x119a2 | goto label_34;
| label_141:
0x000135b0 ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x000135b2 mov r2, fp | r2 = fp;
0x000135b4 ldr r1, [pc, 0x234] |
0x000135b6 ldr r0, [pc, 0x238] |
0x000135b8 cmp r3, 0 |
0x000135ba mov.w r3, 1 |
0x000135be movt r3, 0x200 | r3 = 0x2000001;
0x000135c2 it eq |
| if (r3 != 0) {
0x000135c4 moveq r3, 0x2000000 | r3 = 0x2000000;
| }
0x000135c8 add r0, pc | r0 = 0x26dbe;
0x000135ca str.w r3, [fp, 4] | __asm ("str.w r3, [arg_4h]");
0x000135ce add r1, pc | r1 = 0x26dbe;
0x000135d0 str.w r4, [fp] | __asm ("str.w r4, [fp]");
0x000135d4 bl 0xf298 | fcn_0000f298 (r0, r1);
0x000135d8 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x000135da ldr r0, [r3] | r0 = *(r3);
| if (r0 == 0) {
0x000135dc cbz r0, 0x13634 | goto label_148;
| }
0x000135de mov r8, r3 | r8 = r3;
0x000135e0 ldr r3, [pc, 0x210] |
0x000135e2 ldr r6, [pc, 0x214] |
0x000135e4 mov r5, r4 | r5 = r4;
0x000135e6 add r3, pc | r3 = 0x26dde;
0x000135e8 str r3, [r7, 0x3c] | *((r7 + 0x3c)) = r3;
0x000135ea add r6, pc | r6 = 0x26de8;
0x000135ec movs r3, 1 | r3 = 1;
0x000135ee b 0x135f6 |
| while (r0 != 1) {
| label_35:
0x000135f0 ldr r0, [r8, 8]! | r0 = *((r8 += 8));
| if (r0 == 0) {
0x000135f4 cbz r0, 0x13630 | goto label_149;
| }
0x000135f6 cmp r0, 1 |
0x000135f8 bne 0x135f0 |
| }
0x000135fa ldr r5, [r5, 0xc] | r5 = *((r5 + 0xc));
0x000135fc ldr.w r2, [r6, 0x180] | r2 = *((r6 + 0x180));
0x00013600 cmp r2, r5 |
0x00013602 it eq |
| if (r2 != r5) {
0x00013604 ldreq r5, [r5, 0xc] | r5 = *((r5 + 0xc));
| }
0x00013606 ldr.w r2, [r5, 0x214] | r2 = *((r5 + 0x214));
0x0001360a cmp r2, 0 |
| if (r2 != 0) {
0x0001360c bne 0x135f0 | goto label_35;
| }
0x0001360e cmp r3, 0 |
| if (r3 != 0) {
0x00013610 bne.w 0x13ae0 | goto label_150;
| }
| label_54:
0x00013614 ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x00013616 ldr r0, [r7, 0x3c] | r0 = *((r7 + 0x3c));
0x00013618 bl 0x8b1c | fcn_00008b1c ();
0x0001361c movs r3, 0 | r3 = 0;
0x0001361e b 0x135f0 | goto label_35;
| label_124:
0x00013620 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00013622 ldr r0, [pc, 0x1d8] |
0x00013624 ldr r2, [r3, 0x18] | r2 = *((r3 + 0x18));
0x00013626 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x00013628 add r0, pc | r0 = 0x26e2a;
0x0001362a bl 0x8aa8 | fcn_00008aa8 ();
0x0001362e b 0x13014 | goto label_36;
| label_149:
0x00013630 eor r0, r3, 1 | r0 = r3 ^ 1;
| label_148:
0x00013634 bl 0x151e8 | fcn_000151e8 (r0);
0x00013638 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
| label_51:
0x0001363c cmp r3, 3 |
| if (r3 != 3) {
0x0001363e bne.w 0x13b0a | goto label_151;
| }
0x00013642 ldr r2, [pc, 0x1bc] |
0x00013644 add r2, pc | r2 = 0x26e4a;
0x00013646 ldr r3, [r2, 0x2c] | r3 = *(0x26e76);
0x00013648 cmp r3, 0 |
| if (r3 < 0) {
0x0001364a blt.w 0x13810 | goto label_152;
| }
0x0001364e ldr r2, [r2, 0x24] | r2 = *((r2 + 0x24));
0x00013650 cmp r2, 0 |
| if (r2 == 0) {
0x00013652 beq.w 0x13810 | goto label_152;
| }
0x00013656 ldr.w r2, [r4, 0x170] | r2 = *((r4 + 0x170));
0x0001365a cmp r3, 0 |
0x0001365c mov.w r3, 1 |
0x00013660 movt r3, 0x200 | r3 = 0x2000001;
0x00013664 it eq |
| if (r3 != 0) {
0x00013666 moveq r3, 0x2000000 | r3 = 0x2000000;
| }
0x0001366a subs r5, r2, 1 | r5 = r2 - 1;
0x0001366c str.w r3, [fp, 4] | __asm ("str.w r3, [arg_4h]");
0x00013670 cmp r2, 0 |
| if (r2 == 0) {
0x00013672 beq.w 0x13810 | goto label_152;
| }
0x00013676 ldr r6, [pc, 0x18c] |
0x00013678 ldr r1, [pc, 0x18c] |
0x0001367a ldr.w r8, [pc, 0x190] | r8 = *(0x0001380c);
0x0001367e add r6, pc |
0x00013680 add r1, pc | r1 = 0x26e8c;
0x00013682 add.w r6, r6, 0x5f0 | r6 = 0x27478;
0x00013686 add r8, pc | r8 += pc;
0x00013688 mov r0, r8 | r0 = r8;
0x0001368a mov r8, r1 | r8 = r1;
0x0001368c b 0x13694 |
| while (r3 == r6) {
| label_37:
0x0001368e subs r5, 1 | r5--;
| if (r5 <= 1) {
0x00013690 blo.w 0x13810 | goto label_152;
| }
0x00013694 ldr.w r3, [r4, 0x208] | r3 = *((r4 + 0x208));
0x00013698 ldr.w r3, [r3, r5, lsl 2] | offset_7 = r5 << 2;
| r3 = *((r3 + offset_7));
0x0001369c cmp r3, r6 |
0x0001369e beq 0x1368e |
| }
0x000136a0 ldrb.w r2, [r3, 0x1a5] | r2 = *((r3 + 0x1a5));
0x000136a4 lsls r2, r2, 0x19 | r2 <<= 0x19;
| if (r2 < r2) {
0x000136a6 bmi 0x1368e | goto label_37;
| }
0x000136a8 mov r2, fp | r2 = fp;
0x000136aa mov r1, r8 | r1 = r8;
0x000136ac str.w r3, [fp] | __asm ("str.w r3, [fp]");
0x000136b0 str r0, [r7, 0x3c] | *((r7 + 0x3c)) = r0;
0x000136b2 bl 0xf298 | fcn_0000f298 (r0, r1);
0x000136b6 ldr r0, [r7, 0x3c] | r0 = *((r7 + 0x3c));
0x000136b8 b 0x1368e | goto label_37;
| label_152:
0x00013810 ldrb.w r3, [sl, 0x16a] | r3 = *((sl + 0x16a));
0x00013814 cmp r3, 0 |
| if (r3 == 0) {
0x00013816 beq.w 0x1399e | goto label_57;
| }
0x0001381a ldr.w r3, [pc, 0x5f0] |
0x0001381e mov r6, r4 | r6 = r4;
0x00013820 strd sb, r4, [r7, 0x24] | __asm ("strd sb, r4, [r7, 0x24]");
0x00013824 add r3, pc | r3 = 0x27636;
0x00013826 str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
0x00013828 ldr.w r3, [pc, 0x5e4] |
0x0001382c add r3, pc | r3 = 0x27640;
0x0001382e str r3, [r7, 0x34] | *((r7 + 0x34)) = r3;
0x00013830 movs r3, 1 | r3 = 1;
| label_43:
0x00013832 ldr.w r2, [r6, 0xbc] | r2 = *((r6 + 0xbc));
0x00013836 cmp r2, 0 |
| if (r2 == 0) {
0x00013838 beq.w 0x13992 | goto label_153;
| }
0x0001383c ldr r1, [r6, 0x34] | r1 = *((r6 + 0x34));
0x0001383e ldrb.w r0, [r6, 0x1a6] | r0 = *((r6 + 0x1a6));
0x00013842 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00013844 ldr r5, [r1, 4] | r5 = *((r1 + 4));
0x00013846 ldr r1, [r6] | r1 = *(r6);
0x00013848 lsls r0, r0, 0x1a | r0 <<= 0x1a;
0x0001384a it mi |
| if (r0 >= r0) {
0x0001384c addmi r5, r5, r1 | r5 += r1;
| }
0x0001384e add.w r8, r1, r2 | r8 = r1 + r2;
0x00013852 cmp r3, 0 |
| if (r3 != 0) {
0x00013854 bne.w 0x139a8 | goto label_154;
| }
| label_45:
0x00013858 ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x0001385a ldrb r3, [r1] | r3 = *(r1);
| if (r3 == 0) {
0x0001385c cbnz r3, 0x1386e |
0x0001385e ldr.w r3, [pc, 0x5b4] | r3 = *(0x00013e14);
0x00013862 add r3, pc | r3 += pc;
0x00013864 ldr r3, [r3] | r3 = *(r3);
0x00013866 ldr r1, [r3] | r1 = *(r3);
0x00013868 cmp r1, 0 |
| if (r1 == 0) {
0x0001386a beq.w 0x13aae | goto label_155;
| }
| }
| label_52:
0x0001386e ldr.w r3, [pc, 0x5a8] | r3 = *(0x00013e18);
0x00013872 ldr.w r0, [pc, 0x5a8] |
0x00013876 add r3, pc | r3 += pc;
0x00013878 add r0, pc | r0 = 0x2769a;
0x0001387a str r3, [r7, 0x3c] | *((r7 + 0x3c)) = r3;
0x0001387c bl 0x8b1c | fcn_00008b1c ();
0x00013880 str r6, [r7, 0x20] | *((r7 + 0x20)) = r6;
| label_40:
0x00013882 ldr.w r3, [pc, 0x59c] | r3 = *(0x00013e20);
0x00013886 ldr.w r4, [r8, 4] | r4 = *((r8 + 4));
0x0001388a add r3, pc | r3 += pc;
0x0001388c ldr.w sl, [r3] | sl = *(r3);
0x00013890 add r4, r5 | r4 += r5;
0x00013892 ldr.w r6, [sl, 0x170] | r6 = *((sl + 0x170));
0x00013896 subs r6, 1 | r6--;
0x00013898 b 0x138b0 |
| while (r2 != r6) {
0x0001389a ldr.w r3, [sl, 0x16c] | r3 = *((sl + 0x16c));
0x0001389e mov r0, r4 | r0 = r4;
0x000138a0 ldr.w r1, [r3, r6, lsl 2] | offset_8 = r6 << 2;
| r1 = *((r3 + offset_8));
0x000138a4 bl 0x746c | fcn_0000746c (r0, r1);
0x000138a8 lsls r2, r6, 2 | r2 = r6 << 2;
0x000138aa subs r6, 1 | r6--;
0x000138ac cmp r0, 0 |
| if (r0 != 0) {
0x000138ae bne 0x13988 | goto label_156;
| }
0x000138b0 adds r2, r6, 1 | r2 = r6 + 1;
0x000138b2 bne 0x1389a |
| }
0x000138b4 movs r6, 0 | r6 = 0;
| label_42:
0x000138b6 ldr.w r4, [r8, 8] | r4 = *((r8 + 8));
0x000138ba add r4, r8 | r4 += r8;
0x000138bc ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x000138be add.w sl, r5, r2 | sl = r5 + r2;
0x000138c2 cmp r6, 0 |
| if (r6 == 0) {
0x000138c4 beq 0x13938 | goto label_157;
| }
| label_38:
0x000138c6 ldr r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x000138c8 ldr.w sb, [r3, 4] | sb = *((r3 + 4));
0x000138cc ldrb.w r3, [r6, 0x1a6] | r3 = *((r6 + 0x1a6));
0x000138d0 lsls r3, r3, 0x1a | r3 <<= 0x1a;
0x000138d2 itt mi |
| if (r3 >= r3) {
0x000138d4 ldrmi r3, [r6] | r3 = *(r6);
| }
| if (r3 >= r3) {
0x000138d6 addmi sb, r3 | sb += r3;
| }
0x000138d8 ldr.w r3, [r6, 0xc4] | r3 = *((r6 + 0xc4));
| if (r3 == 0) {
0x000138dc cbz r3, 0x13938 | goto label_157;
| }
0x000138de ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000138e0 ldr r1, [r6] | r1 = *(r6);
0x000138e2 add.w fp, r3, r1 |
0x000138e6 b 0x138f0 |
| while (r0 != 0) {
0x000138e8 ldr.w r3, [fp, 0x10] | r3 = *(arg_10h);
| if (r3 == 0) {
0x000138ec cbz r3, 0x13954 | goto label_158;
| }
0x000138ee add fp, r3 |
0x000138f0 ldr.w r3, [fp, 0xc] | r3 = *(arg_ch);
0x000138f4 mov r0, sl | r0 = sl;
0x000138f6 ldr.w r1, [fp, r3] | r1 = *((fp + r3));
0x000138fa add r1, sb | r1 += sb;
0x000138fc bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x00013900 cmp r0, 0 |
0x00013902 bne 0x138e8 |
| }
0x00013904 ldrh r3, [r4, 4] | r3 = *((r4 + 4));
0x00013906 ldr.w r1, [r8, 4] | r1 = *((r8 + 4));
0x0001390a ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0001390c lsls r3, r3, 0x1e | r3 <<= 0x1e;
0x0001390e add r1, r5 | r1 += r5;
| if (r3 < r3) {
0x00013910 bmi 0x13972 | goto label_159;
| }
0x00013912 ldr.w r3, [pc, 0x510] | r3 = *(0x00013e24);
0x00013916 add r3, pc | r3 += pc;
| if (r0 == 0) {
| label_41:
0x00013918 cbz r0, 0x1394c | goto label_160;
| }
| label_39:
0x0001391a str r0, [sp] | *(sp) = r0;
0x0001391c mov r2, sl | r2 = sl;
0x0001391e ldr.w r0, [pc, 0x508] | r0 = *(0x00013e28);
0x00013922 add r0, pc | r0 += pc;
0x00013924 bl 0x8b1c | fcn_00008b1c ();
0x00013928 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 == 0) {
0x0001392a cbz r3, 0x13968 | goto label_161;
| }
0x0001392c add r4, r3 | r4 += r3;
0x0001392e ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00013930 add.w sl, r5, r2 | sl = r5 + r2;
0x00013934 cmp r6, 0 |
| if (r6 != 0) {
0x00013936 bne 0x138c6 | goto label_38;
| }
| label_157:
0x00013938 ldrh r3, [r4, 4] | r3 = *((r4 + 4));
0x0001393a ldr.w r1, [r8, 4] | r1 = *((r8 + 4));
0x0001393e lsls r0, r3, 0x1e | r0 = r3 << 0x1e;
0x00013940 it pl |
| if (r0 >= r3) {
0x00013942 ldrdpl r0, r3, [r7, 0x34] | __asm ("ldrdpl r0, r3, [r7, 0x34]");
| }
0x00013946 add r1, r5 | r1 += r5;
| if (r0 >= r3) {
0x00013948 bpl 0x1391a | goto label_39;
| }
0x0001394a ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
| do {
| label_160:
0x0001394c ldr.w r0, [pc, 0x4dc] |
0x00013950 add r0, pc | r0 = 0x27780;
0x00013952 b 0x1391a | goto label_39;
| label_158:
0x00013954 ldrh r3, [r4, 4] | r3 = *((r4 + 4));
0x00013956 ldr.w r1, [r8, 4] | r1 = *((r8 + 4));
0x0001395a lsls r2, r3, 0x1e | r2 = r3 << 0x1e;
0x0001395c add r1, r5 | r1 += r5;
| if (r2 < r3) {
0x0001395e bmi 0x1397a | goto label_162;
| }
0x00013960 ldr.w r3, [pc, 0x4cc] |
0x00013964 add r3, pc | r3 = 0x27798;
0x00013966 b 0x1394c |
| } while (1);
| label_161:
0x00013968 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
| if (r3 != 0) {
0x0001396c cbz r3, 0x13990 |
0x0001396e add r8, r3 | r8 += r3;
0x00013970 b 0x13882 | goto label_40;
| label_159:
0x00013972 ldr.w r3, [pc, 0x4c0] | r3 = *(0x00013e34);
0x00013976 add r3, pc | r3 += pc;
0x00013978 b 0x13918 | goto label_41;
| label_162:
0x0001397a ldr.w r3, [pc, 0x4bc] | r3 = *(0x00013e38);
0x0001397e ldr.w r0, [pc, 0x4bc] |
0x00013980 lsls r4, r7, 0x12 | r4 = r7 << 0x12;
0x00013982 add r3, pc | r3 += pc;
0x00013984 add r0, pc | r0 = 0x277c6;
0x00013986 b 0x1391a | goto label_39;
| label_156:
0x00013988 ldr.w r3, [sl, 0x16c] | r3 = *((sl + 0x16c));
0x0001398c ldr r6, [r3, r2] | r6 = *((r3 + r2));
0x0001398e b 0x138b6 | goto label_42;
| }
0x00013990 ldr r6, [r7, 0x20] | r6 = *((r7 + 0x20));
| label_153:
0x00013992 ldr r6, [r6, 0xc] | r6 = *((r6 + 0xc));
0x00013994 cmp r6, 0 |
| if (r6 != 0) {
0x00013996 bne.w 0x13832 | goto label_43;
| }
0x0001399a ldrd sb, r4, [r7, 0x24] | __asm ("ldrd sb, r4, [r7, 0x24]");
| label_57:
0x0001399e movs r0, 0 | r0 = 0;
0x000139a0 bl 0x151e8 | fcn_000151e8 (r0);
0x000139a4 b.w 0x126ba | goto label_44;
| label_154:
0x000139a8 ldr.w r0, [pc, 0x494] |
0x000139ac add r0, pc | r0 = 0x277f0;
0x000139ae bl 0x8b1c | fcn_00008b1c ();
0x000139b2 b 0x13858 | goto label_45;
| label_144:
0x000139b4 ldr.w r0, [pc, 0x48c] |
0x000139b8 mov r1, r6 | r1 = r6;
0x000139ba movs r2, 8 | r2 = 8;
0x000139bc add r0, pc | r0 = 0x27804;
0x000139be bl 0x8b1c | fcn_00008b1c ();
0x000139c2 b 0x13558 | goto label_31;
| label_137:
0x000139c4 subs r2, 1 | r2--;
0x000139c6 add r2, r0 | r2 += r0;
0x000139c8 subs r4, r2, r3 | r4 = r2 - r3;
0x000139ca ldr.w r3, [fp] | r3 = *(fp);
0x000139ce str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
0x000139d0 b 0x133ac | goto label_46;
| label_129:
0x000139d2 ldr.w r0, [pc, 0x474] |
0x000139d6 mov r3, r4 | r3 = r4;
0x000139d8 mov r2, r6 | r2 = r6;
0x000139da mov r1, r5 | r1 = r5;
0x000139dc add r0, pc | r0 = 0x2782a;
0x000139de bl 0x8b5c | dl_fatal_printf ()
| label_131:
0x000139e2 ldr.w r3, [pc, 0x468] | r3 = switch.0x0000a33c;
0x000139e6 str r1, [r7, 0x10] | *((r7 + 0x10)) = r1;
0x000139e8 add r3, pc | r3 += pc;
0x000139ea str.w r1, [r3, 0x1c8] | __asm ("str.w r1, [r3, 0x1c8]");
0x000139ee b.w 0x13182 | goto label_47;
| label_115:
0x000139f2 ldr.w r0, [pc, 0x45c] | r0 = *(0x00013e50);
0x000139f6 mov r1, r5 | r1 = r5;
0x000139f8 movs r3, 2 | r3 = 2;
0x000139fa add r0, pc | r0 += pc;
0x000139fc bl 0x8aa8 | fcn_00008aa8 ();
0x00013a00 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x00013a02 mov r1, sl | r1 = sl;
0x00013a04 bl 0x10c44 | fcn_00010c44 (r0, r1, r2, r3, r4, r5);
0x00013a08 b.w 0x12bb6 | goto label_13;
| label_77:
0x00013a0c ldr.w r6, [r4, 0x160] | r6 = *((r4 + 0x160));
0x00013a10 ldrh.w r3, [r4, 0x168] | r3 = *((r4 + 0x168));
0x00013a14 b.w 0x11a96 | goto label_48;
| label_79:
0x00013a18 ldr.w r6, [r4, 0x160] | r6 = *((r4 + 0x160));
0x00013a1c b.w 0x11a96 | goto label_48;
| label_76:
0x00013a20 movs r3, 0 | r3 = 0;
0x00013a22 add.w r4, r7, 0x50 | r4 = r7 + 0x50;
0x00013a26 str.w r3, [fp, 4] | __asm ("str.w r3, [arg_4h]");
0x00013a2a add.w r2, r7, 0x48 | r2 = r7 + 0x48;
0x00013a2e str r3, [r4] | *(r4) = r3;
0x00013a30 mov.w r3, 0x20000000 | r3 = 0x20000000;
0x00013a34 str.w r3, [fp, 8] | __asm ("str.w r3, [arg_8h]");
0x00013a38 add.w r0, r7, 0x4c | r0 = r7 + 0x4c;
0x00013a3c ldr.w r3, [pc, 0x414] | r3 = *(0x00013e54);
0x00013a40 str.w r1, [fp] | __asm ("str.w r1, [fp]");
0x00013a44 mov r1, r4 | r1 = r4;
0x00013a46 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x00013a4a add r3, pc | r3 += pc;
0x00013a4c blx 0xa04 | fcn_00000a04 ();
0x00013a50 ldr r3, [r4] | r3 = *(r4);
0x00013a52 cmp r3, 0 |
| if (r3 == 0) {
0x00013a54 beq.w 0x11a14 | goto label_49;
| }
0x00013a58 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x00013a5c cmp r3, 6 |
| if (r3 == 6) {
0x00013a5e beq.w 0x12ffe | goto label_50;
| }
0x00013a62 movs r0, 1 | r0 = 1;
0x00013a64 bl 0x151e8 | fcn_000151e8 (r0);
0x00013a68 b.w 0x11a14 | goto label_49;
| label_133:
0x00013a8a ldr r1, [pc, 0x3d0] |
0x00013a8c mov r0, r5 | r0 = r5;
0x00013a8e add r1, pc | r1 = 0x278f0;
0x00013a90 bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
0x00013a94 cmp r0, 0 |
| if (r0 != 0) {
0x00013a96 bne.w 0x13ba2 | goto label_163;
| }
0x00013a9a movs r3, 6 | r3 = 6;
0x00013a9c subs r6, 1 | r6--;
0x00013a9e adds r4, 4 | r4 += 4;
0x00013aa0 str.w r3, [sl, 0x164] | __asm ("str.w r3, [sl, 0x164]");
0x00013aa4 b.w 0x1174e | goto label_3;
| label_147:
0x00013aa8 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x00013aac b 0x1363c | goto label_51;
| label_155:
0x00013aae ldr r1, [pc, 0x3b0] |
0x00013ab0 add r1, pc | r1 = 0x27916;
0x00013ab2 b 0x1386e | goto label_52;
| label_146:
0x00013ad2 ldr r2, [pc, 0x394] |
0x00013ad4 add r2, pc | r2 = 0x27942;
0x00013ad6 b 0x1354c | goto label_53;
| label_150:
0x00013ae0 ldr r0, [pc, 0x388] |
0x00013ae2 add r0, pc | r0 = 0x27952;
0x00013ae4 bl 0x8b1c | fcn_00008b1c ();
0x00013ae8 b 0x13614 | goto label_54;
| label_145:
0x00013aea ldr r6, [pc, 0x384] |
0x00013aec add r6, pc | r6 = 0x27962;
0x00013aee b 0x1353c | goto label_55;
| label_143:
0x00013af0 mov r5, r4 | r5 = r4;
0x00013af2 b 0x13500 | goto label_56;
| label_142:
0x00013afc ldr r0, [pc, 0x374] |
0x00013afe add r0, pc | r0 = 0x27976;
0x00013b00 bl 0x8b1c | fcn_00008b1c ();
0x00013b04 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x00013b08 b 0x1363c | goto label_51;
| label_151:
0x00013b0a ldr r6, [pc, 0x36c] |
0x00013b0c add r6, pc | r6 = 0x2798a;
0x00013b0e ldr r3, [r6, 4] | r3 = *(0x2798e);
0x00013b10 cmp r3, 1 |
| if (r3 < 1) {
0x00013b12 bls.w 0x1399e | goto label_57;
| }
0x00013b16 ldr.w r8, [pc, 0x364] |
0x00013b1a movs r5, 1 | r5 = 1;
0x00013b1c add r8, pc | r8 = 0x2799e;
| do {
0x00013b1e ldr r3, [r6] | r3 = *(r6);
0x00013b20 movs r2, 0 | r2 = 0;
0x00013b22 mov r1, r4 | r1 = r4;
0x00013b24 ldr.w r0, [r3, r5, lsl 2] | offset_9 = r5 << 2;
| r0 = *((r3 + offset_9));
0x00013b28 ldr.w r3, [r4, 0x1e4] | r3 = *((r4 + 0x1e4));
0x00013b2c str.w r2, [fp] | __asm ("str.w r2, [fp]");
0x00013b30 str r2, [sp, 0xc] | *(arg_ch) = r2;
0x00013b32 str r2, [sp] | *(sp) = r2;
0x00013b34 movs r2, 1 | r2 = 1;
0x00013b36 strd r2, r2, [sp, 4] | __asm ("strd r2, r2, [sp, 4]");
0x00013b3a mov r2, fp | r2 = fp;
0x00013b3c bl 0x69c0 | fcn_000069c0 (r0, r1, r2, r3, r4, r5, r6);
0x00013b40 lsls r1, r5, 2 | r1 = r5 << 2;
0x00013b42 mov r2, r0 | r2 = r0;
| if (r0 != 0) {
0x00013b44 cbz r0, 0x13b48 |
0x00013b46 ldr r2, [r0] | r2 = *(r0);
| }
0x00013b48 ldr r0, [r6] | r0 = *(r6);
0x00013b4a adds r5, 1 | r5++;
0x00013b4c ldr.w r3, [fp] | r3 = *(fp);
0x00013b50 ldr r1, [r0, r1] | r1 = *((r0 + r1));
0x00013b52 mov r0, r8 | r0 = r8;
0x00013b54 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00013b56 str r2, [sp, 4] | *(arg_4h) = r2;
0x00013b58 movs r2, 8 | r2 = 8;
0x00013b5a str r2, [sp] | *(sp) = r2;
0x00013b5c bl 0x8b1c | fcn_00008b1c ();
0x00013b60 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00013b62 cmp r3, r5 |
0x00013b64 bhi 0x13b1e |
| } while (r3 > r5);
0x00013b66 b 0x1399e | goto label_57;
| label_140:
0x00013b68 ldr r2, [pc, 0x314] |
0x00013b6a mov r1, r4 | r1 = r4;
0x00013b6c add r2, pc | r2 = 0x279f0;
0x00013b6e bl 0x10838 | r0 = fcn_00010838 (r0, r1, r2);
0x00013b72 add r5, r0 | r5 += r0;
0x00013b74 b 0x13432 | goto label_58;
| label_78:
0x00013b76 ldr r0, [pc, 0x30c] |
0x00013b78 mov r1, r5 | r1 = r5;
0x00013b7a add r0, pc | r0 = 0x27a04;
0x00013b7c bl 0x8b5c | dl_fatal_printf ()
| label_135:
0x00013b80 ldrb r3, [r0, -0x1] | r3 = *((r0 - 0x1));
0x00013b84 subs r2, r0, 1 | r2 = r0 - 1;
0x00013b86 cmp r3, 0x3a |
0x00013b88 it ne |
| if (r3 == 0x3a) {
0x00013b8a cmpne r3, 0x20 | __asm ("cmpne r3, 0x20");
| goto label_164;
| }
| if (r3 == 0x3a) {
| label_164:
0x00013b8c beq.w 0x13416 | goto label_59;
| }
0x00013b90 subs r3, 9 | r3 -= 9;
0x00013b92 cmp r3, 1 |
| if (r3 < 1) {
0x00013b94 bls.w 0x13416 | goto label_59;
| }
0x00013b98 mov r3, r6 | r3 = r6;
| label_62:
0x00013b9a cmp r3, r6 |
| if (r3 != r6) {
0x00013b9c bne.w 0x1341c | goto label_60;
| }
0x00013ba0 b 0x13442 | goto label_61;
| label_163:
0x00013ba2 ldr r1, [pc, 0x2e4] |
0x00013ba4 mov r0, r5 | r0 = r5;
0x00013ba6 ldrd fp, sb, [r7, 8] | __asm ("ldrd fp, sb, [r7, 8]");
0x00013baa add r1, pc | r1 = 0x27a38;
0x00013bac bl 0x15bb0 | r0 = fcn_00015bb0 (r0, r1, r2, r3);
| if (r0 == 0) {
0x00013bb0 cbz r0, 0x13c14 | goto label_165;
| }
0x00013bb2 ldrb r3, [r5] | r3 = *(r5);
0x00013bb4 cmp r3, 0x2d |
| if (r3 != 0x2d) {
0x00013bb6 bne.w 0x119a2 | goto label_34;
| }
0x00013bba ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x00013bbc cmp r3, 0x2d |
| if (r3 != 0x2d) {
0x00013bbe bne.w 0x119a2 | goto label_34;
| }
0x00013bc2 ldr r0, [r7, 0x1c] | r0 = *((r7 + 0x1c));
0x00013bc4 mov r1, r5 | r1 = r5;
0x00013bc6 bl 0x102c0 | r0 = fcn_000102c0 (r0, r1);
| label_138:
0x00013bca adds r3, r6, r0 | r3 = r6 + r0;
0x00013bcc cmp r6, r3 |
| if (r6 >= r3) {
0x00013bce bhs 0x13b9a | goto label_62;
| }
0x00013bd0 mov ip, r3 |
0x00013bd2 b 0x13bda | goto label_166;
| label_64:
0x00013bd4 cmp r6, r3 |
| if (r6 == r3) {
0x00013bd6 beq.w 0x13444 | goto label_63;
| }
| label_166:
0x00013bda mov r0, ip | r0 = ip;
0x00013bdc add.w ip, ip, -1 |
0x00013be0 ldrb.w r2, [ip] | r2 = *(ip);
0x00013be4 mov r3, ip | r3 = ip;
0x00013be6 cmp r2, 0x20 |
0x00013be8 it ne |
| if (r2 != 0x20) {
0x00013bea cmpne r2, 0x3a | __asm ("cmpne r2, 0x3a");
| }
0x00013bec sub.w r2, r2, 9 | r2 -= 9;
0x00013bf0 ite ne |
| if (r2 == 0x20) {
0x00013bf2 movne r1, 1 | r1 = 1;
| }
| if (r2 != 0x20) {
0x00013bf4 moveq r1, 0 | r1 = 0;
| }
0x00013bf6 cmp r2, 1 |
0x00013bf8 ite ls |
| if (r2 > 1) {
0x00013bfa movls r1, 0 | r1 = 0;
| }
| if (r2 <= 1) {
0x00013bfc andhi r1, r1, 1 | r1 &= 1;
| }
0x00013c00 cmp r1, 0 |
| if (r1 != 0) {
0x00013c02 bne 0x13bd4 | goto label_64;
| }
0x00013c04 cmp r6, r0 |
0x00013c06 mov r3, r0 | r3 = r0;
0x00013c08 it lo |
| if (r6 < r0) {
0x00013c0a strblo r1, [r0, -0x1] | *((r0 - 0x1)) = r1;
| goto label_167;
| }
| if (r6 <= r0) {
| label_167:
0x00013c0e blo.w 0x1341c | goto label_60;
| }
0x00013c12 b 0x13b9a | goto label_62;
| label_165:
0x00013c14 bl 0x102fc | fcn_000102fc (r0);
| label_116:
0x00013c18 ldr r0, [pc, 0x270] |
0x00013c1a add r0, pc | r0 = 0x27aaa;
0x00013c1c bl 0x8b5c | dl_fatal_printf ()
0x00013c20 ldr r3, [pc, 0x26c] |
0x00013c22 movs r2, 0x7f | r2 = 0x7f;
0x00013c24 ldr r1, [pc, 0x26c] |
0x00013c26 ldr r0, [pc, 0x270] |
0x00013c28 add r3, pc | r3 = 0x27abc;
0x00013c2a add r1, pc | r1 = 0x27ac2;
0x00013c2c add r0, pc | r0 = 0x27aca;
0x00013c2e bl 0xfba4 | fcn_0000fba4 (r0);
0x00013c32 ldr r3, [pc, 0x268] |
0x00013c34 movs r2, 0x82 | r2 = 0x82;
0x00013c36 ldr r1, [pc, 0x268] |
0x00013c38 ldr r0, [pc, 0x268] |
0x00013c3a add r3, pc | r3 = 0x27adc;
0x00013c3c add r1, pc | r1 = 0x27ae2;
0x00013c3e add r0, pc | r0 = 0x27ae6;
0x00013c40 bl 0xfba4 | fcn_0000fba4 (r0);
| label_86:
0x00013c44 ldr r3, [pc, 0x260] |
0x00013c46 movw r2, 0x739 | r2 = 0x739;
0x00013c4a ldr r1, [pc, 0x260] |
0x00013c4c ldr r0, [pc, 0x260] |
0x00013c4e add r3, pc | r3 = 0x27afa;
0x00013c50 add r1, pc | r1 = 0x27b02;
0x00013c52 add r0, pc | r0 = 0x27b06;
0x00013c54 bl 0xfba4 | fcn_0000fba4 (r0);
| label_107:
0x00013c58 ldr r0, [pc, 0x258] |
0x00013c5a add r0, pc | r0 = 0x27b12;
0x00013c5c bl 0x8b5c | dl_fatal_printf ()
| label_121:
0x00013c60 ldr r3, [pc, 0x254] |
0x00013c62 movw r2, 0x51f | r2 = 0x51f;
0x00013c64 strh r7, [r3, r0] | *((r3 + r0)) = r7;
0x00013c66 ldr r1, [pc, 0x254] |
0x00013c68 ldr r0, [pc, 0x254] |
0x00013c6a add r3, pc | r3 = 0x27b26;
0x00013c6c add r1, pc | r1 = 0x27b2e;
0x00013c6e add r0, pc | r0 = 0x27b32;
0x00013c70 bl 0xfba4 | fcn_0000fba4 (r0);
| label_130:
0x00013c74 ldr r3, [pc, 0x24c] |
0x00013c76 mov.w r2, 0x408 | r2 = 0x408;
0x00013c7a ldr r1, [pc, 0x24c] |
0x00013c7c ldr r0, [pc, 0x24c] |
0x00013c7e add r3, pc | r3 = 0x27b46;
0x00013c80 add r1, pc | r1 = 0x27b4e;
0x00013c82 add r0, pc | r0 = 0x27b52;
0x00013c84 bl 0xfba4 | fcn_0000fba4 (r0);
| label_123:
0x00013c88 ldr r3, [pc, 0x244] |
0x00013c8a movw r2, 0x537 | r2 = 0x537;
0x00013c8e ldr r1, [pc, 0x244] |
0x00013c90 ldr r0, [pc, 0x244] |
0x00013c92 add r3, pc | r3 = 0x27b66;
0x00013c94 add r1, pc | r1 = 0x27b6e;
0x00013c96 add r0, pc | r0 = 0x27b72;
0x00013c98 bl 0xfba4 | fcn_0000fba4 (r0);
| label_122:
0x00013c9c ldr r3, [pc, 0x23c] |
0x00013c9e movw r2, 0x52d | r2 = 0x52d;
0x00013ca2 ldr r1, [pc, 0x23c] |
0x00013ca4 ldr r0, [pc, 0x23c] |
0x00013ca6 add r3, pc | r3 = 0x27b86;
0x00013ca8 add r1, pc | r1 = 0x27b8e;
0x00013caa add r0, pc | r0 = 0x27b92;
0x00013cac bl 0xfba4 | fcn_0000fba4 (r0);
0x00013cb0 ldr r3, [pc, 0x234] |
0x00013cb2 movs r2, 0x61 | r2 = 0x61;
0x00013cb4 ldr r1, [pc, 0x234] |
0x00013cb6 ldr r0, [pc, 0x238] |
0x00013cb8 add r3, pc | r3 = 0x27ba4;
0x00013cba add r1, pc | r1 = 0x27baa;
0x00013cbc add r0, pc | r0 = 0x27bb2;
0x00013cbe bl 0xfba4 | fcn_0000fba4 (r0);
0x00013cc2 ldr r3, [pc, 0x230] |
0x00013cc4 movs r2, 0x75 | r2 = 0x75;
0x00013cc6 ldr r1, [pc, 0x230] |
0x00013cc8 ldr r0, [pc, 0x230] |
0x00013cca add r3, pc | r3 = 0x27bc4;
0x00013ccc add r1, pc | r1 = 0x27bca;
0x00013cce add r0, pc | r0 = 0x27bce;
0x00013cd0 bl 0xfba4 | fcn_0000fba4 (r0);
0x00013cd4 ldr r3, [pc, 0x228] |
0x00013cd6 movs r2, 0x7b | r2 = 0x7b;
0x00013cd8 ldr r1, [pc, 0x228] |
0x00013cda ldr r0, [pc, 0x22c] |
0x00013cdc add r3, pc | r3 = 0x27be0;
0x00013cde add r1, pc | r1 = 0x27be6;
0x00013ce0 add r0, pc | r0 = 0x27bee;
0x00013ce2 bl 0xfba4 | fcn_0000fba4 (r0);
| label_73:
0x00013d3e ldr r3, [pc, 0x1fc] |
0x00013d40 add r3, pc | r3 = 0x27c82;
0x00013d42 ldr r0, [r3] | r0 = *(0x27c82);
0x00013d44 bl 0xeb78 | fcn_0000eb78 (r0);
0x00013d48 ldr r3, [pc, 0x1f4] |
0x00013d4a movw r2, 0x6a7 | r2 = 0x6a7;
0x00013d4e ldr r1, [pc, 0x1f4] |
0x00013d50 ldr r0, [pc, 0x1f4] |
0x00013d52 add r3, pc | r3 = 0x27c96;
0x00013d54 add r1, pc | r1 = 0x27c9e;
0x00013d56 add r0, pc | r0 = 0x27ca2;
0x00013d58 bl 0xfba4 | fcn_0000fba4 (r0);
| label_113:
0x00013d5c ldr r3, [pc, 0x1ec] |
0x00013d5e movw r2, 0x3ca | r2 = 0x3ca;
0x00013d62 ldr r1, [pc, 0x1ec] |
0x00013d64 ldr r0, [pc, 0x1ec] |
0x00013d66 add r3, pc | r3 = 0x27cb6;
0x00013d68 add r1, pc | r1 = 0x27cbe;
0x00013d6a add r0, pc | r0 = 0x27cc2;
0x00013d6c bl 0xfba4 | fcn_0000fba4 (r0);
0x00013d70 ldr r3, [pc, 0x1e4] |
0x00013d72 movw r2, 0x6ee | r2 = 0x6ee;
0x00013d76 ldr r1, [pc, 0x1e4] |
0x00013d78 ldr r0, [pc, 0x1e4] |
0x00013d7a add r3, pc | r3 = 0x27cd6;
0x00013d7c add r1, pc | r1 = 0x27cde;
0x00013d7e add r0, pc | r0 = 0x27ce2;
0x00013d80 bl 0xfba4 | fcn_0000fba4 (r0);
0x00013d84 ldr r3, [pc, 0x1dc] |
0x00013d86 movw r2, 0x6ef | r2 = 0x6ef;
0x00013d8a ldr r1, [pc, 0x1dc] |
0x00013d8c ldr r0, [pc, 0x1dc] |
0x00013d8e add r3, pc | r3 = 0x27cf6;
0x00013d90 add r1, pc | r1 = 0x27cfe;
0x00013d92 add r0, pc | r0 = 0x27d02;
0x00013d94 bl 0xfba4 | fcn_0000fba4 (r0);
| label_84:
0x00013d98 ldr r3, [pc, 0x1d4] |
0x00013d9a movw r2, 0x67e | r2 = 0x67e;
0x00013d9c str r6, [r7, 0x24] | *((r7 + 0x24)) = r6;
0x00013d9e ldr r1, [pc, 0x1d4] |
0x00013da0 ldr r0, [pc, 0x1d4] |
0x00013da2 add r3, pc | r3 = 0x27d16;
0x00013da4 add r1, pc | r1 = 0x27d1e;
0x00013da6 add r0, pc | r0 = 0x27d22;
0x00013da8 bl 0xfba4 | fcn_0000fba4 (r0);
| label_95:
0x00013dac ldr r3, [pc, 0x1cc] |
0x00013dae movw r2, 0x7ec | r2 = 0x7ec;
0x00013db0 strb r4, [r5, 0xb] | *((r5 + 0xb)) = r4;
0x00013db2 ldr r1, [pc, 0x1cc] |
0x00013db4 ldr r0, [pc, 0x1cc] |
0x00013db6 add r3, pc | r3 = 0x27d36;
0x00013db8 add r1, pc | r1 = 0x27d3e;
0x00013dba add r0, pc | r0 = 0x27d42;
0x00013dbc bl 0xfba4 | fcn_0000fba4 (r0);
0x00013dc0 ldr r3, [pc, 0x1c4] |
0x00013dc2 movw r2, 0x11b | r2 = 0x11b;
0x00013dc6 ldr r1, [pc, 0x1c4] |
0x00013dc8 ldr r0, [pc, 0x1c4] |
0x00013dca add r3, pc | r3 = 0x27d56;
0x00013dcc add r1, pc | r1 = 0x27d5e;
0x00013dce add r0, pc | r0 = 0x27d62;
0x00013dd0 bl 0xfba4 | fcn_0000fba4 (r0);
0x00013dd4 ldr r3, [pc, 0x1bc] |
0x00013dd6 movs r2, 0x3c | r2 = 0x3c;
0x00013dd8 ldr r1, [pc, 0x1bc] |
0x00013dda ldr r0, [pc, 0x1c0] |
0x00013ddc add r3, pc | r3 = 0x27d74;
0x00013dde add r1, pc | r1 = 0x27d7a;
0x00013de0 add r0, pc | r0 = 0x27d82;
0x00013de2 bl 0xfba4 | fcn_0000fba4 (r0);
0x00013de6 ldr r3, [pc, 0x1b8] |
0x00013de8 movs r2, 0x60 | r2 = 0x60;
0x00013dea ldr r1, [pc, 0x1b8] |
0x00013dec ldr r0, [pc, 0x1b8] |
0x00013dee add r3, pc | r3 = 0x27d94;
0x00013df0 add r1, pc | r1 = 0x27d9a;
0x00013df2 add r0, pc | r0 = 0x27d9e;
0x00013df4 bl 0xfba4 | fcn_0000fba4 (r0);
| label_96:
0x00013df8 ldr r3, [pc, 0x1b0] |
0x00013dfa mov.w r2, 0x7f0 | r2 = 0x7f0;
0x00013dfe ldr r1, [pc, 0x1b0] |
0x00013e00 ldr r0, [pc, 0x1b0] |
0x00013e02 add r3, pc | r3 = 0x27db2;
0x00013e04 add r1, pc | r1 = 0x27dba;
0x00013e06 add r0, pc | r0 = 0x27dbe;
0x00013e08 bl 0xfba4 | fcn_0000fba4 (r0);
0x00013e0c ldrh r4, [r0, r5] | r4 = *((r0 + r5));
0x00013e0e movs r0, r0 |
0x00013e10 strh r0, [r3, 0x14] | *((r3 + 0x14)) = r0;
0x00013e12 movs r0, r0 |
0x00013e14 adr r4, 0x2c8 | r4 = 0x2c8;
0x00013e16 movs r0, r0 |
0x00013e18 strh r6, [r0, 0x12] | *((r0 + 0x12)) = r6;
0x00013e1a movs r0, r0 |
0x00013e1c ldrh r4, [r6, 0xa] | r4 = *((r6 + 0xa));
0x00013e1e movs r0, r0 |
0x00013e20 adr r7, 0x1c8 | r7 = 0x1c8;
0x00013e22 movs r0, r0 |
0x00013e24 ldrh r2, [r2, r1] | r2 = *((r2 + r1));
0x00013e26 movs r0, r0 |
0x00013e28 ldrh r2, [r2, 6] | r2 = *((r2 + 6));
0x00013e2a movs r0, r0 |
0x00013e2c strh r4, [r6, 0xa] | *((r6 + 0xa)) = r4;
0x00013e2e movs r0, r0 |
0x00013e30 ldrh r4, [r0, r0] | r4 = *((r0 + r0));
0x00013e32 movs r0, r0 |
0x00013e34 strh r6, [r0, 0xa] | *((r0 + 0xa)) = r6;
0x00013e36 movs r0, r0 |
0x00013e38 strh r2, [r7, 8] | *((r7 + 8)) = r2;
0x00013e3a movs r0, r0 |
0x00013e3c strh r0, [r0, 0xa] | *((r0 + 0xa)) = r0;
0x00013e3e movs r0, r0 |
0x00013e40 ldrh r0, [r5] | r0 = *(r5);
0x00013e42 movs r0, r0 |
0x00013e44 strh r4, [r0, 0x3e] | *((r0 + 0x3e)) = r4;
0x00013e46 movs r0, r0 |
0x00013e48 strh r4, [r6, 0x16] | *((r6 + 0x16)) = r4;
0x00013e4a movs r0, r0 |
0x00013e4c adr r3, 0xf0 | r3 = 0xf0;
0x00013e4e movs r0, r0 |
0x00013e50 strh r6, [r0, 0x2e] | *((r0 + 0x2e)) = r6;
0x00013e52 movs r0, r0 |
0x00013e54 ldm r6, {r0, r1, r4, r6} | r0 = *(r6);
| r1 = *((r6 + 4));
| r4 = *((r6 + 8));
| r6 = *((r6 + 12));
0x00013e56 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/ld-linux-armhf.so.3 @ 0xc6f8 */
| #include <stdint.h>
|
; (fcn) sym.__tls_get_addr () | uint32_t tls_get_addr (int16_t arg_8e8h, int16_t arg_900h, int16_t arg1, int16_t arg3) {
| int16_t var_0h_2;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_0h;
| r0 = arg1;
| r2 = arg3;
| label_5:
0x0000bd74 push.w {r3, r4, r5, r6, r7, r8, sb, lr} |
0x0000bd78 mov r7, r0 | r7 = r0;
0x0000bd7a mov r6, r1 | r6 = r1;
0x0000bd7c mov r4, r2 | r4 = r2;
0x0000bd7e cmp r2, 0 |
| if (r2 != 0) {
0x0000bd80 beq 0xbdfa |
0x0000bd82 ldr.w r3, [r4, 0x254] | r3 = *((r4 + 0x254));
0x0000bd86 adds r3, 1 | r3++;
| if (r3 != 1) {
0x0000bd88 bne 0xbe22 | goto label_6;
| }
| label_0:
0x0000bd8a ldrd r0, r5, [r4, 0x248] | __asm ("ldrd r0, r5, [r4, 0x248]");
0x0000bd8e add.w r8, r5, -1 | r8 = r5 + -1;
0x0000bd92 and.w r3, r5, r8 | r3 = r5 & r8;
0x0000bd96 cmp r5, 8 |
0x0000bd98 it ls |
| if (r5 <= 8) {
0x0000bd9a cmpls r3, 0 | __asm ("cmpls r3, 0");
| }
| if (r5 == 8) {
0x0000bd9c beq 0xbe4e | goto label_7;
| }
0x0000bd9e adds r0, r5, r0 | r0 = r5 + r0;
| if (r0 < r5) {
0x0000bda0 bhs 0xbdf2 |
0x0000bda2 ldr r3, [pc, 0xf8] |
0x0000bda4 add r3, pc |
0x0000bda6 ldr r3, [r3] | r3 = *(0x17c46);
0x0000bda8 blx r3 | r0 = uint32_t (*r3)(uint32_t) (r3);
0x0000bdaa mov sb, r0 | sb = r0;
| if (r0 == 0) {
0x0000bdac cbz r0, 0xbdf2 | goto label_8;
| }
0x0000bdae add r8, r0 | r8 += r0;
0x0000bdb0 mov r1, r5 | r1 = r5;
0x0000bdb2 mov r0, r8 | r0 = r8;
0x0000bdb4 bl 0x16dbc | fcn_00016dbc (r0, r1, r2);
0x0000bdb8 sub.w r5, r8, r1 | r5 = r8 - r1;
| if (r5 == 0) {
| label_1:
0x0000bdbc cbz r5, 0xbdf2 | goto label_8;
| }
0x0000bdbe ldrd r1, r2, [r4, 0x240] | __asm ("ldrd r1, r2, [r4, 0x240]");
0x0000bdc2 mov r0, r5 | r0 = r5;
0x0000bdc4 blx 0x16400 | fcn_00016400 (r0, r1);
0x0000bdc8 ldrd r3, r2, [r4, 0x244] | __asm ("ldrd r3, r2, [r4, 0x244]");
0x0000bdcc movs r1, 0 | r1 = 0;
0x0000bdce add r0, r3 | r0 += r3;
0x0000bdd0 subs r2, r2, r3 | r2 -= r3;
0x0000bdd2 blx 0x159e0 | fcn_000159e0 (r0, r1);
0x0000bdd6 ldr r3, [r7] | r3 = *(r7);
0x0000bdd8 str.w r5, [r6, r3, lsl 3] | __asm ("str.w r5, [r6, r3, lsl 3]");
0x0000bddc add.w r6, r6, r3, lsl 3 | r6 += (r3 << 3);
0x0000bde0 str.w sb, [r6, 4] | __asm ("str.w sb, [r6, 4]");
0x0000bde4 cmp.w sb, 0 |
| if (sb == 0) {
0x0000bde8 beq 0xbe88 | goto label_9;
| }
0x0000bdea ldr r0, [r7, 4] | r0 = *((r7 + 4));
0x0000bdec add r0, r5 | r0 += r5;
| label_2:
0x0000bdee pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| }
| label_8:
0x0000bdf2 ldr r0, [pc, 0xac] |
0x0000bdf4 add r0, pc | r0 = 0x17c9a;
0x0000bdf6 bl 0x8b5c | dl_fatal_printf ()
| }
0x0000bdfa ldr r3, [pc, 0xa8] |
0x0000bdfc ldr r2, [r0] | r2 = *(r0);
0x0000bdfe add r3, pc |
0x0000be00 ldr.w r3, [r3, 0x8ec] | r3 = *(0x18594);
0x0000be04 ldr r4, [r3] | r4 = *(0x18594);
0x0000be06 cmp r4, r2 |
| if (r4 > r2) {
0x0000be08 bhi 0xbe14 | goto label_10;
| }
| do {
0x0000be0a ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0000be0c subs r2, r2, r4 | r2 -= r4;
0x0000be0e ldr r4, [r3] | r4 = *(r3);
0x0000be10 cmp r4, r2 |
0x0000be12 bls 0xbe0a |
| } while (r4 < r2);
| label_10:
0x0000be14 add.w r3, r3, r2, lsl 3 | r3 += (r2 << 3);
0x0000be18 ldr r4, [r3, 0xc] | r4 = *((r3 + 0xc));
0x0000be1a ldr.w r3, [r4, 0x254] | r3 = *((r4 + 0x254));
0x0000be1e adds r3, 1 | r3++;
| if (r3 == 1) {
0x0000be20 beq 0xbd8a | goto label_0;
| }
| label_6:
0x0000be22 ldr r5, [pc, 0x84] |
0x0000be24 ldr r3, [pc, 0x84] |
0x0000be26 add r5, pc | r5 = 0x17cd4;
0x0000be28 add r3, pc |
0x0000be2a addw r5, r5, 0x5b4 | __asm ("addw r5, r5, 0x5b4");
0x0000be2e ldr r3, [r3] | r3 = *(0x17cd8);
0x0000be30 mov r0, r5 | r0 = r5;
0x0000be32 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000be34 ldr.w r3, [r4, 0x254] | r3 = *((r4 + 0x254));
| if (r3 == 0) {
0x0000be38 cbnz r3, 0xbe5c |
0x0000be3a mov.w r3, -1 | r3 = -1;
0x0000be3e mov r0, r5 | r0 = r5;
0x0000be40 str.w r3, [r4, 0x254] | __asm ("str.w r3, [r4, 0x254]");
0x0000be44 ldr r3, [pc, 0x68] |
0x0000be46 add r3, pc |
0x0000be48 ldr r3, [r3] | r3 = *(0x17cfa);
0x0000be4a blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000be4c b 0xbd8a | goto label_0;
| label_7:
0x0000be4e ldr r3, [pc, 0x64] |
0x0000be50 add r3, pc |
0x0000be52 ldr r3, [r3] | r3 = *(0x17d0a);
0x0000be54 blx r3 | r0 = uint32_t (*r3)(uint32_t) (r3);
0x0000be56 mov r5, r0 | r5 = r0;
0x0000be58 mov sb, r0 | sb = r0;
0x0000be5a b 0xbdbc | goto label_1;
| }
0x0000be5c ldr r2, [pc, 0x58] |
0x0000be5e adds r1, r3, 1 | r1 = r3 + 1;
0x0000be60 mov r0, r5 | r0 = r5;
0x0000be62 add r2, pc |
0x0000be64 ldr r2, [r2] | r2 = *(0x17d1e);
| if (r1 != r3) {
0x0000be66 beq 0xbe84 |
0x0000be68 mrc p15, 0, r4, c13, c0, 3 | __asm ("mrc p15, 0, r4, c13, c0, 3");
0x0000be6c add r4, r3 | r4 += r3;
0x0000be6e blx r2 | r0 = uint32_t (*r2)() ();
0x0000be70 ldrd r3, r0, [r7] | __asm ("ldrd r3, r0, [r7]");
0x0000be74 movs r1, 0 | r1 = 0;
0x0000be76 add r0, r4 | r0 += r4;
0x0000be78 add.w r2, r6, r3, lsl 3 | r2 = r6 + (r3 << 3);
0x0000be7c str r1, [r2, 4] | *((r2 + 4)) = r1;
0x0000be7e str.w r4, [r6, r3, lsl 3] | __asm ("str.w r4, [r6, r3, lsl 3]");
0x0000be82 b 0xbdee | goto label_2;
| }
0x0000be84 blx r2 | uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r2, r1, r0);
0x0000be86 b 0xbd8a | goto label_0;
| label_9:
0x0000be88 ldr r3, [pc, 0x30] |
0x0000be8a movw r2, 0x38d | r2 = 0x38d;
0x0000be8e ldr r1, [pc, 0x30] |
0x0000be90 ldr r0, [pc, 0x30] |
0x0000be92 add r3, pc | r3 = 0x17d52;
0x0000be94 add r1, pc | r1 = 0x17d5a;
0x0000be96 add r0, pc | r0 = 0x17d5e;
0x0000be98 bl 0xfba4 | fcn_0000fba4 (r0);
0x0000be9c subs r0, r2, 5 | r0 = r2 - 5;
0x0000be9e movs r1, r0 | r1 = r0;
0x0000bea0 b 0xc1dc |
0x0000c1dc add r3, pc | r3 += pc;
0x0000c1de add r1, pc | r1 += pc;
0x0000c1e0 add r0, pc | r0 += pc;
0x0000c1e2 bl 0xfba4 | fcn_0000fba4 (r0);
0x0000c1e6 nop |
0x0000c1e8 subs r4, r1, 5 | r4 = r1 - 5;
0x0000c1ea movs r1, r0 | r1 = r0;
0x0000c1ec subs r6, r3, r6 | r6 = r3 - r6;
0x0000c1ee movs r1, r0 | r1 = r0;
0x0000c1f0 subs r0, r6, 1 | r0 = r6 - 1;
0x0000c1f2 movs r1, r0 | r1 = r0;
0x0000c1f4 b 0xc308 | goto label_11;
| label_4:
0x0000c2f0 ldr r3, [pc, 0x158] |
0x0000c2f2 mov.w r8, 0 | r8 = 0;
0x0000c2f6 ldr.w fp, [pc, 0x158] | fp = *(0xc452);
0x0000c2fa vmov.i64 d8, 0xffffffff | __asm ("vmov.i64 d8, 0xffffffff");
0x0000c2fe add r3, pc | r3 = 0x1874e;
0x0000c300 ldr.w r3, [r3, 0x8ec] | r3 = *((r3 + 0x8ec));
0x0000c304 add fp, pc |
0x0000c306 str r3, [sp, 8] | var_8h = r3;
| label_11:
0x0000c308 mov r3, r8 | r3 = r8;
| label_3:
0x0000c30a ldr r2, [sp, 8] | r2 = var_8h;
0x0000c30c clz r7, r3 | r7 &= r3;
0x0000c310 lsrs r7, r7, 5 | r7 >>= 5;
0x0000c312 ldr r1, [r2] | r1 = *(r2);
0x0000c314 cmp r7, r1 |
| if (r7 >= r1) {
0x0000c316 bhs 0xc3ce | goto label_12;
| }
0x0000c318 adds r6, r3, r7 | r6 = r3 + r7;
0x0000c31a str r3, [sp, 0xc] | var_ch = r3;
0x0000c31c mov r3, r1 | r3 = r1;
0x0000c31e add.w r5, r2, r7, lsl 3 | r5 = r2 + (r7 << 3);
0x0000c322 mov r1, ip | r1 = ip;
0x0000c324 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0000c328 mov ip, r3 |
0x0000c32a b 0xc3a2 |
| while (r6 < r1) {
0x0000c32c ldr r4, [r5, 0xc] | r4 = *((r5 + 0xc));
| if (r4 != 0) {
0x0000c32e cbz r4, 0xc396 |
0x0000c330 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x0000c332 ldr.w r3, [fp, 0x900] | r3 = *(arg_900h);
0x0000c336 cmp r2, r3 |
| if (r2 > r3) {
0x0000c338 bhi 0xc406 | goto label_13;
| }
0x0000c33a ldrd r0, r3, [r4, 0x254] | __asm ("ldrd r0, r3, [r4, 0x254]");
0x0000c33e cmp r8, r2 |
0x0000c340 it lo |
| if (r8 >= r2) {
0x0000c342 movlo r8, r2 | r8 = r2;
| }
0x0000c344 adds r2, r0, 1 | r2 = r0 + 1;
0x0000c346 add.w lr, sb, r3, lsl 3 | lr = sb + (r3 << 3);
0x0000c34a cmp r2, 1 |
0x0000c34c vst1.32 {d8}, [lr] | __asm ("vst1.32 {d8}, [lr]");
| if (r2 < 1) {
0x0000c350 bls 0xc396 | goto label_14;
| }
0x0000c352 cmp r3, r6 |
| if (r3 != r6) {
0x0000c354 bne 0xc42e | goto label_15;
| }
0x0000c356 ldrd sl, r3, [r4, 0x244] | __asm ("ldrd sl, r3, [r4, 0x244]");
0x0000c35a cmp r3, sl |
| if (r3 <= sl) {
0x0000c35c blo 0xc41a | goto label_16;
| }
0x0000c35e ldr r3, [sp, 4] | r3 = var_4h;
0x0000c360 ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x0000c362 add r0, r3 | r0 += r3;
0x0000c364 ldr r3, [sp] | r3 = *(sp);
0x0000c366 str.w r0, [lr] | __asm ("str.w r0, [lr]");
0x0000c36a cmp r2, 0 |
0x0000c36c it eq |
| if (r2 != 0) {
0x0000c36e orreq r3, r3, 1 | r3 |= 1;
| }
| if (r3 == 0) {
0x0000c372 cbz r3, 0xc396 | goto label_14;
| }
0x0000c374 ldr.w r1, [r4, 0x240] | r1 = *((r4 + 0x240));
0x0000c378 mov r2, sl | r2 = sl;
0x0000c37a blx 0x16400 | fcn_00016400 (r0, r1);
0x0000c37e ldrd r3, r2, [r4, 0x244] | __asm ("ldrd r3, r2, [r4, 0x244]");
0x0000c382 movs r1, 0 | r1 = 0;
0x0000c384 add r0, sl | r0 += sl;
0x0000c386 subs r2, r2, r3 | r2 -= r3;
0x0000c388 blx 0x159e0 | fcn_000159e0 (r0, r1);
0x0000c38c ldr r3, [sp, 8] | r3 = var_8h;
0x0000c38e ldr.w r1, [fp, 0x8e8] | r1 = *(arg_8e8h);
0x0000c392 ldr.w ip, [r3] | ip = *(r3);
| }
| label_14:
0x0000c396 adds r7, 1 | r7++;
0x0000c398 adds r6, 1 | r6++;
0x0000c39a cmp ip, r7 |
0x0000c39c add.w r5, r5, 8 | r5 += 8;
| if (ip < r7) {
0x0000c3a0 bls 0xc3c6 | goto label_17;
| }
0x0000c3a2 cmp r6, r1 |
0x0000c3a4 bls 0xc32c |
| }
| do {
0x0000c3a6 ldr r0, [pc, 0xac] |
0x0000c3a8 ldr r3, [pc, 0xac] |
0x0000c3aa add r0, pc | r0 = 0x18804;
0x0000c3ac add r3, pc |
0x0000c3ae addw r0, r0, 0x5b4 | __asm ("addw r0, r0, 0x5b4");
0x0000c3b2 ldr r3, [r3] | r3 = *(0x18808);
0x0000c3b4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000c3b6 str.w r8, [sb] | __asm ("str.w r8, [sb]");
0x0000c3ba ldr r0, [sp, 4] | r0 = var_4h;
0x0000c3bc add sp, 0x14 |
0x0000c3be vpop {d8} | __asm ("vpop {d8}");
0x0000c3c2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_17:
0x0000c3c6 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0000c3c8 mov ip, r1 |
0x0000c3ca ldr.w sl, [sp] | sl = *(sp);
| label_12:
0x0000c3ce add r3, r7 | r3 += r7;
0x0000c3d0 cmp r3, ip |
0x0000c3d2 bhi 0xc3a6 |
| } while (r3 > ip);
0x0000c3d4 ldr r2, [sp, 8] | r2 = var_8h;
0x0000c3d6 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0000c3d8 str r2, [sp, 8] | var_8h = r2;
0x0000c3da cmp r2, 0 |
| if (r2 != 0) {
0x0000c3dc bne 0xc30a | goto label_3;
| }
0x0000c3de ldr r3, [pc, 0x7c] |
0x0000c3e0 movw r2, 0x26a | r2 = 0x26a;
0x0000c3e4 ldr r1, [pc, 0x78] |
0x0000c3e6 ldr r0, [pc, 0x7c] |
0x0000c3e8 add r3, pc | r3 = 0x1884a;
0x0000c3ea add r1, pc | r1 = 0x1884e;
0x0000c3ec add r0, pc | r0 = 0x18856;
0x0000c3ee bl 0xfba4 | fcn_0000fba4 (r0);
0x0000c3f2 mov r1, ip | r1 = ip;
0x0000c3f4 mov r0, sb | r0 = sb;
0x0000c3f6 bl 0xbec8 | fcn_0000bec8 (r0, r1);
0x0000c3fa ldr r3, [sp, 4] | r3 = var_4h;
0x0000c3fc mov sb, r0 | sb = r0;
0x0000c3fe ldr.w ip, [r4, 0x8e8] | ip = *((r4 + 0x8e8));
0x0000c402 str r0, [r3] | *(r3) = r0;
0x0000c404 b 0xc2f0 | goto label_4;
| label_13:
0x0000c406 ldr r3, [pc, 0x60] |
0x0000c408 movw r2, 0x23f | r2 = 0x23f;
0x0000c40c ldr r1, [pc, 0x5c] |
0x0000c40e ldr r0, [pc, 0x60] |
0x0000c410 add r3, pc | r3 = 0x1887e;
0x0000c412 add r1, pc | r1 = 0x18882;
0x0000c414 add r0, pc | r0 = 0x1888a;
0x0000c416 bl 0xfba4 | fcn_0000fba4 (r0);
| label_16:
0x0000c41a ldr r3, [pc, 0x58] |
0x0000c41c movw r2, 0x24a | r2 = 0x24a;
0x0000c420 ldr r1, [pc, 0x54] |
0x0000c422 ldr r0, [pc, 0x58] |
0x0000c424 add r3, pc | r3 = 0x1889e;
0x0000c426 add r1, pc | r1 = 0x188a2;
0x0000c428 add r0, pc | r0 = 0x188aa;
0x0000c42a bl 0xfba4 | fcn_0000fba4 (r0);
| label_15:
0x0000c42e ldr r3, [pc, 0x50] |
0x0000c430 movw r2, 0x249 | r2 = 0x249;
0x0000c434 ldr r1, [pc, 0x4c] |
0x0000c436 ldr r0, [pc, 0x50] |
0x0000c438 add r3, pc | r3 = 0x188be;
0x0000c43a add r1, pc | r1 = 0x188c2;
0x0000c43c add r0, pc | r0 = 0x188ca;
0x0000c43e bl 0xfba4 | fcn_0000fba4 (r0);
0x0000c442 nop |
0x0000c444 adds r6, r4, 4 | r6 = r4 + 4;
0x0000c446 movs r1, r0 | r1 = r0;
0x0000c448 subs r4, r4, r0 | r4 -= r0;
0x0000c44a movs r1, r0 | r1 = r0;
0x0000c44c adds r6, r7, 3 | r6 = r7 + 3;
0x0000c44e movs r1, r0 | r1 = r0;
0x0000c450 adds r0, r7, 3 | r0 = r7 + 3;
0x0000c452 movs r1, r0 | r1 = r0;
0x0000c454 adds r2, r2, 1 | r2++;
0x0000c456 movs r1, r0 | r1 = r0;
0x0000c458 adds r4, r2, r5 | r4 = r2 + r5;
0x0000c45a movs r1, r0 | r1 = r0;
0x0000c45c udf 0x40 | __asm ("udf 0x40");
| do {
0x0000c6cc push {r4, lr} |
0x0000c6ce mov r4, r0 | r4 = r0;
0x0000c6d0 ldr r0, [r0] | r0 = *(r0);
0x0000c6d2 bl 0xc554 | fcn_0000c554 (r0, r1);
0x0000c6d6 mrc p15, 0, r3, c13, c0, 3 | __asm ("mrc p15, 0, r3, c13, c0, 3");
0x0000c6da ldr r2, [r4] | r2 = *(r4);
0x0000c6dc ldr r1, [r3] | r1 = *(r3);
0x0000c6de ldr.w r3, [r1, r2, lsl 3] | offset_0 = r2 << 3;
| r3 = *((r1 + offset_0));
0x0000c6e2 adds r2, r3, 1 | r2 = r3 + 1;
| if (r2 != r3) {
0x0000c6e4 beq 0xc6ec |
0x0000c6e6 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0000c6e8 add r0, r3 | r0 += r3;
0x0000c6ea pop {r4, pc} |
| }
0x0000c6ec mov r2, r0 | r2 = r0;
0x0000c6ee mov r0, r4 | r0 = r4;
0x0000c6f0 pop.w {r4, lr} |
0x0000c6f4 b.w 0xbd74 | goto label_5;
0x0000c6f8 mrc p15, 0, r2, c13, c0, 3 | __asm ("mrc p15, 0, r2, c13, c0, 3");
0x0000c6fc ldr r3, [pc, 0x34] |
0x0000c6fe ldr r1, [r2] | r1 = *(r2);
0x0000c700 push {r4} |
0x0000c702 add r3, pc |
0x0000c704 ldr r4, [r1] | r4 = *(r1);
0x0000c706 ldr.w r3, [r3, 0x900] | r3 = *(0x1973a);
0x0000c70a cmp r4, r3 |
| if (r4 == r3) {
0x0000c70c bne 0xc722 |
0x0000c70e ldr r3, [r0] | r3 = *(r0);
0x0000c710 ldr.w r3, [r1, r3, lsl 3] | offset_1 = r3 << 3;
| r3 = *((r1 + offset_1));
0x0000c714 adds r4, r3, 1 | r4 = r3 + 1;
| if (r4 == r3) {
0x0000c716 beq 0xc728 | goto label_18;
| }
0x0000c718 ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x0000c71a invalid |
0x0000c71c ldr r3, [pc, 0x10] | r3 = *(0xc730);
0x0000c71e add r0, r3 | r0 += r3;
0x0000c720 bx lr | return r0;
| }
0x0000c722 ldr r4, [sp], 4 | r4 = *(sp);
| sp += 4;
0x0000c726 b 0xc6cc |
| } while (1);
| label_18:
0x0000c728 ldr r4, [sp], 4 | r4 = *(sp);
| sp += 4;
0x0000c72c movs r2, 0 | r2 = 0;
0x0000c72e b.w 0xbd74 | goto label_5;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x22a4 */
| #include <stdint.h>
|
; (fcn) sym._dl_exception_create_format () | void dl_exception_create_format (int16_t arg1, uint32_t arg2) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_40h;
| int16_t var_44h;
| r0 = arg1;
| r1 = arg2;
0x000022a4 push {r2, r3} |
0x000022a6 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000022aa sub sp, 0x1c |
0x000022ac mov sb, r0 | sb = r0;
0x000022ae ldr r6, [sp, 0x40] | r6 = var_40h;
0x000022b0 cmp r1, 0 |
| if (r1 == 0) {
0x000022b2 beq.w 0x2492 | goto label_12;
| }
0x000022b6 mov r0, r1 | r0 = r1;
0x000022b8 mov sl, r1 | sl = r1;
0x000022ba bl 0x161c0 | r0 = fcn_000161c0 (r0, r1);
0x000022be adds r7, r0, 2 | r7 = r0 + 2;
0x000022c0 adds r3, r0, 1 | r3 = r0 + 1;
0x000022c2 str r3, [sp, 0xc] | var_ch = r3;
| label_5:
0x000022c4 ldrb r2, [r6] | r2 = *(r6);
0x000022c6 add r5, sp, 0x44 | r5 += var_44h;
0x000022c8 str r5, [sp, 0x14] | var_14h = r5;
| if (r2 == 0) {
0x000022ca cbz r2, 0x2312 | goto label_13;
| }
0x000022cc mov r3, r6 | r3 = r6;
0x000022ce b 0x22d6 |
| while (r2 != 0x25) {
| label_1:
0x000022d0 ldrb r2, [r4, 1] | r2 = *((r4 + 1));
0x000022d2 adds r3, r4, 1 | r3 = r4 + 1;
| if (r2 == 0) {
0x000022d4 cbz r2, 0x230c | goto label_14;
| }
| label_0:
0x000022d6 cmp r2, 0x25 |
0x000022d8 add.w r4, r3, 1 | r4 = r3 + 1;
0x000022dc itt ne |
| if (r2 == 0x25) {
0x000022de addne r7, 1 | r7++;
| }
| if (r2 == 0x25) {
0x000022e0 movne r4, r3 | r4 = r3;
| }
0x000022e2 bne 0x22d0 |
| }
0x000022e4 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x000022e6 ldrb r1, [r3, 2] | r1 = *((r3 + 2));
0x000022e8 subs r2, 0x6c | r2 -= 0x6c;
0x000022ea cmp r2, 0xe |
| if (r2 <= 0xe) {
0x000022ec bhi 0x2302 |
| /* switch table (15 cases) at 0x22f2 */
0x000022ee tbb [pc, r2] | __asm ("tbb [0x000022f4]");
| }
0x00002302 ldrb r2, [r4, 1] | r2 = *((r4 + 1));
0x00002304 adds r7, 1 | r7++;
0x00002306 adds r3, r4, 1 | r3 = r4 + 1;
0x00002308 cmp r2, 0 |
| if (r2 != 0) {
0x0000230a bne 0x22d6 | goto label_0;
| }
| label_14:
0x0000230c cmp r7, 0 |
| if (r7 < 0) {
0x0000230e blt.w 0x2476 | goto label_15;
| }
| label_13:
0x00002312 ldr r3, [pc, 0x194] |
0x00002314 mov r0, r7 | r0 = r7;
0x00002316 add r3, pc |
0x00002318 ldr r3, [r3] | r3 = *(0x47c4);
0x0000231a blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000231c mov r4, r0 | r4 = r0;
0x0000231e cmp r0, 0 |
| if (r0 == 0) {
0x00002320 beq.w 0x2476 | goto label_15;
| }
0x00002324 ldr r3, [pc, 0x184] |
0x00002326 str.w r0, [sb, 4] | __asm ("str.w r0, [sb, 4]");
0x0000232a add r3, pc |
0x0000232c ldr r3, [r3] | r3 = *(0x47da);
| if (r3 != 0) {
0x0000232e cbz r3, 0x233e |
0x00002330 ldrb.w r3, [r3, 0x1a4] | r3 = *((r3 + 0x1a4));
0x00002334 tst.w r3, 8 |
0x00002338 ite ne |
| if ((r3 & 8) == 0) {
0x0000233a movne r3, r0 | r3 = r0;
| }
| if ((r3 & 8) == 0) {
0x0000233c moveq r3, 0 | r3 = 0;
| goto label_16;
| }
| }
| label_16:
0x0000233e str.w r3, [sb, 8] | __asm ("str.w r3, [sb, 8]");
0x00002342 add r7, r4 | r7 += r4;
0x00002344 ldrb r3, [r6] | r3 = *(r6);
0x00002346 str r5, [sp, 0x14] | var_14h = r5;
0x00002348 cmp r3, 0 |
| if (r3 == 0) {
0x0000234a beq 0x23f0 | goto label_17;
| }
0x0000234c mov.w fp, 0 |
0x00002350 b 0x2366 |
| while (r3 != 0x25) {
0x00002352 cmp r7, r4 |
| if (r7 == r4) {
0x00002354 beq.w 0x2472 | goto label_18;
| }
0x00002358 mov r5, r6 | r5 = r6;
| label_4:
0x0000235a strb r3, [r4], 1 | *(r4) = r3;
| r4++;
| label_3:
0x0000235e ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x00002360 adds r6, r5, 1 | r6 = r5 + 1;
0x00002362 cmp r3, 0 |
| if (r3 == 0) {
0x00002364 beq 0x23f0 | goto label_17;
| }
| label_2:
0x00002366 cmp r3, 0x25 |
0x00002368 bne 0x2352 |
| }
0x0000236a ldrb r2, [r6, 1] | r2 = *((r6 + 1));
0x0000236c adds r5, r6, 1 | r5 = r6 + 1;
0x0000236e cmp r2, 0x25 |
| if (r2 == 0x25) {
0x00002370 beq 0x246c | goto label_19;
| }
0x00002372 sub.w r3, r2, 0x6c | r3 = r2 - 0x6c;
0x00002376 uxtb r2, r3 | r2 = (int8_t) r3;
0x00002378 cmp r2, 0xe |
| if (r2 > 0xe) {
0x0000237a bhi.w 0x24a0 | goto label_20;
| }
0x0000237e cmp r3, 0xe |
| if (r3 > 0xe) {
0x00002380 bhi.w 0x24a0 | goto label_20;
| }
| /* switch table (15 cases) at 0x2388 */
0x00002384 tbb [pc, r3] | __asm ("tbb [0x0000238c]");
0x00002398 cmp r1, 0x78 |
0x0000239a itt eq |
| if (r1 != 0x78) {
0x0000239c addeq r7, 8 | r7 += 8;
| }
| if (r1 == 0x78) {
0x0000239e addeq r4, r3, 2 | r4 = r3 + 2;
| goto label_21;
| }
| if (r1 == 0x78) {
| label_21:
0x000023a0 beq 0x22d0 | goto label_1;
| }
0x000023a2 adds r7, 8 | r7 += 8;
0x000023a4 b 0x22d0 | goto label_1;
0x000023a6 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000023a8 adds r2, r3, 4 | r2 = r3 + 4;
0x000023aa ldr r0, [r3] | r0 = *(r3);
0x000023ac str r2, [sp, 0x14] | var_14h = r2;
0x000023ae bl 0x161c0 | r0 = fcn_000161c0 (r0, r1);
0x000023b2 add r7, r0 | r7 += r0;
0x000023b4 b 0x22d0 | goto label_1;
0x000023b6 ldrb r3, [r6, 2] | r3 = *((r6 + 2));
0x000023b8 cmp r3, 0x78 |
| if (r3 != 0x78) {
0x000023ba bne 0x24a0 | goto label_20;
| }
0x000023bc ldr r3, [sp, 0x14] | r3 = var_14h;
0x000023be add.w r8, r4, 8 | r8 = r4 + 8;
0x000023c2 mov r2, r8 | r2 = r8;
0x000023c4 movs r1, 0 | r1 = 0;
0x000023c6 ldr r0, [r3] | r0 = *(r3);
0x000023c8 adds r3, 4 | r3 += 4;
0x000023ca str r3, [sp, 0x14] | var_14h = r3;
0x000023cc movs r3, 0x10 | r3 = 0x10;
0x000023ce str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000023d2 bl 0xfd84 | r0 = fcn_0000fd84 (r0, r1, r2, r3, r4, r5, r6);
0x000023d6 cmp r0, r4 |
| if (r0 != r4) {
0x000023d8 beq 0x23e4 |
0x000023da subs r2, r0, r4 | r2 = r0 - r4;
0x000023dc movs r1, 0x30 | r1 = 0x30;
0x000023de mov r0, r4 | r0 = r4;
0x000023e0 blx 0x159e0 | fcn_000159e0 (r0, r1);
| }
0x000023e4 ldrb r3, [r6, 3] | r3 = *((r6 + 3));
0x000023e6 adds r5, r6, 2 | r5 = r6 + 2;
0x000023e8 mov r4, r8 | r4 = r8;
0x000023ea adds r6, r5, 1 | r6 = r5 + 1;
0x000023ec cmp r3, 0 |
| if (r3 != 0) {
0x000023ee bne 0x2366 | goto label_2;
| }
| label_17:
0x000023f0 cmp r7, r4 |
| if (r7 == r4) {
0x000023f2 beq 0x2472 | goto label_18;
| }
0x000023f4 mov r0, r4 | r0 = r4;
0x000023f6 movs r3, 0 | r3 = 0;
0x000023f8 strb r3, [r0], 1 | *(r0) = r3;
| r0++;
0x000023fc subs r7, r7, r0 | r7 -= r0;
0x000023fe ldr r3, [sp, 0xc] | r3 = var_ch;
0x00002400 cmp r7, r3 |
| if (r7 != r3) {
0x00002402 bne 0x2472 | goto label_18;
| }
0x00002404 mov r2, r3 | r2 = r3;
0x00002406 mov r1, sl | r1 = sl;
0x00002408 blx 0x16400 | fcn_00016400 (r0, r1);
0x0000240c str.w r0, [sb] | __asm ("str.w r0, [sb]");
0x00002410 add sp, 0x1c |
0x00002412 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00002416 add sp, 8 |
0x00002418 bx lr | return;
0x0000241a ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000241c add.w r6, r4, 8 | r6 = r4 + 8;
0x00002420 mov r2, r6 | r2 = r6;
0x00002422 movs r1, 0 | r1 = 0;
0x00002424 ldr r0, [r3] | r0 = *(r3);
0x00002426 adds r3, 4 | r3 += 4;
0x00002428 str r3, [sp, 0x14] | var_14h = r3;
0x0000242a movs r3, 0x10 | r3 = 0x10;
0x0000242c str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x00002430 bl 0xfd84 | r0 = fcn_0000fd84 (r0, r1, r2, r3, r4, r5, r6);
0x00002434 cmp r0, r4 |
| if (r0 != r4) {
0x00002436 beq 0x2442 |
0x00002438 subs r2, r0, r4 | r2 = r0 - r4;
0x0000243a movs r1, 0x30 | r1 = 0x30;
0x0000243c mov r0, r4 | r0 = r4;
0x0000243e blx 0x159e0 | fcn_000159e0 (r0, r1);
| }
0x00002442 mov r4, r6 | r4 = r6;
0x00002444 b 0x235e | goto label_3;
0x00002446 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00002448 ldr.w r8, [r3] | r8 = *(r3);
0x0000244c adds r3, 4 | r3 += 4;
0x0000244e str r3, [sp, 0x14] | var_14h = r3;
0x00002450 mov r0, r8 | r0 = r8;
0x00002452 bl 0x161c0 | fcn_000161c0 (r0, r1);
0x00002456 subs r3, r7, r4 | r3 = r7 - r4;
0x00002458 mov r6, r0 | r6 = r0;
0x0000245a cmp r3, r0 |
| if (r3 <= r0) {
0x0000245c blo 0x2472 | goto label_18;
| }
0x0000245e mov r0, r4 | r0 = r4;
0x00002460 mov r2, r6 | r2 = r6;
0x00002462 mov r1, r8 | r1 = r8;
0x00002464 blx 0x16400 | r0 = fcn_00016400 (r0, r1);
0x00002468 adds r4, r0, r6 | r4 = r0 + r6;
0x0000246a b 0x235e | goto label_3;
| label_19:
0x0000246c cmp r7, r4 |
| if (r7 != r4) {
0x0000246e bne.w 0x235a | goto label_4;
| }
| label_18:
0x00002472 bl 0x21ec | fcn_000021ec ();
| label_15:
0x00002476 ldr r2, [pc, 0x38] |
0x00002478 movs r1, 0 | r1 = 0;
0x0000247a ldr r3, [pc, 0x38] |
0x0000247c str.w r1, [sb, 8] | __asm ("str.w r1, [sb, 8]");
0x00002480 add r2, pc | r2 = 0x4936;
0x00002482 add r3, pc | r3 = 0x493c;
0x00002484 strd r2, r3, [sb] | __asm ("strd r2, r3, [sb]");
0x00002488 add sp, 0x1c |
0x0000248a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000248e add sp, 8 |
0x00002490 bx lr | return;
| label_12:
0x00002492 ldr.w sl, [pc, 0x24] |
0x00002496 movs r3, 1 | r3 = 1;
0x00002498 movs r7, 2 | r7 = 2;
0x0000249a str r3, [sp, 0xc] | var_ch = r3;
0x0000249c add sl, pc | sl = 0x495a;
0x0000249e b 0x22c4 | goto label_5;
| label_20:
0x000024a0 ldr r0, [pc, 0x18] |
0x000024a2 add r0, pc | r0 = 0x4962;
0x000024a4 bl 0x8b5c | dl_fatal_printf ()
| if (r6 == 0) {
0x000024a8 cbnz r6, 0x24e2 |
0x000024aa movs r1, r0 | r1 = r0;
0x000024ac pop {r1, r4, r6, r7} |
0x000024ae movs r1, r0 | r1 = r0;
0x000024b0 ldr r0, [r5, 0x6c] | r0 = *((r5 + 0x6c));
0x000024b2 movs r1, r0 | r1 = r0;
0x000024b4 str r6, [r3, 0x38] | *((r3 + 0x38)) = r6;
0x000024b6 movs r1, r0 | r1 = r0;
0x000024b8 ldr r4, [r1, 0x6c] | r4 = *((r1 + 0x6c));
0x000024ba movs r1, r0 | r1 = r0;
0x000024bc str r2, [r1, 0x34] | *((r1 + 0x34)) = r2;
0x000024be movs r1, r0 | r1 = r0;
| }
0x000024e2 push {r3, r4, r5, r6, r7, lr} |
0x000024e4 mov r4, r0 | r4 = r0;
0x000024e6 ldr r3, [pc, 0x110] |
0x000024e8 add r2, pc | r2 += pc;
0x000024ea ldr r1, [r2, 0xc] | r1 = *((r2 + 0xc));
0x000024ec ldr r0, [r0] | r0 = *(r0);
0x000024ee add r3, pc | r3 = 0x4aec;
0x000024f0 ldr r2, [r3] | r2 = *(0x4aec);
0x000024f2 rsbs r3, r1, 0 | r3 = r1 - ;
0x000024f4 ands r0, r3 | r0 &= r3;
0x000024f6 bl 0x15040 | r0 = fcn_00015040 (r0);
0x000024fa cmp r0, 0 |
| if (r0 != 0) {
0x000024fc bne 0x25dc | goto label_22;
| }
0x000024fe ldr r2, [pc, 0xfc] |
0x00002500 str r0, [r4] | *(r4) = r0;
0x00002502 add r2, pc | r2 = 0x4b04;
0x00002504 ldr.w r3, [r2, 0x8e0] | r3 = *(0x53e4);
0x00002508 orr r3, r3, 1 | r3 |= 1;
0x0000250c str.w r3, [r2, 0x8e0] | __asm ("str.w r3, [r2, 0x8e0]");
| label_10:
0x00002510 ldr r0, [pc, 0xec] |
0x00002512 movs r3, 1 | r3 = 1;
0x00002514 add r0, pc | r0 = 0x4b18;
0x00002516 addw r0, r0, 0x928 | __asm ("addw r0, r0, 0x928");
| do {
0x0000251a ldrex r2, [r0] | __asm ("ldrex r2, [r0]");
0x0000251e cmp r2, 0 |
| if (r2 != 0) {
0x00002520 bne 0x252e | goto label_23;
| }
0x00002522 strex r1, r3, [r0] | __asm ("strex r1, r3, [r0]");
0x00002526 cmp r1, 0 |
0x00002528 bne 0x251a |
| } while (r1 != 0);
0x0000252a dmb ish | __asm ("dmb ish");
| if (r1 != 0) {
| label_23:
0x0000252e bne 0x25ee | goto label_24;
| }
| label_11:
0x00002530 ldr r3, [pc, 0xd0] |
0x00002532 add r3, pc | r3 = 0x4b3a;
0x00002534 ldr.w r4, [r3, 0x908] | r4 = *(0x5442);
0x00002538 addw r3, r3, 0x908 | __asm ("addw r3, r3, 0x908");
0x0000253c cmp r4, r3 |
| if (r4 == r3) {
0x0000253e beq 0x2592 | goto label_25;
| }
0x00002540 ldr r5, [pc, 0xc4] |
0x00002542 ldr r6, [pc, 0xc8] |
0x00002544 add r5, pc | r5 = 0x4b50;
0x00002546 add r6, pc | r6 = 0x4b58;
0x00002548 addw r5, r5, 0x908 | __asm ("addw r5, r5, 0x908");
0x0000254c b 0x2554 |
| while (r0 == 0) {
| label_6:
0x0000254e ldr r4, [r4] | r4 = *(r4);
0x00002550 cmp r4, r5 |
| if (r4 == r5) {
0x00002552 beq 0x2592 | goto label_25;
| }
0x00002554 ldrd r1, r3, [r4, 0x244] | __asm ("ldrd r1, r3, [r4, 0x244]");
0x00002558 movs r2, 7 | r2 = 7;
0x0000255a ldr.w r0, [r4, 0x240] | r0 = *((r4 + 0x240));
0x0000255e subs r1, r1, r3 | r1 -= r3;
0x00002560 add r0, r3 | r0 += r3;
0x00002562 bl 0x15040 | r0 = fcn_00015040 (r0);
0x00002566 cmp r0, 0 |
0x00002568 beq 0x254e |
| }
0x0000256a ldr r7, [r6] | r7 = *(r6);
0x0000256c cmp r7, 0 |
| if (r7 == 0) {
0x0000256e beq 0x254e | goto label_6;
| }
| label_7:
0x00002570 ldr r0, [pc, 0x9c] |
0x00002572 movs r2, 0 | r2 = 0;
0x00002574 dmb ish | __asm ("dmb ish");
0x00002578 add r0, pc | r0 = 0x4b8c;
0x0000257a addw r0, r0, 0x928 | __asm ("addw r0, r0, 0x928");
| do {
0x0000257e ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x00002582 strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x00002586 cmp r1, 0 |
0x00002588 bne 0x257e |
| } while (r1 != 0);
0x0000258a cmp r3, 1 |
| if (r3 > 1) {
0x0000258c bgt 0x25e8 | goto label_26;
| }
| label_9:
0x0000258e mov r0, r7 | r0 = r7;
0x00002590 pop {r3, r4, r5, r6, r7, pc} |
| label_25:
0x00002592 ldr r3, [pc, 0x80] |
0x00002594 add r3, pc | r3 = 0x4bae;
0x00002596 ldr.w r4, [r3, 0x918] | r4 = *(0x54c6);
0x0000259a addw r3, r3, 0x918 | __asm ("addw r3, r3, 0x918");
0x0000259e cmp r4, r3 |
| if (r4 == r3) {
0x000025a0 beq 0x25d8 | goto label_27;
| }
0x000025a2 ldr r5, [pc, 0x74] |
0x000025a4 ldr r6, [pc, 0x74] |
0x000025a6 add r5, pc | r5 = 0x4bc4;
0x000025a8 add r6, pc | r6 = 0x4bc8;
0x000025aa addw r5, r5, 0x918 | __asm ("addw r5, r5, 0x918");
0x000025ae b 0x25b6 |
| while (r0 == 0) {
0x000025b0 ldr r4, [r4] | r4 = *(r4);
0x000025b2 cmp r4, r5 |
| if (r4 == r5) {
0x000025b4 beq 0x25d8 | goto label_27;
| }
| label_8:
0x000025b6 ldrd r1, r3, [r4, 0x244] | __asm ("ldrd r1, r3, [r4, 0x244]");
0x000025ba movs r2, 7 | r2 = 7;
0x000025bc ldr.w r0, [r4, 0x240] | r0 = *((r4 + 0x240));
0x000025c0 subs r1, r1, r3 | r1 -= r3;
0x000025c2 add r0, r3 | r0 += r3;
0x000025c4 bl 0x15040 | r0 = fcn_00015040 (r0);
0x000025c8 cmp r0, 0 |
0x000025ca beq 0x25b0 |
| }
0x000025cc ldr r7, [r6] | r7 = *(r6);
0x000025ce cmp r7, 0 |
| if (r7 != 0) {
0x000025d0 bne 0x2570 | goto label_7;
| }
0x000025d2 ldr r4, [r4] | r4 = *(r4);
0x000025d4 cmp r4, r5 |
| if (r4 != r5) {
0x000025d6 bne 0x25b6 | goto label_8;
| }
| label_27:
0x000025d8 movs r7, 0 | r7 = 0;
0x000025da b 0x2570 | goto label_7;
| label_22:
0x000025dc ldr r3, [pc, 0x40] |
0x000025de add r3, pc | r3 = 0x4c02;
0x000025e0 ldr r7, [r3] | r7 = *(0x4c02);
0x000025e2 cmp r7, 0 |
| if (r7 != 0) {
0x000025e4 bne 0x258e | goto label_9;
| }
0x000025e6 b 0x2510 | goto label_10;
| label_26:
0x000025e8 bl 0x1518c | fcn_0001518c ();
0x000025ec b 0x258e | goto label_9;
| label_24:
0x000025ee bl 0x150f0 | fcn_000150f0 (r0);
0x000025f2 b 0x2530 | goto label_11;
| }
[*] Function printf used 20 times ld-linux-armhf.so.3