[*] Binary protection state of e4crypt
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH No Symbols
[*] Function printf tear down of e4crypt
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/e4crypt @ 0x11d0 */
| #include <stdint.h>
|
; (fcn) fcn.000011d0 () | void fcn_000011d0 (int16_t arg_0h) {
| int16_t var_1h;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_bh;
| int16_t var_13h;
| int16_t var_14h;
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_3;
| int16_t var_ch;
| int16_t var_18h;
| int16_t var_1ch;
| int32_t var_4h_4;
| int32_t var_4h_5;
0x000011d0 ldrsbgt pc, [r4], -0x8f | __asm ("ldrsbgt pc, [r4], -0x8f");
0x000011d4 push {r0, r1, r2, r3} |
0x000011d6 movw r0, 0x137 | r0 = 0x137;
0x000011da push {r4, lr} |
0x000011dc sub sp, 0x10 |
0x000011de add r3, sp, 0x18 | r3 += var_18h;
0x000011e0 add ip, pc |
0x000011e2 ldr r4, [pc, 0x48] |
0x000011e4 ldr r1, [r3], 4 | r1 = *(r3);
| r3 += 4;
0x000011e8 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000011ea ldr.w r4, [ip, r4] | r4 = *((ip + r4));
0x000011ee ldr r4, [r4] | r4 = *(0x122e);
0x000011f0 str r4, [sp, 0xc] | var_ch = r4;
0x000011f2 mov.w r4, 0 | r4 = 0;
0x000011f6 ldr r4, [r3, 0xc] | r4 = *((r3 + 0xc));
0x000011f8 strd r4, r3, [sp, 4] | __asm ("strd r4, r3, [var_4h]");
0x000011fc ldrd r3, r4, [r3, 4] | __asm ("ldrd r3, r4, [var_4h_4]");
0x00001200 str r4, [sp] | *(sp) = r4;
0x00001202 blx 0xe28 | fcn_00000e28 ();
0x00001206 ldr r2, [pc, 0x28] |
0x00001208 ldr r3, [pc, 0x20] | r3 = *(0x122c);
0x0000120a add r2, pc | r2 = 0x2440;
0x0000120c ldr r3, [r2, r3] | r3 = *(0x2440);
0x0000120e ldr r2, [r3] | r2 = *(0x2440);
0x00001210 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00001212 eors r2, r3 | r2 ^= r3;
0x00001214 mov.w r3, 0 | r3 = 0;
0x00001216 lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 == r0) {
0x00001218 bne 0x1224 |
0x0000121a add sp, 0x10 |
0x0000121c pop.w {r4, lr} |
0x00001220 add sp, 0x10 |
0x00001222 bx lr | return;
| }
0x00001224 blx 0xd80 | fcn_00000d80 ();
0x00001228 cmp r5, 0x20 |
0x0000122a movs r0, r0 |
0x0000122c lsls r0, r4, 3 | r0 = r4 << 3;
0x0000122e movs r0, r0 |
0x00001230 cmp r4, 0xf6 |
0x00001232 movs r0, r0 |
0x00001234 push {r3, r4, r5, lr} |
0x00001236 cmp r0, 1 |
0x00001238 ldr r3, [pc, 0x6c] |
0x0000123a add r3, pc | r3 = 0x24e6;
| if (r0 > 1) {
0x0000123c ble 0x1260 |
0x0000123e ldr r0, [pc, 0x6c] | r0 = *(0x12ae);
0x00001240 mov r4, r2 | r4 = r2;
0x00001242 movs r1, 1 | r1 = 1;
0x00001244 movs r2, 0x12 | r2 = 0x12;
0x00001246 ldr r5, [r3, r0] | r5 = *((r3 + r0));
0x00001248 ldr r0, [pc, 0x64] |
0x0000124a ldr r3, [r5] | r3 = *(r5);
0x0000124c add r0, pc | r0 = 0x2500;
0x0000124e blx 0xd5c | fcn_00000d5c ();
0x00001252 ldr r1, [r5] | r1 = *(r5);
0x00001254 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00001256 blx 0xe7c | fcn_00000e7c ();
0x0000125a movs r0, 1 | r0 = 1;
0x0000125c blx 0xe58 | fcn_00000e58 ();
| }
0x00001260 movs r1, 0 | r1 = 0;
0x00001262 movs r0, 1 | r0 = 1;
0x00001264 bl 0x11d0 | r0 = fcn_000011d0 (r0);
0x00001268 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 >= r0) {
0x0000126a blt 0x1298 |
0x0000126c movs r1, 0 | r1 = 0;
0x0000126e movs r0, 0x12 | r0 = 0x12;
0x00001270 bl 0x11d0 | r0 = fcn_000011d0 (r0);
0x00001274 cmp r0, 0 |
| if (r0 >= 0) {
0x00001276 blt 0x128a |
0x00001278 ldr r1, [pc, 0x38] |
0x0000127a mov r2, r4 | r2 = r4;
0x0000127c movs r0, 1 | r0 = 1;
0x0000127e add r1, pc | r1 = 0x2536;
0x00001280 blx 0xc8c | printf_chk ()
0x00001284 movs r0, 0 | r0 = 0;
0x00001286 blx 0xe58 | fcn_00000e58 ();
| }
0x0000128a ldr r0, [pc, 0x2c] |
0x0000128c add r0, pc | r0 = 0x254a;
0x0000128e blx 0xccc | fcn_00000ccc ();
0x00001292 movs r0, 1 | r0 = 1;
0x00001294 blx 0xe58 | fcn_00000e58 ();
| }
0x00001298 ldr r0, [pc, 0x20] |
0x0000129a add r0, pc | r0 = 0x255a;
0x0000129c blx 0xccc | fcn_00000ccc ();
0x000012a0 movs r0, 1 | r0 = 1;
0x000012a2 blx 0xe58 | fcn_00000e58 ();
0x000012a6 nop |
0x000012a8 cmp r4, 0xc6 |
0x000012aa movs r0, r0 |
0x000012ac lsls r4, r5, 3 | r4 = r5 << 3;
0x000012ae movs r0, r0 |
0x000012b0 asrs r0, r7, 1 | r0 = r7 >> 1;
0x000012b2 movs r0, r0 |
0x000012b4 asrs r2, r2, 2 | r2 >>= 2;
0x000012b6 movs r0, r0 |
0x000012b8 asrs r0, r5, 1 | r0 = r5 >> 1;
0x000012ba movs r0, r0 |
0x000012bc asrs r6, r7, 0x20 | r6 = r7 >> 0x20;
0x000012be movs r0, r0 |
0x000012c0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000012c4 mov r8, r0 | r8 = r0;
0x000012c6 ldr r0, [pc, 0x100] |
0x000012c8 cmp.w r8, 1 |
0x000012cc sub sp, 0x1c |
0x000012ce ldr r3, [pc, 0xfc] | r3 = *(0x13ce);
0x000012d0 add r0, pc | r0 = 0x269e;
0x000012d2 ldr.w sl, [pc, 0xfc] |
0x000012d6 ldr r3, [r0, r3] |
0x000012d8 add sl, pc | sl = 0x26ae;
0x000012da ldr r3, [r3] | r3 = *(0x269e);
0x000012dc str r3, [sp, 0x14] | var_14h = r3;
0x000012de mov.w r3, 0 | r3 = 0;
| if (r8 <= 1) {
0x000012e2 ble 0x1394 | goto label_1;
| }
0x000012e4 ldr r3, [pc, 0xec] |
0x000012e6 movw sb, 0x6615 |
0x000012ea ldr r6, [pc, 0xec] |
0x000012ec adds r4, r1, 4 | r4 = r1 + 4;
0x000012ee movs r7, 1 | r7 = 1;
0x000012f0 movt sb, 0x400c | sb = 0x400c6615;
0x000012f4 add r3, pc | r3 = 0x26cc;
0x000012f6 add r6, pc | r6 = 0x26d4;
0x000012f8 str r3, [sp, 4] | var_4h_2 = r3;
0x000012fa b 0x131e |
| while (fp != 0) {
0x000012fc blx 0xe64 | r0 = fcn_00000e64 ();
0x00001300 ldr r0, [r0] | r0 = *(r0);
0x00001302 adds r7, 1 | r7++;
0x00001304 ldr r5, [r4, -0x4] | r5 = *((r4 - 0x4));
0x00001308 blx 0xc44 | strerror (r0);
0x0000130c ldr r1, [pc, 0xcc] |
0x0000130e mov r3, r0 | r3 = r0;
0x00001310 mov r2, r5 | r2 = r5;
0x00001312 movs r0, 1 | r0 = 1;
0x00001314 add r1, pc | r1 = 0x26f4;
0x00001316 blx 0xc8c | printf_chk ()
0x0000131a cmp r8, r7 |
| if (r8 == r7) {
0x0000131c beq 0x1380 | goto label_2;
| }
| label_0:
0x0000131e ldr r0, [r4] | r0 = *(r4);
0x00001320 movs r1, 0 | r1 = 0;
0x00001322 blx 0xc38 | r0 = open (r0, r1, r2);
0x00001326 adds r3, r0, 1 | r3 = r0 + 1;
0x00001328 mov fp, r4 |
0x0000132a mov r5, r0 | r5 = r0;
0x0000132c add.w r4, r4, 4 | r4 += 4;
| if (r3 == r0) {
0x00001330 beq 0x1386 | goto label_3;
| }
0x00001332 add r2, sp, 8 | r2 += var_8h;
0x00001334 mov r1, sb | r1 = sb;
0x00001336 blx 0xcfc | r0 = fcn_00000cfc ();
0x0000133a mov fp, r0 |
0x0000133c mov r0, r5 | r0 = r5;
0x0000133e blx 0xd50 | fcn_00000d50 ();
0x00001342 cmp.w fp, 0 |
0x00001346 bne 0x12fc |
| }
0x00001348 add.w fp, sp, 0xb |
0x0000134c add.w r5, sp, 0x13 | r5 += var_13h;
0x00001350 ldr r2, [r4, -0x4] | r2 = *((r4 - 0x4));
0x00001354 movs r0, 1 | r0 = 1;
0x00001356 ldr r1, [sp, 4] | r1 = var_4h_2;
0x00001358 blx 0xc8c | printf_chk ()
| do {
0x0000135c ldrb r2, [fp, 1]! | r2 = var_1h;
0x00001360 mov r1, r6 | r1 = r6;
0x00001362 movs r0, 1 | r0 = 1;
0x00001364 blx 0xc8c | printf_chk ()
0x00001368 cmp r5, fp |
0x0000136a bne 0x135c |
| } while (r5 != fp);
0x0000136c ldr r3, [pc, 0x70] | r3 = *(0x13e0);
0x0000136e movs r0, 0xa | r0 = 0xa;
0x00001370 adds r7, 1 | r7++;
0x00001372 ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x00001376 ldr r1, [r3] | r1 = *(0x13e0);
0x00001378 blx 0xdb0 | fcn_00000db0 ();
0x0000137c cmp r8, r7 |
| if (r8 != r7) {
0x0000137e bne 0x131e | goto label_0;
| }
| label_2:
0x00001380 movs r0, 0 | r0 = 0;
0x00001382 blx 0xe58 | fcn_00000e58 ();
| label_3:
0x00001386 ldr.w r0, [fp] | r0 = *(fp);
0x0000138a blx 0xccc | fcn_00000ccc ();
0x0000138e movs r0, 1 | r0 = 1;
0x00001390 blx 0xe58 | fcn_00000e58 ();
| label_1:
0x00001394 ldr r3, [pc, 0x4c] | r3 = *(0x13e4);
0x00001396 mov r4, r2 | r4 = r2;
0x00001398 ldr r0, [pc, 0x4c] |
0x0000139a movs r2, 0x1f | r2 = 0x1f;
0x0000139c movs r1, 1 | r1 = 1;
0x0000139e ldr.w r5, [sl, r3] | r5 = *((sl + r3));
0x000013a2 add r0, pc | r0 = 0x278e;
0x000013a4 ldr r3, [r5] | r3 = *(r5);
0x000013a6 blx 0xd5c | fcn_00000d5c ();
0x000013aa ldr r0, [pc, 0x40] |
0x000013ac movs r2, 9 | r2 = 9;
0x000013ae ldr r3, [r5] | r3 = *(r5);
0x000013b0 movs r1, 1 | r1 = 1;
0x000013b2 add r0, pc | r0 = 0x27a4;
0x000013b4 blx 0xd5c | fcn_00000d5c ();
0x000013b8 ldr r1, [r5] | r1 = *(r5);
0x000013ba ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000013bc blx 0xe7c | fcn_00000e7c ();
0x000013c0 movs r0, 1 | r0 = 1;
0x000013c2 blx 0xe58 | fcn_00000e58 ();
0x000013c6 nop |
0x000013c8 cmp r4, 0x30 |
0x000013ca movs r0, r0 |
0x000013cc lsls r0, r4, 3 | r0 = r4 << 3;
0x000013ce movs r0, r0 |
0x000013d0 cmp r4, 0x28 |
0x000013d2 movs r0, r0 |
0x000013d4 asrs r4, r4, 2 | r4 >>= 2;
0x000013d6 movs r0, r0 |
0x000013d8 asrs r2, r5, 2 | r2 = r5 >> 2;
0x000013da movs r0, r0 |
0x000013dc asrs r0, r4, 1 | r0 = r4 >> 1;
0x000013de movs r0, r0 |
0x000013e0 lsls r0, r5, 3 | r0 = r5 << 3;
0x000013e2 movs r0, r0 |
0x000013e4 lsls r4, r5, 3 | r4 = r5 << 3;
0x000013e6 movs r0, r0 |
0x000013e8 lsrs r6, r4, 0x1e | r6 = r4 >> 0x1e;
0x000013ea movs r0, r0 |
0x000013ec lsrs r6, r6, 0x1e | r6 >>= 0x1e;
0x000013ee movs r0, r0 |
0x000013f0 push {r3, r4, r5, r6, r7, lr} |
0x000013f2 cmp r0, 1 |
0x000013f4 ldr r6, [pc, 0xa0] |
0x000013f6 add r6, pc | r6 = 0x2892;
| if (r0 <= 1) {
0x000013f8 ble 0x1428 | goto label_4;
| }
0x000013fa ldr r4, [pc, 0xa0] |
0x000013fc ldr r0, [pc, 0xa0] |
0x000013fe ldr r7, [r1, 4] | r7 = *((r1 + 4));
0x00001400 add r4, pc | r4 = 0x28a2;
0x00001402 add r0, pc | r0 = 0x28a6;
| do {
0x00001404 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00001406 lsls r2, r3, 0x1f | r2 = r3 << 0x1f;
| if (r2 >= r3) {
0x00001408 bmi 0x1414 |
0x0000140a mov r1, r7 | r1 = r7;
0x0000140c blx 0xe4c | r0 = fcn_00000e4c ();
0x00001410 mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x00001412 cbz r0, 0x146e | goto label_5;
| }
| }
0x00001414 ldr r0, [r4, 0x14]! | r0 = *((r4 += 0x14));
0x00001418 cmp r0, 0 |
0x0000141a bne 0x1404 |
| } while (r0 != 0);
0x0000141c ldr r1, [pc, 0x84] |
0x0000141e mov r2, r7 | r2 = r7;
0x00001420 movs r0, 1 | r0 = 1;
0x00001422 add r1, pc | r1 = 0x28ca;
0x00001424 blx 0xc8c | printf_chk ()
| label_4:
0x00001428 ldr r3, [pc, 0x7c] |
0x0000142a movs r2, 0x14 | r2 = 0x14;
0x0000142c ldr r0, [pc, 0x7c] |
0x0000142e movs r1, 1 | r1 = 1;
0x00001430 ldr r4, [pc, 0x7c] |
0x00001432 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00001434 ldr r5, [pc, 0x7c] |
0x00001436 add r0, pc | r0 = 0x28e6;
0x00001438 ldr r7, [pc, 0x7c] |
0x0000143a add r4, pc | r4 = 0x28ee;
0x0000143c ldr r3, [r3] | r3 = *(0x14a8);
0x0000143e add r5, pc | r5 = 0x28f6;
0x00001440 add r7, pc | r7 = 0x28fc;
0x00001442 blx 0xd5c | fcn_00000d5c ();
| do {
0x00001446 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00001448 lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 >= r3) {
0x0000144a bmi 0x1458 |
0x0000144c ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0000144e mov r2, r5 | r2 = r5;
0x00001450 mov r1, r7 | r1 = r7;
0x00001452 movs r0, 1 | r0 = 1;
0x00001454 blx 0xc8c | printf_chk ()
| }
0x00001458 ldr r5, [r4, 0x14]! | r5 = *((r4 += 0x14));
0x0000145c cmp r5, 0 |
0x0000145e bne 0x1446 |
| } while (r5 != 0);
0x00001460 ldr r0, [pc, 0x58] |
0x00001462 add r0, pc | r0 = 0x2922;
0x00001464 blx 0xdc8 | fcn_00000dc8 ();
0x00001468 mov r0, r5 | r0 = r5;
0x0000146a blx 0xe58 | fcn_00000e58 ();
| label_5:
0x0000146e ldr r3, [pc, 0x38] | r3 = *(0x14aa);
0x00001470 movs r0, 0xa | r0 = 0xa;
0x00001472 ldr r6, [r6, r3] | r6 = *((r6 + r3));
0x00001474 ldr r1, [r6] | r1 = *(r6);
0x00001476 blx 0xde0 | fcn_00000de0 ();
0x0000147a ldr r0, [pc, 0x44] |
0x0000147c movs r2, 9 | r2 = 9;
0x0000147e ldr r3, [r6] | r3 = *(r6);
0x00001480 movs r1, 1 | r1 = 1;
0x00001482 add r0, pc | r0 = 0x2948;
0x00001484 blx 0xd5c | fcn_00000d5c ();
0x00001488 ldr r1, [r6] | r1 = *(r6);
0x0000148a ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0000148c blx 0xe7c | fcn_00000e7c ();
0x00001490 mov r0, r5 | r0 = r5;
0x00001492 blx 0xe58 | fcn_00000e58 ();
0x00001496 nop |
0x00001498 cmp r3, 0xa |
0x0000149a movs r0, r0 |
0x0000149c cmp r1, 0x70 |
0x0000149e movs r0, r0 |
0x000014a0 lsrs r6, r4, 0x1e | r6 = r4 >> 0x1e;
0x000014a2 movs r0, r0 |
0x000014a4 lsrs r6, r1, 0x1e | r6 = r1 >> 0x1e;
0x000014a6 movs r0, r0 |
0x000014a8 lsls r0, r5, 3 | r0 = r5 << 3;
0x000014aa movs r0, r0 |
0x000014ac lsrs r2, r2, 0x1e | r2 >>= 0x1e;
0x000014ae movs r0, r0 |
0x000014b0 cmp r1, 0x36 |
0x000014b2 movs r0, r0 |
0x000014b4 lsrs r2, r5, 0x1d | r2 = r5 >> 0x1d;
0x000014b6 movs r0, r0 |
0x000014b8 lsrs r0, r4, 0x1e | r0 = r4 >> 0x1e;
0x000014ba movs r0, r0 |
0x000014bc lsrs r2, r1, 0x1e | r2 = r1 >> 0x1e;
0x000014be movs r0, r0 |
0x000014c0 lsrs r6, r4, 0x1b | r6 = r4 >> 0x1b;
0x000014c2 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/e4crypt @ 0x14c4 */
| #include <stdint.h>
|
; (fcn) fcn.000014c4 () | void fcn_000014c4 (int16_t arg1, int16_t arg2) {
| int16_t var_4h;
| char * dest;
| int16_t var_154h;
| r0 = arg1;
| r1 = arg2;
0x000014c4 blmi 0xfe553f1c | __asm ("blmi aav.0x00002a32");
0x000014c8 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000014cc lsls r5, r1, 0x1e | r5 = r1 << 0x1e;
0x000014ce add r2, pc | r2 += pc;
0x000014d0 ldr r6, [pc, 0x24c] |
0x000014d2 sub sp, 0x158 |
0x000014d4 mov r4, r1 | r4 = r1;
0x000014d6 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000014d8 mov r8, r0 | r8 = r0;
0x000014da add r6, pc | r6 = 0x2bfe;
0x000014dc ldr r3, [r3] | r3 = *(r3);
0x000014de str r3, [sp, 0x154] | var_154h = r3;
0x000014e0 mov.w r3, 0 | r3 = 0;
| if (r5 < r1) {
0x000014e4 bmi 0x1596 | goto label_7;
| }
0x000014e6 ldrb r3, [r0] | r3 = *(r0);
0x000014e8 cmp r3, 0x73 |
| if (r3 != 0x73) {
0x000014ea bne 0x157c | goto label_8;
| }
0x000014ec ldrb r2, [r0, 1] | r2 = *((r0 + 1));
0x000014ee cmp r2, 0x3a |
| if (r2 != 0x3a) {
0x000014f0 bne 0x157c | goto label_8;
| }
0x000014f2 adds r4, r0, 2 | r4 = r0 + 2;
0x000014f4 mov r0, r4 | r0 = r4;
0x000014f6 blx 0xd08 | r0 = fcn_00000d08 ();
0x000014fa cmp r0, 0xff |
0x000014fc mov sb, r0 | sb = r0;
| if (r0 > 0xff) {
0x000014fe bhi.w 0x1628 | goto label_5;
| }
0x00001502 mov.w r2, 0x100 | r2 = 0x100;
0x00001506 mov r1, r4 | r1 = r4;
0x00001508 add r0, sp, 0x54 | r0 += dest;
0x0000150a blx 0xc74 | strncpy (r0, r1, r2);
| label_1:
0x0000150e mov r0, sb | r0 = sb;
0x00001510 blx 0xd68 | r0 = fcn_00000d68 ();
0x00001514 mov r8, r0 | r8 = r0;
0x00001516 cmp r0, 0 |
| if (r0 == 0) {
0x00001518 beq.w 0x170e | goto label_9;
| }
0x0000151c mov r2, sb | r2 = sb;
0x0000151e add r1, sp, 0x54 | r1 += dest;
0x00001520 blx 0xd38 | fcn_00000d38 ();
0x00001524 ldr r3, [pc, 0x1fc] |
0x00001526 add r3, pc | r3 = 0x2c4e;
0x00001528 ldrd sl, r7, [r3, 4] | __asm ("ldrd sl, r7, [r3, 4]");
| if (r7 == 0) {
0x0000152c cbz r7, 0x1558 | goto label_10;
| }
0x0000152e mov r4, sl | r4 = sl;
0x00001530 movs r5, 0 | r5 = 0;
0x00001532 b 0x153c |
| while (r3 != sb) {
0x00001534 adds r5, 1 | r5++;
0x00001536 adds r4, 0x64 | r4 += 0x64;
0x00001538 cmp r7, r5 |
| if (r7 == r5) {
0x0000153a beq 0x1558 | goto label_10;
| }
| label_0:
0x0000153c ldr r3, [r4, 0x60] | r3 = *((r4 + 0x60));
0x0000153e cmp r3, sb |
0x00001540 bne 0x1534 |
| }
0x00001542 ldr r0, [r4] | r0 = *(r4);
0x00001544 mov r2, sb | r2 = sb;
0x00001546 mov r1, r8 | r1 = r8;
0x00001548 blx 0xc5c | r0 = memcmp (r0, r1, r2);
0x0000154c cmp r0, 0 |
| if (r0 == 0) {
0x0000154e beq 0x15fe | goto label_11;
| }
0x00001550 adds r5, 1 | r5++;
0x00001552 adds r4, 0x64 | r4 += 0x64;
0x00001554 cmp r7, r5 |
| if (r7 != r5) {
0x00001556 bne 0x153c | goto label_0;
| }
| label_10:
0x00001558 ldr r4, [pc, 0x1cc] |
0x0000155a add r4, pc | r4 = 0x2c86;
0x0000155c ldr r3, [r4, 0xc] | r3 = *(0x2c92);
0x0000155e cmp r7, r3 |
| if (r7 >= r3) {
0x00001560 bhs 0x1640 | goto label_12;
| }
| label_2:
0x00001562 movs r3, 0x64 | r3 = 0x64;
0x00001564 ldr r2, [pc, 0x1c4] |
0x00001566 mul r3, r7, r3 | r3 = r7 * r3;
0x0000156a adds r7, 1 | r7++;
0x0000156c add r2, pc | r2 = 0x2c9c;
0x0000156e str.w r8, [sl, r3] | __asm ("str.w r8, [sl, r3]");
0x00001572 add sl, r3 | sl += r3;
0x00001574 str.w sb, [sl, 0x60] | __asm ("str.w sb, [sl, 0x60]");
0x00001578 str r7, [r2, 8] | *((r2 + 8)) = r7;
0x0000157a b 0x15fe | goto label_11;
| label_8:
0x0000157c ldrb.w r2, [r8] | r2 = *(r8);
0x00001580 cmp r2, 0x2f |
| if (r2 != 0x2f) {
0x00001582 beq 0x1596 |
0x00001584 cmp r2, 0x66 |
| if (r2 != 0x66) {
0x00001586 bne 0x1618 | goto label_13;
| }
0x00001588 ldrb.w r2, [r8, 1] | r2 = *((r8 + 1));
0x0000158c cmp r2, 0x3a |
0x0000158e it eq |
| if (r2 != 0x3a) {
0x00001590 addeq r8, r8, 2 | r8 += 2;
| }
| if (r2 != 0x3a) {
0x00001594 bne 0x1618 | goto label_13;
| }
| }
| label_7:
0x00001596 mov.w r1, 0x4000 | r1 = 0x4000;
0x0000159a mov r0, r8 | r0 = r8;
0x0000159c blx 0xc38 | r0 = open (r0, r1, r2);
0x000015a0 mov r5, r0 | r5 = r0;
0x000015a2 adds r0, r5, 1 | r0 = r5 + 1;
| if (r0 != r5) {
0x000015a4 bne 0x15ca | goto label_14;
| }
0x000015a6 blx 0xe64 | r0 = fcn_00000e64 ();
0x000015aa ldr r3, [r0] | r3 = *(r0);
0x000015ac cmp r3, 0x14 |
0x000015ae beq 0x15bc |
| while (r1 == r0) {
0x000015b0 mov r0, r8 | r0 = r8;
0x000015b2 blx 0xccc | fcn_00000ccc ();
0x000015b6 movs r0, 1 | r0 = 1;
0x000015b8 blx 0xe58 | fcn_00000e58 ();
0x000015bc movs r1, 0 | r1 = 0;
0x000015be mov r0, r8 | r0 = r8;
0x000015c0 blx 0xc38 | r0 = open (r0, r1, r2);
0x000015c4 adds r1, r0, 1 | r1 = r0 + 1;
0x000015c6 mov r5, r0 | r5 = r0;
0x000015c8 beq 0x15b0 |
| }
| label_14:
0x000015ca add.w sb, sp, 0x54 | sb += dest;
0x000015ce movw r1, 0x6614 |
0x000015d2 movt r1, 0x4010 | r1 = 0x40106614;
0x000015d6 mov r2, sb | r2 = sb;
0x000015d8 mov r0, r5 | r0 = r5;
0x000015da blx 0xcfc | r0 = fcn_00000cfc ();
0x000015de mov r7, r0 | r7 = r0;
0x000015e0 mov r0, r5 | r0 = r5;
0x000015e2 blx 0xd50 | fcn_00000d50 ();
0x000015e6 cmp r7, 0 |
| if (r7 < 0) {
0x000015e8 blt 0x15fa | goto label_15;
| }
0x000015ea ldr r3, [pc, 0x144] |
0x000015ec add r3, pc |
0x000015ee ldr r3, [r3] | r3 = *(0x2d22);
0x000015f0 lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 < r3) {
0x000015f2 bmi 0x165c | goto label_16;
| }
| do {
| label_3:
0x000015f4 mov.w sb, 0x10 | sb = 0x10;
0x000015f8 b 0x150e | goto label_1;
| label_15:
0x000015fa lsls r2, r4, 0x1f | r2 = r4 << 0x1f;
| if (r2 >= r4) {
0x000015fc bpl 0x16fc | goto label_17;
| }
| label_11:
0x000015fe ldr r2, [pc, 0x134] |
0x00001600 ldr r3, [pc, 0x118] | r3 = *(0x171c);
0x00001602 add r2, pc | r2 = 0x2d3c;
0x00001604 ldr r3, [r2, r3] | r3 = *(0x2d3c);
0x00001606 ldr r2, [r3] | r2 = *(0x2d3c);
0x00001608 ldr r3, [sp, 0x154] | r3 = var_154h;
0x0000160a eors r2, r3 | r2 ^= r3;
0x0000160c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00001610 bne 0x170a | goto label_18;
| }
0x00001612 add sp, 0x158 |
0x00001614 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
0x00001616 strh r0, [r6, 0x3e] | *((r6 + 0x3e)) = r0;
| label_13:
0x00001618 cmp r3, 0x30 |
| if (r3 == 0x30) {
0x0000161a beq 0x1676 | goto label_19;
| }
| label_4:
0x0000161c add r1, sp, 0x54 | r1 += dest;
0x0000161e mov r0, r8 | r0 = r8;
0x00001620 blx 0xca4 | r0 = uuid_parse ();
0x00001624 cmp r0, 0 |
0x00001626 beq 0x15f4 |
| } while (r0 == 0);
| label_5:
0x00001628 ldr r0, [pc, 0x10c] |
0x0000162a mov r3, r8 | r3 = r8;
0x0000162c ldr r2, [pc, 0x10c] |
0x0000162e movs r1, 1 | r1 = 1;
0x00001630 ldr r0, [r6, r0] | r0 = *((r6 + r0));
0x00001632 add r2, pc | r2 = 0x2d72;
0x00001634 ldr r0, [r0] | r0 = *(0x1738);
0x00001636 blx 0xd98 | fcn_00000d98 ();
0x0000163a movs r0, 1 | r0 = 1;
0x0000163c blx 0xe58 | fcn_00000e58 ();
| label_12:
0x00001640 adds r7, 0xa | r7 += 0xa;
0x00001642 movs r1, 0x64 | r1 = 0x64;
0x00001644 mov r0, sl | r0 = sl;
0x00001646 mul r1, r7, r1 | r1 = r7 * r1;
0x0000164a str r7, [r4, 0xc] | *((r4 + 0xc)) = r7;
0x0000164c blx 0xe04 | r0 = fcn_00000e04 ();
0x00001650 mov sl, r0 | sl = r0;
0x00001652 str r0, [r4, 4] | *((r4 + 4)) = r0;
0x00001654 cmp r0, 0 |
| if (r0 == 0) {
0x00001656 beq 0x16e4 | goto label_20;
| }
0x00001658 ldr r7, [r4, 8] | r7 = *((r4 + 8));
0x0000165a b 0x1562 | goto label_2;
| label_16:
0x0000165c add r4, sp, 4 | r4 += var_4h;
0x0000165e mov r0, sb | r0 = sb;
0x00001660 mov r1, r4 | r1 = r4;
0x00001662 blx 0xdf8 | fcn_00000df8 ();
0x00001666 ldr r1, [pc, 0xd8] |
0x00001668 mov r3, r4 | r3 = r4;
0x0000166a mov r2, r8 | r2 = r8;
0x0000166c movs r0, 1 | r0 = 1;
0x0000166e add r1, pc | r1 = 0x2db4;
0x00001670 blx 0xc8c | printf_chk ()
0x00001674 b 0x15f4 | goto label_3;
| label_19:
0x00001676 ldrb.w r7, [r8, 1] | r7 = *((r8 + 1));
0x0000167a subs r7, 0x78 | r7 -= 0x78;
| if (r7 != 0x78) {
0x0000167c bne 0x161c | goto label_4;
| }
0x0000167e add.w r4, r8, 2 | r4 = r8 + 2;
0x00001682 mov r0, r4 | r0 = r4;
0x00001684 blx 0xd08 | r0 = fcn_00000d08 ();
0x00001688 ands sb, r0, 1 | sb = r0 & 1;
| if (sb != r0) {
0x0000168c bne 0x1628 | goto label_5;
| }
0x0000168e ldrb.w r1, [r8, 2] | r1 = *((r8 + 2));
0x00001692 cmp r1, 0 |
| if (r1 == 0) {
0x00001694 beq.w 0x150e | goto label_1;
| }
0x00001698 ldr r5, [pc, 0xa8] |
0x0000169a add.w sb, sp, 0x54 | sb += dest;
0x0000169e add r5, pc | r5 = 0x2de6;
0x000016a0 b 0x16ac | goto label_21;
| label_6:
0x000016a2 cmp.w r7, 0x100 |
0x000016a6 add.w r4, r4, 2 | r4 += 2;
| if (r7 == 0x100) {
0x000016aa beq 0x1628 | goto label_5;
| }
| label_21:
0x000016ac movs r2, 0x10 | r2 = 0x10;
0x000016ae mov r0, r5 | r0 = r5;
0x000016b0 blx 0xe40 | fcn_00000e40 ();
0x000016b4 ldrb r1, [r4, 1] | r1 = *((r4 + 1));
0x000016b6 mov sl, r0 | sl = r0;
0x000016b8 movs r2, 0x10 | r2 = 0x10;
0x000016ba mov r0, r5 | r0 = r5;
0x000016bc blx 0xe40 | r0 = fcn_00000e40 ();
0x000016c0 cmp r0, 0 |
0x000016c2 it ne |
| if (r0 == 0) {
0x000016c4 cmpne sl, 0 | __asm ("cmpne sl, 0");
| goto label_22;
| }
| if (r0 == 0) {
| label_22:
0x000016c8 beq 0x1628 | goto label_5;
| }
0x000016ca ldrb r1, [r4, 2] | r1 = *((r4 + 2));
0x000016cc sub.w sl, sl, r5 | sl -= r5;
0x000016d0 subs r3, r0, r5 | r3 = r0 - r5;
0x000016d2 adds r7, 1 | r7++;
0x000016d4 add.w r3, r3, sl, lsl 4 | r3 += (sl << 4);
0x000016d8 strb r3, [sb], 1 | *(sb) = r3;
| sb++;
0x000016dc cmp r1, 0 |
| if (r1 != 0) {
0x000016de bne 0x16a2 | goto label_6;
| }
0x000016e0 mov sb, r7 | sb = r7;
0x000016e2 b 0x150e | goto label_1;
| label_20:
0x000016e4 ldr r0, [pc, 0x60] |
0x000016e6 movs r2, 0x1c | r2 = 0x1c;
0x000016e8 ldr r3, [pc, 0x4c] | r3 = *(0x1738);
0x000016ea add r0, pc | r0 = 0x2e36;
| do {
0x000016ec ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x000016ee movs r1, 1 | r1 = 1;
0x000016f0 ldr r3, [r3] | r3 = *(r3);
0x000016f2 blx 0xd5c | fcn_00000d5c ();
0x000016f6 movs r0, 1 | r0 = 1;
0x000016f8 blx 0xe58 | fcn_00000e58 ();
| label_17:
0x000016fc ldr r0, [pc, 0x4c] |
0x000016fe add r0, pc | r0 = 0x2e4e;
0x00001700 blx 0xccc | fcn_00000ccc ();
0x00001704 movs r0, 1 | r0 = 1;
0x00001706 blx 0xe58 | fcn_00000e58 ();
| label_18:
0x0000170a blx 0xd80 | fcn_00000d80 ();
| label_9:
0x0000170e ldr r0, [pc, 0x40] |
0x00001710 movs r2, 0x17 | r2 = 0x17;
0x00001712 ldr r3, [pc, 0x24] | r3 = *(0x173a);
0x00001714 add r0, pc | r0 = 0x2e6a;
0x00001716 b 0x16ec |
| } 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/sbin/e4crypt @ 0x17a4 */
| #include <stdint.h>
|
; (fcn) fcn.000017a4 () | void fcn_000017a4 (int16_t arg_0h, int16_t arg_48h, int16_t arg_4ch, int16_t arg_88h, int16_t arg_8ch, int16_t arg_90h, int16_t arg_cch, int16_t arg_4d0h, int16_t arg_5cch, int16_t arg_9cch, int16_t arg1, int16_t arg2) {
| int16_t var_44h;
| int32_t var_9cch;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x000017a4 ldr r2, [pc, 0x158] |
0x000017a6 ldr r3, [pc, 0x15c] | r3 = *(0x1906);
0x000017a8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000017ac subw sp, sp, 0x9d4 | __asm ("subw sp, sp, 0x9d4");
0x000017b0 ldr.w sb, [pc, 0x154] |
0x000017b4 add r2, pc | r2 = 0x30b8;
0x000017b6 movs r5, 0 | r5 = 0;
0x000017b8 add r7, sp, 0x8c | r7 += arg_8ch;
0x000017ba ldr r3, [r2, r3] |
0x000017bc add r6, sp, 8 | r6 += var_8h;
0x000017be add sb, pc |
0x000017c0 add r4, sp, 0x48 | r4 += arg_48h;
0x000017c2 add.w sb, sb, 0x10 | sb = 0x30da;
0x000017c6 addw fp, sp, 0x4cc | __asm ("addw fp, sp, 0x4cc");
0x000017ca ldr r3, [r3] | r3 = *(0x30b8);
0x000017cc str.w r3, [sp, 0x9cc] | __asm ("str.w r3, [arg_9cch]");
0x000017d0 mov.w r3, 0 | r3 = 0;
0x000017d4 strd r0, r1, [sp] | __asm ("strd r0, r1, [sp]");
0x000017d8 mov r0, sb | r0 = sb;
0x000017da blx 0xd08 | fcn_00000d08 ();
0x000017de movw r2, 0x43c | r2 = 0x43c;
0x000017e2 mov sl, r0 | sl = r0;
0x000017e4 mov r1, r5 | r1 = r5;
0x000017e6 add r0, sp, 0x90 | r0 += arg_90h;
0x000017e8 str r5, [r7] | *(r7) = r5;
0x000017ea blx 0xcb4 | fcn_00000cb4 ();
0x000017ee movs r2, 0x3c | r2 = 0x3c;
0x000017f0 mov r1, r5 | r1 = r5;
0x000017f2 add r0, sp, 0xc | r0 += var_ch;
0x000017f4 str r5, [r6] | *(r6) = r5;
0x000017f6 blx 0xcb4 | fcn_00000cb4 ();
0x000017fa movs r2, 0x3c | r2 = 0x3c;
0x000017fc mov r1, r5 | r1 = r5;
0x000017fe add r0, sp, 0x4c | r0 += arg_4ch;
0x00001800 str r5, [r4] | *(r4) = r5;
0x00001802 blx 0xcb4 | fcn_00000cb4 ();
0x00001806 movw r2, 0x4fc | r2 = 0x4fc;
0x0000180a mov r1, r5 | r1 = r5;
0x0000180c add.w r0, sp, 0x4d0 | r0 += arg_4d0h;
0x00001810 str.w r5, [fp] | __asm ("str.w r5, [fp]");
0x00001814 blx 0xcb4 | r0 = fcn_00000cb4 ();
0x00001816 orr.w fp, lr, r0, lsl 4 |
0x0000181a add.w r1, sl, 0x100 | r1 = sl + 0x100;
0x0000181e str r1, [sp] | *(sp) = r1;
0x00001820 ldr r2, [r3, 0x60] | r2 = *((r3 + 0x60));
0x00001822 cmp.w r2, 0x100 |
| if (r2 > 0x100) {
0x00001826 bhi 0x18e6 | goto label_1;
| }
0x00001828 ldr r1, [r3] | r1 = *(r3);
0x0000182a mov r0, fp | r0 = fp;
0x0000182c blx 0xd38 | fcn_00000d38 ();
0x00001830 mov r1, sb | r1 = sb;
0x00001832 mov r2, sl | r2 = sl;
0x00001834 addw r0, sp, 0x5cc | __asm ("addw r0, arg_5cch");
0x00001838 add.w r8, sl, 0x40 | r8 = sl + 0x40;
0x0000183c blx 0xd38 | fcn_00000d38 ();
0x00001840 mov r1, sb | r1 = sb;
0x00001842 mov r2, sl | r2 = sl;
0x00001844 add r0, sp, 0xcc | r0 += arg_cch;
0x00001846 movw sb, 0xffff | sb = 0xffff;
0x0000184a blx 0xd38 | fcn_00000d38 ();
0x0000184e ldr r1, [sp] | r1 = *(sp);
0x00001850 mov r2, r6 | r2 = r6;
0x00001852 mov r0, fp | r0 = fp;
0x00001854 blx 0xd2c | fcn_00000d2c ();
| label_0:
0x00001858 mov r2, r4 | r2 = r4;
0x0000185a mov r3, r6 | r3 = r6;
| do {
0x0000185c vld1.64 {d18, d19}, [r2:0x40] | __asm ("vld1.64 {d18, d19}, [r2:0x40]");
0x00001860 vld1.64 {d16, d17}, [r3:0x40]! | __asm ("vld1.64 {d16, d17}, [r3:0x40]!");
0x00001864 veor q8, q8, q9 | __asm ("veor q8, q8, q9");
0x00001868 cmp r3, r4 |
0x0000186a vst1.64 {d16, d17}, [r2:0x40]! | __asm ("vst1.64 {d16, d17}, [r2:0x40]!");
0x0000186e bne 0x185c |
| } while (r3 != r4);
0x00001870 adds r5, 1 | r5++;
0x00001872 cmp r5, sb |
| if (r5 != sb) {
0x00001874 beq 0x18a6 |
0x00001876 mov lr, r6 | lr = r6;
0x00001878 mov ip, r7 |
0x0000187a ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x0000187e stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00001882 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00001886 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x0000188a ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x0000188e stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00001892 ldm.w lr, {r0, r1, r2, r3} | r0 = *(lr);
| r1 = *((lr + 4));
| r2 = *((lr + 8));
| r3 = *((lr + 12));
0x00001896 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x0000189a mov r2, r6 | r2 = r6;
0x0000189c mov r1, r8 | r1 = r8;
0x0000189e mov r0, r7 | r0 = r7;
0x000018a0 blx 0xd2c | fcn_00000d2c ();
0x000018a4 b 0x1858 | goto label_0;
| }
0x000018a6 ldr r6, [sp, 4] | r6 = var_4h;
0x000018a8 mov r4, r3 | r4 = r3;
0x000018aa add r7, sp, 0x88 | r7 += arg_88h;
| do {
0x000018ac mov r5, r4 | r5 = r4;
0x000018ae adds r6, 0x10 | r6 += 0x10;
0x000018b0 ldm r5!, {r0, r1, r2, r3} | r0 = *(r5!);
| r1 = *((r5! + 4));
| r2 = *((r5! + 8));
| r3 = *((r5! + 12));
0x000018b2 cmp r5, r7 |
0x000018b4 mov r4, r5 | r4 = r5;
0x000018b6 str r0, [r6, -0x10] | *((r6 - 0x10)) = r0;
0x000018ba str r1, [r6, -0xc] | *((r6 - 0xc)) = r1;
0x000018be str r2, [r6, -0x8] | *((r6 - 0x8)) = r2;
0x000018c2 str r3, [r6, -0x4] | *((r6 - 0x4)) = r3;
0x000018c6 bne 0x18ac |
| } while (r5 != r7);
0x000018c8 ldr r2, [pc, 0x40] |
0x000018ca ldr r3, [pc, 0x38] | r3 = *(0x1906);
0x000018cc add r2, pc | r2 = 0x31dc;
0x000018ce ldr r3, [r2, r3] | r3 = *(0x31dc);
0x000018d0 ldr r2, [r3] | r2 = *(0x31dc);
0x000018d2 ldr.w r3, [sp, 0x9cc] | r3 = *(arg_9cch);
0x000018d6 eors r2, r3 | r2 ^= r3;
0x000018d8 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000018dc bne 0x18fa |
0x000018de addw sp, sp, 0x9d4 | __asm ("addw sp, var_0h");
0x000018e2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_1:
0x000018e6 ldr r1, [pc, 0x28] |
0x000018e8 mov.w r3, 0x100 | r3 = 0x100;
0x000018ec movs r0, 1 | r0 = 1;
0x000018ee add r1, pc | r1 = 0x3204;
0x000018f0 blx 0xc8c | printf_chk ()
0x000018f4 movs r0, 1 | r0 = 1;
0x000018f6 blx 0xe58 | fcn_00000e58 ();
| }
0x000018fa blx 0xd80 | fcn_00000d80 ();
0x000018fe nop |
0x00001900 movs r7, 0x4c | r7 = 0x4c;
0x00001902 movs r0, r0 |
0x00001904 lsls r0, r4, 3 | r0 = r4 << 3;
0x00001906 movs r0, r0 |
0x00001908 cmp r0, 0x4e |
0x0000190a movs r0, r0 |
0x0000190c movs r6, 0x34 | r6 = 0x34;
0x0000190e movs r0, r0 |
0x00001910 lsrs r2, r2, 0xf | r2 >>= 0xf;
0x00001912 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/e4crypt @ 0x1914 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00001914 () | void fcn_00001914 (int16_t arg_70h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_4h;
| int16_t var_8h_2;
| int16_t var_ch_2;
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int32_t var_28h_3;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_74h_2;
| int16_t var_78h;
| int16_t var_80h;
| int16_t var_0h_4;
| int16_t var_b8h;
| int16_t var_bch;
| int16_t var_fch;
| int16_t var_13ch;
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int8_t var_53h;
| int16_t var_74h;
| int16_t var_78h_2;
| int16_t var_0h_3;
| int16_t var_ch_3;
| int16_t var_10h_3;
| int16_t var_14h_3;
| int16_t var_18h_2;
| int16_t var_1ch_2;
| int16_t var_20h_2;
| int16_t var_24h_2;
| int16_t var_28h_2;
| int16_t var_2ah;
| int16_t var_2bh;
| int16_t var_2ch;
| int16_t var_34h_2;
| int16_t var_44h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00001914 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00001918 mov r8, r1 | r8 = r1;
0x0000191a ldr r4, [pc, 0x1c0] |
0x0000191c mov ip, r2 |
0x0000191e sub.w r2, r8, 4 | r2 = r8 - 4;
0x00001922 sub sp, 0x4c |
0x00001924 ldr r1, [pc, 0x1b8] | r1 = *(0x1ae0);
0x00001926 bics r2, r2, 4 | __asm ("bics r2, r2, 4");
0x0000192a add r4, pc | r4 = 0x340c;
0x0000192c ldr r5, [pc, 0x1b4] |
0x0000192e ldr r7, [sp, 0x70] | r7 = *(arg_70h);
0x00001930 mov sb, r0 | sb = r0;
0x00001932 ldr r1, [r4, r1] |
0x00001934 add r5, pc | r5 = 0x341c;
0x00001936 ldr r1, [r1] | r1 = *(0x340c);
0x00001938 str r1, [sp, 0x44] | var_44h = r1;
0x0000193a mov.w r1, 0 | r1 = 0;
| if (? != ?) {
0x0000193e beq 0x194c |
0x00001940 sub.w r2, r8, 0x10 | r2 = r8 - 0x10;
0x00001944 bics r2, r2, 0x10 | __asm ("bics r2, r2, 0x10");
| if (? != ?) {
0x00001948 bne.w 0x1aa4 | goto label_23;
| }
| }
0x0000194c cmp r7, ip |
| if (r7 >= ip) {
0x0000194e bge 0x1a00 | goto label_24;
| }
0x00001950 add.w r6, r3, r7, lsl 2 | r6 = r3 + (r7 << 2);
0x00001954 ldr r3, [pc, 0x190] |
0x00001956 asr.w r8, r8, 3 | r8 >>= 3;
0x0000195a movw r1, 0x6614 |
0x0000195e movw lr, 0x6613 |
0x00001962 str.w ip, [sp, 0xc] | __asm ("str.w ip, [var_ch_3]");
0x00001966 add r3, pc | r3 = 0x3452;
0x00001968 movt r1, 0x4010 | r1 = 0x40106614;
0x0000196c movt lr, 0x800c | lr = 0x800c6613;
0x00001970 str r3, [sp, 0x18] | var_18h_2 = r3;
0x00001972 str r5, [sp, 0x24] | var_24h_2 = r5;
0x00001974 str r1, [sp, 0x1c] | var_1ch_2 = r1;
0x00001976 str.w lr, [sp, 0x10] | __asm ("str.w lr, [var_10h_3]");
| label_0:
0x0000197a ldr r0, [r6] | r0 = *(r6);
0x0000197c mov.w r1, 0x4000 | r1 = 0x4000;
0x00001980 blx 0xc38 | r0 = open (r0, r1, r2);
0x00001984 adds r3, r0, 1 | r3 = r0 + 1;
0x00001986 mov r4, r6 | r4 = r6;
0x00001988 mov r5, r0 | r5 = r0;
0x0000198a add.w r6, r6, 4 | r6 += 4;
| if (r3 == r0) {
0x0000198e beq.w 0x1ace | goto label_25;
| }
0x00001992 mov sl, sb | sl = sb;
0x00001994 cmp.w sb, 0 |
| if (sb == 0) {
0x00001998 beq 0x1a3a | goto label_26;
| }
| label_3:
0x0000199a mov.w r2, 0x100 | r2 = 0x100;
0x0000199e movs r3, 4 | r3 = 4;
0x000019a0 strh.w r2, [sp, 0x28] | var_28h_2 = r2;
0x000019a4 strb.w r3, [sp, 0x2a] | var_2ah = r3;
0x000019a8 cmp.w r8, 0 |
| if (r8 == 0) {
0x000019ac beq 0x1aa0 | goto label_27;
| }
0x000019ae mov r3, r8 | r3 = r8;
0x000019b0 movs r2, 0 | r2 = 0;
| do {
0x000019b2 asrs r3, r3, 1 | r3 >>= 1;
0x000019b4 add.w r2, r2, 1 | r2++;
0x000019b8 bne 0x19b2 |
| } while (r2 != 0);
0x000019ba uxtb r2, r2 | r2 = (int8_t) r2;
| label_4:
0x000019bc ldr.w r0, [sl, 0x15] | r0 = *((sl + 0x15));
0x000019c0 add r3, sp, 0x2c | r3 += var_2ch;
0x000019c2 ldr.w r1, [sl, 0x19] | r1 = *((sl + 0x19));
0x000019c6 add.w r4, sl, 4 | r4 = sl + 4;
0x000019ca strb.w r2, [sp, 0x2b] | var_2bh = r2;
0x000019ce add r2, sp, 0x28 | r2 += var_28h_2;
0x000019d0 stm r3!, {r0, r1} | *(r3!) = r0;
| *((r3! + 4)) = r1;
0x000019d2 mov r0, r5 | r0 = r5;
0x000019d4 ldr r1, [sp, 0x10] | r1 = var_10h_3;
0x000019d6 blx 0xcfc | r0 = fcn_00000cfc ();
0x000019da mov sl, r0 | sl = r0;
0x000019dc mov r0, r5 | r0 = r5;
0x000019de blx 0xd50 | fcn_00000d50 ();
0x000019e2 cmp.w sl, 0 |
| if (sl != 0) {
0x000019e6 bne 0x1a1a | goto label_28;
| }
0x000019e8 ldr r1, [pc, 0x100] |
0x000019ea mov r2, r4 | r2 = r4;
0x000019ec ldr r3, [r6, -0x4] | r3 = *((r6 - 0x4));
0x000019f0 movs r0, 1 | r0 = 1;
0x000019f2 add r1, pc | r1 = 0x34e2;
0x000019f4 blx 0xc8c | printf_chk ()
| label_1:
0x000019f8 ldr r3, [sp, 0xc] | r3 = var_ch_3;
0x000019fa adds r7, 1 | r7++;
0x000019fc cmp r3, r7 |
| if (r3 != r7) {
0x000019fe bne 0x197a | goto label_0;
| }
| label_24:
0x00001a00 ldr r2, [pc, 0xec] |
0x00001a02 ldr r3, [pc, 0xdc] | r3 = *(0x1ae2);
0x00001a04 add r2, pc | r2 = 0x34f8;
0x00001a06 ldr r3, [r2, r3] | r3 = *(0x34f8);
0x00001a08 ldr r2, [r3] | r2 = *(0x34f8);
0x00001a0a ldr r3, [sp, 0x44] | r3 = var_44h;
0x00001a0c eors r2, r3 | r2 ^= r3;
0x00001a0e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00001a12 bne 0x1aca | goto label_29;
| }
0x00001a14 add sp, 0x4c |
0x00001a16 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_28:
0x00001a1a blx 0xe64 | r0 = fcn_00000e64 ();
0x00001a1e ldr r0, [r0] | r0 = *(r0);
0x00001a20 blx 0xc44 | strerror (r0);
0x00001a24 ldr r5, [r6, -0x4] | r5 = *((r6 - 0x4));
0x00001a28 mov r2, r0 | r2 = r0;
0x00001a2a ldr r1, [pc, 0xc8] |
0x00001a2c mov r3, r4 | r3 = r4;
0x00001a2e movs r0, 1 | r0 = 1;
0x00001a30 str r5, [sp] | *(sp) = r5;
0x00001a32 add r1, pc | r1 = 0x352c;
0x00001a34 blx 0xc8c | printf_chk ()
0x00001a38 b 0x19f8 | goto label_1;
| label_26:
0x00001a3a add r3, sp, 0x34 | r3 += var_34h_2;
0x00001a3c ldr r1, [sp, 0x1c] | r1 = var_1ch_2;
0x00001a3e mov r2, r3 | r2 = r3;
0x00001a40 str r3, [sp, 0x14] | var_14h_3 = r3;
0x00001a42 blx 0xcfc | r0 = fcn_00000cfc ();
0x00001a46 cmp r0, 0 |
| if (r0 < 0) {
0x00001a48 blt 0x1abc | goto label_30;
| }
0x00001a4a ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x00001a4c ldrd sl, fp, [r3, 4] | __asm ("ldrd sl, fp, [r3, 4]");
0x00001a50 cmp.w fp, 0 |
| if (fp == 0) {
0x00001a54 beq 0x1a86 | goto label_31;
| }
0x00001a56 str r5, [sp, 0x20] | var_20h_2 = r5;
0x00001a58 mov r4, sb | r4 = sb;
0x00001a5a mov r5, fp | r5 = fp;
0x00001a5c ldr.w fp, [sp, 0x14] | fp = var_14h_3;
0x00001a60 b 0x1a6c |
| while (r2 != 0x10) {
| label_2:
0x00001a62 adds r4, 1 | r4++;
0x00001a64 add.w sl, sl, 0x64 | sl += 0x64;
0x00001a68 cmp r4, r5 |
| if (r4 == r5) {
0x00001a6a beq 0x1a86 | goto label_31;
| }
0x00001a6c ldr.w r2, [sl, 0x60] | r2 = *((sl + 0x60));
0x00001a70 cmp r2, 0x10 |
0x00001a72 bne 0x1a62 |
| }
0x00001a74 ldr.w r0, [sl] | r0 = *(sl);
0x00001a78 mov r1, fp | r1 = fp;
0x00001a7a blx 0xc5c | r0 = memcmp (r0, r1, r2);
0x00001a7e cmp r0, 0 |
| if (r0 != 0) {
0x00001a80 bne 0x1a62 | goto label_2;
| }
0x00001a82 ldr r5, [sp, 0x20] | r5 = var_20h_2;
0x00001a84 b 0x199a | goto label_3;
| label_31:
0x00001a86 ldr r5, [sp, 0x24] | r5 = var_24h_2;
0x00001a88 movs r2, 0x16 | r2 = 0x16;
0x00001a8a ldr r3, [pc, 0x6c] |
0x00001a8c movs r1, 1 | r1 = 1;
0x00001a8e ldr r0, [pc, 0x6c] |
0x00001a90 ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x00001a92 add r0, pc | r0 = 0x3594;
0x00001a94 ldr r3, [r3] | r3 = *(0x1afa);
0x00001a96 blx 0xd5c | fcn_00000d5c ();
0x00001a9a movs r0, 1 | r0 = 1;
0x00001a9c blx 0xe58 | fcn_00000e58 ();
| label_27:
0x00001aa0 mov r2, r8 | r2 = r8;
0x00001aa2 b 0x19bc | goto label_4;
| label_23:
0x00001aa4 ldr r0, [pc, 0x50] |
0x00001aa6 mov r3, r8 | r3 = r8;
0x00001aa8 ldr r2, [pc, 0x54] |
0x00001aaa movs r1, 1 | r1 = 1;
0x00001aac ldr r0, [r5, r0] | r0 = *((r5 + r0));
0x00001aae add r2, pc | r2 = 0x35b2;
0x00001ab0 ldr r0, [r0] | r0 = *(0x1af8);
0x00001ab2 blx 0xd98 | fcn_00000d98 ();
0x00001ab6 movs r0, 1 | r0 = 1;
0x00001ab8 blx 0xe58 | fcn_00000e58 ();
| label_30:
0x00001abc ldr r0, [pc, 0x44] |
0x00001abe add r0, pc | r0 = 0x35c6;
0x00001ac0 blx 0xccc | fcn_00000ccc ();
0x00001ac4 movs r0, 1 | r0 = 1;
0x00001ac6 blx 0xe58 | fcn_00000e58 ();
| label_29:
0x00001aca blx 0xd80 | fcn_00000d80 ();
| label_25:
0x00001ace ldr r0, [r4] | r0 = *(r4);
0x00001ad0 blx 0xccc | fcn_00000ccc ();
0x00001ad4 movs r0, 1 | r0 = 1;
0x00001ad6 blx 0xe58 | fcn_00000e58 ();
0x00001ada nop |
0x00001adc movs r5, 0xd6 | r5 = 0xd6;
0x00001ade movs r0, r0 |
0x00001ae0 lsls r0, r4, 3 | r0 = r4 << 3;
0x00001ae2 movs r0, r0 |
0x00001ae4 movs r5, 0xcc | r5 = 0xcc;
0x00001ae6 movs r0, r0 |
0x00001ae8 movs r6, 0xa6 | r6 = 0xa6;
0x00001aea movs r0, r0 |
0x00001aec lsrs r2, r2, 0xe | r2 >>= 0xe;
0x00001aee movs r0, r0 |
0x00001af0 movs r4, 0xfc | r4 = 0xfc;
0x00001af2 movs r0, r0 |
0x00001af4 lsrs r2, r3, 0xb | r2 = r3 >> 0xb;
0x00001af6 movs r0, r0 |
0x00001af8 lsls r4, r5, 3 | r4 = r5 << 3;
0x00001afa movs r0, r0 |
0x00001afc lsrs r2, r4, 9 | r2 = r4 >> 9;
0x00001afe movs r0, r0 |
0x00001b00 lsrs r2, r6, 8 | r2 = r6 >> 8;
0x00001b02 movs r0, r0 |
0x00001b04 lsrs r2, r0, 6 | r2 = r0 >> 6;
0x00001b06 movs r0, r0 |
0x00001b08 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00001b0c mov sb, r2 | sb = r2;
0x00001b0e ldr r2, [pc, 0x130] |
0x00001b10 sub sp, 0x7c |
0x00001b12 mov r4, r0 | r4 = r0;
0x00001b14 mov r5, r1 | r5 = r1;
0x00001b16 ldr r3, [pc, 0x12c] | r3 = *(0x1c46);
0x00001b18 mov.w r8, 4 | r8 = 4;
0x00001b1c add r2, pc | r2 = 0x3762;
0x00001b1e ldr r6, [pc, 0x128] |
0x00001b20 ldr r7, [pc, 0x128] |
0x00001b22 ldr r3, [r2, r3] |
0x00001b24 add r6, pc | r6 = 0x3772;
0x00001b26 add r7, pc | r7 = 0x3776;
0x00001b28 ldr r3, [r3] | r3 = *(0x3762);
0x00001b2a str r3, [sp, 0x74] | var_74h = r3;
0x00001b2c mov.w r3, 0 | r3 = 0;
0x00001b30 b 0x1b36 |
| while (r3 != r0) {
0x00001b32 cmp r0, 0x70 |
| if (r0 == 0x70) {
0x00001b34 beq 0x1b78 | goto label_32;
| }
| label_5:
0x00001b36 mov r2, r7 | r2 = r7;
0x00001b38 mov r1, r5 | r1 = r5;
0x00001b3a mov r0, r4 | r0 = r4;
0x00001b3c blx 0xd14 | r0 = fcn_00000d14 ();
0x00001b40 adds r3, r0, 1 | r3 = r0 + 1;
0x00001b42 bne 0x1b32 |
| }
0x00001b44 ldr r3, [pc, 0x108] | r3 = *(0x1c50);
0x00001b46 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00001b48 ldr r2, [r3] | r2 = *(0x1c50);
0x00001b4a str r3, [sp, 0xc] | var_ch = r3;
0x00001b4c adds r3, r2, 1 | r3 = r2 + 1;
0x00001b4e cmp r3, r4 |
| if (r3 >= r4) {
0x00001b50 bge 0x1bde | goto label_33;
| }
0x00001b52 ldr.w r7, [r5, r2, lsl 2] | offset_0 = r2 << 2;
| r7 = *((r5 + offset_0));
0x00001b56 str r3, [sp, 8] | var_8h = r3;
0x00001b58 mov r0, r7 | r0 = r7;
0x00001b5a blx 0xd08 | r0 = fcn_00000d08 ();
0x00001b5e cmp r0, 0x10 |
0x00001b60 ldr r3, [sp, 8] | r3 = var_8h;
0x00001b62 beq 0x1b8a |
| while (r0 == 0) {
| label_7:
0x00001b64 ldr r1, [pc, 0xec] |
0x00001b66 movs r3, 0x10 | r3 = 0x10;
0x00001b68 mov r2, r7 | r2 = r7;
0x00001b6a movs r0, 1 | r0 = 1;
0x00001b6c add r1, pc | r1 = 0x37c4;
0x00001b6e blx 0xc8c | printf_chk ()
0x00001b72 movs r0, 1 | r0 = 1;
0x00001b74 blx 0xe58 | fcn_00000e58 ();
| label_32:
0x00001b78 ldr r3, [pc, 0xdc] | r3 = *(0x1c58);
0x00001b7a movs r2, 0xa | r2 = 0xa;
0x00001b7c movs r1, 0 | r1 = 0;
0x00001b7e ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00001b80 ldr r0, [r3] | r0 = *(0x1c58);
0x00001b82 blx 0xd44 | r0 = fcn_00000d44 ();
0x00001b86 mov r8, r0 | r8 = r0;
0x00001b88 b 0x1b36 | goto label_5;
0x00001b8a ldr.w sl, [pc, 0xd0] |
0x00001b8e mov.w sb, 0 | sb = 0;
0x00001b92 str r4, [sp, 8] | var_8h = r4;
0x00001b94 add.w fp, r7, 1 |
0x00001b98 mov r4, sb | r4 = sb;
0x00001b9a mov sb, r3 | sb = r3;
0x00001b9c add sl, pc | sl = 0x37fe;
0x00001b9e b 0x1bcc | goto label_34;
| label_6:
0x00001ba0 ldrb.w r1, [fp, r4] | r1 = *((fp + r4));
0x00001ba4 movs r2, 0x10 | r2 = 0x10;
0x00001ba6 mov r0, sl | r0 = sl;
0x00001ba8 blx 0xe40 | r0 = fcn_00000e40 ();
0x00001bac cmp r0, 0 |
0x00001bae beq 0x1b64 |
| }
0x00001bb0 add r3, sp, 0x78 | r3 += var_78h_2;
0x00001bb2 sub.w r6, r6, sl | r6 -= sl;
0x00001bb6 add.w r2, r3, r4, lsr 1 | r2 = r3 + (r4 >> 1);
0x00001bba sub.w r0, r0, sl | r0 -= sl;
0x00001bbe adds r4, 2 | r4 += 2;
0x00001bc0 add.w r0, r0, r6, lsl 4 | r0 += (r6 << 4);
0x00001bc4 cmp r4, 0x10 |
0x00001bc6 strb r0, [r2, -0x53] | var_53h = r0;
| if (r4 == 0x10) {
0x00001bca beq 0x1c0e | goto label_35;
| }
| label_34:
0x00001bcc ldrb r1, [r7, r4] | r1 = *((r7 + r4));
0x00001bce movs r2, 0x10 | r2 = 0x10;
0x00001bd0 mov r0, sl | r0 = sl;
0x00001bd2 blx 0xe40 | r0 = fcn_00000e40 ();
0x00001bd6 mov r6, r0 | r6 = r0;
0x00001bd8 cmp r0, 0 |
| if (r0 != 0) {
0x00001bda bne 0x1ba0 | goto label_6;
| }
0x00001bdc b 0x1b64 | goto label_7;
| label_33:
0x00001bde ldr r3, [pc, 0x80] | r3 = *(0x1c62);
0x00001be0 movs r2, 0x1f | r2 = 0x1f;
0x00001be2 ldr r0, [pc, 0x80] |
0x00001be4 movs r1, 1 | r1 = 1;
0x00001be6 ldr r4, [r6, r3] | r4 = *((r6 + r3));
0x00001be8 add r0, pc | r0 = 0x3852;
0x00001bea ldr r3, [r4] | r3 = *(r4);
0x00001bec blx 0xd5c | fcn_00000d5c ();
0x00001bf0 ldr r0, [pc, 0x74] |
0x00001bf2 movs r2, 9 | r2 = 9;
0x00001bf4 ldr r3, [r4] | r3 = *(r4);
0x00001bf6 movs r1, 1 | r1 = 1;
0x00001bf8 add r0, pc | r0 = 0x3864;
0x00001bfa blx 0xd5c | fcn_00000d5c ();
0x00001bfe ldr r1, [r4] | r1 = *(r4);
0x00001c00 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x00001c04 blx 0xe7c | fcn_00000e7c ();
0x00001c08 movs r0, 1 | r0 = 1;
0x00001c0a blx 0xe58 | fcn_00000e58 ();
| label_35:
0x00001c0e ldr r4, [sp, 8] | r4 = var_8h;
0x00001c10 mov r2, sb | r2 = sb;
0x00001c12 mov r1, r5 | r1 = r5;
0x00001c14 mov r0, r4 | r0 = r4;
0x00001c16 bl 0x10f4 | fcn_000010f4 (r0, r1, r2);
0x00001c1a ldr r3, [sp, 0xc] | r3 = var_ch;
0x00001c1c movs r2, 0x11 | r2 = 0x11;
0x00001c1e add r0, sp, 0x14 | r0 += var_14h;
0x00001c20 ldr r6, [r3] | r6 = *(r3);
0x00001c22 ldr.w r1, [r5, r6, lsl 2] | offset_1 = r6 << 2;
| r1 = *((r5 + offset_1));
0x00001c26 adds r6, 1 | r6++;
0x00001c28 blx 0xe10 | fcn_00000e10 ();
0x00001c2c add r0, sp, 0x10 | r0 += var_10h;
0x00001c2e mov r3, r5 | r3 = r5;
0x00001c30 mov r2, r4 | r2 = r4;
0x00001c32 mov r1, r8 | r1 = r8;
0x00001c34 str r6, [sp] | *(sp) = r6;
0x00001c36 bl 0x1914 | fcn_00001914 (r0, r1, r2, r3, r4);
0x00001c3a movs r0, 0 | r0 = 0;
0x00001c3c blx 0xe58 | fcn_00000e58 ();
0x00001c40 movs r3, 0xe4 | r3 = 0xe4;
0x00001c42 movs r0, r0 |
0x00001c44 lsls r0, r4, 3 | r0 = r4 << 3;
0x00001c46 movs r0, r0 |
0x00001c48 movs r3, 0xdc | r3 = 0xdc;
0x00001c4a movs r0, r0 |
0x00001c4c lsrs r2, r1, 0xa | r2 = r1 >> 0xa;
0x00001c4e movs r0, r0 |
0x00001c50 lsls r0, r3, 3 | r0 = r3 << 3;
0x00001c52 movs r0, r0 |
0x00001c54 lsrs r0, r1, 9 | r0 = r1 >> 9;
0x00001c56 movs r0, r0 |
0x00001c58 lsls r0, r6, 3 | r0 = r6 << 3;
0x00001c5a movs r0, r0 |
0x00001c5c lsrs r0, r3, 3 | r0 = r3 >> 3;
0x00001c5e movs r0, r0 |
0x00001c60 lsls r4, r5, 3 | r4 = r5 << 3;
0x00001c62 movs r0, r0 |
0x00001c64 lsls r0, r4, 0x1d | r0 = r4 << 0x1d;
0x00001c66 movs r0, r0 |
0x00001c68 lsls r0, r6, 0x1d | r0 = r6 << 0x1d;
0x00001c6a movs r0, r0 |
0x00001c6c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00001c70 movs r3, 4 | r3 = 4;
0x00001c72 sub sp, 0x144 |
0x00001c74 mov sl, r2 | sl = r2;
0x00001c76 mov.w r8, 0 | r8 = 0;
0x00001c7a mov r5, r0 | r5 = r0;
0x00001c7c ldr.w r2, [pc, 0x4ec] |
0x00001c80 mov r4, r8 | r4 = r8;
0x00001c82 str r3, [sp, 0xc] | var_ch_2 = r3;
0x00001c84 mov r7, r8 | r7 = r8;
0x00001c86 ldr.w r3, [pc, 0x4e8] | r3 = *(0x2172);
0x00001c8a add r2, pc | r2 = 0x3dfa;
0x00001c8c str r1, [sp, 8] | var_8h_2 = r1;
0x00001c8e ldr.w sb, [pc, 0x4e4] |
0x00001c92 ldr r3, [r2, r3] |
0x00001c94 ldr.w r6, [pc, 0x4e0] |
0x00001c98 add sb, pc | sb = 0x3e12;
0x00001c9a ldr r3, [r3] | r3 = *(0x3dfa);
0x00001c9c str r3, [sp, 0x13c] | var_13ch = r3;
0x00001c9e mov.w r3, 0 | r3 = 0;
0x00001ca2 add r6, pc | r6 = 0x3e1e;
| do {
| label_8:
0x00001ca4 ldr r1, [sp, 8] | r1 = var_8h_2;
0x00001ca6 mov r2, sb | r2 = sb;
0x00001ca8 mov r0, r5 | r0 = r5;
0x00001caa blx 0xd14 | r0 = fcn_00000d14 ();
0x00001cae adds r1, r0, 1 | r1 = r0 + 1;
| if (r1 == r0) {
0x00001cb0 beq 0x1d7a | goto label_36;
| }
0x00001cb2 sub.w r3, r0, 0x53 | r3 = r0 - 0x53;
0x00001cb6 cmp r3, 0x23 |
| if (r3 <= 0x23) {
0x00001cb8 bhi 0x1ce2 |
| /* switch table (36 cases) at 0x1cbe */
0x00001cba tbb [pc, r3] | __asm ("tbb [0x00001cc0]");
| }
0x00001ce2 cmp r0, 0x3f |
| if (r0 != 0x3f) {
0x00001ce4 bne 0x1d62 | goto label_37;
| }
0x00001ce6 ldr.w r3, [pc, 0x494] | r3 = *(0x217e);
0x00001cea ldr r4, [r6, r3] | r4 = *((r6 + r3));
| label_9:
0x00001cec ldr.w r0, [pc, 0x490] |
0x00001cf0 movs r2, 9 | r2 = 9;
0x00001cf2 ldr r3, [r4] | r3 = *(r4);
0x00001cf4 movs r1, 1 | r1 = 1;
0x00001cf6 add r0, pc | r0 = 0x3e7a;
0x00001cf8 blx 0xd5c | fcn_00000d5c ();
0x00001cfc ldr r1, [r4] | r1 = *(r4);
0x00001cfe ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x00001d02 blx 0xe7c | fcn_00000e7c ();
0x00001d06 movs r0, 1 | r0 = 1;
0x00001d08 blx 0xe58 | fcn_00000e58 ();
0x00001d0c ldr.w r2, [pc, 0x474] |
0x00001d10 add r2, pc | r2 = 0x3e98;
0x00001d12 ldr r3, [r2] | r3 = *(0x3e98);
0x00001d14 orr r3, r3, 1 | r3 |= 1;
0x00001d16 lsls r1, r0, 0xc | r1 = r0 << 0xc;
0x00001d18 str r3, [r2] | *(r2) = r3;
0x00001d1a b 0x1ca4 |
| } while (1);
0x00001d1c ldr.w r2, [pc, 0x468] |
0x00001d20 add r2, pc | r2 = 0x3eac;
0x00001d22 ldr r3, [r2] | r3 = *(0x3eac);
0x00001d24 orr r3, r3, 2 | r3 |= 2;
0x00001d28 str r3, [r2] | *(r2) = r3;
0x00001d2a b 0x1ca4 | goto label_8;
0x00001d2c ldr.w r3, [pc, 0x45c] | r3 = *(0x218c);
0x00001d30 movs r2, 0xa | r2 = 0xa;
0x00001d32 movs r1, 0 | r1 = 0;
0x00001d34 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00001d36 ldr r0, [r3] | r0 = *(0x218c);
0x00001d38 blx 0xd44 | fcn_00000d44 ();
0x00001d3c str r0, [sp, 0xc] | var_ch_2 = r0;
0x00001d3e b 0x1ca4 | goto label_8;
0x00001d40 ldr.w r3, [pc, 0x448] | r3 = *(0x218c);
0x00001d44 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00001d46 ldr r7, [r3] | r7 = *(0x218c);
0x00001d48 b 0x1ca4 | goto label_8;
0x00001d4a cmp r4, 0 |
| if (r4 != 0) {
0x00001d4c bne.w 0x2108 | goto label_38;
| }
0x00001d50 ldr.w r3, [pc, 0x438] | r3 = *(0x218c);
0x00001d54 mov r1, r4 | r1 = r4;
0x00001d56 movs r4, 1 | r4 = 1;
0x00001d58 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00001d5a ldr r0, [r3] | r0 = *(0x218c);
0x00001d5c bl 0x14c4 | fcn_000014c4 (r0, r1);
0x00001d60 b 0x1ca4 | goto label_8;
| label_37:
0x00001d62 ldr.w r1, [pc, 0x418] | r1 = *(0x217e);
0x00001d66 mov r3, r0 | r3 = r0;
0x00001d68 ldr.w r2, [pc, 0x424] |
0x00001d6c ldr r4, [r6, r1] | r4 = *((r6 + r1));
0x00001d6e movs r1, 1 | r1 = 1;
0x00001d70 add r2, pc | r2 = 0x3f04;
0x00001d72 ldr r0, [r4] | r0 = *(r4);
0x00001d74 blx 0xd98 | fcn_00000d98 ();
0x00001d78 b 0x1cec | goto label_9;
| label_36:
0x00001d7a ldr.w r3, [pc, 0x418] |
0x00001d7e mov r8, r7 | r8 = r7;
0x00001d80 add r3, pc |
0x00001d82 ldr r3, [r3, 8] | r3 = *(0x3f22);
0x00001d84 cmp r3, 0 |
| if (r3 == 0) {
0x00001d86 beq.w 0x1efe | goto label_39;
| }
| label_11:
0x00001d8a ldr.w r3, [pc, 0x40c] | r3 = *(0x219a);
0x00001d8e mov r0, r5 | r0 = r5;
0x00001d90 ldr r1, [sp, 8] | r1 = var_8h_2;
0x00001d92 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00001d94 ldr r2, [r3] | r2 = *(0x219a);
0x00001d96 str r3, [sp, 0x24] | var_24h = r3;
0x00001d98 bl 0x10f4 | fcn_000010f4 (r0, r1, r2);
| if (r4 != 0) {
0x00001d9c cbnz r4, 0x1dba | goto label_40;
| }
0x00001d9e ldr r3, [sp, 0x24] | r3 = var_24h;
0x00001da0 ldr r7, [sp, 8] | r7 = var_8h_2;
0x00001da2 ldr.w sb, [r3] | sb = *(r3);
0x00001da6 b 0x1db6 |
| while (sb < r5) {
0x00001da8 ldr.w r0, [r7, sb, lsl 2] | offset_2 = sb << 2;
| r0 = *((r7 + offset_2));
0x00001dac movs r1, 2 | r1 = 2;
0x00001dae add.w sb, sb, 1 | sb++;
0x00001db2 bl 0x14c4 | fcn_000014c4 (r0, r1);
0x00001db6 cmp sb, r5 |
0x00001db8 blt 0x1da8 |
| }
| label_40:
0x00001dba ldr r1, [pc, 0x3e0] |
0x00001dbc movs r0, 1 | r0 = 1;
0x00001dbe add r1, pc | r1 = 0x3f60;
0x00001dc0 blx 0xc8c | printf_chk ()
0x00001dc4 add r3, sp, 0x74 | r3 += var_74h_2;
0x00001dc6 movs r0, 0 | r0 = 0;
0x00001dc8 mov r1, r3 | r1 = r3;
0x00001dca str r3, [sp, 0x1c] | var_1ch = r3;
0x00001dcc blx 0xcf0 | r0 = fcn_00000cf0 ();
0x00001dd0 mov sl, r0 | sl = r0;
0x00001dd2 cmp r0, 0 |
| if (r0 == 0) {
0x00001dd4 beq.w 0x1f6e | goto label_41;
| }
0x00001dd8 add.w sb, sp, 0x38 | sb += var_38h;
| label_12:
0x00001ddc ldr r3, [pc, 0x3c0] | r3 = *(0x21a0);
0x00001dde mov.w r1, 0x400 | r1 = 0x400;
0x00001de2 ldr.w sl, [pc, 0x3c0] |
0x00001de6 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00001de8 add sl, pc | sl = 0x3f92;
0x00001dea add.w r7, sl, 0x10 | r7 = sl + 0x10;
0x00001dee ldr r2, [r3] | r2 = *(0x21a0);
0x00001df0 mov r0, r7 | r0 = r7;
0x00001df2 blx 0xc80 | fgets (r0, r1, r2);
0x00001df6 movs r1, 0 | r1 = 0;
0x00001df8 mov r6, r0 | r6 = r0;
0x00001dfa mov r2, sb | r2 = sb;
0x00001dfc mov r0, r1 | r0 = r1;
0x00001dfe blx 0xdd4 | fcn_00000dd4 ();
0x00001e02 movs r0, 0xa | r0 = 0xa;
0x00001e04 blx 0xc98 | putchar (r0);
0x00001e08 cmp r6, 0 |
| if (r6 == 0) {
0x00001e0a beq.w 0x2116 | goto label_42;
| }
0x00001e0e mov r0, r7 | r0 = r7;
0x00001e10 movs r1, 0xa | r1 = 0xa;
0x00001e12 blx 0xcc0 | r0 = fcn_00000cc0 ();
0x00001e16 cmp r0, 0 |
| if (r0 == 0) {
0x00001e18 beq.w 0x2110 | goto label_43;
| }
| label_20:
0x00001e1c ldr r3, [pc, 0x388] |
0x00001e1e movs r2, 0 | r2 = 0;
0x00001e20 strb r2, [r0] | *(r0) = r2;
0x00001e22 add r3, pc | r3 = 0x3fce;
0x00001e24 ldrd r6, r1, [r3, 4] | __asm ("ldrd r6, r1, [r3, 4]");
0x00001e28 cmp r1, 0 |
| if (r1 == 0) {
0x00001e2a beq.w 0x2014 | goto label_44;
| }
0x00001e2e ldr r3, [pc, 0x37c] |
0x00001e30 add.w fp, r6, 4 |
0x00001e34 ldr.w sb, [pc, 0x378] |
0x00001e38 adds r6, 0x1c | r6 += 0x1c;
0x00001e3a strd r4, r5, [sp, 0x28] | __asm ("strd r4, r5, [var_28h]");
0x00001e3e mov r7, r8 | r7 = r8;
0x00001e40 add r3, pc | r3 = 0x3ff2;
0x00001e42 str r2, [sp, 0x10] | var_10h_2 = r2;
0x00001e44 str r3, [sp, 0x20] | var_20h = r3;
0x00001e46 add r3, sp, 0xbc | r3 += var_bch;
0x00001e48 str r3, [sp, 0x14] | var_14h_2 = r3;
0x00001e4a add r3, sp, 0xfc | r3 += var_fch;
0x00001e4c add sb, pc | sb = .data;
0x00001e4e mov r5, r3 | r5 = r3;
| label_14:
0x00001e50 adds r4, r6, 1 | r4 = r6 + 1;
0x00001e52 sub.w r0, r6, 0x1c | r0 = r6 - 0x1c;
0x00001e56 mov r1, r4 | r1 = r4;
0x00001e58 sub.w sl, r6, 8 | sl = r6 - 8;
0x00001e5c bl 0x17a4 | fcn_000017a4 (r0, r1, r2, r3, r4, r5, r6);
0x00001e60 ldr.w r8, [sp, 0x14] | r8 = var_14h_2;
0x00001e64 movs r1, 0x40 | r1 = 0x40;
0x00001e66 mov r0, r4 | r0 = r4;
0x00001e68 mov r2, r8 | r2 = r8;
0x00001e6a blx 0xd2c | fcn_00000d2c ();
0x00001e6e mov r0, r8 | r0 = r8;
0x00001e70 movs r1, 0x40 | r1 = 0x40;
0x00001e72 mov r2, r5 | r2 = r5;
0x00001e74 mov r8, fp | r8 = fp;
0x00001e76 blx 0xd2c | fcn_00000d2c ();
0x00001e7a mov r3, r5 | r3 = r5;
0x00001e7c ldm r3!, {r0, r1} | r0 = *(r3!);
| r1 = *((r3! + 4));
0x00001e7e str r0, [r6, -0x7] | *((r6 - 0x7)) = r0;
0x00001e82 str r1, [r6, -0x3] | *((r6 - 0x3)) = r1;
| do {
0x00001e86 ldrb r3, [sl, 1]! | r3 = *((sl += 1));
0x00001e8a mov r0, r8 | r0 = r8;
0x00001e8c mov.w r2, -1 | r2 = -1;
0x00001e90 movs r1, 1 | r1 = 1;
0x00001e92 add.w r8, r8, 2 | r8 += 2;
0x00001e96 str r3, [sp] | *(sp) = r3;
0x00001e98 mov r3, sb | r3 = sb;
0x00001e9a blx 0xdec | fcn_00000dec ();
0x00001e9e cmp sl, r6 |
0x00001ea0 bne 0x1e86 |
| } while (sl != r6);
0x00001ea2 mov.w sl, 0 | sl = 0;
0x00001ea6 mvn r8, 2 | r8 = ~2;
0x00001eaa strb sl, [r6, -0x8] | *((r6 - 0x8)) = sl;
0x00001eae cmp r7, 0 |
| if (r7 == 0) {
0x00001eb0 beq.w 0x1fc0 | goto label_16;
| }
0x00001eb4 ldr.w r8, [pc, 0x2fc] |
0x00001eb8 add r8, pc | r8 = 0x4070;
| do {
0x00001eba mov r1, r8 | r1 = r8;
0x00001ebc mov r0, r7 | r0 = r7;
0x00001ebe blx 0xe4c | r0 = fcn_00000e4c ();
0x00001ec2 cmp r0, 0 |
| if (r0 == 0) {
0x00001ec4 beq 0x1fae | goto label_45;
| }
0x00001ec6 add.w sl, sl, 1 | sl++;
0x00001eca add.w r8, r8, 0xc | r8 += 0xc;
0x00001ece cmp.w sl, 6 |
0x00001ed2 bne 0x1eba |
| } while (sl != 6);
0x00001ed4 add.w r8, sp, 0x34 | r8 += var_34h;
0x00001ed8 movs r2, 0xa | r2 = 0xa;
0x00001eda mov r1, r8 | r1 = r8;
0x00001edc mov r0, r7 | r0 = r7;
0x00001ede blx 0xd20 | fcn_00000d20 ();
0x00001ee2 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00001ee4 mov r8, r0 | r8 = r0;
0x00001ee6 ldrb r3, [r3] | r3 = *(r3);
0x00001ee8 cmp r3, 0 |
| if (r3 == 0) {
0x00001eea beq.w 0x20b2 | goto label_46;
| }
| label_13:
0x00001eee ldr r1, [pc, 0x2c8] |
0x00001ef0 mov r8, r7 | r8 = r7;
0x00001ef2 add r1, pc | r1 = 0x40b0;
| label_22:
0x00001ef4 mov r2, r8 | r2 = r8;
0x00001ef6 movs r0, 1 | r0 = 1;
0x00001ef8 blx 0xc8c | printf_chk ()
0x00001efc b 0x1f68 | goto label_21;
| label_39:
0x00001efe ldr r1, [pc, 0x2bc] |
0x00001f00 ldr r0, [pc, 0x2bc] |
0x00001f02 ldr.w sl, [pc, 0x2c0] |
0x00001f06 add r1, pc | r1 = 0x40c8;
0x00001f08 add r0, pc | r0 = 0x40cc;
0x00001f0a blx 0xdbc | fcn_00000dbc ();
0x00001f0e add sl, pc | sl = 0x40d8;
0x00001f10 mov sb, r0 | sb = r0;
| label_10:
0x00001f12 cmp.w sb, 0 |
| if (sb == 0) {
0x00001f16 beq 0x1f44 | goto label_47;
| }
| do {
0x00001f18 mov r0, sb | r0 = sb;
0x00001f1a blx 0xda4 | r0 = fcn_00000da4 ();
0x00001f1e mov r7, r0 | r7 = r0;
| if (r0 == 0) {
0x00001f20 cbz r0, 0x1f44 | goto label_47;
| }
0x00001f22 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x00001f24 mov r1, sl | r1 = sl;
0x00001f26 blx 0xe4c | r0 = fcn_00000e4c ();
0x00001f2a cmp r0, 0 |
0x00001f2c bne 0x1f18 |
| } while (r0 != 0);
0x00001f2e ldr r0, [r7, 4] | r0 = *((r7 + 4));
0x00001f30 movs r1, 4 | r1 = 4;
0x00001f32 blx 0xce4 | r0 = fcn_00000ce4 ();
0x00001f36 cmp r0, 0 |
| if (r0 != 0) {
0x00001f38 bne 0x1f12 | goto label_10;
| }
0x00001f3a ldr r0, [r7, 4] | r0 = *((r7 + 4));
0x00001f3c movs r1, 1 | r1 = 1;
0x00001f3e bl 0x14c4 | fcn_000014c4 (r0, r1);
0x00001f42 b 0x1f12 | goto label_10;
| label_47:
0x00001f44 mov r0, sb | r0 = sb;
0x00001f46 blx 0xd74 | fcn_00000d74 ();
0x00001f4a ldr r3, [pc, 0x27c] |
0x00001f4c add r3, pc |
0x00001f4e ldr r3, [r3, 8] | r3 = imp.__aeabi_unwind_cpp_pr0;
0x00001f50 cmp r3, 0 |
| if (r3 != 0) {
0x00001f52 bne.w 0x1d8a | goto label_11;
| }
0x00001f56 ldr r0, [pc, 0x274] |
0x00001f58 ldr r3, [pc, 0x220] | r3 = *(0x217c);
0x00001f5a add r0, pc | r0 = 0x412c;
| label_19:
0x00001f5c ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00001f5e movs r2, 0x19 | r2 = 0x19;
0x00001f60 movs r1, 1 | r1 = 1;
0x00001f62 ldr r3, [r3] | r3 = *(r3);
0x00001f64 blx 0xd5c | fcn_00000d5c ();
| label_21:
0x00001f68 movs r0, 1 | r0 = 1;
0x00001f6a blx 0xe58 | fcn_00000e58 ();
| label_41:
0x00001f6e ldr.w fp, [sp, 0x1c] | fp = var_1ch;
0x00001f72 add.w sb, sp, 0x38 | sb += var_38h;
0x00001f76 ldr r3, [sp, 0x80] | r3 = var_80h;
0x00001f78 mov ip, sb |
0x00001f7a mov lr, fp | lr = fp;
0x00001f7c bic r7, r3, 8 | r7 = BIT_MASK (r3, 8);
0x00001f80 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00001f84 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00001f88 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00001f8c stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00001f90 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00001f94 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00001f98 ldm.w lr, {r0, r1, r2} | r0 = *(lr);
| r1 = *((lr + 4));
| r2 = *((lr + 8));
0x00001f9c stm.w ip, {r0, r1, r2} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
0x00001fa0 mov r2, fp | r2 = fp;
0x00001fa2 mov r1, sl | r1 = sl;
0x00001fa4 mov r0, sl | r0 = sl;
0x00001fa6 str r7, [sp, 0x80] | var_80h = r7;
0x00001fa8 blx 0xdd4 | fcn_00000dd4 ();
0x00001fac b 0x1ddc | goto label_12;
| label_45:
0x00001fae ldr r2, [sp, 0x20] | r2 = var_20h;
0x00001fb0 movs r3, 0xc | r3 = 0xc;
0x00001fb2 mla r3, r3, sl, r2 | __asm ("mla r3, r3, sl, r2");
0x00001fb6 ldr.w r8, [r3, 8] | r8 = *((r3 + 8));
0x00001fba cmp.w r8, 0 |
| if (r8 == 0) {
0x00001fbe beq 0x1eee | goto label_13;
| }
| label_16:
0x00001fc0 ldr r3, [pc, 0x20c] |
0x00001fc2 movs r2, 0x16 | r2 = 0x16;
0x00001fc4 movs r1, 1 | r1 = 1;
0x00001fc6 mov r0, r5 | r0 = r5;
0x00001fc8 str.w fp, [sp, 4] | __asm ("str.w fp, [var_4h]");
0x00001fcc add r3, pc | r3 = 0x41a0;
0x00001fce str r3, [sp] | *(sp) = r3;
0x00001fd0 ldr r3, [pc, 0x200] |
0x00001fd2 add r3, pc | r3 = 0x41aa;
0x00001fd4 blx 0xdec | fcn_00000dec ();
0x00001fd8 ldr r2, [pc, 0x1fc] |
0x00001fda movs r3, 0 | r3 = 0;
0x00001fdc str r3, [sp] | *(sp) = r3;
0x00001fde mov r1, r8 | r1 = r8;
0x00001fe0 mov r3, r5 | r3 = r5;
0x00001fe2 movs r0, 0xa | r0 = 0xa;
0x00001fe4 add r2, pc | r2 = 0x41c0;
0x00001fe6 bl 0x11d0 | fcn_000011d0 (r0);
0x00001fea adds r0, 1 | r0++;
| if (r0 == 1) {
0x00001fec beq 0x203c | goto label_48;
| }
0x00001fee ldr r3, [pc, 0x1ec] |
0x00001ff0 add r3, pc |
0x00001ff2 ldr r3, [r3] | r3 = imp.__aeabi_unwind_cpp_pr0;
0x00001ff4 lsls r2, r3, 0x1e | r2 = r3 << 0x1e;
| if (r2 >= r3) {
0x00001ff6 bpl 0x20f6 | goto label_49;
| }
| label_15:
0x00001ff8 ldr r3, [pc, 0x1e4] |
0x00001ffa add.w fp, fp, 0x64 |
0x00001ffe ldr r2, [sp, 0x10] | r2 = var_10h_2;
0x00002000 adds r6, 0x64 | r6 += 0x64;
0x00002002 add r3, pc |
0x00002004 ldr r3, [r3, 8] | r3 = imp.__aeabi_unwind_cpp_pr0;
0x00002006 adds r2, 1 | r2++;
0x00002008 str r2, [sp, 0x10] | var_10h_2 = r2;
0x0000200a cmp r3, r2 |
| if (r3 > r2) {
0x0000200c bhi.w 0x1e50 | goto label_14;
| }
0x00002010 ldrd r4, r5, [sp, 0x28] | __asm ("ldrd r4, r5, [var_28h]");
| label_44:
0x00002014 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00002016 ldr r6, [r3] | r6 = *(r3);
0x00002018 cmp r6, r5 |
| if (r6 != r5) {
0x0000201a beq 0x2032 |
0x0000201c cmp r4, 0 |
| if (r4 == 0) {
0x0000201e beq 0x2104 | goto label_50;
| }
0x00002020 ldr r3, [pc, 0x1c0] |
0x00002022 add r3, pc | r3 = 0x420a;
0x00002024 ldr r0, [r3, 4] | r0 = imp.__aeabi_unwind_cpp_pr0;
| label_18:
0x00002026 ldr r3, [sp, 8] | r3 = var_8h_2;
0x00002028 mov r2, r5 | r2 = r5;
0x0000202a ldr r1, [sp, 0xc] | r1 = var_ch_2;
0x0000202c str r6, [sp] | *(sp) = r6;
0x0000202e bl 0x1914 | r0 = fcn_00001914 (r0, r1, r2, r3, r4);
| }
0x00002032 bl 0x1754 | fcn_00001754 ();
0x00002036 movs r0, 0 | r0 = 0;
0x00002038 blx 0xe58 | fcn_00000e58 ();
0x0000203a invalid |
| label_48:
0x0000203c blx 0xe64 | r0 = fcn_00000e64 ();
0x00002040 mov sl, r0 | sl = r0;
0x00002042 ldr r0, [r0] | r0 = *(r0);
0x00002044 cmp r0, 0x7e |
| if (r0 != 0x7e) {
0x00002046 bne 0x2140 | goto label_51;
| }
0x00002048 add.w ip, sp, 0x78 |
0x0000204c add.w lr, r6, 0x41 | lr = r6 + 0x41;
0x00002050 movs r3, 1 | r3 = 1;
0x00002052 str r7, [sp, 0x18] | var_18h = r7;
0x00002054 str r3, [sp, 0x74] | var_74h_2 = r3;
| do {
0x00002056 ldr r0, [r4] | r0 = *(r4);
0x00002058 adds r4, 0x10 | r4 += 0x10;
0x0000205a ldr r1, [r4, -0xc] | r1 = *((r4 - 0xc));
0x0000205e mov r7, ip | r7 = ip;
0x00002060 ldr r2, [r4, -0x8] | r2 = *((r4 - 0x8));
0x00002064 ldr r3, [r4, -0x4] | r3 = *((r4 - 0x4));
0x00002068 cmp r4, lr |
0x0000206a stm r7!, {r0, r1, r2, r3} | *(r7!) = r0;
| *((r7! + 4)) = r1;
| *((r7! + 8)) = r2;
| *((r7! + 12)) = r3;
0x0000206c mov ip, r7 |
0x0000206e bne 0x2056 |
| } while (r4 != lr);
0x00002070 cmn.w r8, 3 |
0x00002074 mov.w r3, 0x40 | r3 = 0x40;
0x00002078 ldr r7, [sp, 0x18] | r7 = var_18h;
0x0000207a str r3, [sp, 0xb8] | var_b8h = r3;
| if (r8 == 3) {
0x0000207c beq 0x20cc | goto label_52;
| }
| label_17:
0x0000207e ldr r1, [pc, 0x168] |
0x00002080 movs r3, 0x48 | r3 = 0x48;
0x00002082 str r3, [sp] | *(sp) = r3;
0x00002084 mov r2, r5 | r2 = r5;
0x00002086 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00002088 movw r0, 0x135 | r0 = 0x135;
0x0000208c add r1, pc | r1 = 0x427a;
0x0000208e str.w r8, [sp, 4] | __asm ("str.w r8, [var_4h]");
0x00002092 blx 0xe28 | fcn_00000e28 ();
0x00002096 adds r0, 1 | r0++;
| if (r0 == 1) {
0x00002098 beq 0x2124 | goto label_53;
| }
0x0000209a ldr r3, [pc, 0x150] |
0x0000209c add r3, pc |
0x0000209e ldr r3, [r3] | r3 = imp.__aeabi_unwind_cpp_pr0;
0x000020a0 lsls r3, r3, 0x1e | r3 <<= 0x1e;
| if (r3 < r3) {
0x000020a2 bmi 0x1ff8 | goto label_15;
| }
0x000020a4 ldr r1, [pc, 0x148] |
0x000020a6 mov r2, fp | r2 = fp;
0x000020a8 movs r0, 1 | r0 = 1;
0x000020aa add r1, pc | r1 = 0x429e;
0x000020ac blx 0xc8c | printf_chk ()
0x000020b0 b 0x1ff8 | goto label_15;
| label_46:
0x000020b2 mov r0, sl | r0 = sl;
0x000020b4 mov r2, r3 | r2 = r3;
0x000020b6 mov r1, r8 | r1 = r8;
0x000020b8 bl 0x11d0 | r0 = fcn_000011d0 (r0);
0x000020bc cmp r0, 0 |
| if (r0 < 0) {
0x000020be blt.w 0x1eee | goto label_13;
| }
0x000020c0 add r7, sp, 0x58 | r7 = sp + 0x58;
0x000020c2 cmp.w r8, 0 |
| if (r8 != 0) {
0x000020c6 bne.w 0x1fc0 | goto label_16;
| }
0x000020ca b 0x1eee | goto label_13;
| label_52:
0x000020cc movs r2, 0 | r2 = 0;
0x000020ce mov r1, r8 | r1 = r8;
0x000020d0 mov r0, r2 | r0 = r2;
0x000020d2 bl 0x11d0 | r0 = fcn_000011d0 (r0);
0x000020d6 subs.w r8, r0, 0 | r8 = r0 - 0;
| if (r8 >= r0) {
0x000020da bge 0x207e | goto label_17;
| }
0x000020dc ldr.w r0, [sl] | r0 = *(sl);
0x000020e0 blx 0xc44 | strerror (r0);
0x000020e4 ldr r1, [pc, 0x10c] |
0x000020e6 mov r2, r0 | r2 = r0;
0x000020e8 movs r0, 1 | r0 = 1;
0x000020ea add r1, pc | r1 = 0x42e2;
0x000020ec blx 0xc8c | printf_chk ()
0x000020f0 movs r0, 1 | r0 = 1;
0x000020f2 blx 0xe58 | fcn_00000e58 ();
| label_49:
0x000020f6 ldr r1, [pc, 0x100] |
0x000020f8 mov r2, fp | r2 = fp;
0x000020fa movs r0, 1 | r0 = 1;
0x000020fc add r1, pc | r1 = 0x42fa;
0x000020fe blx 0xc8c | printf_chk ()
0x00002102 b 0x1ff8 | goto label_15;
| label_50:
0x00002104 mov r0, r4 | r0 = r4;
0x00002106 b 0x2026 | goto label_18;
| label_38:
0x00002108 ldr r0, [pc, 0xf0] |
0x0000210a ldr r3, [pc, 0x70] | r3 = *(0x217e);
0x0000210c add r0, pc | r0 = 0x430c;
0x0000210e b 0x1f5c | goto label_19;
| label_43:
0x00002110 addw r0, sl, 0x40f | __asm ("addw r0, sl, 0x40f");
0x00002114 b 0x1e1c | goto label_20;
| label_42:
0x00002116 ldr r0, [pc, 0xe8] |
0x00002118 add r0, pc | r0 = 0x431e;
0x0000211a blx 0xdc8 | fcn_00000dc8 ();
0x0000211e movs r0, 1 | r0 = 1;
0x00002120 blx 0xe58 | fcn_00000e58 ();
| label_53:
0x00002124 ldr.w r0, [sl] | r0 = *(sl);
0x00002128 cmp r0, 0x7a |
| if (r0 == 0x7a) {
0x0000212a beq 0x2162 | goto label_54;
| }
0x0000212c blx 0xc44 | strerror (r0);
0x00002130 ldr r1, [pc, 0xd0] |
0x00002132 mov r3, r0 | r3 = r0;
0x00002134 mov r2, fp | r2 = fp;
0x00002136 movs r0, 1 | r0 = 1;
0x00002138 add r1, pc | r1 = 0x4340;
0x0000213a blx 0xc8c | printf_chk ()
0x0000213e b 0x1f68 | goto label_21;
| label_51:
0x00002140 blx 0xc44 | strerror (r0);
0x00002144 ldr r1, [pc, 0xc0] |
0x00002146 mov r2, r0 | r2 = r0;
0x00002148 movs r0, 1 | r0 = 1;
0x0000214a mov r8, r7 | r8 = r7;
0x0000214c add r1, pc | r1 = 0x4358;
0x0000214e blx 0xc8c | printf_chk ()
0x00002152 ldr.w r3, [sl] | r3 = *(sl);
0x00002156 cmp r3, 0x16 |
| if (r3 != 0x16) {
0x00002158 bne.w 0x1f68 | goto label_21;
| }
0x0000215c ldr r1, [pc, 0xac] |
0x0000215e add r1, pc | r1 = 0x436e;
0x00002160 b 0x1ef4 | goto label_22;
| label_54:
0x00002162 ldr r0, [pc, 0xac] |
0x00002164 add r0, pc | r0 = 0x437a;
0x00002166 blx 0xdc8 | fcn_00000dc8 ();
0x0000216a b 0x1f68 | goto label_21;
| }
[*] Function printf used 19 times e4crypt