[*] Binary protection state of systemd-shutdown
Full RELRO Canary found NX enabled PIE enabled RPATH No RUNPATH No Symbols
[*] Function system tear down of systemd-shutdown
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/systemd/systemd-shutdown @ 0x5294 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00005294 () | void fcn_00005294 (uint32_t arg1, int16_t arg2) {
| int16_t var_0h_3;
| int16_t var_4h_3;
| int16_t var_8h_3;
| int16_t var_ch_3;
| int16_t var_10h_2;
| int16_t var_18h_2;
| int16_t var_1ch_4;
| int16_t var_24h_2;
| int16_t var_28h;
| int16_t var_2ch_2;
| int16_t var_30h_2;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
0x00005294 blmi 0xfe397cd0 | __asm ("blmi 0xfe397cd0");
0x00005298 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000529c add r2, pc | r2 += pc;
0x0000529e vpush {d8} | __asm ("vpush {d8}");
0x000052a2 sub sp, 0x44 |
0x000052a4 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000052a6 ldr r3, [r3] | r3 = *(r3);
0x000052a8 str r3, [sp, 0x3c] | var_3ch = r3;
0x000052aa mov.w r3, 0 | r3 = 0;
0x000052ae cmp r0, 0 |
| if (var_0h_3 == ) {
0x000052b0 beq.w 0x54aa | goto label_4;
| }
0x000052b4 mov r7, r0 | r7 = r0;
0x000052b6 movs r5, 0 | r5 = 0;
0x000052b8 add r0, sp, 0x28 | r0 += var_28h;
0x000052ba mov sb, r1 | sb = r1;
0x000052bc strd r5, r5, [sp, 0x24] | __asm ("strd r5, r5, [sp, 0x24]");
0x000052c0 blx 0x1920 | r0 = sd_device_enumerator_new ();
0x000052c4 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x000052c6 blt.w 0x5428 | goto label_5;
| }
0x000052ca ldr r0, [sp, 0x28] | r0 = var_28h;
0x000052cc blx 0x1e28 | r0 = fcn_00001e28 ();
0x000052d0 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x000052d2 blt.w 0x5428 | goto label_5;
| }
0x000052d6 ldr r1, [pc, 0x1fc] |
0x000052d8 movs r2, 1 | r2 = 1;
0x000052da ldr r0, [sp, 0x28] | r0 = var_28h;
0x000052dc add r1, pc | r1 = 0xa7b6;
0x000052de blx 0x1950 | r0 = sd_device_enumerator_add_match_subsystem ()
0x000052e2 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x000052e4 blt.w 0x5428 | goto label_5;
| }
0x000052e8 ldr r1, [pc, 0x1ec] |
0x000052ea ldr r0, [sp, 0x28] | r0 = var_28h;
0x000052ec add r1, pc | r1 = 0xa7c8;
0x000052ee blx 0x1914 | r0 = sd_device_enumerator_add_match_sysname ();
0x000052f2 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x000052f4 blt.w 0x5428 | goto label_5;
| }
0x000052f8 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000052fa add r6, sp, 0x30 | r6 += var_30h_2;
0x000052fc blx 0x198c | sd_device_enumerator_get_device_first ();
0x00005300 add.w r8, sp, 0x2c | r8 += var_2ch_2;
0x00005304 mov r4, r0 | r4 = r0;
0x00005306 mov sl, r7 | sl = r7;
| if (r0 == 0) {
0x00005308 cbz r0, 0x5366 | goto label_6;
| }
| do {
0x0000530a mov r1, r6 | r1 = r6;
0x0000530c mov r0, r4 | r0 = r4;
0x0000530e blx 0x1c30 | r0 = fcn_00001c30 ();
0x00005312 cmp r0, 0 |
| if (r0 >= 0) {
0x00005314 blt 0x5358 |
0x00005316 mov r1, r8 | r1 = r8;
0x00005318 mov r0, r4 | r0 = r4;
0x0000531a blx 0x1938 | r0 = sd_device_get_devname ();
0x0000531e cmp r0, 0 |
| if (r0 < 0) {
0x00005320 blt 0x5358 | goto label_7;
| }
0x00005322 ldr r0, [sp, 0x2c] | r0 = var_2ch_2;
0x00005324 blx 0x1c78 | r0 = fcn_00001c78 ();
0x00005328 mov r7, r0 | r7 = r0;
0x0000532a cmp r0, 0 |
| if (r0 == 0) {
0x0000532c beq 0x541e | goto label_8;
| }
0x0000532e movs r0, 0x20 | r0 = 0x20;
0x00005330 blx 0x1c84 | r0 = fcn_00001c84 ();
0x00005334 mov r4, r0 | r4 = r0;
0x00005336 cmp r0, 0 |
| if (r0 == 0) {
0x00005338 beq 0x541e | goto label_8;
| }
0x0000533a movs r2, 0x20 | r2 = 0x20;
0x0000533c movs r1, 0 | r1 = 0;
0x0000533e vldr d8, [sp, 0x30] | __asm ("vldr d8, [sp, 0x30]");
0x00005342 blx 0x19c8 | memset (r0, r1, r2);
0x00005346 ldr r3, [sp, 0x24] | r3 = var_24h_2;
0x00005348 vstr d8, [r4, 0x10] | __asm ("vstr d8, [r4, 0x10]");
0x0000534c str r7, [r4] | *(r4) = r7;
0x0000534e str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
| if (r3 != 0) {
0x00005350 cbz r3, 0x5354 |
0x00005352 str r4, [r3, 0x1c] | *((r3 + 0x1c)) = r4;
| }
0x00005354 str r5, [r4, 0x1c] | *((r4 + 0x1c)) = r5;
0x00005356 str r4, [sp, 0x24] | var_24h_2 = r4;
| }
| label_7:
0x00005358 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0000535a blx 0x1c18 | r0 = fcn_00001c18 ();
0x0000535e mov r4, r0 | r4 = r0;
0x00005360 cmp r0, 0 |
0x00005362 bne 0x530a |
| } while (r0 != 0);
0x00005364 mov r7, sl | r7 = sl;
| label_6:
0x00005366 ldr r0, [sp, 0x28] | r0 = var_28h;
| if (r0 != 0) {
0x00005368 cbz r0, 0x536e |
0x0000536a blx 0x19b0 | sd_device_enumerator_unref ();
| }
0x0000536e ldr r0, [pc, 0x16c] |
0x00005370 mov r1, r6 | r1 = r6;
0x00005372 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00005376 add r0, pc | r0 = 0xa858;
0x00005378 vstr d16, [sp, 0x30] | __asm ("vstr d16, [sp, 0x30]");
0x0000537c blx 0x1c48 | fcn_00001c48 ();
0x00005380 ldr r5, [sp, 0x24] | r5 = var_24h_2;
0x00005382 mov r6, r5 | r6 = r5;
0x00005384 cmp r5, 0 |
| if (r5 == 0) {
0x00005386 beq 0x53fe | goto label_9;
| }
0x00005388 ldr r3, [pc, 0x154] |
0x0000538a mov.w r8, 0xf000 | r8 = 0xf000;
0x0000538e movs r6, 0 | r6 = 0;
0x00005390 movt r8, 0xffff | r8 = (r8 & 0xFFFF) | 0xffff0000;
0x00005394 add r3, pc | r3 = 0xa878;
0x00005396 adds r3, 7 | r3 += 7;
0x00005398 str r3, [sp, 0x18] | var_18h_2 = r3;
0x0000539a ldr r3, [pc, 0x148] |
0x0000539c add r3, pc | r3 = 0xa886;
0x0000539e add.w fp, r3, 7 |
0x000053a2 ldr r3, [pc, 0x144] |
0x000053a4 add r3, pc | r3 = 0xa892;
0x000053a6 str r3, [sp, 0x1c] | var_1ch_4 = r3;
| do {
| label_1:
0x000053a8 ldrd r1, r2, [sp, 0x30] | __asm ("ldrd r1, r2, [var_30h_2]");
0x000053ac mov r4, r5 | r4 = r5;
0x000053ae ldr r5, [r5, 0x18] | r5 = *((r5 + 0x18));
0x000053b0 ubfx r0, r1, 8, 0xc | r0 = (r1 >> 8) & ((1 << 0xc) - 1);
0x000053b4 and.w r3, r2, r8 | r3 = r2 & r8;
0x000053b8 orrs r3, r0 | r3 |= r0;
| if (r3 != r0) {
0x000053ba beq 0x53c8 |
0x000053bc ldrd r0, r3, [r4, 0x10] | __asm ("ldrd r0, r3, [r4, 0x10]");
0x000053c0 cmp r3, r2 |
0x000053c2 it eq |
| if (r3 == r2) {
0x000053c4 cmpeq r0, r1 | __asm ("cmpeq r0, r1");
| }
| if (r3 == r2) {
0x000053c6 beq 0x545a | goto label_10;
| }
| }
0x000053c8 blx 0x1968 | r0 = log_get_max_level ();
0x000053cc cmp r0, 5 |
| if (r0 > 5) {
0x000053ce bgt 0x5462 | goto label_11;
| }
| label_3:
0x000053d0 mov r0, r4 | r0 = r4;
0x000053d2 bl 0x3d38 | r0 = fcn_00003d38 (r0);
0x000053d6 subs.w sl, r0, 0 | sl = r0 - 0;
| if (sl < r0) {
0x000053da blt 0x5432 | goto label_12;
| }
0x000053dc movs r3, 1 | r3 = 1;
0x000053de mov r1, r4 | r1 = r4;
0x000053e0 add r0, sp, 0x24 | r0 += var_24h_2;
0x000053e2 strb r3, [r7] | *(r7) = r3;
0x000053e4 bl 0x3c5c | fcn_00003c5c (r0, r1);
0x000053e8 cmp r5, 0 |
0x000053ea bne 0x53a8 |
| } while (r5 != 0);
| label_2:
0x000053ec ldr r1, [sp, 0x24] | r1 = var_24h_2;
| if (r1 == 0) {
| label_0:
0x000053ee cbz r1, 0x53fe | goto label_9;
| }
0x000053f0 add r4, sp, 0x24 | r4 += var_24h_2;
| do {
0x000053f2 mov r0, r4 | r0 = r4;
0x000053f4 bl 0x3c5c | fcn_00003c5c (r0, r1);
0x000053f8 ldr r1, [sp, 0x24] | r1 = var_24h_2;
0x000053fa cmp r1, 0 |
0x000053fc bne 0x53f2 |
| } while (r1 != 0);
| label_9:
0x000053fe ldr r2, [pc, 0xec] |
0x00005400 ldr r3, [pc, 0xcc] | r3 = *(0x54d0);
0x00005402 add r2, pc | r2 = 0xa8f4;
0x00005404 ldr r3, [r2, r3] | r3 = *(0xa8f4);
0x00005406 ldr r2, [r3] | r2 = *(0xa8f4);
0x00005408 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0000540a eors r2, r3 | r2 ^= r3;
0x0000540c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00005410 bne 0x54c8 | goto label_13;
| }
0x00005412 mov r0, r6 | r0 = r6;
0x00005414 add sp, 0x44 |
0x00005416 vpop {d8} | __asm ("vpop {d8}");
0x0000541a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x0000541e mov r0, r7 | r0 = r7;
0x00005420 mvn r6, 0xb | r6 = ~0xb;
0x00005424 blx 0x1a50 | fcn_00001a50 ();
| label_5:
0x00005428 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0000542a cmp r0, 0 |
| if (r0 != 0) {
0x0000542c bne 0x54c0 | goto label_14;
| }
0x0000542e ldr r1, [sp, 0x24] | r1 = var_24h_2;
0x00005430 b 0x53ee | goto label_0;
| label_12:
0x00005432 blx 0x1968 | log_get_max_level ();
0x00005436 and r3, sb, 7 | r3 = sb & 7;
0x0000543a cmp r0, r3 |
| if (r0 >= r3) {
0x0000543c blt 0x545a |
0x0000543e ldr r3, [r4] | r3 = *(r4);
0x00005440 mov r1, sl | r1 = sl;
0x00005442 ldr r2, [sp, 0x18] | r2 = var_18h_2;
0x00005444 mov r0, sb | r0 = sb;
0x00005446 str r3, [sp, 8] | var_8h_3 = r3;
0x00005448 ldr r3, [sp, 0x1c] | r3 = var_1ch_4;
0x0000544a str r3, [sp, 4] | var_4h_3 = r3;
0x0000544c ldr r3, [pc, 0xa0] |
0x0000544e add r3, pc | r3 = 0xa942;
0x00005450 str r3, [sp] | *(sp) = r3;
0x00005452 mov.w r3, 0x2cc | r3 = 0x2cc;
0x00005456 blx 0x1cb4 | fcn_00001cb4 ();
| }
| label_10:
0x0000545a adds r6, 1 | r6++;
0x0000545c cmp r5, 0 |
| if (r5 != 0) {
0x0000545e bne 0x53a8 | goto label_1;
| }
0x00005460 b 0x53ec | goto label_2;
| label_11:
0x00005462 ldrd r1, lr, [r4, 0x10] | __asm ("ldrd r1, lr, [r4, 0x10]");
0x00005466 movw r3, 0x2c9 | r3 = 0x2c9;
0x0000546a ldr r0, [pc, 0x88] |
0x0000546c mov r2, fp | r2 = fp;
0x0000546e ubfx sl, r1, 8, 0xc | sl = (r1 >> 8) & ((1 << 0xc) - 1);
0x00005472 and.w ip, lr, r8 |
0x00005476 orr.w ip, ip, sl |
0x0000547a add r0, pc | r0 = 0xa974;
0x0000547c str.w ip, [sp, 0xc] | __asm ("str.w ip, [var_ch_3]");
0x00005480 lsr.w ip, r1, 0xc |
0x00005484 uxtb r1, r1 | r1 = (int8_t) r1;
0x00005486 orr.w ip, ip, lr, lsl 20 |
0x0000548a bic ip, ip, 0xff | ip = BIT_MASK (ip, 0xff);
0x0000548e orr.w r1, ip, r1 | r1 = ip | r1;
0x00005492 str r1, [sp, 0x10] | var_10h_2 = r1;
0x00005494 ldr r1, [r4] | r1 = *(r4);
0x00005496 str r0, [sp, 4] | var_4h_3 = r0;
0x00005498 ldr r0, [pc, 0x5c] |
0x0000549a str r1, [sp, 8] | var_8h_3 = r1;
0x0000549c movs r1, 0 | r1 = 0;
0x0000549e add r0, pc | r0 = 0xa99a;
0x000054a0 str r0, [sp] | *(sp) = r0;
0x000054a2 movs r0, 6 | r0 = 6;
0x000054a4 blx 0x1cb4 | fcn_00001cb4 ();
0x000054a8 b 0x53d0 | goto label_3;
| label_4:
0x000054aa ldr r1, [pc, 0x50] |
0x000054ac movw r2, 0x33b | r2 = 0x33b;
0x000054b0 ldr r3, [pc, 0x4c] |
0x000054b2 ldr r0, [pc, 0x50] |
0x000054b4 add r1, pc | r1 = 0xa9b6;
0x000054b6 add r3, pc | r3 = 0xa9ba;
0x000054b8 adds r1, 7 | r1 += 7;
0x000054ba add r0, pc | r0 = 0xa9c4;
0x000054bc blx 0x1b88 | fcn_00001b88 ();
| label_14:
0x000054c0 blx 0x19b0 | sd_device_enumerator_unref ();
0x000054c4 ldr r1, [sp, 0x24] | r1 = var_24h_2;
0x000054c6 b 0x53ee | goto label_0;
| label_13:
0x000054c8 blx 0x1c9c | fcn_00001c9c ();
0x000054cc cmp r3, 0x5c |
0x000054ce movs r1, r0 | r1 = r0;
0x000054d0 lsls r4, r6, 7 | r4 = r6 << 7;
0x000054d2 movs r0, r0 |
0x000054d4 asrs r0, r5, 0x1a | r0 = r5 >> 0x1a;
0x000054d6 movs r0, r0 |
0x000054d8 adds r4, r4, r4 | r4 += r4;
0x000054da movs r0, r0 |
0x000054dc asrs r6, r3, 7 | r6 = r3 >> 7;
0x000054de movs r0, r0 |
0x000054e0 asrs r0, r1, 6 | r0 = r1 >> 6;
0x000054e2 movs r0, r0 |
0x000054e4 asrs r0, r0, 6 | r0 >>= 6;
0x000054e6 movs r0, r0 |
0x000054e8 adds r0, r2, r2 | r0 = r2 + r2;
0x000054ea movs r0, r0 |
0x000054ec cmp r1, 0xf6 |
0x000054ee movs r1, r0 | r1 = r0;
0x000054f0 subs r6, r3, r1 | r6 = r3 - r1;
0x000054f2 movs r0, r0 |
0x000054f4 asrs r6, r3, 0x1e | r6 = r3 >> 0x1e;
0x000054f6 movs r0, r0 |
0x000054f8 subs r6, r1, r0 | r6 = r1 - r0;
0x000054fa movs r0, r0 |
0x000054fc asrs r0, r5, 1 | r0 = r5 >> 1;
0x000054fe movs r0, r0 |
0x00005500 adds r6, r5, r0 | r6 = r5 + r0;
0x00005502 movs r0, r0 |
0x00005504 asrs r6, r0, 0x12 | r6 = r0 >> 0x12;
0x00005506 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/systemd/systemd-shutdown @ 0x5508 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00005508 () | void fcn_00005508 (uint32_t arg1, int16_t arg2) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h_2;
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_1ch_3;
| int16_t var_20h_2;
| int16_t var_24h_3;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_44h;
| r0 = arg1;
| r1 = arg2;
0x00005508 blmi 0xfee17fec | __asm ("blmi 0xfee17fec");
0x0000550c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00005510 sub sp, 0x4c |
0x00005512 add r2, pc | r2 += pc;
0x00005514 str r1, [sp, 0x1c] | var_1ch_3 = r1;
0x00005516 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00005518 ldr r3, [r3] | r3 = *(r3);
0x0000551a str r3, [sp, 0x44] | var_44h = r3;
0x0000551c mov.w r3, 0 | r3 = 0;
0x00005520 cmp r0, 0 |
| if (var_0h_2 == ) {
0x00005522 beq.w 0x577a | goto label_7;
| }
0x00005526 mov r7, r0 | r7 = r0;
0x00005528 movs r5, 0 | r5 = 0;
0x0000552a add r0, sp, 0x30 | r0 += var_30h;
0x0000552c strd r5, r5, [sp, 0x2c] | __asm ("strd r5, r5, [sp, 0x2c]");
0x00005530 blx 0x1920 | r0 = sd_device_enumerator_new ();
0x00005534 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 < r0) {
0x00005536 blt.w 0x56a0 | goto label_8;
| }
0x0000553a ldr r0, [sp, 0x30] | r0 = var_30h;
0x0000553c blx 0x1e28 | r0 = fcn_00001e28 ();
0x00005540 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 < r0) {
0x00005542 blt.w 0x56a0 | goto label_8;
| }
0x00005546 ldr r1, [pc, 0x2a8] |
0x00005548 movs r2, 1 | r2 = 1;
0x0000554a ldr r0, [sp, 0x30] | r0 = var_30h;
0x0000554c add r1, pc | r1 = 0xad42;
0x0000554e blx 0x1950 | r0 = sd_device_enumerator_add_match_subsystem ()
0x00005552 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 < r0) {
0x00005554 blt.w 0x56a0 | goto label_8;
| }
0x00005558 ldr r1, [pc, 0x298] |
0x0000555a ldr r0, [sp, 0x30] | r0 = var_30h;
0x0000555c add r1, pc | r1 = 0xad54;
0x0000555e blx 0x1914 | r0 = sd_device_enumerator_add_match_sysname ();
0x00005562 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 < r0) {
0x00005564 blt.w 0x56a0 | goto label_8;
| }
0x00005568 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0000556a add r6, sp, 0x38 | r6 += var_38h;
0x0000556c blx 0x198c | sd_device_enumerator_get_device_first ();
0x00005570 add.w r8, sp, 0x34 | r8 += var_34h;
0x00005574 mov r4, r0 | r4 = r0;
0x00005576 mov sb, r7 | sb = r7;
| if (r0 == 0) {
0x00005578 cbz r0, 0x55d6 | goto label_9;
| }
| do {
0x0000557a mov r1, r6 | r1 = r6;
0x0000557c mov r0, r4 | r0 = r4;
0x0000557e blx 0x1c30 | r0 = fcn_00001c30 ();
0x00005582 cmp r0, 0 |
| if (r0 >= 0) {
0x00005584 blt 0x55c8 |
0x00005586 mov r1, r8 | r1 = r8;
0x00005588 mov r0, r4 | r0 = r4;
0x0000558a blx 0x1938 | r0 = sd_device_get_devname ();
0x0000558e cmp r0, 0 |
| if (r0 < 0) {
0x00005590 blt 0x55c8 | goto label_10;
| }
0x00005592 ldr r0, [sp, 0x34] | r0 = var_34h;
0x00005594 blx 0x1c78 | r0 = fcn_00001c78 ();
0x00005598 mov r7, r0 | r7 = r0;
0x0000559a cmp r0, 0 |
| if (r0 == 0) {
0x0000559c beq 0x5696 | goto label_11;
| }
0x0000559e movs r0, 0x20 | r0 = 0x20;
0x000055a0 blx 0x1c84 | r0 = fcn_00001c84 ();
0x000055a4 mov r4, r0 | r4 = r0;
0x000055a6 cmp r0, 0 |
| if (r0 == 0) {
0x000055a8 beq 0x5696 | goto label_11;
| }
0x000055aa movs r2, 0x20 | r2 = 0x20;
0x000055ac movs r1, 0 | r1 = 0;
0x000055ae ldrd sl, fp, [sp, 0x38] | __asm ("ldrd sl, fp, [var_38h]");
0x000055b2 blx 0x19c8 | memset (r0, r1, r2);
0x000055b6 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000055b8 strd sl, fp, [r4, 0x10] | __asm ("strd sl, fp, [r4, 0x10]");
0x000055bc str r7, [r4] | *(r4) = r7;
0x000055be str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
| if (r3 != 0) {
0x000055c0 cbz r3, 0x55c4 |
0x000055c2 str r4, [r3, 0x1c] | *((r3 + 0x1c)) = r4;
| }
0x000055c4 str r5, [r4, 0x1c] | *((r4 + 0x1c)) = r5;
0x000055c6 str r4, [sp, 0x2c] | var_2ch = r4;
| }
| label_10:
0x000055c8 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000055ca blx 0x1c18 | r0 = fcn_00001c18 ();
0x000055ce mov r4, r0 | r4 = r0;
0x000055d0 cmp r0, 0 |
0x000055d2 bne 0x557a |
| } while (r0 != 0);
0x000055d4 mov r7, sb | r7 = sb;
| label_9:
0x000055d6 ldr r0, [sp, 0x30] | r0 = var_30h;
| if (r0 != 0) {
0x000055d8 cbz r0, 0x55de |
0x000055da blx 0x19b0 | sd_device_enumerator_unref ();
| }
0x000055de ldr r0, [pc, 0x218] |
0x000055e0 mov r1, r6 | r1 = r6;
0x000055e2 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000055e6 add r0, pc | r0 = 0xade4;
0x000055e8 vstr d16, [sp, 0x38] | __asm ("vstr d16, [sp, 0x38]");
0x000055ec blx 0x1c48 | fcn_00001c48 ();
0x000055f0 ldr r6, [sp, 0x2c] | r6 = var_2ch;
0x000055f2 mov r4, r6 | r4 = r6;
0x000055f4 cmp r6, 0 |
| if (r6 == 0) {
0x000055f6 beq 0x56ba | goto label_12;
| }
0x000055f8 ldr r3, [pc, 0x200] |
0x000055fa mov.w sb, 0xf000 | sb = 0xf000;
0x000055fe mov.w fp, 0x80 |
0x00005602 movs r4, 0 | r4 = 0;
0x00005604 movt sb, 0xffff | sb = (sb & 0xFFFF) | 0xffff0000;
0x00005608 movt fp, 8 |
0x0000560c add r3, pc | r3 = 0xae0c;
0x0000560e adds r3, 7 | r3 += 7;
0x00005610 str r3, [sp, 0x20] | var_20h_2 = r3;
0x00005612 ldr r3, [pc, 0x1ec] |
0x00005614 add r3, pc | r3 = 0xae1a;
0x00005616 adds r3, 7 | r3 += 7;
0x00005618 str r3, [sp, 0x24] | var_24h_3 = r3;
| do {
| label_1:
0x0000561a ldrd r1, r2, [sp, 0x38] | __asm ("ldrd r1, r2, [var_38h]");
0x0000561e mov r5, r6 | r5 = r6;
0x00005620 ldrd sl, r8, [r5, 0x10] | __asm ("ldrd sl, r8, [r5, 0x10]");
0x00005624 ldr r6, [r6, 0x18] | r6 = *((r6 + 0x18));
0x00005626 ubfx r0, r1, 8, 0xc | r0 = (r1 >> 8) & ((1 << 0xc) - 1);
0x0000562a and.w r3, r2, sb | r3 = r2 & sb;
0x0000562e orrs r3, r0 | r3 |= r0;
| if (r3 != r0) {
0x00005630 beq 0x563a |
0x00005632 cmp r2, r8 |
0x00005634 it eq |
| if (r2 == r8) {
0x00005636 cmpeq r1, sl | __asm ("cmpeq r1, sl");
| }
| if (r2 == r8) {
0x00005638 beq 0x56fc | goto label_5;
| }
| }
0x0000563a blx 0x1968 | r0 = log_get_max_level ();
0x0000563e cmp r0, 5 |
| if (r0 > 5) {
0x00005640 bgt 0x5704 | goto label_13;
| }
| label_3:
0x00005642 ubfx sl, sl, 8, 0xc | sl = (sl >> 8) & ((1 << 0xc) - 1);
0x00005646 and.w r8, r8, sb | r8 &= sb;
0x0000564a orrs.w r8, r8, sl | r8 |= sl;
| if (r8 == r8) {
0x0000564e beq.w 0x57b0 | goto label_14;
| }
0x00005652 ldr r0, [r5] | r0 = *(r5);
0x00005654 cmp r0, 0 |
| if (r0 == 0) {
0x00005656 beq.w 0x57c6 | goto label_15;
| }
0x0000565a mov r1, fp | r1 = fp;
0x0000565c blx 0x1bc4 | r0 = fcn_00001bc4 ();
0x00005660 subs.w r8, r0, 0 | r8 = r0 - 0;
| if (r8 < r0) {
0x00005664 blt 0x56d8 | goto label_16;
| }
0x00005666 blx 0x19d4 | r0 = fsync ();
0x0000566a cmp r0, 0 |
| if (r0 < 0) {
0x0000566c blt 0x574e | goto label_17;
| }
| label_4:
0x0000566e movs r2, 0 | r2 = 0;
0x00005670 movw r1, 0x932 | r1 = 0x932;
0x00005674 mov r0, r8 | r0 = r8;
0x00005676 blx 0x1aec | r0 = fcn_00001aec ();
0x0000567a cmp r0, 0 |
| if (r0 < 0) {
0x0000567c blt 0x56d8 | goto label_16;
| }
0x0000567e mov r0, r8 | r0 = r8;
0x00005680 blx 0x19ec | safe_close ();
| label_0:
0x00005684 movs r3, 1 | r3 = 1;
0x00005686 mov r1, r5 | r1 = r5;
0x00005688 add r0, sp, 0x2c | r0 += var_2ch;
0x0000568a strb r3, [r7] | *(r7) = r3;
0x0000568c bl 0x3c5c | fcn_00003c5c (r0, r1);
0x00005690 cmp r6, 0 |
0x00005692 bne 0x561a |
| } while (r6 != 0);
0x00005694 b 0x56a8 | goto label_2;
| label_11:
0x00005696 mov r0, r7 | r0 = r7;
0x00005698 mvn r4, 0xb | r4 = ~0xb;
0x0000569c blx 0x1a50 | fcn_00001a50 ();
| label_8:
0x000056a0 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000056a2 cmp r0, 0 |
| if (r0 != 0) {
0x000056a4 bne.w 0x57dc | goto label_18;
| }
| label_2:
0x000056a8 ldr r1, [sp, 0x2c] | r1 = var_2ch;
| if (r1 == 0) {
| label_6:
0x000056aa cbz r1, 0x56ba | goto label_12;
| }
0x000056ac add r5, sp, 0x2c | r5 += var_2ch;
| do {
0x000056ae mov r0, r5 | r0 = r5;
0x000056b0 bl 0x3c5c | fcn_00003c5c (r0, r1);
0x000056b4 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000056b6 cmp r1, 0 |
0x000056b8 bne 0x56ae |
| } while (r1 != 0);
| label_12:
0x000056ba ldr r2, [pc, 0x148] |
0x000056bc ldr r3, [pc, 0x12c] | r3 = *(0x57ec);
0x000056be add r2, pc | r2 = 0xaec8;
0x000056c0 ldr r3, [r2, r3] | r3 = *(0xaec8);
0x000056c2 ldr r2, [r3] | r2 = *(0xaec8);
0x000056c4 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000056c6 eors r2, r3 | r2 ^= r3;
0x000056c8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000056cc bne.w 0x57e4 | goto label_19;
| }
0x000056d0 mov r0, r4 | r0 = r4;
0x000056d2 add sp, 0x4c |
0x000056d4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_16:
0x000056d8 blx 0x1dec | r0 = fcn_00001dec ();
0x000056dc ldr r3, [r0] | r3 = *(r0);
0x000056de mov r0, r8 | r0 = r8;
0x000056e0 rsb.w sl, r3, 0 | sl = r3 - ;
0x000056e4 blx 0x19ec | safe_close ();
0x000056e8 cmp.w sl, 0 |
| if (sl >= 0) {
0x000056ec bge 0x5684 | goto label_0;
| }
0x000056ee blx 0x1968 | log_get_max_level ();
0x000056f2 ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x000056f4 and r3, r3, 7 | r3 &= 7;
0x000056f8 cmp r0, r3 |
| if (r0 >= r3) {
0x000056fa bge 0x5790 | goto label_20;
| }
| label_5:
0x000056fc adds r4, 1 | r4++;
0x000056fe cmp r6, 0 |
| if (r6 != 0) {
0x00005700 bne 0x561a | goto label_1;
| }
0x00005702 b 0x56a8 | goto label_2;
| label_13:
0x00005704 lsr.w r3, sl, 0xc | r3 = sl >> 0xc;
0x00005708 uxtb.w r2, sl | r2 = (int8_t) sl;
0x0000570c orr.w r3, r3, r8, lsl 20 | r3 |= (r8 << 20);
0x00005710 ubfx sl, sl, 8, 0xc | sl = (sl >> 8) & ((1 << 0xc) - 1);
0x00005714 and.w r8, r8, sb | r8 &= sb;
0x00005716 lsrs r1, r1, 0x20 | r1 >>= 0x20;
0x00005718 bic r3, r3, 0xff | r3 = BIT_MASK (r3, 0xff);
0x0000571c movs r1, 0 | r1 = 0;
0x0000571e orrs r3, r2 | r3 |= r2;
0x00005720 ldr r2, [pc, 0xe4] |
0x00005722 str r3, [sp, 0x10] | var_10h = r3;
0x00005724 orr.w r3, sl, r8 | r3 = sl | r8;
0x00005728 str r3, [sp, 0xc] | var_ch_2 = r3;
0x0000572a movs r0, 6 | r0 = 6;
0x0000572c ldr r3, [r5] | r3 = *(r5);
0x0000572e add r2, pc | r2 = 0xaf3a;
0x00005730 adds r2, 7 | r2 += 7;
0x00005732 str r3, [sp, 8] | var_8h_2 = r3;
0x00005734 ldr r3, [pc, 0xd4] |
0x00005736 add r3, pc | r3 = 0xaf46;
0x00005738 str r3, [sp, 4] | var_4h_2 = r3;
0x0000573a ldr r3, [pc, 0xd4] |
0x0000573c add r3, pc | r3 = 0xaf52;
0x0000573e str r3, [sp] | *(sp) = r3;
0x00005740 mov.w r3, 0x2e8 | r3 = 0x2e8;
0x00005744 blx 0x1cb4 | fcn_00001cb4 ();
0x00005748 ldrd sl, r8, [r5, 0x10] | __asm ("ldrd sl, r8, [r5, 0x10]");
0x0000574c b 0x5642 | goto label_3;
| label_17:
0x0000574e blx 0x1968 | r0 = log_get_max_level ();
0x00005752 cmp r0, 6 |
| if (r0 <= 6) {
0x00005754 ble 0x566e | goto label_4;
| }
0x00005756 blx 0x1dec | fcn_00001dec ();
0x0000575a ldr r3, [r5] | r3 = *(r5);
0x0000575c ldr r1, [r0] | r1 = *(r0);
0x0000575e movs r0, 7 | r0 = 7;
0x00005760 ldr r2, [sp, 0x24] | r2 = var_24h_3;
0x00005762 str r3, [sp, 8] | var_8h_2 = r3;
0x00005764 ldr r3, [pc, 0xac] |
0x00005766 add r3, pc | r3 = 0xaf7e;
0x00005768 str r3, [sp, 4] | var_4h_2 = r3;
0x0000576a ldr r3, [pc, 0xac] |
0x0000576c add r3, pc | r3 = 0xaf8a;
0x0000576e str r3, [sp] | *(sp) = r3;
0x00005770 movw r3, 0x1f5 | r3 = 0x1f5;
0x00005774 blx 0x1cb4 | fcn_00001cb4 ();
0x00005778 b 0x566e | goto label_4;
| label_7:
0x0000577a ldr r1, [pc, 0xa0] |
0x0000577c movw r2, 0x34a | r2 = 0x34a;
0x00005780 ldr r3, [pc, 0x9c] |
0x00005782 ldr r0, [pc, 0xa0] |
0x00005784 add r1, pc | r1 = 0xafa6;
0x00005786 add r3, pc | r3 = 0xafaa;
0x00005788 adds r1, 7 | r1 += 7;
0x0000578a add r0, pc | r0 = 0xafb4;
0x0000578c blx 0x1b88 | fcn_00001b88 ();
| label_20:
0x00005790 ldr r3, [r5] | r3 = *(r5);
0x00005792 mov r1, sl | r1 = sl;
0x00005794 ldrd r0, r2, [sp, 0x1c] | __asm ("ldrd r0, r2, [var_1ch_3]");
0x00005798 str r3, [sp, 8] | var_8h_2 = r3;
0x0000579a ldr r3, [pc, 0x8c] |
0x0000579c add r3, pc | r3 = 0xafca;
0x0000579e str r3, [sp, 4] | var_4h_2 = r3;
0x000057a0 ldr r3, [pc, 0x88] |
0x000057a2 add r3, pc | r3 = 0xafd2;
0x000057a4 str r3, [sp] | *(sp) = r3;
0x000057a6 movw r3, 0x2eb | r3 = 0x2eb;
0x000057aa blx 0x1cb4 | fcn_00001cb4 ();
0x000057ae b 0x56fc | goto label_5;
| label_14:
0x000057b0 ldr r1, [pc, 0x7c] |
0x000057b2 movw r2, 0x1ed | r2 = 0x1ed;
0x000057b6 ldr r3, [pc, 0x7c] |
0x000057b8 ldr r0, [pc, 0x7c] |
0x000057ba add r1, pc | r1 = 0xafee;
0x000057bc add r3, pc | r3 = 0xaff6;
0x000057be adds r1, 7 | r1 += 7;
0x000057c0 add r0, pc | r0 = 0xaffc;
0x000057c2 blx 0x1b88 | fcn_00001b88 ();
| label_15:
0x000057c6 ldr r1, [pc, 0x74] |
0x000057c8 mov.w r2, 0x1ee | r2 = 0x1ee;
0x000057cc ldr r3, [pc, 0x70] |
0x000057ce ldr r0, [pc, 0x74] |
0x000057d0 add r1, pc | r1 = 0xb012;
0x000057d2 add r3, pc | r3 = 0xb016;
0x000057d4 adds r1, 7 | r1 += 7;
0x000057d6 add r0, pc | r0 = 0xb020;
0x000057d8 blx 0x1b88 | fcn_00001b88 ();
| label_18:
0x000057dc blx 0x19b0 | sd_device_enumerator_unref ();
0x000057e0 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000057e2 b 0x56aa | goto label_6;
| label_19:
0x000057e4 blx 0x1c9c | r0 = fcn_00001c9c ();
0x000057e8 cmp r0, 0xe6 |
0x000057ea movs r1, r0 | r1 = r0;
0x000057ec lsls r4, r6, 7 | r4 = r6 << 7;
0x000057ee movs r0, r0 |
0x000057f0 asrs r0, r7, 0x10 | r0 = r7 >> 0x10;
0x000057f2 movs r0, r0 |
0x000057f4 asrs r4, r6, 0x1b | r4 = r6 >> 0x1b;
0x000057f6 movs r0, r0 |
0x000057f8 lsrs r6, r5, 0x1d | r6 = r5 >> 0x1d;
0x000057fa movs r0, r0 |
0x000057fc lsrs r0, r2, 0x1c | r0 = r2 >> 0x1c;
0x000057fe movs r0, r0 |
0x00005800 lsrs r0, r1, 0x1c | r0 = r1 >> 0x1c;
0x00005802 movs r0, r0 |
0x00005804 movs r7, 0x3a | r7 = 0x3a;
0x00005806 movs r1, r0 | r1 = r0;
0x00005808 lsrs r6, r5, 0x17 | r6 = r5 >> 0x17;
0x0000580a movs r0, r0 |
0x0000580c asrs r6, r3, 0x14 | r6 = r3 >> 0x14;
0x0000580e movs r0, r0 |
0x00005810 asrs r0, r7, 0x1b | r0 = r7 >> 0x1b;
0x00005812 movs r0, r0 |
0x00005814 asrs r6, r0, 0x14 | r6 = r0 >> 0x14;
0x00005816 movs r0, r0 |
0x00005818 asrs r0, r7, 0x19 | r0 = r7 >> 0x19;
0x0000581a movs r0, r0 |
0x0000581c lsrs r0, r3, 0x16 | r0 = r3 >> 0x16;
0x0000581e movs r0, r0 |
0x00005820 asrs r2, r0, 0x19 | r2 = r0 >> 0x19;
0x00005822 movs r0, r0 |
0x00005824 asrs r6, r6, 6 | r6 >>= 6;
0x00005826 movs r0, r0 |
0x00005828 asrs r0, r0, 0x14 | r0 >>= 0x14;
0x0000582a movs r0, r0 |
0x0000582c asrs r2, r2, 0x1a | r2 >>= 0x1a;
0x0000582e movs r0, r0 |
0x00005830 lsrs r2, r4, 0x15 | r2 = r4 >> 0x15;
0x00005832 movs r0, r0 |
0x00005834 asrs r4, r3, 0x14 | r4 = r3 >> 0x14;
0x00005836 movs r0, r0 |
0x00005838 lsrs r0, r4, 0x16 | r0 = r4 >> 0x16;
0x0000583a movs r0, r0 |
0x0000583c lsrs r4, r1, 0x15 | r4 = r1 >> 0x15;
0x0000583e movs r0, r0 |
0x00005840 asrs r6, r0, 0x14 | r6 = r0 >> 0x14;
0x00005842 movs r0, r0 |
0x00005844 lsrs r2, r4, 0x16 | r2 = r4 >> 0x16;
0x00005846 movs r0, r0 |
| /* [14] -r-x section size 8 named .fini */
0x00005848 ands r0, r1 | r0 &= r1;
0x0000584a invalid |
| }
[*] Function system used 6 times systemd-shutdown