[*] Binary protection state of fwmgr
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH No Symbols
[*] Function strcat tear down of fwmgr
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/fwmgr @ 0xa224 */
| #include <stdint.h>
|
; (fcn) fcn.0000a224 () | void fcn_0000a224 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
0x0000a224 invalid |
0x0000a228 sub sp, 0xc |
0x0000a22a mov r5, r0 | r5 = r0;
0x0000a22c movw r1, 0x1ed | r1 = 0x1ed;
0x0000a230 mov r0, r4 | r0 = r4;
0x0000a232 bl 0x11388 | r0 = fcn_00011388 (r0, r1);
0x0000a236 cmp r0, 0 |
| if (r0 >= 0) {
0x0000a238 blt 0xa266 |
0x0000a23a ldr r2, [pc, 0x34] |
0x0000a23c mov.w r3, 0x1000 | r3 = 0x1000;
0x0000a240 mov r1, r5 | r1 = r5;
0x0000a242 mov r0, r4 | r0 = r4;
0x0000a244 add r2, pc | r2 = 0x144ba;
0x0000a246 str r2, [sp] | *(sp) = r2;
0x0000a248 blx 0x3188 | r0 = strcat_chk ()
0x0000a24c cmp r0, 0 |
0x0000a24e it ge |
| if (r0 < 0) {
0x0000a250 movge r0, 0 | r0 = 0;
| }
| if (r0 >= 0) {
0x0000a252 blt 0xa258 |
0x0000a254 add sp, 0xc |
0x0000a256 pop {r4, r5, pc} |
| }
0x0000a258 ldr r1, [pc, 0x18] |
0x0000a25a mov r3, r5 | r3 = r5;
0x0000a25c mov r2, r4 | r2 = r4;
0x0000a25e movs r0, 2 | r0 = 2;
0x0000a260 add r1, pc | r1 = 0x144d8;
0x0000a262 bl 0x10568 | r0 = fcn_00010568 (r0, r1, r2);
| }
0x0000a266 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000a26a ldr r0, [r0] | r0 = *(r0);
0x0000a26c add sp, 0xc |
0x0000a26e pop {r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/fwmgr @ 0xa278 */
| #include <stdint.h>
|
; (fcn) fcn.0000a278 () | void fcn_0000a278 (int16_t arg_178h, int16_t arg_1c0h, int16_t arg_218h) {
| int16_t var_5ch_2;
| int16_t var_a4h;
| int16_t var_0h_2;
| int16_t var_88h;
| int16_t var_64h;
0x0000a278 invalid |
0x0000a27c strb r0, [r4, 0xb] | *((r4 + 0xb)) = r0;
0x0000a27e ldr r3, [pc, 0xd8] |
0x0000a280 push {r4, r5, r6, lr} |
0x0000a282 sub sp, 0x68 |
0x0000a284 ldr r4, [pc, 0xd4] |
0x0000a286 add r1, pc | r1 += pc;
0x0000a288 ldr r0, [pc, 0xd4] |
0x0000a28a ldr r3, [r1, r3] | r3 = *((r1 + r3));
0x0000a28c add r4, pc | r4 = 0x145ec;
0x0000a28e ldr r5, [pc, 0xd4] |
0x0000a290 mov r1, r4 | r1 = r4;
0x0000a292 add r0, pc | r0 = 0x145f6;
0x0000a294 ldr r3, [r3] | r3 = *(0xa35a);
0x0000a296 str r3, [sp, 0x64] | var_64h = r3;
0x0000a298 mov.w r3, 0 | r3 = 0;
0x0000a29c add r5, pc | r5 = 0x14606;
0x0000a29e bl 0x9ff8 | r0 = fcn_00009ff8 (r0, r1, r2, r3);
0x0000a2a2 cbz r0, 0xa2c4 |
| while (r0 != 0) {
| label_0:
0x0000a2a4 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000a2a8 ldr r4, [r0] | r4 = *(r0);
| label_1:
0x0000a2aa ldr r2, [pc, 0xbc] |
0x0000a2ac ldr r3, [pc, 0xa8] | r3 = *(0xa358);
0x0000a2ae add r2, pc | r2 = 0x1461c;
0x0000a2b0 ldr r3, [r2, r3] | r3 = *(0x1461c);
0x0000a2b2 ldr r2, [r3] | r2 = *(0x1461c);
0x0000a2b4 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0000a2b6 eors r2, r3 | r2 ^= r3;
0x0000a2b8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000a2bc bne 0xa350 | goto label_2;
| }
0x0000a2be mov r0, r4 | r0 = r4;
0x0000a2c0 add sp, 0x68 |
0x0000a2c2 pop {r4, r5, r6, pc} |
0x0000a2c4 ldr r0, [pc, 0xa4] |
0x0000a2c6 movw r2, 0x1ed | r2 = 0x1ed;
0x0000a2ca mov r1, r4 | r1 = r4;
0x0000a2cc add r0, pc | r0 = 0x1463c;
0x0000a2ce bl 0x9ff8 | r0 = fcn_00009ff8 (r0, r1, r2, r3);
0x0000a2d2 cmp r0, 0 |
0x0000a2d4 bne 0xa2a4 |
| }
0x0000a2d6 ldr r1, [pc, 0x98] |
0x0000a2d8 ldr r0, [pc, 0x98] |
0x0000a2da add r1, pc | r1 = 0x14650;
0x0000a2dc add r0, pc | r0 = 0x14654;
0x0000a2de bl 0xa224 | r0 = fcn_0000a224 (r0, r1);
0x0000a2e2 cmp r0, 0 |
| if (r0 != 0) {
0x0000a2e4 bne 0xa2a4 | goto label_0;
| }
0x0000a2e6 ldr r1, [pc, 0x90] |
0x0000a2e8 ldr r0, [pc, 0x90] |
0x0000a2ea add r1, pc | r1 = 0x14668;
0x0000a2ec add r0, pc | r0 = 0x1466c;
0x0000a2ee bl 0xa224 | r0 = fcn_0000a224 (r0, r1);
0x0000a2f2 mov r4, r0 | r4 = r0;
0x0000a2f4 cmp r0, 0 |
| if (r0 != 0) {
0x0000a2f6 bne 0xa2a4 | goto label_0;
| }
0x0000a2f8 ldr r3, [pc, 0x84] |
0x0000a2fa ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x0000a2fc ldr r3, [r3] | r3 = *(0xa380);
0x0000a2fe cmp r3, 0 |
| if (r3 != 0) {
0x0000a300 bne 0xa2aa | goto label_1;
| }
0x0000a302 ldr r3, [pc, 0x80] |
0x0000a304 movw r0, 0x10b | r0 = 0x10b;
0x0000a308 ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x0000a30a ldr r3, [r3] |
0x0000a30c ldr r3, [r3, 0xc] | r3 = *(0xa392);
0x0000a30e blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000a310 cmp r0, 0 |
| if (r0 == 0) {
0x0000a312 beq 0xa2aa | goto label_1;
| }
0x0000a314 ldr r5, [pc, 0x70] |
0x0000a316 add r1, sp, 8 | r1 += var_88h;
0x0000a318 add r5, pc | r5 = 0x146a4;
0x0000a31a mov r0, r5 | r0 = r5;
0x0000a31c blx 0x2d9c | r0 = fcn_00002d9c ();
| if (r0 != 0) {
0x0000a320 cbz r0, 0xa326 |
0x0000a322 ldr r5, [pc, 0x68] |
0x0000a324 add r5, pc | r5 = 0x146b6;
| }
0x0000a326 ldr r2, [pc, 0x68] |
0x0000a328 mov.w r3, 0x1000 | r3 = 0x1000;
0x0000a32c ldr r6, [pc, 0x64] |
0x0000a32e mov r0, r5 | r0 = r5;
0x0000a330 add r2, pc | r2 = 0x146c6;
0x0000a332 add r6, pc | r6 = 0x146ca;
0x0000a334 str r2, [sp] | *(sp) = r2;
0x0000a336 mov r1, r6 | r1 = r6;
0x0000a338 blx 0x3188 | r0 = strcat_chk ()
0x0000a33c cmp r0, 0 |
| if (r0 >= 0) {
0x0000a33e bge 0xa2aa | goto label_1;
| }
0x0000a340 ldr r1, [pc, 0x54] |
0x0000a342 mov r3, r6 | r3 = r6;
0x0000a344 mov r2, r5 | r2 = r5;
0x0000a346 movs r0, 2 | r0 = 2;
0x0000a348 add r1, pc | r1 = 0x146e4;
0x0000a34a bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000a34e b 0xa2a4 | goto label_0;
| label_2:
0x0000a350 blx 0x2eac | socket (r0, r1, r2);
0x0000a354 ldr r1, [sp, 0x218] | r1 = *(arg_218h);
0x0000a356 movs r1, r0 | r1 = r0;
0x0000a358 lsls r4, r2, 0xc | r4 = r2 << 0xc;
0x0000a35a movs r0, r0 |
0x0000a35c subs r4, r7, r0 | r4 = r7 - r0;
0x0000a35e movs r1, r0 | r1 = r0;
0x0000a360 adds r2, r7, 0 | r2 = r7 + 0;
0x0000a362 movs r1, r0 | r1 = r0;
0x0000a364 ldr r1, [sp, 0x1c0] | r1 = *(arg_1c0h);
0x0000a366 movs r1, r0 | r1 = r0;
0x0000a368 ldr r1, [sp, 0x178] | r1 = *(arg_178h);
0x0000a36a movs r1, r0 | r1 = r0;
0x0000a36c adds r0, r1, 0 | r0 = r1 + 0;
0x0000a36e movs r1, r0 | r1 = r0;
0x0000a370 adds r6, r0, 0 | r6 = r0 + 0;
0x0000a372 movs r1, r0 | r1 = r0;
0x0000a374 adds r4, r2, 0 | r4 = r2 + 0;
0x0000a376 movs r1, r0 | r1 = r0;
0x0000a378 adds r6, r1, 0 | r6 = r1 + 0;
0x0000a37a movs r1, r0 | r1 = r0;
0x0000a37c adds r4, r4, 0 | r4 += 0;
0x0000a37e movs r1, r0 | r1 = r0;
0x0000a380 lsls r0, r5, 0xd | r0 = r5 << 0xd;
0x0000a382 movs r0, r0 |
0x0000a384 lsls r0, r1, 0xe | r0 = r1 << 0xe;
0x0000a386 movs r0, r0 |
0x0000a388 subs r4, r1, r6 | r4 = r1 - r6;
0x0000a38a movs r1, r0 | r1 = r0;
0x0000a38c subs r4, r3, r6 | r4 = r3 - r6;
0x0000a38e movs r1, r0 | r1 = r0;
0x0000a390 vrev64.32 d0, d0 | __asm ("vrev64.32 d0, d0");
0x0000a394 subs r2, r5, r7 | r2 = r5 - r7;
0x0000a396 movs r1, r0 | r1 = r0;
0x0000a398 subs r4, r5, r7 | r4 = r5 - r7;
0x0000a39a movs r1, r0 | r1 = 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/fwmgr @ 0xa454 */
| #include <stdint.h>
|
; (fcn) fcn.0000a454 () | void fcn_0000a454 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_64h_2;
| int16_t var_a4h_2;
| int16_t var_e4h;
| int16_t var_100h;
| int16_t var_1e4h;
| int16_t var_298h;
| r0 = arg1;
0x0000a454 rscslt fp, sl, r0, ror r5 | __asm ("rscslt fp, sl, r0, ror r5");
0x0000a458 ldr r6, [pc, 0xa4] |
0x0000a45a mov r4, r0 | r4 = r0;
0x0000a45c add r5, sp, 0x64 | r5 += var_64h_2;
0x0000a45e movs r1, 1 | r1 = 1;
0x0000a460 str r0, [sp] | *(sp) = r0;
0x0000a462 movs r2, 0x40 | r2 = 0x40;
0x0000a464 ldr r0, [pc, 0x9c] | r0 = *(0xa504);
0x0000a466 add r6, pc | r6 = 0x1496a;
0x0000a468 ldr r3, [pc, 0x9c] |
0x0000a46a ldr r0, [r6, r0] |
0x0000a46c add r3, pc | r3 = 0x14978;
0x0000a46e ldr r0, [r0] | r0 = *(0x1496a);
0x0000a470 str r0, [sp, 0x1e4] | var_1e4h = r0;
0x0000a472 mov.w r0, 0 | r0 = 0;
0x0000a476 mov r0, r5 | r0 = r5;
0x0000a478 blx 0x3200 | ERR_error_string ();
0x0000a47c add r1, sp, 8 | r1 += var_8h;
0x0000a47e mov r0, r5 | r0 = r5;
0x0000a480 blx 0x2d9c | r0 = fcn_00002d9c ();
| if (r0 != 0) {
0x0000a484 cbnz r0, 0xa4e0 | goto label_1;
| }
0x0000a486 ldr r2, [pc, 0x84] |
0x0000a488 add r6, sp, 0xa4 | r6 += var_a4h_2;
0x0000a48a ldr r3, [pc, 0x84] |
0x0000a48c movs r1, 1 | r1 = 1;
0x0000a48e mov r0, r6 | r0 = r6;
0x0000a490 add r2, pc | r2 = 0x149a2;
0x0000a492 strd r2, r4, [sp] | __asm ("strd r2, r4, [sp]");
0x0000a496 add r3, pc | r3 = 0x149ac;
0x0000a498 movs r2, 0x40 | r2 = 0x40;
0x0000a49a add r4, sp, 0xe4 | r4 += var_e4h;
0x0000a49c blx 0x3200 | ERR_error_string ();
0x0000a4a0 ldr r3, [pc, 0x70] |
0x0000a4a2 mov.w r2, 0x100 | r2 = 0x100;
0x0000a4a6 movs r1, 1 | r1 = 1;
0x0000a4a8 mov r0, r4 | r0 = r4;
0x0000a4aa strd r5, r6, [sp] | __asm ("strd r5, r6, [sp]");
0x0000a4ae add r3, pc | r3 = 0x149c6;
0x0000a4b0 blx 0x3200 | ERR_error_string ();
0x0000a4b4 ldr r2, [pc, 0x60] |
0x0000a4b6 movs r3, 1 | r3 = 1;
0x0000a4b8 mov r1, r6 | r1 = r6;
0x0000a4ba str r4, [sp] | *(sp) = r4;
0x0000a4bc add r2, pc | r2 = 0x149d8;
0x0000a4be mov r0, r2 | r0 = r2;
0x0000a4c0 blx 0x3188 | r0 = strcat_chk ()
0x0000a4c4 cmp r0, 0 |
| if (r0 < 0) {
0x0000a4c6 blt 0xa4ee | goto label_2;
| }
| do {
| label_0:
0x0000a4c8 ldr r2, [pc, 0x50] |
0x0000a4ca ldr r3, [pc, 0x38] | r3 = *(0xa506);
0x0000a4cc add r2, pc | r2 = 0x149ec;
0x0000a4ce ldr r3, [r2, r3] | r3 = *(0x149ec);
0x0000a4d0 ldr r2, [r3] | r2 = *(0x149ec);
0x0000a4d2 ldr r3, [sp, 0x1e4] | r3 = var_1e4h;
0x0000a4d4 eors r2, r3 | r2 ^= r3;
0x0000a4d6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000a4da bne 0xa4fc | goto label_3;
| }
0x0000a4dc add sp, 0x1e8 |
0x0000a4de pop {r4, r5, r6, pc} |
| label_1:
0x0000a4e0 ldr r1, [pc, 0x3c] |
0x0000a4e2 mov r2, r5 | r2 = r5;
0x0000a4e4 movs r0, 5 | r0 = 5;
0x0000a4e6 add r1, pc | r1 = 0x14a0a;
0x0000a4e8 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000a4ec b 0xa4c8 |
| } while (1);
| label_2:
0x0000a4ee ldr r1, [pc, 0x34] |
0x0000a4f0 mov r2, r6 | r2 = r6;
0x0000a4f2 movs r0, 4 | r0 = 4;
0x0000a4f4 add r1, pc | r1 = 0x14a1e;
0x0000a4f6 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000a4fa b 0xa4c8 | goto label_0;
| label_3:
0x0000a4fc blx 0x2eac | socket (r0, r1, r2);
0x0000a500 str r7, [sp, 0x298] | var_298h = r7;
0x0000a502 movs r1, r0 | r1 = r0;
0x0000a504 lsls r4, r2, 0xc | r4 = r2 << 0xc;
0x0000a506 movs r0, r0 |
0x0000a508 subs r4, r7, r5 | r4 = r7 - r5;
0x0000a50a movs r1, r0 | r1 = r0;
0x0000a50c subs r0, r4, r6 | r0 = r4 - r6;
0x0000a50e movs r1, r0 | r1 = r0;
0x0000a510 lsrs r2, r5, 2 | r2 = r5 >> 2;
0x0000a512 movs r1, r0 | r1 = r0;
0x0000a514 subs r2, r2, r6 | r2 -= r6;
0x0000a516 movs r1, r0 | r1 = r0;
0x0000a518 adds r4, r6, r5 | r4 = r6 + r5;
0x0000a51a movs r1, r0 | r1 = r0;
0x0000a51c str r7, [sp, 0x100] | var_100h = r7;
0x0000a51e movs r1, r0 | r1 = r0;
0x0000a520 subs r2, r2, r4 | r2 -= r4;
0x0000a522 movs r1, r0 | r1 = r0;
0x0000a524 subs r4, r3, r5 | r4 = r3 - r5;
0x0000a526 movs r1, r0 | r1 = 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/fwmgr @ 0xa63c */
| #include <stdint.h>
|
; (fcn) fcn.0000a63c () | void fcn_0000a63c () {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_3h;
| int16_t var_10h;
| int16_t var_2a8h;
| int16_t var_310h;
| int16_t var_1000h;
| int32_t var_0h_2;
0x0000a63c bmi 0x151cb90 |
0x0000a640 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x0000a644 sub.w sp, sp, 0x1000 |
0x0000a648 add r1, pc | r1 += pc;
0x0000a64a sub sp, 0x14 |
0x0000a64c add.w r0, sp, 0x1000 | r0 += var_1000h;
0x0000a650 ldr r2, [r1, r2] | r2 = *((r1 + r2));
0x0000a652 adds r0, 0xc | r0 += 0xc;
0x0000a654 ldr r5, [pc, 0x13c] |
0x0000a656 ldr r3, [pc, 0x140] | r3 = *(0xa79a);
0x0000a658 ldr r2, [r2] | r2 = *(r2);
0x0000a65a str r2, [r0] | *(r0) = r2;
0x0000a65c mov.w r2, 0 | r2 = 0;
0x0000a660 ldr r4, [pc, 0x138] |
0x0000a662 add r5, pc | r5 = 0x14dfa;
0x0000a664 ldr r3, [r5, r3] |
0x0000a666 add r4, pc | r4 = 0x14e06;
0x0000a668 ldr r3, [r3] |
0x0000a66a ldr r3, [r3, 0x68] | r3 = *(0x14e62);
0x0000a66c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000a66e ldr r2, [pc, 0x130] |
0x0000a670 movs r3, 0 | r3 = 0;
0x0000a672 ldr r1, [pc, 0x130] |
0x0000a674 add r2, pc | r2 = 0x14e1a;
0x0000a676 add r1, pc | r1 = 0x14e20;
0x0000a678 mov r0, r2 | r0 = r2;
0x0000a67a str r1, [sp] | *(sp) = r1;
0x0000a67c mov r1, r4 | r1 = r4;
0x0000a67e blx 0x3188 | r0 = strcat_chk ()
0x0000a682 cmp r0, 0 |
| if (r0 < 0) {
0x0000a684 blt 0xa74c | goto label_2;
| }
0x0000a686 ldr r1, [pc, 0x120] |
0x0000a688 movs r0, 7 | r0 = 7;
0x0000a68a add r1, pc | r1 = 0x14e38;
0x0000a68c bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000a690 ldr r0, [pc, 0x118] |
0x0000a692 movw r2, 0x1ed | r2 = 0x1ed;
0x0000a696 mov r1, r4 | r1 = r4;
0x0000a698 add r0, pc | r0 = 0x14e48;
0x0000a69a bl 0x9ff8 | r0 = fcn_00009ff8 (r0, r1, r2, r3);
0x0000a69e cmp r0, 0 |
| if (r0 == 0) {
0x0000a6a0 beq 0xa716 | goto label_3;
| }
0x0000a6a2 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000a6a6 ldr r4, [r0] | r4 = *(r0);
0x0000a6a8 cmp r4, 0 |
| if (r4 != 0) {
0x0000a6aa bne 0xa720 | goto label_0;
| }
| do {
0x0000a6ac ldr r0, [pc, 0x100] |
0x0000a6ae movs r1, 2 | r1 = 2;
0x0000a6b0 add r0, pc | r0 = 0x14e64;
0x0000a6b2 blx 0x2e3c | r0 = fcn_00002e3c ();
0x0000a6b6 subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 < r0) {
0x0000a6b8 blt 0xa770 | goto label_4;
| }
0x0000a6ba add.w r8, sp, 0x10 | r8 += var_10h;
0x0000a6be mov.w r2, 0xf00 | r2 = 0xf00;
0x0000a6c2 sub.w r1, r8, 3 | r1 -= var_3h;
0x0000a6c6 sub.w sb, r8, 4 | sb -= var_4h;
0x0000a6ca blx 0x2d10 | r0 = fcn_00002d10 ();
0x0000a6ce subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x0000a6d0 blt 0xa75e | goto label_5;
| }
0x0000a6d2 ldr r1, [pc, 0xe0] |
0x0000a6d4 movs r3, 0xa | r3 = 0xa;
0x0000a6d6 adds r2, r6, 1 | r2 = r6 + 1;
0x0000a6d8 strb r3, [r8, -0x4] | *((r8 - 0x4)) = r3;
0x0000a6dc mov r0, sb | r0 = sb;
0x0000a6de strh.w r3, [sb, r2] | *((sb + r2)) = r3;
0x0000a6e2 add r1, pc | r1 = 0x14e9c;
0x0000a6e4 bl 0xa174 | fcn_0000a174 (r0);
0x0000a6e8 ldr r3, [pc, 0xcc] |
0x0000a6ea ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x0000a6ec ldr r3, [r3] | r3 = *(0xa7b8);
0x0000a6ee cmp r3, 1 |
| if (r3 >= 1) {
0x0000a6f0 bls 0xa6fc |
0x0000a6f2 ldr r1, [pc, 0xc8] |
0x0000a6f4 mov r0, sb | r0 = sb;
0x0000a6f6 add r1, pc | r1 = 0x14eb8;
0x0000a6f8 bl 0xa174 | fcn_0000a174 (r0);
| }
0x0000a6fc movs r3, 0 | r3 = 0;
0x0000a6fe sub.w r1, r8, 3 | r1 -= var_3h;
0x0000a702 mov r2, r6 | r2 = r6;
0x0000a704 mov r0, r7 | r0 = r7;
0x0000a706 blx 0x2a6c | r0 = fcn_00002a6c ();
0x0000a70a cmp r0, r6 |
| if (r0 < r6) {
0x0000a70c blt 0xa782 | goto label_6;
| }
0x0000a70e mov r0, r7 | r0 = r7;
0x0000a710 blx 0x2cec | fcn_00002cec ();
0x0000a714 b 0xa726 | goto label_1;
| label_3:
0x0000a716 bl 0xa278 | r0 = fcn_0000a278 (r0, r1, r2);
0x0000a71a mov r4, r0 | r4 = r0;
0x0000a71c cmp r4, 0 |
0x0000a71e beq 0xa6ac |
| } while (r4 == 0);
| label_0:
0x0000a720 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000a724 ldr r4, [r0] | r4 = *(r0);
| do {
| label_1:
0x0000a726 ldr r2, [pc, 0x98] |
0x0000a728 add.w r1, sp, 0x1000 | r1 += var_1000h;
0x0000a72c ldr r3, [pc, 0x60] | r3 = *(0xa790);
0x0000a72e adds r1, 0xc | r1 += 0xc;
0x0000a730 add r2, pc | r2 = 0x14ef6;
0x0000a732 ldr r3, [r2, r3] | r3 = *(0x14ef6);
0x0000a734 ldr r2, [r3] | r2 = *(0x14ef6);
0x0000a736 ldr r3, [r1] | r3 = *(r1);
0x0000a738 eors r2, r3 | r2 ^= r3;
0x0000a73a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000a73e bne 0xa788 | goto label_7;
| }
0x0000a740 mov r0, r4 | r0 = r4;
0x0000a742 add.w sp, sp, 0x1000 |
0x0000a746 add sp, 0x14 |
0x0000a748 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_2:
0x0000a74c ldr r1, [pc, 0x74] |
0x0000a74e movs r0, 2 | r0 = 2;
0x0000a750 add r1, pc | r1 = 0x14f18;
0x0000a752 bl 0x10568 | r0 = fcn_00010568 (r0, r1, r2);
0x0000a756 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000a75a ldr r4, [r0] | r4 = *(r0);
0x0000a75c b 0xa726 |
| } while (1);
| label_5:
0x0000a75e ldr r1, [pc, 0x68] |
0x0000a760 add r1, pc | r1 = 0x14f2e;
| do {
0x0000a762 movs r0, 2 | r0 = 2;
0x0000a764 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000a768 mov r0, r7 | r0 = r7;
0x0000a76a bl 0x11530 | fcn_00011530 (r0);
0x0000a76e b 0xa720 | goto label_0;
| label_4:
0x0000a770 ldr r1, [pc, 0x58] |
0x0000a772 movs r0, 2 | r0 = 2;
0x0000a774 add r1, pc | r1 = 0x14f44;
0x0000a776 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000a778 mrc2 p7, 7, apsr_nzcv, c7, c8, 7 | __asm ("mrc2 p7, 7, apsr_nzcv, c7, c8, 7");
0x0000a77c stc p8, c6, [r0, -0x10] | __asm ("stc p8, c6, [r0, -0x10]");
0x0000a77e ldr r4, [r0] | r4 = *(r0);
0x0000a780 b 0xa726 | goto label_1;
| label_6:
0x0000a782 ldr r1, [pc, 0x4c] |
0x0000a784 add r1, pc | r1 = 0x14f5a;
0x0000a786 b 0xa762 |
| } while (1);
| label_7:
0x0000a788 blx 0x2eac | socket (r0, r1, r2);
0x0000a78c str r5, [sp, 0x310] | var_310h = r5;
0x0000a78e movs r1, r0 | r1 = r0;
0x0000a790 lsls r4, r2, 0xc | r4 = r2 << 0xc;
0x0000a792 movs r0, r0 |
0x0000a794 str r5, [sp, 0x2a8] | var_2a8h = r5;
0x0000a796 movs r1, r0 | r1 = r0;
0x0000a798 lsls r0, r1, 0xe | r0 = r1 << 0xe;
0x0000a79a movs r0, r0 |
0x0000a79c asrs r2, r4, 0x19 | r2 = r4 >> 0x19;
0x0000a79e movs r1, r0 | r1 = r0;
0x0000a7a0 adds r4, r1, r0 | r4 = r1 + r0;
0x0000a7a2 movs r1, r0 | r1 = r0;
0x0000a7a4 ldc2l p0, c0, [r2], -0 | __asm ("ldc2l p0, c0, [r2], -0");
0x0000a7a8 subs r6, r3, r2 | r6 = r3 - r2;
0x0000a7aa movs r1, r0 | r1 = r0;
0x0000a7ac lsrs r4, r3, 8 | r4 = r3 >> 8;
0x0000a7ae movs r1, r0 | r1 = r0;
0x0000a7b0 subs r4, r2, r2 | r4 = r2 - r2;
0x0000a7b2 movs r1, r0 | r1 = r0;
0x0000a7b4 asrs r6, r4, 0x17 | r6 = r4 >> 0x17;
0x0000a7b6 movs r1, r0 | r1 = r0;
0x0000a7b8 lsls r0, r5, 0xd | r0 = r5 << 0xd;
0x0000a7ba movs r0, r0 |
0x0000a7bc invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/fwmgr @ 0xa7d4 */
| #include <stdint.h>
|
; (fcn) fcn.0000a7d4 () | void fcn_0000a7d4 (int16_t arg_0h) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_84h;
| int32_t var_10h_2;
| int16_t var_cch;
| int16_t var_1cch;
| int16_t var_2cch;
| int16_t var_2d4h;
0x0000a7d4 blhs 0xfe648b58 | __asm ("blhs aav.0x00019428");
0x0000a7d8 ldr.w r3, [pc, 0xb98] |
0x0000a7dc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000a7e0 sub.w sp, sp, 0x2d4 |
0x0000a7e4 add r2, pc | r2 += pc;
0x0000a7e6 ldr.w r4, [pc, 0xb90] |
0x0000a7ea ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0000a7ec add r4, pc | r4 = 0x15b6a;
0x0000a7ee ldr r3, [r3] | r3 = *(0xb374);
0x0000a7f0 str r3, [sp, 0x2cc] | var_2cch = r3;
0x0000a7f2 mov.w r3, 0 | r3 = 0;
0x0000a7f6 bl 0xa39c | r0 = fcn_0000a39c (r0);
0x0000a7fa cmp r0, 0 |
| if (r0 == 0) {
0x0000a7fc beq.w 0xa982 | goto label_50;
| }
0x0000a800 ldr.w r3, [pc, 0xb78] | r3 = *(0xb37c);
0x0000a804 ldr r6, [r4, r3] | r6 = *((r4 + r3));
0x0000a806 ldr r2, [r6] | r2 = *(r6);
0x0000a808 cmp r2, 0 |
0x0000a80a bne.w 0xa936 |
| while (r3 == r3) {
| label_0:
0x0000a80e ldr.w r1, [pc, 0xb70] |
0x0000a812 movs r0, 5 | r0 = 5;
0x0000a814 ldr.w r8, [pc, 0xb6c] |
0x0000a816 ldrh r4, [r5, 0x1a] | r4 = *((r5 + 0x1a));
0x0000a818 add r1, pc | r1 = 0x15b9e;
0x0000a81a bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000a81e ldr.w r3, [pc, 0xb68] | r3 = *(0xb38a);
0x0000a822 add r8, pc | r8 = 0x15baa;
0x0000a824 movs r2, 1 | r2 = 1;
0x0000a826 ldr r5, [r4, r3] | r5 = *((r4 + r3));
0x0000a828 str r2, [r5] | *(r5) = r2;
| label_2:
0x0000a82a ldr.w r1, [pc, 0xb60] |
0x0000a82e movs r6, 0 | r6 = 0;
0x0000a830 mov r3, r6 | r3 = r6;
0x0000a832 movs r2, 1 | r2 = 1;
0x0000a834 movs r0, 7 | r0 = 7;
0x0000a836 strd r6, r6, [sp, 4] | __asm ("strd r6, r6, [var_4h]");
0x0000a83a add r1, pc | r1 = 0x15bcc;
0x0000a83c str r6, [sp] | *(sp) = r6;
0x0000a83e bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000a842 ldr.w sl, [r5] | sl = *(r5);
0x0000a844 adr r0, 0 | r0 = 0;
0x0000a846 str r6, [sp, 0x24] | var_24h = r6;
0x0000a848 cmp.w sl, 1 |
| if (sl == 1) {
0x0000a84c beq.w 0xb842 | goto label_51;
| }
0x0000a850 ldr.w r0, [pc, 0xb3c] |
0x0000a854 ldr.w r3, [pc, 0xb3c] | r3 = *(0xb394);
0x0000a858 add r0, pc | r0 = 0x15bec;
0x0000a85a ldr.w sb, [r4, r3] | sb = *((r4 + r3));
0x0000a85c str r0, [sp, 0xc] | *((sp + 0xc)) = r0;
0x0000a85e str r6, [sp, 0x10] | var_10h = r6;
| label_3:
0x0000a860 bl 0x8db8 | r0 = fcn_00008db8 (r0);
0x0000a864 cmp r0, 0 |
| if (r0 == 0) {
0x0000a866 beq.w 0xab68 | goto label_52;
| }
0x0000a86a ldr.w sl, [r5] | sl = *(r5);
0x0000a86e cmp.w sl, 4 |
| if (sl == 4) {
0x0000a872 beq.w 0xb0f2 | goto label_53;
| }
| label_9:
0x0000a876 ldr.w r3, [pc, 0xb20] | r3 = *(0xb39a);
0x0000a87a ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0000a87c ldrb r1, [r3] | r1 = *(r3);
0x0000a87e str r3, [sp, 0x20] | var_20h = r3;
0x0000a880 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0000a882 cmp r3, 0 |
| if (r3 != 0) {
0x0000a884 bne.w 0xab94 | goto label_54;
| }
0x0000a888 cmp.w sl, 1 |
| if (sl < 1) {
0x0000a88c bls.w 0xb798 | goto label_55;
| }
| label_18:
0x0000a890 ldr.w r3, [pc, 0xb08] | r3 = *(0xb39c);
0x0000a894 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0000a896 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0000a898 ldrb r1, [r2] | r1 = *(r2);
0x0000a89a ldrb r3, [r3] | r3 = *(r3);
0x0000a89c cmp r3, 0 |
| if (r3 != 0) {
0x0000a89e bne.w 0xaeea | goto label_56;
| }
| label_13:
0x0000a8a2 ldr.w r3, [pc, 0xafc] | r3 = *(0xb3a2);
0x0000a8a6 ldr.w sl, [r5] | sl = *(r5);
0x0000a8aa ldr.w fp, [r4, r3] | fp = *((r4 + r3));
0x0000a8ac add sp, 0xc |
0x0000a8ae ldrb.w r3, [fp] | r3 = *(fp);
| label_4:
0x0000a8b2 ldr.w r0, [pc, 0xaf0] | r0 = *(0xb3a6);
0x0000a8b6 mov r2, sl | r2 = sl;
0x0000a8b8 ldr r0, [r4, r0] | r0 = *((r4 + r0));
0x0000a8ba str r1, [sp, 0xc] | var_ch = r1;
0x0000a8bc ldr.w r1, [pc, 0xae8] | r1 = *(0xb3a8);
0x0000a8c0 str r0, [sp, 0x14] | var_14h = r0;
0x0000a8c2 ldr r1, [r4, r1] | r1 = *((r4 + r1));
0x0000a8c4 str r3, [sp, 4] | var_4h = r3;
0x0000a8c6 ldr r3, [r0] | r3 = *(0xb3a6);
0x0000a8c8 mov r7, r1 | r7 = r1;
0x0000a8ca str r1, [sp, 0x1c] | var_1ch = r1;
0x0000a8cc ldrb r0, [r7] | r0 = *(r7);
0x0000a8ce ldr.w r1, [pc, 0xadc] | r1 = *(0xb3ae);
0x0000a8d2 str r3, [sp, 0x18] | var_18h = r3;
0x0000a8d4 str r0, [sp, 8] | var_8h = r0;
0x0000a8d6 movs r0, 7 | r0 = 7;
0x0000a8d8 ldr r1, [r4, r1] | r1 = *((r4 + r1));
0x0000a8da mov r7, r1 | r7 = r1;
0x0000a8dc str r1, [sp, 0x18] | var_18h = r1;
0x0000a8de ldr r7, [r7] | r7 = *(r7);
0x0000a8e0 ldr.w r1, [pc, 0xacc] |
0x0000a8e4 str r7, [sp] | *(sp) = r7;
0x0000a8e6 add r1, pc | r1 = 0x15c9a;
0x0000a8e8 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000a8ec ldrb.w r3, [fp] | r3 = *(fp);
0x0000a8f0 cmp r3, 0 |
| if (r3 != 0) {
0x0000a8f2 bne.w 0xaba8 | goto label_57;
| }
0x0000a8f6 ldr r3, [r5] | r3 = *(r5);
0x0000a8f8 cmp r3, 0 |
| if (r3 == 0) {
0x0000a8fa beq.w 0xae00 | goto label_58;
| }
0x0000a8fe ldrb.w r3, [sb] | r3 = *(sb);
0x0000a902 cmp r3, 0 |
| if (r3 == 0) {
0x0000a904 beq 0xa9d4 | goto label_59;
| }
0x0000a906 ldr.w r3, [pc, 0xaac] |
0x0000a90a movs r0, 0x22 | r0 = 0x22;
0x0000a90c ldr.w sl, [r4, r3] | sl = *((r4 + r3));
0x0000a910 ldr.w r3, [sl] | r3 = *(sl);
0x0000a914 ldr r3, [r3, 0xc] | r3 = *(0xb3c2);
0x0000a916 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000a918 cmp r0, 0 |
| if (r0 != 0) {
0x0000a91a bne 0xa9d4 | goto label_59;
| }
0x0000a91c cmp.w r8, 0 |
| if (r8 == 0) {
0x0000a920 beq.w 0xb306 | goto label_60;
| }
0x0000a922 strh r1, [r6, 0x26] | *((r6 + 0x26)) = r1;
0x0000a924 ldr.w r0, [pc, 0xa90] |
0x0000a928 add r0, pc | r0 = 0x15ce4;
0x0000a92a blx 0x2d84 | fcn_00002d84 ();
0x0000a92e ldr.w r1, [pc, 0xa8c] |
0x0000a932 add r1, pc | r1 = 0x15cf4;
0x0000a934 b 0xabd8 | goto label_6;
0x0000a936 ldr.w r1, [pc, 0xa88] |
0x0000a93a mov.w r0, -1 | r0 = -1;
0x0000a93e add r1, pc | r1 = 0x15d04;
0x0000a940 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000a944 ldr r3, [r6] | r3 = *(r6);
0x0000a946 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0000a94a lsls r3, r3, 2 | r3 <<= 2;
0x0000a94c beq.w 0xa80e |
| }
0x0000a950 movs r5, 0 | r5 = 0;
0x0000a952 b 0xa964 | goto label_61;
| label_1:
0x0000a954 ldr r3, [r6] | r3 = *(r6);
0x0000a956 adds r5, 1 | r5++;
0x0000a958 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0000a95c cmp.w r5, r3, lsl 2 |
| if (r5 >= r3) {
0x0000a960 bhs.w 0xa80e | goto label_0;
| }
0x0000a962 add r7, sp, 0x154 | r7 = sp + 0x154;
| label_61:
0x0000a964 movw r0, 0xc350 | r0 = 0xc350;
0x0000a968 blx 0x309c | fcn_0000309c ();
0x0000a96c bl 0xa39c | r0 = fcn_0000a39c (r0);
0x0000a970 cmp r0, 0 |
| if (r0 != 0) {
0x0000a972 bne 0xa954 | goto label_1;
| }
0x0000a974 ldr.w r1, [pc, 0xa4c] |
0x0000a978 mov.w r0, -1 | r0 = -1;
0x0000a97c add r1, pc | r1 = 0x15d44;
0x0000a97e bl 0x10568 | fcn_00010568 (r0, r1, r2);
| label_50:
0x0000a982 ldr.w r3, [pc, 0xa04] | r3 = *(0xb38a);
0x0000a986 ldr r5, [r4, r3] | r5 = *((r4 + r3));
0x0000a988 ldr r3, [r5] | r3 = *(r5);
0x0000a98a cmp r3, 1 |
| if (r3 == 1) {
0x0000a98c beq.w 0xaf2a | goto label_62;
| }
0x0000a990 ldr.w r0, [pc, 0xa34] |
0x0000a994 add r0, pc | r0 = 0x15d60;
0x0000a996 bl 0x11290 | r0 = fcn_00011290 (r0);
0x0000a99a mov r8, r0 | r8 = r0;
| if (r0 != 0) {
0x0000a99c cbz r0, 0xaa02 |
0x0000a99e ldr.w r1, [pc, 0xa2c] |
0x0000a9a2 movs r0, 5 | r0 = 5;
0x0000a9a4 add r1, pc | r1 = 0x15d76;
0x0000a9a6 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000a9aa ldr.w r1, [pc, 0xa24] |
0x0000a9ae mov r0, r8 | r0 = r8;
0x0000a9b0 add r1, pc | r1 = 0x15d86;
0x0000a9b2 blx 0x3130 | r0 = fcn_00003130 ();
0x0000a9b6 cmp r0, 0 |
| if (r0 == 0) {
0x0000a9b8 beq.w 0xaf30 | goto label_63;
| }
0x0000a9bc ldr.w r1, [pc, 0xa14] |
0x0000a9c0 mov r0, r8 | r0 = r8;
0x0000a9c2 add r1, pc | r1 = 0x15d9a;
0x0000a9c4 blx 0x3130 | r0 = fcn_00003130 ();
0x0000a9c6 subs.w r8, r4, r0, lsl 8 | r8 = r4 - (r0 << 8);
| if (r8 != r4) {
0x0000a9ca bne.w 0xaf14 | goto label_64;
| }
0x0000a9ce movs r3, 2 | r3 = 2;
0x0000a9d0 str r3, [r5] | *(r5) = r3;
0x0000a9d2 b 0xaa0a | goto label_14;
| label_59:
0x0000a9d4 cmp.w r8, 0 |
| if (r8 == 0) {
0x0000a9d8 beq.w 0xb094 | goto label_65;
| }
0x0000a9dc ldr.w r1, [pc, 0x9f8] |
0x0000a9e0 movs r2, 4 | r2 = 4;
0x0000a9e2 mov r0, r8 | r0 = r8;
0x0000a9e4 add r1, pc | r1 = 0x15dc0;
0x0000a9e6 blx 0x2b08 | r0 = fcn_00002b08 ();
0x0000a9ea cmp r0, 0 |
| if (r0 != 0) {
0x0000a9ec bne.w 0xaf3e | goto label_66;
| }
0x0000a9f0 ldr.w r0, [pc, 0x9e8] |
0x0000a9f4 add r0, pc | r0 = 0x15dd4;
0x0000a9f6 blx 0x2d84 | fcn_00002d84 ();
0x0000a9fa ldr.w r1, [pc, 0x9e4] |
0x0000a9fe add r1, pc | r1 = 0x15de4;
0x0000aa00 b 0xabd8 | goto label_6;
| }
0x0000aa02 ldr r3, [r5] | r3 = *(r5);
0x0000aa04 cmp r3, 1 |
| if (r3 == 1) {
0x0000aa06 beq.w 0xa82a | goto label_2;
| }
| label_14:
0x0000aa0a ldr.w r3, [pc, 0x9a8] | r3 = *(0xb3b6);
0x0000aa0e ldr.w r2, [pc, 0x984] | r2 = *(0xb396);
0x0000aa12 ldr.w sl, [r4, r3] | sl = *((r4 + r3));
0x0000aa16 ldr.w sb, [r4, r2] | sb = *((r4 + r2));
0x0000aa1a ldr.w r3, [sl] | r3 = *(sl);
0x0000aa1e ldr r2, [r3, 0xc] | r2 = *(0xb3c2);
0x0000aa20 ldrb.w r3, [sb] | r3 = *(sb);
0x0000aa24 cmp r3, 0 |
| if (r3 != 0) {
0x0000aa26 beq 0xaaa4 |
0x0000aa28 movs r0, 0x22 | r0 = 0x22;
0x0000aa2a blx r2 | r0 = uint32_t (*r2)(uint32_t) (r0);
0x0000aa2c mov r6, r0 | r6 = r0;
0x0000aa2e cmp r0, 0 |
| if (r0 != 0) {
0x0000aa30 bne 0xaaa4 | goto label_67;
| }
0x0000aa32 ldr.w r3, [sl] | r3 = *(sl);
0x0000aa36 movs r0, 0x42 | r0 = 0x42;
0x0000aa38 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0000aa3a blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000aa3c str r0, [sp, 0x10] | var_10h = r0;
| if (r0 == 0) {
0x0000aa3e cbz r0, 0xaaa4 | goto label_67;
| }
0x0000aa40 ldr r3, [r5] | r3 = *(r5);
0x0000aa42 cmp r3, 0 |
| if (r3 == 0) {
0x0000aa44 beq.w 0xb154 | goto label_68;
| }
| label_28:
0x0000aa48 ldr.w r1, [pc, 0x998] |
0x0000aa4c movs r0, 7 | r0 = 7;
0x0000aa4e ldr.w r8, [pc, 0x998] |
0x0000aa52 add r1, pc | r1 = 0x15e3a;
0x0000aa54 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000aa58 ldr.w r3, [sl] | r3 = *(sl);
0x0000aa5a adds r0, 0 | r0 += 0;
0x0000aa5c add r8, pc | r8 = 0x15e4a;
0x0000aa5e movs r2, 1 | r2 = 1;
0x0000aa60 movs r0, 0x42 | r0 = 0x42;
0x0000aa62 mov r1, r8 | r1 = r8;
0x0000aa64 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0000aa66 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000aa68 mov fp, r0 |
0x0000aa6a cmp r0, 0 |
| if (r0 != 0) {
0x0000aa6c bne.w 0xb34c | goto label_69;
| }
0x0000aa70 ldr.w r1, [pc, 0x978] |
0x0000aa74 movs r3, 1 | r3 = 1;
0x0000aa76 ldr r2, [r5] | r2 = *(r5);
0x0000aa78 str r0, [sp, 8] | var_8h = r0;
0x0000aa7a strd r3, r3, [sp] | __asm ("strd r3, r3, [sp]");
0x0000aa7e add r1, pc | r1 = 0x15e6e;
0x0000aa80 mov r3, r0 | r3 = r0;
0x0000aa82 movs r0, 7 | r0 = 7;
0x0000aa84 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000aa88 ldr.w sl, [r5] | sl = *(r5);
0x0000aa8c cmp.w sl, 1 |
0x0000aa90 itt eq |
| if (sl != 1) {
0x0000aa92 moveq r8, fp | r8 = fp;
| }
| if (sl != 1) {
0x0000aa94 streq r8, [sp, 0x24] | var_24h = r8;
| }
| if (sl == 1) {
0x0000aa98 beq 0xab4a | goto label_49;
| }
0x0000aa9a mov r0, r8 | r0 = r8;
0x0000aa9c str.w fp, [sp, 0x24] | __asm ("str.w fp, [var_24h]");
0x0000aaa0 mov r8, fp | r8 = fp;
0x0000aaa2 b 0xa860 | goto label_3;
| }
| label_67:
0x0000aaa4 ldr.w r3, [sl] | r3 = *(sl);
0x0000aaa8 movs r0, 0x22 | r0 = 0x22;
0x0000aaaa ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0000aaac blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000aaae mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x0000aab0 cbz r0, 0xab10 |
0x0000aab2 ldr.w r1, [pc, 0x93c] |
0x0000aab6 movs r0, 7 | r0 = 7;
0x0000aab8 add r1, pc | r1 = 0x15eae;
0x0000aaba bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000aabe ldr.w r3, [sl] | r3 = *(sl);
0x0000aac2 movs r2, 0 | r2 = 0;
0x0000aac4 ldr.w r1, [pc, 0x92c] |
0x0000aac8 movs r0, 0x22 | r0 = 0x22;
0x0000aaca ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0000aacc add r1, pc | r1 = 0x15ec4;
0x0000aace blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000aad0 cmp r0, 0 |
| if (r0 == 0) {
0x0000aad2 beq.w 0xae42 | goto label_70;
| }
0x0000aad6 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000aada ldr r3, [r0] | r3 = *(r0);
0x0000aadc mov r6, r0 | r6 = r0;
0x0000aade cmp r3, 0x10 |
| if (r3 == 0x10) {
0x0000aae0 beq.w 0xb2d4 | goto label_71;
| }
0x0000aae4 ldr.w r1, [pc, 0x910] |
0x0000aae8 movs r0, 2 | r0 = 2;
0x0000aaea add r1, pc | r1 = 0x15ee6;
0x0000aaec bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000aaf0 ldr r3, [r6] | r3 = *(r6);
0x0000aaf2 cmp r3, 0x3d |
0x0000aaf4 it ne |
| if (r3 != 0x3d) {
0x0000aaf6 cmpne r3, 0x7e | __asm ("cmpne r3, 0x7e");
| }
| if (r3 != 0x3d) {
0x0000aaf8 bne.w 0xb0c0 | goto label_72;
| }
0x0000aafc ldr.w r8, [pc, 0x8fc] |
0x0000ab00 add r8, pc | r8 = 0x15f00;
| label_25:
0x0000ab02 movs r0, 0 | r0 = 0;
0x0000ab04 movs r2, 1 | r2 = 1;
0x0000ab06 mov r3, r0 | r3 = r0;
0x0000ab08 mov r6, r0 | r6 = r0;
0x0000ab0a str r2, [r5] | *(r5) = r2;
0x0000ab0c str r0, [sp, 0x24] | var_24h = r0;
0x0000ab0e b 0xab28 |
| } else {
0x0000ab10 ldr.w r1, [pc, 0x8ec] |
0x0000ab14 movs r0, 5 | r0 = 5;
0x0000ab16 mov r8, r6 | r8 = r6;
0x0000ab18 add r1, pc | r1 = 0x15f1c;
0x0000ab1a bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000ab1e movs r0, 1 | r0 = 1;
0x0000ab20 mov r3, r6 | r3 = r6;
0x0000ab22 mov r2, r0 | r2 = r0;
0x0000ab24 str r0, [r5] | *(r5) = r0;
0x0000ab26 str r0, [sp, 0x24] | var_24h = r0;
| }
| label_7:
0x0000ab28 ldr.w r1, [pc, 0x8d8] |
0x0000ab2c movs r7, 0 | r7 = 0;
0x0000ab2e str r0, [sp, 8] | var_8h = r0;
0x0000ab30 movs r0, 7 | r0 = 7;
0x0000ab32 strd r7, r7, [sp] | __asm ("strd r7, r7, [sp]");
0x0000ab36 add r1, pc | r1 = 0x15f3e;
0x0000ab38 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000ab3c ldr.w sl, [r5] | sl = *(r5);
0x0000ab40 str r7, [sp, 0x10] | var_10h = r7;
0x0000ab42 cmp.w sl, 1 |
| if (sl != 1) {
0x0000ab46 bne.w 0xade0 | goto label_73;
| }
| label_49:
0x0000ab4a ldr.w r3, [pc, 0x854] | r3 = *(0xb3a2);
0x0000ab4e mov.w sl, 1 | sl = 1;
0x0000ab50 lsrs r1, r0, 8 | r1 = r0 >> 8;
0x0000ab52 ldr.w fp, [r4, r3] | fp = *((r4 + r3));
0x0000ab56 ldr.w r3, [pc, 0x840] | r3 = *(0xb39a);
0x0000ab5a ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0000ab5c mov r2, r3 | r2 = r3;
0x0000ab5e str r3, [sp, 0x20] | var_20h = r3;
0x0000ab60 ldrb r1, [r2] | r1 = *(r2);
0x0000ab62 ldrb.w r3, [fp] | r3 = *(fp);
0x0000ab66 b 0xa8b2 | goto label_4;
| label_52:
0x0000ab68 ldr r3, [r5] | r3 = *(r5);
0x0000ab6a cmp r3, 0 |
| if (r3 == 0) {
0x0000ab6c beq.w 0xae72 | goto label_74;
| }
0x0000ab6e strh r1, [r0, 0xc] | *((r0 + 0xc)) = r1;
0x0000ab70 cmp.w sl, 0 |
0x0000ab74 it ne |
| if (sl != 0) {
0x0000ab76 cmpne r3, sl | __asm ("cmpne r3, sl");
| }
| if (sl > 0) {
0x0000ab78 bhi.w 0xaf6e | goto label_75;
| }
0x0000ab7c cmp r3, 4 |
| if (r3 != 4) {
0x0000ab7e bne.w 0xb296 | goto label_76;
| }
0x0000ab82 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0000ab84 cmp r2, 0 |
| if (r2 == 0) {
0x0000ab86 beq.w 0xaf7a | goto label_77;
| }
0x0000ab8a mov sl, r3 | sl = r3;
| label_17:
0x0000ab8c ldr.w r3, [pc, 0x808] | r3 = *(0xb398);
0x0000ab90 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0000ab92 str r3, [sp, 0x20] | var_20h = r3;
| label_54:
0x0000ab94 ldr.w r3, [pc, 0x808] | r3 = *(0xb3a0);
0x0000ab98 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0000ab9a ldr.w fp, [r4, r3] | fp = *((r4 + r3));
0x0000ab9e movs r3, 0 | r3 = 0;
0x0000aba0 ldrb r1, [r2] | r1 = *(r2);
0x0000aba2 strb.w r3, [fp] | *(fp) = r3;
0x0000aba6 b 0xa8b2 | goto label_4;
| label_57:
0x0000aba8 ldr.w sl, [pc, 0x85c] |
0x0000abac movs r1, 0 | r1 = 0;
0x0000abae ldr.w r0, [pc, 0x85c] |
0x0000abb2 add sl, pc | sl = 0x15fbe;
0x0000abb4 add r0, pc | r0 = 0x15fc6;
0x0000abb6 bl 0x6bd0 | fcn_00006bd0 (r0, r1, r2);
0x0000abba add r1, sp, 0x28 | r1 += var_28h;
0x0000abbc mov r0, sl | r0 = sl;
0x0000abbe blx 0x2d9c | r0 = fcn_00002d9c ();
0x0000abc2 cmp r0, 0 |
| if (r0 == 0) {
0x0000abc4 beq.w 0xae52 | goto label_78;
| }
| label_8:
0x0000abc8 ldr.w r0, [pc, 0x844] |
0x0000abcc add r0, pc | r0 = 0x15fe0;
0x0000abce blx 0x2d84 | fcn_00002d84 ();
0x0000abd2 ldr.w r1, [pc, 0x840] |
0x0000abd6 add r1, pc | r1 = 0x15ff0;
| label_6:
0x0000abd8 ldr.w r0, [pc, 0x83c] |
0x0000abdc movs r2, 0 | r2 = 0;
0x0000abde add r0, pc | r0 = 0x15ffa;
0x0000abe0 bl 0x110d4 | fcn_000110d4 (r0, r1, r2);
| label_16:
0x0000abe4 ldr r2, [r5] | r2 = *(r5);
0x0000abe6 cmp r2, 0 |
0x0000abe8 ite ne |
| if (r2 == 0) {
0x0000abea movne r3, 0 | r3 = 0;
| }
| if (r2 != 0) {
0x0000abec andeq r3, r6, 1 | r3 = r6 & 1;
| }
0x0000abf0 cmp r3, 0 |
| if (r3 != 0) {
0x0000abf2 bne.w 0xb058 | goto label_79;
| }
| label_23:
0x0000abf6 ldrb.w r3, [sb] | r3 = *(sb);
0x0000abfa cmp r3, 0 |
| if (r3 == 0) {
0x0000abfc beq.w 0xad20 | goto label_80;
| }
0x0000ac00 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000ac02 bics r1, r2, 4 | __asm ("bics r1, r2, 4");
0x0000ac06 ldr r3, [r3] | r3 = *(r3);
| if (r3 != 0) {
0x0000ac08 beq 0xac14 |
| label_33:
0x0000ac0a ldr r1, [sp, 0x20] | r1 = var_20h;
0x0000ac0c ldrb r1, [r1] | r1 = *(r1);
0x0000ac0e cmp r1, 0 |
| if (r1 != 0) {
0x0000ac10 bne.w 0xaf36 | goto label_81;
| }
| }
| label_15:
0x0000ac14 ldr.w r1, [pc, 0x784] | r1 = *(0xb39c);
0x0000ac18 ldr r1, [r4, r1] | r1 = *((r4 + r1));
0x0000ac1a ldrb r1, [r1] | r1 = *(r1);
0x0000ac1c cmp r1, 0 |
| if (r1 != 0) {
0x0000ac1e bne.w 0xade8 | goto label_82;
| }
0x0000ac22 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0000ac24 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0000ac26 str r1, [r3] | *(r3) = r1;
0x0000ac28 movs r3, 1 | r3 = 1;
0x0000ac2a str r3, [r0] | *(r0) = r3;
| do {
| label_5:
0x0000ac2c str r1, [sp] | *(sp) = r1;
0x0000ac2e movs r0, 7 | r0 = 7;
0x0000ac30 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0000ac32 ldrb r1, [r1] | r1 = *(r1);
0x0000ac34 str r1, [sp, 4] | var_4h = r1;
0x0000ac36 ldr.w r1, [pc, 0x7e4] |
0x0000ac3a add r1, pc | r1 = 0x1605c;
0x0000ac3c bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000ac40 ldr r2, [r5] | r2 = *(r5);
0x0000ac42 cmp r2, 1 |
| if (r2 < 1) {
0x0000ac44 bls 0xad30 | goto label_83;
| }
0x0000ac46 cmp r6, 0 |
| if (r6 != 0) {
0x0000ac48 bne.w 0xafc4 | goto label_84;
| }
| label_27:
0x0000ac4c ldr r3, [sp, 0x10] | r3 = var_10h;
0x0000ac4e movs r6, 0 | r6 = 0;
0x0000ac50 str r3, [sp, 0x18] | var_18h = r3;
| label_36:
0x0000ac52 ldr.w r0, [pc, 0x7cc] |
0x0000ac56 add r0, pc | r0 = 0x1607c;
0x0000ac58 blx 0x2de8 | r0 = fcn_00002de8 ();
0x0000ac5c cmp r0, 0 |
| if (r0 != 0) {
0x0000ac5e bne.w 0xb086 | goto label_85;
| }
| label_24:
0x0000ac62 ldr r3, [r5] | r3 = *(r5);
0x0000ac64 cmp r3, 1 |
| if (r3 == 1) {
0x0000ac66 beq.w 0xae78 | goto label_86;
| }
0x0000ac6a ldr.w r3, [pc, 0x730] | r3 = *(0xb39e);
0x0000ac6e ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0000ac70 ldrb r3, [r3] | r3 = *(r3);
0x0000ac72 cmp r3, 0 |
| if (r3 != 0) {
0x0000ac74 bne.w 0xaea2 | goto label_87;
| }
0x0000ac76 strh r5, [r2, 8] | *((r2 + 8)) = r5;
| label_11:
0x0000ac78 ldr.w r3, [pc, 0x738] | r3 = *(0xb3b4);
0x0000ac7c ldr.w sl, [r4, r3] | sl = *((r4 + r3));
| label_10:
0x0000ac80 ldr.w r3, [sl] | r3 = *(sl);
0x0000ac84 ldr r3, [r3, 0x70] | r3 = *((r3 + 0x70));
0x0000ac86 blx r3 | r0 = uint32_t (*r3)(uint32_t) (r3);
0x0000ac88 cmp r0, 0 |
| if (r0 != 0) {
0x0000ac8a bne.w 0xadb8 | goto label_12;
| }
0x0000ac8e ldr.w r1, [sl] | r1 = *(sl);
0x0000ac92 str r0, [sp, 0x1c] | var_1ch = r0;
0x0000ac94 movs r0, 0x22 | r0 = 0x22;
0x0000ac96 ldr r2, [r1, 0xc] | r2 = *((r1 + 0xc));
0x0000ac98 ldr.w sl, [r1, 0x60] | sl = *((r1 + 0x60));
0x0000ac9c blx r2 | uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x0000ac9e ldr r3, [sp, 0x10] | r3 = var_10h;
0x0000aca0 eor r2, r0, 1 | r2 = r0 ^ 1;
0x0000aca4 orrs r2, r3 | r2 |= r3;
0x0000aca6 uxtb r2, r2 | r2 = (int8_t) r2;
0x0000aca8 cmp r2, 0 |
| if (r2 == 0) {
0x0000acaa beq.w 0xb0c8 | goto label_88;
| }
0x0000acae ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0000acb0 ldr r1, [r5] | r1 = *(r5);
0x0000acb2 mov r0, r3 | r0 = r3;
| label_26:
0x0000acb4 sub.w r1, r1, 4 | r1 -= 4;
0x0000acb8 clz r1, r1 | r1 &= r1;
0x0000acbc lsrs r1, r1, 5 | r1 >>= 5;
0x0000acbe blx sl | r0 = sl (r0, r1, r3);
0x0000acc0 cmp r0, 0 |
| if (r0 != 0) {
0x0000acc2 bne 0xadb8 | goto label_12;
| }
0x0000acc4 ldr.w r2, [pc, 0x75c] |
0x0000acc8 mov r3, r0 | r3 = r0;
0x0000acca ldr.w r7, [pc, 0x75c] |
0x0000acce ldr.w r1, [pc, 0x75c] |
0x0000acd2 add r2, pc | r2 = 0x160fa;
0x0000acd4 add r7, pc | r7 = 0x16102;
0x0000acd6 mov r0, r2 | r0 = r2;
0x0000acd8 add r1, pc | r1 = 0x1610a;
0x0000acda str r1, [sp] | *(sp) = r1;
0x0000acdc mov r1, r7 | r1 = r7;
0x0000acde blx 0x3188 | r0 = strcat_chk ()
0x0000ace2 cmp r0, 0 |
| if (r0 < 0) {
0x0000ace4 blt.w 0xb2e0 | goto label_89;
| }
0x0000ace8 mov r0, r7 | r0 = r7;
0x0000acea mov.w r1, 0x4000 | r1 = 0x4000;
0x0000acee blx 0x2e3c | r0 = fcn_00002e3c ();
0x0000acf2 cmp r0, 0 |
| if (r0 < 0) {
0x0000acf4 blt.w 0xb27c | goto label_90;
| }
0x0000acf8 bl 0x9f18 | r0 = fcn_00009f18 (r0);
0x0000acfc cmp r0, 0 |
| if (r0 != 0) {
0x0000acfe bne.w 0xb246 | goto label_91;
| }
| label_30:
0x0000ad02 ldr.w r0, [pc, 0x72c] |
0x0000ad06 add r0, pc | r0 = 0x1613c;
0x0000ad08 blx 0x3030 | fcn_00003030 ();
0x0000ad0c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0000ad0e cmp r0, 0 |
0x0000ad10 str r3, [sp, 0x10] | var_10h = r3;
| if (r0 < 0) {
0x0000ad12 blt.w 0xb340 | goto label_92;
| }
| label_37:
0x0000ad16 ldr r2, [r5] | r2 = *(r5);
0x0000ad18 b 0xad36 | goto label_35;
| label_32:
0x0000ad1a ldr.w r8, [pc, 0x718] |
0x0000ad1e add r8, pc | r8 = 0x16158;
| label_80:
0x0000ad20 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0000ad22 mov.w r1, -1 | r1 = -1;
0x0000ad26 str r1, [r3] | *(r3) = r1;
0x0000ad28 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000ad2a str r1, [r3] | *(r3) = r1;
0x0000ad2c mov r3, r1 | r3 = r1;
0x0000ad2e b 0xac2c |
| } while (1);
| label_83:
0x0000ad30 cmp r2, 0 |
| if (r2 != 0) {
0x0000ad32 bne.w 0xb33a | goto label_93;
| }
| label_35:
0x0000ad36 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0000ad38 movs r0, 7 | r0 = 7;
0x0000ad3a ldr.w r1, [pc, 0x6fc] |
0x0000ad3e str r3, [sp] | *(sp) = r3;
0x0000ad40 mov r3, r6 | r3 = r6;
0x0000ad42 add r1, pc | r1 = 0x16180;
0x0000ad44 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000ad48 cmp r6, 0 |
| if (r6 == 0) {
0x0000ad4a beq.w 0xaf84 | goto label_94;
| }
| label_19:
0x0000ad4e ldr r3, [r5] | r3 = *(r5);
0x0000ad50 bics r3, r3, 4 | __asm ("bics r3, r3, 4");
0x0000ad54 ite ne |
| if (r6 == 0) {
0x0000ad56 movne r0, 1 | r0 = 1;
| }
| if (r6 != 0) {
0x0000ad58 moveq r0, 0 | r0 = 0;
| }
0x0000ad5a bl 0x14cd4 | r0 = fcn_00014cd4 (r0);
| if (r0 != 0) {
0x0000ad5e cbnz r0, 0xadb8 | goto label_12;
| }
0x0000ad60 ldr.w r3, [pc, 0x650] |
0x0000ad64 ldr.w sl, [r4, r3] | sl = *((r4 + r3));
0x0000ad68 ldr.w r3, [sl] | r3 = *(sl);
0x0000ad6c ldr r3, [r3, 0x68] | r3 = *(0xb41c);
0x0000ad6e blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x0000ad70 ldr.w r1, [pc, 0x6c8] |
0x0000ad74 movs r0, 7 | r0 = 7;
0x0000ad76 add r1, pc | r1 = 0x161b6;
0x0000ad78 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000ad7c ldr.w r1, [pc, 0x6c0] |
0x0000ad80 movw r2, 0x1ed | r2 = 0x1ed;
0x0000ad84 ldr.w r0, [pc, 0x6bc] |
0x0000ad88 add r1, pc | r1 = 0x161cc;
0x0000ad8a add r0, pc | r0 = 0x161d2;
0x0000ad8c bl 0x9ff8 | r0 = fcn_00009ff8 (r0, r1, r2, r3);
0x0000ad90 cmp r0, 0 |
| if (r0 == 0) {
0x0000ad92 beq 0xae4c | goto label_95;
| }
0x0000ad94 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000ad98 ldr r0, [r0] | r0 = *(r0);
| do {
| if (r0 == 0) {
0x0000ad9a cbnz r0, 0xadb8 |
0x0000ad9c ldr.w r0, [pc, 0x6a8] |
0x0000ada0 add r0, pc | r0 = 0x161ec;
0x0000ada2 bl 0x11500 | r0 = fcn_00011500 (r0);
| if (r0 != 0) {
0x0000ada6 cbnz r0, 0xadb8 | goto label_12;
| }
0x0000ada8 ldr.w r0, [pc, 0x6a0] |
0x0000adac add r0, pc | r0 = 0x161fc;
0x0000adae bl 0x11500 | r0 = fcn_00011500 (r0);
0x0000adb2 cmp r0, 0 |
| if (r0 == 0) {
0x0000adb4 beq.w 0xb15a | goto label_96;
| }
| }
| label_12:
0x0000adb8 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000adbc ldr r0, [r0] | r0 = *(r0);
| label_20:
0x0000adbe ldr.w r2, [pc, 0x690] |
0x0000adc2 ldr.w r3, [pc, 0x5b0] | r3 = *(0xb376);
0x0000adc6 add r2, pc | r2 = 0x1621c;
0x0000adc8 ldr r3, [r2, r3] | r3 = *(0x1621c);
0x0000adca ldr r2, [r3] | r2 = *(0x1621c);
0x0000adcc ldr r3, [sp, 0x2cc] | r3 = var_2cch;
0x0000adce eors r2, r3 | r2 ^= r3;
0x0000add0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000add4 bne.w 0xb7fe | goto label_97;
| }
0x0000add8 add.w sp, sp, 0x2d4 |
0x0000addc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_73:
0x0000ade0 ldr.w r0, [pc, 0x670] |
0x0000ade4 add r0, pc | r0 = 0x1623c;
0x0000ade6 b 0xa860 | goto label_3;
| label_82:
0x0000ade8 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0000adea adds r0, r3, 1 | r0 = r3 + 1;
0x0000adec ldr r1, [r1] | r1 = *(r1);
| if (r0 != r3) {
0x0000adee bne.w 0xaf58 | goto label_98;
| }
0x0000adf2 cmp r1, 0 |
| if (r1 <= 0) {
0x0000adf4 ble.w 0xb0d2 | goto label_99;
| }
0x0000adf8 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0000adfa movs r3, 0 | r3 = 0;
0x0000adfc str r3, [r0] | *(r0) = r3;
0x0000adfe b 0xac2c | goto label_5;
| label_58:
0x0000ae00 ldr.w r3, [pc, 0x654] |
0x0000ae04 add.w sl, sp, 0xcc | sl += var_cch;
0x0000ae08 movs r2, 0xff | r2 = 0xff;
0x0000ae0a mov r1, sl | r1 = sl;
0x0000ae0c add r3, pc | r3 = 0x16268;
0x0000ae0e mov r0, r3 | r0 = r3;
0x0000ae10 mov r7, r3 | r7 = r3;
0x0000ae12 movs r3, 1 | r3 = 1;
0x0000ae14 bl 0x10ebc | fcn_00010ebc (r0, r1, r2, r3);
0x0000ae16 invalid |
| if (r3 != 1) {
0x0000ae1a bne.w 0xaf50 | goto label_100;
| }
0x0000ae1e mov r0, sl | r0 = sl;
0x0000ae20 blx 0x3078 | r0 = fcn_00003078 ();
0x0000ae24 add.w r2, sl, r0 | r2 = sl + r0;
0x0000ae28 mov r3, r0 | r3 = r0;
0x0000ae2a ldrb r2, [r2, -0x1] | r2 = *((r2 - 0x1));
0x0000ae2e mov r0, r7 | r0 = r7;
0x0000ae30 cmp r2, 0xa |
0x0000ae32 itt ne |
| if (r2 == 0xa) {
0x0000ae34 movne r2, 0xa | r2 = 0xa;
| }
| if (r2 != 0xa) {
0x0000ae36 strhne r2, [sl, r3] | __asm ("strhne r2, [sl, r3]");
| }
0x0000ae3a blx 0x2d84 | fcn_00002d84 ();
0x0000ae3e mov r1, sl | r1 = sl;
0x0000ae40 b 0xabd8 | goto label_6;
| label_70:
0x0000ae42 ldr r2, [r5] | r2 = *(r5);
0x0000ae44 movs r3, 1 | r3 = 1;
0x0000ae46 mov r8, r0 | r8 = r0;
0x0000ae48 str r0, [sp, 0x24] | var_24h = r0;
0x0000ae4a b 0xab28 | goto label_7;
| label_95:
0x0000ae4c bl 0xa278 | fcn_0000a278 (r0, r1, r2);
0x0000ae50 b 0xad9a |
| } while (1);
| label_78:
0x0000ae52 ldr r3, [r5] | r3 = *(r5);
0x0000ae54 cmp r3, 0 |
| if (r3 == 0) {
0x0000ae56 beq.w 0xb0b4 | goto label_101;
| }
0x0000ae5a ldr.w r1, [pc, 0x600] |
0x0000ae5e movs r0, 7 | r0 = 7;
0x0000ae60 add r1, pc | r1 = 0x162c2;
0x0000ae62 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000ae66 ldr.w r0, [pc, 0x5f8] |
0x0000ae6a add r0, pc | r0 = 0x162d0;
0x0000ae6c blx 0x2de8 | fcn_00002de8 ();
0x0000ae70 b 0xabc8 | goto label_8;
| label_74:
0x0000ae72 str.w sl, [r5] | __asm ("str.w sl, [r5]");
0x0000ae76 b 0xa876 | goto label_9;
| label_86:
0x0000ae78 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0000ae7a cmp r3, 0 |
| if (r3 != 0) {
0x0000ae7c bne.w 0xb01c | goto label_102;
| }
| label_22:
0x0000ae80 cmp r6, 0 |
| if (r6 != 0) {
0x0000ae82 bne.w 0xb252 | goto label_103;
| }
| label_31:
0x0000ae86 ldr.w r3, [pc, 0x514] | r3 = *(0xb39e);
0x0000ae8a ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0000ae8c ldrb r6, [r3] | r6 = *(r3);
0x0000ae8e cmp r6, 0 |
| if (r6 == 0) {
0x0000ae90 beq.w 0xb0e8 | goto label_104;
| }
0x0000ae92 strh r2, [r5, 8] | *((r5 + 8)) = r2;
0x0000ae94 ldr r3, [r5] | r3 = *(r5);
0x0000ae96 cmp r3, 1 |
0x0000ae98 mov.w r3, 0 | r3 = 0;
0x0000ae9c mov r6, r3 | r6 = r3;
0x0000ae9e str r3, [sp, 0x18] | var_18h = r3;
| if (r3 == 1) {
0x0000aea0 beq 0xaec4 | goto label_105;
| }
| label_87:
0x0000aea2 ldr.w r3, [pc, 0x510] |
0x0000aea6 movs r0, 0x22 | r0 = 0x22;
0x0000aea8 ldr.w sl, [r4, r3] | sl = *((r4 + r3));
0x0000aeac ldr.w r3, [sl] | r3 = *(sl);
0x0000aeb0 ldr r3, [r3, 0xc] | r3 = *(0xb3c2);
0x0000aeb2 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000aeb4 cmp r0, 0 |
| if (r0 == 0) {
0x0000aeb6 beq.w 0xac80 | goto label_10;
| }
0x0000aeba ldr r3, [r5] | r3 = *(r5);
0x0000aebc subs r3, 2 | r3 -= 2;
0x0000aebe cmp r3, 1 |
| if (r3 > 1) {
0x0000aec0 bhi.w 0xac80 | goto label_10;
| }
| label_105:
0x0000aec4 ldrb.w r0, [sb] | r0 = *(sb);
0x0000aec8 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0000aeca ldrb r3, [r3] | r3 = *(r3);
0x0000aecc cmp r0, 0 |
| if (r0 == 0) {
0x0000aece beq.w 0xb122 | goto label_106;
| }
| if (r3 != 0) {
0x0000aed2 cbz r3, 0xaeda |
0x0000aed4 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0000aed6 movs r3, 1 | r3 = 1;
0x0000aed8 strb r3, [r2] | *(r2) = r3;
| }
0x0000aeda movs r1, 0 | r1 = 0;
0x0000aedc movs r0, 1 | r0 = 1;
0x0000aede bl 0x97e0 | r0 = fcn_000097e0 (r0, r1);
0x0000aee2 cmp r0, 0 |
| if (r0 == 0) {
0x0000aee4 beq.w 0xac78 | goto label_11;
| }
0x0000aee8 b 0xadb8 | goto label_12;
| label_56:
0x0000aeea cmp r1, 0 |
| if (r1 != 0) {
0x0000aeec bne.w 0xa8a2 | goto label_13;
| }
0x0000aef0 ldr.w r1, [pc, 0x570] |
0x0000aef4 movs r0, 4 | r0 = 4;
0x0000aef6 add r1, pc | r1 = 0x1635e;
0x0000aef8 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000aefc ldr.w r3, [pc, 0x4a0] | r3 = *(0xb3a0);
0x0000af00 movs r2, 1 | r2 = 1;
0x0000af02 str r2, [r5] | *(r5) = r2;
0x0000af04 mov sl, r2 | sl = r2;
0x0000af06 ldr.w fp, [r4, r3] | fp = *((r4 + r3));
0x0000af0a ldr r3, [sp, 0x20] | r3 = var_20h;
0x0000af0c ldrb r1, [r3] | r1 = *(r3);
0x0000af0e ldrb.w r3, [fp] | r3 = *(fp);
0x0000af12 b 0xa8b2 | goto label_4;
| label_64:
0x0000af14 ldr.w r1, [pc, 0x550] |
0x0000af18 mov r0, r8 | r0 = r8;
0x0000af1a add r1, pc | r1 = 0x16386;
0x0000af1c blx 0x3130 | r0 = fcn_00003130 ();
0x0000af20 cmp r0, 0 |
| if (r0 != 0) {
0x0000af22 bne.w 0xb22e | goto label_107;
| }
| label_29:
0x0000af26 movs r3, 1 | r3 = 1;
0x0000af28 str r3, [r5] | *(r5) = r3;
| label_62:
0x0000af2a mov.w r8, 0 | r8 = 0;
0x0000af2e b 0xa82a | goto label_2;
| label_63:
0x0000af30 movs r3, 3 | r3 = 3;
0x0000af32 str r3, [r5] | *(r5) = r3;
0x0000af34 b 0xaa0a | goto label_14;
| label_81:
0x0000af36 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0000af38 movs r1, 1 | r1 = 1;
0x0000af3a strb r1, [r0] | *(r0) = r1;
0x0000af3c b 0xac14 | goto label_15;
| label_66:
0x0000af3e ldr.w r0, [pc, 0x52c] |
0x0000af42 add r0, pc | r0 = 0x163b4;
0x0000af44 blx 0x2d84 | fcn_00002d84 ();
0x0000af48 ldr.w r1, [pc, 0x524] |
0x0000af4c add r1, pc | r1 = 0x163c0;
0x0000af4e b 0xabd8 | goto label_6;
| label_100:
0x0000af50 mov r0, r7 | r0 = r7;
0x0000af52 blx 0x2d84 | fcn_00002d84 ();
0x0000af56 b 0xabe4 | goto label_16;
| label_98:
0x0000af58 adds r0, r1, 1 | r0 = r1 + 1;
| if (r0 != r1) {
0x0000af5a bne.w 0xac2c | goto label_5;
| }
0x0000af5e subs r1, r3, 1 | r1 = r3 - 1;
0x0000af60 cmp r1, 1 |
| if (r1 > 1) {
0x0000af62 bhi.w 0xb0e0 | goto label_108;
| }
0x0000af66 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0000af68 movs r1, 0 | r1 = 0;
0x0000af6a str r1, [r0] | *(r0) = r1;
0x0000af6c b 0xac2c | goto label_5;
| label_75:
0x0000af6e ldr r3, [sp, 0x10] | r3 = var_10h;
0x0000af70 str.w sl, [r5] | __asm ("str.w sl, [r5]");
0x0000af74 cmp r3, 0 |
| if (r3 != 0) {
0x0000af76 bne.w 0xab8c | goto label_17;
| }
| label_77:
0x0000af7a ldr.w r3, [pc, 0x41c] | r3 = *(0xb39a);
0x0000af7e ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0000af80 str r3, [sp, 0x20] | var_20h = r3;
0x0000af82 b 0xa890 | goto label_18;
| label_94:
0x0000af84 ldr.w r3, [pc, 0x42c] | r3 = *(0xb3b4);
0x0000af88 ldr.w sl, [r4, r3] | sl = *((r4 + r3));
| label_21:
0x0000af8c ldr.w r1, [pc, 0x4e4] |
0x0000af90 movs r0, 7 | r0 = 7;
0x0000af92 add r1, pc | r1 = 0x1640a;
0x0000af94 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000af96 invalid |
0x0000af9a adds r0, 0 | r0 += 0;
0x0000af9c movs r2, 0 | r2 = 0;
0x0000af9e ldr.w r1, [pc, 0x4d8] |
0x0000afa2 movs r0, 0x22 | r0 = 0x22;
0x0000afa4 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0000afa6 add r1, pc | r1 = 0x16424;
0x0000afa8 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000afaa cmp r0, 0 |
| if (r0 == 0) {
0x0000afac beq.w 0xad4e | goto label_19;
| }
0x0000afb0 ldr.w r1, [pc, 0x4c8] |
0x0000afb4 movs r0, 2 | r0 = 2;
0x0000afb6 add r1, pc | r1 = 0x16436;
0x0000afb8 bl 0x10568 | r0 = fcn_00010568 (r0, r1, r2);
0x0000afbc blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000afc0 ldr r0, [r0] | r0 = *(r0);
0x0000afc2 b 0xadbe | goto label_20;
| label_84:
0x0000afc4 ldr.w r1, [pc, 0x4b8] |
0x0000afc8 movs r0, 7 | r0 = 7;
0x0000afca add r1, pc | r1 = 0x1644e;
0x0000afcc bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000afd0 ldr.w r0, [pc, 0x4b0] |
0x0000afd4 add r0, pc | r0 = 0x1645c;
0x0000afd6 blx 0x3030 | r0 = fcn_00003030 ();
0x0000afda cmp r0, 0 |
| if (r0 < 0) {
0x0000afdc blt.w 0xb328 | goto label_109;
| }
0x0000afe0 ldr r3, [pc, 0x3d0] |
0x0000afe2 movs r2, 1 | r2 = 1;
0x0000afe4 ldr.w r1, [pc, 0x4a0] |
0x0000afe8 movs r0, 0x22 | r0 = 0x22;
0x0000afea ldr.w sl, [r4, r3] | sl = *((r4 + r3));
0x0000afee add r1, pc | r1 = 0x1647a;
0x0000aff0 ldr.w r3, [sl] | r3 = *(sl);
0x0000aff4 ldr r3, [r3, 0x14] | r3 = *(0xb3c8);
0x0000aff6 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000aff8 cmp r0, 0 |
| if (r0 != 0) {
0x0000affa bne.w 0xb13e | goto label_110;
| }
0x0000affe ldr r3, [r5] | r3 = *(r5);
0x0000b000 cmp r3, 0 |
| if (r3 != 0) {
0x0000b002 bne.w 0xb6c2 | goto label_111;
| }
0x0000b006 ldr.w r1, [pc, 0x484] |
0x0000b00a movs r2, 1 | r2 = 1;
0x0000b00c str r2, [sp] | *(sp) = r2;
0x0000b00e movs r0, 7 | r0 = 7;
0x0000b010 mov r2, r3 | r2 = r3;
0x0000b012 str r6, [sp, 0x10] | var_10h = r6;
0x0000b014 add r1, pc | r1 = 0x164a6;
0x0000b016 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b01a b 0xaf8c | goto label_21;
| label_102:
0x0000b01c ldr.w r1, [pc, 0x470] |
0x0000b020 movs r0, 7 | r0 = 7;
0x0000b022 add r1, pc | r1 = 0x164b6;
0x0000b024 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b028 ldr r3, [pc, 0x388] |
0x0000b02a movs r0, 0x42 | r0 = 0x42;
0x0000b02c ldr.w r1, [pc, 0x464] |
0x0000b030 ldr.w sl, [r4, r3] | sl = *((r4 + r3));
0x0000b034 add r1, pc | r1 = 0x164cc;
0x0000b036 ldr.w r3, [sl] | r3 = *(sl);
0x0000b03a ldr r3, [r3, 0x18] | r3 = *(0xb3cc);
0x0000b03c blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000b03e cmp r0, 0 |
| if (r0 >= 0) {
0x0000b040 bge.w 0xae80 | goto label_22;
| }
0x0000b044 ldr.w r1, [pc, 0x450] |
0x0000b048 movs r0, 2 | r0 = 2;
0x0000b04a add r1, pc | r1 = 0x164e6;
0x0000b04c bl 0x10568 | r0 = fcn_00010568 (r0, r1, r2);
0x0000b050 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000b054 ldr r0, [r0] | r0 = *(r0);
0x0000b056 b 0xadbe | goto label_20;
| label_79:
0x0000b058 ldr.w r0, [pc, 0x440] |
0x0000b05c add.w sl, sp, 0x84 | sl += var_84h;
0x0000b060 mov r1, sl | r1 = sl;
0x0000b062 add r0, pc | r0 = 0x16502;
0x0000b064 blx 0x300c | r0 = fcn_0000300c ();
0x0000b068 cmp r0, 0 |
| if (r0 < 0) {
0x0000b06a blt.w 0xb288 | goto label_112;
| }
0x0000b06e ldr.w r2, [sl] | r2 = *(sl);
0x0000b072 ldr.w r3, [sl, 0x10] | r3 = var_10h_2;
0x0000b076 mul r2, r3, r2 | r2 = r3 * r2;
0x0000b07a cmp.w r2, 0x4000 |
| if (r2 <= 0x4000) {
0x0000b07e blo.w 0xb2a8 | goto label_113;
| }
0x0000b082 ldr r2, [r5] | r2 = *(r5);
0x0000b084 b 0xabf6 | goto label_23;
| label_85:
0x0000b086 ldr.w r1, [pc, 0x418] |
0x0000b08a movs r0, 4 | r0 = 4;
0x0000b08c add r1, pc | r1 = 0x16532;
0x0000b08e bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b092 b 0xac62 | goto label_24;
| label_65:
0x0000b094 ldr r3, [r5] | r3 = *(r5);
0x0000b096 cmp r3, 3 |
| if (r3 == 3) {
0x0000b098 beq.w 0xb2f2 | goto label_114;
| }
0x0000b09c ldr.w r0, [pc, 0x404] |
0x0000b0a0 ldr.w r8, [pc, 0x404] |
0x0000b0a4 add r0, pc | r0 = 0x1654c;
0x0000b0a6 blx 0x2d84 | fcn_00002d84 ();
0x0000b0aa ldr.w r1, [pc, 0x400] |
0x0000b0ae add r8, pc | r8 = 0x1655a;
0x0000b0b0 add r1, pc | r1 = 0x16562;
0x0000b0b2 b 0xabd8 | goto label_6;
| label_101:
0x0000b0b4 ldr r1, [pc, 0x3f8] |
0x0000b0b6 mov r0, sl | r0 = sl;
0x0000b0b8 add r1, pc | r1 = 0x1656c;
0x0000b0ba bl 0x1155c | fcn_0001155c (r0);
0x0000b0be b 0xabc8 | goto label_8;
| label_72:
0x0000b0c0 ldr.w r8, [pc, 0x3f0] | r8 = fcn.000110f8;
0x0000b0c4 add r8, pc | r8 += pc;
0x0000b0c6 b 0xab02 | goto label_25;
| label_88:
0x0000b0c8 ldr r1, [r5] | r1 = *(r5);
0x0000b0ca subs r0, r1, 1 | r0 = r1 - 1;
0x0000b0cc it ne |
| if (r0 == r1) {
0x0000b0ce movne r0, 1 | r0 = 1;
| }
0x0000b0d0 b 0xacb4 | goto label_26;
| label_99:
0x0000b0d2 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0000b0d4 adds r7, r1, 1 | r7 = r1 + 1;
0x0000b0d6 mov.w r3, 2 | r3 = 2;
0x0000b0da str r3, [r0] | *(r0) = r3;
| if (r7 != r1) {
0x0000b0dc bne.w 0xac2c | goto label_5;
| }
| label_108:
0x0000b0e0 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0000b0e2 movs r1, 0xa | r1 = 0xa;
0x0000b0e4 str r1, [r0] | *(r0) = r1;
0x0000b0e6 b 0xac2c | goto label_5;
| label_104:
0x0000b0e8 ldr r3, [pc, 0x2c8] | r3 = *(0xb3b4);
0x0000b0ea ldr.w sl, [r4, r3] | sl = *((r4 + r3));
0x0000b0ee str r6, [sp, 0x18] | var_18h = r6;
0x0000b0f0 b 0xac80 | goto label_10;
| label_53:
0x0000b0f2 ldr r1, [pc, 0x3c4] |
0x0000b0f4 movs r0, 5 | r0 = 5;
0x0000b0f6 add r1, pc | r1 = 0x165b4;
0x0000b0f8 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b0fc ldr r2, [sp, 0x10] | r2 = var_10h;
0x0000b0fe movs r3, 1 | r3 = 1;
0x0000b100 mov sl, r3 | sl = r3;
0x0000b102 str r3, [r5] | *(r5) = r3;
0x0000b104 cmp r2, 0 |
| if (r2 != 0) {
0x0000b106 bne.w 0xab8c | goto label_17;
| }
0x0000b10a ldr r3, [pc, 0x294] | r3 = *(0xb3a2);
0x0000b10c ldr.w fp, [r4, r3] | fp = *((r4 + r3));
0x0000b10e add sp, 0xc |
0x0000b110 ldr r3, [pc, 0x284] | r3 = *(0xb398);
0x0000b112 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0000b114 mov r2, r3 | r2 = r3;
0x0000b116 str r3, [sp, 0x20] | var_20h = r3;
0x0000b118 ldrb r1, [r2] | r1 = *(r2);
0x0000b11a ldrb.w r3, [fp] | r3 = *(fp);
0x0000b11e b.w 0xa8b2 | goto label_4;
| label_106:
0x0000b122 ldr r2, [pc, 0x290] | r2 = *(0xb3b6);
0x0000b124 ldr.w sl, [r4, r2] | sl = *((r4 + r2));
0x0000b128 ldr.w r2, [sl] | r2 = *(sl);
0x0000b12c cmp r3, 0 |
| if (r3 == 0) {
0x0000b12e beq.w 0xac80 | goto label_10;
| }
0x0000b132 ldr r3, [r2, 0x28] | r3 = *((r2 + 0x28));
0x0000b134 blx r3 | r0 = uint32_t (*r3)(uint32_t) (r3);
0x0000b136 cmp r0, 0 |
| if (r0 == 0) {
0x0000b138 beq.w 0xac80 | goto label_10;
| }
0x0000b13c b 0xadb8 | goto label_12;
| label_110:
0x0000b13e ldr r1, [pc, 0x37c] |
0x0000b140 movs r0, 4 | r0 = 4;
0x0000b142 ldr.w r8, [pc, 0x37c] |
0x0000b146 add r1, pc | r1 = 0x16608;
0x0000b148 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b14c movs r3, 1 | r3 = 1;
0x0000b14e add r8, pc | r8 = 0x16614;
0x0000b150 str r3, [r5] | *(r5) = r3;
0x0000b152 b 0xac4c | goto label_27;
| label_68:
0x0000b154 movs r3, 4 | r3 = 4;
0x0000b156 str r3, [r5] | *(r5) = r3;
0x0000b158 b 0xaa48 | goto label_28;
| label_96:
0x0000b15a ldr r0, [pc, 0x368] |
0x0000b15c add r0, pc | r0 = 0x16626;
0x0000b15e bl 0x11500 | r0 = fcn_00011500 (r0);
0x0000b162 cmp r0, 0 |
| if (r0 != 0) {
0x0000b164 bne.w 0xadb8 | goto label_12;
| }
0x0000b168 ldr r3, [r5] | r3 = *(r5);
0x0000b16a cmp r3, 1 |
| if (r3 > 1) {
0x0000b16c bhi.w 0xb524 | goto label_115;
| }
| label_39:
0x0000b170 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0000b172 cmp r3, 0 |
| if (r3 != 0) {
0x0000b174 bne.w 0xb67a | goto label_116;
| }
| label_40:
0x0000b178 ldrb.w r3, [sb] | r3 = *(sb);
0x0000b17c cmp r3, 0 |
| if (r3 == 0) {
0x0000b17e beq.w 0xb35e | goto label_117;
| }
0x0000b182 ldr r2, [pc, 0x218] | r2 = *(0xb39e);
0x0000b184 ldr r6, [r4, r2] | r6 = *((r4 + r2));
0x0000b186 ldrb r1, [r6] | r1 = *(r6);
| if (r1 == 0) {
0x0000b188 cbnz r1, 0xb190 |
0x0000b18a ldrb.w r0, [fp] | r0 = *(fp);
| if (r0 == 0) {
0x0000b18e cbz r0, 0xb1a8 | goto label_38;
| }
| }
| label_42:
0x0000b190 movs r2, 0 | r2 = 0;
0x0000b192 mov r0, r2 | r0 = r2;
0x0000b194 bl 0x91f4 | r0 = fcn_000091f4 (r0, r1, r2);
0x0000b198 cmp r0, 0 |
| if (r0 != 0) {
0x0000b19a bne.w 0xadb8 | goto label_12;
| }
0x0000b19e ldr r3, [pc, 0x1fc] | r3 = *(0xb39e);
0x0000b1a0 ldr r6, [r4, r3] | r6 = *((r4 + r3));
0x0000b1a2 ldrb.w r3, [sb] | r3 = *(sb);
0x0000b1a6 ldrb r0, [r6] | r0 = *(r6);
| label_38:
0x0000b1a8 ldr r1, [pc, 0x31c] |
0x0000b1aa ldr r2, [r5] | r2 = *(r5);
0x0000b1ac strd r3, r0, [sp, 4] | __asm ("strd r3, r0, [var_4h]");
0x0000b1b0 movs r3, 0 | r3 = 0;
0x0000b1b2 str r3, [sp] | *(sp) = r3;
0x0000b1b4 add r1, pc | r1 = 0x16680;
0x0000b1b6 movs r3, 1 | r3 = 1;
0x0000b1b8 movs r0, 7 | r0 = 7;
0x0000b1ba bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b1be ldr r3, [r5] | r3 = *(r5);
0x0000b1c0 cmp r3, 0 |
| if (r3 != 0) {
0x0000b1c2 bne.w 0xb6ca | goto label_118;
| }
| label_41:
0x0000b1c6 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000b1c8 ldr r1, [r3] | r1 = *(r3);
0x0000b1ca cmp r1, 1 |
| if (r1 == 1) {
0x0000b1cc beq.w 0xb776 | void (*0xb776)() ();
| }
| label_34:
0x0000b22a movs r0, 0 | r0 = 0;
0x0000b22c b 0xadbe | goto label_20;
| label_107:
0x0000b22e ldrb.w r3, [r8] | r3 = *(r8);
0x0000b232 cmp r3, 0 |
| if (r3 == 0) {
0x0000b234 beq.w 0xaf26 | goto label_29;
| }
0x0000b238 ldr r1, [pc, 0x294] |
0x0000b23a mov r2, r8 | r2 = r8;
0x0000b23c movs r0, 4 | r0 = 4;
0x0000b23e add r1, pc | r1 = 0x16712;
0x0000b240 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b244 b 0xaf26 | goto label_29;
| label_91:
0x0000b246 ldr r1, [pc, 0x28c] |
0x0000b248 movs r0, 4 | r0 = 4;
0x0000b24a add r1, pc | r1 = 0x16724;
0x0000b24c bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b250 b 0xad02 | goto label_30;
| label_103:
0x0000b252 ldr r1, [pc, 0x284] |
0x0000b254 movs r0, 7 | r0 = 7;
0x0000b256 add r1, pc | r1 = 0x16734;
0x0000b258 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b25c ldr r0, [pc, 0x27c] |
0x0000b25e add r0, pc | r0 = 0x1673e;
0x0000b260 blx 0x3030 | r0 = fcn_00003030 ();
0x0000b264 cmp r0, 0 |
| if (r0 >= 0) {
0x0000b266 bge.w 0xae86 | goto label_31;
| }
0x0000b26a ldr r1, [pc, 0x274] |
0x0000b26c movs r0, 2 | r0 = 2;
0x0000b26e add r1, pc | r1 = 0x16754;
0x0000b270 bl 0x10568 | r0 = fcn_00010568 (r0, r1, r2);
0x0000b274 blx 0x317c | strncpy (r0, r1, r2);
0x0000b276 vmlal.s8 q3, d2, d0 | __asm ("vmlal.s8 q3, d2, d0");
0x0000b27a b 0xadbe | goto label_20;
| label_90:
0x0000b27c ldr r1, [pc, 0x264] |
0x0000b27e movs r0, 4 | r0 = 4;
0x0000b280 add r1, pc | r1 = 0x16768;
0x0000b282 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b286 b 0xad02 | goto label_30;
| label_112:
0x0000b288 ldr r1, [pc, 0x25c] |
0x0000b28a movs r0, 4 | r0 = 4;
0x0000b28c add r1, pc | r1 = 0x16778;
0x0000b28e bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b292 ldr r2, [r5] | r2 = *(r5);
0x0000b294 b 0xabf6 | goto label_23;
| label_76:
0x0000b296 ldr r1, [pc, 0x254] |
0x0000b298 movs r0, 5 | r0 = 5;
0x0000b29a add r1, pc | r1 = 0x1678c;
0x0000b29c bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b2a0 ldr.w sl, [r5] | sl = *(r5);
0x0000b2a4 b.w 0xa876 | goto label_9;
| label_113:
0x0000b2a8 ldr r1, [pc, 0x244] |
0x0000b2aa lsrs r2, r2, 0xa | r2 >>= 0xa;
0x0000b2ac movs r0, 3 | r0 = 3;
0x0000b2ae add r1, pc | r1 = 0x167a2;
0x0000b2b0 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b2b4 movs r0, 3 | r0 = 3;
0x0000b2b6 bl 0x9eb8 | fcn_00009eb8 (r0);
0x0000b2ba ldrb.w r3, [sb] | r3 = *(sb);
0x0000b2be movs r2, 3 | r2 = 3;
0x0000b2c0 str r2, [r5] | *(r5) = r2;
0x0000b2c2 cmp r3, 0 |
| if (r3 == 0) {
0x0000b2c4 beq.w 0xad1a | goto label_32;
| }
0x0000b2c8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000b2ca ldr.w r8, [pc, 0x228] |
0x0000b2ce ldr r3, [r3] | r3 = *(r3);
0x0000b2d0 add r8, pc | r8 = 0x167ca;
0x0000b2d2 b 0xac0a | goto label_33;
| label_71:
0x0000b2d4 ldr r1, [pc, 0x220] |
0x0000b2d6 movs r0, 4 | r0 = 4;
0x0000b2d8 add r1, pc | r1 = 0x167d4;
0x0000b2da bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b2de b 0xb22a | goto label_34;
| label_89:
0x0000b2e0 ldr r1, [pc, 0x218] |
0x0000b2e2 movs r0, 4 | r0 = 4;
0x0000b2e4 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0000b2e6 add r1, pc | r1 = 0x167e6;
0x0000b2e8 str r3, [sp, 0x10] | var_10h = r3;
0x0000b2ea bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b2ee ldr r2, [r5] | r2 = *(r5);
0x0000b2f0 b 0xad36 | goto label_35;
| label_114:
0x0000b2f2 ldr r0, [pc, 0x20c] |
0x0000b2f4 ldr.w r8, [pc, 0x20c] |
0x0000b2f8 add r0, pc | r0 = 0x167fe;
0x0000b2fa blx 0x2d84 | fcn_00002d84 ();
0x0000b2fe ldr r1, [pc, 0x208] |
0x0000b300 add r8, pc | r8 = 0x16808;
0x0000b302 add r1, pc | r1 = 0x16810;
0x0000b304 b 0xabd8 | goto label_6;
| label_60:
0x0000b306 ldr r3, [r5] | r3 = *(r5);
0x0000b308 cmp r3, 4 |
| if (r3 == 4) {
0x0000b30a beq.w 0xb66a | goto label_119;
| }
0x0000b30e cmp r3, 3 |
| if (r3 == 3) {
0x0000b310 beq.w 0xb6ac | goto label_120;
| }
0x0000b314 ldr r0, [pc, 0x1f4] |
0x0000b316 ldr.w r8, [pc, 0x1f8] |
0x0000b31a add r0, pc | r0 = 0x1682a;
0x0000b31c blx 0x2d84 | fcn_00002d84 ();
0x0000b320 ldr r1, [pc, 0x1f0] |
0x0000b322 add r8, pc | r8 = 0x16838;
0x0000b324 add r1, pc | r1 = 0x1683c;
0x0000b326 b 0xabd8 | goto label_6;
| label_109:
0x0000b328 ldr r1, [pc, 0x1ec] |
0x0000b32a movs r0, 2 | r0 = 2;
0x0000b32c add r1, pc | r1 = 0x16848;
0x0000b32e bl 0x10568 | r0 = fcn_00010568 (r0, r1, r2);
0x0000b332 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000b336 ldr r0, [r0] | r0 = *(r0);
0x0000b338 b 0xadbe | goto label_20;
| label_93:
0x0000b33a ldr r3, [sp, 0x10] | r3 = var_10h;
0x0000b33c str r3, [sp, 0x18] | var_18h = r3;
0x0000b33e b 0xac52 | goto label_36;
| label_92:
0x0000b340 ldr r1, [pc, 0x1d8] |
0x0000b342 movs r0, 4 | r0 = 4;
0x0000b344 add r1, pc | r1 = 0x16864;
0x0000b346 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b34a b 0xad16 | goto label_37;
| label_69:
0x0000b34c ldr r1, [pc, 0x1d0] |
0x0000b34e movs r0, 2 | r0 = 2;
0x0000b350 add r1, pc | r1 = 0x16874;
0x0000b352 bl 0x10568 | r0 = fcn_00010568 (r0, r1, r2);
0x0000b356 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000b35a ldr r0, [r0] | r0 = *(r0);
0x0000b35c b 0xadbe | goto label_20;
| label_117:
0x0000b35e ldrb.w r2, [fp] | r2 = *(fp);
0x0000b362 cmp r2, 0 |
| if (r2 != 0) {
0x0000b364 bne.w 0xb6ea | goto label_121;
| }
0x0000b368 ldr r2, [pc, 0x30] | r2 = *(0xb39c);
0x0000b36a ldr r6, [r4, r2] | r6 = *((r4 + r2));
0x0000b36c ldrb r0, [r6] | r0 = *(r6);
0x0000b36e b 0xb1a8 | goto label_38;
| label_115:
0x0000b524 ldr r1, [pc, 0x328] |
0x0000b526 movs r0, 7 | r0 = 7;
0x0000b528 add r1, pc | r1 = 0x16d7c;
0x0000b52a bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b52e ldr r3, [r5] | r3 = *(r5);
0x0000b530 cmp r3, 4 |
| if (r3 != 4) {
0x0000b532 bne.w 0xb6ee | goto label_122;
| }
0x0000b536 ldr.w r3, [sl] | r3 = *(sl);
0x0000b53a movw r2, 0x8001 | r2 = 0x8001;
0x0000b53e ldr r1, [pc, 0x314] |
0x0000b540 movs r0, 0x41 | r0 = 0x41;
0x0000b542 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0000b544 add r1, pc | r1 = 0x16d9e;
0x0000b546 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000b548 cmp r0, 0 |
| if (r0 != 0) {
0x0000b54a bne.w 0xb700 | goto label_123;
| }
| label_43:
0x0000b54e ldr r6, [r5] | r6 = *(r5);
0x0000b550 cmp r6, 4 |
| if (r6 == 4) {
0x0000b552 bne 0xb564 |
0x0000b554 ldr.w r3, [sl] | r3 = *(sl);
0x0000b558 movs r0, 0x4b | r0 = 0x4b;
0x0000b55a ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0000b55c blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000b55e cmp r0, 0 |
| if (r0 != 0) {
0x0000b560 bne.w 0xb7a6 | goto label_124;
| }
| }
| label_47:
0x0000b564 ldr r1, [pc, 0x2f0] |
0x0000b566 movs r0, 7 | r0 = 7;
0x0000b568 add r1, pc | r1 = 0x16dc4;
0x0000b56a bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b56e ldr r0, [pc, 0x2ec] |
0x0000b570 add r0, pc | r0 = 0x16dd2;
0x0000b572 bl 0xa454 | fcn_0000a454 (r0);
0x0000b576 ldr r0, [pc, 0x2e8] |
0x0000b578 add r0, pc |
0x0000b57a bl 0xa454 | fcn_0000a454 (r0);
0x0000b57c vceq.i32 d20, d27, d25 | __asm ("vceq.i32 d20, d27, d25");
0x0000b580 add r0, pc | r0 = 0x22362;
0x0000b582 bl 0xa454 | fcn_0000a454 (r0);
0x0000b586 ldr.w r3, [sl] | r3 = *(sl);
0x0000b58a movs r0, 0x4b | r0 = 0x4b;
0x0000b58c ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0000b58e blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000b590 cmp r0, 0 |
| if (r0 == 0) {
0x0000b592 beq.w 0xb760 | goto label_125;
| }
0x0000b596 ldr r1, [pc, 0x2d0] |
0x0000b598 add r1, pc | r1 = 0x16e06;
| label_45:
0x0000b59a movs r0, 7 | r0 = 7;
0x0000b59c bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b5a0 ldr r3, [r5] | r3 = *(r5);
0x0000b5a2 cmp r3, 4 |
| if (r3 == 4) {
0x0000b5a4 beq.w 0xb786 | goto label_126;
| }
0x0000b5a8 cmp r3, 3 |
| if (r3 == 3) {
0x0000b5aa beq.w 0xb792 | goto label_127;
| }
0x0000b5ae cmp r3, 2 |
| if (r3 == 2) {
0x0000b5b0 beq.w 0xb7f2 | goto label_128;
| }
0x0000b5b4 ldr r3, [pc, 0x2b4] |
0x0000b5b6 add r3, pc | r3 = 0x16e26;
| label_46:
0x0000b5b8 str r3, [sp, 4] | var_4h = r3;
0x0000b5ba add r6, sp, 0x1cc | r6 += var_1cch;
0x0000b5bc ldr r3, [pc, 0x2b0] |
0x0000b5be mov.w r2, 0x100 | r2 = 0x100;
0x0000b5c2 ldr r7, [pc, 0x2b0] |
0x0000b5c4 movs r1, 1 | r1 = 1;
0x0000b5c6 mov r0, r6 | r0 = r6;
0x0000b5c8 add r3, pc | r3 = 0x16e3c;
0x0000b5ca str r3, [sp, 0xc] | var_ch = r3;
0x0000b5cc add r7, pc | r7 = 0x16e46;
0x0000b5ce ldr r3, [pc, 0x2a8] |
0x0000b5d0 str r7, [sp, 8] | var_8h = r7;
0x0000b5d2 add r3, pc | r3 = 0x16e50;
0x0000b5d4 str r3, [sp] | *(sp) = r3;
0x0000b5d6 ldr r3, [pc, 0x2a4] |
0x0000b5d8 add r3, pc |
0x0000b5da blx 0x3200 | ERR_error_string ();
0x0000b5de mov r0, r6 | r0 = r6;
0x0000b5e0 blx 0x2de8 | fcn_00002de8 ();
0x0000b5e4 ldr r1, [pc, 0x298] |
0x0000b5e6 mov r6, r0 | r6 = r0;
0x0000b5e8 movs r0, 7 | r0 = 7;
0x0000b5ea add r1, pc | r1 = 0x16e6e;
0x0000b5ec bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b5f0 ldr r0, [pc, 0x290] |
0x0000b5f2 add r0, pc | r0 = 0x16e7a;
0x0000b5f4 blx 0x3030 | fcn_00003030 ();
0x0000b5f8 ldr r0, [pc, 0x28c] |
0x0000b5fa add r0, pc | r0 = 0x16e86;
0x0000b5fc blx 0x3030 | fcn_00003030 ();
0x0000b600 ldr r0, [pc, 0x288] |
0x0000b602 add r0, pc | r0 = 0x16e92;
0x0000b604 blx 0x3030 | fcn_00003030 ();
0x0000b608 ldr r0, [pc, 0x284] |
0x0000b60a add r0, pc | r0 = 0x16e9e;
0x0000b60c blx 0x3030 | fcn_00003030 ();
0x0000b610 ldr r0, [pc, 0x280] |
0x0000b612 add r0, pc | r0 = 0x16eaa;
0x0000b614 blx 0x3030 | fcn_00003030 ();
0x0000b618 ldr.w r3, [sl] | r3 = *(sl);
0x0000b61c mov r1, r7 | r1 = r7;
0x0000b61e movs r0, 0x41 | r0 = 0x41;
0x0000b620 ldr r3, [r3, 0x18] | r3 = *(0x16e72);
0x0000b622 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000b624 cmp r0, 0 |
| if (r0 < 0) {
0x0000b626 blt.w 0xb802 | goto label_129;
| }
| label_44:
0x0000b62a lsls r3, r6, 0x19 | r3 = r6 << 0x19;
0x0000b62c ubfx r2, r6, 8, 8 | r2 = (r6 >> 8) & ((1 << 8) - 1);
| if (r3 != r6) {
0x0000b630 bne 0xb63e | goto label_130;
| }
0x0000b632 cmp r2, 0x7f |
| if (r2 == 0x7f) {
0x0000b634 beq.w 0xb7e6 | goto label_131;
| }
0x0000b638 cmp r2, 0 |
| if (r2 == 0) {
0x0000b63a beq.w 0xb170 | goto label_39;
| }
| label_130:
0x0000b63e ldr r1, [pc, 0x258] |
0x0000b640 movs r0, 2 | r0 = 2;
0x0000b642 add r1, pc | r1 = 0x16ee0;
0x0000b644 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b648 ldr r3, [r5] | r3 = *(r5);
0x0000b64a cmp r3, 4 |
| if (r3 != 4) {
0x0000b64c bne.w 0xb170 | goto label_39;
| }
0x0000b650 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000b652 ldr r3, [r3] | r3 = *(r3);
0x0000b654 cmp r3, 1 |
| if (r3 == 1) {
0x0000b656 beq.w 0xb170 | goto label_39;
| }
0x0000b65a blx 0x317c | strncpy (r0, r1, r2);
0x0000b65e movs r3, 0x34 | r3 = 0x34;
0x0000b660 mov r2, r0 | r2 = r0;
0x0000b662 str r3, [r2] | *(r2) = r3;
0x0000b664 mov r0, r3 | r0 = r3;
0x0000b666 b.w 0xadbe | goto label_20;
| label_119:
0x0000b66a ldr r0, [pc, 0x230] |
0x0000b66c add r0, pc | r0 = 0x16f0e;
0x0000b66e blx 0x2d84 | fcn_00002d84 ();
0x0000b672 ldr r1, [pc, 0x22c] |
0x0000b674 add r1, pc | r1 = 0x16f1a;
0x0000b676 b.w 0xabd8 | goto label_6;
| label_116:
0x0000b67a ldr r1, [pc, 0x228] |
0x0000b67c movs r0, 7 | r0 = 7;
0x0000b67e add r1, pc | r1 = 0x16f28;
0x0000b680 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b684 ldr.w r3, [sl] | r3 = *(sl);
0x0000b688 movs r0, 0x42 | r0 = 0x42;
0x0000b68a ldr r1, [pc, 0x21c] |
0x0000b68c ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0000b68e add r1, pc | r1 = 0x16f3c;
0x0000b690 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000b692 cmp r0, 0 |
| if (r0 >= 0) {
0x0000b694 bge.w 0xb178 | goto label_40;
| }
0x0000b698 ldr r1, [pc, 0x210] |
0x0000b69a movs r0, 2 | r0 = 2;
0x0000b69c add r1, pc | r1 = 0x16f4c;
0x0000b69e bl 0x10568 | r0 = fcn_00010568 (r0, r1, r2);
0x0000b6a2 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000b6a6 ldr r0, [r0] | r0 = *(r0);
0x0000b6a8 b.w 0xadbe | goto label_20;
| label_120:
0x0000b6ac ldr r0, [pc, 0x200] |
0x0000b6ae ldr.w r8, [pc, 0x204] |
0x0000b6b2 add r0, pc | r0 = 0x16f66;
0x0000b6b4 blx 0x2d84 | fcn_00002d84 ();
0x0000b6b6 sbc.w sb, r6, pc, ror 17 | __asm ("sbc.w sb, r6, pc, ror 17");
0x0000b6b8 ldr r1, [pc, 0x1fc] |
0x0000b6ba add r8, pc | r8 = 0x16f74;
0x0000b6bc add r1, pc | r1 = 0x16f78;
0x0000b6be b.w 0xabd8 | goto label_6;
| label_111:
0x0000b6c2 str r6, [sp, 0x18] | var_18h = r6;
0x0000b6c4 mov r6, r0 | r6 = r0;
0x0000b6c6 b.w 0xac52 | goto label_36;
| label_118:
0x0000b6ca ldr r0, [pc, 0x1f0] |
0x0000b6cc add r0, pc | r0 = 0x16f8e;
0x0000b6ce bl 0x10d94 | r0 = fcn_00010d94 (r0);
0x0000b6d2 cmp r0, 0 |
| if (r0 != 0) {
0x0000b6d4 bne.w 0xadb8 | goto label_12;
| }
0x0000b6d8 ldr r0, [pc, 0x1e4] |
0x0000b6da add r0, pc | r0 = 0x16f9e;
0x0000b6dc bl 0x10d94 | r0 = fcn_00010d94 (r0);
0x0000b6de smmla r8, sl, r0, r2 | __asm ("smmla r8, sl, r0, r2");
0x0000b6e0 cmp r0, 0 |
| if (r0 == 0) {
0x0000b6e2 beq.w 0xb1c6 | goto label_41;
| }
0x0000b6e4 add r5, sp, 0x1c0 | r5 = sp + 0x1c0;
0x0000b6e6 b.w 0xadb8 | goto label_12;
| label_121:
0x0000b6ea mov r1, r3 | r1 = r3;
0x0000b6ec b 0xb190 | goto label_42;
| label_122:
0x0000b6ee ldr r1, [pc, 0x1d4] |
0x0000b6f0 ldr r0, [pc, 0x1d4] |
0x0000b6f2 add r1, pc | r1 = 0x16fbc;
0x0000b6f4 add r0, pc | r0 = 0x16fc0;
0x0000b6f6 bl 0xa224 | r0 = fcn_0000a224 (r0, r1);
0x0000b6fa cmp r0, 0 |
| if (r0 == 0) {
0x0000b6fc beq.w 0xb54e | goto label_43;
| }
| label_123:
0x0000b700 ldr r1, [pc, 0x1c8] |
0x0000b702 movs r0, 4 | r0 = 4;
0x0000b704 add r1, pc | r1 = 0x16fd4;
0x0000b706 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b70a ldr r1, [pc, 0x1c4] |
0x0000b70c movs r0, 7 | r0 = 7;
0x0000b70e add r1, pc | r1 = 0x16fe4;
0x0000b710 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b714 ldr r3, [r5] | r3 = *(r5);
0x0000b716 cmp r3, 4 |
| if (r3 == 4) {
0x0000b718 beq 0xb7e0 | goto label_132;
| }
0x0000b71a cmp r3, 3 |
| if (r3 == 3) {
0x0000b71c beq 0xb7f8 | goto label_133;
| }
0x0000b71e cmp r3, 2 |
| if (r3 == 2) {
0x0000b720 beq.w 0xb83c | goto label_134;
| }
0x0000b724 ldr r3, [pc, 0x1ac] |
0x0000b726 add r3, pc | r3 = 0x16ffe;
| label_48:
0x0000b728 str r3, [sp, 4] | var_4h = r3;
0x0000b72a add r6, sp, 0x1cc | r6 += var_1cch;
0x0000b72c ldr r3, [pc, 0x1a8] |
0x0000b72e mov.w r2, 0x100 | r2 = 0x100;
0x0000b732 movs r1, 1 | r1 = 1;
0x0000b734 mov r0, r6 | r0 = r6;
0x0000b736 add r3, pc | r3 = 0x17012;
0x0000b738 strd r3, r3, [sp, 8] | __asm ("strd r3, r3, [var_ch]");
0x0000b73c ldr r3, [pc, 0x19c] |
0x0000b73e add r3, pc | r3 = 0x1701e;
0x0000b740 str r3, [sp] | *(sp) = r3;
0x0000b742 ldr r3, [pc, 0x19c] |
0x0000b744 add r3, pc | r3 = 0x1702a;
0x0000b746 blx 0x3200 | ERR_error_string ();
0x0000b74a mov r0, r6 | r0 = r6;
0x0000b74c blx 0x2de8 | r0 = fcn_00002de8 ();
0x0000b750 mov r6, r0 | r6 = r0;
0x0000b752 b 0xb62a | goto label_44;
| label_125:
0x0000b760 ldr r0, [pc, 0x184] |
0x0000b762 add r0, pc | r0 = 0x1704e;
0x0000b764 bl 0xa454 | fcn_0000a454 (r0);
0x0000b768 ldr r0, [pc, 0x180] |
0x0000b76a add r0, pc | r0 = 0x1705a;
0x0000b76c bl 0xa454 | fcn_0000a454 (r0);
0x0000b770 ldr r1, [pc, 0x17c] |
0x0000b772 add r1, pc | r1 = 0x17066;
0x0000b774 b 0xb59a | goto label_45;
| label_126:
0x0000b786 ldr r3, [pc, 0x16c] |
0x0000b788 add r3, pc | r3 = 0x17082;
0x0000b78a b 0xb5b8 | goto label_46;
| label_127:
0x0000b792 ldr r3, [pc, 0x164] |
0x0000b794 add r3, pc | r3 = 0x17092;
0x0000b796 b 0xb5b8 | goto label_46;
| label_55:
0x0000b798 ldr r3, [pc, 0x160] | r3 = *(0xb8fc);
0x0000b79a ldr.w fp, [r4, r3] | fp = *((r4 + r3));
0x0000b79e ldrb.w r3, [fp] | r3 = *(fp);
0x0000b7a2 b.w 0xa8b2 | goto label_4;
0x0000b7a4 invalid |
| label_124:
0x0000b7a6 ldr r1, [pc, 0x158] |
0x0000b7a8 movs r0, 7 | r0 = 7;
0x0000b7aa add r1, pc | r1 = 0x170b0;
0x0000b7ac bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b7b0 ldr.w r3, [sl] | r3 = *(sl);
0x0000b7b4 movs r2, 1 | r2 = 1;
0x0000b7b6 ldr r1, [pc, 0x14c] |
0x0000b7b8 movs r0, 0x4b | r0 = 0x4b;
0x0000b7ba ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0000b7bc add r1, pc | r1 = 0x170c6;
0x0000b7be blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| if (r0 != 0) {
0x0000b7c0 cbnz r0, 0xb816 | goto label_135;
| }
0x0000b7c2 ldr r1, [pc, 0x144] |
0x0000b7c4 ldr r0, [pc, 0x144] |
0x0000b7c6 add r1, pc | r1 = 0x170d4;
0x0000b7c8 add r0, pc | r0 = 0x170d8;
0x0000b7ca invalid |
0x0000b7cc stc2 p8, c2, [fp, -0]! | __asm ("stc2 p8, c2, [fp, -0]!");
| if (r0 == 0) {
0x0000b7d0 beq.w 0xb564 | goto label_47;
| }
0x0000b7d2 add r6, sp, 0x320 | r6 = sp + 0x320;
0x0000b7d4 ldr r1, [pc, 0x138] |
0x0000b7d6 mov r0, r6 | r0 = r6;
0x0000b7d8 add r1, pc | r1 = 0x170ec;
0x0000b7da bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b7de b 0xb564 | goto label_47;
| label_132:
0x0000b7e0 ldr r3, [pc, 0x130] |
0x0000b7e2 add r3, pc | r3 = 0x170fa;
0x0000b7e4 b 0xb728 | goto label_48;
| label_131:
0x0000b7e6 ldr r1, [pc, 0x130] |
0x0000b7e8 movs r0, 5 | r0 = 5;
0x0000b7ea add r1, pc | r1 = 0x17108;
0x0000b7ec bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b7f0 b 0xb170 | goto label_39;
| label_128:
0x0000b7f2 ldr r3, [pc, 0x128] |
0x0000b7f4 add r3, pc | r3 = 0x17116;
0x0000b7f6 b 0xb5b8 | goto label_46;
| label_133:
0x0000b7f8 ldr r3, [pc, 0x124] |
0x0000b7fa add r3, pc | r3 = 0x1711e;
0x0000b7fc b 0xb728 | goto label_48;
| label_97:
0x0000b7fe blx 0x2eac | socket (r0, r1, r2);
| label_129:
0x0000b802 ldr r1, [pc, 0x120] |
0x0000b804 movs r0, 2 | r0 = 2;
0x0000b806 add r1, pc | r1 = 0x17130;
0x0000b808 bl 0x10568 | r0 = fcn_00010568 (r0, r1, r2);
0x0000b80c blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000b810 ldr r0, [r0] | r0 = *(r0);
0x0000b812 b.w 0xadbe | goto label_20;
| label_135:
0x0000b816 ldr r1, [pc, 0x110] |
0x0000b818 movs r0, 2 | r0 = 2;
0x0000b81a add r1, pc | r1 = 0x17148;
0x0000b81c bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000b81e mcr2 p7, 5, pc, c4, c7, 7 | __asm ("mcr2 p7, 5, pc, c4, c7, 7");
0x0000b822 stc p8, c6, [ip], 0 | __asm ("stc p8, c6, [ip], 0");
0x0000b826 b.w 0xadbe | goto label_20;
| label_134:
0x0000b83c ldr r3, [pc, 0xec] |
0x0000b83e add r3, pc | r3 = 0x1716e;
0x0000b840 b 0xb728 | goto label_48;
| label_51:
0x0000b842 ldr r3, [pc, 0xec] | r3 = *(0xb932);
0x0000b844 str r6, [sp, 0x10] | var_10h = r6;
0x0000b846 ldr.w sb, [r4, r3] | sb = *((r4 + r3));
0x0000b84a b.w 0xab4a | goto label_49;
| /* Beware that this jump is a conditional jump.
| * r2dec transformed it as a return, due being the
| * last instruction. Please, check 'pdda' output
| * for more hints. */
0x0000b84c cbnz r6, 0xb86e | return void (*0xb86e)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/fwmgr @ 0xbaf4 */
| #include <stdint.h>
|
; (fcn) fcn.0000baf4 () | void fcn_0000baf4 () {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_64h;
| label_3:
0x0000b874 lsrs r4, r4, 9 | r4 >>= 9;
0x0000b876 movs r1, r0 | r1 = r0;
0x0000b878 asrs r6, r2, 0x15 | r6 = r2 >> 0x15;
0x0000b87a movs r1, r0 | r1 = r0;
0x0000b87c asrs r4, r0, 0x15 | r4 = r0 >> 0x15;
0x0000b87e movs r1, r0 | r1 = r0;
0x0000b880 asrs r2, r3, 0x15 | r2 = r3 >> 0x15;
0x0000b882 movs r1, r0 | r1 = r0;
0x0000b884 asrs r6, r6, 0x15 | r6 >>= 0x15;
0x0000b886 movs r1, r0 | r1 = r0;
0x0000b888 asrs r2, r0, 0x16 | r2 = r0 >> 0x16;
0x0000b88a movs r1, r0 | r1 = r0;
0x0000b88c asrs r2, r2, 0x16 | r2 >>= 0x16;
0x0000b88e movs r1, r0 | r1 = r0;
0x0000b890 asrs r2, r2, 0xf | r2 >>= 0xf;
0x0000b892 movs r1, r0 | r1 = r0;
0x0000b894 asrs r6, r5, 0xd | r6 = r5 >> 0xd;
0x0000b896 movs r1, r0 | r1 = r0;
0x0000b898 asrs r6, r3, 0x11 | r6 = r3 >> 0x11;
0x0000b89a movs r1, r0 | r1 = r0;
0x0000b89c lsrs r4, r3, 0x1f | r4 = r3 >> 0x1f;
0x0000b89e movs r1, r0 | r1 = r0;
0x0000b8a0 lsrs r0, r3, 0xe | r0 = r3 >> 0xe;
0x0000b8a2 movs r1, r0 | r1 = r0;
0x0000b8a4 asrs r6, r5, 5 | r6 = r5 >> 5;
0x0000b8a6 movs r1, r0 | r1 = r0;
0x0000b8a8 invalid |
0x0000baf4 ldr r1, [pc, 0xe0] |
0x0000baf6 ldr r2, [pc, 0xe4] | r2 = *(0xbbde);
0x0000baf8 push {r4, r5, lr} |
0x0000bafa sub sp, 0x6c |
0x0000bafc add r1, pc | r1 = 0x176d8;
0x0000bafe ldr r4, [pc, 0xe0] |
0x0000bb00 ldr r2, [r1, r2] |
0x0000bb02 ldr r3, [pc, 0xe0] | r3 = *(0xbbe6);
0x0000bb04 add r4, pc | r4 = 0x176ea;
0x0000bb06 ldr r2, [r2] | r2 = *(0x176d8);
0x0000bb08 str r2, [sp, 0x64] | var_64h = r2;
0x0000bb0a mov.w r2, 0 | r2 = 0;
0x0000bb0e ldr r3, [r4, r3] |
0x0000bb10 ldr r3, [r3] | r3 = *(0x176ea);
0x0000bb12 cmp r3, 1 |
| if (r3 > 1) {
0x0000bb14 bhi 0xbb78 | goto label_4;
| }
0x0000bb16 ldr r3, [pc, 0xd0] |
0x0000bb18 movs r2, 8 | r2 = 8;
0x0000bb1a ldr r1, [pc, 0xd0] |
0x0000bb1c mov.w r0, 0x102 | r0 = 0x102;
0x0000bb20 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0000bb22 add r1, pc | r1 = 0x17714;
0x0000bb24 ldr r3, [r3] |
0x0000bb26 ldr r3, [r3, 0x14] | r3 = *(0xbbfe);
0x0000bb28 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| if (r0 != 0) {
0x0000bb2a cbz r0, 0xbb42 |
0x0000bb2c blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000bb30 ldr r3, [r0] | r3 = *(r0);
0x0000bb32 mov r5, r0 | r5 = r0;
0x0000bb34 cmp r3, 0x10 |
| if (r3 != 0x10) {
0x0000bb36 bne 0xbb9e | goto label_5;
| }
0x0000bb38 ldr r1, [pc, 0xb4] |
0x0000bb3a movs r0, 4 | r0 = 4;
0x0000bb3c add r1, pc | r1 = 0x17730;
0x0000bb3e bl 0x10568 | fcn_00010568 (r0, r1, r2);
| }
0x0000bb42 ldr r0, [pc, 0xb0] |
0x0000bb44 add r5, sp, 8 | r5 += var_8h;
0x0000bb46 mov r1, r5 | r1 = r5;
0x0000bb48 add r0, pc | r0 = 0x17742;
0x0000bb4a blx 0x2d9c | r0 = fcn_00002d9c ();
| if (r0 == 0) {
0x0000bb4e cbz r0, 0xbbac | goto label_6;
| }
| label_1:
0x0000bb50 ldr r0, [pc, 0xa4] |
0x0000bb52 mov r1, r5 | r1 = r5;
0x0000bb54 add r0, pc | r0 = 0x17750;
0x0000bb56 blx 0x2d9c | r0 = fcn_00002d9c ();
0x0000bb5a cmp r0, 0 |
| if (r0 == 0) {
0x0000bb5c beq 0xbbc8 | goto label_7;
| }
| do {
| label_2:
0x0000bb5e movs r0, 0 | r0 = 0;
| label_0:
0x0000bb60 ldr r2, [pc, 0x98] |
0x0000bb62 ldr r3, [pc, 0x78] | r3 = *(0xbbde);
0x0000bb64 add r2, pc | r2 = 0x17764;
0x0000bb66 ldr r3, [r2, r3] | r3 = *(0x17764);
0x0000bb68 ldr r2, [r3] | r2 = *(0x17764);
0x0000bb6a ldr r3, [sp, 0x64] | r3 = var_64h;
0x0000bb6c eors r2, r3 | r2 ^= r3;
0x0000bb6e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000bb72 bne 0xbbd2 | goto label_8;
| }
0x0000bb74 add sp, 0x6c |
0x0000bb76 pop {r4, r5, pc} |
| label_4:
0x0000bb78 ldr r2, [pc, 0x84] |
0x0000bb7a movs r3, 8 | r3 = 8;
0x0000bb7c ldr r4, [pc, 0x84] |
0x0000bb7e ldr r1, [pc, 0x88] |
0x0000bb80 add r2, pc | r2 = 0x17784;
0x0000bb82 add r4, pc | r4 = 0x1778a;
0x0000bb84 mov r0, r2 | r0 = r2;
0x0000bb86 add r1, pc | r1 = 0x17794;
0x0000bb88 str r4, [sp] | *(sp) = r4;
0x0000bb8a blx 0x3188 | r0 = strcat_chk ()
0x0000bb8e cmp r0, 0 |
| if (r0 < 0) {
0x0000bb90 blt 0xbbb6 | goto label_9;
| }
0x0000bb92 ldr r1, [pc, 0x78] |
0x0000bb94 movs r0, 7 | r0 = 7;
0x0000bb96 add r1, pc | r1 = 0x177a8;
0x0000bb98 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000bb9c b 0xbb5e |
| } while (1);
| label_5:
0x0000bb9e ldr r1, [pc, 0x70] |
0x0000bba0 movs r0, 2 | r0 = 2;
0x0000bba2 add r1, pc | r1 = 0x177b8;
0x0000bba4 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x0000bba8 ldr r0, [r5] | r0 = *(r5);
0x0000bbaa b 0xbb60 | goto label_0;
| label_6:
0x0000bbac ldr r3, [pc, 0x64] | r3 = *(0xbc14);
0x0000bbae movs r2, 1 | r2 = 1;
0x0000bbb0 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0000bbb2 strb r2, [r3] | *(r3) = r2;
0x0000bbb4 b 0xbb50 | goto label_1;
| label_9:
0x0000bbb6 ldr r1, [pc, 0x60] |
0x0000bbb8 movs r0, 2 | r0 = 2;
0x0000bbba add r1, pc | r1 = 0x177d8;
0x0000bbbc bl 0x10568 | r0 = fcn_00010568 (r0, r1, r2);
0x0000bbc0 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000bbc4 ldr r0, [r0] | r0 = *(r0);
0x0000bbc6 b 0xbb60 | goto label_0;
| label_7:
0x0000bbc8 ldr r0, [pc, 0x50] |
0x0000bbca add r0, pc | r0 = 0x177ea;
0x0000bbcc blx 0x2de8 | fcn_00002de8 ();
0x0000bbd0 b 0xbb5e | goto label_2;
| label_8:
0x0000bbd2 blx 0x2eac | socket (r0, r1, r2);
0x0000bbd6 nop |
0x0000bbd8 strh r0, [r2, 8] | *((r2 + 8)) = r0;
0x0000bbda movs r1, r0 | r1 = r0;
0x0000bbdc lsls r4, r2, 0xc | r4 = r2 << 0xc;
0x0000bbde movs r0, r0 |
0x0000bbe0 strh r0, [r1, 8] | *((r1 + 8)) = r0;
0x0000bbe2 movs r1, r0 | r1 = r0;
0x0000bbe4 lsls r0, r5, 0xd | r0 = r5 << 0xd;
0x0000bbe6 movs r0, r0 |
0x0000bbe8 lsls r0, r1, 0xe | r0 = r1 << 0xe;
0x0000bbea movs r0, r0 |
0x0000bbec b 0xb874 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/fwmgr @ 0xbc20 */
| #include <stdint.h>
|
; (fcn) fcn.0000bc20 () | void fcn_0000bc20 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_40ch;
| int16_t var_410h;
| r0 = arg1;
0x0000bc20 ldr r2, [pc, 0x164] |
0x0000bc22 ldr r3, [pc, 0x168] | r3 = *(0xbd8e);
0x0000bc24 push {r4, r5, r6, lr} |
0x0000bc26 mov r5, r0 | r5 = r0;
0x0000bc28 add r2, pc | r2 = 0x179b4;
0x0000bc2a ldr r0, [pc, 0x164] |
0x0000bc2c sub.w sp, sp, 0x410 |
0x0000bc30 ldr r3, [r2, r3] |
0x0000bc32 ldr r4, [pc, 0x160] |
0x0000bc34 add r0, pc | r0 = 0x179ca;
0x0000bc36 ldr r3, [r3] | r3 = *(0x179b4);
0x0000bc38 str.w r3, [sp, 0x40c] | __asm ("str.w r3, [var_40ch]");
0x0000bc3c mov.w r3, 0 | r3 = 0;
0x0000bc40 blx 0x3030 | r0 = fcn_00003030 ();
0x0000bc44 cmp r0, 0 |
0x0000bc46 add r4, pc | r4 = 0x179e0;
| if (r0 < 0) {
0x0000bc48 blt 0xbce0 | goto label_4;
| }
0x0000bc4a ldr r0, [pc, 0x14c] |
0x0000bc4c add r0, pc | r0 = 0x179ea;
0x0000bc4e blx 0x3030 | r0 = fcn_00003030 ();
0x0000bc52 cmp r0, 0 |
| if (r0 < 0) {
0x0000bc54 blt 0xbd4c | goto label_5;
| }
0x0000bc56 ldr r3, [pc, 0x144] | r3 = *(0xbd9e);
0x0000bc58 ldr r6, [r4, r3] | r6 = *((r4 + r3));
0x0000bc5a ldrb r3, [r6] | r3 = *(r6);
0x0000bc5c cmp r3, 0 |
| if (r3 == 0) {
0x0000bc5e beq 0xbcd6 | goto label_6;
| }
0x0000bc60 cmp r5, 0 |
| if (r5 != 0) {
0x0000bc62 bne 0xbd1c | goto label_7;
| }
0x0000bc64 ldr r3, [pc, 0x138] |
0x0000bc66 mov r2, r5 | r2 = r5;
0x0000bc68 ldr r1, [pc, 0x138] |
0x0000bc6a movs r0, 0x24 | r0 = 0x24;
0x0000bc6c ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0000bc6e add r1, pc | r1 = 0x17a16;
0x0000bc70 ldr r3, [r3] |
0x0000bc72 ldr r3, [r3, 0x14] | r3 = *(0xbdb4);
0x0000bc74 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000bc76 cmp r0, 0 |
| if (r0 != 0) {
0x0000bc78 bne 0xbd5e | goto label_8;
| }
| label_2:
0x0000bc7a ldr r4, [pc, 0x12c] |
0x0000bc7c ldr r1, [pc, 0x12c] |
0x0000bc7e add r4, pc | r4 = 0x17a2c;
0x0000bc80 add r1, pc | r1 = 0x17a30;
| do {
0x0000bc82 ldr r0, [pc, 0x12c] |
0x0000bc84 movw r2, 0x1ed | r2 = 0x1ed;
0x0000bc88 add r0, pc | r0 = 0x17a3e;
0x0000bc8a bl 0x9ff8 | r0 = fcn_00009ff8 (r0, r1, r2, r3);
| if (r0 == 0) {
0x0000bc8e cbnz r0, 0xbcb4 |
0x0000bc90 ldr r3, [pc, 0x120] |
0x0000bc92 add r5, sp, 0xc | r5 += var_ch;
0x0000bc94 mov.w r2, 0x400 | r2 = 0x400;
0x0000bc98 movs r1, 1 | r1 = 1;
0x0000bc9a mov r0, r5 | r0 = r5;
0x0000bc9c str r4, [sp] | *(sp) = r4;
0x0000bc9e add r3, pc | r3 = 0x17a56;
0x0000bca0 blx 0x3200 | ERR_error_string ();
0x0000bca4 ldr r0, [pc, 0x110] |
0x0000bca6 movw r1, 0x1ed | r1 = 0x1ed;
0x0000bcaa add r0, pc | r0 = 0x17a66;
0x0000bcac bl 0x11388 | r0 = fcn_00011388 (r0, r1);
0x0000bcb0 mov r2, r0 | r2 = r0;
| if (r0 == 0) {
0x0000bcb2 cbz r0, 0xbcf2 | goto label_9;
| }
| }
| label_1:
0x0000bcb4 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000bcb8 ldr r0, [r0] | r0 = *(r0);
| label_0:
0x0000bcba ldr r2, [pc, 0x100] |
0x0000bcbc ldr r3, [pc, 0xcc] | r3 = *(0xbd8c);
0x0000bcbe add r2, pc | r2 = 0x17a80;
0x0000bcc0 ldr r3, [r2, r3] | r3 = *(0x17a80);
0x0000bcc2 ldr r2, [r3] | r2 = *(0x17a80);
0x0000bcc4 ldr.w r3, [sp, 0x40c] | r3 = var_40ch;
0x0000bcc8 eors r2, r3 | r2 ^= r3;
0x0000bcca mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000bcce bne 0xbd82 | goto label_10;
| }
0x0000bcd0 add.w sp, sp, 0x410 |
0x0000bcd4 pop {r4, r5, r6, pc} |
| label_6:
0x0000bcd6 ldr r4, [pc, 0xe8] |
0x0000bcd8 ldr r1, [pc, 0xe8] |
0x0000bcda add r4, pc | r4 = 0x17aa0;
0x0000bcdc add r1, pc | r1 = 0x17aa4;
0x0000bcde b 0xbc82 |
| } while (1);
| label_4:
0x0000bce0 ldr r1, [pc, 0xe4] |
0x0000bce2 movs r0, 2 | r0 = 2;
0x0000bce4 add r1, pc | r1 = 0x17ab0;
0x0000bce6 bl 0x10568 | r0 = fcn_00010568 (r0, r1, r2);
0x0000bcea blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000bcee ldr r0, [r0] | r0 = *(r0);
0x0000bcf0 b 0xbcba | goto label_0;
| label_9:
0x0000bcf2 ldr r0, [pc, 0xd8] |
0x0000bcf4 mov r1, r5 | r1 = r5;
0x0000bcf6 add r0, pc | r0 = 0x17ac8;
0x0000bcf8 bl 0x110d4 | r0 = fcn_000110d4 (r0, r1, r2);
0x0000bcfc cmp r0, 0 |
| if (r0 != 0) {
0x0000bcfe bne 0xbcb4 | goto label_1;
| }
0x0000bd00 ldrb r3, [r6] | r3 = *(r6);
0x0000bd02 cmp r3, 0 |
| if (r3 != 0) {
0x0000bd04 bne 0xbd70 | goto label_11;
| }
0x0000bd06 ldr r1, [pc, 0xc8] |
0x0000bd08 ldr r0, [pc, 0xc8] |
0x0000bd0a add r1, pc | r1 = 0x17ae0;
0x0000bd0c add r0, pc | r0 = 0x17ae4;
0x0000bd0e bl 0x1155c | fcn_0001155c (r0);
0x0000bd10 invalid |
| label_3:
0x0000bd12 bl 0xbaf4 | r0 = fcn_0000baf4 ();
0x0000bd16 cmp r0, 0 |
| if (r0 == 0) {
0x0000bd18 beq 0xbcba | goto label_0;
| }
0x0000bd1a b 0xbcb4 | goto label_1;
| label_7:
0x0000bd1c ldr r2, [pc, 0xb8] |
0x0000bd1e movs r3, 0 | r3 = 0;
0x0000bd20 ldr r4, [pc, 0xb8] |
0x0000bd22 ldr r1, [pc, 0xbc] |
0x0000bd24 add r2, pc | r2 = 0x17b00;
0x0000bd26 add r4, pc | r4 = 0x17b06;
0x0000bd28 mov r0, r2 | r0 = r2;
0x0000bd2a add r1, pc | r1 = 0x17b10;
0x0000bd2c str r1, [sp] | *(sp) = r1;
0x0000bd2e mov r1, r4 | r1 = r4;
0x0000bd30 blx 0x3188 | r0 = strcat_chk ()
0x0000bd34 cmp r0, 0 |
| if (r0 >= 0) {
0x0000bd36 bge 0xbc7a | goto label_2;
| }
0x0000bd38 ldr r1, [pc, 0xa8] |
0x0000bd3a mov r2, r4 | r2 = r4;
0x0000bd3c movs r0, 2 | r0 = 2;
0x0000bd3e add r1, pc | r1 = 0x17b26;
0x0000bd40 bl 0x10568 | r0 = fcn_00010568 (r0, r1, r2);
0x0000bd44 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000bd46 ands.w r8, sl, r0, lsl 24 | r8 = sl & (r0 << 24);
0x0000bd4a b 0xbcba | goto label_0;
| label_5:
0x0000bd4c ldr r1, [pc, 0x98] |
0x0000bd4e movs r0, 2 | r0 = 2;
0x0000bd50 add r1, pc | r1 = 0x17b3c;
0x0000bd52 bl 0x10568 | r0 = fcn_00010568 (r0, r1, r2);
0x0000bd56 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000bd5a ldr r0, [r0] | r0 = *(r0);
0x0000bd5c b 0xbcba | goto label_0;
| label_8:
0x0000bd5e ldr r1, [pc, 0x8c] |
0x0000bd60 movs r0, 2 | r0 = 2;
0x0000bd62 add r1, pc | r1 = 0x17b54;
0x0000bd64 bl 0x10568 | r0 = fcn_00010568 (r0, r1, r2);
0x0000bd68 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x0000bd6c ldr r0, [r0] | r0 = *(r0);
0x0000bd6e b 0xbcba | goto label_0;
| label_11:
0x0000bd70 ldr r1, [pc, 0x7c] |
0x0000bd72 ldr r0, [pc, 0x80] |
0x0000bd74 add r1, pc | r1 = 0x17b68;
0x0000bd76 add r0, pc | r0 = 0x17b70;
0x0000bd78 bl 0xa224 | r0 = fcn_0000a224 (r0, r1);
0x0000bd7c cmp r0, 0 |
| if (r0 == 0) {
0x0000bd7e beq 0xbd12 | goto label_3;
| }
0x0000bd80 b 0xbcb4 | goto label_1;
| label_10:
0x0000bd82 blx 0x2eac | socket (r0, r1, r2);
0x0000bd86 nop |
0x0000bd88 ldrb r4, [r4, 0x1f] | r4 = *((r4 + 0x1f));
0x0000bd8a movs r1, r0 | r1 = r0;
0x0000bd8c lsls r4, r2, 0xc | r4 = r2 << 0xc;
0x0000bd8e movs r0, r0 |
0x0000bd90 lsls r4, r3, 0xb | r4 = r3 << 0xb;
0x0000bd92 movs r1, r0 | r1 = r0;
0x0000bd94 ldrb r6, [r0, 0x1f] | r6 = *((r0 + 0x1f));
0x0000bd96 movs r1, r0 | r1 = r0;
0x0000bd98 b 0xb7cc | return void (*0xb7cc)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/fwmgr @ 0x12acc */
| #include <stdint.h>
|
; (fcn) fcn.00012acc () | void fcn_00012acc (int16_t arg_1100h) {
| int16_t var_0h_2;
| int16_t var_8h_2;
| int16_t var_64h;
| int16_t var_1160h;
| int16_t var_0h_5;
| int16_t var_1180h;
| int32_t var_0h_4;
| int16_t var_4h;
| int16_t var_1100h;
| int32_t var_0h_3;
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_8ch;
0x00012acc blx 0x2db4 | r0 = fcn_00002db4 ();
0x00012ad0 cmp r0, 0 |
| if (r0 != 0) {
0x00012ad2 bne 0x12b46 | goto label_13;
| }
0x00012ad4 mov r0, r5 | r0 = r5;
0x00012ad6 bl 0x173e4 | fcn_000173e4 (r0, r1, r2, r3, r4, r5);
0x00012ada movs r0, 0 | r0 = 0;
| do {
0x00012adc ldr r2, [pc, 0xac] |
0x00012ade add.w r1, sp, 0x1100 | r1 += arg_1100h;
0x00012ae2 ldr r3, [pc, 0x8c] | r3 = *(0x12b72);
0x00012ae4 adds r1, 0x14 | r1 += 0x14;
0x00012ae6 add r2, pc | r2 = 0x25676;
0x00012ae8 ldr r3, [r2, r3] | r3 = imp.__stack_chk_guard;
0x00012aea ldr r2, [r3] | r2 = imp.__stack_chk_guard;
0x00012aec ldr r3, [r1] | r3 = *(r1);
0x00012aee eors r2, r3 | r2 ^= r3;
0x00012af0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00012af4 bne 0x12b66 | goto label_14;
| }
0x00012af6 add.w sp, sp, 0x1100 |
0x00012afa add sp, 0x1c |
0x00012afc pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_13:
0x00012b46 ldr r1, [pc, 0x54] |
0x00012b48 movs r0, 2 | r0 = 2;
0x00012b4a add r1, pc | r1 = 0x256ec;
0x00012b4c bl 0x10568 | r0 = fcn_00010568 (r0, r1, r2);
0x00012b50 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x00012b54 ldr r0, [r0] | r0 = *(r0);
0x00012b56 b 0x12adc |
| } while (1);
| label_14:
0x00012b66 blx 0x2eac | socket (r0, r1, r2);
0x00012b6a nop |
0x00012b6c asrs r6, r5, 7 | r6 = r5 >> 7;
0x00012b6e movs r1, r0 | r1 = r0;
0x00012b70 lsls r4, r2, 0xc | r4 = r2 << 0xc;
0x00012b72 movs r0, r0 |
0x00012b74 ldrh r6, [r7, 0x14] | r6 = *((r7 + 0x14));
0x00012b76 movs r1, r0 | r1 = r0;
0x00012b78 ldrh r4, [r1, 0x10] | r4 = *((r1 + 0x10));
0x00012b7a movs r1, r0 | r1 = r0;
0x00012b7c bpl 0x12b7c |
0x00012b7e movs r0, r0 |
0x00012b80 ldrh r2, [r3, 0x12] | r2 = *((r3 + 0x12));
0x00012b82 movs r1, r0 | r1 = r0;
0x00012b84 ldm r7!, {r2, r6} | r2 = *(r7!);
| r6 = *((r7! + 4));
0x00012b86 movs r0, r0 |
0x00012b88 asrs r4, r4, 0x15 | r4 >>= 0x15;
0x00012b8a movs r1, r0 | r1 = r0;
0x00012b8c asrs r6, r4, 4 | r6 = r4 >> 4;
0x00012b8e movs r1, r0 | r1 = r0;
0x00012b90 ldm r6, {r4, r6, r7} | r4 = *(r6);
| r6 = *((r6 + 4));
| r7 = *((r6 + 8));
0x00012b92 movs r0, r0 |
0x00012b94 ldrh r6, [r7, 8] | r6 = *((r7 + 8));
0x00012b96 movs r1, r0 | r1 = r0;
0x00012b98 asrs r2, r6, 0x13 | r2 = r6 >> 0x13;
0x00012b9a movs r1, r0 | r1 = r0;
0x00012b9c ldm r6, {r1, r2, r3, r4, r6} | r1 = *(r6);
| r2 = *((r6 + 4));
| r3 = *((r6 + 8));
| r4 = *((r6 + 12));
| r6 = *((r6 + 16));
0x00012b9e movs r0, r0 |
0x00012ba0 ldr r1, [pc, 0x88] |
0x00012ba2 movw r3, 0x10b | r3 = 0x10b;
0x00012ba6 ldr r2, [pc, 0x88] | r2 = *(0x12c32);
0x00012ba8 cmp r0, r3 |
0x00012baa push {r4, lr} |
0x00012bac sub sp, 0x90 |
0x00012bae add r1, pc | r1 = 0x257de;
0x00012bb0 ldr r2, [r1, r2] |
0x00012bb2 ldr r2, [r2] | r2 = imp.__stack_chk_guard;
| while (r1 >= r0);
0x00012bb4 str r2, [sp, 0x8c] | var_8ch = r2;
0x00012bb6 mov.w r2, 0 | r2 = 0;
| if (r0 == r3) {
0x00012bba beq 0x12c14 | goto label_15;
| }
0x00012bbc ldr.w ip, [pc, 0x74] |
0x00012bc0 movs r2, 0 | r2 = 0;
0x00012bc2 mov r3, r2 | r3 = r2;
0x00012bc4 add ip, pc | ip = 0x257fc;
0x00012bc6 b 0x12bd0 |
| while (r0 != r1) {
0x00012bc8 adds r3, 1 | r3++;
0x00012bca adds r2, 0x41 | r2 += 0x41;
0x00012bcc cmp r3, 0x80 |
| if (r3 == 0x80) {
0x00012bce beq 0x12c1c | goto label_16;
| }
0x00012bd0 ldr.w r1, [ip, r2, lsl 2] | offset_0 = r2 << 2;
| r1 = *((ip + offset_0));
0x00012bd4 cmp r0, r1 |
0x00012bd6 bne 0x12bc8 |
| }
0x00012bd8 mov r0, r3 | r0 = r3;
| label_0:
0x00012bda ldr r3, [pc, 0x5c] |
0x00012bdc add r4, sp, 0xc | r4 += var_ch;
0x00012bde movs r1, 1 | r1 = 1;
0x00012be0 str r0, [sp] | *(sp) = r0;
0x00012be2 movs r2, 0x80 | r2 = 0x80;
0x00012be4 mov r0, r4 | r0 = r4;
0x00012be6 add r3, pc | r3 = 0x25824;
0x00012be8 blx 0x3200 | ERR_error_string ();
0x00012bec movs r3, 0 | r3 = 0;
0x00012bee mov r1, r4 | r1 = r4;
0x00012bf0 add r0, sp, 8 | r0 += var_8h;
0x00012bf2 str r3, [sp, 8] | var_8h = r3;
0x00012bf4 bl 0x10fa4 | r0 = fcn_00010fa4 (r0, r1);
| if (r0 != 0) {
0x00012bf8 cbnz r0, 0x12c1c | goto label_16;
| }
0x00012bfa ldr r0, [sp, 8] | r0 = var_8h;
| do {
0x00012bfc ldr r2, [pc, 0x3c] |
0x00012bfe ldr r3, [pc, 0x30] | r3 = *(0x12c32);
0x00012c00 add r2, pc | r2 = 0x25840;
0x00012c02 ldr r3, [r2, r3] | r3 = imp.__stack_chk_guard;
0x00012c04 ldr r2, [r3] | r2 = imp.__stack_chk_guard;
0x00012c06 ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x00012c08 eors r2, r3 | r2 ^= r3;
0x00012c0a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00012c0e bne 0x12c26 | goto label_17;
| }
0x00012c10 add sp, 0x90 |
0x00012c12 pop {r4, pc} |
| label_15:
0x00012c14 ldr r3, [pc, 0x28] |
0x00012c16 add r3, pc | r3 = 0x2585a;
0x00012c18 ldrb r3, [r3, 4] | r3 = *((r3 + 4));
| if (r3 != 0) {
0x00012c1a cbnz r3, 0x12c22 | goto label_18;
| }
| label_16:
0x00012c1c mov.w r0, -1 | r0 = -1;
0x00012c20 b 0x12bfc |
| } while (1);
| label_18:
0x00012c22 movs r0, 0 | r0 = 0;
0x00012c24 b 0x12bda | goto label_0;
| label_17:
0x00012c26 blx 0x2eac | socket (r0, r1, r2);
0x00012c2a nop |
0x00012c2c asrs r6, r3, 1 | r6 = r3 >> 1;
0x00012c2e movs r1, r0 | r1 = r0;
0x00012c30 lsls r4, r2, 0xc | r4 = r2 << 0xc;
0x00012c32 movs r0, r0 |
0x00012c34 ldrh r0, [r5, 8] | r0 = *((r5 + 8));
0x00012c36 movs r1, r0 | r1 = r0;
0x00012c38 ldm r6!, {r1, r3, r4, r5} | r1 = *(r6!);
| r3 = *((r6! + 4));
| r4 = *((r6! + 8));
| r5 = *((r6! + 12));
0x00012c3a movs r0, r0 |
0x00012c3c asrs r4, r1, 0x20 | r4 = r1 >> 0x20;
0x00012c3e movs r1, r0 | r1 = r0;
0x00012c40 ldrh r6, [r1, 2] | r6 = *((r1 + 2));
0x00012c42 movs r1, r0 | r1 = r0;
0x00012c44 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00012c48 sub.w sp, sp, 0x1100 |
0x00012c4c ldr r4, [pc, 0x130] |
0x00012c4e sub sp, 0x18 |
0x00012c50 add.w r5, sp, 0x1100 | r5 += var_1100h;
0x00012c54 movw r2, 0x1110 | r2 = 0x1110;
0x00012c56 asrs r0, r2, 8 | r0 = r2 >> 8;
0x00012c58 ldr r0, [pc, 0x128] | r0 = *(0x12d84);
0x00012c5a adds r5, 0x14 | r5 += 0x14;
0x00012c5c add r4, pc | r4 = 0x259e0;
0x00012c5e ldr r1, [pc, 0x128] |
0x00012c60 ldr r3, [pc, 0x128] |
0x00012c62 add r7, sp, 4 | r7 += var_4h;
0x00012c64 ldr r0, [r4, r0] |
0x00012c66 add r1, pc | r1 = 0x259f4;
0x00012c68 ldr r4, [pc, 0x124] |
0x00012c6a ldr.w r8, [pc, 0x128] |
0x00012c6e add r3, pc | r3 = 0x259fe;
0x00012c70 ldr r0, [r0] | r0 = imp.__stack_chk_guard;
0x00012c72 str r0, [r5] | *(r5) = r0;
0x00012c74 mov.w r0, 0 | r0 = 0;
0x00012c78 ldm r1, {r0, r1} | r0 = *(r1);
| r1 = *((r1 + 4));
0x00012c7a ldr.w sl, [pc, 0x11c] |
0x00012c7e add r4, pc | r4 = 0x25a12;
0x00012c80 ldr.w sb, [pc, 0x118] |
0x00012c84 add.w r6, r4, 0x8200 | r6 = r4 + 0x8200;
0x00012c88 str r0, [r3, 8] | *((r3 + 8)) = r0;
0x00012c8a add r8, pc | r8 = 0x25a24;
0x00012c8c strb r1, [r3, 0xc] | *((r3 + 0xc)) = r1;
0x00012c8e add r0, sp, 4 | r0 += var_4h;
0x00012c90 movs r1, 0 | r1 = 0;
0x00012c92 add sl, pc | sl = 0x25a30;
0x00012c94 movs r5, 0 | r5 = 0;
0x00012c96 add sb, pc | sb = 0x25a36;
0x00012c98 adds r4, 0x84 | r4 += 0x84;
0x00012c9a adds r6, 0x84 | r6 += 0x84;
0x00012c9c add.w r8, r8, 8 | r8 += 8;
0x00012ca0 blx 0x2c8c | fcn_00002c8c ();
0x00012ca4 b 0x12cba |
| while (r3 != 0x20) {
0x00012ca6 cmp r3, 0x40 |
| if (r3 == 0x40) {
0x00012ca8 bne 0x12cb0 |
0x00012caa ldrb r3, [r4] | r3 = *(r4);
0x00012cac cmp r3, 0 |
| if (r3 != 0) {
0x00012cae bne 0x12d56 | goto label_19;
| }
| }
| label_1:
0x00012cb0 add.w r4, r4, 0x104 | r4 += 0x104;
0x00012cb4 adds r5, 1 | r5++;
0x00012cb6 cmp r4, r6 |
| if (r4 == r6) {
0x00012cb8 beq 0x12cea | goto label_20;
| }
| label_2:
0x00012cba ldr r3, [r4, -0x84] | r3 = *((r4 - 0x84));
0x00012cbe and r3, r3, 0xe0 | r3 &= 0xe0;
0x00012cc2 cmp r3, 0x20 |
0x00012cc4 bne 0x12ca6 |
| }
0x00012cc6 ldr r1, [pc, 0xd8] |
0x00012cc8 mov r0, r4 | r0 = r4;
0x00012cca add r1, pc | r1 = 0x25a70;
0x00012ccc blx 0x3130 | r0 = fcn_00003130 ();
0x00012cd0 cmp r0, 0 |
| if (r0 == 0) {
0x00012cd2 beq 0x12cb0 | goto label_1;
| }
0x00012cd4 mov r1, r5 | r1 = r5;
0x00012cd6 mov r3, r8 | r3 = r8;
0x00012cd8 movs r2, 0 | r2 = 0;
0x00012cda mov r0, r7 | r0 = r7;
0x00012cdc add.w r4, r4, 0x104 | r4 += 0x104;
0x00012ce0 adds r5, 1 | r5++;
0x00012ce2 bl 0x12594 | fcn_00012594 (r0, r1, r2, r3);
0x00012ce6 cmp r4, r6 |
| if (r4 != r6) {
0x00012ce8 bne 0x12cba | goto label_2;
| }
| label_20:
0x00012cea ldr r3, [pc, 0xb8] |
0x00012cec movw r1, 0x6f03 |
0x00012cee strb r3, [r0, 4] | *((r0 + 4)) = r3;
0x00012cf0 mov r2, r7 | r2 = r7;
0x00012cf2 movt r1, 0x5110 | r1 = 0x51106f03;
0x00012cf4 asrs r0, r2, 4 | r0 = r2 >> 4;
0x00012cf6 add r3, pc | r3 = 0x25aa0;
0x00012cf8 ldr r0, [r3] | r0 = imp.__stack_chk_guard;
0x00012cfa blx 0x2db4 | r0 = fcn_00002db4 ();
0x00012cfe mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x00012d00 cbnz r0, 0x12d64 | goto label_21;
| }
0x00012d02 ldr r2, [pc, 0xa4] | r2 = *(0x12daa);
0x00012d04 movs r1, 1 | r1 = 1;
0x00012d06 ldr r4, [pc, 0xa4] |
0x00012d08 mov r3, r0 | r3 = r0;
0x00012d0a ldr.w r2, [sl, r2] | r2 = *((sl + r2));
0x00012d0e add r4, pc | r4 = 0x25ac0;
0x00012d10 strb r1, [r2] | *(r2) = r1;
0x00012d12 mov r2, r0 | r2 = r0;
0x00012d14 b 0x12d1e |
| while (r1 != 0x41) {
0x00012d16 adds r2, 1 | r2++;
0x00012d18 adds r3, 0x41 | r3 += 0x41;
0x00012d1a cmp r2, 0x80 |
| if (r2 == 0x80) {
0x00012d1c beq 0x12d76 | goto label_22;
| }
0x00012d1e ldr.w r1, [r4, r3, lsl 2] | offset_1 = r3 << 2;
| r1 = *((r4 + offset_1));
0x00012d22 cmp r1, 0x41 |
0x00012d24 bne 0x12d16 |
| }
| label_3:
0x00012d26 ldr r1, [pc, 0x88] |
0x00012d28 movs r0, 5 | r0 = 5;
0x00012d2a add r1, pc | r1 = 0x25ae0;
0x00012d2c bl 0x10568 | fcn_00010568 (r0, r1, r2);
| do {
0x00012d30 ldr r2, [pc, 0x80] |
0x00012d32 add.w r1, sp, 0x1100 | r1 += var_1100h;
0x00012d36 ldr r3, [pc, 0x4c] | r3 = *(0x12d86);
0x00012d38 adds r1, 0x14 | r1 += 0x14;
0x00012d3a add r2, pc | r2 = 0x25af2;
0x00012d3c ldr r3, [r2, r3] | r3 = imp.__stack_chk_guard;
0x00012d3e ldr r2, [r3] | r2 = imp.__stack_chk_guard;
0x00012d40 ldr r3, [r1] | r3 = *(r1);
0x00012d42 eors r2, r3 | r2 ^= r3;
0x00012d44 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00012d48 bne 0x12d7c | goto label_23;
| }
0x00012d4a mov r0, r5 | r0 = r5;
0x00012d4c add.w sp, sp, 0x1100 |
0x00012d4e ldrb r0, [r1, r6] | r0 = *((r1 + r6));
0x00012d50 add sp, 0x18 |
0x00012d52 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_19:
0x00012d56 mov r3, sb | r3 = sb;
0x00012d58 movs r2, 0 | r2 = 0;
0x00012d5a mov r1, r5 | r1 = r5;
0x00012d5c mov r0, r7 | r0 = r7;
0x00012d5e bl 0x12594 | fcn_00012594 (r0, r1, r2, r3);
0x00012d62 b 0x12cb0 | goto label_1;
| label_21:
0x00012d64 ldr r1, [pc, 0x50] |
0x00012d66 movs r0, 2 | r0 = 2;
0x00012d68 add r1, pc | r1 = 0x25b24;
0x00012d6a bl 0x10568 | r0 = fcn_00010568 (r0, r1, r2);
0x00012d6e blx 0x317c | r0 = strncpy (r0, r1, r2);
0x00012d72 ldr r5, [r0] | r5 = *(r0);
0x00012d74 b 0x12d30 |
| } while (1);
| label_22:
0x00012d76 mov.w r2, -1 | r2 = -1;
0x00012d7a b 0x12d26 | goto label_3;
| label_23:
0x00012d7c blx 0x2eac | socket (r0, r1, r2);
0x00012d80 lsrs r0, r6, 0x1e | r0 = r6 >> 0x1e;
0x00012d82 movs r1, r0 | r1 = r0;
0x00012d84 lsls r4, r2, 0xc | r4 = r2 << 0xc;
0x00012d86 movs r0, r0 |
0x00012d88 ldm r2!, {r1, r3, r7} | r1 = *(r2!);
| r3 = *((r2! + 4));
| r7 = *((r2! + 8));
0x00012d8a movs r0, r0 |
0x00012d8c strh r6, [r6, 0x3e] | *((r6 + 0x3e)) = r6;
0x00012d8e movs r1, r0 | r1 = r0;
0x00012d90 ldrh r6, [r5, 2] | r6 = *((r5 + 2));
0x00012d92 movs r1, r0 | r1 = r0;
0x00012d94 strh r2, [r3, 0x3e] | *((r3 + 0x3e)) = r2;
0x00012d96 movs r1, r0 | r1 = r0;
0x00012d98 lsrs r2, r7, 0x1d | r2 = r7 >> 0x1d;
0x00012d9a movs r1, r0 | r1 = r0;
0x00012d9c strb r2, [r2, 0x19] | *((r2 + 0x19)) = r2;
0x00012d9e movs r0, r0 |
0x00012da0 ldm r2, {r1, r2, r5} | r1 = *(r2);
| r2 = *((r2 + 4));
| r5 = *((r2 + 8));
0x00012da2 movs r0, r0 |
0x00012da4 asrs r6, r6, 0xc | r6 >>= 0xc;
0x00012da6 movs r1, r0 | r1 = r0;
0x00012da8 lsls r4, r1, 0xe | r4 = r1 << 0xe;
0x00012daa movs r0, r0 |
0x00012dac strh r6, [r3, 0x3e] | *((r3 + 0x3e)) = r6;
0x00012dae movs r1, r0 | r1 = r0;
0x00012db0 ldm r5!, {r1, r4, r6} | r1 = *(r5!);
| r4 = *((r5! + 4));
| r6 = *((r5! + 8));
0x00012db2 movs r0, r0 |
0x00012db4 lsrs r2, r2, 0x1b | r2 >>= 0x1b;
0x00012db6 movs r1, r0 | r1 = r0;
0x00012db8 ldm r4!, {r5, r6, r7} | r5 = *(r4!);
| r6 = *((r4! + 4));
| r7 = *((r4! + 8));
0x00012dba movs r0, r0 |
0x00012dbc push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00012dbe mvns r0, r6 | r0 = ~r6;
0x00012dc0 sub.w sp, sp, 0x1180 |
0x00012dc4 ldr r4, [pc, 0x1f8] |
0x00012dc6 sub sp, 0x1c |
0x00012dc8 add.w r6, sp, 0x1180 | r6 += var_1180h;
0x00012dcc movs r3, 0 | r3 = 0;
0x00012dce ldr r2, [pc, 0x1f4] | r2 = *(0x12fc6);
0x00012dd0 adds r6, 0x14 | r6 += 0x14;
0x00012dd2 add r4, pc | r4 = 0x25d96;
0x00012dd4 ldr r0, [pc, 0x1f0] |
0x00012dd6 ldr r5, [pc, 0x1f4] |
0x00012dd8 mov r1, r3 | r1 = r3;
0x00012dda ldr r2, [r4, r2] |
0x00012ddc add r0, pc | r0 = 0x25da8;
0x00012dde add r5, pc | r5 = 0x25db0;
0x00012de0 ldr r2, [r2] | r2 = imp.__stack_chk_guard;
0x00012de2 str r2, [r6] | *(r6) = r2;
0x00012de4 mov.w r2, 0 | r2 = 0;
0x00012de8 b 0x12df2 |
| while (r2 != 0x2d) {
0x00012dea adds r1, 1 | r1++;
0x00012dec adds r3, 0x41 | r3 += 0x41;
0x00012dee cmp r1, 0x80 |
| if (r1 == 0x80) {
0x00012df0 beq 0x12e4a | goto label_5;
| }
0x00012df2 ldr.w r2, [r0, r3, lsl 2] | offset_2 = r3 << 2;
| r2 = *((r0 + offset_2));
0x00012df6 cmp r2, 0x2d |
0x00012df8 bne 0x12dea |
| }
0x00012dfa ldr r3, [pc, 0x1d4] |
0x00012dfc add.w r4, sp, 0x1160 | r4 += var_1160h;
0x00012e00 adds r4, 0x14 | r4 += 0x14;
0x00012e02 movs r2, 0x20 | r2 = 0x20;
0x00012e04 str r1, [sp] | *(sp) = r1;
0x00012e06 mov r0, r4 | r0 = r4;
0x00012e08 add r3, pc | r3 = 0x25dde;
0x00012e0a movs r1, 1 | r1 = 1;
0x00012e0c ldr r6, [pc, 0x1c4] |
0x00012e0e blx 0x3200 | ERR_error_string ();
0x00012e12 ldr r2, [pc, 0x1c4] |
0x00012e14 movs r3, 0 | r3 = 0;
0x00012e16 ldr r1, [pc, 0x1c4] |
0x00012e18 add r6, pc | r6 = 0x25df0;
0x00012e1a mov r0, r4 | r0 = r4;
0x00012e1c str r6, [sp] | *(sp) = r6;
0x00012e1e add r2, pc | r2 = 0x25dfc;
0x00012e20 add r1, pc | r1 = 0x25e02;
0x00012e22 blx 0x3188 | strcat_chk ()
0x00012e24 invalid |
| if (r3 < 0) {
0x00012e28 blt.w 0x12f7a | goto label_24;
| }
0x00012e2a strh r7, [r4, 4] | *((r4 + 4)) = r7;
0x00012e2c ldr r0, [pc, 0x1b0] |
0x00012e2e add r1, sp, 8 | r1 += var_8h_2;
0x00012e30 add r0, pc | r0 = 0x25e14;
0x00012e32 blx 0x2d9c | r0 = fcn_00002d9c ();
0x00012e36 cmp r0, 0 |
| if (r0 == 0) {
0x00012e38 beq.w 0x12f98 | goto label_25;
| }
| label_7:
0x00012e3c ldr r0, [pc, 0x1a4] |
0x00012e3e add r0, pc | r0 = 0x25e26;
0x00012e40 blx 0x3030 | fcn_00003030 ();
0x00012e42 ldrd r2, r8, [r6], 0 | __asm ("ldrd r2, r8, [r6], 0");
| if (r0 < 0) {
0x00012e46 blt.w 0x12fa2 | goto label_26;
| }
| label_5:
0x00012e4a bl 0x128e0 | r0 = fcn_000128e0 ();
0x00012e4e mov r6, r0 | r6 = r0;
0x00012e50 cmp r0, 0 |
| if (r0 != 0) {
0x00012e52 bne.w 0x12f72 | goto label_27;
| }
0x00012e54 strh r6, [r1, 4] | *((r1 + 4)) = r6;
0x00012e56 ldr.w r8, [pc, 0x190] |
0x00012e5a mov r7, r0 | r7 = r0;
0x00012e5c mov r4, r0 | r4 = r0;
0x00012e5e add r8, pc | r8 = 0x25e4c;
0x00012e60 b 0x12e82 |
| while (r3 != 0xe0) {
0x00012e62 ldr r2, [pc, 0x188] | r2 = *(0x12fee);
0x00012e64 ldr r2, [r5, r2] | r2 = *((r5 + r2));
0x00012e66 ldrb r2, [r2] | r2 = *(r2);
0x00012e68 eor r2, r2, 1 | r2 ^= 1;
0x00012e6c cmp r3, 0x40 |
0x00012e6e ite ne |
| if (r3 == 0x40) {
0x00012e70 movne r2, 0 | r2 = 0;
| }
| if (r3 != 0x40) {
0x00012e72 andeq r2, r2, 1 | r2 &= 1;
| }
| if (r2 != 0) {
0x00012e76 cbnz r2, 0x12e8e | goto label_28;
| }
0x00012e78 adds r4, 0x41 | r4 += 0x41;
0x00012e7a adds r7, 1 | r7++;
0x00012e7c cmp.w r4, 0x2080 |
| if (r4 == 0x2080) {
0x00012e80 beq 0x12ea0 | goto label_29;
| }
| label_4:
0x00012e82 ldr.w r3, [r8, r4, lsl 2] | offset_3 = r4 << 2;
| r3 = *((r8 + offset_3));
0x00012e86 and r3, r3, 0xe0 | r3 &= 0xe0;
0x00012e8a cmp r3, 0xe0 |
0x00012e8c bne 0x12e62 |
| }
| label_28:
0x00012e8e mov r0, r7 | r0 = r7;
0x00012e90 adds r4, 0x41 | r4 += 0x41;
0x00012e92 bl 0x11860 | fcn_00011860 (r0);
0x00012e96 cmp.w r4, 0x2080 |
0x00012e9a add.w r7, r7, 1 | r7++;
| if (r4 != 0x2080) {
0x00012e9e bne 0x12e82 | goto label_4;
| }
| label_29:
0x00012ea0 ldr r3, [pc, 0x14c] |
0x00012ea2 add r3, pc | r3 = 0x25e96;
0x00012ea4 ldrb r2, [r3, 8] | r2 = *((r3 + 8));
0x00012ea6 cmp r2, 0 |
| if (r2 == 0) {
0x00012ea8 beq 0x12f42 | goto label_8;
| }
0x00012eaa ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x00012eac movw r2, 0x6e2d |
0x00012eb0 movt r2, 0x7765 | r2 = 0x77656e2d;
0x00012eb2 strb r5, [r4, 9] | *((r4 + 9)) = r5;
0x00012eb4 adds r3, 8 | r3 += 8;
0x00012eb6 cmp r1, r2 |
| if (r1 == r2) {
0x00012eb8 beq 0x12fae | goto label_30;
| }
| label_9:
0x00012eba ldr r3, [pc, 0x138] | r3 = *(0x12ff6);
0x00012ebc ldr r4, [r5, r3] | r4 = *((r5 + r3));
0x00012ebe ldrb r3, [r4] | r3 = *(r4);
0x00012ec0 cmp r3, 0 |
| if (r3 != 0) {
0x00012ec2 bne 0x12f86 | goto label_31;
| }
0x00012ec4 ldr r2, [pc, 0x130] |
0x00012ec6 movs r0, 6 | r0 = 6;
0x00012ec8 ldr r1, [pc, 0x130] |
0x00012eca add r2, pc | r2 = 0x25ec6;
0x00012ecc add r1, pc | r1 = 0x25ecc;
0x00012ece adds r2, 8 | r2 += 8;
0x00012ed0 bl 0x10568 | fcn_00010568 (r0, r1, r2);
| label_6:
0x00012ed4 ldrb r3, [r4] | r3 = *(r4);
0x00012ed6 cmp r3, 0 |
| if (r3 == 0) {
0x00012ed8 beq 0x12fb6 | goto label_32;
| }
0x00012eda ldr r1, [pc, 0x124] |
0x00012edc add r1, pc | r1 = 0x25ee2;
| label_10:
0x00012ede ldr r0, [pc, 0x124] |
0x00012ee0 movs r5, 0 | r5 = 0;
0x00012ee2 ldr.w r8, [pc, 0x124] |
0x00012ee4 strh r4, [r4, 8] | *((r4 + 8)) = r4;
0x00012ee6 mov r4, r5 | r4 = r5;
0x00012ee8 ldr r7, [pc, 0x120] |
0x00012eea add.w sb, sp, 0x64 | sb += var_64h;
0x00012eec lsrs r4, r4, 5 | r4 >>= 5;
0x00012eee add r0, pc | r0 = 0x25ef8;
0x00012ef0 add r8, pc | r8 = 0x25efe;
0x00012ef2 adds r0, 8 | r0 += 8;
0x00012ef4 add r7, pc | r7 = 0x25f04;
0x00012ef6 add.w r8, r8, 8 | r8 += 8;
0x00012efa blx 0x2e00 | fcn_00002e00 ();
0x00012efe movw r2, 0x1110 | r2 = 0x1110;
0x00012f02 mov r1, r5 | r1 = r5;
0x00012f04 add r0, sp, 0x64 | r0 += var_64h;
0x00012f06 blx 0x2c8c | fcn_00002c8c ();
| do {
0x00012f0a ldr.w r3, [r7, r4, lsl 2] | offset_4 = r4 << 2;
| r3 = *((r7 + offset_4));
0x00012f0e and r3, r3, 0xe0 | r3 &= 0xe0;
0x00012f12 cmp r3, 0x20 |
| if (r3 == 0x20) {
0x00012f14 bne 0x12f22 |
0x00012f16 mov r3, r8 | r3 = r8;
0x00012f18 movs r2, 0 | r2 = 0;
0x00012f1a mov r1, r5 | r1 = r5;
0x00012f1c mov r0, sb | r0 = sb;
0x00012f1e bl 0x12594 | fcn_00012594 (r0, r1, r2, r3);
0x00012f20 invalid |
| }
0x00012f22 adds r4, 0x41 | r4 += 0x41;
0x00012f24 adds r5, 1 | r5++;
0x00012f26 cmp.w r4, 0x2080 |
0x00012f2a bne 0x12f0a |
| } while (r4 != 0x2080);
0x00012f2c ldr r3, [pc, 0xe0] |
0x00012f2e movw r1, 0x6f03 |
0x00012f32 mov r2, sb | r2 = sb;
0x00012f34 movt r1, 0x5110 | r1 = 0x51106f03;
0x00012f38 add r3, pc | r3 = 0x25f4c;
0x00012f3a ldr r0, [r3] | r0 = imp.__stack_chk_guard;
0x00012f3c blx 0x2db4 | r0 = fcn_00002db4 ();
0x00012f40 cbnz r0, 0x12f68 |
| while (1) {
| label_8:
0x00012f42 ldr r2, [pc, 0xd0] |
0x00012f44 add.w r1, sp, 0x1180 | r1 += var_1180h;
0x00012f48 ldr r3, [pc, 0x78] | r3 = *(0x12fc4);
0x00012f4a adds r1, 0x14 | r1 += 0x14;
0x00012f4c add r2, pc | r2 = 0x25f66;
0x00012f4e ldr r3, [r2, r3] | r3 = imp.__stack_chk_guard;
0x00012f50 ldr r2, [r3] | r2 = imp.__stack_chk_guard;
0x00012f52 ldr r3, [r1] | r3 = *(r1);
0x00012f54 eors r2, r3 | r2 ^= r3;
0x00012f56 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00012f5a bne 0x12fbc | goto label_33;
| }
0x00012f5c mov r0, r6 | r0 = r6;
0x00012f5e add.w sp, sp, 0x1180 |
0x00012f62 add sp, 0x1c |
0x00012f64 pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x00012f68 ldr r1, [pc, 0xac] |
0x00012f6a movs r0, 2 | r0 = 2;
0x00012f6c add r1, pc | r1 = 0x25f88;
0x00012f6e bl 0x10568 | r0 = fcn_00010568 (r0, r1, r2);
| label_27:
0x00012f72 blx 0x317c | r0 = strncpy (r0, r1, r2);
0x00012f76 ldr r6, [r0] | r6 = *(r0);
0x00012f78 b 0x12f42 |
| }
| label_24:
0x00012f7a ldr r1, [pc, 0xa0] |
0x00012f7c movs r0, 4 | r0 = 4;
0x00012f7e add r1, pc | r1 = 0x25fa0;
0x00012f80 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x00012f84 b 0x12e4a | goto label_5;
| label_31:
0x00012f86 ldr r2, [pc, 0x98] |
0x00012f88 movs r0, 6 | r0 = 6;
0x00012f8a ldr r1, [pc, 0x98] |
0x00012f8c add r2, pc | r2 = 0x25fb2;
0x00012f8e add r1, pc | r1 = 0x25fb8;
0x00012f90 adds r2, 8 | r2 += 8;
0x00012f92 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x00012f96 b 0x12ed4 | goto label_6;
| label_25:
0x00012f98 ldr r0, [pc, 0x8c] |
0x00012f9a add r0, pc | r0 = 0x25fc6;
0x00012f9c blx 0x2de8 | fcn_00002de8 ();
0x00012fa0 b 0x12e3c | goto label_7;
| label_26:
0x00012fa2 ldr r1, [pc, 0x88] |
0x00012fa4 movs r0, 3 | r0 = 3;
0x00012fa6 add r1, pc | r1 = 0x25fd8;
0x00012fa8 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x00012faa invalid |
| label_30:
0x00012fae ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x00012fb0 cmp r3, 0 |
| if (r3 == 0) {
0x00012fb2 beq 0x12f42 | goto label_8;
| }
0x00012fb4 b 0x12eba | goto label_9;
| label_32:
0x00012fb6 ldr r1, [pc, 0x78] |
0x00012fb8 add r1, pc | r1 = 0x25fee;
0x00012fba b 0x12ede | goto label_10;
| label_33:
0x00012fbc blx 0x2eac | socket (r0, r1, r2);
0x00012fc0 lsrs r2, r7, 0x18 | r2 = r7 >> 0x18;
0x00012fc2 movs r1, r0 | r1 = r0;
0x00012fc4 lsls r4, r2, 0xc | r4 = r2 << 0xc;
0x00012fc6 movs r0, r0 |
0x00012fc8 strh r0, [r2, 0x38] | *((r2 + 0x38)) = r0;
0x00012fca movs r1, r0 | r1 = r0;
0x00012fcc lsrs r6, r5, 0x18 | r6 = r5 >> 0x18;
0x00012fce movs r1, r0 | r1 = r0;
0x00012fd0 ldm r4, {r4, r5, r7} | r4 = *(r4);
| r5 = *((r4 + 4));
| r7 = *((r4 + 8));
0x00012fd2 movs r0, r0 |
0x00012fd4 strb r0, [r2, 0x13] | *((r2 + 0x13)) = r0;
0x00012fd6 movs r0, r0 |
0x00012fd8 ldm r4!, {r1, r3, r5, r7} | r1 = *(r4!);
| r3 = *((r4! + 4));
| r5 = *((r4! + 8));
| r7 = *((r4! + 12));
0x00012fda movs r0, r0 |
0x00012fdc strh r0, [r3, 0x18] | *((r3 + 0x18)) = r0;
0x00012fde movs r0, r0 |
0x00012fe0 ldm r4!, {r6, r7} | r6 = *(r4!);
| r7 = *((r4! + 4));
0x00012fe2 movs r0, r0 |
0x00012fe4 strh r2, [r7, 0x16] | *((r7 + 0x16)) = r2;
0x00012fe6 movs r0, r0 |
0x00012fe8 strh r6, [r1, 0x34] | *((r1 + 0x34)) = r6;
0x00012fea movs r1, r0 | r1 = r0;
0x00012fec lsls r0, r2, 0xf | r0 = r2 << 0xf;
0x00012fee movs r0, r0 |
0x00012ff0 strh r2, [r0, 0x2e] | *((r0 + 0x2e)) = r2;
0x00012ff2 movs r1, r0 | r1 = r0;
0x00012ff4 lsls r4, r1, 0xe | r4 = r1 << 0xe;
0x00012ff6 movs r0, r0 |
0x00012ff8 strh r2, [r3, 0x2c] | *((r3 + 0x2c)) = r2;
0x00012ffa movs r1, r0 | r1 = r0;
0x00012ffc ldm r4, {r4, r6, r7} | r4 = *(r4);
| r6 = *((r4 + 4));
| r7 = *((r4 + 8));
0x00012ffe movs r0, r0 |
0x00013000 ldm r0!, {r2, r4} | r2 = *(r0!);
| r4 = *((r0! + 4));
0x00013002 movs r0, r0 |
0x00013004 strh r6, [r6, 0x2a] | *((r6 + 0x2a)) = r6;
0x00013006 movs r1, r0 | r1 = r0;
0x00013008 strh r4, [r6, 0x2a] | *((r6 + 0x2a)) = r4;
0x0001300a movs r1, r0 | r1 = r0;
0x0001300c strh r0, [r7, 0x2e] | *((r7 + 0x2e)) = r0;
0x0001300e movs r1, r0 | r1 = r0;
0x00013010 asrs r4, r6, 3 | r4 = r6 >> 3;
0x00013012 movs r1, r0 | r1 = r0;
0x00013014 lsrs r0, r0, 0x13 | r0 >>= 0x13;
0x00013016 movs r1, r0 | r1 = r0;
0x00013018 ldm r4, {r2, r3, r4, r6} | r2 = *(r4);
| r3 = *((r4 + 4));
| r4 = *((r4 + 8));
| r6 = *((r4 + 12));
0x0001301a movs r0, r0 |
0x0001301c ldm r3!, {r1, r4, r6} | r1 = *(r3!);
| r4 = *((r3! + 4));
| r6 = *((r3! + 8));
0x0001301e movs r0, r0 |
0x00013020 strh r0, [r3, 0x26] | *((r3 + 0x26)) = r0;
0x00013022 movs r1, r0 | r1 = r0;
0x00013024 ldm r3!, {r1, r2, r4, r6, r7} | r1 = *(r3!);
| r2 = *((r3! + 4));
| r4 = *((r3! + 8));
| r6 = *((r3! + 12));
| r7 = *((r3! + 16));
0x00013026 movs r0, r0 |
0x00013028 ldm r3!, {r1, r2, r4, r5, r6} | r1 = *(r3!);
| r2 = *((r3! + 4));
| r4 = *((r3! + 8));
| r5 = *((r3! + 12));
| r6 = *((r3! + 16));
0x0001302a movs r0, r0 |
0x0001302c ldm r3, {r1, r3, r4, r7} | r1 = *(r3);
| r3 = *((r3 + 4));
| r4 = *((r3 + 8));
| r7 = *((r3 + 12));
0x0001302e movs r0, r0 |
0x00013030 strb r0, [r6, 0xc] | *((r6 + 0xc)) = r0;
0x00013032 movs r0, r0 |
0x00013034 push.w {r4, r5, r6, r7, r8, lr} |
0x00013036 rors r0, r6 | __asm ("rors r0, r6");
0x00013038 mov r7, r0 | r7 = r0;
0x0001303a ldr.w r8, [pc, 0x9c] |
0x0001303e add r8, pc | r8 = 0x2611c;
0x00013040 bl 0x12300 | r0 = fcn_00012300 ();
| if (r0 != 0) {
0x00013044 cbnz r0, 0x1309c | goto label_34;
| }
0x00013046 mov r5, r0 | r5 = r0;
| if (r7 == 0) {
0x00013048 cbz r7, 0x130a8 | goto label_35;
| }
| label_11:
0x0001304a ldr r6, [pc, 0x90] |
0x0001304c movs r4, 0 | r4 = 0;
0x0001304e add r6, pc | r6 = 0x26130;
| do {
0x00013050 ldr.w r3, [r6, r4, lsl 2] | offset_5 = r4 << 2;
| r3 = *((r6 + offset_5));
0x00013054 mov r0, r5 | r0 = r5;
0x00013056 adds r4, 0x41 | r4 += 0x41;
0x00013058 adds r5, 1 | r5++;
0x0001305a and r2, r3, 0xe0 | r2 = r3 & 0xe0;
0x0001305e subs r3, 0x25 | r3 -= 0x25;
0x00013060 cmp r2, 0x40 |
0x00013062 it ne |
| if (r2 != 0x40) {
0x00013064 cmpne r3, 3 | __asm ("cmpne r3, 3");
| }
| if (r2 >= 0x40) {
0x00013066 bls 0x13074 |
0x00013068 cmp r2, 0xe0 |
0x0001306a ite ne |
| if (r2 == 0xe0) {
0x0001306c movne r3, 0 | r3 = 0;
| }
| if (r2 != 0xe0) {
0x0001306e andeq r3, r7, 1 | r3 = r7 & 1;
| }
| if (r3 == 0) {
0x00013072 cbz r3, 0x13078 | goto label_36;
| }
| }
0x00013074 bl 0x11860 | fcn_00011860 (r0);
| label_36:
0x00013078 cmp.w r4, 0x2080 |
0x0001307c bne 0x13050 |
| } while (r4 != 0x2080);
0x0001307e ldr r2, [pc, 0x60] | r2 = *(0x130e2);
0x00013080 movs r1, 0 | r1 = 0;
0x00013082 ldr r3, [pc, 0x60] | r3 = *(0x130e6);
0x00013084 ldr.w r2, [r8, r2] | r2 = *((r8 + r2));
0x00013086 movs r0, 2 | r0 = 2;
0x00013088 strb r1, [r2] | *(r2) = r1;
0x0001308a ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x0001308e strb r1, [r3] | *(r3) = r1;
0x00013090 bl 0x9554 | fcn_00009554 ();
0x00013094 bl 0x128e0 | r0 = fcn_000128e0 ();
0x00013098 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0001309a cbz r0, 0x130ce | goto label_37;
| }
| label_34:
0x0001309c blx 0x317c | r0 = strncpy (r0, r1, r2);
0x000130a0 ldr r4, [r0] | r4 = *(r0);
0x000130a2 mov r0, r4 | r0 = r4;
0x000130a4 pop.w {r4, r5, r6, r7, r8, pc} |
| label_35:
0x000130a8 ldr r0, [pc, 0x3c] |
0x000130aa mov r3, r7 | r3 = r7;
0x000130ac mov r2, r7 | r2 = r7;
0x000130ae add r0, pc | r0 = 0x2619a;
0x000130b0 b 0x130b8 | goto label_38;
| label_12:
0x000130b2 adds r2, 1 | r2++;
0x000130b4 cmp r2, 0x80 |
| if (r2 == 0x80) {
0x000130b6 beq 0x1304a | goto label_11;
| }
| label_38:
0x000130b8 ldr.w r1, [r0, r3, lsl 2] | offset_6 = r3 << 2;
| r1 = *((r0 + offset_6));
0x000130bc adds r3, 0x41 | r3 += 0x41;
0x000130be cmp r1, 0x41 |
| if (r1 != 0x41) {
0x000130c0 bne 0x130b2 | goto label_12;
| }
0x000130c2 ldr r1, [pc, 0x28] |
0x000130c4 movs r0, 6 | r0 = 6;
0x000130c6 add r1, pc | r1 = 0x261b8;
0x000130c8 bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x000130cc b 0x1304a | goto label_11;
| label_37:
0x000130ce bl 0x17b8c | fcn_00017b8c ();
0x000130d2 mov r0, r4 | r0 = r4;
0x000130d4 pop.w {r4, r5, r6, r7, r8, pc} |
0x000130d6 strh r0, [r6, 0xe] | *((r6 + 0xe)) = 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/fwmgr @ 0x139a8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000139a8 () | void fcn_000139a8 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_8ch;
| int16_t var_1h;
| int16_t var_ach;
| int16_t var_cch;
| int16_t var_41h;
| int16_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000139a8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000139ac mov r7, r2 | r7 = r2;
0x000139ae ldr r2, [pc, 0x264] |
0x000139b0 sub sp, 0xd4 |
0x000139b2 add.w r8, sp, 0x8c | r8 += var_8ch;
0x000139b6 mov r4, r0 | r4 = r0;
0x000139b8 ldr r3, [pc, 0x25c] | r3 = *(0x13c18);
0x000139ba mov r6, r1 | r6 = r1;
0x000139bc add r2, pc | r2 = 0x275d6;
0x000139be ldr.w sb, [pc, 0x25c] |
0x000139c2 mov r1, r0 | r1 = r0;
0x000139c4 mov r0, r8 | r0 = r8;
0x000139c6 ldr r3, [r2, r3] |
0x000139c8 add sb, pc | sb = 0x275ea;
0x000139ca ldr r3, [r3] | r3 = imp.__stack_chk_guard;
0x000139cc str r3, [sp, 0xcc] | var_cch = r3;
0x000139ce mov.w r3, 0 | r3 = 0;
0x000139d2 bl 0x1380c | r0 = fcn_0001380c (r0, r1, r2);
| if (r0 != 0) {
0x000139d6 cbnz r0, 0x13a2a | goto label_1;
| }
0x000139d8 movw r3, 0x10b | r3 = 0x10b;
0x000139dc mov r5, r0 | r5 = r0;
0x000139de cmp r4, r3 |
| if (r4 == r3) {
0x000139e0 beq 0x13adc | goto label_7;
| }
0x000139e2 ldr r2, [pc, 0x23c] |
0x000139e4 mov ip, r0 |
0x000139e6 mov lr, r0 | lr = r0;
0x000139e8 add r2, pc | r2 = 0x2760e;
0x000139ea b 0x139fa |
| while (r4 != r3) {
0x000139ec add.w lr, lr, 1 | lr += var_1h;
0x000139f0 add.w ip, ip, 0x41 |
0x000139f4 cmp.w lr, 0x80 |
| if (lr == 0x80) {
0x000139f8 beq 0x13a4e | goto label_8;
| }
0x000139fa ldr.w r3, [r2, ip, lsl 2] | offset_0 = ip << 2;
| r3 = *((r2 + offset_0));
0x000139fe cmp r4, r3 |
0x00013a00 bne 0x139ec |
| }
0x00013a02 cmp r4, 0x41 |
0x00013a04 mov sl, lr | sl = lr;
| if (r4 != 0x41) {
0x00013a06 beq 0x13a58 |
0x00013a08 bic fp, r4, 0xe0 | fp = BIT_MASK (r4, 0xe0);
0x00013a0c cmp.w fp, 2 |
| if (fp == 2) {
0x00013a10 beq 0x13a72 | goto label_9;
| }
| label_0:
0x00013a12 ldr r2, [pc, 0x210] |
0x00013a14 mov r3, r7 | r3 = r7;
0x00013a16 mov r1, r6 | r1 = r6;
0x00013a18 mov r0, r8 | r0 = r8;
0x00013a1a add r2, pc | r2 = 0x27644;
0x00013a1c str r2, [sp] | *(sp) = r2;
0x00013a1e ldr r2, [pc, 0x208] |
0x00013a20 add r2, pc | r2 = 0x2764e;
0x00013a22 blx 0x3188 | r0 = strcat_chk ()
0x00013a26 cmp r0, 0 |
| if (r0 < 0) {
0x00013a28 bge 0x13a30 |
| label_1:
0x00013a2a blx 0x317c | r0 = strncpy (r0, r1, r2);
0x00013a2e ldr r5, [r0] | r5 = *(r0);
| }
| label_2:
0x00013a30 ldr r2, [pc, 0x1f8] |
0x00013a32 ldr r3, [pc, 0x1e4] | r3 = *(0x13c1a);
0x00013a34 add r2, pc | r2 = 0x27664;
0x00013a36 ldr r3, [r2, r3] | r3 = imp.__stack_chk_guard;
0x00013a38 ldr r2, [r3] | r2 = imp.__stack_chk_guard;
0x00013a3a ldr r3, [sp, 0xcc] | r3 = var_cch;
0x00013a3c eors r2, r3 | r2 ^= r3;
0x00013a3e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00013a42 bne.w 0x13c10 | goto label_10;
| }
0x00013a46 mov r0, r5 | r0 = r5;
0x00013a48 add sp, 0xd4 |
0x00013a4a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x00013a4e cmp r4, 0x41 |
| if (r4 != 0x41) {
0x00013a50 bne.w 0x13b88 | goto label_11;
| }
0x00013a54 mov.w sl, -1 | sl = -1;
| }
0x00013a58 ldr r1, [pc, 0x1d4] |
0x00013a5a movs r3, 0 | r3 = 0;
0x00013a5c add r1, pc | r1 = 0x27690;
0x00013a5e b 0x13a68 |
| while (r2 != 0x4b) {
0x00013a60 adds r3, 0x41 | r3 += 0x41;
0x00013a62 cmp.w r3, 0x2080 |
| if (r3 == 0x2080) {
0x00013a66 beq 0x13b0e | goto label_12;
| }
0x00013a68 ldr.w r2, [r1, r3, lsl 2] | offset_1 = r3 << 2;
| r2 = *((r1 + offset_1));
0x00013a6c cmp r2, 0x4b |
0x00013a6e bne 0x13a60 |
| }
0x00013a70 b 0x13a12 | goto label_0;
| label_9:
0x00013a72 ldr r3, [pc, 0x1c0] | r3 = *(0x13c36);
0x00013a74 ldr.w r3, [sb, r3] | r3 = *((sb + r3));
0x00013a76 adds r0, 3 | r0 += 3;
0x00013a78 ldrb r3, [r3] | r3 = *(r3);
| if (r3 == 0) {
0x00013a7a cbz r3, 0x13a92 | goto label_3;
| }
| label_4:
0x00013a7c subs.w r1, r4, 0x22 | r1 = r4 - 0x22;
0x00013a80 mov r0, sl | r0 = sl;
0x00013a82 it ne |
| if (r1 == r4) {
0x00013a84 movne r1, 1 | r1 = 1;
| }
0x00013a86 mov.w fp, 2 |
0x00013a8a bl 0x16fb0 | r0 = fcn_00016fb0 (r0, r1, r2, r3, r4, r5);
0x00013a8e cmp r0, 0 |
| if (r0 != 0) {
0x00013a90 bne 0x13a2a | goto label_1;
| }
| label_3:
0x00013a92 mov r0, sl | r0 = sl;
0x00013a94 bl 0x17760 | r0 = fcn_00017760 (r0);
0x00013a98 cmp r0, 0 |
| if (r0 == 0) {
0x00013a9a beq 0x13a2a | goto label_1;
| }
0x00013a9c ldr r2, [pc, 0x198] |
0x00013a9e mov r3, r7 | r3 = r7;
0x00013aa0 str r0, [sp] | *(sp) = r0;
0x00013aa2 mov r1, r6 | r1 = r6;
0x00013aa4 mov r0, r8 | r0 = r8;
0x00013aa6 add r2, pc | r2 = 0x276e2;
0x00013aa8 blx 0x3188 | r0 = strcat_chk ()
0x00013aac cmp r0, 0 |
| if (r0 < 0) {
0x00013aae blt 0x13a2a | goto label_1;
| }
0x00013ab0 cmp.w fp, 2 |
| if (fp != 2) {
0x00013ab4 bne 0x13ba6 | goto label_13;
| }
0x00013ab6 subs.w r2, r4, 0x22 | r2 = r4 - 0x22;
0x00013aba mov r1, sl | r1 = sl;
0x00013abc it ne |
| if (r2 == r4) {
0x00013abe movne r2, 1 | r2 = 1;
| }
0x00013ac0 mov r0, r6 | r0 = r6;
0x00013ac2 bl 0x64f8 | r0 = fcn_000064f8 (r0, r1, r2);
0x00013ac6 cmp r0, 0 |
| if (r0 == 0) {
0x00013ac8 beq 0x13a30 | goto label_2;
| }
| label_5:
0x00013aca blx 0x317c | r0 = strncpy (r0, r1, r2);
0x00013ace mov r4, r0 | r4 = r0;
0x00013ad0 mov r0, r6 | r0 = r6;
0x00013ad2 ldr r5, [r4] | r5 = *(r4);
0x00013ad4 blx 0x3030 | fcn_00003030 ();
0x00013ad8 str r5, [r4] | *(r4) = r5;
0x00013ada b 0x13a30 | goto label_2;
| label_7:
0x00013adc ldr r3, [pc, 0x15c] |
0x00013ade add r3, pc | r3 = 0x2771e;
0x00013ae0 ldrb r2, [r3, 4] | r2 = *((r3 + 4));
0x00013ae2 ldr r3, [pc, 0x150] | r3 = *(0x13c36);
0x00013ae4 ldr.w r3, [sb, r3] | r3 = *((sb + r3));
0x00013ae8 ldrb r3, [r3] | r3 = *(r3);
| if (r2 != 0) {
0x00013aea cbnz r2, 0x13afc | goto label_14;
| }
0x00013aec mov fp, r4 |
0x00013aee mov.w sl, -1 | sl = -1;
0x00013af2 cmp r3, 0 |
| if (r3 == 0) {
0x00013af4 beq 0x13a92 | goto label_3;
| }
0x00013af6 mov.w sl, -1 | sl = -1;
0x00013afa b 0x13b00 | goto label_15;
| label_14:
0x00013afc mov sl, r0 | sl = r0;
| if (r3 == 0) {
0x00013afe cbz r3, 0x13b0a | goto label_16;
| }
| label_15:
0x00013b00 movs r0, 0 | r0 = 0;
0x00013b02 bl 0x175ac | r0 = fcn_000175ac (r0, r1, r2, r3, r4, r5, r6);
0x00013b06 cmp r0, 0 |
| if (r0 != 0) {
0x00013b08 bne 0x13a2a | goto label_1;
| }
| label_16:
0x00013b0a mov fp, r4 |
0x00013b0c b 0x13a92 | goto label_3;
| label_12:
0x00013b0e movs r1, 2 | r1 = 2;
0x00013b10 mov r0, r8 | r0 = r8;
0x00013b12 blx 0x2e3c | fcn_00002e3c ();
0x00013b16 subs.w sb, r0, 0 | sb -= var_8ch;
| if (sb < var_8ch) {
0x00013b1a blt 0x13bf2 | goto label_17;
| }
0x00013b1c ldr r1, [pc, 0x120] |
0x00013b1e add r3, sp, 0xc | r3 += var_ch;
0x00013b20 movs r2, 0x80 | r2 = 0x80;
0x00013b22 mov r0, r3 | r0 = r3;
0x00013b24 add r1, pc | r1 = 0x27768;
0x00013b26 blx 0x3054 | fcn_00003054 ();
0x00013b2a movw r1, 0x4f07 |
0x00013b2e mov r2, r0 | r2 = r0;
0x00013b30 movt r1, 0x4080 | r1 = 0x40804f07;
0x00013b34 mov r0, sb | r0 = sb;
0x00013b36 blx 0x2db4 | r0 = fcn_00002db4 ();
0x00013b3a mov r4, r0 | r4 = r0;
0x00013b3c cmp r0, 0 |
| if (r0 != 0) {
0x00013b3e bne 0x13bc2 | goto label_18;
| }
0x00013b40 ldr r3, [pc, 0x100] |
0x00013b42 movs r2, 0x20 | r2 = 0x20;
0x00013b44 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00013b48 add.w sl, sp, 0xac | sl += var_ach;
0x00013b4c movs r1, 1 | r1 = 1;
0x00013b4e mov r0, sl | r0 = sl;
0x00013b50 add r3, pc | r3 = 0x27798;
0x00013b52 blx 0x3200 | ERR_error_string ();
0x00013b56 ldr r3, [pc, 0xf0] |
0x00013b58 mov r0, sl | r0 = sl;
0x00013b5a ldr r2, [pc, 0xf0] |
0x00013b5c mov r1, r6 | r1 = r6;
0x00013b5e add r3, pc | r3 = 0x277ac;
0x00013b60 str r3, [sp] | *(sp) = r3;
0x00013b62 add r2, pc | r2 = 0x277b4;
0x00013b64 mov r3, r7 | r3 = r7;
0x00013b66 blx 0x3188 | r0 = strcat_chk ()
0x00013b6a mov r3, r0 | r3 = r0;
0x00013b6c cmp r0, 0 |
| if (r0 == 0) {
0x00013b6e beq 0x13c00 | goto label_19;
| }
0x00013b70 mov r2, r4 | r2 = r4;
0x00013b72 movw r1, 0x4f08 | r1 = 0x4f08;
0x00013b76 mov r0, sb | r0 = sb;
0x00013b78 blx 0x2db4 | r0 = fcn_00002db4 ();
0x00013b7c cmp r0, 0 |
| if (r0 != 0) {
0x00013b7e bne 0x13c0a | goto label_20;
| }
0x00013b80 mov r0, sb | r0 = sb;
0x00013b82 blx 0x2cec | fcn_00002cec ();
0x00013b86 b 0x13a12 | goto label_0;
| label_11:
0x00013b88 bic fp, r4, 0xe0 | fp = BIT_MASK (r4, 0xe0);
0x00013b8c cmp.w fp, 2 |
| if (fp != 2) {
0x00013b90 bne 0x13bd6 | goto label_21;
| }
0x00013b92 ldr r3, [pc, 0xa0] | r3 = *(0x13c36);
0x00013b94 mov.w sl, -1 | sl = -1;
0x00013b98 ldr.w r3, [sb, r3] | r3 = *((sb + r3));
0x00013b9c ldrb r3, [r3] | r3 = *(r3);
0x00013b9e cmp r3, 0 |
| if (r3 != 0) {
0x00013ba0 bne.w 0x13a7c | goto label_4;
| }
0x00013ba4 b 0x13a92 | goto label_3;
| label_13:
0x00013ba6 movw r3, 0x10b | r3 = 0x10b;
0x00013baa cmp r4, r3 |
| if (r4 != r3) {
0x00013bac bne.w 0x13a30 | goto label_2;
| }
0x00013bb0 movs r2, 2 | r2 = 2;
0x00013bb2 mov r1, sl | r1 = sl;
0x00013bb4 mov r0, r6 | r0 = r6;
0x00013bb6 bl 0x64f8 | r0 = fcn_000064f8 (r0, r1, r2);
0x00013bba cmp r0, 0 |
| if (r0 == 0) {
0x00013bbc beq.w 0x13a30 | goto label_2;
| }
0x00013bc0 b 0x13aca | goto label_5;
| label_18:
0x00013bc2 ldr r1, [pc, 0x8c] |
0x00013bc4 add r1, pc | r1 = 0x2781a;
| label_6:
0x00013bc6 mov r2, r8 | r2 = r8;
0x00013bc8 movs r0, 2 | r0 = 2;
0x00013bca bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x00013bce mov r0, sb | r0 = sb;
0x00013bd0 bl 0x11530 | fcn_00011530 (r0);
0x00013bd4 b 0x13a2a | goto label_1;
| label_21:
0x00013bd6 ldr r2, [pc, 0x7c] |
0x00013bd8 mov r3, r7 | r3 = r7;
0x00013bda mov r1, r6 | r1 = r6;
0x00013bdc mov r0, r8 | r0 = r8;
0x00013bde add r2, pc | r2 = 0x27838;
0x00013be0 str r2, [sp] | *(sp) = r2;
0x00013be2 ldr r2, [pc, 0x74] |
0x00013be4 add r2, pc | r2 = 0x27842;
0x00013be6 blx 0x3188 | r0 = strcat_chk ()
0x00013bea cmp r0, 0 |
| if (r0 < 0) {
0x00013bec blt.w 0x13a2a | goto label_1;
| }
0x00013bf0 b 0x13a30 | goto label_2;
| label_17:
0x00013bf2 ldr r1, [pc, 0x68] |
0x00013bf4 mov r2, r8 | r2 = r8;
0x00013bf6 movs r0, 2 | r0 = 2;
0x00013bf8 add r1, pc | r1 = 0x2785a;
0x00013bfa bl 0x10568 | fcn_00010568 (r0, r1, r2);
0x00013bfe b 0x13a2a | goto label_1;
| label_19:
0x00013c00 mov r0, sb | r0 = sb;
0x00013c02 mov r5, r3 | r5 = r3;
0x00013c04 blx 0x2cec | fcn_00002cec ();
0x00013c08 b 0x13a30 | goto label_2;
| label_20:
0x00013c0a ldr r1, [pc, 0x54] |
0x00013c0c add r1, pc | r1 = 0x27872;
0x00013c0e b 0x13bc6 | goto label_6;
| label_10:
0x00013c10 blx 0x2eac | socket (r0, r1, r2);
0x00013c14 lsls r0, r2, 9 | r0 = r2 << 9;
0x00013c16 movs r1, r0 | r1 = r0;
0x00013c18 lsls r4, r2, 0xc | r4 = r2 << 0xc;
0x00013c1a movs r0, r0 |
0x00013c1c lsls r4, r0, 9 | r4 = r0 << 9;
0x00013c1e movs r1, r0 | r1 = r0;
0x00013c20 ldrb r4, [r0, 0xc] | r4 = *((r0 + 0xc));
0x00013c22 movs r1, r0 | r1 = r0;
0x00013c24 ldr r6, [r1, 0xc] | r6 = *((r1 + 0xc));
0x00013c26 movs r0, r0 |
0x00013c28 stm r0!, {r3, r5, r7} | *(r0!) = r3;
| *((r0! + 4)) = r5;
| *((r0! + 8)) = r7;
0x00013c2a movs r0, r0 |
0x00013c2c lsls r0, r3, 7 | r0 = r3 << 7;
0x00013c2e movs r1, r0 | r1 = r0;
0x00013c30 ldrb r0, [r2, 0xa] | r0 = *((r2 + 0xa));
0x00013c32 movs r1, r0 | r1 = r0;
0x00013c34 lsls r0, r0, 0xf | r0 <<= 0xf;
0x00013c36 movs r0, r0 |
0x00013c38 stm r0!, {r1, r5} | *(r0!) = r1;
| *((r0! + 4)) = r5;
0x00013c3a movs r0, r0 |
0x00013c3c ldrb r6, [r0, 6] | r6 = *((r0 + 6));
0x00013c3e movs r1, r0 | r1 = r0;
0x00013c40 ldm r2!, {r7} | r7 = *(r2!);
0x00013c42 movs r0, r0 |
0x00013c44 stm r4!, {r4} | *(r4!) = r4;
0x00013c46 movs r0, r0 |
0x00013c48 str r2, [r1, 0x78] | *((r1 + 0x78)) = r2;
0x00013c4a movs r0, r0 |
0x00013c4c stm r4!, {r1, r4} | *(r4!) = r1;
| *((r4! + 4)) = r4;
0x00013c4e movs r0, r0 |
0x00013c50 stm r3!, {r4, r5, r6} | *(r3!) = r4;
| *((r3! + 4)) = r5;
| *((r3! + 8)) = r6;
0x00013c52 movs r0, r0 |
0x00013c54 str r2, [r1, 0x70] | *((r1 + 0x70)) = r2;
0x00013c56 movs r0, r0 |
0x00013c58 bkpt 0xe4 | __asm ("bkpt 0xe4");
| }
[*] Function strcat used 13 times fwmgr