[*] Binary protection state of systemd-run
Full RELRO Canary found NX enabled PIE enabled RPATH No RUNPATH No Symbols
[*] Function system tear down of systemd-run
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/systemd-run @ 0x593c).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/systemd-run @ 0x7510 */
| #include <stdint.h>
|
; (fcn) fcn.00007510 () | void fcn_00007510 (int16_t arg_1ch, uint32_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00007510 mvnsmi lr, 0xb4000 | __asm ("mvnsmi lr, 0xb4000");
0x00007514 cmp r0, r2 |
0x00007516 mov r5, r1 | r5 = r1;
0x00007518 mov r4, r0 | r4 = r0;
0x0000751a sbcs.w r1, r5, r3 | __asm ("sbcs.w r1, r5, r3");
0x0000751e it lo |
| if (r0 >= r2) {
0x00007520 movlo r0, 0 | r0 = 0;
| }
0x00007522 ldr r7, [sp, 0x1c] | r7 = *(arg_1ch);
0x00007524 it lo |
| if (r0 >= r2) {
0x00007526 movlo r1, r0 | r1 = r0;
| }
| if (r0 <= r2) {
0x00007528 blo 0x75f0 | goto label_3;
| }
0x0000752a clz r6, r3 | r6 &= r3;
0x0000752e cmp r3, 0 |
| if (r3 == 0) {
0x00007530 beq 0x7602 | goto label_4;
| }
0x00007532 clz r1, r5 | r1 &= r5;
0x00007536 cmp r5, 0 |
| if (r5 == 0) {
0x00007538 beq 0x75fa | goto label_2;
| }
| label_1:
0x0000753a subs r6, r6, r1 | r6 -= r1;
0x0000753c sub.w ip, r6, 0x20 |
0x00007540 lsls r3, r6 | r3 <<= r6;
0x00007542 lsl.w r1, r2, ip | r1 = r2 << ip;
0x00007546 rsb.w lr, r6, 0x20 | lr = 0x20 - r6;
0x0000754a orrs r3, r1 | r3 |= r1;
0x0000754c lsr.w r1, r2, lr | r1 = r2 >> lr;
0x00007550 lsls r2, r6 | r2 <<= r6;
0x00007552 orrs r3, r1 | r3 |= r1;
0x00007554 cmp r4, r2 |
0x00007556 sbcs.w r1, r5, r3 | __asm ("sbcs.w r1, r5, r3");
0x0000755a itt lo |
| if (r4 >= r2) {
0x0000755c movlo r0, 0 | r0 = 0;
| }
| if (r4 >= r2) {
0x0000755e movlo r1, r0 | r1 = r0;
| }
| if (r4 > r2) {
0x00007560 blo 0x757a |
0x00007562 movs r0, 1 | r0 = 1;
0x00007564 subs r4, r4, r2 | r4 -= r2;
0x00007566 lsl.w r1, r0, ip | r1 = r0 << ip;
0x0000756a lsr.w r8, r0, lr | r8 = r0 >> lr;
0x0000756e lsl.w r0, r0, r6 | r0 <<= r6;
0x00007572 sbc.w r5, r5, r3 | __asm ("sbc.w r5, r5, r3");
0x00007576 orr.w r1, r1, r8 | r1 |= r8;
| }
| if (r6 == 0) {
0x0000757a cbz r6, 0x75f0 | goto label_3;
| }
0x0000757c lsrs r2, r2, 1 | r2 >>= 1;
0x0000757e mov r8, r6 | r8 = r6;
0x00007580 orr.w r2, r2, r3, lsl 31 | r2 |= (r3 << 31);
0x00007584 lsrs r3, r3, 1 | r3 >>= 1;
0x00007586 b 0x759e |
| while (r4 >= r2) {
0x00007588 subs r4, r4, r2 | r4 -= r2;
0x0000758a sbc.w r5, r5, r3 | __asm ("sbc.w r5, r5, r3");
0x0000758e adds r4, r4, r4 | r4 += r4;
0x00007590 adcs r5, r5 | __asm ("adcs r5, r5");
0x00007592 adds r4, 1 | r4++;
0x00007594 adc r5, r5, 0 | __asm ("adc r5, r5, 0");
0x00007598 subs.w r8, r8, 1 | r8--;
| if (r8 == r8) {
0x0000759c beq 0x75b0 | goto label_5;
| }
| label_0:
0x0000759e cmp r4, r2 |
0x000075a0 sbcs.w sb, r5, r3 | __asm ("sbcs.w sb, r5, r3");
0x000075a4 bhs 0x7588 |
| }
0x000075a6 adds r4, r4, r4 | r4 += r4;
0x000075a8 adcs r5, r5 | __asm ("adcs r5, r5");
0x000075aa subs.w r8, r8, 1 | r8--;
| if (r8 != r8) {
0x000075ae bne 0x759e | goto label_0;
| }
| label_5:
0x000075b0 adds r0, r0, r4 | r0 += r4;
0x000075b2 lsl.w lr, r5, lr | lr = r5 << lr;
0x000075b6 lsr.w r4, r4, r6 | r4 >>= r6;
0x000075ba lsr.w ip, r5, ip |
0x000075be adc.w r1, r1, r5 | __asm ("adc.w r1, r1, r5");
0x000075c2 orr.w r4, r4, lr | r4 |= lr;
0x000075c6 lsrs r5, r6 | r5 >>= r6;
0x000075c8 orr.w r4, r4, ip | r4 |= ip;
0x000075cc sub.w ip, r6, 0x20 |
0x000075d0 lsl.w ip, r4, ip |
0x000075d4 lsl.w r2, r5, r6 | r2 = r5 << r6;
0x000075d8 rsb.w r3, r6, 0x20 | r3 = 0x20 - r6;
0x000075dc orr.w r2, r2, ip | r2 |= ip;
0x000075e0 lsr.w r3, r4, r3 | r3 = r4 >> r3;
0x000075e4 orrs r2, r3 | r2 |= r3;
0x000075e6 lsl.w r3, r4, r6 | r3 = r4 << r6;
0x000075ea subs r0, r0, r3 | r0 -= r3;
0x000075ec sbc.w r1, r1, r2 | __asm ("sbc.w r1, r1, r2");
| if (r7 != 0) {
| label_3:
0x000075f0 cbz r7, 0x75f6 |
0x000075f2 strd r4, r5, [r7] | __asm ("strd r4, r5, [r7]");
| }
0x000075f6 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_2:
0x000075fa clz r1, r4 | r1 &= r4;
0x000075fe adds r1, 0x20 | r1 += 0x20;
0x00007600 b 0x753a | goto label_1;
| label_4:
0x00007602 clz r6, r2 | r6 &= r2;
0x00007606 clz r1, r5 | r1 &= r5;
0x0000760a adds r6, 0x20 | r6 += 0x20;
0x0000760c cmp r5, 0 |
| if (r5 != 0) {
0x0000760e bne 0x753a | goto label_1;
| }
0x00007610 b 0x75fa | goto label_2;
| }
[*] Function system used 4 times systemd-run