[*] Binary protection state of dcore
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH No Symbols
[*] Function fprintf tear down of dcore
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/dcore @ 0x12d8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000012d8 () | void fcn_000012d8 (int16_t arg1, int16_t arg2, pid_t arg3, pid_t arg4) {
| int16_t var_0h;
| int16_t var_4h_2;
| int16_t var_8h_2;
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_14h;
| FILE * stream;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int32_t var_24h_2;
| int16_t var_2ch;
| int32_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_50h;
| int16_t var_58h;
| int16_t var_59h;
| int16_t var_5ah;
| int16_t var_5bh;
| int16_t var_5ch;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| pid_t var_84h_2;
| int16_t var_d4h;
| int16_t var_0h_6;
| int16_t var_4h;
| int16_t var_84h;
| int16_t var_0h_5;
| int16_t var_1ach;
| int16_t fildes;
| pid_t pid;
| int16_t var_204h;
| int16_t var_20ch;
| int16_t var_0h_2;
| int32_t var_0h_3;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000012d8 ssub8mi fp, r6, r0 | __asm ("ssub8mi fp, r6, r0");
0x000012dc ldr r2, [pc, 0x88] |
0x000012de mov r4, r3 | r4 = r3;
0x000012e0 sub sp, 0x14 |
0x000012e2 movs r7, 5 | r7 = 5;
0x000012e4 ldr r3, [pc, 0x84] | r3 = *(0x136c);
0x000012e6 mov r5, r0 | r5 = r0;
0x000012e8 add r2, pc | r2 = 0x2654;
0x000012ea ldr r3, [r2, r3] |
0x000012ec movs r2, 0xc | r2 = 0xc;
0x000012ee ldr r3, [r3] | r3 = *(0x2654);
0x000012f0 str r3, [sp, 0xc] | var_ch = r3;
0x000012f2 mov.w r3, 0 | r3 = 0;
0x000012f6 str r1, [sp, 8] | var_8h = r1;
0x000012f8 mov r1, sp | r1 = sp;
0x000012fa strd r7, r4, [sp] | __asm ("strd r7, r4, [sp]");
0x000012fe bl 0x1ae0 | fcn_00001ae0 (r0, r1, r2);
0x00001302 ldr r1, [pc, 0x6c] |
0x00001304 mov r2, r7 | r2 = r7;
0x00001306 mov r0, r5 | r0 = r5;
0x00001308 add r1, pc | r1 = 0x267e;
0x0000130a bl 0x1ae0 | fcn_00001ae0 (r0, r1, r2);
0x0000130e movs r1, 0 | r1 = 0;
0x00001310 mov r0, r5 | r0 = r5;
0x00001312 bl 0x1b18 | fcn_00001b18 (r0, r1);
0x00001316 movs r1, 0 | r1 = 0;
0x00001318 mov r0, r5 | r0 = r5;
0x0000131a bl 0x1b18 | fcn_00001b18 (r0, r1);
0x0000131e movs r1, 0 | r1 = 0;
0x00001320 mov r0, r5 | r0 = r5;
0x00001322 bl 0x1b18 | fcn_00001b18 (r0, r1);
0x00001326 mov r1, r6 | r1 = r6;
0x00001328 adds r6, r4, 3 | r6 = r4 + 3;
0x0000132a mov r2, r4 | r2 = r4;
0x0000132c mov r0, r5 | r0 = r5;
0x0000132e bic r6, r6, 3 | r6 = BIT_MASK (r6, 3);
0x00001332 bl 0x1ae0 | fcn_00001ae0 (r0, r1, r2);
0x00001336 subs r6, r6, r4 | r6 -= r4;
| if (r6 == r6) {
0x00001338 beq 0x134a | goto label_7;
| }
0x0000133a movs r4, 0 | r4 = 0;
| do {
0x0000133c movs r1, 0 | r1 = 0;
0x0000133e mov r0, r5 | r0 = r5;
0x00001340 adds r4, 1 | r4++;
0x00001342 bl 0x1b18 | fcn_00001b18 (r0, r1);
0x00001346 cmp r6, r4 |
0x00001348 bne 0x133c |
| } while (r6 != r4);
| label_7:
0x0000134a ldr r2, [pc, 0x28] |
0x0000134c ldr r3, [pc, 0x1c] | r3 = *(0x136c);
0x0000134e add r2, pc | r2 = 0x26c8;
0x00001350 ldr r3, [r2, r3] | r3 = *(0x26c8);
0x00001352 ldr r2, [r3] | r2 = *(0x26c8);
0x00001354 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00001356 eors r2, r3 | r2 ^= r3;
0x00001358 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000135c bne 0x1362 |
0x0000135e add sp, 0x14 |
0x00001360 pop {r4, r5, r6, r7, pc} |
| }
0x00001362 blx 0xfac | fprintf_chk ()
0x00001366 nop |
0x00001368 subs r3, 0xe4 | r3 -= 0xe4;
0x0000136a movs r0, r0 |
0x0000136c lsls r4, r3, 4 | r4 = r3 << 4;
0x0000136e movs r0, r0 |
0x00001370 adds r4, r5, r6 | r4 = r5 + r6;
0x00001372 movs r0, r0 |
0x00001374 subs r3, 0x7e | r3 -= 0x7e;
0x00001376 movs r0, r0 |
0x00001378 push {r4, r5, r6, r7, lr} |
0x0000137a mov r7, r0 | r7 = r0;
0x0000137c ldr r4, [pc, 0x84] |
0x0000137e sub.w sp, sp, 0x20c |
0x00001382 mov r5, sp | r5 = sp;
0x00001384 mov r3, r1 | r3 = r1;
0x00001386 ldr r0, [pc, 0x80] | r0 = *(0x140a);
0x00001388 movs r1, 1 | r1 = 1;
0x0000138a add r4, pc | r4 = 0x2792;
0x0000138c ldr r2, [pc, 0x7c] |
0x0000138e ldr r0, [r4, r0] |
0x00001390 add r2, pc | r2 = 0x27a0;
0x00001392 ldr r0, [r0] | r0 = *(0x2792);
0x00001394 str r0, [sp, 0x204] | var_204h = r0;
0x00001396 mov.w r0, 0 | r0 = 0;
0x0000139a mov r0, r5 | r0 = r5;
0x0000139c blx 0xef8 | elf_errmsg ();
0x000013a0 ldr r1, [pc, 0x6c] |
0x000013a2 ldr r0, [r5] | r0 = *(r5);
0x000013a4 add r1, pc | r1 = 0x27b8;
0x000013a6 blx 0xe84 | r0 = fcn_00000e84 ();
| if (r0 == 0) {
0x000013aa cbz r0, 0x13f2 | goto label_8;
| }
0x000013ac mov r4, r0 | r4 = r0;
0x000013ae ldr r0, [r5] | r0 = *(r5);
0x000013b0 add r5, sp, 4 | r5 += pid;
0x000013b2 blx 0xed4 | read (r0, r1, r2);
0x000013b6 mov r3, r4 | r3 = r4;
0x000013b8 mov.w r2, 0x200 | r2 = 0x200;
0x000013bc movs r1, 1 | r1 = 1;
0x000013be mov r0, r5 | r0 = r5;
0x000013c0 blx 0x1018 | r0 = kill (r0, r1);
0x000013c4 mov r6, r0 | r6 = r0;
0x000013c6 mov r0, r4 | r0 = r4;
0x000013c8 blx 0xe30 | fcn_00000e30 ();
0x000013cc mov r3, r6 | r3 = r6;
0x000013ce mov r2, r5 | r2 = r5;
0x000013d0 movs r1, 6 | r1 = 6;
0x000013d2 mov r0, r7 | r0 = r7;
0x000013d4 bl 0x12d8 | fcn_000012d8 (r0, r1, r2, r3);
| do {
0x000013d8 ldr r2, [pc, 0x38] |
0x000013da ldr r3, [pc, 0x2c] | r3 = *(0x140a);
0x000013dc add r2, pc | r2 = 0x27f4;
0x000013de ldr r3, [r2, r3] | r3 = *(0x27f4);
0x000013e0 ldr r2, [r3] | r2 = *(0x27f4);
0x000013e2 ldr r3, [sp, 0x204] | r3 = var_204h;
0x000013e4 eors r2, r3 | r2 ^= r3;
0x000013e6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000013ea bne 0x1400 | goto label_9;
| }
0x000013ec add.w sp, sp, 0x20c |
0x000013f0 pop {r4, r5, r6, r7, pc} |
| label_8:
0x000013f2 ldr r0, [r5] | r0 = *(r5);
0x000013f4 blx 0xea0 | fcn_00000ea0 ();
0x000013f8 ldr r0, [r5] | r0 = *(r5);
0x000013fa blx 0xed4 | read (r0, r1, r2);
0x000013fe b 0x13d8 |
| } while (1);
| label_9:
0x00001400 blx 0xfac | fprintf_chk ()
0x00001404 subs r3, 0x42 | r3 -= 0x42;
0x00001406 movs r0, r0 |
0x00001408 lsls r4, r3, 4 | r4 = r3 << 4;
0x0000140a movs r0, r0 |
0x0000140c adds r0, r2, r1 | r0 = r2 + r1;
0x0000140e movs r0, r0 |
0x00001410 adds r4, r1, r1 | r4 = r1 + r1;
0x00001412 movs r0, r0 |
0x00001414 subs r2, 0xf0 | r2 -= 0xf0;
0x00001416 movs r0, r0 |
0x00001418 ldr r2, [pc, 0xa8] |
0x0000141a ldr r3, [pc, 0xac] | r3 = *(0x14ca);
0x0000141c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00001420 sub sp, 0x1b4 |
0x00001422 add r2, pc | r2 = 0x28ea;
0x00001424 mov r5, r1 | r5 = r1;
0x00001426 mov sb, r0 | sb = r0;
0x00001428 add.w sl, sp, 0x84 | sl += var_84h;
0x0000142c ldr r3, [r2, r3] |
0x0000142e mov r4, sl | r4 = sl;
0x00001430 add r7, sp, 0x1ac | r7 += var_1ach;
0x00001432 ldr r3, [r3] | r3 = *(0x28ea);
0x00001434 str r3, [sp, 0x1ac] | var_1ach = r3;
0x00001436 mov.w r3, 0 | r3 = 0;
0x0000143a blx 0x1078 | cxa_finalize ();
0x0000143e movs r3, 0 | r3 = 0;
0x00001440 mov r8, r0 | r8 = r0;
0x00001442 str r3, [r0] | *(r0) = r3;
0x00001444 mov fp, r3 |
0x00001446 bl 0x2980 | r0 = fcn_00002980 ();
0x0000144a mov r6, r0 | r6 = r0;
0x0000144c b 0x1458 |
| while (fp != 0) {
| label_0:
0x0000144e str r0, [r4], 4 | *(r4) = r0;
| r4 += 4;
0x00001452 cmp r4, r7 |
0x00001454 add fp, r6 |
| if (r4 == r7) {
0x00001456 beq 0x1492 | goto label_10;
| }
0x00001458 movs r3, 0 | r3 = 0;
0x0000145a mov r2, fp | r2 = fp;
0x0000145c mov r1, r5 | r1 = r5;
0x0000145e movs r0, 3 | r0 = 3;
0x00001460 blx 0xe3c | fcn_00000e3c ();
0x00001464 cmp.w fp, 0 |
0x00001468 it eq |
| if (fp == 0) {
0x0000146a cmpeq r0, -1 | __asm ("cmpeq r0, -1");
| }
0x0000146e bne 0x144e |
| }
0x00001470 ldr.w r3, [r8] | r3 = *(r8);
0x00001474 cmp r3, 0 |
| if (r3 == 0) {
0x00001476 beq 0x144e | goto label_0;
| }
0x00001478 ldr r2, [pc, 0x50] |
0x0000147a ldr r3, [pc, 0x4c] | r3 = *(0x14ca);
0x0000147c add r2, pc | r2 = 0x294c;
0x0000147e ldr r3, [r2, r3] | r3 = *(0x294c);
0x00001480 ldr r2, [r3] | r2 = *(0x294c);
0x00001482 ldr r3, [sp, 0x1ac] | r3 = var_1ach;
0x00001484 eors r2, r3 | r2 ^= r3;
0x00001486 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000148a bne 0x14be |
0x0000148c add sp, 0x1b4 |
0x0000148e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_10:
0x00001492 add r4, sp, 4 | r4 += var_4h;
0x00001494 mov r1, r5 | r1 = r5;
0x00001496 mov r3, r4 | r3 = r4;
0x00001498 movs r2, 0 | r2 = 0;
0x0000149a movw r0, 0x4202 | r0 = 0x4202;
0x0000149e blx 0xe3c | fcn_00000e3c ();
0x000014a2 mov r2, r4 | r2 = r4;
0x000014a4 mov r4, sp | r4 = sp;
0x000014a6 mov r1, sl | r1 = sl;
0x000014a8 mov r3, r4 | r3 = r4;
0x000014aa mov r0, r5 | r0 = r5;
0x000014ac bl 0x2930 | fcn_00002930 (r0, r1, r2, r3);
0x000014b0 ldr r3, [r4] | r3 = *(r4);
0x000014b2 mov r2, r0 | r2 = r0;
0x000014b4 movs r1, 1 | r1 = 1;
0x000014b6 mov r0, sb | r0 = sb;
0x000014b8 bl 0x12d8 | fcn_000012d8 (r0, r1, r2, r3);
0x000014ba vaba.u8 q7, q15, q6 | __asm ("vaba.u8 q7, q15, q6");
| }
0x000014be blx 0xfac | fprintf_chk ()
0x000014c2 nop |
0x000014c4 subs r2, 0xaa | r2 -= 0xaa;
0x000014c6 movs r0, r0 |
0x000014c8 lsls r4, r3, 4 | r4 = r3 << 4;
0x000014ca movs r0, r0 |
0x000014cc subs r2, 0x50 | r2 -= 0x50;
0x000014ce movs r0, r0 |
0x000014d0 ldr.w r2, [pc, 0x484] | r2 = *(0x00001958);
0x000014d4 ldr.w r3, [pc, 0x484] |
0x000014d8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000014dc movs r6, 0 | r6 = 0;
0x000014de add r2, pc | r2 += pc;
0x000014e0 sub sp, 0xdc |
0x000014e2 mov r8, r0 | r8 = r0;
0x000014e4 mov r5, r1 | r5 = r1;
0x000014e6 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000014e8 movs r4, 1 | r4 = 1;
0x000014ea ldr.w r7, [pc, 0x474] | r7 = *(0x00001960);
0x000014ee mov.w sl, 0x34 | sl = 0x34;
0x000014f2 ldr r3, [r3] | r3 = *(0x195c);
0x000014f4 str r3, [sp, 0xd4] | var_d4h = r3;
0x000014f6 mov.w r3, 0 | r3 = 0;
0x000014fa str r6, [sp, 0x38] | var_38h = r6;
0x000014fc bl 0x2978 | fcn_00002978 ();
0x00001500 ldr.w r3, [pc, 0x460] | r3 = *(0x00001964);
0x00001504 add r7, pc | r7 += pc;
0x00001506 movs r1, 0x34 | r1 = 0x34;
0x00001508 str r0, [r7] | *(r7) = r0;
0x0000150a movs r0, 1 | r0 = 1;
0x0000150c add r3, pc | r3 += pc;
0x0000150e str r3, [sp, 0x18] | stream = r3;
0x00001510 blx 0xe78 | fcn_00000e78 ();
0x00001514 movw r3, 0x457f |
0x00001516 strh r7, [r7, r5] | *((r7 + r5)) = r7;
0x00001518 strb r6, [r0, 8] | *((r0 + 8)) = r6;
0x0000151a movt r3, 0x464c | r3 = 0x464c457f;
0x0000151e strb r4, [r0, 6] | *((r0 + 6)) = r4;
0x00001520 str r3, [r0] | *(r0) = r3;
0x00001522 movw r3, 0x101 | r3 = 0x101;
0x00001526 strh r3, [r0, 4] | *((r0 + 4)) = r3;
0x00001528 mov sb, r0 | sb = r0;
0x0000152a bl 0x2974 | fcn_00002974 ();
0x0000152e movs r3, 4 | r3 = 4;
0x00001530 strh.w r0, [sb, 0x12] | *((sb + 0x12)) = r0;
0x00001534 strh.w r3, [sb, 0x10] | *((sb + 0x10)) = r3;
0x00001538 bl 0x2970 | fcn_00002970 ();
0x0000153c str.w r4, [sb, 0x14] | __asm ("str.w r4, [sb, 0x14]");
0x00001540 str.w r0, [sb, 0x24] | __asm ("str.w r0, [sb, 0x24]");
0x00001544 mov r0, r8 | r0 = r8;
0x00001546 strh.w sl, [sb, 0x28] | *((sb + 0x28)) = sl;
0x0000154a bl 0x1c5c | fcn_00001c5c (r0);
0x0000154e adds r0, 1 | r0++;
| if (r0 == 1) {
0x00001550 beq.w 0x17c6 | goto label_11;
| }
0x00001554 ldr r1, [r7] | r1 = *(r7);
0x00001556 mov r0, r8 | r0 = r8;
0x00001558 bl 0x1fb8 | r0 = fcn_00001fb8 (r0, r1, r2);
0x0000155c mov r7, r0 | r7 = r0;
0x0000155e cmp r0, 0 |
| if (r0 == 0) {
0x00001560 beq.w 0x17c6 | goto label_11;
| }
0x00001564 ldr r0, [r0, 0x14] | r0 = *((r0 + 0x14));
0x00001566 movs r1, 0x20 | r1 = 0x20;
0x00001568 add.w fp, sp, 0x3c |
0x0000156c add r0, r4 | r0 += r4;
0x0000156e blx 0xe78 | fcn_00000e78 ();
0x00001572 str r0, [sp, 0x1c] | var_1ch = r0;
0x00001574 mov.w r0, 0x400 | r0 = 0x400;
0x00001578 bl 0x1a64 | void (*0x1a64)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000157c ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x0000157e mov r1, r6 | r1 = r6;
0x00001580 ldr r6, [pc, 0x3e4] |
0x00001582 movs r2, 0x7c | r2 = 0x7c;
0x00001584 str r0, [sp, 0x38] | var_38h = r0;
0x00001586 add r3, r4 | r3 += r4;
0x00001588 str.w sl, [sb, 0x1c] | __asm ("str.w sl, [sb, 0x1c]");
0x0000158c uxth r3, r3 | r3 = (int16_t) r3;
0x0000158e add r6, pc | r6 = 0x2efa;
0x00001590 str r6, [sp, 0x14] | var_14h = r6;
0x00001592 strh.w r3, [sb, 0x2c] | *((sb + 0x2c)) = r3;
0x00001596 lsls r3, r3, 5 | r3 <<= 5;
0x00001598 str r3, [sp, 0x10] | var_10h = r3;
0x0000159a add r3, sp, 0x58 | r3 += var_58h;
0x0000159c mov r0, r3 | r0 = r3;
0x0000159e str r3, [sp, 0x20] | var_20h = r3;
0x000015a0 movs r3, 0x20 | r3 = 0x20;
0x000015a2 strh.w r3, [sb, 0x2a] | *((sb + 0x2a)) = r3;
0x000015a6 blx 0xe90 | fcn_00000e90 ();
0x000015aa ldr r2, [pc, 0x3c0] |
0x000015ac mov r3, r8 | r3 = r8;
0x000015ae mov r1, r4 | r1 = r4;
0x000015b0 mov r0, fp | r0 = fp;
0x000015b2 add r2, pc | r2 = 0x2f24;
0x000015b4 blx 0xef8 | elf_errmsg ();
0x000015b8 mov r1, r6 | r1 = r6;
0x000015ba ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000015bc blx 0xe84 | r0 = fcn_00000e84 ();
0x000015c0 mov r6, r0 | r6 = r0;
0x000015c2 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000015c4 cmp r6, 0 |
| if (r6 == 0) {
0x000015c6 beq.w 0x1a52 | goto label_12;
| }
0x000015ca add.w sl, sp, 0x84 | sl += var_84h_2;
0x000015ce blx 0xed4 | read (r0, r1, r2);
0x000015d2 mov r1, r4 | r1 = r4;
0x000015d4 movs r2, 0x50 | r2 = 0x50;
0x000015d6 mov r3, r6 | r3 = r6;
0x000015d8 mov r0, sl | r0 = sl;
0x000015da blx 0x1018 | kill (r0, r1);
0x000015de mov r0, r6 | r0 = r6;
0x000015e0 blx 0xe30 | fcn_00000e30 ();
0x000015e4 ldr r2, [pc, 0x388] |
0x000015e6 mov r1, r4 | r1 = r4;
0x000015e8 mov r3, r8 | r3 = r8;
0x000015ea mov r0, fp | r0 = fp;
0x000015ec add r2, pc | r2 = 0x2f60;
0x000015ee blx 0xef8 | elf_errmsg ();
0x000015f2 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000015f4 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000015f6 blx 0xe84 | r0 = fcn_00000e84 ();
0x000015fa mov r4, r0 | r4 = r0;
0x000015fc ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000015fe cmp r4, 0 |
| if (r4 == 0) {
0x00001600 beq.w 0x1a52 | goto label_12;
| }
0x00001604 blx 0xed4 | read (r0, r1, r2);
0x00001608 add r3, sp, 0x40 | r3 += var_40h;
0x0000160a ldr r1, [pc, 0x368] |
0x0000160c str r3, [sp, 0xc] | var_ch_2 = r3;
0x0000160e add r3, sp, 0x44 | r3 += var_44h;
0x00001610 str r3, [sp, 8] | var_8h_2 = r3;
0x00001612 add r3, sp, 0x70 | r3 += var_70h;
0x00001614 str r3, [sp, 4] | var_4h_2 = r3;
0x00001616 add r3, sp, 0x6c | r3 += var_6ch;
0x00001618 add r1, pc | r1 = 0x2f92;
0x0000161a str r3, [sp] | *(sp) = r3;
0x0000161c ldr r6, [pc, 0x358] |
0x0000161e add r3, sp, 0x68 | r3 += var_68h;
0x00001620 add.w r2, sp, 0x59 | r2 += var_59h;
0x00001624 mov r0, r4 | r0 = r4;
0x00001626 blx 0xde8 | fcn_00000de8 ();
0x0000162a ldrb.w fp, [sp, 0x59] | fp = var_59h;
0x0000162e add r6, pc | r6 = 0x2faa;
0x00001630 mov r0, r6 | r0 = r6;
0x00001632 mov r1, fp | r1 = fp;
0x00001634 blx 0xe6c | r0 = fcn_00000e6c ();
| if (r0 != 0) {
0x00001638 cbz r0, 0x163e |
0x0000163a subs r0, r0, r6 | r0 -= r6;
0x0000163c uxtb r0, r0 | r0 = (int8_t) r0;
| }
0x0000163e ldr r3, [sp, 0x44] | r3 = var_44h;
0x00001640 sub.w fp, fp, 0x5a |
0x00001642 lsrs r2, r3, 0xd | r2 = r3 >> 0xd;
0x00001644 clz fp, fp |
0x00001648 strb.w r0, [sp, 0x58] | var_58h = r0;
0x0000164c lsr.w fp, fp, 5 |
0x00001650 mov r0, r4 | r0 = r4;
0x00001652 str r3, [sp, 0x5c] | var_5ch = r3;
0x00001654 add r4, sp, 0x38 | r4 += var_38h;
0x00001656 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00001658 strb.w fp, [sp, 0x5a] | var_5ah = fp;
0x0000165c strb.w r3, [sp, 0x5b] | var_5bh = r3;
0x00001660 blx 0xe30 | fcn_00000e30 ();
0x00001662 invalid |
0x00001666 movs r2, 0x10 | r2 = 0x10;
0x00001668 add r0, sp, 0x74 | r0 += var_74h;
0x0000166a blx 0xe24 | fcn_00000e24 ();
0x0000166e vldr d16, [pc, 0x2e0] | __asm ("vldr d16, aav.0x000000ff");
0x00001672 movs r3, 3 | r3 = 3;
0x00001674 movs r2, 0xc | r2 = 0xc;
0x00001676 add r1, sp, 0x48 | r1 += var_48h;
0x00001678 mov r0, r4 | r0 = r4;
0x0000167a vstr d16, [sp, 0x48] | __asm ("vstr d16, [sp, 0x48]");
0x0000167e str r3, [sp, 0x50] | var_50h = r3;
0x00001680 str.w r8, [sp, 0x64] | __asm ("str.w r8, [var_64h]");
0x00001684 bl 0x1ae0 | fcn_00001ae0 (r0, r1, r2);
0x00001688 ldr r1, [pc, 0x2f0] |
0x0000168a movs r2, 5 | r2 = 5;
0x0000168c mov r0, r4 | r0 = r4;
0x0000168e add r1, pc | r1 = 0x300e;
0x00001690 bl 0x1ae0 | fcn_00001ae0 (r0, r1, r2);
0x00001694 movs r1, 0 | r1 = 0;
0x00001696 mov r0, r4 | r0 = r4;
0x00001698 bl 0x1b18 | fcn_00001b18 (r0, r1);
0x0000169c movs r1, 0 | r1 = 0;
0x0000169e mov r0, r4 | r0 = r4;
0x000016a0 bl 0x1b18 | fcn_00001b18 (r0, r1);
0x000016a4 movs r1, 0 | r1 = 0;
0x000016a6 mov r0, r4 | r0 = r4;
0x000016a8 bl 0x1b18 | fcn_00001b18 (r0, r1);
0x000016ac ldr r1, [sp, 0x20] | r1 = var_20h;
0x000016ae movs r2, 0x7c | r2 = 0x7c;
0x000016b0 mov r0, r4 | r0 = r4;
0x000016b2 bl 0x1ae0 | fcn_00001ae0 (r0, r1, r2);
| label_6:
0x000016b6 mov r1, r8 | r1 = r8;
0x000016b8 mov r0, r4 | r0 = r4;
0x000016ba bl 0x1418 | void (*0x1418)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000016be ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x000016c0 cmp r2, 0 |
0x000016c2 itt gt |
| if (r2 <= 0) {
0x000016c4 movgt r6, 0 | r6 = 0;
| }
| if (r2 <= 0) {
0x000016c6 movgt sl, r4 | sl = r4;
| }
| if (r2 <= 0) {
0x000016c8 ble 0x16f2 | goto label_13;
| }
| do {
0x000016ca ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x000016cc ldr.w r4, [r3, r6, lsl 2] | offset_0 = r6 << 2;
| r4 = *((r3 + offset_0));
0x000016d0 cmp r8, r4 |
| if (r8 != r4) {
0x000016d2 beq 0x16ea |
0x000016d4 mov r1, r8 | r1 = r8;
0x000016d6 mov r0, r4 | r0 = r4;
0x000016d8 bl 0x1c04 | fcn_00001c04 (r0, r1);
0x000016dc adds r0, 1 | r0++;
| if (r0 != 1) {
0x000016de beq 0x16e8 |
0x000016e0 mov r1, r4 | r1 = r4;
0x000016e2 mov r0, sl | r0 = sl;
0x000016e4 bl 0x1418 | void (*0x1418)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| }
0x000016e8 ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
| }
0x000016ea adds r6, 1 | r6++;
0x000016ec cmp r2, r6 |
0x000016ee bgt 0x16ca |
| } while (r2 > r6);
0x000016f0 mov r4, sl | r4 = sl;
| label_13:
0x000016f2 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000016f4 mov r0, r4 | r0 = r4;
0x000016f6 mov r1, r8 | r1 = r8;
0x000016f8 adds r3, 0x34 | r3 += 0x34;
0x000016fa mov r4, r3 | r4 = r3;
0x000016fc bl 0x1378 | void (*0x1378)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00001700 ldr r6, [sp, 0x1c] | r6 = var_1ch;
0x00001702 movs r0, 0 | r0 = 0;
0x00001704 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00001706 movs r2, 1 | r2 = 1;
0x00001708 str r4, [sp, 0x20] | var_20h = r4;
0x0000170a str r4, [r6, 4] | *((r6 + 4)) = r4;
0x0000170c ldr r4, [r3] | r4 = *(r3);
0x0000170e movs r3, 4 | r3 = 4;
0x00001710 str r3, [r6] | *(r6) = r3;
0x00001712 str r0, [r6, 8] | *((r6 + 8)) = r0;
0x00001714 mov r1, r4 | r1 = r4;
0x00001716 str r0, [r6, 0x14] | *((r6 + 0x14)) = r0;
0x00001718 blx 0xeac | fcn_00000eac ();
0x0000171c ldr r2, [pc, 0x260] |
0x0000171e adds r3, r4, 3 | r3 = r4 + 3;
0x00001720 str r0, [r6, 0x10] | *((r6 + 0x10)) = r0;
0x00001722 bic r3, r3, 3 | r3 = BIT_MASK (r3, 3);
0x00001726 add r2, pc | r2 = 0x30aa;
0x00001728 ldr r1, [r2] | r1 = *(0x30aa);
0x0000172a ldrd r2, r6, [r7, 0x14] | __asm ("ldrd r2, r6, [r7, 0x14]");
0x0000172e add.w lr, r1, -1 | lr = r1 + -1;
0x00001732 rsb.w ip, r1, 0 |
0x00001736 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00001738 add r3, lr | r3 += lr;
0x0000173a cmp r2, 0 |
0x0000173c add r3, r1 | r3 += r1;
0x0000173e and.w sl, r3, ip | sl = r3 & ip;
0x00001742 it le |
| if (r2 > 0) {
0x00001744 movle r3, sl | r3 = sl;
| }
| if (r2 <= 0) {
0x00001746 ble 0x180a | goto label_14;
| }
0x00001748 ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x0000174a strd sb, r7, [sp, 0x24] | __asm ("strd sb, r7, [var_24h]");
0x0000174e strd r8, r5, [sp, 0x30] | __asm ("strd r8, r5, [var_34h]");
0x00001752 mov r5, sl | r5 = sl;
0x00001754 strd ip, lr, [sp, 0x10] | __asm ("strd ip, lr, [var_14h]");
0x00001758 add.w r3, r4, r2, lsl 5 | r3 = r4 + (r2 << 5);
0x0000175c str.w sl, [sp, 0x2c] | __asm ("str.w sl, [var_2ch]");
0x00001760 mov sb, r3 | sb = r3;
0x00001762 b 0x178e |
| while (r1 != 0) {
0x00001764 add.w sl, r0, r5 | sl = r0 + r5;
0x00001768 mov r1, r0 | r1 = r0;
0x0000176a movs r2, 1 | r2 = 1;
0x0000176c movs r0, 0 | r0 = 0;
0x0000176e blx 0xeac | fcn_00000eac ();
0x00001772 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00001774 add.w r5, r3, sl | r5 = r3 + sl;
0x00001778 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0000177a ands r5, r3 | r5 &= r3;
| label_1:
0x0000177c str r0, [r4, 0x30] | *((r4 + 0x30)) = r0;
0x0000177e str.w r8, [r4, 0x28] | __asm ("str.w r8, [r4, 0x28]");
0x00001782 strd r7, fp, [r4, 0x38] | __asm ("strd r7, fp, [r4, 0x38]");
0x00001786 adds r4, 0x20 | r4 += 0x20;
0x00001788 cmp sb, r4 |
0x0000178a ldr r6, [r6, 0x28] | r6 = *((r6 + 0x28));
| if (sb == r4) {
0x0000178c beq 0x17fe | goto label_15;
| }
0x0000178e ldrd r8, r0, [r6] | __asm ("ldrd r8, r0, [r6]");
0x00001792 movs r3, 1 | r3 = 1;
0x00001794 strd r3, r5, [r4, 0x20] | __asm ("strd r3, r5, [r4, 0x20]");
0x00001798 sub.w r0, r0, r8 | r0 -= r8;
0x0000179c str r0, [r4, 0x34] | *((r4 + 0x34)) = r0;
0x0000179e ldr r7, [r6, 0x14] | r7 = *((r6 + 0x14));
0x000017a0 ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x000017a2 ldr r2, [r6, 0x1c] | r2 = *((r6 + 0x1c));
0x000017a4 ubfx r1, r7, 1, 1 | r1 = (r7 >> 1) & ((1 << 1) - 1);
0x000017a8 ldr.w fp, [r6, 0x10] | fp = *((r6 + 0x10));
0x000017ac orrs r1, r3 | r1 |= r3;
0x000017ae cmp r2, 0 |
0x000017b0 ite ne |
| if (r2 == 0) {
0x000017b2 movne r1, 0 | r1 = 0;
| }
| if (r2 != 0) {
0x000017b4 andeq r1, r1, 1 | r1 &= 1;
| }
0x000017b8 cmp r1, 0 |
0x000017ba bne 0x1764 |
| }
0x000017bc movs r2, 1 | r2 = 1;
0x000017be movs r0, 6 | r0 = 6;
0x000017c0 blx 0xeac | fcn_00000eac ();
0x000017c4 b 0x177c | goto label_1;
| label_11:
0x000017c6 ldr r1, [pc, 0x1bc] | r1 = *(0x1986);
0x000017c8 mov r3, r8 | r3 = r8;
0x000017ca ldr r0, [sp, 0x18] | r0 = stream;
0x000017cc ldr r2, [pc, 0x1b8] |
0x000017ce ldr r0, [r0, r1] | r0 = *((r0 + r1));
0x000017d0 movs r1, 1 | r1 = 1;
0x000017d2 add r2, pc | r2 = 0x315e;
0x000017d4 ldr r0, [r0] | r0 = *(r0);
0x000017d6 blx 0xfb8 | fputc (r0, r1);
0x000017da mov r0, r8 | r0 = r8;
0x000017dc bl 0x1bf0 | fcn_00001bf0 (r0);
0x000017e0 movs r0, 1 | r0 = 1;
| label_3:
0x000017e2 ldr r2, [pc, 0x1a8] |
0x000017e4 ldr r3, [pc, 0x174] | r3 = *(0x195c);
0x000017e6 add r2, pc | r2 = 0x3178;
0x000017e8 ldr r3, [r2, r3] | r3 = *(0x3178);
0x000017ea ldr r2, [r3] | r2 = *(0x3178);
0x000017ec ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x000017ee eors r2, r3 | r2 ^= r3;
0x000017f0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000017f4 bne.w 0x1a60 | goto label_16;
| }
0x000017f8 add sp, 0xdc |
0x000017fa pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_15:
0x000017fe mov r3, sl | r3 = sl;
0x00001800 ldrd sb, r7, [sp, 0x24] | __asm ("ldrd sb, r7, [var_24h]");
0x00001804 ldrd sl, r8, [sp, 0x2c] | __asm ("ldrd sl, r8, [var_2ch]");
0x00001808 ldr r5, [sp, 0x34] | r5 = var_34h;
| label_14:
0x0000180a ldr r1, [sp, 0x18] | r1 = stream;
0x0000180c ldr r2, [pc, 0x174] | r2 = *(0x1984);
0x0000180e ldr r6, [r1, r2] | r6 = *((r1 + r2));
0x00001810 movs r1, 1 | r1 = 1;
0x00001812 ldr r2, [pc, 0x17c] |
0x00001814 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00001816 strh r0, [r0] | *(r0) = r0;
0x00001818 ldr r0, [r6] | r0 = *(r6);
0x0000181a add r2, pc | r2 = 0x31b0;
0x0000181c blx 0xfb8 | fputc (r0, r1);
0x00001820 ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x00001822 cmp r2, 0 |
| if (r2 <= 0) {
0x00001824 ble 0x184a | goto label_17;
| }
0x00001826 ldr.w fp, [pc, 0x16c] |
0x0000182a movs r4, 0 | r4 = 0;
0x0000182c add fp, pc | fp = 0x31c6;
| do {
0x0000182e ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00001830 ldr.w r3, [r3, r4, lsl 2] | offset_1 = r4 << 2;
| r3 = *((r3 + offset_1));
0x00001834 cmp r3, r8 |
| if (r3 != r8) {
0x00001836 beq 0x1844 |
0x00001838 mov r2, fp | r2 = fp;
0x0000183a ldr r0, [r6] | r0 = *(r6);
0x0000183c movs r1, 1 | r1 = 1;
0x0000183e blx 0xfb8 | fputc (r0, r1);
0x00001842 ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
| }
0x00001844 adds r4, 1 | r4++;
0x00001846 cmp r2, r4 |
0x00001848 bgt 0x182e |
| } while (r2 > r4);
| label_17:
0x0000184a ldr r1, [r6] | r1 = *(r6);
0x0000184c movs r0, 0xa | r0 = 0xa;
0x0000184e blx 0xfc4 | rewinddir ();
0x00001850 subs.w r2, sl, r4, ror 8 | r2 = sl - (r4 >>> 8);
0x00001854 mov r1, sb | r1 = sb;
0x00001856 mov r0, r5 | r0 = r5;
0x00001858 bl 0x1d64 | fcn_00001d64 (r0, r1, r2);
0x0000185c ldr r2, [r7, 0x14] | r2 = *((r7 + 0x14));
0x0000185e mov r4, r0 | r4 = r0;
0x00001860 ldr r6, [sp, 0x1c] | r6 = var_1ch;
0x00001862 mov r0, r5 | r0 = r5;
0x00001864 adds r2, 1 | r2++;
0x00001866 lsls r2, r2, 5 | r2 <<= 5;
0x00001868 mov r1, r6 | r1 = r6;
0x0000186a bl 0x1d64 | r0 = fcn_00001d64 (r0, r1, r2);
0x0000186e add r4, r0 | r4 += r0;
0x00001870 mov r0, sb | r0 = sb;
0x00001872 blx 0xed4 | read (r0, r1, r2);
0x00001876 mov r0, r6 | r0 = r6;
0x00001878 blx 0xed4 | read (r0, r1, r2);
0x0000187c ldr r3, [sp, 0x20] | r3 = var_20h;
0x0000187e subs.w fp, r3, r4 |
| if (fp == r3) {
0x00001882 beq.w 0x1a48 | goto label_18;
| }
0x00001886 ldr.w sb, [pc, 0x110] | sb = *(0x00001998);
0x0000188a movs r6, 0 | r6 = 0;
0x0000188c add sb, pc | sb += pc;
0x0000188e add.w sb, sb, 8 | sb += 8;
0x00001892 b 0x189c |
| while (r1 != r0) {
0x00001894 add r6, r0 | r6 += r0;
0x00001896 cmp fp, r6 |
| if (fp < r6) {
0x00001898 bls.w 0x1a48 | goto label_18;
| }
0x0000189c sub.w r2, fp, r6 | r2 = fp - r6;
0x000018a0 mov r1, sb | r1 = sb;
0x000018a2 cmp.w r2, 0x400 |
0x000018a6 mov r0, r5 | r0 = r5;
0x000018a8 it hs |
| if (r2 < 0x400) {
0x000018aa movhs r2, 0x400 | r2 = 0x400;
| }
0x000018ae bl 0x1d64 | r0 = fcn_00001d64 (r0, r1, r2);
0x000018b2 adds r1, r0, 1 | r1 = r0 + 1;
0x000018b4 bne 0x1894 |
| }
| label_5:
0x000018b6 ldr r1, [sp, 0x38] | r1 = var_38h;
0x000018b8 add.w sb, r4, r0 | sb = r4 + r0;
0x000018bc mov r0, r5 | r0 = r5;
0x000018be ldr r2, [r1], 8 | r2 = *(r1);
| r1 += 8;
0x000018c2 bl 0x1d64 | r0 = fcn_00001d64 (r0, r1, r2);
0x000018c6 add sb, r0 | sb += r0;
0x000018c8 subs.w sb, sl, sb | sb = sl - sb;
| if (sb == sl) {
0x000018cc beq 0x18f8 | goto label_19;
| }
0x000018ce ldr r6, [pc, 0xcc] |
0x000018d0 movs r4, 0 | r4 = 0;
0x000018d2 add r6, pc | r6 = 0x3274;
0x000018d4 adds r6, 8 | r6 += 8;
0x000018d6 b 0x18de |
| while (r2 != r0) {
0x000018d8 add r4, r0 | r4 += r0;
0x000018da cmp sb, r4 |
| if (sb < r4) {
0x000018dc bls 0x18f8 | goto label_19;
| }
0x000018de sub.w r2, sb, r4 | r2 = sb - r4;
0x000018e2 mov r1, r6 | r1 = r6;
0x000018e4 cmp.w r2, 0x400 |
0x000018e8 mov r0, r5 | r0 = r5;
0x000018ea it hs |
| if (r2 < 0x400) {
0x000018ec movhs r2, 0x400 | r2 = 0x400;
| }
0x000018f0 bl 0x1d64 | r0 = fcn_00001d64 (r0, r1, r2);
0x000018f4 adds r2, r0, 1 | r2 = r0 + 1;
0x000018f6 bne 0x18d8 |
| }
| label_19:
0x000018f8 ldr.w fp, [r7, 0x18] | fp = *((r7 + 0x18));
0x000018fc mov r4, sl | r4 = sl;
0x000018fe cmp.w fp, 0 |
| if (fp == 0) {
0x00001902 beq 0x1a02 | goto label_20;
| }
0x00001904 ldr.w sb, [pc, 0x98] | sb = *(0x000019a0);
0x00001908 ldr r3, [pc, 0x98] |
0x0000190a str.w r8, [sp, 0x1c] | __asm ("str.w r8, [var_1ch]");
0x0000190e mov r8, fp | r8 = fp;
0x00001910 add sb, pc | sb += pc;
0x00001912 add.w sb, sb, 8 | sb += 8;
0x00001916 add r3, pc | r3 = 0x32be;
0x00001918 strd r7, r3, [sp, 0x14] | __asm ("strd r7, r3, [stream]");
| label_2:
0x0000191c ldrd r3, r0, [r8, 0x14] | __asm ("ldrd r3, r0, [r8, 0x14]");
0x00001920 ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x00001924 ubfx r3, r3, 1, 1 | r3 = (r3 >> 1) & ((1 << 1) - 1);
0x00001928 orrs r3, r0 | r3 |= r0;
0x0000192a cmp r2, 0 |
0x0000192c ite ne |
| if (r2 == 0) {
0x0000192e movne r3, 0 | r3 = 0;
| }
| if (r2 != 0) {
0x00001930 andeq r3, r3, 1 | r3 &= 1;
| }
0x00001934 cmp r3, 0 |
| if (r3 == 0) {
0x00001936 beq 0x19f2 | goto label_21;
| }
0x00001938 subs.w fp, sl, r4 |
0x0000193c ldrd r7, r1, [r8] | __asm ("ldrd r7, r1, [r8]");
| if (fp == sl) {
0x00001940 beq.w 0x1a4c | goto label_22;
| }
0x00001944 str r4, [sp, 0x10] | var_10h = r4;
0x00001946 movs r6, 0 | r6 = 0;
0x00001948 mov r4, fp | r4 = fp;
0x0000194a mov fp, r1 |
0x0000194c b 0x19ae |
| while (r3 != r0) {
0x000019a8 add r6, r0 | r6 += r0;
0x000019aa cmp r4, r6 |
| if (r4 < r6) {
0x000019ac bls 0x1a3a | goto label_23;
| }
0x000019ae subs r2, r4, r6 | r2 = r4 - r6;
0x000019b0 mov r1, sb | r1 = sb;
0x000019b2 cmp.w r2, 0x400 |
0x000019b6 mov r0, r5 | r0 = r5;
0x000019b8 it hs |
| if (r2 < 0x400) {
0x000019ba movhs r2, 0x400 | r2 = 0x400;
| }
0x000019be bl 0x1d64 | r0 = fcn_00001d64 (r0, r1, r2);
0x000019c2 adds r3, r0, 1 | r3 = r0 + 1;
0x000019c4 bne 0x19a8 |
| }
0x000019c6 ldr r4, [sp, 0x10] | r4 = var_10h;
0x000019c8 mov r1, fp | r1 = fp;
0x000019ca ldr.w r2, [r8] | r2 = *(r8);
| label_4:
0x000019ce ldr r3, [sp, 0x14] | r3 = var_14h;
0x000019d0 subs r6, r1, r7 | r6 = r1 - r7;
0x000019d2 add r0, r4 | r0 += r4;
0x000019d4 adds r4, r0, r6 | r4 = r0 + r6;
0x000019d6 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x000019d8 movs r3, 0 | r3 = 0;
0x000019da strd r6, r5, [sp] | __asm ("strd r6, r5, [sp]");
0x000019de bl 0x1da0 | fcn_00001da0 (r0, r1, r2);
0x000019e2 ldr r3, [sp, 0x18] | r3 = stream;
0x000019e4 ldr r2, [r3] | r2 = *(r3);
0x000019e6 subs r3, r2, 1 | r3 = r2 - 1;
0x000019e8 rsbs r2, r2, 0 | r2 -= ;
0x000019ea add r3, sl | r3 += sl;
0x000019ec add r3, r6 | r3 += r6;
0x000019ee and.w sl, r2, r3 | sl = r2 & r3;
| label_21:
0x000019f2 ldr.w r8, [r8, 0x28] | r8 = *((r8 + 0x28));
0x000019f6 cmp.w r8, 0 |
| if (r8 != 0) {
0x000019fa bne 0x191c | goto label_2;
| }
0x000019fc ldr r7, [sp, 0x14] | r7 = var_14h;
0x000019fe ldr.w r8, [sp, 0x1c] | r8 = var_1ch;
| label_20:
0x00001a02 ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x00001a04 cmp r2, 0 |
0x00001a06 it gt |
| if (r2 <= 0) {
0x00001a08 movgt r4, 0 | r4 = 0;
| }
| if (r2 <= 0) {
0x00001a0a ble 0x1a24 | goto label_24;
| }
| do {
0x00001a0c ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00001a0e ldr.w r0, [r3, r4, lsl 2] | offset_2 = r4 << 2;
| r0 = *((r3 + offset_2));
0x00001a12 cmp r8, r0 |
| if (r8 != r0) {
0x00001a14 beq 0x1a1e |
0x00001a16 mov r1, r8 | r1 = r8;
0x00001a18 bl 0x1bf8 | fcn_00001bf8 ();
0x00001a1c ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
| }
0x00001a1e adds r4, 1 | r4++;
0x00001a20 cmp r2, r4 |
0x00001a22 bgt 0x1a0c |
| } while (r2 > r4);
| label_24:
0x00001a24 mov r0, r8 | r0 = r8;
0x00001a26 bl 0x1bf0 | fcn_00001bf0 (r0);
0x00001a2a mov r0, r7 | r0 = r7;
0x00001a2c bl 0x1f5c | fcn_00001f5c (r0);
0x00001a30 ldr r0, [sp, 0x38] | r0 = var_38h;
0x00001a32 blx 0xed4 | read (r0, r1, r2);
0x00001a36 movs r0, 0 | r0 = 0;
0x00001a38 b 0x17e2 | goto label_3;
| label_23:
0x00001a3a mov r1, fp | r1 = fp;
0x00001a3c mov fp, r4 |
0x00001a3e ldr.w r2, [r8] | r2 = *(r8);
0x00001a42 mov r0, fp | r0 = fp;
0x00001a44 ldr r4, [sp, 0x10] | r4 = var_10h;
0x00001a46 b 0x19ce | goto label_4;
| label_18:
0x00001a48 mov r0, fp | r0 = fp;
0x00001a4a b 0x18b6 | goto label_5;
| label_22:
0x00001a4c mov r2, r7 | r2 = r7;
0x00001a4e mov r0, fp | r0 = fp;
0x00001a50 b 0x19ce | goto label_4;
| label_12:
0x00001a52 blx 0xea0 | fcn_00000ea0 ();
0x00001a56 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x00001a58 add r4, sp, 0x38 | r4 += var_38h;
0x00001a5a blx 0xed4 | read (r0, r1, r2);
0x00001a5e b 0x16b6 | goto label_6;
| label_16:
0x00001a60 blx 0xfac | fprintf_chk ()
0x00001a64 push {r4, lr} |
| if (r0 != 0) {
0x00001a66 cbz r0, 0x1a78 |
0x00001a68 mov r4, r0 | r4 = r0;
0x00001a6a adds r0, 0xc | r0 += 0xc;
0x00001a6c blx 0xfa0 | stack_chk_fail ();
0x00001a70 movs r2, 0 | r2 = 0;
0x00001a72 strd r2, r4, [r0] | __asm ("strd r2, r4, [r0]");
0x00001a76 pop {r4, pc} |
| }
0x00001a78 movs r0, 0x40 | r0 = 0x40;
0x00001a7a movs r4, 0x34 | r4 = 0x34;
0x00001a7c blx 0xfa0 | stack_chk_fail ();
0x00001a80 movs r2, 0 | r2 = 0;
0x00001a82 strd r2, r4, [r0] | __asm ("strd r2, r4, [r0]");
0x00001a86 pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/dcore @ 0x1b48 */
| #include <stdint.h>
|
; (fcn) fcn.00001b48 () | void fcn_00001b48 (int16_t arg1, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r2 = arg3;
0x00001b48 invalid |
0x00001b4c ldr r6, [pc, 0x94] |
0x00001b4e mov r4, r0 | r4 = r0;
0x00001b50 sub sp, 8 |
0x00001b52 mov r5, r2 | r5 = r2;
0x00001b54 ldr r0, [pc, 0x90] | r0 = *(0x1be8);
0x00001b56 mov r3, r2 | r3 = r2;
0x00001b58 add r6, pc | r6 = 0x3740;
0x00001b5a movs r2, 0 | r2 = 0;
0x00001b5c ldr r0, [r6, r0] |
0x00001b5e ldr r0, [r0] | r0 = *(0x3740);
0x00001b60 str r0, [sp, 4] | var_4h = r0;
0x00001b62 mov.w r0, 0 | r0 = 0;
0x00001b66 movs r0, 0x11 | r0 = 0x11;
0x00001b68 blx 0xe3c | r0 = fcn_00000e3c ();
| if (r0 != 0) {
0x00001b6c cbnz r0, 0x1bb6 | goto label_4;
| }
| label_1:
0x00001b6e mov r6, sp | r6 = sp;
0x00001b70 b 0x1b86 |
| while (r0 >= 0) {
| label_0:
0x00001b72 ldr r3, [sp] | r3 = *(sp);
0x00001b74 uxtb r1, r3 | r1 = (int8_t) r3;
0x00001b76 cmp r1, 0x7f |
| if (r1 != 0x7f) {
0x00001b78 bne 0x1b9e | goto label_3;
| }
0x00001b7a ubfx r3, r3, 8, 8 | r3 = (r3 >> 8) & ((1 << 8) - 1);
0x00001b7e cmp r3, 0x13 |
| if (r3 == 0x13) {
0x00001b80 beq 0x1bc0 | goto label_5;
| }
0x00001b82 cmp r5, 0x13 |
| if (r5 != 0x13) {
0x00001b84 bne 0x1bce | goto label_6;
| }
| label_2:
0x00001b86 movs r2, 0 | r2 = 0;
0x00001b88 mov r1, r6 | r1 = r6;
0x00001b8a mov r0, r4 | r0 = r4;
0x00001b8c blx 0xf34 | r0 = raise (r0);
0x00001b90 cmp r0, 0 |
0x00001b92 bge 0x1b72 |
| }
0x00001b94 blx 0x1078 | r0 = cxa_finalize ();
0x00001b98 ldr r3, [r0] | r3 = *(r0);
0x00001b9a cmp r3, 0x16 |
| if (r3 == 0x16) {
0x00001b9c beq 0x1b72 | goto label_0;
| }
| do {
| label_3:
0x00001b9e ldr r2, [pc, 0x4c] |
0x00001ba0 ldr r3, [pc, 0x44] | r3 = *(0x1be8);
0x00001ba2 add r2, pc | r2 = 0x3794;
0x00001ba4 ldr r3, [r2, r3] | r3 = *(0x3794);
0x00001ba6 ldr r2, [r3] | r2 = *(0x3794);
0x00001ba8 ldr r3, [sp, 4] | r3 = var_4h;
0x00001baa eors r2, r3 | r2 ^= r3;
0x00001bac mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00001bb0 bne 0x1be0 | goto label_7;
| }
0x00001bb2 add sp, 8 |
0x00001bb4 pop {r4, r5, r6, pc} |
| label_4:
0x00001bb6 movs r1, 0x13 | r1 = 0x13;
0x00001bb8 mov r0, r4 | r0 = r4;
0x00001bba blx 0x1024 | elf_begin ();
0x00001bbe b 0x1b6e | goto label_1;
| label_5:
0x00001bc0 mov r3, r5 | r3 = r5;
0x00001bc2 movs r2, 0 | r2 = 0;
0x00001bc4 mov r1, r4 | r1 = r4;
0x00001bc6 movs r0, 0x11 | r0 = 0x11;
0x00001bc8 blx 0xe3c | fcn_00000e3c ();
0x00001bcc b 0x1b9e |
| } while (1);
| label_6:
0x00001bce movs r3, 0 | r3 = 0;
0x00001bd0 mov r1, r4 | r1 = r4;
0x00001bd2 mov r2, r3 | r2 = r3;
0x00001bd4 movs r0, 7 | r0 = 7;
0x00001bd6 blx 0xe3c | r0 = fcn_00000e3c ();
0x00001bda cmp r0, 0 |
| if (r0 >= 0) {
0x00001bdc bge 0x1b86 | goto label_2;
| }
0x00001bde b 0x1b9e | goto label_3;
| label_7:
0x00001be0 blx 0xfac | fprintf_chk ()
0x00001be4 adds r3, 0x74 | r3 += 0x74;
0x00001be6 movs r0, r0 |
0x00001be8 lsls r4, r3, 4 | r4 = r3 << 4;
0x00001bea movs r0, r0 |
0x00001bec adds r3, 0x2a | r3 += 0x2a;
0x00001bee 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/bin/dcore @ 0x1fb8 */
| #include <stdint.h>
|
; (fcn) fcn.00001fb8 () | void fcn_00001fb8 (int16_t arg_38h, int16_t arg1, int16_t arg2) {
| int16_t fildes;
| int16_t var_4h;
| void * s1;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_16h;
| int16_t var_18h;
| int16_t var_20h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_48h;
| int16_t var_50h;
| int16_t var_60h;
| int16_t var_68h;
| int16_t var_ach;
| int16_t var_0h_2;
| int16_t var_4h_3;
| int16_t var_8h_2;
| int16_t var_10h_2;
| int16_t var_14h;
| int16_t var_18h_2;
| int16_t var_1ch;
| int16_t var_20h_2;
| int16_t var_24h;
| int16_t var_28h_2;
| void * ptr;
| 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_4ch;
| int16_t var_50h_2;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h_2;
| int16_t var_98h;
| int16_t var_dch;
| int16_t var_ech;
| int16_t var_f0h;
| int16_t var_f2h;
| int16_t var_f4h;
| int16_t var_f8h;
| int16_t var_1ech;
| int16_t var_3ech;
| r0 = arg1;
| r1 = arg2;
| label_15:
0x00000e9c invalid | void (*0xea0)() ();
0x00001fb8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00001fbc mov r2, r1 | r2 = r1;
0x00001fbe sub.w sp, sp, 0x3f4 |
0x00001fc2 mov sl, r0 | sl = r0;
0x00001fc4 add r5, sp, 0x4c | r5 += var_4ch;
0x00001fc6 movs r3, 0 | r3 = 0;
0x00001fc8 ldr.w r0, [pc, 0x410] | r0 = "@&@5@";
0x00001fcc movs r1, 0x1c | r1 = 0x1c;
0x00001fce str r2, [sp, 0x1c] | var_1ch = r2;
0x00001fd0 ldr.w r2, [pc, 0x40c] |
0x00001fd4 add r0, pc | r0 += pc;
0x00001fd6 ldr r2, [r0, r2] | r2 = *((r0 + r2));
0x00001fd8 movs r0, 1 | r0 = 1;
0x00001fda ldr r2, [r2] | r2 = *(0x23e0);
0x00001fdc str r2, [sp, 0x3ec] | var_3ech = r2;
0x00001fde mov.w r2, 0 | r2 = 0;
0x00001fe2 str r3, [r5] | *(r5) = r3;
0x00001fe4 blx 0xe78 | r0 = fcn_00000e78 ();
0x00001fe8 cmp r0, 0 |
| if (r0 == 0) {
0x00001fea beq.w 0x233e | goto label_20;
| }
0x00001fee ldr r4, [pc, 0x3f4] |
0x00001ff0 mov r3, sl | r3 = sl;
0x00001ff2 ldr r2, [pc, 0x3f4] |
0x00001ff4 mov r6, r0 | r6 = r0;
0x00001ff6 movs r1, 1 | r1 = 1;
0x00001ff8 str.w sl, [r0] | __asm ("str.w sl, [r0]");
0x00001ffc add r4, pc | r4 = 0x43e6;
0x00001ffe mov r0, r5 | r0 = r5;
0x00002000 add r2, pc | r2 = 0x43ee;
0x00002002 blx 0xef8 | elf_errmsg ();
0x00002006 mov r1, r4 | r1 = r4;
0x00002008 ldr r0, [r5] | r0 = *(r5);
0x0000200a blx 0xe84 | fcn_00000e84 ();
0x0000200e str r0, [r6, 4] | *((r6 + 4)) = r0;
0x00002010 ldr r0, [r5] | r0 = *(r5);
0x00002012 blx 0xed4 | read (r0, r1, r2);
0x00002016 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00002018 cmp r3, 0 |
| if (r3 == 0) {
0x0000201a beq.w 0x22fa | goto label_21;
| }
| label_7:
0x0000201e ldr r2, [pc, 0x3cc] |
0x00002020 mov r3, sl | r3 = sl;
0x00002022 movs r1, 1 | r1 = 1;
0x00002024 mov r0, r5 | r0 = r5;
0x00002026 add r2, pc | r2 = 0x4418;
0x00002028 blx 0xef8 | elf_errmsg ();
0x0000202c ldr r0, [r5] | r0 = *(r5);
0x0000202e movs r1, 0 | r1 = 0;
0x00002030 blx 0xd90 | r0 = open (r0, r1, r2);
0x00002034 subs r3, r0, 0 | r3 = r0 - 0;
0x00002036 ldr r0, [r5] | r0 = *(r5);
0x00002038 str r3, [sp, 0x2c] | ptr = r3;
| if (r3 < r0) {
0x0000203a blt.w 0x2320 | goto label_22;
| }
0x0000203e movs r4, 0 | r4 = 0;
0x00002040 blx 0xed4 | read (r0, r1, r2);
0x00002044 movs r1, 1 | r1 = 1;
0x00002046 ldr r0, [sp, 0x2c] | r0 = ptr;
0x00002048 mov r2, r4 | r2 = r4;
0x0000204a str r4, [r5] | *(r5) = r4;
0x0000204c blx 0x1030 | realloc (r0, r1);
0x00002050 add r3, sp, 0x98 | r3 += var_98h;
0x00002052 mov r7, r0 | r7 = r0;
0x00002054 mov r1, r3 | r1 = r3;
0x00002056 mov r8, r3 | r8 = r3;
0x00002058 str r3, [sp, 0x38] | var_38h = r3;
0x0000205a blx 0xff4 | r0 = elf_nextscn ();
0x0000205e cmp r0, 0 |
| if (r0 == 0) {
0x00002060 beq.w 0x23ae | goto label_23;
| }
0x00002064 ldrh.w r3, [r8, 0x38] | r3 = *((r8 + 0x38));
0x00002068 cmp r3, 0 |
| if (r3 == 0) {
0x0000206a beq.w 0x23a4 | goto label_24;
| }
0x0000206e ldr.w r8, [pc, 0x380] |
0x00002072 add.w sb, sp, 0x60 | sb += var_60h_2;
0x00002076 ldr.w fp, [sp, 0x38] | fp = var_38h;
0x0000207a strd r4, r4, [sp, 0x30] | __asm ("strd r4, r4, [sp, 0x30]");
0x0000207e add r8, pc | r8 = 0x4474;
0x00002080 str r4, [sp, 0x28] | var_28h_2 = r4;
0x00002082 str r4, [sp, 0x18] | var_18h_2 = r4;
| do {
0x00002084 mov r2, sb | r2 = sb;
0x00002086 mov r1, r4 | r1 = r4;
0x00002088 mov r0, r7 | r0 = r7;
0x0000208a blx 0x100c | r0 = fread (r0, r1, r2, r3);
0x0000208e cmp sb, r0 |
| if (sb != r0) {
0x00002090 beq 0x20a4 |
0x00002092 mov.w r0, -1 | r0 = -1;
0x00002096 blx 0xf04 | getopt (r0, r1, r2);
0x0000209a mov r1, r8 | r1 = r8;
0x0000209c mov r2, r0 | r2 = r0;
0x0000209e movs r0, 1 | r0 = 1;
0x000020a0 blx 0xe54 | fcn_00000e54 ();
| }
0x000020a4 ldr.w r2, [sb] | r2 = *(sb);
0x000020a8 cmp r2, 2 |
| if (r2 == 2) {
0x000020aa bne 0x20c2 |
0x000020ac ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x000020b0 str r3, [sp, 0x28] | var_28h_2 = r3;
0x000020b2 ldr.w r3, [sb, 0x28] | r3 = *((sb + 0x28));
0x000020b6 str r3, [sp, 0x30] | var_30h = r3;
0x000020b8 ldr.w r3, [sb, 0x30] | r3 = *((sb + 0x30));
0x000020bc str r3, [sp, 0x34] | var_34h = r3;
0x000020be movs r3, 1 | r3 = 1;
0x000020c0 str r3, [sp, 0x18] | var_18h_2 = r3;
| }
0x000020c2 ldrh.w r2, [fp, 0x38] | r2 = *(arg_38h);
0x000020c6 adds r4, 1 | r4++;
0x000020c8 cmp r2, r4 |
0x000020ca bgt 0x2084 |
| } while (r2 > r4);
| label_10:
0x000020cc movw r3, 0x765b |
0x000020d0 mov.w fp, 0 |
0x000020d4 movt r3, 0x7364 | r3 = 0x7364765b;
0x000020d8 mov r4, fp | r4 = fp;
0x000020da str r3, [sp, 0x24] | var_24h = r3;
0x000020dc movw r3, 0x6c2f |
0x000020e0 movt r3, 0x6269 | r3 = 0x62696c2f;
0x000020e4 add.w r8, sp, 0x1ec | r8 += var_1ech;
0x000020e8 str r3, [sp, 0x20] | var_20h_2 = r3;
0x000020ea ldr r3, [pc, 0x308] |
0x000020ec str.w fp, [sp, 0x10] | __asm ("str.w fp, [var_10h_2]");
0x000020f0 strd r7, sl, [sp, 0x3c] | __asm ("strd r7, sl, [sp, 0x3c]");
0x000020f4 add r3, pc | r3 = 0x44ee;
0x000020f6 str r5, [sp, 0x44] | var_44h = r5;
0x000020f8 str r3, [sp, 0x14] | var_14h = r3;
| do {
| label_2:
0x000020fa ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x000020fc mov.w r1, 0x200 | r1 = 0x200;
0x00002100 mov r0, r8 | r0 = r8;
0x00002102 blx 0xe48 | r0 = fcn_00000e48 ();
0x00002106 cmp r0, 0 |
| if (r0 == 0) {
0x00002108 beq.w 0x2238 | goto label_25;
| }
| label_0:
0x0000210c add r3, sp, 0x58 | r3 += var_58h;
0x0000210e add.w sb, sp, 0x54 | sb += var_54h;
0x00002112 add.w sl, sp, 0x50 | sl += var_50h_2;
0x00002116 add r7, sp, 0xec | r7 += var_ech;
0x00002118 add r5, sp, 0xdc | r5 += var_dch;
0x0000211a str r3, [sp, 4] | var_4h_3 = r3;
0x0000211c ldr r1, [sp, 0x14] | r1 = var_14h;
0x0000211e mov r3, sb | r3 = sb;
0x00002120 mov r2, sl | r2 = sl;
0x00002122 mov r0, r8 | r0 = r8;
0x00002124 str r7, [sp, 8] | var_8h_2 = r7;
0x00002126 str r5, [sp] | *(sp) = r5;
0x00002128 blx 0xe18 | r0 = fcn_00000e18 ();
0x0000212c cmp r0, 3 |
| if (r0 > 3) {
0x0000212e bgt 0x2190 | goto label_26;
| }
0x00002130 ldr r1, [pc, 0x2c4] |
0x00002132 add r5, sp, 0x5c | r5 += var_5ch;
0x00002134 mov r2, r5 | r2 = r5;
0x00002136 mov r0, r8 | r0 = r8;
0x00002138 add r1, pc | r1 = 0x4534;
0x0000213a blx 0xe18 | r0 = fcn_00000e18 ();
0x0000213e cmp r0, 1 |
| if (r0 == 1) {
0x00002140 beq.w 0x22a8 | goto label_27;
| }
0x00002144 ldr r1, [pc, 0x2b4] |
0x00002146 mov r2, r5 | r2 = r5;
0x00002148 mov r0, r8 | r0 = r8;
0x0000214a add r1, pc | r1 = 0x454a;
0x0000214c blx 0xe18 | r0 = fcn_00000e18 ();
0x00002150 cmp r0, 1 |
| if (r0 == 1) {
0x00002152 beq.w 0x22a8 | goto label_27;
| }
0x00002156 ldr r1, [pc, 0x2a8] |
0x00002158 mov r2, r5 | r2 = r5;
0x0000215a mov r0, r8 | r0 = r8;
0x0000215c add r1, pc | r1 = 0x4562;
0x0000215e blx 0xe18 | r0 = fcn_00000e18 ();
0x00002162 cmp r0, 1 |
0x00002164 bne 0x20fa |
| } while (r0 != 1);
0x00002166 ldr r3, [r5] | r3 = *(r5);
0x00002168 subs r2, r4, 0 | r2 = r4 - 0;
0x0000216a it ne |
| if (r2 == r4) {
0x0000216c movne r2, 1 | r2 = 1;
| }
0x0000216e adds.w fp, fp, r3 |
0x00002172 and r3, r2, 1 | r3 = r2 & 1;
0x00002176 it ne |
| if (fp == fp) {
0x00002178 movne r3, 0 | r3 = 0;
| }
0x0000217a cmp r3, 0 |
| if (r3 == 0) {
0x0000217c beq.w 0x2370 | goto label_28;
| }
0x00002180 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00002182 cmp r3, 0 |
| if (r3 == 0) {
0x00002184 bne 0x2222 |
0x00002186 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00002188 lsls r2, r3, 0x1e | r2 = r3 << 0x1e;
0x0000218a it mi |
| if (r2 >= r3) {
0x0000218c strmi r0, [r4, 0x1c] | *((r4 + 0x1c)) = r0;
| }
0x0000218e b 0x2222 | goto label_29;
| label_26:
0x00002190 movs r0, 0x2c | r0 = 0x2c;
0x00002192 blx 0xfa0 | stack_chk_fail ();
0x00002196 movs r3, 0 | r3 = 0;
0x00002198 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0000219c strd r3, r3, [r0, 0x14] | __asm ("strd r3, r3, [r0, 0x14]");
0x000021a0 add.w r2, r0, 0x24 | r2 = r0 + 0x24;
0x000021a4 str r3, [r0, 0x1c] | *((r0 + 0x1c)) = r3;
0x000021a6 mov r4, r0 | r4 = r0;
0x000021a8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000021aa vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x000021ae str r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x000021b0 mov r0, r7 | r0 = r7;
0x000021b2 blx 0xf88 | lseek64 ();
0x000021b6 ldrb r1, [r5] | r1 = *(r5);
0x000021b8 str r0, [r4, 0x20] | *((r4 + 0x20)) = r0;
0x000021ba ldr r0, [sp, 0x24] | r0 = var_24h;
0x000021bc cmp r1, 0x72 |
0x000021be ldr.w r3, [sl] | r3 = *(sl);
0x000021c2 it eq |
| if (r1 != 0x72) {
0x000021c4 moveq r1, 4 | r1 = 4;
| }
0x000021c6 ldr.w r2, [sb] | r2 = *(sb);
0x000021ca it eq |
| if (r1 != 0x72) {
0x000021cc streq r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
| }
0x000021ce ldrb r1, [r5, 1] | r1 = *((r5 + 1));
0x000021d0 strd r3, r2, [r4] | __asm ("strd r3, r2, [r4]");
0x000021d4 cmp r1, 0x77 |
0x000021d6 ittt eq |
| if (r1 != 0x77) {
0x000021d8 ldreq r1, [r4, 0x14] | r1 = *((r4 + 0x14));
| }
| if (r1 != 0x77) {
0x000021da orreq r1, r1, 2 | r1 |= 2;
| }
| if (r1 == 0x77) {
0x000021de str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
| }
0x000021e0 ldrb r1, [r5, 2] | r1 = *((r5 + 2));
0x000021e2 cmp r1, 0x78 |
0x000021e4 ittt eq |
| if (r1 != 0x78) {
0x000021e6 ldreq r1, [r4, 0x14] | r1 = *((r4 + 0x14));
| }
| if (r1 != 0x78) {
0x000021e8 orreq r1, r1, 1 | r1 |= 1;
| }
| if (r1 == 0x78) {
0x000021ec str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
| }
0x000021ee ldrb r1, [r5, 3] | r1 = *((r5 + 3));
0x000021f0 cmp r1, 0x73 |
0x000021f2 itt eq |
| if (r1 != 0x73) {
0x000021f4 moveq r1, 1 | r1 = 1;
| }
| if (r1 != 0x73) {
0x000021f6 streq r1, [r4, 0x1c] | *((r4 + 0x1c)) = r1;
| }
0x000021f8 ldr r1, [r7] | r1 = *(r7);
0x000021fa cmp r1, r0 |
| if (r1 == r0) {
0x000021fc beq 0x22ae | goto label_30;
| }
| label_3:
0x000021fe ldr r1, [r7] | r1 = *(r7);
0x00002200 ldr r0, [sp, 0x20] | r0 = var_20h_2;
0x00002202 cmp r1, r0 |
| if (r1 == r0) {
0x00002204 beq 0x22d0 | goto label_31;
| }
| label_6:
0x00002206 ldr r1, [sp, 0x18] | r1 = var_18h_2;
| if (r1 != 0) {
0x00002208 cbz r1, 0x2214 |
0x0000220a ldr r1, [sp, 0x38] | r1 = var_38h;
0x0000220c ldrh r1, [r1, 0x10] | r1 = *((r1 + 0x10));
0x0000220e cmp r1, 2 |
| if (r1 == 2) {
0x00002210 beq.w 0x2342 | goto label_32;
| }
| }
| label_4:
0x00002214 ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x00002216 cmp r3, 0 |
| if (r3 != 0) {
0x00002218 bne 0x229c | goto label_33;
| }
0x0000221a str r4, [r6, 0x18] | *((r6 + 0x18)) = r4;
| label_1:
0x0000221c ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x0000221e adds r3, 1 | r3++;
0x00002220 str r3, [sp, 0x10] | var_10h_2 = r3;
| }
| label_29:
0x00002222 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x00002224 mov.w r1, 0x200 | r1 = 0x200;
0x00002228 mov r0, r8 | r0 = r8;
0x0000222a mov.w fp, 0 |
0x0000222e blx 0xe48 | r0 = fcn_00000e48 ();
0x00002232 cmp r0, 0 |
| if (r0 != 0) {
0x00002234 bne.w 0x210c | goto label_0;
| }
| label_25:
0x00002238 ldrd sl, r5, [sp, 0x40] | __asm ("ldrd sl, r5, [var_40h]");
0x0000223c mov sb, r0 | sb = r0;
0x0000223e ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x00002240 movs r1, 1 | r1 = 1;
0x00002242 ldr r2, [pc, 0x1c0] |
0x00002244 mov r0, r5 | r0 = r5;
0x00002246 ldr r7, [sp, 0x3c] | r7 = var_3ch;
0x00002248 str r3, [r6, 0x14] | *((r6 + 0x14)) = r3;
0x0000224a mov r3, sl | r3 = sl;
0x0000224c add r2, pc | r2 = 0x4656;
0x0000224e blx 0xef8 | elf_errmsg ();
0x00002252 ldr r0, [r5] | r0 = *(r5);
0x00002254 mov r1, sb | r1 = sb;
0x00002256 blx 0xd90 | r0 = open (r0, r1, r2);
0x0000225a cmp r0, 0 |
0x0000225c str r0, [r6, 8] | *((r6 + 8)) = r0;
| if (r0 < 0) {
0x0000225e blt.w 0x2396 | goto label_34;
| }
| label_11:
0x00002262 mov r0, r7 | r0 = r7;
0x00002264 blx 0xfdc | puts (r0);
0x00002268 ldr r0, [r5] | r0 = *(r5);
0x0000226a blx 0xed4 | read (r0, r1, r2);
0x0000226e ldr r0, [sp, 0x2c] | r0 = ptr;
0x00002270 blx 0xf58 | fwrite (r0, r1, r2, r3);
0x00002274 mov r0, r6 | r0 = r6;
0x00002276 bl 0x25a4 | r0 = void (*0x25a4)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
| if (r0 != 0) {
0x0000227a cbnz r0, 0x22c8 | goto label_35;
| }
| label_5:
0x0000227c ldr r2, [pc, 0x188] |
0x0000227e ldr r3, [pc, 0x160] | r3 = *(0x23e2);
0x00002280 add r2, pc | r2 = 0x468c;
0x00002282 ldr r3, [r2, r3] | r3 = *(0x468c);
0x00002284 ldr r2, [r3] | r2 = *(0x468c);
0x00002286 ldr r3, [sp, 0x3ec] | r3 = var_3ech;
0x00002288 eors r2, r3 | r2 ^= r3;
0x0000228a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000228e bne.w 0x23d6 | goto label_36;
| }
0x00002292 mov r0, r6 | r0 = r6;
0x00002294 add.w sp, sp, 0x3f4 |
0x00002298 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| do {
| label_33:
0x0000229c mov r2, r3 | r2 = r3;
0x0000229e ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x000022a0 cmp r3, 0 |
0x000022a2 bne 0x229c |
| } while (r3 != 0);
0x000022a4 str r4, [r2, 0x28] | *((r2 + 0x28)) = r4;
0x000022a6 b 0x221c | goto label_1;
| label_27:
0x000022a8 ldr r3, [r5] | r3 = *(r5);
0x000022aa add fp, r3 |
0x000022ac b 0x20fa | goto label_2;
| label_30:
0x000022ae ldrh.w r0, [sp, 0xf0] | r0 = var_f0h;
0x000022b2 movw r1, 0x5d6f | r1 = 0x5d6f;
0x000022b6 cmp r0, r1 |
| if (r0 != r1) {
0x000022b8 bne 0x21fe | goto label_3;
| }
0x000022ba ldrb.w r1, [sp, 0xf2] | r1 = var_f2h;
0x000022be cmp r1, 0 |
| if (r1 != 0) {
0x000022c0 bne 0x21fe | goto label_3;
| }
| label_8:
0x000022c2 movs r3, 1 | r3 = 1;
0x000022c4 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x000022c6 b 0x2214 | goto label_4;
| label_35:
0x000022c8 mov r0, r6 | r0 = r6;
0x000022ca bl 0x2748 | fcn_00002748 (r0);
0x000022ce b 0x227c | goto label_5;
| label_31:
0x000022d0 ldr r1, [sp, 0xf0] | r1 = var_f0h;
0x000022d2 cmp r1, r0 |
| if (r1 != r0) {
0x000022d4 bne 0x2206 | goto label_6;
| }
0x000022d6 ldr r0, [sp, 0xf4] | r0 = var_f4h;
0x000022d8 movw r1, 0x7470 |
0x000022dc movt r1, 0x7268 | r1 = 0x72687470;
0x000022e0 cmp r0, r1 |
| if (r0 != r1) {
0x000022e2 bne 0x2206 | goto label_6;
| }
0x000022e4 ldr r0, [sp, 0xf8] | r0 = var_f8h;
0x000022e6 movw r1, 0x6165 |
0x000022ea movt r1, 0x2d64 | r1 = 0x2d646165;
0x000022ee cmp r0, r1 |
| if (r0 != r1) {
0x000022f0 bne 0x2206 | goto label_6;
| }
0x000022f2 mov r0, r4 | r0 = r4;
0x000022f4 bl 0x2414 | void (*0x2414)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x000022f8 b 0x2214 | goto label_4;
| label_21:
0x000022fa ldr r2, [pc, 0x110] |
0x000022fc mov r3, sl | r3 = sl;
0x000022fe movs r1, 1 | r1 = 1;
0x00002300 mov r0, r5 | r0 = r5;
0x00002302 add r2, pc | r2 = 0x4714;
0x00002304 blx 0xef8 | elf_errmsg ();
0x00002308 ldr r0, [r5] | r0 = *(r5);
0x0000230a mov r1, r4 | r1 = r4;
0x0000230c blx 0xe84 | r0 = fcn_00000e84 ();
0x00002310 mov r7, r0 | r7 = r0;
0x00002312 str r0, [r6, 4] | *((r6 + 4)) = r0;
0x00002314 ldr r0, [r5] | r0 = *(r5);
0x00002316 cmp r7, 0 |
| if (r7 == 0) {
0x00002318 beq 0x23c4 | goto label_37;
| }
0x0000231a blx 0xed4 | read (r0, r1, r2);
0x0000231e b 0x201e | goto label_7;
| label_22:
0x00002320 blx 0xea0 | fcn_00000ea0 ();
0x00002324 mov r0, r6 | r0 = r6;
0x00002326 movs r7, 0 | r7 = 0;
0x00002328 blx 0xed4 | read (r0, r1, r2);
| label_9:
0x0000232c mov r0, r7 | r0 = r7;
0x0000232e blx 0xfdc | puts (r0);
0x00002332 ldr r0, [r5] | r0 = *(r5);
0x00002334 blx 0xed4 | read (r0, r1, r2);
0x00002338 ldr r0, [sp, 0x2c] | r0 = ptr;
0x0000233a blx 0xf58 | fwrite (r0, r1, r2, r3);
| label_20:
0x0000233e movs r6, 0 | r6 = 0;
0x00002340 b 0x227c | goto label_5;
| label_32:
0x00002342 ldr r1, [sp, 0x28] | r1 = var_28h_2;
0x00002344 cmp r3, r1 |
0x00002346 ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x00002348 ite hi |
| if (r3 <= r1) {
0x0000234a movhi r3, 0 | r3 = 0;
| }
| if (r3 > r1) {
0x0000234c movls r3, 1 | r3 = 1;
| }
0x0000234e eor r1, r1, 2 | r1 ^= 2;
0x00002352 ands.w r3, r3, r1, lsr 1 | r3 &= (r1 >> 1);
| if (r3 == r3) {
0x00002356 beq.w 0x2214 | goto label_4;
| }
0x0000235a ldr r1, [sp, 0x28] | r1 = var_28h_2;
0x0000235c ldr r3, [sp, 0x30] | r3 = var_30h;
0x0000235e adds r3, r1, r3 | r3 = r1 + r3;
0x00002360 cmp r2, r3 |
| if (r2 <= r3) {
0x00002362 blo.w 0x2214 | goto label_4;
| }
0x00002366 strd r1, r3, [r4] | __asm ("strd r1, r3, [r4]");
0x0000236a ldr r3, [sp, 0x34] | r3 = var_34h;
0x0000236c str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0000236e b 0x22c2 | goto label_8;
| label_28:
0x00002370 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00002372 ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00002374 cmp r3, 3 |
| if (r3 != 3) {
0x00002376 bne.w 0x20fa | goto label_2;
| }
0x0000237a cmp.w fp, 0 |
0x0000237e ite eq |
| if (fp != 0) {
0x00002380 moveq r2, 0 | r2 = 0;
| }
| if (fp == 0) {
0x00002382 andne r2, r2, 1 | r2 &= 1;
| }
0x00002386 cmp r2, 0 |
| if (r2 == 0) {
0x00002388 beq.w 0x20fa | goto label_2;
| }
0x0000238c ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0000238e lsls r3, r3, 0x1e | r3 <<= 0x1e;
0x00002390 it pl |
| if (r3 < r3) {
0x00002392 strpl r0, [r4, 0x18] | *((r4 + 0x18)) = r0;
| }
0x00002394 b 0x20fa | goto label_2;
| label_34:
0x00002396 ldr r0, [r5] | r0 = *(r5);
0x00002398 blx 0xea0 | fcn_00000ea0 ();
0x0000239c mov r0, r6 | r0 = r6;
0x0000239e bl 0x1f5c | fcn_00001f5c (r0);
0x000023a2 b 0x232c | goto label_9;
| label_24:
0x000023a4 strd r3, r3, [sp, 0x30] | __asm ("strd r3, r3, [sp, 0x30]");
0x000023a8 str r3, [sp, 0x28] | var_28h_2 = r3;
0x000023aa str r3, [sp, 0x18] | var_18h_2 = r3;
0x000023ac b 0x20cc | goto label_10;
| label_23:
0x000023ae mov.w r0, -1 | r0 = -1;
0x000023b2 blx 0xf04 | getopt (r0, r1, r2);
0x000023b6 ldr r1, [pc, 0x58] |
0x000023b8 mov r2, r0 | r2 = r0;
0x000023ba movs r0, 1 | r0 = 1;
0x000023bc add r1, pc | r1 = 0x47d2;
0x000023be blx 0xe54 | fcn_00000e54 ();
0x000023c2 b 0x2262 | goto label_11;
| label_37:
0x000023c4 mov.w r3, -1 | r3 = -1;
0x000023c8 str r3, [sp, 0x2c] | ptr = r3;
0x000023ca blx 0xea0 | fcn_00000ea0 ();
0x000023ce mov r0, r6 | r0 = r6;
0x000023d0 bl 0x1f5c | fcn_00001f5c (r0);
0x000023d4 b 0x232c | goto label_9;
| label_36:
0x000023d6 blx 0xfac | fprintf_chk ()
0x000023da nop |
0x000023dc cmp r6, 0xf8 |
0x000023de movs r0, r0 |
0x000023e0 lsls r4, r3, 4 | r4 = r3 << 4;
0x000023e2 movs r0, r0 |
0x000023e4 lsrs r4, r6, 0xf | r4 = r6 >> 0xf;
0x000023e6 movs r0, r0 |
0x000023e8 lsrs r0, r1, 0x14 | r0 = r1 >> 0x14;
0x000023ea movs r0, r0 |
0x000023ec lsrs r2, r0, 0x14 | r2 = r0 >> 0x14;
0x000023ee movs r0, r0 |
0x000023f0 lsrs r2, r2, 0x13 | r2 >>= 0x13;
0x000023f2 movs r0, r0 |
0x000023f4 lsrs r0, r6, 0x11 | r0 = r6 >> 0x11;
0x000023f6 movs r0, r0 |
0x000023f8 lsrs r0, r1, 0x11 | r0 = r1 >> 0x11;
0x000023fa movs r0, r0 |
0x000023fc lsrs r6, r1, 0x11 | r6 = r1 >> 0x11;
0x000023fe movs r0, r0 |
0x00002400 lsrs r4, r2, 0x11 | r4 = r2 >> 0x11;
0x00002402 movs r0, r0 |
0x00002404 lsrs r0, r2, 0xe | r0 = r2 >> 0xe;
0x00002406 movs r0, r0 |
0x00002408 cmp r4, 0x4c |
0x0000240a movs r0, r0 |
0x0000240c lsrs r6, r2, 8 | r6 = r2 >> 8;
0x0000240e movs r0, r0 |
0x00002410 lsrs r4, r7, 5 | r4 = r7 >> 5;
0x00002412 movs r0, r0 |
0x00002414 ldr r2, [pc, 0x174] |
0x00002416 movs r1, 0 | r1 = 0;
0x00002418 ldr r3, [pc, 0x174] | r3 = *(0x2590);
0x0000241a push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000241e mov sl, r0 | sl = r0;
0x00002420 add r2, pc | r2 = 0x49b0;
0x00002422 sub sp, 0xb4 |
0x00002424 ldr r3, [r2, r3] |
0x00002426 ldr r0, [r0, 0x20] | r0 = *((r0 + 0x20));
0x00002428 ldr r3, [r3] | r3 = *(0x49b0);
0x0000242a str r3, [sp, 0xac] | var_ach = r3;
0x0000242c mov.w r3, 0 | r3 = 0;
0x00002430 blx 0xd90 | r0 = open (r0, r1, r2);
0x00002434 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 < r0) {
0x00002436 blt.w 0x254a | goto label_38;
| }
0x0000243a movs r1, 1 | r1 = 1;
0x0000243c movs r2, 0 | r2 = 0;
0x0000243e blx 0x1030 | realloc (r0, r1);
0x00002442 add r1, sp, 0x68 | r1 += var_68h;
0x00002444 mov r6, r0 | r6 = r0;
0x00002446 blx 0xff4 | r0 = elf_nextscn ();
0x0000244a cmp r0, 0 |
| if (r0 == 0) {
0x0000244c beq.w 0x256c | goto label_39;
| }
0x00002450 ldr r3, [pc, 0x140] |
0x00002452 movs r4, 0 | r4 = 0;
0x00002454 add.w sb, sp, 0x28 | sb += var_28h;
0x00002458 add r3, pc | r3 = 0x49f0;
0x0000245a str r3, [sp, 4] | s1 = r3;
| do {
| label_12:
0x0000245c mov r1, r4 | r1 = r4;
0x0000245e mov r0, r6 | r0 = r6;
0x00002460 blx 0x1000 | r0 = gelf_getphdr ();
0x00002464 mov r4, r0 | r4 = r0;
0x00002466 cmp r0, 0 |
| if (r0 == 0) {
0x00002468 beq 0x250c | goto label_40;
| }
| label_13:
0x0000246a mov r1, sb | r1 = sb;
0x0000246c blx 0xf4c | close (r0);
0x00002470 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00002472 cmp r3, 2 |
0x00002474 it ne |
| if (r3 != 2) {
0x00002476 cmpne r3, 0xb | __asm ("cmpne r3, 0xb");
| }
0x00002478 bne 0x245c |
| } while (r3 != 2);
0x0000247a movs r1, 0 | r1 = 0;
0x0000247c mov r0, r4 | r0 = r4;
0x0000247e blx 0xdf4 | fcn_00000df4 ();
0x00002482 ldrd r2, r3, [sp, 0x60] | __asm ("ldrd r2, r3, [var_60h]");
0x00002486 mov r8, r0 | r8 = r0;
0x00002488 ldrd r0, r1, [sp, 0x48] | __asm ("ldrd r0, r1, [var_48h]");
0x0000248c bl 0x2984 | r0 = fcn_00002984 (r0, r1, r2, r3);
0x00002490 subs.w fp, r0, 0 |
| if (fp <= r0) {
0x00002494 ble 0x245c | goto label_12;
| }
0x00002496 movs r7, 0 | r7 = 0;
0x00002498 add r3, sp, 0x10 | r3 += var_10h;
0x0000249a str r4, [sp, 8] | var_8h = r4;
0x0000249c mov r4, r7 | r4 = r7;
0x0000249e mov r7, r3 | r7 = r3;
0x000024a0 str r5, [sp, 0xc] | var_ch = r5;
| do {
0x000024a2 mov r2, r7 | r2 = r7;
0x000024a4 mov r1, r4 | r1 = r4;
0x000024a6 mov r0, r8 | r0 = r8;
0x000024a8 blx 0xd84 | gelf_getsym ();
0x000024ac ldrh.w r2, [sp, 0x16] | r2 = var_16h;
| if (r2 != 0) {
0x000024b0 cbz r2, 0x24f4 |
0x000024b2 ldrd r2, r1, [sp, 0x20] | __asm ("ldrd r2, r1, [var_20h]");
0x000024b6 orrs r2, r1 | r2 |= r1;
| if (r2 == r1) {
0x000024b8 beq 0x24f4 | goto label_14;
| }
0x000024ba ldr r2, [sp, 0x10] | r2 = var_10h;
0x000024bc mov r0, r6 | r0 = r6;
0x000024be ldr r1, [sp, 0x50] | r1 = var_50h;
0x000024c0 blx 0xdb4 | r0 = elf_strptr ();
0x000024c4 mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x000024c6 cbz r0, 0x24f4 | goto label_14;
| }
0x000024c8 mov r1, r0 | r1 = r0;
0x000024ca movs r2, 9 | r2 = 9;
0x000024cc ldr r0, [sp, 4] | r0 = s1;
0x000024ce blx 0xdcc | r0 = memcmp (r0, r1, r2);
| if (r0 != 0) {
0x000024d2 cbnz r0, 0x24f4 | goto label_14;
| }
0x000024d4 ldr r1, [sp, 0x18] | r1 = var_18h;
0x000024d6 mov r0, r5 | r0 = r5;
0x000024d8 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000024da add r2, r1 | r2 += r1;
0x000024dc bl 0x1e5c | fcn_00001e5c (r0, r1, r2);
0x000024e0 ldr.w r2, [sl, 0x24] | r2 = *((sl + 0x24));
| if (r2 != 0) {
0x000024e4 cbz r2, 0x24ee |
0x000024e6 ldr r3, [r0] | r3 = *(r0);
0x000024e8 ldr r1, [r2] | r1 = *(r2);
0x000024ea cmp r1, r3 |
| if (r1 < r3) {
0x000024ec bls 0x253a | goto label_41;
| }
| }
0x000024ee str r2, [r0, 0x10] | *((r0 + 0x10)) = r2;
0x000024f0 str.w r0, [sl, 0x24] | __asm ("str.w r0, [sl, 0x24]");
| }
| label_14:
0x000024f4 adds r4, 1 | r4++;
0x000024f6 cmp fp, r4 |
0x000024f8 bne 0x24a2 |
| } while (fp != r4);
0x000024fa ldrd r4, r5, [sp, 8] | __asm ("ldrd r4, r5, [var_8h]");
0x000024fe mov r0, r6 | r0 = r6;
0x00002500 mov r1, r4 | r1 = r4;
0x00002502 blx 0x1000 | r0 = gelf_getphdr ();
0x00002506 mov r4, r0 | r4 = r0;
0x00002508 cmp r0, 0 |
| if (r0 != 0) {
0x0000250a bne 0x246a | goto label_13;
| }
| if (r6 != 0) {
| label_40:
0x0000250c cbz r6, 0x2514 |
| label_16:
0x0000250e mov r0, r6 | r0 = r6;
0x00002510 blx 0xfdc | puts (r0);
| }
| label_17:
0x00002514 mov r0, r5 | r0 = r5;
0x00002516 blx 0xf58 | fwrite (r0, r1, r2, r3);
0x0000251a ldr r2, [pc, 0x7c] |
0x0000251c ldr r3, [pc, 0x70] | r3 = *(0x2590);
0x0000251e add r2, pc | r2 = 0x4abc;
0x00002520 ldr r3, [r2, r3] | r3 = *(0x4abc);
0x00002522 ldr r2, [r3] | r2 = *(0x4abc);
0x00002524 ldr r3, [sp, 0xac] | r3 = var_ach;
0x00002526 eors r2, r3 | r2 ^= r3;
0x00002528 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000252c bne 0x2586 | goto label_42;
| }
0x0000252e add sp, 0xb4 |
0x00002530 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| do {
0x00002534 ldr r1, [r2] | r1 = *(r2);
0x00002536 cmp r3, r1 |
| if (r3 < r1) {
0x00002538 bls 0x2542 | goto label_43;
| }
| label_41:
0x0000253a mov lr, r2 | lr = r2;
0x0000253c ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x0000253e cmp r2, 0 |
0x00002540 bne 0x2534 |
| } while (r2 != 0);
| label_43:
0x00002542 str r2, [r0, 0x10] | *((r0 + 0x10)) = r2;
0x00002544 str.w r0, [lr, 0x10] | __asm ("str.w r0, [lr, 0x10]");
0x00002548 b 0x24f4 | goto label_14;
| label_38:
0x0000254a ldr r2, [pc, 0x50] |
0x0000254c ldr r3, [pc, 0x40] | r3 = *(0x2590);
0x0000254e add r2, pc | r2 = 0x4af0;
0x00002550 ldr r3, [r2, r3] | r3 = *(0x4af0);
0x00002552 ldr r2, [r3] | r2 = *(0x4af0);
0x00002554 ldr r3, [sp, 0xac] | r3 = var_ach;
0x00002556 eors r2, r3 | r2 ^= r3;
0x00002558 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000255c bne 0x2586 | goto label_42;
| }
0x0000255e ldr.w r0, [sl, 0x20] | r0 = *((sl + 0x20));
0x00002562 add sp, 0xb4 |
0x00002564 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00002568 b.w 0xe9c | goto label_15;
| label_39:
0x0000256c mov.w r0, -1 | r0 = -1;
0x00002570 blx 0xf04 | getopt (r0, r1, r2);
0x00002574 ldr r1, [pc, 0x28] |
0x00002576 mov r2, r0 | r2 = r0;
0x00002578 movs r0, 1 | r0 = 1;
0x0000257a add r1, pc | r1 = 0x4b1e;
0x0000257c blx 0xe54 | fcn_00000e54 ();
0x00002580 cmp r6, 0 |
| if (r6 != 0) {
0x00002582 bne 0x250e | goto label_16;
| }
0x00002584 b 0x2514 | goto label_17;
| label_42:
0x00002586 blx 0xfac | fprintf_chk ()
0x0000258a nop |
0x0000258c cmp r2, 0xac |
0x0000258e movs r0, r0 |
0x00002590 lsls r4, r3, 4 | r4 = r3 << 4;
0x00002592 movs r0, r0 |
0x00002594 lsrs r4, r2, 6 | r4 = r2 >> 6;
0x00002596 movs r0, r0 |
0x00002598 cmp r1, 0xae |
0x0000259a movs r0, r0 |
0x0000259c cmp r1, 0x7e |
0x0000259e movs r0, r0 |
0x000025a0 lsls r6, r7, 0x1e | r6 = r7 << 0x1e;
0x000025a2 movs r0, r0 |
0x000025a4 push.w {r4, r5, r6, r7, r8, lr} |
0x000025a8 sub sp, 8 |
0x000025aa ldr r5, [pc, 0xe4] |
0x000025ac mov r7, r0 | r7 = r0;
0x000025ae movs r1, 1 | r1 = 1;
0x000025b0 ldr r4, [pc, 0xe0] | r4 = *(0x2694);
0x000025b2 add r5, pc | r5 = 0x4c48;
0x000025b4 ldr r2, [pc, 0xe0] |
0x000025b6 ldr r3, [r0] | r3 = *(r0);
0x000025b8 mov r0, sp | r0 = sp;
0x000025ba ldr r4, [r5, r4] |
0x000025bc add r2, pc | r2 = 0x4c58;
0x000025be ldr r5, [pc, 0xdc] |
0x000025c0 ldr r4, [r4] | r4 = *(0x4c48);
0x000025c2 str r4, [sp, 4] | var_4h = r4;
0x000025c4 mov.w r4, 0 | r4 = 0;
0x000025c8 blx 0xef8 | elf_errmsg ();
0x000025cc ldr r0, [sp] | r0 = *(sp);
0x000025ce add r5, pc | r5 = 0x4c70;
0x000025d0 cmp r0, 0 |
| if (r0 == 0) {
0x000025d2 beq 0x268c | goto label_44;
| }
0x000025d4 blx 0xdc0 | r0 = opendir ();
0x000025d8 mov r8, r0 | r8 = r0;
0x000025da ldr r0, [sp] | r0 = *(sp);
0x000025dc blx 0xed4 | read (r0, r1, r2);
0x000025e0 cmp.w r8, 0 |
| if (r8 == 0) {
0x000025e4 beq 0x268c | goto label_44;
| }
0x000025e6 movs r6, 0 | r6 = 0;
| do {
0x000025e8 mov r0, r8 | r0 = r8;
0x000025ea blx 0x1054 | r0 = strcmp (r0, r1);
0x000025ee mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x000025f0 cbz r0, 0x2612 | goto label_45;
| }
| label_18:
0x000025f2 movs r2, 0xa | r2 = 0xa;
0x000025f4 movs r1, 0 | r1 = 0;
0x000025f6 adds r0, 0xb | r0 += 0xb;
0x000025f8 blx 0xf1c | r0 = memcpy (r0, r1, r2);
| if (r0 != 0) {
0x000025fc cbnz r0, 0x2604 | goto label_46;
| }
0x000025fe ldrb r3, [r4, 0xb] | r3 = *((r4 + 0xb));
0x00002600 cmp r3, 0x30 |
0x00002602 bne 0x25e8 |
| } while (r3 != 0x30);
| label_46:
0x00002604 mov r0, r8 | r0 = r8;
0x00002606 adds r6, 1 | r6++;
0x00002608 blx 0x1054 | r0 = strcmp (r0, r1);
0x0000260c mov r4, r0 | r4 = r0;
0x0000260e cmp r0, 0 |
| if (r0 != 0) {
0x00002610 bne 0x25f2 | goto label_18;
| }
| label_45:
0x00002612 lsls r0, r6, 2 | r0 = r6 << 2;
0x00002614 blx 0xfa0 | stack_chk_fail ();
0x00002616 stcl p0, c6, [r4], {0xf8} | __asm ("stcl p0, c6, [r4], {0xf8}");
| if (r0 == 0) {
0x0000261a cbz r0, 0x2674 | goto label_47;
| }
0x0000261c mov r0, r8 | r0 = r8;
0x0000261e mov r5, r4 | r5 = r4;
0x00002620 blx 0xfd0 | elf_end ();
| do {
0x00002624 mov r0, r8 | r0 = r8;
0x00002626 blx 0x1054 | r0 = strcmp (r0, r1);
0x0000262a mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0000262c cbz r0, 0x2654 | goto label_48;
| }
| label_19:
0x0000262e movs r2, 0xa | r2 = 0xa;
0x00002630 movs r1, 0 | r1 = 0;
0x00002632 adds r0, 0xb | r0 += 0xb;
0x00002634 blx 0xf1c | r0 = memcpy (r0, r1, r2);
| if (r0 != 0) {
0x00002638 cbnz r0, 0x2640 | goto label_49;
| }
0x0000263a ldrb r3, [r4, 0xb] | r3 = *((r4 + 0xb));
0x0000263c cmp r3, 0x30 |
0x0000263e bne 0x2624 |
| } while (r3 != 0x30);
| label_49:
0x00002640 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00002642 str.w r0, [r3, r5, lsl 2] | __asm ("str.w r0, [r3, r5, lsl 2]");
0x00002646 mov r0, r8 | r0 = r8;
0x00002648 blx 0x1054 | strcmp (r0, r1);
0x0000264c adds r5, 1 | r5++;
0x0000264e mov r4, r0 | r4 = r0;
0x00002650 cmp r0, 0 |
| if (r0 != 0) {
0x00002652 bne 0x262e | goto label_19;
| }
| label_48:
0x00002654 str r6, [r7, 0x10] | *((r7 + 0x10)) = r6;
| do {
0x00002656 ldr r2, [pc, 0x48] |
0x00002658 ldr r3, [pc, 0x38] | r3 = *(0x2694);
0x0000265a add r2, pc | r2 = 0x4d00;
0x0000265c ldr r3, [r2, r3] | r3 = *(0x4d00);
0x0000265e ldr r2, [r3] | r2 = *(0x4d00);
0x00002660 ldr r3, [sp, 4] | r3 = var_4h;
0x00002662 eors r2, r3 | r2 ^= r3;
0x00002664 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00002668 bne 0x2670 |
0x0000266a add sp, 8 |
0x0000266c pop.w {r4, r5, r6, r7, r8, pc} |
| }
0x00002670 blx 0xfac | fprintf_chk ()
| label_47:
0x00002674 mov r0, r8 | r0 = r8;
0x00002676 blx 0xf70 | elf_version ();
0x0000267a ldr r3, [pc, 0x28] |
0x0000267c movs r2, 0x1f | r2 = 0x1f;
0x0000267e ldr r0, [pc, 0x28] |
0x00002680 movs r1, 1 | r1 = 1;
0x00002682 ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x00002684 add r0, pc | r0 = 0x4d32;
0x00002686 ldr r3, [r3] | r3 = *(0x26a6);
0x00002688 blx 0xf64 | closedir ();
| label_44:
0x0000268c movs r0, 1 | r0 = 1;
0x0000268e b 0x2656 |
| } 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/bin/dcore @ 0x26ac */
| #include <stdint.h>
|
; (fcn) fcn.000026ac () | void fcn_000026ac (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_34h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000026ac push {r4, r5, r6, r7, lr} |
0x000026ae mov r5, r2 | r5 = r2;
0x000026b0 ldr r2, [pc, 0x7c] |
0x000026b2 sub sp, 0x14 |
0x000026b4 mov r7, r0 | r7 = r0;
0x000026b6 mov r6, r1 | r6 = r1;
0x000026b8 ldr r3, [pc, 0x78] | r3 = *(0x2734);
0x000026ba add r2, pc | r2 = 0x4dee;
0x000026bc ldr r3, [r2, r3] |
0x000026be add r2, sp, 8 | r2 += var_8h;
0x000026c0 ldr r3, [r3] | r3 = *(0x4dee);
0x000026c2 str r3, [sp, 0xc] | var_ch = r3;
0x000026c4 mov.w r3, 0 | r3 = 0;
0x000026c8 bl 0x1ec0 | fcn_00001ec0 (r0, r1, r2);
0x000026cc ldr.w ip, [pc, 0x68] |
0x000026d0 mov r4, r0 | r4 = r0;
0x000026d2 add ip, pc | ip = 0x4e0e;
| if (r0 == 0) {
0x000026d4 cbz r0, 0x2714 | goto label_0;
| }
0x000026d6 ldr r2, [sp, 8] | r2 = var_8h;
0x000026d8 mov r1, r5 | r1 = r5;
0x000026da ldr r4, [r0] | r4 = *(r0);
0x000026dc mov r0, r7 | r0 = r7;
0x000026de ldr r3, [r2] | r3 = *(r2);
0x000026e0 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x000026e2 subs r3, r3, r2 | r3 -= r2;
0x000026e4 movs r2, 0 | r2 = 0;
0x000026e6 add r3, r4 | r3 += r4;
0x000026e8 str r2, [sp, 4] | var_4h = r2;
0x000026ea str r3, [sp] | *(sp) = r3;
0x000026ec movs r2, 4 | r2 = 4;
0x000026ee bl 0x1f0c | r0 = fcn_00001f0c (r0, r1, r2, r3);
0x000026f2 sub.w r0, r0, 4 | r0 -= 4;
0x000026f6 clz r0, r0 | r0 &= r0;
0x000026fa lsrs r0, r0, 5 | r0 >>= 5;
| do {
0x000026fc ldr r2, [pc, 0x3c] |
0x000026fe ldr r3, [pc, 0x34] | r3 = *(0x2736);
0x00002700 add r2, pc | r2 = 0x4e40;
0x00002702 ldr r3, [r2, r3] | r3 = *(0x4e40);
0x00002704 ldr r2, [r3] | r2 = *(0x4e40);
0x00002706 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00002708 eors r2, r3 | r2 ^= r3;
0x0000270a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000270e bne 0x272c | goto label_1;
| }
0x00002710 add sp, 0x14 |
0x00002712 pop {r4, r5, r6, r7, pc} |
| label_0:
0x00002714 ldr r1, [pc, 0x28] | r1 = *(0x2740);
0x00002716 mov r3, r6 | r3 = r6;
0x00002718 ldr r2, [pc, 0x28] |
0x0000271a ldr.w r1, [ip, r1] | r1 = *((ip + r1));
0x0000271e add r2, pc | r2 = 0x4e66;
0x00002720 ldr r0, [r1] | r0 = *(0x2740);
0x00002722 movs r1, 1 | r1 = 1;
0x00002724 blx 0xfb8 | fputc (r0, r1);
0x00002728 mov r0, r4 | r0 = r4;
0x0000272a b 0x26fc |
| } while (1);
| label_1:
0x0000272c blx 0xfac | r0 = fprintf_chk ()
0x00002730 cmp r0, 0x12 |
0x00002732 movs r0, r0 |
0x00002734 lsls r4, r3, 4 | r4 = r3 << 4;
0x00002736 movs r0, r0 |
0x00002738 movs r7, 0xfa | r7 = 0xfa;
0x0000273a movs r0, r0 |
0x0000273c movs r7, 0xcc | r7 = 0xcc;
0x0000273e movs r0, r0 |
0x00002740 lsls r0, r4, 4 | r0 = r4 << 4;
0x00002742 movs r0, r0 |
0x00002744 lsls r2, r1, 0x1c | r2 = r1 << 0x1c;
0x00002746 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/bin/dcore @ 0x2748 */
| #include <stdint.h>
|
; (fcn) fcn.00002748 () | void fcn_00002748 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
0x00002748 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x0000274c movs r2, 0 | r2 = 0;
0x0000274e ldr r4, [pc, 0x1a4] |
0x00002750 sub sp, 0x3c |
0x00002752 mov r5, r0 | r5 = r0;
0x00002754 mov.w sb, 1 | sb = 1;
0x00002758 ldr r3, [pc, 0x19c] | r3 = *(0x28f8);
0x0000275a add r4, pc | r4 = 0x5054;
0x0000275c ldr r1, [pc, 0x19c] |
0x0000275e ldr.w sl, [pc, 0x1a0] |
0x00002762 ldr r3, [r4, r3] |
0x00002764 add r1, pc | r1 = 0x5064;
0x00002766 add sl, pc | sl = 0x506c;
0x00002768 ldr r3, [r3] | r3 = imp.__aeabi_unwind_cpp_pr0;
0x0000276a str r3, [sp, 0x34] | var_34h = r3;
0x0000276c mov.w r3, 0 | r3 = 0;
0x00002770 bl 0x1ec0 | fcn_00001ec0 (r0, r1, r2);
0x00002772 umull r2, r8, r6, r0 | r2:r8 = r6 * r0;
| if (r2 == 0) {
0x00002776 beq.w 0x28b4 | goto label_2;
| }
0x0000277a ldr r1, [pc, 0x188] |
0x0000277c add r2, sp, 0x18 | r2 += var_18h;
0x0000277e mov r0, r5 | r0 = r5;
0x00002780 ldr r6, [pc, 0x184] |
0x00002782 add.w fp, sp, 0x30 |
0x00002786 add r1, pc | r1 = 0x5090;
0x00002788 bl 0x26ac | fcn_000026ac (r0, r1, r2);
0x0000278c ldr r1, [pc, 0x17c] |
0x0000278e add r2, sp, 0x1c | r2 += var_1ch;
0x00002790 mov r7, r0 | r7 = r0;
0x00002792 mov r0, r5 | r0 = r5;
0x00002794 add r6, pc | r6 = 0x50a0;
0x00002796 add r1, pc | r1 = 0x50a6;
0x00002798 bl 0x26ac | fcn_000026ac (r0, r1, r2);
0x0000279c ldr r1, [pc, 0x170] |
0x0000279e add r2, sp, 0x20 | r2 += var_20h;
0x000027a0 mov r8, r0 | r8 = r0;
0x000027a2 mov r0, r5 | r0 = r5;
0x000027a4 add r1, pc | r1 = 0x50b8;
0x000027a6 bl 0x26ac | fcn_000026ac (r0, r1, r2);
0x000027aa ldr r1, [pc, 0x168] |
0x000027ac add r2, sp, 0x24 | r2 += var_24h;
0x000027ae mov r4, r0 | r4 = r0;
0x000027b0 mov r0, r5 | r0 = r5;
0x000027b2 add r1, pc | r1 = 0x50cc;
0x000027b4 bl 0x26ac | fcn_000026ac (r0, r1, r2);
0x000027b8 mov r2, fp | r2 = fp;
0x000027ba mov sb, r0 | sb = r0;
0x000027bc mov r1, r6 | r1 = r6;
0x000027be mov r0, r5 | r0 = r5;
0x000027c0 bl 0x1ec0 | r0 = fcn_00001ec0 (r0, r1, r2);
0x000027c4 cmp r0, 0 |
| if (r0 == 0) {
0x000027c6 beq 0x2884 | goto label_4;
| }
0x000027c8 ldr r3, [r0] | r3 = *(r0);
0x000027ca add r2, sp, 0x28 | r2 += var_28h;
0x000027cc ldr r1, [pc, 0x148] |
0x000027ce mov r0, r5 | r0 = r5;
0x000027d0 str r3, [sp, 0xc] | var_ch = r3;
0x000027d2 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000027d4 add r1, pc | r1 = 0x50f0;
0x000027d6 ldr r6, [r3] | r6 = *(r3);
0x000027d8 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000027da str r3, [sp, 0x10] | var_10h = r3;
0x000027dc bl 0x26ac | fcn_000026ac (r0, r1, r2);
0x000027e0 cmp.w sb, 0 |
0x000027e4 it ne |
| if (sb != 0) {
0x000027e6 cmpne r4, 0 | __asm ("cmpne r4, 0");
| }
0x000027e8 ite eq |
| if (sb != 0) {
0x000027ea moveq sb, 1 | sb = 1;
| }
| if (sb != 0) {
0x000027ee mov.w sb, 0 | sb = 0;
| }
0x000027f2 cmp.w r8, 0 |
0x000027f6 it eq |
| if (r8 != 0) {
0x000027f8 orreq sb, sb, 1 | sb |= 1;
| }
0x000027fa lsrs r1, r0, 4 | r1 = r0 >> 4;
0x000027fc cmp r7, 0 |
0x000027fe it eq |
| if (r7 != 0) {
0x00002800 orreq sb, sb, 1 | sb |= 1;
| }
0x00002804 cmp r0, 0 |
0x00002806 it eq |
| if (r0 != 0) {
0x00002808 orreq sb, sb, 1 | sb |= 1;
| }
0x0000280c cmp.w sb, 0 |
| if (sb != 0) {
0x00002810 bne 0x28e6 | goto label_5;
| }
0x00002812 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00002814 str r3, [sp, 0x14] | var_14h = r3;
0x00002816 lsls r0, r3, 2 | r0 = r3 << 2;
0x00002818 blx 0xfa0 | stack_chk_fail ();
0x0000281c str r0, [r5, 0xc] | *((r5 + 0xc)) = r0;
0x0000281e cmp r0, 0 |
| if (r0 == 0) {
0x00002820 beq 0x28e6 | goto label_5;
| }
0x00002822 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00002824 cmp r3, 0 |
| if (r3 <= 0) {
0x00002826 ble 0x28de | goto label_6;
| }
0x00002828 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0000282a mov r4, sb | r4 = sb;
0x0000282c add.w r8, sp, 0x2c | r8 += var_2ch;
0x00002830 mov r7, sb | r7 = sb;
0x00002832 subs r6, r6, r3 | r6 -= r3;
0x00002834 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00002836 add r6, r3 | r6 += r3;
0x00002838 b 0x2844 |
| while (r3 == 0) {
| label_0:
0x0000283a ldr r3, [sp, 0x28] | r3 = var_28h;
0x0000283c add.w sb, sb, 1 | sb++;
0x00002840 cmp r4, r3 |
| if (r4 >= r3) {
0x00002842 bge 0x28de | goto label_6;
| }
| label_1:
0x00002844 ldrd r0, r3, [sp, 0x18] | __asm ("ldrd r0, r3, [var_18h]");
0x00002848 movs r2, 4 | r2 = 4;
0x0000284a mov r1, r8 | r1 = r8;
0x0000284c str r7, [sp, 4] | var_4h = r7;
0x0000284e add r3, r6 | r3 += r6;
0x00002850 mla r3, r0, sb, r3 | __asm ("mla r3, r0, sb, r3");
0x00002854 mov r0, r5 | r0 = r5;
0x00002856 str r3, [sp] | *(sp) = r3;
0x00002858 bl 0x1f0c | fcn_00001f0c (r0, r1, r2, r3);
0x0000285c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0000285e cmp r3, 0 |
0x00002860 beq 0x283a |
| }
0x00002862 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00002864 mov r1, fp | r1 = fp;
0x00002866 mov r0, r5 | r0 = r5;
0x00002868 str r7, [sp, 4] | var_4h = r7;
0x0000286a add r3, r2 | r3 += r2;
0x0000286c movs r2, 4 | r2 = 4;
0x0000286e str r3, [sp] | *(sp) = r3;
0x00002870 str r3, [sp, 0x2c] | var_2ch = r3;
0x00002872 bl 0x1f0c | fcn_00001f0c (r0, r1, r2, r3);
0x00002876 ldr r3, [sp, 0x30] | r3 = var_30h;
| if (r3 != 0) {
0x00002878 cbz r3, 0x28d0 |
0x0000287a ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x0000287c str.w r3, [r2, r4, lsl 2] | __asm ("str.w r3, [r2, r4, lsl 2]");
0x00002880 adds r4, 1 | r4++;
0x00002882 b 0x283a | goto label_0;
| label_4:
0x00002884 ldr r1, [pc, 0x94] | r1 = *(0x291c);
0x00002886 mov r3, r6 | r3 = r6;
0x00002888 ldr r2, [pc, 0x94] |
0x0000288a ldr.w r4, [sl, r1] | r4 = *((sl + r1));
0x0000288e movs r1, 1 | r1 = 1;
0x00002890 add r2, pc | r2 = 0x51b4;
0x00002892 mov sb, r1 | sb = r1;
0x00002894 ldr r0, [r4] | r0 = *(r4);
0x00002896 blx 0xfb8 | fputc (r0, r1);
0x0000289a ldr r1, [pc, 0x88] |
0x0000289c add r2, sp, 0x28 | r2 += var_28h;
0x0000289e mov r0, r5 | r0 = r5;
0x000028a0 add r1, pc | r1 = 0x51ca;
0x000028a2 bl 0x26ac | fcn_000026ac (r0, r1, r2);
| label_3:
0x000028a6 ldr r0, [pc, 0x80] |
0x000028a8 movs r2, 0x1f | r2 = 0x1f;
0x000028aa ldr r3, [r4] | r3 = *(r4);
0x000028ac movs r1, 1 | r1 = 1;
0x000028ae add r0, pc | r0 = 0x51dc;
0x000028b0 blx 0xf64 | closedir ();
| label_2:
0x000028b4 ldr r2, [pc, 0x74] |
0x000028b6 ldr r3, [pc, 0x40] | r3 = *(0x28fa);
0x000028b8 add r2, pc | r2 = 0x51e8;
0x000028ba ldr r3, [r2, r3] | r3 = imp.__aeabi_unwind_cpp_pr0;
0x000028bc ldr r2, [r3] | r2 = imp.__aeabi_unwind_cpp_pr0;
0x000028be ldr r3, [sp, 0x34] | r3 = var_34h;
0x000028c0 eors r2, r3 | r2 ^= r3;
0x000028c2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000028c6 bne 0x28ee | goto label_7;
| }
0x000028c8 mov r0, sb | r0 = sb;
0x000028ca add sp, 0x3c |
0x000028cc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x000028d0 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000028d2 add.w sb, sb, 1 | sb++;
0x000028d6 subs r3, 1 | r3--;
0x000028d8 cmp r4, r3 |
0x000028da str r3, [sp, 0x28] | var_28h = r3;
| if (r4 < r3) {
0x000028dc blt 0x2844 | goto label_1;
| }
| label_6:
0x000028de mov.w sb, 0 | sb = 0;
0x000028e2 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x000028e4 b 0x28b4 | goto label_2;
| label_5:
0x000028e6 ldr r3, [pc, 0x34] | r3 = *(0x291e);
0x000028e8 ldr.w r4, [sl, r3] | r4 = *((sl + r3));
0x000028ec b 0x28a6 | goto label_3;
| label_7:
0x000028ee blx 0xfac | fprintf_chk ()
0x000028f2 nop |
0x000028f4 movs r7, 0x72 | r7 = 0x72;
0x000028f6 movs r0, r0 |
0x000028f8 lsls r4, r3, 4 | r4 = r3 << 4;
0x000028fa movs r0, r0 |
0x000028fc lsls r4, r2, 0x1b | r4 = r2 << 0x1b;
0x000028fe movs r0, r0 |
0x00002900 movs r7, 0x66 | r7 = 0x66;
0x00002902 movs r0, r0 |
0x00002904 lsls r2, r1, 0x1b | r2 = r1 << 0x1b;
0x00002906 movs r0, r0 |
0x00002908 lsls r0, r4, 0x1c | r0 = r4 << 0x1c;
0x0000290a movs r0, r0 |
0x0000290c lsls r2, r2, 0x1b | r2 <<= 0x1b;
0x0000290e movs r0, r0 |
0x00002910 lsls r0, r4, 0x1b | r0 = r4 << 0x1b;
0x00002912 movs r0, r0 |
0x00002914 lsls r2, r5, 0x1b | r2 = r5 << 0x1b;
0x00002916 movs r0, r0 |
0x00002918 lsls r4, r6, 0x1b | r4 = r6 << 0x1b;
0x0000291a movs r0, r0 |
0x0000291c lsls r0, r4, 4 | r0 = r4 << 4;
0x0000291e movs r0, r0 |
0x00002920 lsls r0, r3, 0x16 | r0 = r3 << 0x16;
0x00002922 movs r0, r0 |
0x00002924 lsls r0, r5, 0x18 | r0 = r5 << 0x18;
0x00002926 movs r0, r0 |
0x00002928 lsls r2, r3, 0x15 | r2 = r3 << 0x15;
0x0000292a movs r0, r0 |
0x0000292c movs r6, 0x14 | r6 = 0x14;
0x0000292e movs r0, r0 |
| }
[*] Function fprintf used 11 times dcore