[*] Binary protection state of pzstd
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH No Symbols
[*] Function system tear down of pzstd
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/bin/pzstd @ 0xbe64 */
| #include <stdint.h>
|
; (fcn) fcn.0000be64 () | void fcn_0000be64 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_18h;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_4ch;
| int16_t var_58h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_a0h;
| int16_t var_cch;
| int16_t var_d4h;
| int32_t var_0h_2;
| int16_t var_dch;
| int16_t var_e0h;
| int16_t var_e4h;
| int16_t var_ech;
| int16_t var_f0h;
| int16_t var_f4h;
| r0 = arg1;
| r1 = arg2;
0x0000be64 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000be68 sub sp, 0xfc |
0x0000be6a ldr r4, [pc, 0x3c4] |
0x0000be6c movs r5, 0 | r5 = 0;
0x0000be6e mov r6, r1 | r6 = r1;
0x0000be70 ldr r2, [pc, 0x3c0] | r2 = *(0xc234);
0x0000be72 add r4, pc | r4 = 0x180a8;
0x0000be74 ldr r7, [pc, 0x3c0] |
0x0000be76 ldr r3, [pc, 0x3c4] | r3 = *(0xc23e);
0x0000be78 ldr r2, [r4, r2] |
0x0000be7a mov r4, r0 | r4 = r0;
0x0000be7c add r7, pc | r7 = 0x180b8;
0x0000be7e adds r0, 0x20 | r0 += 0x20;
0x0000be80 add.w sb, r4, 0x3c | sb = r4 + 0x3c;
0x0000be84 ldr r2, [r2] | r2 = *(0x180a8);
0x0000be86 str r2, [sp, 0xf4] | var_f4h = r2;
0x0000be88 mov.w r2, 0 | r2 = 0;
0x0000be8c ldr r2, [r1, 0x40] | r2 = *((r1 + 0x40));
0x0000be8e ldr r3, [r7, r3] |
0x0000be90 str r2, [r0, -0x4] | *((r0 - 0x4)) = r2;
0x0000be94 ldr r3, [r3] | r3 = *(0x180b8);
0x0000be96 str r3, [r0, -0x8] | *((r0 - 0x8)) = r3;
0x0000be9a strd r5, r5, [r4] | __asm ("strd r5, r5, [r4]");
0x0000be9e strd r5, r5, [r4, 8] | __asm ("strd r5, r5, [r4, 8]");
0x0000bea2 strd r5, r5, [r4, 0x10] | __asm ("strd r5, r5, [r4, 0x10]");
0x0000bea6 blx 0x1d94 | sym ();
0x0000beaa strb.w r5, [r4, 0x3c] | *((r4 + 0x3c)) = r5;
0x0000beae movs r0, 0x96 | r0 = 0x96;
0x0000beb0 ldrb r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0000beb2 movs r1, 0 | r1 = 0;
0x0000beb4 strb.w r5, [r4, 0x30] | *((r4 + 0x30)) = r5;
0x0000beb8 str r5, [r4, 0x38] | *((r4 + 0x38)) = r5;
0x0000beba strd r5, r5, [r4, 0x4c] | __asm ("strd r5, r5, [r4, 0x4c]");
0x0000bebe strd r0, r1, [r4, 0x28] | __asm ("strd r0, r1, [r4, 0x28]");
0x0000bec2 str.w sb, [r4, 0x34] | __asm ("str.w sb, [r4, 0x34]");
0x0000bec6 cmp r3, 0 |
| if (r3 != 0) {
0x0000bec8 bne.w 0xc098 | goto label_10;
| }
0x0000becc add r5, sp, 0x4c | r5 += var_4ch;
0x0000bece str r3, [sp] | *(sp) = r3;
0x0000bed0 mov r0, r5 | r0 = r5;
0x0000bed2 ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x0000bed4 movs r2, 0 | r2 = 0;
0x0000bed6 movs r3, 0 | r3 = 0;
0x0000bed8 bl 0x1b23c | fcn_0001b23c (r0, r1, r2, r3, r4, r5);
0x0000bedc ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0000bede ldrb.w r2, [r6, 0x3c] | r2 = *((r6 + 0x3c));
0x0000bee2 ldr.w fp, [sp, 0x4c] | fp = var_4ch;
0x0000bee6 str r2, [sp, 0x20] | var_20h = r2;
0x0000bee8 cmp r3, 0 |
| if (r3 != 0) {
0x0000beea bne.w 0xc106 | goto label_11;
| }
| label_0:
0x0000beee ldr r3, [sp, 0x20] | r3 = var_20h;
0x0000bef0 mov.w sl, 0 | sl = 0;
0x0000bef4 mov ip, r5 |
0x0000bef6 str.w sl, [sp, 0x68] | __asm ("str.w sl, [var_68h]");
0x0000befa str.w fp, [sp, 0x4c] | __asm ("str.w fp, [var_4ch]");
0x0000befe add r6, sp, 0x78 | r6 += var_78h;
0x0000bf00 str r3, [sp, 0x6c] | var_6ch = r3;
0x0000bf02 add r5, sp, 0x74 | r5 += var_74h;
0x0000bf04 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x0000bf08 add.w r8, sp, 0xa0 | r8 += var_a0h;
0x0000bf0c mov lr, r8 | lr = r8;
0x0000bf0e str r4, [sp, 0x74] | var_74h = r4;
0x0000bf10 stm r6!, {r0, r1, r2, r3} | *(r6!) = r0;
| *((r6! + 4)) = r1;
| *((r6! + 8)) = r2;
| *((r6! + 12)) = r3;
0x0000bf12 str.w fp, [sp, 0x78] | __asm ("str.w fp, [var_78h]");
0x0000bf16 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x0000bf1a stm r6!, {r0, r1, r2, r3} | *(r6!) = r0;
| *((r6! + 4)) = r1;
| *((r6! + 8)) = r2;
| *((r6! + 12)) = r3;
0x0000bf1c ldm.w ip, {r0, r1} | r0 = *(ip);
| r1 = *((ip + 4));
0x0000bf20 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0000bf22 stm.w r6, {r0, r1} | *(r6) = r0;
| *((r6 + 4)) = r1;
0x0000bf26 str.w sl, [sp, 0x94] | __asm ("str.w sl, [var_94h]");
0x0000bf2a str r3, [sp, 0x98] | var_98h = r3;
0x0000bf2c ldm r5!, {r0, r1, r2, r3} | r0 = *(r5!);
| r1 = *((r5! + 4));
| r2 = *((r5! + 8));
| r3 = *((r5! + 12));
0x0000bf2e str.w sl, [sp, 0xdc] | __asm ("str.w sl, [var_dch]");
0x0000bf32 stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x0000bf36 ldm r5!, {r0, r1, r2, r3} | r0 = *(r5!);
| r1 = *((r5! + 4));
| r2 = *((r5! + 8));
| r3 = *((r5! + 12));
0x0000bf38 stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x0000bf3c ldm.w r5, {r0, r1, r2} | r0 = *(r5);
| r1 = *((r5 + 4));
| r2 = *((r5 + 8));
0x0000bf40 stm.w lr, {r0, r1, r2} | *(lr) = r0;
| *((lr + 4)) = r1;
| *((lr + 8)) = r2;
0x0000bf44 movs r0, 0x2c | r0 = 0x2c;
0x0000bf46 blx 0x1d88 | sym ();
0x0000bf4a mov r6, r8 | r6 = r8;
0x0000bf4c mov r5, r0 | r5 = r0;
0x0000bf4e str r0, [sp, 0xd4] | var_d4h = r0;
0x0000bf50 ldm r6!, {r0, r1, r2, r3} | r0 = *(r6!);
| r1 = *((r6! + 4));
| r2 = *((r6! + 8));
| r3 = *((r6! + 12));
0x0000bf52 ldr.w fp, [pc, 0x2ec] | fp = *(0xc242);
0x0000bf56 ldr.w sl, [pc, 0x2ec] | sl = *(0xc246);
0x0000bf5a stm r5!, {r0, r1, r2, r3} | *(r5!) = r0;
| *((r5! + 4)) = r1;
| *((r5! + 8)) = r2;
| *((r5! + 12)) = r3;
0x0000bf5c ldr.w lr, [pc, 0x2e8] | lr = *(0xc248);
0x0000bf60 ldm r6!, {r0, r1, r2, r3} | r0 = *(r6!);
| r1 = *((r6! + 4));
| r2 = *((r6! + 8));
| r3 = *((r6! + 12));
0x0000bf62 ldr.w ip, [pc, 0x2e8] | ip = *(0xc24e);
0x0000bf66 stm r5!, {r0, r1, r2, r3} | *(r5!) = r0;
| *((r5! + 4)) = r1;
| *((r5! + 8)) = r2;
| *((r5! + 12)) = r3;
0x0000bf68 ldm.w r6, {r0, r1, r2} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
0x0000bf6c stm.w r5, {r0, r1, r2} | *(r5) = r0;
| *((r5 + 4)) = r1;
| *((r5 + 8)) = r2;
0x0000bf70 movs r0, 0x48 | r0 = 0x48;
0x0000bf72 ldr.w r6, [r7, fp] | r6 = *((r7 + fp));
0x0000bf76 str r6, [sp, 0xe0] | var_e0h = r6;
0x0000bf78 ldr.w sl, [r7, sl] | sl = *((r7 + sl));
0x0000bf7c str.w sl, [sp, 0xdc] | __asm ("str.w sl, [var_dch]");
0x0000bf80 ldr.w r3, [r7, lr] | r3 = *((r7 + lr));
0x0000bf84 str r3, [sp, 0x20] | var_20h = r3;
0x0000bf86 str r3, [sp, 0xf0] | var_f0h = r3;
0x0000bf88 ldr.w r7, [r7, ip] | r7 = *((r7 + ip));
0x0000bf8c str r7, [sp, 0xec] | var_ech = r7;
0x0000bf8e blx 0x1d88 | sym ();
0x0000bf92 add r2, sp, 0xd4 | r2 += var_d4h;
0x0000bf94 mov r3, r0 | r3 = r0;
0x0000bf96 mov r5, r2 | r5 = r2;
0x0000bf98 str r2, [sp, 0x24] | var_24h = r2;
0x0000bf9a movs r2, 0 | r2 = 0;
0x0000bf9c add.w fp, r0, 0x18 |
0x0000bfa0 strd r2, r2, [r0] | __asm ("strd r2, r2, [r0]");
0x0000bfa4 add.w lr, r0, 0x28 | lr = r0 + 0x28;
0x0000bfa8 strd r2, r2, [r0, 8] | __asm ("strd r2, r2, [r0, 8]");
0x0000bfac add.w ip, sp, 0xcc |
0x0000bfb0 strd r2, r2, [r0, 0x10] | __asm ("strd r2, r2, [r0, 0x10]");
0x0000bfb4 add.w sb, sp, 0xe4 | sb += var_e4h;
0x0000bfb8 str r2, [sp, 0xdc] | var_dch = r2;
0x0000bfba ldrd r0, r1, [r5] | __asm ("ldrd r0, r1, [r5]");
0x0000bfbe stm.w ip, {r0, r1} | *(ip) = r0;
| *((ip + 4)) = r1;
0x0000bfc2 ldm.w fp, {r0, r1} | r0 = *(fp);
| r1 = *((fp + 4));
0x0000bfc6 stm.w r5, {r0, r1} | *(r5) = r0;
| *((r5 + 4)) = r1;
0x0000bfca ldm.w ip, {r0, r1} | r0 = *(ip);
| r1 = *((ip + 4));
0x0000bfce stm.w fp, {r0, r1} | *(fp) = r0;
| *((fp + 4)) = r1;
0x0000bfd2 ldr r1, [r3, 0x24] | r1 = *((r3 + 0x24));
0x0000bfd4 str.w sl, [r3, 0x20] | __asm ("str.w sl, [r3, 0x20]");
0x0000bfd8 str r6, [r3, 0x24] | *((r3 + 0x24)) = r6;
0x0000bfda str r1, [sp, 0xe0] | var_e0h = r1;
0x0000bfdc ldm.w sb, {r0, r1} | r0 = *(sb);
| r1 = *((sb + 4));
0x0000bfe0 stm.w ip, {r0, r1} | *(ip) = r0;
| *((ip + 4)) = r1;
0x0000bfe4 ldm.w lr, {r0, r1} | r0 = *(lr);
| r1 = *((lr + 4));
0x0000bfe8 stm.w sb, {r0, r1} | *(sb) = r0;
| *((sb + 4)) = r1;
0x0000bfec ldm.w ip, {r0, r1} | r0 = *(ip);
| r1 = *((ip + 4));
0x0000bff0 ldr r6, [r4, 0x4c] | r6 = *((r4 + 0x4c));
0x0000bff2 str r2, [sp, 0xec] | var_ech = r2;
0x0000bff4 stm.w lr, {r0, r1} | *(lr) = r0;
| *((lr + 4)) = r1;
0x0000bff8 ldr r1, [sp, 0x20] | r1 = var_20h;
0x0000bffa strd r2, r2, [r3, 0x38] | __asm ("strd r2, r2, [r3, 0x38]");
0x0000bffe strd r2, r2, [r3, 0x40] | __asm ("strd r2, r2, [r3, 0x40]");
0x0000c002 ldr r2, [r3, 0x34] | r2 = *((r3 + 0x34));
0x0000c004 str r7, [r3, 0x30] | *((r3 + 0x30)) = r7;
0x0000c006 str r3, [r4, 0x4c] | *((r4 + 0x4c)) = r3;
0x0000c008 str r1, [r3, 0x34] | *((r3 + 0x34)) = r1;
0x0000c00a str r2, [sp, 0xf0] | var_f0h = r2;
0x0000c00c cmp r6, 0 |
| if (r6 == 0) {
0x0000c00e beq 0xc07c | goto label_12;
| }
0x0000c010 ldrd r0, r7, [r6, 0x38] | __asm ("ldrd r0, r7, [r6, 0x38]");
0x0000c014 cmp r0, r7 |
| if (r0 == r7) {
0x0000c016 beq.w 0xc142 | goto label_13;
| }
0x0000c01a mov r5, r0 | r5 = r0;
0x0000c01c add.w sl, r6, 0x28 | sl = r6 + 0x28;
| do {
0x0000c020 ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x0000c022 ldr r2, [r5], 4 | r2 = *(r5);
| r5 += 4;
0x0000c026 str r2, [sp, 0xa0] | var_a0h = r2;
0x0000c028 cmp r3, 0 |
| if (r3 == 0) {
0x0000c02a beq.w 0xc14e | goto label_14;
| }
0x0000c02e ldr r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x0000c030 mov r1, r8 | r1 = r8;
0x0000c032 mov r0, sl | r0 = sl;
0x0000c034 mov fp, sl |
0x0000c036 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000c038 cmp r7, r5 |
0x0000c03a bne 0xc020 |
| } while (r7 != r5);
0x0000c03c ldr r0, [r6, 0x38] | r0 = *((r6 + 0x38));
| if (r0 != 0) {
0x0000c03e cbz r0, 0xc044 |
| label_1:
0x0000c040 blx 0x1fa8 | fcn_00001fa8 ();
| }
| label_2:
0x0000c044 ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
| if (r3 != 0) {
0x0000c046 cbz r3, 0xc050 |
0x0000c048 movs r2, 3 | r2 = 3;
0x0000c04a mov r1, fp | r1 = fp;
0x0000c04c mov r0, fp | r0 = fp;
0x0000c04e blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
| }
0x0000c050 ldr r3, [r6, 0x20] | r3 = *((r6 + 0x20));
| if (r3 != 0) {
0x0000c052 cbz r3, 0xc05e |
0x0000c054 add.w r1, r6, 0x18 | r1 = r6 + 0x18;
0x0000c058 movs r2, 3 | r2 = 3;
0x0000c05a mov r0, r1 | r0 = r1;
0x0000c05c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
| }
0x0000c05e mov r0, r6 | r0 = r6;
0x0000c060 blx 0x1fa8 | fcn_00001fa8 ();
0x0000c064 ldr r3, [sp, 0xec] | r3 = var_ech;
| if (r3 != 0) {
0x0000c066 cbz r3, 0xc070 |
0x0000c068 movs r2, 3 | r2 = 3;
0x0000c06a mov r1, sb | r1 = sb;
0x0000c06c mov r0, sb | r0 = sb;
0x0000c06e blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
| }
0x0000c070 ldr r3, [sp, 0xdc] | r3 = var_dch;
| if (r3 == 0) {
0x0000c072 cbz r3, 0xc07c | goto label_12;
| }
0x0000c074 ldr r1, [sp, 0x24] | r1 = var_24h;
0x0000c076 movs r2, 3 | r2 = 3;
0x0000c078 mov r0, r1 | r0 = r1;
0x0000c07a blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
| do {
| label_12:
0x0000c07c ldr r2, [pc, 0x1d0] |
0x0000c07e ldr r3, [pc, 0x1b4] | r3 = *(0xc236);
0x0000c080 add r2, pc | r2 = 0x182d4;
0x0000c082 ldr r3, [r2, r3] | r3 = *(0x182d4);
0x0000c084 ldr r2, [r3] | r2 = *(0x182d4);
0x0000c086 ldr r3, [sp, 0xf4] | r3 = var_f4h;
0x0000c088 eors r2, r3 | r2 ^= r3;
0x0000c08a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000c08e bne 0xc152 | goto label_15;
| }
0x0000c090 mov r0, r4 | r0 = r4;
0x0000c092 add sp, 0xfc |
0x0000c094 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_10:
0x0000c098 ldr r2, [pc, 0x1b8] | r2 = *(0xc254);
0x0000c09a movs r0, 0x48 | r0 = 0x48;
0x0000c09c str r4, [sp, 0xd4] | var_d4h = r4;
0x0000c09e ldr r3, [pc, 0x1b8] | r3 = *(0xc25a);
0x0000c0a0 ldr r6, [r7, r2] | r6 = *((r7 + r2));
0x0000c0a2 str r6, [sp, 0xe0] | var_e0h = r6;
0x0000c0a4 ldr.w r8, [r7, r3] | r8 = *((r7 + r3));
0x0000c0a8 ldr r3, [pc, 0x1b0] | r3 = *(0xc25c);
0x0000c0aa str.w r8, [sp, 0xdc] | __asm ("str.w r8, [var_dch]");
0x0000c0ae ldr r5, [r7, r3] | r5 = *((r7 + r3));
0x0000c0b0 ldr r3, [pc, 0x1ac] | r3 = *(0xc260);
0x0000c0b2 str r5, [sp, 0xf0] | var_f0h = r5;
0x0000c0b4 ldr r7, [r7, r3] | r7 = *((r7 + r3));
0x0000c0b6 str r7, [sp, 0xec] | var_ech = r7;
0x0000c0b8 blx 0x1d88 | sym ();
0x0000c0bc add r2, sp, 0xd4 | r2 += var_d4h;
0x0000c0be mov r3, r0 | r3 = r0;
0x0000c0c0 str r0, [r4, 0x50] | *((r4 + 0x50)) = r0;
0x0000c0c2 add.w ip, sp, 0xcc |
0x0000c0c6 ldm.w r2, {r0, r1} | r0 = *(r2);
| r1 = *((r2 + 4));
0x0000c0ca add.w sb, r3, 0x18 | sb = r3 + 0x18;
0x0000c0ce movs r2, 0 | r2 = 0;
0x0000c0d0 add.w lr, r3, 0x28 | lr = r3 + 0x28;
0x0000c0d4 strd r2, r2, [r3] | __asm ("strd r2, r2, [r3]");
0x0000c0d8 stm.w ip, {r0, r1} | *(ip) = r0;
| *((ip + 4)) = r1;
0x0000c0dc strd r2, r2, [r3, 8] | __asm ("strd r2, r2, [r3, 8]");
0x0000c0e0 strd r2, r2, [r3, 0x10] | __asm ("strd r2, r2, [r3, 0x10]");
0x0000c0e4 stm.w sb, {r0, r1} | *(sb) = r0;
| *((sb + 4)) = r1;
0x0000c0e8 add r1, sp, 0xe4 | r1 += var_e4h;
0x0000c0ea ldm r1, {r0, r1} | r0 = *(r1);
| r1 = *((r1 + 4));
0x0000c0ec strd r8, r6, [r3, 0x20] | __asm ("strd r8, r6, [r3, 0x20]");
0x0000c0f0 stm.w ip, {r0, r1} | *(ip) = r0;
| *((ip + 4)) = r1;
0x0000c0f4 stm.w lr, {r0, r1} | *(lr) = r0;
| *((lr + 4)) = r1;
0x0000c0f8 strd r7, r5, [r3, 0x30] | __asm ("strd r7, r5, [r3, 0x30]");
0x0000c0fc strd r2, r2, [r3, 0x38] | __asm ("strd r2, r2, [r3, 0x38]");
0x0000c100 strd r2, r2, [r3, 0x40] | __asm ("strd r2, r2, [r3, 0x40]");
0x0000c104 b 0xc07c |
| } while (1);
| label_11:
0x0000c106 cmp r3, fp |
| if (r3 >= fp) {
0x0000c108 bhs.w 0xbeee | goto label_0;
| }
0x0000c10c vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0000c110 add r6, sp, 0x28 | r6 += var_28h;
0x0000c112 str r3, [sp, 0x4c] | var_4ch = r3;
0x0000c114 movs r3, 0 | r3 = 0;
0x0000c116 str r3, [sp, 0x18] | var_18h = r3;
0x0000c118 add r3, sp, 0x58 | r3 += var_58h;
0x0000c11a vstr d16, [sp, 0x10] | __asm ("vstr d16, [sp, 0x10]");
0x0000c11e ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x0000c120 stm.w sp, {r0, r1, r2, r3} | *(sp) = r0;
| *((sp + 4)) = r1;
| *((sp + 8)) = r2;
| *((sp + 12)) = r3;
0x0000c124 mov r0, r6 | r0 = r6;
0x0000c126 ldm.w r5, {r1, r2, r3} | r1 = *(r5);
| r2 = *((r5 + 4));
| r3 = *((r5 + 8));
0x0000c12a bl 0x11860 | r0 = fcn_00011860 (r0, r1, r2, r3, r4, r5, r6);
0x0000c12e ldm r6!, {r0, r1, r2, r3} | r0 = *(r6!);
| r1 = *((r6! + 4));
| r2 = *((r6! + 8));
| r3 = *((r6! + 12));
0x0000c130 mov ip, r5 |
0x0000c132 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x0000c136 mov fp, r0 |
0x0000c138 ldm.w r6, {r0, r1, r2} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
0x0000c13c stm.w ip, {r0, r1, r2} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
0x0000c140 b 0xbeee | goto label_0;
| label_13:
0x0000c142 add.w fp, r6, 0x28 |
0x0000c146 cmp r0, 0 |
| if (r0 != 0) {
0x0000c148 bne.w 0xc040 | goto label_1;
| }
0x0000c14c b 0xc044 | goto label_2;
| label_14:
0x0000c14e blx 0x1e20 | fcn_00001e20 ();
| label_15:
0x0000c152 blx 0x2008 | fcn_00002008 ();
| do {
0x0000c156 add r0, sp, 0xe4 | r0 += var_e4h;
0x0000c158 bl 0xb864 | fcn_0000b864 (r0);
0x0000c15c add r0, sp, 0xd4 | r0 += var_d4h;
0x0000c15e bl 0xb864 | fcn_0000b864 (r0);
0x0000c162 ldr r5, [r4, 0x50] | r5 = *((r4 + 0x50));
| if (r5 == 0) {
0x0000c164 cbz r5, 0xc1a6 | goto label_16;
| }
0x0000c166 ldrd r6, sl, [r5, 0x38] | __asm ("ldrd r6, sl, [r5, 0x38]");
0x0000c16a add.w r8, sp, 0x4c | r8 += var_4ch;
0x0000c16e add.w r7, r5, 0x28 | r7 = r5 + 0x28;
| label_5:
0x0000c172 cmp sl, r6 |
| if (sl == r6) {
0x0000c174 beq 0xc18c | goto label_17;
| }
0x0000c176 ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x0000c178 ldr r2, [r6], 4 | r2 = *(r6);
| r6 += 4;
0x0000c17c str r2, [sp, 0x4c] | var_4ch = r2;
0x0000c17e cmp r3, 0 |
| if (r3 != 0) {
0x0000c180 bne 0xc206 | goto label_18;
| }
0x0000c182 blx 0x1e20 | fcn_00001e20 ();
0x0000c186 b 0xc156 |
| } while (1);
| label_17:
0x0000c18c ldr r0, [r5, 0x38] | r0 = *((r5 + 0x38));
0x0000c18e cbnz r0, 0xc1f0 |
| while (1) {
0x0000c190 ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x0000c192 add.w r1, r5, 0x28 | r1 = r5 + 0x28;
| if (r3 != 0) {
0x0000c196 cbnz r3, 0xc1f6 | goto label_19;
| }
| label_3:
0x0000c198 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x0000c19a add.w r1, r5, 0x18 | r1 = r5 + 0x18;
| if (r3 != 0) {
0x0000c19e cbnz r3, 0xc1fe | goto label_20;
| }
| label_4:
0x0000c1a0 mov r0, r5 | r0 = r5;
0x0000c1a2 blx 0x1fa8 | fcn_00001fa8 ();
| label_16:
0x0000c1a6 ldr r5, [r4, 0x4c] | r5 = *((r4 + 0x4c));
| if (r5 != 0) {
0x0000c1a8 cbz r5, 0xc1e2 |
0x0000c1aa ldrd r6, sl, [r5, 0x38] | __asm ("ldrd r6, sl, [r5, 0x38]");
0x0000c1ae add.w r8, sp, 0x4c | r8 += var_4ch;
0x0000c1b2 add.w r7, r5, 0x28 | r7 = r5 + 0x28;
| label_9:
0x0000c1b6 cmp r6, sl |
| if (r6 != sl) {
0x0000c1b8 beq 0xc1c8 |
0x0000c1ba ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x0000c1bc ldr r2, [r6], 4 | r2 = *(r6);
| r6 += 4;
0x0000c1c0 str r2, [sp, 0x4c] | var_4ch = r2;
| if (r3 != 0) {
0x0000c1c2 cbnz r3, 0xc226 | goto label_21;
| }
0x0000c1c4 blx 0x1e20 | fcn_00001e20 ();
| }
0x0000c1c8 ldr r0, [r5, 0x38] | r0 = *((r5 + 0x38));
| if (r0 != 0) {
0x0000c1ca cbnz r0, 0xc210 | goto label_22;
| }
| label_6:
0x0000c1cc ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x0000c1ce add.w r1, r5, 0x28 | r1 = r5 + 0x28;
| if (r3 != 0) {
0x0000c1d2 cbnz r3, 0xc216 | goto label_23;
| }
| label_7:
0x0000c1d4 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x0000c1d6 add.w r1, r5, 0x18 | r1 = r5 + 0x18;
| if (r3 != 0) {
0x0000c1da cbnz r3, 0xc21e | goto label_24;
| }
| label_8:
0x0000c1dc mov r0, r5 | r0 = r5;
0x0000c1de blx 0x1fa8 | fcn_00001fa8 ();
| }
0x0000c1e2 ldr r0, [r4, 0x34] | r0 = *((r4 + 0x34));
0x0000c1e4 cmp sb, r0 |
| if (sb != r0) {
0x0000c1e6 beq 0xc1ec |
0x0000c1e8 blx 0x1fa8 | fcn_00001fa8 ();
| }
0x0000c1ec blx 0x2014 | fcn_00002014 ();
0x0000c1f0 blx 0x1fa8 | fcn_00001fa8 ();
0x0000c1f4 b 0xc190 |
| }
| label_19:
0x0000c1f6 movs r2, 3 | r2 = 3;
0x0000c1f8 mov r0, r1 | r0 = r1;
0x0000c1fa blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r2);
0x0000c1fc b 0xc198 | goto label_3;
| label_20:
0x0000c1fe movs r2, 3 | r2 = 3;
0x0000c200 mov r0, r1 | r0 = r1;
0x0000c202 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r2);
0x0000c204 b 0xc1a0 | goto label_4;
| label_18:
0x0000c206 ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x0000c208 mov r1, r8 | r1 = r8;
0x0000c20a mov r0, r7 | r0 = r7;
0x0000c20c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000c20e b 0xc172 | goto label_5;
| label_22:
0x0000c210 blx 0x1fa8 | fcn_00001fa8 ();
0x0000c214 b 0xc1cc | goto label_6;
| label_23:
0x0000c216 movs r2, 3 | r2 = 3;
0x0000c218 mov r0, r1 | r0 = r1;
0x0000c21a blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r2);
0x0000c21c b 0xc1d4 | goto label_7;
| label_24:
0x0000c21e movs r2, 3 | r2 = 3;
0x0000c220 mov r0, r1 | r0 = r1;
0x0000c222 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r2);
0x0000c224 b 0xc1dc | goto label_8;
| label_21:
0x0000c226 ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x0000c228 mov r1, r8 | r1 = r8;
0x0000c22a mov r0, r7 | r0 = r7;
0x0000c22c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000c22e b 0xc1b6 | goto label_9;
| }
[*] Function system used 1 times pzstd