[*] Binary protection state of liblttng-ust.so.1.0.0
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function popen tear down of liblttng-ust.so.1.0.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/liblttng-ust.so.1.0.0 @ 0xf6c4 */
| #include <stdint.h>
|
; (fcn) fcn.0000f6c4 () | uint32_t fcn_0000f6c4 (int16_t arg_248h, int16_t arg_348h, int16_t arg_3f8h, int16_t arg1, int16_t arg2, uint32_t arg3, int16_t arg4) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_21bh;
| int16_t var_21ch;
| int16_t var_224h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0000f6c4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000f6c8 subs r2, r2, r3 | r2 -= r3;
0x0000f6ca ldr r5, [pc, 0x204] |
0x0000f6cc cmp r2, 1 |
0x0000f6ce sub.w sp, sp, 0x224 |
0x0000f6d2 ldr r4, [pc, 0x200] | r4 = *(0xf8d6);
0x0000f6d4 add r5, pc | r5 = 0x1efaa;
0x0000f6d6 ldr r7, [pc, 0x200] |
0x0000f6d8 ldr.w r8, [sp, 0x248] | r8 = *(arg_248h);
0x0000f6dc ldr r4, [r5, r4] |
0x0000f6de add r7, pc | r7 = 0x1efbc;
0x0000f6e0 ldr r4, [r4] | r4 = *(0x1efaa);
0x0000f6e2 str r4, [sp, 0x21c] | var_21ch = r4;
0x0000f6e4 mov.w r4, 0 | r4 = 0;
| if (r2 < 1) {
0x0000f6e8 bls 0xf782 | goto label_1;
| }
0x0000f6ea add.w r4, r3, 0x2a | r4 = r3 + 0x2a;
0x0000f6ee mov r6, r1 | r6 = r1;
0x0000f6f0 ldrb r5, [r1, r4] | r5 = *((r1 + r4));
0x0000f6f2 adds r3, r1, r4 | r3 = r1 + r4;
0x0000f6f4 str r3, [sp, 0x14] | var_14h = r3;
0x0000f6f6 cmp r5, 0x46 |
| if (r5 == 0x46) {
0x0000f6f8 beq 0xf796 | goto label_7;
| }
| if (r5 < 0x46) {
0x0000f6fa bls 0xf724 | goto label_8;
| }
0x0000f6fc subs r5, 0x52 | r5 -= 0x52;
0x0000f6fe cmp r5, 1 |
0x0000f700 it ls |
| if (r5 > 1) {
0x0000f702 movls r0, 0 | r0 = 0;
| }
0x0000f704 bhi 0xf76e |
| while (1) {
| label_3:
0x0000f706 ldr r2, [pc, 0x1d4] |
0x0000f708 ldr r3, [pc, 0x1c8] | r3 = *(0xf8d4);
0x0000f70a add r2, pc | r2 = 0x1efec;
0x0000f70c ldr r3, [r2, r3] | r3 = *(0x1efec);
0x0000f70e ldr r2, [r3] | r2 = *(0x1efec);
0x0000f710 ldr r3, [sp, 0x21c] | r3 = var_21ch;
0x0000f712 eors r2, r3 | r2 ^= r3;
0x0000f714 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000f718 bne.w 0xf8ca | goto label_9;
| }
0x0000f71c add.w sp, sp, 0x224 |
0x0000f720 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x0000f724 cmp r5, 0x3b |
| if (r5 == 0x3b) {
0x0000f726 bne 0xf76e |
| if (r0 == 0) {
0x0000f728 cbz r0, 0xf782 | goto label_1;
| }
0x0000f72a ldr r3, [r0, 0xc] | r3 = *(arg_248hxc);
0x0000f72c ldr r7, [r3, 4] | r7 = *((r3 + 4));
| if (r7 == 0) {
0x0000f72e cbz r7, 0xf782 | goto label_1;
| }
0x0000f730 ldr.w sl, [r3, 8] | sl = *((r3 + 8));
0x0000f734 cmp.w sl, 0 |
| if (sl == 0) {
0x0000f738 beq 0xf782 | goto label_1;
| }
0x0000f73a mov.w sb, 0 | sb = 0;
0x0000f73e subs r7, 4 | r7 -= 4;
0x0000f740 mov fp, sb |
| label_0:
0x0000f742 ldr r5, [r7, 4]! | r5 = *((r7 += 4));
0x0000f746 ldrb r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x0000f748 lsls r3, r2, 0x1e | r3 = r2 << 0x1e;
| if (r3 < r2) {
0x0000f74a bmi 0xf78c | goto label_2;
| }
0x0000f74c ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x0000f74e mov r1, r8 | r1 = r8;
0x0000f750 blx 0x64d0 | r0 = fcn_000064d0 ();
0x0000f754 cmp r0, 0 |
| if (r0 == 0) {
0x0000f756 beq.w 0xf868 | goto label_10;
| }
0x0000f75a ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x0000f75c ldr r2, [r2] | r2 = *(r2);
0x0000f75e cmp r2, 6 |
| if (r2 > 6) {
0x0000f760 bhi 0xf782 | goto label_1;
| }
| /* switch table (7 cases) at 0xf766 */
0x0000f762 tbb [pc, r2] | __asm ("tbb aav.0x000000ff");
| }
0x0000f76e ldr.w r8, [pc, 0x170] | r8 = *(0x0000f8e0);
0x0000f772 add r8, pc | r8 += pc;
0x0000f774 ldr.w r5, [r8] | r5 = *(r8);
0x0000f778 cmp r5, 0 |
| if (r5 == 0) {
0x0000f77a beq.w 0xf8c0 | goto label_11;
| }
| label_6:
0x0000f77e cmp r5, 2 |
| if (r5 == 2) {
0x0000f780 beq 0xf7d0 | goto label_12;
| }
| label_1:
0x0000f782 invalid |
0x0000f784 movs r5, r2 | r5 = r2;
0x0000f786 b 0xf706 |
| }
0x0000f788 add.w sb, sb, 8 | sb += 8;
| label_2:
0x0000f78c add.w fp, fp, 1 |
0x0000f790 cmp sl, fp |
| if (sl != fp) {
0x0000f792 bne 0xf742 | goto label_0;
| }
0x0000f794 b 0xf782 | goto label_1;
| label_7:
0x0000f796 ldr r7, [r1, 0x18] | r7 = *((r1 + 0x18));
0x0000f798 mov r1, r8 | r1 = r8;
0x0000f79a ldr r0, [r7] | r0 = *(r7);
0x0000f79c bl 0x1b00c | r0 = fcn_0001b00c (r0, r1);
0x0000f7a0 subs r3, r0, 0 | r3 = r0 - 0;
| if (r3 < r0) {
0x0000f7a2 blt 0xf828 | goto label_13;
| }
| label_4:
0x0000f7a4 cmp.w r3, 0x10000 |
| if (r3 >= 0x10000) {
0x0000f7a8 bge 0xf782 | goto label_1;
| }
0x0000f7aa ldr r2, [r7] | r2 = *(r7);
0x0000f7ac add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x0000f7b0 ldr r2, [r2] | r2 = *(r2);
0x0000f7b2 ldr.w r2, [r2, r1, lsl 3] | offset_0 = r1 << 3;
| r2 = *((r2 + offset_0));
0x0000f7b6 ldr r1, [r2, 8] | r1 = *((r2 + 8));
0x0000f7b8 ldr r2, [r1] | r2 = *(r1);
0x0000f7ba cmp r2, 6 |
| if (r2 > 6) {
0x0000f7bc bhi 0xf782 | goto label_1;
| }
| /* switch table (7 cases) at 0xf7c2 */
0x0000f7be tbb [pc, r2] | __asm ("tbb aav.0x000000ff");
0x0000f7ca add.w sb, sb, 4 | sb += 4;
0x0000f7ce b 0xf78c | goto label_2;
| label_12:
0x0000f7d0 blx 0x6908 | r0 = fcn_00006908 ();
0x0000f7d4 ldr.w sb, [r0] | sb = *(r0);
0x0000f7d8 mov r8, r0 | r8 = r0;
0x0000f7da blx 0x6890 | r0 = fcn_00006890 ();
0x0000f7de mov sl, r0 | sl = r0;
0x0000f7e0 blx 0x6554 | fcn_00006554 ();
0x0000f7e4 ldr r2, [pc, 0xfc] |
0x0000f7e6 mov.w r1, 0x200 | r1 = 0x200;
0x0000f7ea ldrb r3, [r6, r4] | r3 = *((r6 + r4));
0x0000f7ec add r4, sp, 0x1c | r4 += var_1ch;
0x0000f7ee add r2, pc | r2 = 0x1f0d6;
0x0000f7f0 str r2, [sp, 8] | var_8h = r2;
0x0000f7f2 ldr r2, [pc, 0xf4] |
0x0000f7f4 strd r0, r3, [sp] | __asm ("strd r0, r3, [sp]");
0x0000f7f8 mov r3, sl | r3 = sl;
0x0000f7fa mov r0, r4 | r0 = r4;
0x0000f7fc add r2, pc | r2 = 0x1f0ea;
0x0000f7fe bl 0x3e064 | fcn_0003e064 (r0, r1, r2, r3);
0x0000f802 movs r3, 0 | r3 = 0;
0x0000f804 mov r0, r4 | r0 = r4;
0x0000f806 strb.w r3, [sp, 0x21b] | var_21bh = r3;
0x0000f80a blx 0x68b4 | fcn_000068b4 ();
0x0000f80e mov r1, r4 | r1 = r4;
0x0000f810 mov r2, r0 | r2 = r0;
0x0000f812 mov r0, r5 | r0 = r5;
0x0000f814 bl 0x3d5e4 | fcn_0003d5e4 (r0, r1, r2);
0x0000f818 ldr r3, [pc, 0xd0] | r3 = *(0xf8ec);
0x0000f81a str.w sb, [r8] | __asm ("str.w sb, [r8]");
0x0000f81e ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x0000f820 ldr r0, [r3] | r0 = *(0xf8ec);
0x0000f822 blx 0x6560 | fcn_00006560 ();
0x0000f826 b 0xf782 | goto label_1;
| label_13:
0x0000f828 mov r0, r8 | r0 = r8;
0x0000f82a bl 0x3c168 | r0 = fcn_0003c168 ();
| if (r0 == 0) {
0x0000f82e cbz r0, 0xf84a | goto label_14;
| }
0x0000f830 mov r1, r7 | r1 = r7;
0x0000f832 mov r0, r8 | r0 = r8;
0x0000f834 bl 0x19468 | r0 = fcn_00019468 (r0, r1);
0x0000f838 cmp r0, 0 |
| if (r0 != 0) {
0x0000f83a bne.w 0xf706 | goto label_3;
| }
0x0000f83e ldr r0, [r7] | r0 = *(r7);
0x0000f840 mov r1, r8 | r1 = r8;
0x0000f842 bl 0x1b00c | r0 = fcn_0001b00c (r0, r1);
0x0000f846 subs r3, r0, 0 | r3 = r0 - 0;
| if (r3 >= r0) {
0x0000f848 bge 0xf7a4 | goto label_4;
| }
| label_14:
0x0000f84a mvn r0, 1 | r0 = ~1;
0x0000f84e b 0xf706 | goto label_3;
0x0000f850 movs r5, 0x48 | r5 = 0x48;
| label_5:
0x0000f852 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0000f854 movs r0, 0 | r0 = 0;
0x0000f856 strb r5, [r6, r4] | *((r6 + r4)) = r5;
0x0000f858 strh.w r3, [r2, 1] | *((r2 + 1)) = r3;
0x0000f85c b 0xf706 | goto label_3;
0x0000f85e ldr r2, [r1, 0x14] | r2 = *((r1 + 0x14));
0x0000f860 cmp r2, 0 |
| if (r2 == 0) {
0x0000f862 beq 0xf782 | goto label_1;
| }
0x0000f864 movs r5, 0x47 | r5 = 0x47;
0x0000f866 b 0xf852 | goto label_5;
| label_10:
0x0000f868 cmp.w sb, 0x10000 |
| if (sb >= 0x10000) {
0x0000f86c bhs 0xf782 | goto label_1;
| }
0x0000f86e ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x0000f870 ldr r2, [r1] | r2 = *(r1);
0x0000f872 cmp r2, 6 |
| if (r2 > 6) {
0x0000f874 bhi 0xf782 | goto label_1;
| }
0x0000f876 adr r5, 8 | r5 = 8;
0x0000f878 ldr.w r2, [r5, r2, lsl 2] | offset_1 = r2 << 2;
| r2 = *((r5 + offset_1));
0x0000f87c add r5, r2 | r5 += r2;
| /* switch table (7 cases) at 0xf880 */
0x0000f87e bx r5 | return uint32_t (*r5)() ();
0x0000f89c movs r5, 0x49 | r5 = 0x49;
0x0000f89e b 0xf852 | goto label_5;
| label_11:
0x0000f8c0 bl 0x3d3f0 | fcn_0003d3f0 ();
0x0000f8c4 ldr.w r5, [r8] | r5 = *(r8);
0x0000f8c8 b 0xf77e | goto label_6;
| label_9:
0x0000f8ca blx 0x66b4 | fcn_000066b4 ();
0x0000f8ce nop |
0x0000f8d0 str r6, [sp, 0x20] | var_20h = r6;
0x0000f8d2 movs r5, r0 | r5 = r0;
0x0000f8d4 lsls r0, r3, 0xa | r0 = r3 << 0xa;
0x0000f8d6 movs r0, r0 |
0x0000f8d8 str r5, [sp, 0x3f8] | *(arg_3f8h) = r5;
0x0000f8da movs r5, r0 | r5 = r0;
0x0000f8dc str r5, [sp, 0x348] | *(arg_348h) = r5;
0x0000f8de movs r5, r0 | r5 = r0;
0x0000f8e0 cmp r4, 0xe2 |
0x0000f8e2 movs r6, r0 | r6 = r0;
0x0000f8e4 ldr r6, [r2, 0x64] | r6 = *((r2 + 0x64));
0x0000f8e6 movs r3, r0 | r3 = r0;
0x0000f8e8 ldr r0, [r0] | r0 = *(r0);
0x0000f8ea movs r3, r0 | r3 = r0;
0x0000f8ec lsls r0, r6, 0xa | r0 = r6 << 0xa;
0x0000f8ee movs r0, r0 |
0x0000f8f0 cmp r0, 0x63 |
| if (r0 <= 0x63) {
0x0000f8f2 bhi 0xf8fe |
0x0000f8f4 ldr r3, [pc, 0xc] |
0x0000f8f6 add r3, pc | r3 = 0x1f1fe;
0x0000f8f8 ldr.w r0, [r3, r0, lsl 2] | r0 = *(0x1f1fe);
0x0000f8fc bx lr | return r0;
| }
0x0000f8fe ldr r0, [pc, 8] |
0x0000f900 add r0, pc | r0 = 0x1f20e;
0x0000f902 bx lr | return 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/liblttng-ust.so.1.0.0 @ 0x254c8 */
| #include <stdint.h>
|
; (fcn) fcn.000254c8 () | void fcn_000254c8 (int16_t arg_1h) {
| 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_20h;
| int16_t var_24h;
| int16_t var_2ch;
| int16_t var_34h;
| int16_t var_3ch;
| int16_t var_44h;
| int16_t var_54h;
0x000254c8 ldr r1, [pc, 0x10] |
0x000254ca movs r2, 0x25 | r2 = 0x25;
0x000254cc ldr r0, [pc, 0x10] |
0x000254ce push {r3, lr} |
0x000254d0 ldr r3, [pc, 0x10] |
0x000254d2 add r1, pc | r1 = 0x4a9b2;
0x000254d4 add r0, pc | r0 = 0x4a9b8;
0x000254d6 add r3, pc | r3 = 0x4a9be;
0x000254d8 blx 0x6b98 | fcn_00006b98 ();
| if (r6 != 0) {
0x000254dc cbz r6, 0x2553c |
0x000254de movs r2, r0 | r2 = r0;
| if (r0 == 0) {
0x000254e0 cbz r0, 0x25550 | goto label_6;
| }
0x000254e2 movs r2, r0 | r2 = r0;
0x000254e4 invalid |
| }
0x0002553c lsls r3, r0, 0xd | r3 = r0 << 0xd;
0x0002553e ldr r1, [r4, 0x28] | r1 = *((r4 + 0x28));
0x00025540 add.w r2, r2, r3, lsl 4 | r2 += (r3 << 4);
0x00025544 add.w r0, r1, 0x240 | r0 = r1 + 0x240;
0x00025548 ldr r3, [r2, 0x20] | r3 = *((r2 + 0x20));
0x0002554a cmp r0, r3 |
| if (r0 > r3) {
0x0002554c bhi.w 0x258ae | goto label_7;
| }
| label_6:
0x00025550 ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x00025552 add r3, r1 | r3 += r1;
0x00025554 ldr r3, [r3, 0x54] | r3 = *((r3 + 0x54));
0x00025556 str r3, [sp, 0xc] | var_ch = r3;
0x00025558 cmp r7, 0 |
| if (r7 == 0) {
0x0002555a beq.w 0x25778 | goto label_8;
| }
0x0002555e ldr r0, [sp, 8] | r0 = var_8h;
0x00025560 add.w fp, r0, 1 |
| label_1:
0x00025564 movs r0, 0x1e | r0 = 0x1e;
0x00025566 blx 0x66d8 | r0 = fcn_000066d8 ();
0x0002556a subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 <= r0) {
0x0002556c ble.w 0x25758 | goto label_2;
| }
0x00025570 movs r1, 4 | r1 = 4;
0x00025572 mov r0, sb | r0 = sb;
0x00025574 add.w r8, sp, 0x2c | r8 += var_2ch;
0x00025578 bl 0x2c474 | fcn_0002c474 (r0, r1, r2);
0x0002557c lsl.w r2, fp, 3 | r2 = fp << 3;
0x00025580 mov r1, sb | r1 = sb;
0x00025582 mov r0, r8 | r0 = r8;
0x00025584 bl 0x2c410 | r0 = fcn_0002c410 (r0, r1, r2);
0x00025588 ldm.w r8, {r0, r1} | r0 = *(r8);
| r1 = *((r8 + 4));
0x0002558c add.w r3, r4, 0x14 | r3 = r4 + 0x14;
0x0002558e lsls r4, r2, 0xc | r4 = r2 << 0xc;
0x00025590 stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x00025594 ldr r2, [r6] | r2 = *(r6);
0x00025596 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00025598 stm.w r5, {r0, r1} | *(r5) = r0;
| *((r5 + 4)) = r1;
0x0002559c ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x0002559e cmp r3, r1 |
| if (r3 >= r1) {
0x000255a0 bhs.w 0x25758 | goto label_2;
| }
0x000255a4 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000255a8 add.w r2, r2, r3, lsl 4 | r2 += (r3 << 4);
0x000255ac ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x000255ae ldr r1, [r2, 0x20] | r1 = *((r2 + 0x20));
0x000255b0 add.w r0, r3, 8 | r0 = r3 + 8;
0x000255b4 cmp r0, r1 |
| if (r0 > r1) {
0x000255b6 bhi.w 0x25758 | goto label_2;
| }
0x000255ba ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x000255bc cmn r2, r3 |
| if (r2 == r3) {
0x000255be beq.w 0x25758 | goto label_2;
| }
0x000255c2 mov r1, r7 | r1 = r7;
0x000255c4 mov r0, sb | r0 = sb;
0x000255c6 bl 0x2c474 | fcn_0002c474 (r0, r1, r2);
0x000255ca ldr r3, [sp, 0xc] | r3 = var_ch;
0x000255cc add r7, sp, 0x34 | r7 += var_34h;
0x000255ce mov r1, sb | r1 = sb;
0x000255d0 mov r0, r7 | r0 = r7;
0x000255d2 mul r2, fp, r3 | r2 = fp * r3;
0x000255d6 bl 0x2c410 | r0 = fcn_0002c410 (r0, r1, r2);
0x000255da ldm.w r7, {r0, r1} | r0 = *(r7);
| r1 = *((r7 + 4));
0x000255de add.w r3, r4, 0x1c | r3 = r4 + 0x1c;
0x000255e2 stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x000255e6 ldr r2, [r6] | r2 = *(r6);
0x000255e8 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x000255ea stm.w r5, {r0, r1} | *(r5) = r0;
| *((r5 + 4)) = r1;
0x000255ee ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x000255f0 cmp r3, r1 |
| if (r3 >= r1) {
0x000255f2 bhs.w 0x25758 | goto label_2;
| }
0x000255f4 strh r1, [r6, 4] | *((r6 + 4)) = r1;
0x000255f6 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000255fa add.w r2, r2, r3, lsl 4 | r2 += (r3 << 4);
0x000255fe ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x00025600 ldr r1, [r2, 0x20] | r1 = *((r2 + 0x20));
0x00025602 adds r0, r3, 1 | r0 = r3 + 1;
0x00025604 cmp r0, r1 |
| if (r0 > r1) {
0x00025606 bhi.w 0x25758 | goto label_2;
| }
0x0002560a ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x0002560c cmn r2, r3 |
| if (r2 == r3) {
0x0002560e beq.w 0x25758 | goto label_2;
| }
0x00025612 cmp.w fp, 0 |
| if (fp == 0) {
0x00025616 beq 0x256c4 | goto label_9;
| }
0x00025618 mov.w r8, 0 | r8 = 0;
0x0002561c add.w sl, sp, 0x3c | sl += var_3ch;
0x00025620 str.w fp, [sp, 4] | __asm ("str.w fp, [var_4h]");
| do {
0x00025624 movs r1, 4 | r1 = 4;
0x00025626 mov r0, sb | r0 = sb;
0x00025628 bl 0x2c474 | fcn_0002c474 (r0, r1, r2);
0x0002562c ldr r2, [r6] | r2 = *(r6);
0x0002562e ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00025630 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x00025632 cmp r3, r1 |
| if (r3 >= r1) {
0x00025634 bhs.w 0x25894 | goto label_10;
| }
0x00025638 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0002563c lsl.w r7, r8, 3 | r7 = r8 << 3;
0x00025640 add.w r2, r2, r3, lsl 4 | r2 += (r3 << 4);
0x00025644 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00025646 ldr r1, [r2, 0x20] | r1 = *((r2 + 0x20));
0x00025648 add r3, r7 | r3 += r7;
0x0002564a add.w r0, r3, 8 | r0 = r3 + 8;
0x0002564e cmp r0, r1 |
| if (r0 > r1) {
0x00025650 bhi.w 0x25894 | goto label_10;
| }
0x00025652 strh r0, [r4, 8] | *((r4 + 8)) = r0;
0x00025654 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x00025656 mov r1, sb | r1 = sb;
0x00025658 mov r0, sl | r0 = sl;
0x0002565a add.w fp, r2, r3 |
0x0002565e movs r2, 0x28 | r2 = 0x28;
0x00025660 bl 0x2c410 | r0 = fcn_0002c410 (r0, r1, r2);
0x00025664 ldm.w sl, {r0, r1} | r0 = *(sl);
| r1 = *((sl + 4));
0x00025668 stm.w fp, {r0, r1} | *(fp) = r0;
| *((fp + 4)) = r1;
0x0002566c ldr r3, [r6] | r3 = *(r6);
0x0002566e ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x00025670 stm.w r5, {r0, r1} | *(r5) = r0;
| *((r5 + 4)) = r1;
0x00025674 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x00025676 cmp r2, r0 |
| if (r2 >= r0) {
0x00025678 bhs.w 0x258b4 | goto label_11;
| }
0x0002567c add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00025680 ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x00025682 add.w r2, r3, r2, lsl 4 | r2 = r3 + (r2 << 4);
0x00025686 add r7, r1 | r7 += r1;
0x00025688 ldr r1, [r2, 0x20] | r1 = *((r2 + 0x20));
0x0002568a add.w ip, r7, 8 |
0x0002568e cmp ip, r1 |
| if (ip > r1) {
0x00025690 bhi.w 0x258b4 | goto label_11;
| }
0x00025694 ldr r1, [r2, 0x1c] | r1 = *((r2 + 0x1c));
0x00025696 ldr r2, [r1, r7] | r2 = *((r1 + r7));
0x00025698 add r1, r7 | r1 += r7;
0x0002569a cmp r2, r0 |
| if (r2 >= r0) {
0x0002569c bhs 0x25758 | goto label_2;
| }
0x0002569e add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x000256a2 add.w r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x000256a6 ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x000256a8 ldr r1, [r3, 0x20] | r1 = *((r3 + 0x20));
0x000256aa add.w r0, r2, 0x28 | r0 = r2 + 0x28;
0x000256ae cmp r0, r1 |
| if (r0 > r1) {
0x000256b0 bhi 0x25758 | goto label_2;
| }
0x000256b2 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x000256b4 cmn r3, r2 |
| if (r3 == r2) {
0x000256b6 beq 0x25758 | goto label_2;
| }
0x000256b8 ldr r3, [sp, 4] | r3 = var_4h;
0x000256ba add.w r8, r8, 1 | r8++;
0x000256be cmp r3, r8 |
0x000256c0 bne 0x25624 |
| } while (r3 != r8);
0x000256c2 mov fp, r3 |
| label_9:
0x000256c4 movs r1, 4 | r1 = 4;
0x000256c6 mov r0, sb | r0 = sb;
0x000256c8 bl 0x2c474 | fcn_0002c474 (r0, r1, r2);
0x000256cc ldr r3, [sp, 8] | r3 = var_8h;
0x000256ce add r7, sp, 0x44 | r7 += var_44h;
0x000256d0 mov r1, sb | r1 = sb;
0x000256d2 mov r0, r7 | r0 = r7;
0x000256d4 lsls r2, r3, 2 | r2 = r3 << 2;
0x000256d6 bl 0x2c410 | r0 = fcn_0002c410 (r0, r1, r2);
0x000256da ldm.w r7, {r0, r1} | r0 = *(r7);
| r1 = *((r7 + 4));
0x000256de stm.w r4, {r0, r1} | *(r4) = r0;
| *((r4 + 4)) = r1;
0x000256e2 ldr r3, [r6] | r3 = *(r6);
0x000256e4 stm.w r5, {r0, r1} | *(r5) = r0;
| *((r5 + 4)) = r1;
0x000256e8 ldr r0, [r4] | r0 = *(r4);
0x000256ea ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x000256ec cmp r0, r2 |
| if (r0 >= r2) {
0x000256ee bhs 0x25758 | goto label_2;
| }
0x000256f0 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x000256f4 ldr r7, [r4, 4] | r7 = *((r4 + 4));
0x000256f6 add.w r0, r3, r0, lsl 4 | r0 = r3 + (r0 << 4);
0x000256fa add.w ip, r7, 4 |
0x000256fe ldr r1, [r0, 0x20] | r1 = *((r0 + 0x20));
0x00025700 cmp ip, r1 |
| if (ip > r1) {
0x00025702 bhi 0x25758 | goto label_2;
| }
0x00025704 ldr r1, [r0, 0x1c] | r1 = *((r0 + 0x1c));
0x00025706 cmn r1, r7 |
| if (r1 == r7) {
0x00025708 beq 0x25758 | goto label_2;
| }
0x0002570a ldr r7, [sp, 8] | r7 = var_8h;
0x0002570c cmp r7, 0 |
| if (r7 == 0) {
0x0002570e beq 0x2577e | goto label_12;
| }
0x00025710 ldr.w ip, [sp, 0x10] | ip = var_10h;
0x00025714 movs r0, 0 | r0 = 0;
0x00025716 b 0x25728 |
| while (r2 == 0) {
0x00025718 orr r2, r0, 0x10000 | r2 = r0 | 0x10000;
| label_0:
0x0002571c adds r0, 1 | r0++;
0x0002571e str r2, [r1, r3] | *((r1 + r3)) = r2;
0x00025720 cmp r7, r0 |
| if (r7 == r0) {
0x00025722 beq 0x2577e | goto label_12;
| }
0x00025724 ldr r3, [r6] | r3 = *(r6);
0x00025726 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00025728 ldr r1, [r4] | r1 = *(r4);
0x0002572a cmp r2, r1 |
| if (r2 < r1) {
0x0002572c bls 0x25758 | goto label_2;
| }
0x0002572e add.w r1, r1, r1, lsl 1 | r1 += (r1 << 1);
0x00025732 add.w r1, r3, r1, lsl 4 | r1 = r3 + (r1 << 4);
0x00025736 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00025738 ldr r2, [r1, 0x20] | r2 = *((r1 + 0x20));
0x0002573a add.w r3, r3, r0, lsl 2 | r3 += (r0 << 2);
0x0002573e add.w lr, r3, 4 | lr = r3 + 4;
0x00025742 cmp lr, r2 |
| if (lr > r2) {
0x00025744 bhi 0x25758 | goto label_2;
| }
0x00025746 ldr r1, [r1, 0x1c] | r1 = *((r1 + 0x1c));
0x00025748 cmn r1, r3 |
| if (r1 == r3) {
0x0002574a beq 0x25758 | goto label_2;
| }
0x0002574c ldr.w r2, [ip, 0x38] | r2 = *((ip + 0x38));
0x00025750 cmp r2, 0 |
0x00025752 beq 0x25718 |
| }
0x00025754 mov r2, r0 | r2 = r0;
0x00025756 b 0x2571c | goto label_0;
| do {
| label_2:
0x00025758 mvn r0, 0xb | r0 = ~0xb;
| label_5:
0x0002575c ldr r2, [pc, 0x164] |
0x0002575e ldr r3, [pc, 0x160] | r3 = *(0x258c2);
0x00025760 add r2, pc | r2 = 0x4b028;
0x00025762 ldr r3, [r2, r3] | r3 = *(0x4b028);
0x00025764 ldr r2, [r3] | r2 = *(0x4b028);
0x00025766 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00025768 eors r2, r3 | r2 ^= r3;
0x0002576a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0002576e bne.w 0x25890 | goto label_13;
| }
0x00025772 add sp, 0x5c |
0x00025774 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x00025778 ldr.w fp, [sp, 8] | fp = var_8h;
0x0002577c b 0x25564 | goto label_1;
| label_12:
0x0002577e ldr r2, [sp, 0x14] | r2 = var_14h;
0x00025780 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00025782 ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x00025784 cmp r2, 0 |
| if (r2 == 0) {
0x00025786 beq 0x25882 | goto label_14;
| }
0x00025788 add.w r2, fp, -1 | r2 = fp + -1;
| if (r3 == 0) {
0x0002578c cbnz r3, 0x25792 |
0x0002578e orr r2, r2, 0x10000 | r2 |= 0x10000;
| }
| label_4:
0x00025792 movs r1, 8 | r1 = 8;
0x00025794 mov r0, sb | r0 = sb;
0x00025796 str r2, [r4, 8] | *((r4 + 8)) = r2;
0x00025798 bl 0x2c474 | fcn_0002c474 (r0, r1, r2);
0x0002579c ldr r3, [sp, 8] | r3 = var_8h;
0x0002579e mov r0, r5 | r0 = r5;
0x000257a0 mov r1, sb | r1 = sb;
0x000257a2 lsls r2, r3, 3 | r2 = r3 << 3;
0x000257a4 bl 0x2c410 | r0 = fcn_0002c410 (r0, r1, r2);
0x000257a8 ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x000257ac add.w r3, r4, 0xc | r3 = r4 + 0xc;
0x000257b0 add r5, sp, 0x24 | r5 += var_24h;
0x000257b2 stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x000257b6 ldr r3, [r6] | r3 = *(r6);
0x000257b8 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x000257ba stm.w r5, {r0, r1} | *(r5) = r0;
| *((r5 + 4)) = r1;
0x000257be ldr.w lr, [r3, 4] |
0x000257c2 cmp r2, lr |
0x000257c4 bhs 0x25758 |
| } while (r2 >= lr);
0x000257c6 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x000257ca ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x000257cc add.w r1, r3, r2, lsl 4 | r1 = r3 + (r2 << 4);
0x000257d0 add.w r7, r0, 8 | r7 = r0 + 8;
0x000257d4 ldr r2, [r1, 0x20] | r2 = *((r1 + 0x20));
0x000257d6 cmp r7, r2 |
| if (r7 > r2) {
0x000257d8 bhi 0x25758 | goto label_2;
| }
0x000257da ldr r2, [r1, 0x1c] | r2 = *((r1 + 0x1c));
0x000257dc cmn r2, r0 |
| if (r2 == r0) {
0x000257de beq 0x25758 | goto label_2;
| }
0x000257e0 cmp.w fp, 0 |
| if (fp == 0) {
0x000257e4 beq 0x2588c | goto label_15;
| }
0x000257e6 ldr.w sb, [sp, 0x10] | sb = var_10h;
0x000257ea mov.w ip, 0 |
0x000257ee add.w sl, sp, 0x1c | sl += var_1ch;
0x000257f2 mov r7, ip | r7 = ip;
0x000257f4 str.w ip, [sp, 4] | __asm ("str.w ip, [var_4h]");
| label_3:
0x000257f8 ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x000257fa str r2, [sp, 0x1c] | var_1ch = r2;
0x000257fc ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x000257fe str r2, [sp, 0x20] | var_20h = r2;
0x00025800 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00025802 add r2, ip | r2 += ip;
0x00025804 str r2, [sp, 0x20] | var_20h = r2;
0x00025806 ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x00025808 cmp lr, r2 |
| if (lr < r2) {
0x0002580a bls 0x25758 | goto label_2;
| }
0x0002580c ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x0002580e add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00025812 add.w r2, r3, r2, lsl 4 | r2 = r3 + (r2 << 4);
0x00025816 add.w r1, r1, r7, lsl 3 | r1 += (r7 << 3);
0x0002581a ldr r0, [r2, 0x20] | r0 = *((r2 + 0x20));
0x0002581c add.w r8, r1, 8 | r8 = r1 + 8;
0x00025820 cmp r8, r0 |
| if (r8 > r0) {
0x00025822 bhi 0x25758 | goto label_2;
| }
0x00025824 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x00025826 adds r0, r2, r1 | r0 = r2 + r1;
| if (r0 == r2) {
0x00025828 beq 0x25758 | goto label_2;
| }
0x0002582a ldr r2, [r2, r1] | r2 = *((r2 + r1));
0x0002582c cmp lr, r2 |
| if (lr < r2) {
0x0002582e bls 0x25758 | goto label_2;
| }
0x00025830 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00025834 add.w r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x00025838 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x0002583a ldr r1, [r3, 0x20] | r1 = *((r3 + 0x20));
0x0002583c add.w r0, r2, 0x28 | r0 = r2 + 0x28;
0x00025840 cmp r0, r1 |
| if (r0 > r1) {
0x00025842 bhi 0x25758 | goto label_2;
| }
0x00025844 ldr.w lr, [r3, 0x1c] |
0x00025848 adds.w r3, lr, r2 | r3 = lr + r2;
| if (r3 == lr) {
0x0002584c beq 0x25758 | goto label_2;
| }
0x0002584e ldm.w sl, {r0, r1} | r0 = *(sl);
| r1 = *((sl + 4));
0x00025852 adds r3, 0x10 | r3 += 0x10;
0x00025854 stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x00025858 ldr.w r3, [sb, 0x3c] | r3 = *((sb + 0x3c));
0x0002585c stm.w r5, {r0, r1} | *(r5) = r0;
| *((r5 + 4)) = r1;
0x00025860 cmp r3, 1 |
| if (r3 == 1) {
0x00025862 bne 0x25870 |
0x00025864 ldr r3, [sp, 4] | r3 = var_4h;
0x00025866 str.w r3, [lr, r2] | __asm ("str.w r3, [lr, r2]");
0x0002586a ldr r2, [sp, 0xc] | r2 = var_ch;
0x0002586c add r3, r2 | r3 += r2;
0x0002586e str r3, [sp, 4] | var_4h = r3;
| }
0x00025870 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00025872 adds r7, 1 | r7++;
0x00025874 cmp fp, r7 |
0x00025876 add ip, r3 |
| if (fp != r7) {
0x00025878 beq 0x2588c |
0x0002587a ldr r3, [r6] | r3 = *(r6);
0x0002587c ldr.w lr, [r3, 4] |
0x00025880 b 0x257f8 | goto label_3;
| label_14:
0x00025882 clz r3, r3 | r3 &= r3;
0x00025886 lsrs r3, r3, 5 | r3 >>= 5;
0x00025888 lsls r2, r3, 0x10 | r2 = r3 << 0x10;
0x0002588a b 0x25792 | goto label_4;
| }
| label_15:
0x0002588c movs r0, 0 | r0 = 0;
0x0002588e b 0x2575c | goto label_5;
| label_13:
0x00025890 blx 0x66b4 | fcn_000066b4 ();
| label_10:
0x00025894 mov r1, sb | r1 = sb;
0x00025896 mov r0, sl | r0 = sl;
0x00025898 movs r2, 0x28 | r2 = 0x28;
0x0002589a bl 0x2c410 | r0 = fcn_0002c410 (r0, r1, r2);
0x0002589e ldm.w sl, {r0, r1} | r0 = *(sl);
| r1 = *((sl + 4));
0x000258a2 movs r3, 0 | r3 = 0;
0x000258a4 stm.w r5, {r0, r1} | *(r5) = r0;
| *((r5 + 4)) = r1;
0x000258a8 stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x000258ac udf 0xff | __asm ("udf 0xff");
| label_7:
0x000258ae movs r3, 0 | r3 = 0;
0x000258b0 ldr r3, [r3, 0x54] | r3 = *((r3 + 0x54));
0x000258b2 udf 0xff | __asm ("udf 0xff");
| label_11:
0x000258b4 movs r3, 0 | r3 = 0;
0x000258b6 ldr r3, [r3] | r3 = *(r3);
0x000258b8 udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/liblttng-ust.so.1.0.0 @ 0x258c8 */
| #include <stdint.h>
|
; (fcn) fcn.000258c8 () | void fcn_000258c8 (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000258c8 push.w {r3, r4, r5, r6, r7, r8, sb, lr} |
0x000258cc ldr r4, [r1] | r4 = *(r1);
0x000258ce ldr r3, [r0, 0x24] | r3 = *((r0 + 0x24));
0x000258d0 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x000258d2 cmp r3, r2 |
| if (r3 >= r2) {
0x000258d4 bhs.w 0x25a20 | goto label_4;
| }
0x000258d8 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000258dc ldr r5, [r0, 0x28] | r5 = *((r0 + 0x28));
0x000258de add.w r3, r4, r3, lsl 4 | r3 = r4 + (r3 << 4);
0x000258e2 add.w r7, r5, 0x240 | r7 = r5 + 0x240;
0x000258e6 ldr r6, [r3, 0x20] | r6 = *((r3 + 0x20));
0x000258e8 cmp r7, r6 |
| if (r7 > r6) {
0x000258ea bhi.w 0x25a20 | goto label_4;
| }
0x000258ee ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x000258f0 add.w lr, r3, r5 | lr = r3 + r5;
0x000258f4 ldrb.w r3, [lr, 0x64] | r3 = *((lr + 0x64));
0x000258f8 ldr.w r5, [lr, 0x68] | r5 = *((lr + 0x68));
0x000258fc lsls r6, r3, 0x1f | r6 = r3 << 0x1f;
| if (r6 >= r3) {
0x000258fe bpl 0x259f6 | goto label_5;
| }
0x00025900 adds r3, r5, 1 | r3 = r5 + 1;
0x00025902 cmp r5, 0 |
| if (r5 == 0) {
0x00025904 beq.w 0x25a0a | goto label_6;
| }
0x00025908 mov r5, r3 | r5 = r3;
| label_1:
0x0002590a mov.w ip, 0 |
0x0002590e b 0x25926 |
| while (r4 == 0) {
0x00025910 orr r4, ip, 0x10000 | r4 = ip | 0x10000;
0x00025914 add.w ip, ip, 1 |
0x00025918 str r4, [r3, r2] | *((r3 + r2)) = r4;
0x0002591a ldr.w r3, [lr, 0x68] | r3 = *((lr + 0x68));
0x0002591e cmp r3, ip |
| if (r3 < ip) {
0x00025920 bls 0x25960 | goto label_7;
| }
| label_0:
0x00025922 ldr r4, [r1] | r4 = *(r1);
0x00025924 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00025926 ldr r3, [r0] | r3 = *(r0);
0x00025928 cmp r2, r3 |
| if (r2 < r3) {
0x0002592a bls 0x259f2 | goto label_8;
| }
0x0002592c ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x0002592e add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00025932 add.w r3, r4, r3, lsl 4 | r3 = r4 + (r3 << 4);
0x00025936 add.w r2, r2, ip, lsl 2 | r2 += (ip << 2);
0x0002593a ldr r4, [r3, 0x20] | r4 = *((r3 + 0x20));
0x0002593c adds r6, r2, 4 | r6 = r2 + 4;
0x0002593e cmp r6, r4 |
| if (r6 > r4) {
0x00025940 bhi 0x259f2 | goto label_8;
| }
0x00025942 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00025944 cmn r3, r2 |
| if (r3 == r2) {
0x00025946 beq 0x259f2 | goto label_8;
| }
0x00025948 ldr.w r4, [lr, 0x88] | r4 = *((lr + 0x88));
0x0002594c cmp r4, 0 |
0x0002594e beq 0x25910 |
| }
0x00025950 mov r4, ip | r4 = ip;
0x00025952 add.w ip, ip, 1 |
0x00025956 str r4, [r3, r2] | *((r3 + r2)) = r4;
0x00025958 ldr.w r3, [lr, 0x68] | r3 = *((lr + 0x68));
0x0002595c cmp r3, ip |
| if (r3 > ip) {
0x0002595e bhi 0x25922 | goto label_0;
| }
| label_7:
0x00025960 ldrb.w r3, [lr, 0x64] | r3 = *((lr + 0x64));
0x00025964 lsls r3, r3, 0x1f | r3 <<= 0x1f;
0x00025966 it mi |
| if (r3 >= r3) {
0x00025968 addmi r3, r5, -1 | r3 = r5 + -1;
| }
| if (r3 < r3) {
0x0002596c bmi 0x25a0e | goto label_9;
| }
0x0002596e ldr.w r3, [lr, 0x88] | r3 = *((lr + 0x88));
0x00025972 clz r3, r3 | r3 &= r3;
0x00025976 lsrs r3, r3, 5 | r3 >>= 5;
0x00025978 lsls r3, r3, 0x10 | r3 <<= 0x10;
| label_3:
0x0002597a mov.w ip, 0 |
0x0002597e str r3, [r0, 8] | *((r0 + 8)) = r3;
0x00025980 mov r7, ip | r7 = ip;
| if (r5 == 0) {
0x00025982 cbz r5, 0x259e8 | goto label_2;
| }
| do {
0x00025984 ldr r2, [r1] | r2 = *(r1);
0x00025986 ldr r3, [r0, 0x14] | r3 = *((r0 + 0x14));
0x00025988 ldr.w r8, [r2, 4] | r8 = *((r2 + 4));
0x0002598c cmp r3, r8 |
| if (r3 >= r8) {
0x0002598e bhs 0x259f2 | goto label_8;
| }
0x00025990 ldr r4, [r0, 0x18] | r4 = *((r0 + 0x18));
0x00025992 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00025996 add.w r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
0x0002599a add.w r4, r4, ip, lsl 3 | r4 += (ip << 3);
0x0002599e ldr r6, [r3, 0x20] | r6 = *((r3 + 0x20));
0x000259a0 add.w sb, r4, 8 | sb = r4 + 8;
0x000259a4 cmp sb, r6 |
| if (sb > r6) {
0x000259a6 bhi 0x259f2 | goto label_8;
| }
0x000259a8 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x000259aa adds r6, r3, r4 | r6 = r3 + r4;
| if (r6 == r3) {
0x000259ac beq 0x259f2 | goto label_8;
| }
0x000259ae ldr r3, [r3, r4] | r3 = *((r3 + r4));
0x000259b0 cmp r3, r8 |
| if (r3 >= r8) {
0x000259b2 bhs 0x259f2 | goto label_8;
| }
0x000259b4 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000259b8 ldr r4, [r6, 4] | r4 = *((r6 + 4));
0x000259ba add.w r2, r2, r3, lsl 4 | r2 += (r3 << 4);
0x000259be add.w r6, r4, 0x28 | r6 = r4 + 0x28;
0x000259c2 ldr r3, [r2, 0x20] | r3 = *((r2 + 0x20));
0x000259c4 cmp r6, r3 |
| if (r6 > r3) {
0x000259c6 bhi 0x259f2 | goto label_8;
| }
0x000259c8 ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x000259ca adds r3, r3, r4 | r3 += r4;
| if (r3 == r3) {
0x000259cc beq 0x259f2 | goto label_8;
| }
0x000259ce ldr.w r2, [lr, 0x84] | r2 = *((lr + 0x84));
| if (r2 == 0) {
0x000259d2 cbz r2, 0x25a1c | goto label_10;
| }
0x000259d4 str r7, [r3, 4] | *((r3 + 4)) = r7;
0x000259d6 ldr.w r2, [lr, 0x84] | r2 = *((lr + 0x84));
| if (r2 == 0) {
0x000259da cbz r2, 0x25a1c | goto label_10;
| }
0x000259dc str r7, [r3, 8] | *((r3 + 8)) = r7;
0x000259de add.w ip, ip, 1 |
0x000259e2 str r7, [r3, 0xc] | *((r3 + 0xc)) = r7;
0x000259e4 cmp ip, r5 |
0x000259e6 bne 0x25984 |
| } while (ip != r5);
| label_2:
0x000259e8 ldr.w r3, [lr, 0x84] | r3 = *((lr + 0x84));
| if (r3 == 0) {
0x000259ec cbz r3, 0x25a1c | goto label_10;
| }
0x000259ee movs r3, 0 | r3 = 0;
0x000259f0 str r3, [r0, 0x30] | *((r0 + 0x30)) = r3;
| label_8:
0x000259f2 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_5:
0x000259f6 cmp r5, 0 |
| if (r5 != 0) {
0x000259f8 bne 0x2590a | goto label_1;
| }
0x000259fa ldr.w r3, [lr, 0x88] | r3 = *((lr + 0x88));
0x000259fe clz r3, r3 | r3 &= r3;
0x00025a02 lsrs r3, r3, 5 | r3 >>= 5;
0x00025a04 lsls r3, r3, 0x10 | r3 <<= 0x10;
0x00025a06 str r3, [r0, 8] | *((r0 + 8)) = r3;
0x00025a08 b 0x259e8 | goto label_2;
| label_6:
0x00025a0a mov r3, r5 | r3 = r5;
0x00025a0c movs r5, 1 | r5 = 1;
| label_9:
0x00025a0e ldr.w r2, [lr, 0x88] | r2 = *((lr + 0x88));
0x00025a12 cmp r2, 0 |
| if (r2 != 0) {
0x00025a14 bne 0x2597a | goto label_3;
| }
0x00025a16 orr r3, r3, 0x10000 | r3 |= 0x10000;
0x00025a1a b 0x2597a | goto label_3;
| label_10:
0x00025a1c bl 0x254c8 | fcn_000254c8 (r0);
| label_4:
0x00025a20 movs r3, 0 | r3 = 0;
0x00025a22 ldr r3, [r3, 0x68] | r3 = *((r3 + 0x68));
0x00025a24 udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/liblttng-ust.so.1.0.0 @ 0x26354 */
| #include <stdint.h>
|
; (fcn) fcn.00026354 () | void fcn_00026354 (int16_t arg_4h, int16_t arg1, int16_t arg2, int16_t arg3) {
| 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_24h;
| int16_t var_224h;
| int16_t var_22ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00026354 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00026358 mov lr, r0 | lr = r0;
0x0002635a ldr r0, [pc, 0x1b4] |
0x0002635c mov r6, r2 | r6 = r2;
0x0002635e sub.w sp, sp, 0x22c |
0x00026362 ldr r3, [r2] | r3 = *(r2);
0x00026364 ldr r2, [pc, 0x1ac] | r2 = *(0x26514);
0x00026366 add r0, pc | r0 = "liblttng_ust[%ld/%ld]: Error: Unknown interpreter register type (%d) (in %s() at ../../../../lttng-ust-2.13.0/src/lib/lttng-ust/lttng-bytecode-interpreter.c:1322)\n";
0x00026368 ldr.w sl, [pc, 0x1ac] |
0x0002636c ldr r2, [r0, r2] |
0x0002636e add sl, pc | sl = 0x4c88a;
0x00026370 ldr r2, [r2] | r2 = "liblttng_ust[%ld/%ld]: Error: Unknown interpreter register type (%d) (in %s() at ../../../../lttng-ust-2.13.0/src/lib/lttng-ust/lttng-bytecode-interpreter.c:1322)\n";
0x00026372 str r2, [sp, 0x224] | var_224h = r2;
0x00026374 mov.w r2, 0 | r2 = 0;
0x00026378 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0002637a ldr.w r4, [lr, 0x24] | r4 = *((lr + 0x24));
0x0002637e cmp r4, r2 |
| if (r4 >= r2) {
0x00026380 bhs.w 0x2650a | goto label_3;
| }
0x00026384 add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x00026388 ldr.w r0, [lr, 0x28] | r0 = *((lr + 0x28));
0x0002638c mov r7, r1 | r7 = r1;
0x0002638e add.w r4, r3, r4, lsl 4 | r4 = r3 + (r4 << 4);
0x00026392 add.w r5, r0, 0x240 | r5 = r0 + 0x240;
0x00026396 ldr r1, [r4, 0x20] | r1 = *((r4 + 0x20));
0x00026398 cmp r5, r1 |
| if (r5 > r1) {
0x0002639a bhi.w 0x2650a | goto label_3;
| }
0x0002639e ldr r5, [r4, 0x1c] | r5 = *((r4 + 0x1c));
0x000263a0 ldr.w ip, [lr, 8] | ip = *((lr + 8));
0x000263a2 stm r0!, {r3} | *(r0!) = r3;
0x000263a4 add r5, r0 | r5 += r0;
0x000263a6 ldr.w r1, [r5, 0x88] | r1 = *((r5 + 0x88));
0x000263aa ldr r4, [r5, 0x50] | r4 = *((r5 + 0x50));
0x000263ac uxth.w r8, ip | r8 = (int16_t) ip;
0x000263b0 add.w sb, r4, -1 | sb = r4 + -1;
0x000263b4 cmp r1, 0 |
| if (r1 != 0) {
0x000263b6 bne 0x26458 | goto label_4;
| }
| label_0:
0x000263b8 ldr.w r0, [lr, 0x14] | r0 = *((lr + 0x14));
0x000263bc cmp r2, r0 |
| if (r2 < r0) {
0x000263be bls 0x26454 | goto label_5;
| }
0x000263c0 ldr.w r4, [lr, 0x18] | r4 = *((lr + 0x18));
0x000263c4 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x000263c8 add.w lr, r3, r0, lsl 4 | lr = r3 + (r0 << 4);
0x000263cc add.w r4, r4, r8, lsl 3 | r4 += (r8 << 3);
0x000263d0 ldr.w r0, [lr, 0x20] | r0 = *((lr + 0x20));
0x000263d4 add.w r8, r4, 8 | r8 = r4 + 8;
0x000263d8 cmp r8, r0 |
| if (r8 > r0) {
0x000263da bhi 0x26454 | goto label_5;
| }
0x000263dc ldr.w r8, [lr, 0x1c] | r8 = *((lr + 0x1c));
0x000263e0 adds.w fp, r8, r4 |
| if (fp == r8) {
0x000263e4 beq 0x26454 | goto label_5;
| }
0x000263e6 cmp r1, 0 |
| if (r1 == 0) {
0x000263e8 beq 0x2645c | goto label_6;
| }
| label_1:
0x000263ea ldr.w r1, [r8, r4] | r1 = *((r8 + r4));
0x000263ee cmp r2, r1 |
| if (r2 < r1) {
0x000263f0 bls 0x26454 | goto label_5;
| }
0x000263f2 add.w r1, r1, r1, lsl 1 | r1 += (r1 << 1);
0x000263f6 ldr.w r0, [fp, 4] | r0 = *(arg_4h);
0x000263fa add.w r1, r3, r1, lsl 4 | r1 = r3 + (r1 << 4);
0x000263fe add.w r6, r0, 0x28 | r6 = r0 + 0x28;
0x00026402 ldr r4, [r1, 0x20] | r4 = *((r1 + 0x20));
0x00026404 cmp r6, r4 |
| if (r6 > r4) {
0x00026406 bhi 0x26454 | goto label_5;
| }
0x00026408 ldr r1, [r1, 0x1c] | r1 = *((r1 + 0x1c));
0x0002640a adds r0, r1, r0 | r0 = r1 + r0;
| if (r0 == r1) {
0x0002640c beq 0x26454 | goto label_5;
| }
0x0002640e ldr r1, [r5, 0x54] | r1 = *((r5 + 0x54));
0x00026410 ldr r4, [r0, 0x10] | r4 = *((r0 + 0x10));
0x00026412 subs r1, 1 | r1--;
0x00026414 cmp r2, r4 |
0x00026416 and.w r1, r1, sb | r1 &= sb;
0x0002641a and.w r1, r1, r7 | r1 &= r7;
| if (r2 < r4) {
0x0002641e bls 0x26454 | goto label_5;
| }
0x00026420 add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x00026424 ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x00026426 add.w r3, r3, r4, lsl 4 | r3 += (r4 << 4);
0x0002642a add r2, r1 | r2 += r1;
0x0002642c ldr r1, [r3, 0x20] | r1 = *((r3 + 0x20));
0x0002642e adds r0, r2, 1 | r0 = r2 + 1;
0x00026430 cmp r0, r1 |
| if (r0 > r1) {
0x00026432 bhi 0x26454 | goto label_5;
| }
0x00026434 ldr r0, [r3, 0x1c] | r0 = *((r3 + 0x1c));
0x00026436 add r0, r2 | r0 += r2;
| do {
0x00026438 ldr r2, [pc, 0xe0] |
0x0002643a ldr r3, [pc, 0xd8] | r3 = *(0x26516);
0x0002643c add r2, pc | r2 = 0x4c95c;
0x0002643e ldr r3, [r2, r3] | r3 = *(0x4c95c);
0x00026440 ldr r2, [r3] | r2 = *(0x4c95c);
0x00026442 ldr r3, [sp, 0x224] | r3 = var_224h;
0x00026444 eors r2, r3 | r2 ^= r3;
0x00026446 mov.w r3, 0 | r3 = 0;
0x00026448 lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 != r0) {
0x0002644a bne 0x26506 | goto label_7;
| }
0x0002644c add.w sp, sp, 0x22c |
0x00026450 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x00026454 movs r0, 0 | r0 = 0;
0x00026456 b 0x26438 |
| } while (1);
| label_4:
0x00026458 mov r8, ip | r8 = ip;
0x0002645a b 0x263b8 | goto label_0;
| label_6:
0x0002645c tst.w ip, 0x10000 |
| if ((ip & 0x10000) == 0) {
0x00026460 beq 0x263ea | goto label_1;
| }
0x00026462 dmb ish | __asm ("dmb ish");
| do {
0x00026466 ldrex r3, [r5] | __asm ("ldrex r3, [r5]");
0x0002646a adds r3, 1 | r3++;
0x0002646c strex r2, r3, [r5] | __asm ("strex r2, r3, [r5]");
0x00026470 cmp r2, 0 |
0x00026472 bne 0x26466 |
| } while (r2 != 0);
0x00026474 dmb ish | __asm ("dmb ish");
0x00026478 ldr r3, [pc, 0xa4] |
0x0002647a add r3, pc | r3 = 0x4c99e;
0x0002647c ldr r2, [r3] | r2 = *(0x4c99e);
0x0002647e str r2, [sp, 0x10] | var_10h = r2;
0x00026480 cmp r2, 0 |
| if (r2 == 0) {
0x00026482 beq 0x264f8 | goto label_8;
| }
| label_2:
0x00026484 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00026486 cmp r3, 2 |
0x00026488 beq 0x26490 |
| while (1) {
0x0002648a ldr r3, [r6] | r3 = *(r6);
0x0002648c ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0002648e b 0x263ea | goto label_1;
0x00026490 blx 0x6908 | r0 = fcn_00006908 ();
0x00026494 ldr r2, [r0] | r2 = *(r0);
0x00026496 str r0, [sp, 0x18] | var_18h = r0;
0x00026498 str r2, [sp, 0x1c] | var_1ch = r2;
0x0002649a blx 0x6890 | fcn_00006890 ();
0x0002649e str r0, [sp, 0x14] | var_14h = r0;
0x000264a0 blx 0x6554 | fcn_00006554 ();
0x000264a4 ldr r2, [pc, 0x7c] |
0x000264a6 mov.w r1, 0x200 | r1 = 0x200;
0x000264aa ldr r3, [sp, 0x14] | r3 = var_14h;
0x000264ac str r0, [sp] | *(sp) = r0;
0x000264ae add r0, sp, 0x24 | r0 += var_24h;
0x000264b0 add r2, pc | r2 = 0x4c9d8;
0x000264b2 str r0, [sp, 0x14] | var_14h = r0;
0x000264b4 adds r2, 0x3c | r2 += 0x3c;
0x000264b6 str r2, [sp, 0xc] | var_ch = r2;
0x000264b8 ldr r2, [pc, 0x6c] |
0x000264ba add r2, pc | r2 = 0x4c9e6;
0x000264bc str r2, [sp, 4] | var_4h = r2;
0x000264be movw r2, 0x21f | r2 = 0x21f;
0x000264c2 str r2, [sp, 8] | var_8h = r2;
0x000264c4 ldr r2, [pc, 0x64] |
0x000264c6 add r2, pc | r2 = 0x4c9f6;
0x000264c8 bl 0x3e064 | fcn_0003e064 (r0, r1, r2, r3);
0x000264cc ldr r2, [sp, 0x14] | r2 = var_14h;
0x000264ce movs r3, 0 | r3 = 0;
0x000264d0 strb.w r3, [r2, 0x1ff] | *((r2 + 0x1ff)) = r3;
0x000264d4 mov r0, r2 | r0 = r2;
0x000264d6 blx 0x68b4 | r0 = fcn_000068b4 ();
0x000264da mov r2, r0 | r2 = r0;
0x000264dc ldrd r0, r1, [sp, 0x10] | __asm ("ldrd r0, r1, [var_10h]");
0x000264e0 bl 0x3d5e4 | fcn_0003d5e4 (r0, r1, r2);
0x000264e4 ldrd r3, r2, [sp, 0x18] | __asm ("ldrd r3, r2, [var_18h]");
0x000264e8 str r2, [r3] | *(r3) = r2;
0x000264ea ldr r3, [pc, 0x44] | r3 = *(0x26532);
0x000264ec ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x000264f0 ldr r0, [r3] | r0 = *(0x26532);
0x000264f2 blx 0x6560 | fcn_00006560 ();
0x000264f6 b 0x2648a |
| }
| label_8:
0x000264f8 str r3, [sp, 0x10] | var_10h = r3;
0x000264fa bl 0x3d3f0 | fcn_0003d3f0 ();
0x000264fe ldr r3, [sp, 0x10] | r3 = var_10h;
0x00026500 ldr r3, [r3] | r3 = *(r3);
0x00026502 str r3, [sp, 0x10] | var_10h = r3;
0x00026504 b 0x26484 | goto label_2;
| label_7:
0x00026506 blx 0x66b4 | fcn_000066b4 ();
| label_3:
0x0002650a movs r3, 0 | r3 = 0;
0x0002650c ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0002650e udf 0xff | __asm ("udf 0xff");
| }
[*] Function popen used 1 times liblttng-ust.so.1.0.0