[*] Binary protection state of libgeometry.so
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function popen tear down of libgeometry.so
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgeometry.so @ 0x2048 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00002048 () | void fcn_00002048 (int16_t arg_b0h, int16_t arg_b4h, int16_t arg_b8h, int16_t arg_bch, int16_t arg_c0h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_2ch_2;
| int16_t var_ach;
| int16_t var_e0h;
| int16_t var_e4h;
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h;
| int32_t var_8h_2;
| int16_t var_10h_2;
| int16_t var_14h;
| int32_t var_14h_2;
| int16_t var_20h;
| int16_t var_24h_2;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_74h;
| int16_t var_7ch;
| int16_t var_84h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00002048 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0000204c sub sp, 0x8c |
0x0000204e mov r6, r1 | r6 = r1;
0x00002050 str r1, [sp, 0x4c] | var_4ch = r1;
0x00002052 mov r5, r2 | r5 = r2;
0x00002054 mov sl, r0 | sl = r0;
0x00002056 ldr.w r1, [pc, 0x440] | r1 = *(0x00002498);
0x0000205a str r2, [sp, 0x44] | var_44h = r2;
0x0000205c ldr.w r2, [pc, 0x43c] |
0x00002060 add r1, pc | r1 += pc;
0x00002062 ldrb.w r0, [sp, 0xbc] | r0 = *(arg_bch);
0x00002066 ldr r2, [r1, r2] | r2 = *((r1 + r2));
0x00002068 ldr r2, [r2] | r2 = *(0x249c);
0x0000206a str r2, [sp, 0x84] | var_84h = r2;
0x0000206c mov.w r2, 0 | r2 = 0;
0x00002070 ldrb.w r2, [sp, 0xb8] | r2 = *(arg_b8h);
0x00002074 str r0, [sp, 0x58] | var_58h = r0;
0x00002076 lsls r2, r2, 1 | r2 <<= 1;
0x00002078 orr.w r2, r2, r0, lsl 2 | r2 |= (r0 << 2);
0x0000207c orr r0, r2, 8 | r0 = r2 | 8;
0x00002080 add.w r2, r5, r5, lsl 2 | r2 = r5 + (r5 << 2);
0x00002084 str r0, [sp, 0x40] | var_40h = r0;
0x00002086 lsls r4, r2, 3 | r4 = r2 << 3;
0x00002088 ldrd r2, r1, [r6, 0x14] | __asm ("ldrd r2, r1, [r6, 0x14]");
0x0000208c ldrb.w r6, [sp, 0xc0] | r6 = *(arg_c0h);
0x00002090 str r4, [sp, 0x54] | var_54h = r4;
0x00002092 subs r1, 1 | r1--;
0x00002094 adds r0, r2, r4 | r0 = r2 + r4;
0x00002096 cmp r1, r5 |
0x00002098 str r6, [sp, 0x50] | var_50h = r6;
0x0000209a it gt |
| if (r1 <= r5) {
0x0000209c addgt r1, r4, 0x28 | r1 = r4 + 0x28;
| }
0x000020a0 ldrsh.w r6, [r0, 0x24] | r6 = *((r0 + 0x24));
0x000020a4 it gt |
| if (r1 <= r5) {
0x000020a6 addgt r2, r2, r1 | r2 += r1;
| }
0x000020a8 ldrsh.w r0, [r0, 0x26] | r0 = *((r0 + 0x26));
0x000020ac ldrsh.w r1, [r2, 0x24] | r1 = *((r2 + 0x24));
0x000020b0 ldrsh.w r2, [r2, 0x26] | r2 = *((r2 + 0x26));
0x000020b4 str r6, [sp, 0x20] | var_20h = r6;
0x000020b6 str r0, [sp, 0x2c] | var_2ch = r0;
0x000020b8 str r2, [sp, 0x30] | var_30h = r2;
0x000020ba ldr r2, [sp, 0xb0] | r2 = *(arg_b0h);
0x000020bc str r1, [sp, 0x28] | var_28h = r1;
0x000020be cmp r2, 0 |
| if (r2 <= 0) {
0x000020c0 ble 0x2170 | goto label_4;
| }
0x000020c2 subs r3, 4 | r3 -= 4;
0x000020c4 mov.w fp, 0 |
0x000020c8 str r3, [sp, 0x24] | var_24h_2 = r3;
0x000020ca ldr r3, [sp, 0x44] | r3 = var_44h;
0x000020cc adds r3, 1 | r3++;
0x000020ce add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x000020d2 lsls r3, r3, 3 | r3 <<= 3;
0x000020d4 str r3, [sp, 0x5c] | var_5ch = r3;
0x000020d6 add r3, sp, 0x7c | r3 += var_7ch;
0x000020d8 str r3, [sp, 0x48] | var_48h = r3;
| do {
0x000020da ldr r2, [sp, 0x24] | r2 = var_24h_2;
0x000020dc ldr.w r3, [sl, 0x18] | r3 = *((sl + 0x18));
0x000020e0 ldr r4, [r2, 4]! | r4 = *((r2 += 4));
0x000020e4 subs r3, 1 | r3--;
0x000020e6 cmp r3, r4 |
0x000020e8 str r2, [sp, 0x24] | var_24h_2 = r2;
0x000020ea it gt |
| if (r3 <= r4) {
0x000020ec addgt r3, r4, 1 | r3 = r4 + 1;
| }
0x000020ee lsl.w r1, r4, 2 | r1 = r4 << 2;
0x000020f2 it gt |
| if (r3 <= r4) {
0x000020f4 addgt r3, r3, r3, lsl 2 | r3 += (r3 << 2);
| }
0x000020f8 ldr.w r2, [sl, 0x14] | r2 = *((sl + 0x14));
0x000020fc add.w r5, r1, r4 | r5 = r1 + r4;
0x00002100 str r1, [sp, 0x34] | var_34h = r1;
0x00002102 it gt |
| if (r3 <= r4) {
0x00002104 lslgt r3, r3, 3 | r3 <<= 3;
| }
0x00002106 lsl.w r5, r5, 3 | r5 <<= 3;
0x0000210a it le |
| if (r3 > r4) {
0x0000210c movle r3, 0 | r3 = 0;
| }
0x0000210e add r3, r2 | r3 += r2;
0x00002110 add r2, r5 | r2 += r5;
0x00002112 ldrsh.w r7, [r3, 0x24] | r7 = *((r3 + 0x24));
0x00002116 ldrsh.w r6, [r2, 0x24] | r6 = *((r2 + 0x24));
0x0000211a ldrsh.w sb, [r3, 0x26] | sb = *((r3 + 0x26));
0x0000211e ldrsh.w r8, [r2, 0x26] | r8 = *((r2 + 0x26));
0x00002122 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00002124 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00002126 cmp r3, r2 |
0x00002128 itt ge |
| if (r3 < r2) {
0x0000212a movge r3, r2 | r3 = r2;
| }
| if (r3 < r2) {
0x0000212c ldrge r2, [sp, 0x20] | r2 = var_20h;
| }
0x0000212e cmp r6, r7 |
| if (r6 >= r7) {
0x00002130 bge 0x218e | goto label_5;
| }
0x00002132 cmp r3, r7 |
0x00002134 ite gt |
| if (r3 <= r7) {
0x00002136 movgt r3, 0 | r3 = 0;
| }
| if (r3 > r7) {
0x00002138 movle r3, 1 | r3 = 1;
| }
0x0000213a cmp r2, r6 |
0x0000213c it lt |
| if (r2 >= r6) {
0x0000213e movlt r3, 0 | r3 = 0;
| }
| if (r3 != 0) {
| label_0:
0x00002140 cbz r3, 0x2166 |
0x00002142 ldrd r3, r2, [sp, 0x2c] | __asm ("ldrd r3, r2, [var_2ch]");
0x00002146 strd sb, r8, [sp, 0x38] | __asm ("strd sb, r8, [var_3ch]");
0x0000214a cmp r3, r2 |
0x0000214c itt ge |
| if (r3 < r2) {
0x0000214e movge r3, r2 | r3 = r2;
| }
| if (r3 < r2) {
0x00002150 ldrge r2, [sp, 0x2c] | r2 = var_2ch;
| }
0x00002152 cmp r8, sb |
| if (r8 >= sb) {
0x00002154 bge 0x219e | goto label_6;
| }
0x00002156 cmp r3, sb |
0x00002158 ite gt |
| if (r3 <= sb) {
0x0000215a movgt r3, 0 | r3 = 0;
| }
| if (r3 > sb) {
0x0000215c movle r3, 1 | r3 = 1;
| }
0x0000215e cmp r2, r8 |
0x00002160 it lt |
| if (r2 >= r8) {
0x00002162 movlt r3, 0 | r3 = 0;
| }
| if (r3 != 0) {
0x00002164 cbnz r3, 0x21b0 | goto label_7;
| }
| }
| label_1:
0x00002166 ldr r3, [sp, 0xb0] | r3 = *(arg_b0h);
0x00002168 add.w fp, fp, 1 |
0x0000216c cmp r3, fp |
0x0000216e bne 0x20da |
| } while (r3 != fp);
| label_4:
0x00002170 ldr r2, [pc, 0x32c] |
0x00002172 ldr r3, [pc, 0x328] | r3 = *(0x249e);
0x00002174 add r2, pc | r2 = 0x4618;
0x00002176 ldr r3, [r2, r3] | r3 = *(0x4618);
0x00002178 ldr r2, [r3] | r2 = *(0x4618);
0x0000217a ldr r3, [sp, 0x84] | r3 = var_84h;
0x0000217c eors r2, r3 | r2 ^= r3;
0x0000217e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00002182 bne.w 0x2494 | goto label_8;
| }
0x00002186 movs r0, 1 | r0 = 1;
0x00002188 add sp, 0x8c |
0x0000218a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x0000218e cmp r3, r6 |
0x00002190 ite gt |
| if (r3 <= r6) {
0x00002192 movgt r3, 0 | r3 = 0;
| }
| if (r3 > r6) {
0x00002194 movle r3, 1 | r3 = 1;
| }
0x00002196 cmp r2, r7 |
0x00002198 it lt |
| if (r2 >= r7) {
0x0000219a movlt r3, 0 | r3 = 0;
| }
0x0000219c b 0x2140 | goto label_0;
| label_6:
0x0000219e cmp r3, r8 |
0x000021a0 ite gt |
| if (r3 <= r8) {
0x000021a2 movgt r3, 0 | r3 = 0;
| }
| if (r3 > r8) {
0x000021a4 movle r3, 1 | r3 = 1;
| }
0x000021a6 cmp r2, sb |
0x000021a8 it lt |
| if (r2 >= sb) {
0x000021aa movlt r3, 0 | r3 = 0;
| }
0x000021ac cmp r3, 0 |
| if (r3 == 0) {
0x000021ae beq 0x2166 | goto label_1;
| }
| label_7:
0x000021b0 ldrd r2, r1, [sp, 0x28] | __asm ("ldrd r2, r1, [var_2ch]");
0x000021b4 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000021b6 ldr r0, [sp, 0x20] | r0 = var_20h;
0x000021b8 strd r7, sb, [sp, 8] | __asm ("strd r7, sb, [var_8h]");
0x000021bc strd r6, r8, [sp] | __asm ("strd r6, r8, [sp]");
0x000021c0 blx 0xcfc | fcn_00000cfc ();
0x000021c4 ldr r1, [sp, 0x40] | r1 = var_40h;
0x000021c6 movs r3, 1 | r3 = 1;
0x000021c8 lsls r3, r0 | r3 <<= r0;
0x000021ca mov r2, r0 | r2 = r0;
0x000021cc tst r3, r1 |
| if ((r3 & r1) == 0) {
0x000021ce beq 0x2166 | goto label_1;
| }
0x000021d0 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000021d2 str r0, [sp, 0x60] | var_60h = r0;
0x000021d4 add r0, sp, 0x74 | r0 += var_74h;
0x000021d6 ldr r1, [sp, 0x48] | r1 = var_48h;
0x000021d8 str r3, [sp, 8] | var_8h = r3;
0x000021da ldr r3, [sp, 0x28] | r3 = var_28h;
0x000021dc strd r7, sb, [sp, 0x14] | __asm ("strd r7, sb, [var_14h]");
0x000021e0 strd r6, r8, [sp, 0xc] | __asm ("strd r6, r8, [var_10h_2]");
0x000021e4 str r3, [sp, 4] | var_4h_2 = r3;
0x000021e6 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000021e8 str r3, [sp] | *(sp) = r3;
0x000021ea ldr r3, [sp, 0x20] | r3 = var_20h;
0x000021ec blx 0xc8c | fcn_00000c8c ();
0x000021f0 ldr r2, [sp, 0x60] | r2 = var_60h;
0x000021f2 cmp r2, 2 |
| if (r2 == 2) {
0x000021f4 beq 0x2288 | goto label_9;
| }
0x000021f6 cmp r2, 3 |
| if (r2 == 3) {
0x000021f8 beq 0x227a | goto label_10;
| }
0x000021fa cmp r2, 1 |
| if (r2 != 1) {
0x000021fc bne 0x2166 | goto label_1;
| }
0x000021fe ldr r3, [sp, 0x50] | r3 = var_50h;
| if (r3 == 0) {
0x00002200 cbz r3, 0x220c | goto label_11;
| }
0x00002202 ldr r3, [sp, 0xb4] | r3 = *(arg_b4h);
0x00002204 cmp r6, r3 |
0x00002206 it ne |
| if (r6 == r3) {
0x00002208 cmpne r7, r3 | __asm ("cmpne r7, r3");
| goto label_12;
| }
| if (r6 == r3) {
| label_12:
0x0000220a beq 0x2166 | goto label_1;
| }
| label_11:
0x0000220c ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0000220e ldr r7, [sp, 0x7c] | r7 = var_7ch;
0x00002210 ldr.w r8, [sp, 0x74] | r8 = var_74h;
0x00002214 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x00002216 blx 0xe50 | fcn_00000e50 ();
0x0000221a movs r2, 0 | r2 = 0;
0x0000221c mov r6, r0 | r6 = r0;
0x0000221e str r2, [r0, 0x18] | *((r0 + 0x18)) = r2;
0x00002220 movs r0, 0 | r0 = 0;
0x00002222 str r0, [r6, 0x14] | *((r6 + 0x14)) = r0;
0x00002224 sxth.w r1, r8 | __asm ("sxth.w r1, r8");
0x00002228 ldr r0, [sp, 0x44] | r0 = var_44h;
0x0000222a sxth r2, r7 | __asm ("sxth r2, r7");
0x0000222c ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0000222e movs r7, 0 | r7 = 0;
0x00002230 bfi r7, r1, 0, 0x10 | value_0 = BIT_MASK (0, 0x10);
| value_1 = r1 & value_0;
| value_0 = ~value_0;
| r7 &= value_0;
| r7 |= value_1;
0x00002234 strh r2, [r6, 0x26] | *((r6 + 0x26)) = r2;
0x00002236 str r0, [r6, 0x20] | *((r6 + 0x20)) = r0;
0x00002238 bfi r7, r2, 0x10, 0x10 | value_2 = BIT_MASK (0x10, 0x10);
| value_3 = r2 & value_2;
| value_2 = ~value_2;
| r7 &= value_2;
| r7 |= value_3;
0x0000223c ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0000223e ldr r0, [sp, 0x54] | r0 = var_54h;
0x00002240 strh r1, [r6, 0x24] | *((r6 + 0x24)) = r1;
0x00002242 add r3, r0 | r3 += r0;
0x00002244 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x00002248 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x0000224a ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x0000224c adds r2, 1 | r2++;
0x0000224e str r1, [r6, 8] | *((r6 + 8)) = r1;
0x00002250 strd r6, r2, [r3, 0xc] | __asm ("strd r6, r2, [r3, 0xc]");
0x00002254 blx 0xe50 | fcn_00000e50 ();
0x00002258 ldr.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x0000225c strd r4, r7, [r0, 0x20] | __asm ("strd r4, r7, [r0, 0x20]");
0x00002260 add r3, r5 | r3 += r5;
0x00002262 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x00002264 ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x00002266 adds r2, 1 | r2++;
0x00002268 str r1, [r0, 8] | *((r0 + 8)) = r1;
0x0000226a strd r0, r2, [r3, 0xc] | __asm ("strd r0, r2, [r3, 0xc]");
0x0000226e movs r3, 1 | r3 = 1;
0x00002270 str r3, [r6, 0x18] | *((r6 + 0x18)) = r3;
0x00002272 str r3, [r0, 0x18] | *((r0 + 0x18)) = r3;
0x00002274 str r0, [r6, 0x14] | *((r6 + 0x14)) = r0;
0x00002276 str r6, [r0, 0x14] | *((r0 + 0x14)) = r6;
0x00002278 b 0x2166 | goto label_1;
| label_10:
0x0000227a cmp r0, 2 |
| if (r0 == 2) {
0x0000227c beq.w 0x2384 | goto label_13;
| }
0x00002280 ldr r3, [sp, 0x58] | r3 = var_58h;
0x00002282 cmp r3, 0 |
| if (r3 == 0) {
0x00002284 beq.w 0x2166 | goto label_1;
| }
| label_9:
0x00002288 ldr r3, [sp, 0x74] | r3 = var_74h;
0x0000228a ldr r2, [sp, 0x20] | r2 = var_20h;
0x0000228c cmp r3, r2 |
| if (r3 != r2) {
0x0000228e bne.w 0x2166 | goto label_1;
| }
0x00002292 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x00002294 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00002296 cmp r3, r2 |
| if (r3 != r2) {
0x00002298 bne.w 0x2166 | goto label_1;
| }
0x0000229c ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0000229e ldrd r5, r1, [r3, 0x14] | __asm ("ldrd r5, r1, [r3, 0x14]");
0x000022a2 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000022a4 adds r0, r3, r1 | r0 = r3 + r1;
0x000022a6 subs r0, 1 | r0--;
0x000022a8 bl 0x5bd4 | fcn_00005bd4 (r0, r1);
0x000022ac ldr r3, [sp, 0x54] | r3 = var_54h;
0x000022ae add.w r1, r1, r1, lsl 2 | r1 += (r1 << 2);
0x000022b2 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000022b4 add.w r1, r5, r1, lsl 3 | r1 = r5 + (r1 << 3);
0x000022b8 adds r3, r5, r3 | r3 = r5 + r3;
0x000022ba ldr.w r5, [sl, 0x18] | r5 = *((sl + 0x18));
0x000022be ldr r2, [r3, 0x18] | r2 = *((r3 + 0x18));
0x000022c0 str r2, [sp, 0x60] | var_60h = r2;
0x000022c2 ldrsh.w r2, [r1, 0x24] | r2 = *((r1 + 0x24));
0x000022c6 ldrsh.w r1, [r1, 0x26] | r1 = *((r1 + 0x26));
0x000022ca str r1, [sp, 0x64] | var_64h = r1;
0x000022cc ldr r1, [sp, 0x20] | r1 = var_20h;
0x000022ce cmp r1, r6 |
0x000022d0 it eq |
| if (r1 == r6) {
0x000022d2 cmpeq r0, r8 | __asm ("cmpeq r0, r8");
| }
0x000022d4 ite eq |
| if (r1 != r6) {
0x000022d6 moveq r1, 1 | r1 = 1;
| }
| if (r1 == r6) {
0x000022d8 movne r1, 0 | r1 = 0;
| }
0x000022da str r1, [sp, 0x68] | var_68h = r1;
| if (r1 == r6) {
0x000022dc beq 0x23ce | goto label_14;
| }
0x000022de ldr r1, [sp, 0x20] | r1 = var_20h;
0x000022e0 cmp r1, r7 |
0x000022e2 it eq |
| if (r1 == r7) {
0x000022e4 cmpeq r0, sb | __asm ("cmpeq r0, sb");
| }
| if (r1 == r7) {
0x000022e6 beq.w 0x2460 | goto label_15;
| }
0x000022ea ldr r1, [sp, 0x60] | r1 = var_60h;
| if (r1 == 0) {
0x000022ec cbnz r1, 0x22fa |
0x000022ee ldr r5, [sp, 0x4c] | r5 = var_4ch;
0x000022f0 movs r0, 2 | r0 = 2;
0x000022f2 ldr r1, [r5, 0x1c] | r1 = *((r5 + 0x1c));
0x000022f4 str r0, [r3, 0x18] | *((r3 + 0x18)) = r0;
0x000022f6 adds r1, 1 | r1++;
0x000022f8 str r1, [r5, 0x1c] | *((r5 + 0x1c)) = r1;
| }
0x000022fa ldr r1, [sp, 0x30] | r1 = var_30h;
0x000022fc ldr r3, [sp, 0x64] | r3 = var_64h;
0x000022fe ldr r0, [sp, 0x20] | r0 = var_20h;
0x00002300 str r1, [sp, 0x14] | var_14h = r1;
0x00002302 ldr r1, [sp, 0x28] | r1 = var_28h;
0x00002304 strd r2, r3, [sp, 8] | __asm ("strd r2, r3, [var_8h]");
0x00002308 mov r3, r8 | r3 = r8;
0x0000230a mov r2, r6 | r2 = r6;
0x0000230c strd r7, sb, [sp] | __asm ("strd r7, sb, [sp]");
0x00002310 str r1, [sp, 0x10] | var_10h_2 = r1;
0x00002312 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00002314 blx 0xd5c | r0 = fcn_00000d5c ();
0x00002318 cmp r0, 0 |
| if (r0 == 0) {
0x0000231a beq.w 0x2166 | goto label_1;
| }
0x0000231e ldr r3, [sp, 0x34] | r3 = var_34h;
0x00002320 mov r5, r4 | r5 = r4;
0x00002322 add r3, r4 | r3 += r4;
0x00002324 lsl.w r8, r3, 3 | r8 = r3 << 3;
| label_2:
0x00002328 ldr r6, [sp, 0x4c] | r6 = var_4ch;
0x0000232a ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x0000232c blx 0xe50 | fcn_00000e50 ();
0x00002330 movs r2, 0 | r2 = 0;
0x00002332 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00002334 strd r2, r2, [r0, 0x14] | __asm ("strd r2, r2, [r0, 0x14]");
0x00002338 mov r4, r0 | r4 = r0;
0x0000233a ldr r2, [sp, 0x44] | r2 = var_44h;
0x0000233c strh r3, [r0, 0x26] | *((r0 + 0x26)) = r3;
0x0000233e ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x00002340 str r2, [r0, 0x20] | *((r0 + 0x20)) = r2;
0x00002342 ldr r2, [sp, 0x54] | r2 = var_54h;
0x00002344 ldr r7, [sp, 0x20] | r7 = var_20h;
0x00002346 add r3, r2 | r3 += r2;
0x00002348 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x0000234a ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x0000234c strh r7, [r0, 0x24] | *((r0 + 0x24)) = r7;
0x0000234e adds r2, 1 | r2++;
0x00002350 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x00002354 str r1, [r4, 8] | *((r4 + 8)) = r1;
0x00002356 strd r4, r2, [r3, 0xc] | __asm ("strd r4, r2, [r3, 0xc]");
0x0000235a blx 0xe50 | fcn_00000e50 ();
0x0000235e ldr.w r2, [sl, 0x14] | r2 = *((sl + 0x14));
0x00002362 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00002364 str r5, [r0, 0x20] | *((r0 + 0x20)) = r5;
0x00002366 add r2, r8 | r2 += r8;
0x00002368 strh r7, [r0, 0x24] | *((r0 + 0x24)) = r7;
0x0000236a ldr r1, [r2, 0x10] | r1 = *((r2 + 0x10));
0x0000236c strh r3, [r0, 0x26] | *((r0 + 0x26)) = r3;
0x0000236e ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x00002370 adds r1, 1 | r1++;
0x00002372 str r3, [r0, 8] | *((r0 + 8)) = r3;
0x00002374 movs r3, 1 | r3 = 1;
0x00002376 strd r0, r1, [r2, 0xc] | __asm ("strd r0, r1, [r2, 0xc]");
0x0000237a str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x0000237c str r3, [r0, 0x18] | *((r0 + 0x18)) = r3;
0x0000237e str r0, [r4, 0x14] | *((r4 + 0x14)) = r0;
0x00002380 str r4, [r0, 0x14] | *((r0 + 0x14)) = r4;
0x00002382 b 0x2166 | goto label_1;
| label_13:
0x00002384 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00002386 ldr r2, [sp, 0x44] | r2 = var_44h;
0x00002388 ldr r0, [sp, 0x5c] | r0 = var_5ch;
0x0000238a ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0000238c subs r3, 1 | r3--;
0x0000238e cmp r2, r3 |
0x00002390 it ge |
| if (r2 < r3) {
0x00002392 movge r0, 0 | r0 = 0;
| }
0x00002394 ldr.w r3, [sl, 0x18] | r3 = *((sl + 0x18));
0x00002398 subs r3, 1 | r3--;
0x0000239a cmp r4, r3 |
0x0000239c ldr r4, [sp, 0x4c] | r4 = var_4ch;
0x0000239e ldr r3, [sp, 0x54] | r3 = var_54h;
0x000023a0 ite lt |
| if (r4 >= r3) {
0x000023a2 addlt r2, r5, 0x28 | r2 = r5 + 0x28;
| }
| if (r4 >= r3) {
0x000023a6 movs r2, 0 | r2 = 0;
| }
0x000023a8 ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x000023aa add r0, r1 | r0 += r1;
0x000023ac add r1, r3 | r1 += r3;
0x000023ae ldr.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x000023b2 add r5, r3 | r5 += r3;
0x000023b4 add r3, r2 | r3 += r2;
0x000023b6 movs r2, 3 | r2 = 3;
0x000023b8 str r2, [r1, 0x18] | *((r1 + 0x18)) = r2;
0x000023ba mov.w r1, 1 | r1 = 1;
0x000023bc lsls r1, r0, 4 | r1 = r0 << 4;
0x000023be str r2, [r0, 0x18] | *((r0 + 0x18)) = r2;
0x000023c0 strb.w r1, [r4, 0x20] | *((r4 + 0x20)) = r1;
0x000023c4 str r2, [r5, 0x18] | *((r5 + 0x18)) = r2;
0x000023c6 str r2, [r3, 0x18] | *((r3 + 0x18)) = r2;
0x000023c8 strb.w r1, [sl, 0x20] | *((sl + 0x20)) = r1;
0x000023cc b 0x2166 | goto label_1;
| label_14:
0x000023ce adds r0, r4, r5 | r0 = r4 + r5;
0x000023d0 mov r1, r5 | r1 = r5;
0x000023d2 subs r0, 1 | r0--;
0x000023d4 str r3, [sp, 0x68] | var_68h = r3;
0x000023d6 str r2, [sp, 0x34] | var_34h = r2;
0x000023d8 mov r5, r4 | r5 = r4;
0x000023da bl 0x5bd4 | fcn_00005bd4 (r0, r1);
0x000023de ldr.w sb, [sl, 0x14] | sb = *((sl + 0x14));
0x000023e2 add.w r1, r1, r1, lsl 2 | r1 += (r1 << 2);
0x000023e6 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000023e8 add.w r1, sb, r1, lsl 3 | r1 = sb + (r1 << 3);
0x000023ec ldrsh.w r3, [r1, 0x26] | r3 = *((r1 + 0x26));
0x000023f0 ldrsh.w r6, [r1, 0x24] | r6 = *((r1 + 0x24));
0x000023f4 str r3, [sp, 0x3c] | var_3ch = r3;
0x000023f6 ldr r3, [sp, 0x68] | r3 = var_68h;
| label_3:
0x000023f8 ldr r1, [sp, 0x60] | r1 = var_60h;
| if (r1 == 0) {
0x000023fa cbnz r1, 0x240a |
0x000023fc ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x000023fe movs r0, 2 | r0 = 2;
0x00002400 ldr r1, [r1, 0x1c] | r1 = *((r1 + 0x1c));
0x00002402 str r0, [r3, 0x18] | *((r3 + 0x18)) = r0;
0x00002404 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00002406 adds r1, 1 | r1++;
0x00002408 str r1, [r3, 0x1c] | *((r3 + 0x1c)) = r1;
| }
0x0000240a add.w r3, r5, r5, lsl 2 | r3 = r5 + (r5 << 2);
0x0000240e lsl.w r8, r3, 3 | r8 = r3 << 3;
0x00002412 add sb, r8 | sb += r8;
0x00002414 ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00002416 adds r0, 0x18 | r0 += 0x18;
| if (r3 == 0) {
0x00002418 cbnz r3, 0x242a |
0x0000241a ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0000241e movs r1, 2 | r1 = 2;
0x00002420 str.w r1, [sb, 0x18] | __asm ("str.w r1, [sb, 0x18]");
0x00002424 adds r3, 1 | r3++;
0x00002426 str.w r3, [sl, 0x1c] | __asm ("str.w r3, [sl, 0x1c]");
| }
0x0000242a ldr r3, [sp, 0x50] | r3 = var_50h;
0x0000242c cmp r4, r5 |
0x0000242e it ne |
| if (r4 == r5) {
0x00002430 orrne r3, r3, 1 | r3 |= 1;
| }
0x00002434 cmp r3, 0 |
| if (r3 != 0) {
0x00002436 bne.w 0x2166 | goto label_1;
| }
0x0000243a ldr r3, [sp, 0x38] | r3 = var_38h;
0x0000243c ldr r1, [sp, 0x30] | r1 = var_30h;
0x0000243e ldr r0, [sp, 0x20] | r0 = var_20h;
0x00002440 strd r7, r3, [sp, 0x10] | __asm ("strd r7, r3, [var_14h]");
0x00002444 str r1, [sp, 4] | var_4h_2 = r1;
0x00002446 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00002448 ldr r1, [sp, 0x28] | r1 = var_28h;
0x0000244a strd r6, r3, [sp, 8] | __asm ("strd r6, r3, [var_8h]");
0x0000244e str r1, [sp] | *(sp) = r1;
0x00002450 ldr r3, [sp, 0x64] | r3 = var_64h;
0x00002452 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00002454 blx 0xd44 | r0 = fcn_00000d44 ();
0x00002458 cmp r0, 0 |
| if (r0 != 0) {
0x0000245a bne.w 0x2328 | goto label_2;
| }
0x0000245e b 0x2166 | goto label_1;
| label_15:
0x00002460 ldr.w sb, [sl, 0x14] | sb = *((sl + 0x14));
0x00002464 mov r1, r5 | r1 = r5;
0x00002466 adds r0, r4, 2 | r0 = r4 + 2;
0x00002468 str r3, [sp, 0x6c] | var_6ch = r3;
0x0000246a str r2, [sp, 0x34] | var_34h = r2;
0x0000246c subs r5, 1 | r5--;
0x0000246e bl 0x5bd4 | fcn_00005bd4 (r0, r1);
0x00002472 add.w r1, r1, r1, lsl 2 | r1 += (r1 << 2);
0x00002476 cmp r4, r5 |
0x00002478 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0000247a it lt |
| if (r4 >= r5) {
0x0000247c addlt r5, r4, 1 | r5 = r4 + 1;
| }
0x0000247e add.w r1, sb, r1, lsl 3 | r1 = sb + (r1 << 3);
0x00002482 ldrsh.w r3, [r1, 0x26] | r3 = *((r1 + 0x26));
0x00002486 ldrsh.w r7, [r1, 0x24] | r7 = *((r1 + 0x24));
0x0000248a str r3, [sp, 0x38] | var_38h = r3;
0x0000248c ldr r3, [sp, 0x6c] | r3 = var_6ch;
| if (r4 < r5) {
0x0000248e blt 0x23f8 | goto label_3;
| }
0x00002490 ldr r5, [sp, 0x68] | r5 = var_68h;
0x00002492 b 0x23f8 | goto label_3;
| label_8:
0x00002494 blx 0xd08 | fcn_00000d08 ();
0x00002498 ldr r6, [pc, 0x380] | r6 = *(0x281c);
0x0000249a movs r1, r0 | r1 = r0;
0x0000249c lsls r4, r5, 2 | r4 = r5 << 2;
0x0000249e movs r0, r0 |
0x000024a0 ldr r5, [pc, 0x330] | r5 = *(0x27d4);
0x000024a2 movs r1, r0 | r1 = r0;
| }
[*] Function popen used 1 times libgeometry.so