[*] Binary protection state of libsystemd.so.0.32.0
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function popen tear down of libsystemd.so.0.32.0
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsystemd.so.0.32.0 @ 0x23fd4 */
| #include <stdint.h>
|
; (fcn) fcn.00023fd4 () | void fcn_00023fd4 (int16_t arg_30h, int16_t arg_34h, int16_t arg_38h, uint32_t arg1, uint32_t arg2, uint32_t arg3, int16_t arg4) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00023fd4 mvnsmi lr, sp, lsr 18 | __asm ("mvnsmi lr, sp, lsr 18");
0x00023fd8 sub sp, 0x18 |
0x00023fda ldr r7, [sp, 0x30] | r7 = *(arg_30h);
0x00023fdc cmp r0, 0 |
| if (arg_30h == ) {
0x00023fde beq 0x2409a | goto label_0;
| }
0x00023fe0 mov r4, r1 | r4 = r1;
0x00023fe2 cmp r1, 0 |
| if (r1 == 0) {
0x00023fe4 beq 0x240b0 | goto label_1;
| }
0x00023fe6 mov r6, r2 | r6 = r2;
0x00023fe8 cmp r2, 0 |
| if (r2 == 0) {
0x00023fea beq 0x240c6 | goto label_2;
| }
0x00023fec mov r8, r3 | r8 = r3;
0x00023fee cmp r3, 0 |
| if (r3 == 0) {
0x00023ff0 beq 0x240dc | goto label_3;
| }
0x00023ff2 cmp r7, 0 |
| if (r7 == 0) {
0x00023ff4 beq 0x240f2 | goto label_4;
| }
0x00023ff6 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00023ff8 mov r5, r0 | r5 = r0;
0x00023ffa ldr.w r3, [r3, 1] | r3 = *((r3 + 1));
0x00023ffc adds r0, 1 | r0++;
0x00023ffe lsls r2, r3, 0x17 | r2 = r3 << 0x17;
| if (r2 < r3) {
0x00024000 bpl 0x2400c |
0x00024002 mov r0, r1 | r0 = r1;
0x00024004 blx 0xe4fc | r0 = fcn_0000e4fc ();
0x00024008 cmp r0, 0 |
| if (r0 < 0) {
0x0002400a blt 0x24094 | goto label_5;
| }
| }
0x0002400c ldr r2, [pc, 0xfc] |
0x0002400e movs r1, 0x65 | r1 = 0x65;
0x00024010 mov r0, r4 | r0 = r4;
0x00024012 add r2, pc | r2 = 0x48122;
0x00024014 blx 0xe6d8 | r0 = abort ();
0x00024018 cmp r0, 0 |
| if (r0 < 0) {
0x0002401a blt 0x24094 | goto label_5;
| }
0x0002401c ldr r1, [pc, 0xf0] |
0x0002401e mov r0, r4 | r0 = r4;
0x00024020 ldr r2, [r7, 8] | r2 = *((r7 + 8));
0x00024022 add r1, pc | r1 = 0x48136;
0x00024024 blx 0xe2fc | r0 = fcn_0000e2fc ();
0x00024028 cmp r0, 0 |
| if (r0 < 0) {
0x0002402a blt 0x24094 | goto label_5;
| }
0x0002402c ldr r2, [r7, 0xc] | r2 = *((r7 + 0xc));
0x0002402e movs r1, 0x76 | r1 = 0x76;
0x00024030 mov r0, r4 | r0 = r4;
0x00024032 blx 0xe6d8 | r0 = abort ();
0x00024036 cmp r0, 0 |
| if (r0 < 0) {
0x00024038 blt 0x24094 | goto label_5;
| }
0x0002403a ldr r3, [sp, 0x34] | r3 = *(arg_34h);
0x0002403c sub.w r1, r8, 0x20 | r1 = r8 - 0x20;
0x00024040 ldr.w r2, [r8, 0xc] | r2 = *((r8 + 0xc));
0x00024044 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x00024046 ldr.w lr, [r7, 0x18] |
0x0002404a cmp r3, 0 |
| if (r3 == 0) {
0x0002404c beq 0x24108 | goto label_6;
| }
0x0002404e ldr.w ip, [r7, 1] | ip = *((r7 + 1));
0x00024052 tst.w ip, 0x200 |
| if ((ip & 0x200) != 0) {
0x00024056 bne 0x24108 | goto label_6;
| }
0x00024058 ldr r3, [sp, 0x34] | r3 = *(arg_34h);
0x0002405a add r3, lr | r3 += lr;
| do {
0x0002405c strd r2, r0, [sp] | __asm ("strd r2, r0, [sp]");
0x00024060 mov r2, r7 | r2 = r7;
0x00024062 ldr r0, [sp, 0x38] | r0 = *(arg_38h);
0x00024064 str r3, [sp, 0xc] | var_ch = r3;
0x00024066 mov r3, r6 | r3 = r6;
0x00024068 str r4, [sp, 8] | var_8h = r4;
0x0002406a str r0, [sp, 0x10] | var_10h = r0;
0x0002406c mov r0, r5 | r0 = r5;
0x0002406e bl 0x23ac0 | r0 = fcn_00023ac0 (r0, r1, r2, r3);
0x00024072 cmp r0, 0 |
| if (r0 >= 0) {
0x00024074 blt 0x24094 |
0x00024076 ldrb r3, [r5, 0x1d] | r3 = *((r5 + 0x1d));
0x00024078 lsls r3, r3, 0x1e | r3 <<= 0x1e;
0x0002407a it mi |
| if (r3 >= r3) {
0x0002407c movmi r0, 0 | r0 = 0;
| }
| if (r3 < r3) {
0x0002407e bmi 0x24094 | goto label_5;
| }
0x00024080 mov r0, r4 | r0 = r4;
0x00024082 blx 0xd458 | r0 = fcn_0000d458 ();
0x00024086 cmp r0, 0 |
| if (r0 < 0) {
0x00024088 blt 0x24094 | goto label_5;
| }
0x0002408a mov r0, r4 | r0 = r4;
0x0002408c blx 0xd458 | r0 = fcn_0000d458 ();
0x00024090 and.w r0, r0, r0, asr 31 | r0 &= (r0 >> 31);
| }
| label_5:
0x00024094 add sp, 0x18 |
0x00024096 pop.w {r4, r5, r6, r7, r8, pc} |
| label_0:
0x0002409a ldr r1, [pc, 0x78] |
0x0002409c mov.w r2, 0x2c8 | r2 = 0x2c8;
0x000240a0 ldr r3, [pc, 0x74] |
0x000240a2 ldr r0, [pc, 0x78] |
0x000240a4 add r1, pc | r1 = 0x481be;
0x000240a6 add r3, pc | r3 = 0x481c2;
0x000240a8 adds r1, 7 | r1 += 7;
0x000240aa add r0, pc | r0 = 0x481cc;
0x000240ac bl 0x66580 | fcn_00066580 (r0, r1, r2, r3, r4);
| label_1:
0x000240b0 ldr r1, [pc, 0x6c] |
0x000240b2 movw r2, 0x2c9 | r2 = 0x2c9;
0x000240b6 ldr r3, [pc, 0x6c] |
0x000240b8 ldr r0, [pc, 0x6c] |
0x000240ba add r1, pc | r1 = 0x481de;
0x000240bc add r3, pc | r3 = 0x481e6;
0x000240be adds r1, 7 | r1 += 7;
0x000240c0 add r0, pc | r0 = 0x481ec;
0x000240c2 bl 0x66580 | fcn_00066580 (r0, r1, r2, r3, r4);
| label_2:
0x000240c6 ldr r1, [pc, 0x64] |
0x000240c8 movw r2, 0x2ca | r2 = 0x2ca;
0x000240cc ldr r3, [pc, 0x60] |
0x000240ce ldr r0, [pc, 0x64] |
0x000240d0 add r1, pc | r1 = 0x48202;
0x000240d2 add r3, pc | r3 = 0x48206;
0x000240d4 adds r1, 7 | r1 += 7;
0x000240d6 add r0, pc | r0 = 0x48210;
0x000240d8 bl 0x66580 | fcn_00066580 (r0, r1, r2, r3, r4);
| label_3:
0x000240dc ldr r1, [pc, 0x58] |
0x000240de movw r2, 0x2cb | r2 = 0x2cb;
0x000240e2 ldr r3, [pc, 0x58] |
0x000240e4 ldr r0, [pc, 0x58] |
0x000240e6 add r1, pc | r1 = 0x48222;
0x000240e8 add r3, pc | r3 = 0x4822a;
0x000240ea adds r1, 7 | r1 += 7;
0x000240ec add r0, pc | r0 = 0x48230;
0x000240ee bl 0x66580 | fcn_00066580 (r0, r1, r2, r3, r4);
| label_4:
0x000240f2 ldr r1, [pc, 0x50] |
0x000240f4 mov.w r2, 0x2cc | r2 = 0x2cc;
0x000240f8 ldr r3, [pc, 0x4c] |
0x000240fa ldr r0, [pc, 0x50] |
0x000240fc add r1, pc | r1 = 0x48246;
0x000240fe add r3, pc | r3 = 0x4824a;
0x00024100 adds r1, 7 | r1 += 7;
0x00024102 add r0, pc | r0 = 0x48254;
0x00024104 bl 0x66580 | fcn_00066580 (r0, r1, r2, r3, r4);
| label_6:
0x00024108 mov r3, lr | r3 = lr;
0x0002410a b 0x2405c |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsystemd.so.0.32.0 @ 0x419bc */
| #include <stdint.h>
|
; (fcn) fcn.000419bc () | void fcn_000419bc (int16_t arg1) {
| 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_1ch;
| int16_t var_28h;
| int16_t var_1h;
| int16_t var_38h;
| int8_t var_30h;
| int16_t var_64h;
| int16_t var_0h_2;
| int16_t var_90h;
| r0 = arg1;
0x000419bc sub sp, 8 |
0x000419be push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000419c2 sub sp, 0x6c |
0x000419c4 add r1, sp, 0x90 | r1 += var_90h;
0x000419c6 ldr r4, [pc, 0x23c] |
0x000419c8 add.w sl, sp, 0x38 | sl += var_38h;
0x000419cc mov r8, r0 | r8 = r0;
0x000419ce stm.w r1, {r2, r3} | *(r1) = r2;
| *((r1 + 4)) = r3;
0x000419d2 mov r0, sl | r0 = sl;
0x000419d4 ldr r3, [pc, 0x230] | r3 = *(0x41c08);
0x000419d6 add r4, pc | r4 = 0x835e0;
0x000419d8 movs r2, 0x28 | r2 = 0x28;
0x000419da movs r1, 0 | r1 = 0;
0x000419dc add.w sb, sp, 0x28 | sb += var_28h;
0x000419e0 ldr r3, [r4, r3] |
0x000419e2 ldr r3, [r3] | r3 = *(0x835e0);
0x000419e4 str r3, [sp, 0x64] | var_64h = r3;
0x000419e6 mov.w r3, 0 | r3 = 0;
0x000419ea blx 0xe0a4 | fcn_0000e0a4 ();
0x000419ee add r3, sp, 0x90 | r3 += var_90h;
0x000419f0 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x000419f2 stm.w sb, {r0, r1, r2, r3} | *(sb) = r0;
| *((sb + 4)) = r1;
| *((sb + 8)) = r2;
| *((sb + 12)) = r3;
0x000419f6 movs r1, 0 | r1 = 0;
0x000419f8 movs r0, 5 | r0 = 5;
0x000419fa blx 0xe344 | r0 = fcn_0000e344 ();
| if (r0 != 0) {
0x000419fe cbz r0, 0x41a08 |
0x00041a00 ldrb r3, [r0] | r3 = *(r0);
0x00041a02 mov r5, r0 | r5 = r0;
0x00041a04 cmp r3, 0 |
| if (r3 != 0) {
0x00041a06 bne 0x41a90 | goto label_9;
| }
| }
| label_1:
0x00041a08 movs r2, 0x20 | r2 = 0x20;
0x00041a0a mov r0, sl | r0 = sl;
0x00041a0c movs r1, 0 | r1 = 0;
0x00041a0e movs r6, 0 | r6 = 0;
0x00041a10 blx 0xe0a4 | fcn_0000e0a4 ();
0x00041a14 ldr.w r3, [r8, 0x18] | r3 = *((r8 + 0x18));
0x00041a18 ldr.w r2, [r8, 0x20] | r2 = *((r8 + 0x20));
0x00041a1c ldr.w fp, [r8, 0x10] | fp = *((r8 + 0x10));
0x00041a20 mov r7, r3 | r7 = r3;
0x00041a22 str r3, [sp, 0x14] | var_14h = r3;
0x00041a24 cmp r6, r7 |
0x00041a26 mov r3, sl | r3 = sl;
0x00041a28 mov sl, sb | sl = sb;
0x00041a2a mov sb, r2 | sb = r2;
0x00041a2c mov r2, r3 | r2 = r3;
| if (r6 >= r7) {
0x00041a2e bhs 0x41a6e | goto label_2;
| }
| label_0:
0x00041a30 adds r4, r6, r7 | r4 = r6 + r7;
0x00041a32 mov r1, sl | r1 = sl;
0x00041a34 lsrs r4, r4, 1 | r4 >>= 1;
0x00041a36 mla r5, r4, sb, fp | __asm ("mla r5, r4, sb, fp");
0x00041a3a add r5, r8 | r5 += r8;
0x00041a3c subs r3, r5, 1 | r3 = r5 - 1;
0x00041a3e add.w lr, r5, 0xf | lr = r5 + 0xf;
| do {
0x00041a42 ldrb ip, [r1], 1 | ip = *(r1);
| r1++;
0x00041a46 ldrb r0, [r3, 1]! | r0 = *((r3 += 1));
0x00041a4a cmp ip, r0 |
| if (ip <= r0) {
0x00041a4c blo 0x41ae8 | goto label_10;
| }
| if (ip > r0) {
0x00041a4e bhi 0x41a68 | goto label_11;
| }
0x00041a50 cmp lr, r3 |
0x00041a52 bne 0x41a42 |
| } while (lr != r3);
0x00041a54 mov r0, r2 | r0 = r2;
0x00041a56 add.w r1, r5, 0x10 | r1 = r5 + 0x10;
0x00041a5a str r2, [sp, 0x10] | var_10h = r2;
0x00041a5c blx 0xd4a4 | r0 = fcn_0000d4a4 ();
0x00041a60 cmp r0, 0 |
0x00041a62 ldr r2, [sp, 0x10] | r2 = var_10h;
| if (r0 < 0) {
0x00041a64 blt 0x41ae8 | goto label_10;
| }
| if (r0 == 0) {
0x00041a66 beq 0x41af0 | goto label_12;
| }
| label_11:
0x00041a68 adds r6, r4, 1 | r6 = r4 + 1;
0x00041a6a cmp r6, r7 |
| if (r6 <= r7) {
0x00041a6c blo 0x41a30 | goto label_0;
| }
| label_2:
0x00041a6e movs r0, 0 | r0 = 0;
| label_3:
0x00041a70 ldr r2, [pc, 0x198] |
0x00041a72 ldr r3, [pc, 0x194] | r3 = *(0x41c0a);
0x00041a74 add r2, pc | r2 = 0x83684;
0x00041a76 ldr r3, [r2, r3] | r3 = *(0x83684);
0x00041a78 ldr r2, [r3] | r2 = *(0x83684);
0x00041a7a ldr r3, [sp, 0x64] | r3 = var_64h;
0x00041a7c eors r2, r3 | r2 ^= r3;
0x00041a7e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00041a82 bne.w 0x41bfe | goto label_13;
| }
0x00041a86 add sp, 0x6c |
0x00041a88 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00041a8c add sp, 8 |
0x00041a8e bx lr | return;
| label_9:
0x00041a90 ldr r3, [pc, 0x17c] |
0x00041a92 add r3, pc | r3 = 0x836a6;
0x00041a94 ldm.w r3, {r0, r1, r2} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
0x00041a98 add r3, sp, 0x1c | r3 += var_1ch;
0x00041a9a stm.w r3, {r0, r1, r2} | *(r3) = r0;
| *((r3 + 4)) = r1;
| *((r3 + 8)) = r2;
0x00041a9e mov r0, r3 | r0 = r3;
0x00041aa0 mov r1, r5 | r1 = r5;
0x00041aa2 bl 0x6e644 | r0 = fcn_0006e644 (r0, r1);
0x00041aa6 mov r4, r0 | r4 = r0;
0x00041aa8 cmp r0, 0 |
| if (r0 != 0) {
0x00041aaa bne 0x41a08 | goto label_1;
| }
0x00041aac ldr r1, [pc, 0x164] |
0x00041aae mov r0, r5 | r0 = r5;
0x00041ab0 add r1, pc | r1 = 0x836c8;
0x00041ab2 blx 0xd550 | r0 = fcn_0000d550 ();
0x00041ab6 cmp r0, 0x1f |
0x00041ab8 mov r6, r0 | r6 = r0;
| if (r0 < 0x1f) {
0x00041aba bls 0x41b02 | goto label_14;
| }
0x00041abc bl 0x65c6c | r0 = fcn_00065c6c ();
0x00041ac0 cmp r0, 6 |
| if (r0 <= 6) {
0x00041ac2 ble 0x41a08 | goto label_1;
| }
0x00041ac4 ldr r3, [pc, 0x150] |
0x00041ac6 mov r1, r4 | r1 = r4;
0x00041ac8 ldr r2, [pc, 0x150] |
0x00041aca movs r0, 7 | r0 = 7;
0x00041acc str r5, [sp, 0xc] | var_ch = r5;
0x00041ace add r3, pc | r3 = 0x836ea;
0x00041ad0 str r6, [sp, 8] | var_8h = r6;
0x00041ad2 str r3, [sp, 4] | var_4h = r3;
0x00041ad4 add r2, pc | r2 = 0x836f4;
0x00041ad6 ldr r3, [pc, 0x148] |
0x00041ad8 adds r2, 7 | r2 += 7;
0x00041ada add r3, pc | r3 = 0x83700;
0x00041adc str r3, [sp] | *(sp) = r3;
0x00041ade movw r3, 0x233 | r3 = 0x233;
0x00041ae2 bl 0x664b0 | fcn_000664b0 (r0, r1, r2, r3, r4, r5, r6);
0x00041ae6 b 0x41a08 | goto label_1;
| label_10:
0x00041ae8 cmp r6, r4 |
| if (r6 >= r4) {
0x00041aea bhs 0x41a6e | goto label_2;
| }
0x00041aec mov r7, r4 | r7 = r4;
0x00041aee b 0x41a30 | goto label_0;
| label_12:
0x00041af0 mov r2, sb | r2 = sb;
| label_8:
0x00041af2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00041af4 mla r3, r3, r2, fp | __asm ("mla r3, r3, r2, fp");
0x00041af8 ldr r2, [r5, 0x30] | r2 = *((r5 + 0x30));
0x00041afa add r3, r2 | r3 += r2;
0x00041afc add.w r0, r8, r3 | r0 = r8 + r3;
0x00041b00 b 0x41a70 | goto label_3;
| label_14:
0x00041b02 mov r2, r0 | r2 = r0;
0x00041b04 movs r3, 0x20 | r3 = 0x20;
0x00041b06 mov r0, sl | r0 = sl;
0x00041b08 mov r1, r5 | r1 = r5;
0x00041b0a blx 0xd870 | fcn_0000d870 ();
0x00041b0e ldr.w r2, [r8, 0x20] | r2 = *((r8 + 0x20));
0x00041b12 add.w r3, r6, 0x68 | r3 = r6 + 0x68;
0x00041b16 ldr.w r7, [r8, 0x18] | r7 = *((r8 + 0x18));
0x00041b1a add.w r6, sp, r3 | r6 = sp + r3;
0x00041b1e mov r3, sl | r3 = sl;
0x00041b20 ldr.w fp, [r8, 0x10] | fp = *((r8 + 0x10));
0x00041b24 mov sl, sb | sl = sb;
0x00041b26 mov sb, r8 | sb = r8;
0x00041b28 mov r8, r2 | r8 = r2;
0x00041b2a mov r2, r3 | r2 = r3;
0x00041b2c strb r4, [r6, -0x30] | var_30h = r4;
0x00041b30 str r7, [sp, 0x14] | var_14h = r7;
| label_4:
0x00041b32 cmp r7, r4 |
| if (r7 < r4) {
0x00041b34 bls 0x41b7a | goto label_15;
| }
| label_5:
0x00041b36 adds r6, r4, r7 | r6 = r4 + r7;
0x00041b38 mov r1, sl | r1 = sl;
0x00041b3a lsrs r6, r6, 1 | r6 >>= 1;
0x00041b3c mla r5, r6, r8, fp | __asm ("mla r5, r6, r8, fp");
0x00041b40 add r5, sb | r5 += sb;
0x00041b42 subs r3, r5, 1 | r3 = r5 - 1;
0x00041b44 add.w lr, r5, 0xf | lr = r5 + 0xf;
| do {
0x00041b48 ldrb ip, [r1], 1 | ip = *(r1);
| r1++;
0x00041b4c ldrb r0, [r3, 1]! | r0 = *((r3 += 1));
0x00041b50 cmp ip, r0 |
| if (ip <= r0) {
0x00041b52 blo 0x41b72 | goto label_16;
| }
| if (ip > r0) {
0x00041b54 bhi 0x41b6e | goto label_17;
| }
0x00041b56 cmp r3, lr |
0x00041b58 bne 0x41b48 |
| } while (r3 != lr);
0x00041b5a mov r0, r2 | r0 = r2;
0x00041b5c add.w r1, r5, 0x10 | r1 = r5 + 0x10;
0x00041b60 str r2, [sp, 0x10] | var_10h = r2;
0x00041b62 blx 0xd4a4 | r0 = fcn_0000d4a4 ();
0x00041b66 cmp r0, 0 |
0x00041b68 ldr r2, [sp, 0x10] | r2 = var_10h;
| if (r0 >= 0) {
0x00041b6a blt 0x41b72 |
| if (r0 == 0) {
0x00041b6c beq 0x41bf0 | goto label_18;
| }
| label_17:
0x00041b6e adds r4, r6, 1 | r4 = r6 + 1;
0x00041b70 b 0x41b32 | goto label_4;
| }
| label_16:
0x00041b72 cmp r6, r4 |
| if (r6 >= r4) {
0x00041b74 bls 0x41b7a |
0x00041b76 mov r7, r6 | r7 = r6;
0x00041b78 b 0x41b36 | goto label_5;
| }
| label_15:
0x00041b7a mov r3, r2 | r3 = r2;
0x00041b7c movs r1, 0x5f | r1 = 0x5f;
0x00041b7e mov r2, r8 | r2 = r8;
0x00041b80 mov r0, r3 | r0 = r3;
0x00041b82 str r2, [sp, 0x10] | var_10h = r2;
0x00041b84 mov r8, sb | r8 = sb;
0x00041b86 mov sb, sl | sb = sl;
0x00041b88 mov sl, r3 | sl = r3;
0x00041b8a blx 0xded4 | fcn_0000ded4 ();
0x00041b8e ldr r2, [sp, 0x10] | r2 = var_10h;
0x00041b90 mov r3, r0 | r3 = r0;
0x00041b92 cmp r0, 0 |
| if (r0 == 0) {
0x00041b94 beq.w 0x41a08 | goto label_1;
| }
0x00041b98 movs r4, 0 | r4 = 0;
0x00041b9a mov r7, sl | r7 = sl;
0x00041b9c strb r4, [r3] | *(r3) = r4;
0x00041b9e mov sl, sb | sl = sb;
0x00041ba0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00041ba2 mov sb, r8 | sb = r8;
0x00041ba4 mov r8, r2 | r8 = r2;
0x00041ba6 str r3, [sp, 0x10] | var_10h = r3;
| label_6:
0x00041ba8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00041baa cmp r4, r3 |
| if (r4 >= r3) {
0x00041bac bhs 0x41bf6 | goto label_19;
| }
| label_7:
0x00041bae ldr r3, [sp, 0x10] | r3 = var_10h;
0x00041bb0 mov r2, sl | r2 = sl;
0x00041bb2 adds r6, r4, r3 | r6 = r4 + r3;
0x00041bb4 lsrs r6, r6, 1 | r6 >>= 1;
0x00041bb6 mla r5, r6, r8, fp | __asm ("mla r5, r6, r8, fp");
0x00041bba add r5, sb | r5 += sb;
0x00041bbc subs r3, r5, 1 | r3 = r5 - 1;
0x00041bbe add.w ip, r5, 0xf |
| do {
0x00041bc2 ldrb r0, [r2], 1 | r0 = *(r2);
| r2++;
0x00041bc6 ldrb r1, [r3, 1]! | r1 = *((r3 += 1));
0x00041bca cmp r0, r1 |
| if (r0 <= r1) {
0x00041bcc blo 0x41be8 | goto label_20;
| }
| if (r0 > r1) {
0x00041bce bhi 0x41be4 | goto label_21;
| }
0x00041bd0 cmp ip, r3 |
0x00041bd2 bne 0x41bc2 |
| } while (ip != r3);
0x00041bd4 add.w r1, r5, 0x10 | r1 = r5 + 0x10;
0x00041bd8 mov r0, r7 | r0 = r7;
0x00041bda blx 0xd4a4 | r0 = fcn_0000d4a4 ();
0x00041bde cmp r0, 0 |
| if (r0 >= 0) {
0x00041be0 blt 0x41be8 |
| if (r0 == 0) {
0x00041be2 beq 0x41bf0 | goto label_18;
| }
| label_21:
0x00041be4 adds r4, r6, 1 | r4 = r6 + 1;
0x00041be6 b 0x41ba8 | goto label_6;
| }
| label_20:
0x00041be8 cmp r4, r6 |
| if (r4 < r6) {
0x00041bea bhs 0x41bf6 |
0x00041bec str r6, [sp, 0x10] | var_10h = r6;
0x00041bee b 0x41bae | goto label_7;
| label_18:
0x00041bf0 mov r2, r8 | r2 = r8;
0x00041bf2 mov r8, sb | r8 = sb;
0x00041bf4 b 0x41af2 | goto label_8;
| }
| label_19:
0x00041bf6 mov r8, sb | r8 = sb;
0x00041bf8 mov sb, sl | sb = sl;
0x00041bfa mov sl, r7 | sl = r7;
0x00041bfc b 0x41a08 | goto label_1;
| label_13:
0x00041bfe blx 0xd8a4 | fcn_0000d8a4 ();
0x00041c02 nop |
0x00041c04 udf 0x92 | __asm ("udf 0x92");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsystemd.so.0.32.0 @ 0x62f80 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00062f80 () | void fcn_00062f80 (int16_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00062f80 invalid |
0x00062f84 ldrb.w ip, [r0, 0x27] | ip = *((r0 + 0x27));
0x00062f88 mov r4, r0 | r4 = r0;
0x00062f8a mov r6, r2 | r6 = r2;
0x00062f8c ands r1, ip, 4 | r1 = ip & 4;
| if (r1 == ip) {
0x00062f90 beq 0x63048 | goto label_4;
| }
0x00062f92 ldr r2, [r0, 0x1c] | r2 = *((r0 + 0x1c));
0x00062f94 cmp r5, r2 |
| if (r5 >= r2) {
0x00062f96 bhs 0x6305a | goto label_5;
| }
| do {
0x00062f98 cmp r3, 0 |
| if (r3 != 0) {
0x00062f9a bne 0x63076 | goto label_6;
| }
0x00062f9c cmp r1, 0 |
| if (r1 != 0) {
0x00062f9e bne 0x63070 | goto label_3;
| }
| label_2:
0x00062fa0 ldr r3, [pc, 0x14c] |
0x00062fa2 and r1, ip, 3 | r1 = ip & 3;
0x00062fa6 ubfx r2, ip, 3, 3 | r2 = (ip >> 3) & ((1 << 3) - 1);
0x00062faa add r3, pc | r3 = 0xc609e;
0x00062fac add.w r3, r3, r1, lsl 4 | r3 += (r1 << 4);
0x00062fb0 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| label_0:
0x00062fb2 cmp r3, r2 |
| if (r3 < r2) {
0x00062fb4 bls 0x630ac | goto label_7;
| }
0x00062fb6 and ip, ip, 3 |
0x00062fba cmp.w ip, 1 |
| if (ip == 1) {
0x00062fbe bne 0x6300c |
0x00062fc0 mov.w r3, -1 | r3 = -1;
0x00062fc4 str r3, [r6, 8] | *((r6 + 8)) = r3;
0x00062fc6 ldr r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x00062fc8 adds r1, r3, 1 | r1 = r3 + 1;
0x00062fca str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
| if (r1 != r3) {
0x00062fcc beq 0x62ffe |
0x00062fce ldrb.w ip, [r4, 0x27] | ip = *((r4 + 0x27));
0x00062fd2 ldr r1, [pc, 0x120] |
0x00062fd4 tst.w ip, 4 |
0x00062fd8 and ip, ip, 3 |
0x00062fdc add r1, pc | r1 = 0xc60d6;
0x00062fde it ne |
| if ((ip & 4) == 0) {
0x00062fe0 ldrne r2, [r4, 4] | r2 = *((r4 + 4));
| }
0x00062fe2 add.w r1, r1, ip, lsl 4 | r1 += (ip << 4);
0x00062fe6 it eq |
| if ((ip & 4) != 0) {
0x00062fe8 addeq r2, r4, 4 | r2 = r4 + 4;
| }
0x00062fea ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x00062fec mla r3, r1, r3, r2 | __asm ("mla r3, r1, r3, r2");
0x00062ff0 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00062ff2 adds r2, 1 | r2++;
0x00062ff4 itt eq |
| if (r2 != 1) {
0x00062ff6 mvneq r2, 3 | r2 = ~3;
| }
| if (r2 != 1) {
0x00062ff8 lsleq r3, r0, 8 | r3 = r0 << 8;
| }
0x00062ffa str r2, [r3, 8] | *((r3 + 8)) = r2;
| if (r2 != 1) {
0x00062ffc bne 0x630d8 | goto label_8;
| }
| }
0x00062ffe ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x00063000 mvn r3, 3 | r3 = ~3;
0x00063004 str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x00063006 adds r2, 1 | r2++;
0x00063008 it eq |
| if (r2 == 1) {
0x0006300a streq r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
| goto label_9;
| }
| }
| label_9:
0x0006300c mov r2, r6 | r2 = r6;
0x0006300e mov r1, r5 | r1 = r5;
0x00063010 mov r0, r4 | r0 = r4;
0x00063012 bl 0x62a14 | fcn_00062a14 (r0, r1, r2, r3);
0x00063014 ldc2l p8, c2, [pc], 0 | __asm ("ldc2l p8, c2, [pc], 0");
| if (r2 != 1) {
0x00063018 bne 0x630c2 | goto label_10;
| }
0x0006301a ldrb.w r3, [r4, 0x27] | r3 = *((r4 + 0x27));
0x0006301e movs r0, 1 | r0 = 1;
0x00063020 lsls r2, r3, 0x1d | r2 = r3 << 0x1d;
0x00063022 iteee mi |
| if (r2 >= r3) {
0x00063024 ldrmi r3, [r4, 0x18] | r3 = *((r4 + 0x18));
| }
| if (r2 >= r3) {
0x00063026 invalid |
| }
| if (r2 < r3) {
0x00063028 lslpl r2, r0, 0xb | r2 = r0 << 0xb;
| }
| if (r2 < r3) {
0x0006302a addpl r2, 1 | r2++;
| }
0x0006302c bfi r3, r2, 3, 3 | value_0 = BIT_MASK (3, 3);
| value_1 = r2 & value_0;
| value_0 = ~value_0;
| r3 &= value_0;
| r3 |= value_1;
0x00063030 itet mi |
| if (r2 >= r3) {
0x00063032 addmi r3, 1 | r3++;
| }
| if (r2 < r3) {
0x00063034 strbpl r3, [r4, 0x27] | *((r4 + 0x27)) = r3;
| }
| if (r2 < r3) {
0x00063038 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
| }
0x0006303a ldrb.w r3, [r4, 0x27] | r3 = *((r4 + 0x27));
0x0006303e orr r3, r3, 0x80 | r3 |= 0x80;
0x00063040 lsls r0, r0, 0xe | r0 <<= 0xe;
0x00063042 strb.w r3, [r4, 0x27] | *((r4 + 0x27)) = r3;
| label_1:
0x00063046 pop {r4, r5, r6, pc} |
| label_4:
0x00063048 ldr r2, [pc, 0xac] |
0x0006304a and r0, ip, 3 | r0 = ip & 3;
0x0006304e add r2, pc | r2 = 0xc614a;
0x00063050 add.w r2, r2, r0, lsl 4 | r2 += (r0 << 4);
0x00063054 ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x00063056 cmp r5, r2 |
0x00063058 blo 0x62f98 |
| } while (r5 <= r2);
| label_5:
0x0006305a ldr r1, [pc, 0xa0] |
0x0006305c movw r2, 0x3f5 | r2 = 0x3f5;
0x00063060 ldr r3, [pc, 0x9c] |
0x00063062 ldr r0, [pc, 0xa0] |
0x00063064 add r1, pc | r1 = 0xc6166;
0x00063066 add r3, pc | r3 = 0xc616a;
0x00063068 adds r1, 7 | r1 += 7;
0x0006306a add r0, pc | r0 = 0xc6174;
0x0006306c bl 0x66580 | fcn_00066580 (r0, r1, r2, r3, r4);
| label_3:
0x00063070 ldrd r2, r3, [r4, 0x18] | __asm ("ldrd r2, r3, [r4, 0x18]");
0x00063074 b 0x62fb2 | goto label_0;
| label_6:
0x00063076 movs r1, 1 | r1 = 1;
0x00063078 mov r0, r4 | r0 = r4;
0x0006307a bl 0x62bd0 | r0 = void (*0x62bd0)(uint32_t, uint32_t) (r0, r1);
0x0006307e cmp r0, 0 |
| if (r0 < 0) {
0x00063080 blt 0x63046 | goto label_1;
| }
| if (r0 != 0) {
0x00063082 bne 0x63092 | goto label_11;
| }
0x00063084 ldrb.w ip, [r4, 0x27] | ip = *((r4 + 0x27));
0x00063088 and r1, ip, 4 | r1 = ip & 4;
0x0006308c cmp r1, 0 |
| if (r1 == 0) {
0x0006308e beq 0x62fa0 | goto label_2;
| }
0x00063090 b 0x63070 | goto label_3;
| label_11:
0x00063092 ldr r1, [r6] | r1 = *(r6);
0x00063094 mov r0, r4 | r0 = r4;
0x00063096 bl 0x624dc | fcn_000624dc (r0, r1);
0x00063098 sxtab16 r8, r1, r4, ror 8 | __asm ("sxtab16 r8, r1, r4, ror 8");
0x0006309c stm r0!, {r0, r1, r2, r5} | *(r0!) = r0;
| *((r0! + 4)) = r1;
| *((r0! + 8)) = r2;
| *((r0! + 12)) = r5;
0x0006309e mov r5, r0 | r5 = r0;
0x000630a0 and r1, ip, 4 | r1 = ip & 4;
0x000630a4 cmp r1, 0 |
| if (r1 == 0) {
0x000630a6 beq.w 0x62fa0 | goto label_2;
| }
0x000630a8 add r7, sp, 0x1ec | r7 = sp + 0x1ec;
0x000630aa b 0x63070 | goto label_3;
| label_7:
0x000630ac ldr r1, [pc, 0x58] |
0x000630ae mov.w r2, 0x400 | r2 = 0x400;
0x000630b0 str r0, [r0, 0x28] | *((r0 + 0x28)) = r0;
0x000630b2 ldr r3, [pc, 0x58] |
0x000630b4 ldr r0, [pc, 0x58] |
0x000630b6 add r1, pc | r1 = 0xc61c2;
0x000630b8 add r3, pc | r3 = 0xc61ca;
0x000630ba adds r1, 7 | r1 += 7;
0x000630bc add r0, pc | r0 = 0xc61d0;
0x000630be bl 0x66580 | fcn_00066580 (r0, r1, r2, r3, r4);
| label_10:
0x000630c2 ldr r1, [pc, 0x50] |
0x000630c4 movw r2, 0x415 | r2 = 0x415;
0x000630c8 ldr r3, [pc, 0x4c] |
0x000630ca ldr r0, [pc, 0x50] |
0x000630cc add r1, pc | r1 = 0xc61e6;
0x000630ce add r3, pc | r3 = 0xc61ea;
0x000630d0 adds r1, 7 | r1 += 7;
0x000630d2 add r0, pc | r0 = 0xc61f4;
0x000630d4 bl 0x66580 | fcn_00066580 (r0, r1, r2, r3, r4);
| label_8:
0x000630d8 ldr r1, [pc, 0x44] |
0x000630da movw r2, 0x40c | r2 = 0x40c;
0x000630dc tst r4, r1 |
0x000630de ldr r3, [pc, 0x44] |
0x000630e0 ldr r0, [pc, 0x44] |
0x000630e2 add r1, pc | r1 = 0xc6206;
0x000630e4 add r3, pc | r3 = 0xc620e;
0x000630e6 adds r1, 7 | r1 += 7;
0x000630e8 add r0, pc | r0 = 0xc6214;
0x000630ea bl 0x66580 | fcn_00066580 (r0, r1, r2, r3, r4);
0x000630ee nop |
0x000630f0 stm r3!, {r1, r4} | *(r3!) = r1;
| *((r3! + 4)) = r4;
0x000630f2 movs r3, r0 | r3 = r0;
0x000630f4 stm r2!, {r5, r6, r7} | *(r2!) = r5;
| *((r2! + 4)) = r6;
| *((r2! + 8)) = r7;
0x000630f6 movs r3, r0 | r3 = r0;
0x000630f8 stm r2!, {r1, r2, r3, r5, r6} | *(r2!) = r1;
| *((r2! + 4)) = r2;
| *((r2! + 8)) = r3;
| *((r2! + 12)) = r5;
| *((r2! + 16)) = r6;
0x000630fa movs r3, r0 | r3 = r0;
0x000630fc str r4, [r3, r5] | *((r3 + r5)) = r4;
0x000630fe movs r2, r0 | r2 = r0;
0x00063100 strb r2, [r2, r0] | *((r2 + r0)) = r2;
0x00063102 movs r2, r0 | r2 = r0;
0x00063104 str r2, [r6, r7] | *((r6 + r7)) = r2;
0x00063106 movs r2, r0 | r2 = r0;
0x00063108 str r2, [r1, r4] | *((r1 + r4)) = r2;
0x0006310a movs r2, r0 | r2 = r0;
0x0006310c strh r0, [r0, r7] | *((r0 + r7)) = r0;
0x0006310e movs r2, r0 | r2 = r0;
0x00063110 strh r0, [r0, r0] | *((r0 + r0)) = r0;
0x00063112 movs r2, r0 | r2 = r0;
0x00063114 str r4, [r6, r3] | *((r6 + r3)) = r4;
0x00063116 movs r2, r0 | r2 = r0;
0x00063118 strh r2, [r5, r6] | *((r5 + r6)) = r2;
0x0006311a movs r2, r0 | r2 = r0;
0x0006311c strh r2, [r5, r0] | *((r5 + r0)) = r2;
0x0006311e movs r2, r0 | r2 = r0;
0x00063120 str r6, [r3, r3] | *((r3 + r3)) = r6;
0x00063122 movs r2, r0 | r2 = r0;
0x00063124 strh r4, [r2, r6] | *((r2 + r6)) = r4;
0x00063126 movs r2, r0 | r2 = r0;
0x00063128 str r0, [r6, r7] | *((r6 + r7)) = r0;
0x0006312a movs r2, r0 | r2 = 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/libsystemd.so.0.32.0 @ 0x63304 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00063304 () | void fcn_00063304 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x00063304 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00063308 sub sp, 0xc |
0x0006330a ldrb.w r7, [r0, 0x27] | r7 = *((r0 + 0x27));
0x0006330e mov r5, r0 | r5 = r0;
0x00063310 mov r6, r1 | r6 = r1;
0x00063312 ldr r3, [pc, 0x27c] |
0x00063314 and r2, r7, 3 | r2 = r7 & 3;
0x00063318 ands sb, r7, 4 | sb = r7 & 4;
0x0006331c add r3, pc | r3 = 0xc68b2;
0x0006331e add.w r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x00063322 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00063324 str r2, [sp] | *(sp) = r2;
| if (sb == r7) {
0x00063326 beq 0x63378 | goto label_9;
| }
0x00063328 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x0006332a ldr.w sl, [r0, 0x1c] | sl = *((r0 + 0x1c));
0x0006332e str r3, [sp, 4] | var_4h = r3;
0x00063330 mla r8, r2, sl, r3 | __asm ("mla r8, r2, sl, r3");
0x00063334 ldrb.w r3, [r8, r1] | r3 = *((r8 + r1));
0x00063338 cmp r3, 0xff |
| if (r3 == 0xff) {
0x0006333a beq 0x6338e | goto label_10;
| }
| label_0:
0x0006333c add.w fp, r6, 1 |
0x00063340 mov r1, sl | r1 = sl;
0x00063342 mov r0, fp | r0 = fp;
0x00063344 bl 0x71424 | fcn_00071424 (r0, r1, r2);
0x00063348 b 0x63352 |
| while (r1 != r6) {
0x0006334a adds r0, r1, 1 | r0 = r1 + 1;
0x0006334c mov r1, sl | r1 = sl;
0x0006334e bl 0x71424 | fcn_00071424 (r0, r1, r2);
0x00063352 ldrb.w r3, [r8, r1] | r3 = *((r8 + r1));
0x00063356 subs r3, 1 | r3--;
0x00063358 uxtb r3, r3 | r3 = (int8_t) r3;
0x0006335a cmp r3, 0xfd |
| if (r3 > 0xfd) {
0x0006335c bhi 0x633a4 | goto label_11;
| }
0x0006335e cmp r1, r6 |
0x00063360 bne 0x6334a |
| }
0x00063362 ldr r1, [pc, 0x230] |
0x00063364 movw r2, 0x21e | r2 = 0x21e;
0x00063368 ldr r3, [pc, 0x22c] |
0x0006336a ldr r0, [pc, 0x230] |
0x0006336c add r1, pc | r1 = 0xc6906;
0x0006336e add r3, pc | r3 = 0xc690a;
0x00063370 adds r1, 7 | r1 += 7;
0x00063372 add r0, pc | r0 = 0xc6914;
0x00063374 bl 0x66580 | fcn_00066580 (r0, r1, r2, r3, r4);
| label_9:
0x00063378 ldr.w sl, [r3, 0xc] | sl = *((r3 + 0xc));
0x0006337c adds r3, r0, 4 | r3 = r0 + 4;
0x0006337e ldr r2, [sp] | r2 = *(sp);
0x00063380 str r3, [sp, 4] | var_4h = r3;
0x00063382 mla r8, r2, sl, r3 | __asm ("mla r8, r2, sl, r3");
0x00063386 ldrb.w r3, [r8, r1] | r3 = *((r8 + r1));
0x0006338a cmp r3, 0xff |
| if (r3 != 0xff) {
0x0006338c bne 0x6333c | goto label_0;
| }
| label_10:
0x0006338e ldr r1, [pc, 0x210] |
0x00063390 movw r2, 0x20d | r2 = 0x20d;
0x00063394 ldr r3, [pc, 0x20c] |
0x00063396 ldr r0, [pc, 0x210] |
0x00063398 add r1, pc | r1 = 0xc693e;
0x0006339a add r3, pc | r3 = 0xc6942;
0x0006339c adds r1, 7 | r1 += 7;
0x0006339e add r0, pc | r0 = 0xc694c;
0x000633a0 bl 0x66580 | fcn_00066580 (r0, r1, r2, r3, r4);
| label_11:
0x000633a4 and r3, r7, 3 | r3 = r7 & 3;
0x000633a8 mov r4, r1 | r4 = r1;
0x000633aa cmp r3, 1 |
| if (r3 == 1) {
0x000633ac beq 0x63482 | goto label_12;
| }
| label_4:
0x000633ae cmp.w sb, 0 |
| if (sb != 0) {
0x000633b2 bne 0x6347e | goto label_6;
| }
| label_5:
0x000633b4 ldr r3, [pc, 0x1f4] |
0x000633b6 and r2, r7, 3 | r2 = r7 & 3;
0x000633ba add r3, pc | r3 = 0xc696a;
0x000633bc add.w r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x000633c0 ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
| label_3:
0x000633c2 mov r0, fp | r0 = fp;
0x000633c4 bl 0x71424 | fcn_00071424 (r0, r1, r2);
0x000633c8 cmp r4, r1 |
0x000633ca mov sl, r1 | sl = r1;
| if (r4 == r1) {
0x000633cc beq.w 0x6358a | goto label_13;
| }
0x000633d0 ldr r3, [pc, 0x1dc] |
0x000633d2 ldrb.w r0, [r8, sl] | r0 = *((r8 + sl));
0x000633d6 ldr.w fp, [pc, 0x1dc] | fp = *(0x000635b4);
0x000633da add r3, pc | r3 = 0xc698e;
0x000633dc str r3, [sp] | *(sp) = r3;
0x000633de cmp r0, 0xff |
0x000633e0 ldr r3, [pc, 0x1d4] |
0x000633e2 add fp, pc |
0x000633e4 add r3, pc | r3 = 0xc69a0;
0x000633e6 str r3, [sp, 4] | var_4h = r3;
| if (r0 == 0xff) {
0x000633e8 beq 0x63458 | goto label_14;
| }
| do {
0x000633ea cmp r0, 0xfc |
| if (r0 > 0xfc) {
0x000633ec bhi 0x6345c | goto label_15;
| }
0x000633ee cmp r0, 0 |
| if (r0 == 0) {
0x000633f0 beq 0x63468 | goto label_16;
| }
| label_2:
0x000633f2 subs r7, r0, 1 | r7 = r0 - 1;
0x000633f4 cmp r7, 0xfd |
0x000633f6 it hs |
| if (r7 < 0xfd) {
0x000633f8 movhs r7, 0xfd | r7 = 0xfd;
| }
0x000633fa uxtb r7, r7 | r7 = (int8_t) r7;
| label_1:
0x000633fc mov r3, r6 | r3 = r6;
0x000633fe mov r2, sl | r2 = sl;
0x00063400 movs r1, 0 | r1 = 0;
0x00063402 mov r0, r5 | r0 = r5;
0x00063404 bl 0x62890 | fcn_00062890 (r0, r1, r2, r3);
0x00063408 ldrb.w r2, [r5, 0x27] | r2 = *((r5 + 0x27));
0x0006340c lsls r3, r2, 0x1d | r3 = r2 << 0x1d;
| if (r3 >= r2) {
0x0006340e bpl 0x634e8 | goto label_17;
| }
0x00063410 ldr r3, [sp] | r3 = *(sp);
0x00063412 and r2, r2, 3 | r2 &= 3;
0x00063416 ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x00063418 add.w r2, r3, r2, lsl 4 | r2 = r3 + (r2 << 4);
0x0006341c ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x0006341e ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
| label_7:
0x00063420 mla r2, r0, r2, r1 | __asm ("mla r2, r0, r2, r1");
0x00063424 add.w r0, sl, 1 | r0 = sl + 1;
0x00063428 strb r7, [r2, r6] | *((r2 + r6)) = r7;
0x0006342a mov r6, sl | r6 = sl;
0x0006342c ldrb.w sb, [r5, 0x27] | sb = *((r5 + 0x27));
0x00063430 ands r7, sb, 4 | r7 = sb & 4;
0x00063434 ittet eq |
| if (r7 != sb) {
0x00063436 ldreq r2, [sp, 4] | r2 = var_4h;
| }
| if (r7 != sb) {
0x00063438 andeq r3, sb, 3 | r3 = sb & 3;
| }
| if (r7 != sb) {
0x0006343c ldreq r1, [r5, 0x1c] | r1 = *((r5 + 0x1c));
| }
| if (r7 == sb) {
0x0006343e add.w r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
| }
0x00063442 it eq |
| if (r7 != sb) {
0x00063444 ldreq r1, [r3, 0xc] | r1 = *((r3 + 0xc));
| }
0x00063446 bl 0x71424 | fcn_00071424 (r0, r1, r2);
0x0006344a cmp r4, r1 |
| if (r4 == r1) {
0x0006344c beq 0x634f8 | goto label_18;
| }
0x0006344e mov sl, r1 | sl = r1;
0x00063450 ldrb.w r0, [r8, sl] | r0 = *((r8 + sl));
0x00063454 cmp r0, 0xff |
0x00063456 bne 0x633ea |
| } while (r0 != 0xff);
| label_14:
0x00063458 movs r7, 0xfd | r7 = 0xfd;
0x0006345a b 0x633fc | goto label_1;
| label_15:
0x0006345c mov r1, sl | r1 = sl;
0x0006345e mov r0, r5 | r0 = r5;
0x00063460 bl 0x626b0 | r0 = fcn_000626b0 (r0, r1);
0x00063464 cmp r0, 0 |
| if (r0 != 0) {
0x00063466 bne 0x633f2 | goto label_2;
| }
| label_16:
0x00063468 ldr r1, [pc, 0x150] |
0x0006346a mov.w r2, 0x234 | r2 = 0x234;
0x0006346c strb r5, [r1, 8] | *((r1 + 8)) = r5;
0x0006346e ldr r3, [pc, 0x150] |
0x00063470 ldr r0, [pc, 0x150] |
0x00063472 add r1, pc | r1 = 0xc6a32;
0x00063474 add r3, pc | r3 = 0xc6a3a;
0x00063476 adds r1, 7 | r1 += 7;
0x00063478 add r0, pc | r0 = 0xc6a40;
0x0006347a bl 0x66580 | fcn_00066580 (r0, r1, r2, r3, r4);
| label_6:
0x0006347e ldr r1, [r5, 0x1c] | r1 = *((r5 + 0x1c));
0x00063480 b 0x633c2 | goto label_3;
| label_12:
0x00063482 ldrd r3, r0, [sp] | __asm ("ldrd r3, r0, [sp]");
0x00063486 mla r3, r3, r6, r0 | __asm ("mla r3, r3, r6, r0");
0x0006348a ldrd r2, r1, [r3, 8] | __asm ("ldrd r2, r1, [r3, 8]");
0x0006348e cmp.w r2, -1 |
0x00063492 itett ne |
| if (r2 == -1) {
0x00063494 ldrne r7, [sp] | r7 = *(sp);
| }
| if (r2 != -1) {
0x00063496 streq r1, [r5, 0x30] | *((r5 + 0x30)) = r1;
| }
| if (r2 != -1) {
0x00063498 mlane r2, r7, r2, r0 | __asm ("mlane r2, r7, r2, r0");
| }
| if (r2 != -1) {
0x0006349c str r1, [r2, 0xc] | *((r2 + 0xc)) = r1;
| }
0x0006349e it ne |
| if (r2 == -1) {
0x000634a0 ldrbne r7, [r5, 0x27] | r7 = *((r5 + 0x27));
| }
0x000634a4 ldrd r0, r2, [r3, 8] | __asm ("ldrd r0, r2, [r3, 8]");
0x000634a8 it ne |
| if (r2 == -1) {
0x000634aa andne sb, r7, 4 | sb = r7 & 4;
| }
0x000634ae adds r1, r2, 1 | r1 = r2 + 1;
0x000634b0 it eq |
| if (r1 == r2) {
0x000634b2 streq r0, [r5, 0x2c] | *((r5 + 0x2c)) = r0;
| goto label_19;
| }
| if (r1 == r2) {
| label_19:
0x000634b4 beq.w 0x633ae | goto label_4;
| }
0x000634b8 adds r3, r5, 4 | r3 = r5 + 4;
0x000634ba cmp.w sb, 0 |
0x000634bc lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 != r0) {
0x000634be beq 0x634c2 |
0x000634c0 ldr r3, [r5, 4] | r3 = *((r5 + 4));
| }
0x000634c2 ldr r1, [pc, 0x104] |
0x000634c4 and r7, r7, 3 | r7 &= 3;
0x000634c8 add r1, pc | r1 = 0xc6a96;
0x000634ca add.w r1, r1, r7, lsl 4 | r1 += (r7 << 4);
0x000634ce ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x000634d0 mla r3, r1, r2, r3 | __asm ("mla r3, r1, r2, r3");
0x000634d4 str r0, [r3, 8] | *((r3 + 8)) = r0;
0x000634d6 ldrb.w r7, [r5, 0x27] | r7 = *((r5 + 0x27));
0x000634da and sb, r7, 4 | sb = r7 & 4;
0x000634de cmp.w sb, 0 |
0x000634e0 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 == r0) {
0x000634e2 beq.w 0x633b4 | goto label_5;
| }
0x000634e6 b 0x6347e | goto label_6;
| label_17:
0x000634e8 and r2, r2, 3 | r2 &= 3;
0x000634ec adds r1, r5, 4 | r1 = r5 + 4;
0x000634ee add.w r2, fp, r2, lsl 4 | r2 = fp + (r2 << 4);
0x000634f0 asrs r2, r0, 8 | r2 = r0 >> 8;
0x000634f2 ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x000634f4 ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x000634f6 b 0x63420 | goto label_7;
| label_18:
0x000634f8 mov r3, sb | r3 = sb;
0x000634fa mov sb, r7 | sb = r7;
0x000634fc mov r7, r3 | r7 = r3;
| label_8:
0x000634fe ldr r3, [pc, 0xcc] |
0x00063500 and r7, r7, 3 | r7 &= 3;
0x00063504 lsls r7, r7, 4 | r7 <<= 4;
0x00063506 add r3, pc | r3 = 0xc6ad8;
0x00063508 add r3, r7 | r3 += r7;
0x0006350a ldr r2, [r3, 4] | r2 = *(0xc6adc);
| if (r2 != 0) {
0x0006350c cbz r2, 0x63538 |
0x0006350e adds r0, r5, 4 | r0 = r5 + 4;
0x00063510 cmp.w sb, 0 |
| if (sb != 0) {
0x00063514 beq 0x63518 |
0x00063516 ldr r0, [r5, 4] | r0 = *((r5 + 4));
| }
0x00063518 mla r0, sl, r2, r0 | __asm ("mla r0, sl, r2, r0");
0x0006351c movs r1, 0 | r1 = 0;
0x0006351e blx 0xe0a4 | fcn_0000e0a4 ();
0x00063522 ldrb.w sb, [r5, 0x27] | sb = *((r5 + 0x27));
0x00063526 ldr r3, [pc, 0xa8] |
0x00063528 and r7, sb, 3 | r7 = sb & 3;
0x0006352c and sb, sb, 4 | sb &= 4;
0x00063530 lsls r7, r7, 4 | r7 <<= 4;
0x00063532 add r3, pc | r3 = 0xc6b08;
0x00063534 add r3, r7 | r3 += r7;
0x00063536 ldr r2, [r3, 4] | r2 = *(0xc6b0c);
| }
0x00063538 cmp.w sb, 0 |
| if (sb == 0) {
0x0006353c beq 0x6357e | goto label_20;
| }
0x0006353e ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00063540 ldr r1, [r5, 0x1c] | r1 = *((r5 + 0x1c));
| do {
0x00063542 mla r3, r2, r1, r3 | __asm ("mla r3, r2, r1, r3");
0x00063546 movs r2, 0xff | r2 = 0xff;
0x00063548 strb.w r2, [r3, sl] | *((r3 + sl)) = r2;
0x0006354c ldrb.w r3, [r5, 0x27] | r3 = *((r5 + 0x27));
0x00063550 lsls r2, r3, 0x1d | r2 = r3 << 0x1d;
0x00063552 iteee mi |
| if (r2 >= r3) {
0x00063554 ldrmi r3, [r5, 0x18] | r3 = *((r5 + 0x18));
| }
| if (r2 >= r3) {
0x00063556 ubfxpl r2, r3, 3, 3 | __asm ("ubfxpl r2, r3, 3, 3");
| }
| if (r2 < r3) {
0x0006355a addpl r2, 7 | r2 += 7;
| }
| if (r2 >= r3) {
0x0006355c bfi r3, r2, 3, 3 | value_0 = BIT_MASK (3, 3);
| value_1 = r2 & value_0;
| value_0 = ~value_0;
| r3 &= value_0;
| r3 |= value_1;
| }
0x00063560 itet mi |
| if (r2 >= r3) {
0x00063562 addmi r3, r3, -1 | r3 += -1;
| }
| if (r2 >= r3) {
0x00063566 strbmi r3, [r5, 0x27] | *((r5 + 0x27)) = r3;
| }
| if (r2 < r3) {
0x0006356a str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
| }
0x0006356c ldrb.w r3, [r5, 0x27] | r3 = *((r5 + 0x27));
0x00063570 orr r3, r3, 0x80 | r3 |= 0x80;
0x00063574 strb.w r3, [r5, 0x27] | *((r5 + 0x27)) = r3;
0x00063578 add sp, 0xc |
0x0006357a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_20:
0x0006357e ldr r1, [pc, 0x54] |
0x00063580 adds r3, r5, 4 | r3 = r5 + 4;
0x00063582 add r1, pc |
0x00063584 add r1, r7 | r1 += r7;
0x00063586 ldr r1, [r1, 0xc] | r1 = *(0xc6b68);
0x00063588 b 0x63542 |
| } while (1);
| label_13:
0x0006358a mov sl, r6 | sl = r6;
0x0006358c b 0x634fe | goto label_8;
| }
[*] Function popen used 1 times libsystemd.so.0.32.0