[*] Binary protection state of libasound.so.2.0.0
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function strcpy tear down of libasound.so.2.0.0
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libasound.so.2.0.0 @ 0x7779c */
| #include <stdint.h>
|
; (fcn) sym.snd_rawmidi_virtual_open () | void snd_rawmidi_virtual_open (int16_t arg_30h, int16_t arg_34h, int16_t arg_38h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| char * src;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| if (? >= ?) {
0x0007779c ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x000777a0 mov sl, r2 | sl = r2;
0x000777a2 ldr r2, [pc, 0x1ac] |
0x000777a4 mov sb, r3 | sb = r3;
0x000777a6 sub sp, 0x10 |
0x000777a8 mov r8, r1 | r8 = r1;
0x000777aa ldr r3, [pc, 0x1a8] | r3 = *(0x77956);
0x000777ac mov r7, r0 | r7 = r0;
0x000777ae add r2, pc | r2 = 0xef104;
0x000777b0 ldr r3, [r2, r3] |
0x000777b2 ldr r3, [r3] | r3 = *(0xef104);
0x000777b4 str r3, [sp, 0xc] | var_ch = r3;
0x000777b6 mov.w r3, 0 | r3 = 0;
| if (r0 != 0) {
0x000777ba cbz r0, 0x777c0 |
0x000777bc movs r3, 0 | r3 = 0;
0x000777be str r3, [r0] | *(r0) = r3;
| }
0x000777c0 cmp.w r8, 0 |
| if (r8 != 0) {
0x000777c4 beq 0x777cc |
0x000777c6 movs r3, 0 | r3 = 0;
0x000777c8 str.w r3, [r8] | __asm ("str.w r3, [r8]");
| }
0x000777cc movs r1, 0x50 | r1 = 0x50;
0x000777ce movs r0, 1 | r0 = 1;
0x000777d0 blx 0x1d2a4 | r0 = fcn_0001d2a4 ();
0x000777d4 mov r4, r0 | r4 = r0;
0x000777d6 cmp r0, 0 |
| if (r0 == 0) {
0x000777d8 beq.w 0x77914 | goto label_2;
| }
0x000777dc ldr r3, [sp, 0x30] | r3 = *(arg_30h);
0x000777de add.w r1, r0, 0xc | r1 = r0 + 0xc;
0x000777e2 str.w sb, [r0, 4] | __asm ("str.w sb, [r0, 4]");
0x000777e6 str r3, [r0, 8] | *((r0 + 8)) = r3;
0x000777e8 mov.w r0, 0x100 | r0 = 0x100;
0x000777ec blx 0x1db08 | r0 = fcn_0001db08 ();
0x000777f0 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 >= r0) {
0x000777f2 blt 0x778b2 |
0x000777f4 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000777f6 blx 0x1cee0 | fcn_0001cee0 ();
0x000777fa ldr r3, [sp, 0x34] | r3 = *(arg_34h);
0x000777fc ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000777fe clz r1, r3 | r1 &= r3;
0x00077802 lsrs r1, r1, 5 | r1 >>= 5;
0x00077804 blx 0x1e3f4 | fcn_0001e3f4 ();
| if (r7 != 0) {
0x00077808 cbz r7, 0x77858 |
0x0007780a movs r1, 0x34 | r1 = 0x34;
0x0007780c movs r0, 1 | r0 = 1;
0x0007780e blx 0x1d2a4 | r0 = fcn_0001d2a4 ();
0x00077812 mov r5, r0 | r5 = r0;
0x00077814 cmp r0, 0 |
| if (r0 == 0) {
0x00077816 beq.w 0x7792c | goto label_3;
| }
0x0007781a cmp.w sl, 0 |
| if (sl != 0) {
0x0007781e beq 0x77828 |
0x00077820 mov r0, sl | r0 = sl;
0x00077822 blx 0x1e4ec | fcn_0001e4ec ();
0x00077826 str r0, [r5, 4] | *((r5 + 4)) = r0;
| }
0x00077828 ldr r3, [sp, 0x38] | r3 = *(arg_38h);
0x0007782a add r1, sp, 4 | r1 += src;
0x0007782c vldr d16, [pc, 0x110] | __asm ("vldr d16, aav.0x000000ff");
0x00077830 mov r0, sb | r0 = sb;
0x00077832 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x00077834 movs r3, 1 | r3 = 1;
0x00077836 mov r2, r3 | r2 = r3;
0x00077838 vstr d16, [r5, 8] | __asm ("vstr d16, [r5, 8]");
0x0007783c blx 0x1de34 | r0 = strcpy (r0, r1)
0x00077840 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x00077842 blt 0x77906 | goto label_4;
| }
0x00077844 ldr r3, [r4] | r3 = *(r4);
0x00077846 str r4, [r5, 0x20] | *((r5 + 0x20)) = r4;
0x00077848 str r5, [r7] | *(r7) = r5;
0x0007784a adds r3, 1 | r3++;
0x0007784c str r3, [r4] | *(r4) = r3;
0x0007784e ldr r3, [sp, 4] | r3 = src;
0x00077850 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x00077852 ldr r3, [pc, 0x104] |
0x00077854 add r3, pc | r3 = 0xef1b2;
0x00077856 str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
| }
0x00077858 cmp.w r8, 0 |
| if (r8 != 0) {
0x0007785c beq 0x778ae |
0x0007785e movs r1, 0x34 | r1 = 0x34;
0x00077860 movs r0, 1 | r0 = 1;
0x00077862 blx 0x1d2a4 | r0 = fcn_0001d2a4 ();
0x00077866 mov r5, r0 | r5 = r0;
0x00077868 cmp r0, 0 |
| if (r0 == 0) {
0x0007786a beq 0x7792c | goto label_3;
| }
0x0007786c cmp.w sl, 0 |
| if (sl != 0) {
0x00077870 beq 0x7787a |
0x00077872 mov r0, sl | r0 = sl;
0x00077874 blx 0x1e4ec | fcn_0001e4ec ();
0x00077878 str r0, [r5, 4] | *((r5 + 4)) = r0;
| }
0x0007787a ldr r3, [sp, 0x38] | r3 = *(arg_38h);
0x0007787c movs r2, 1 | r2 = 1;
0x0007787e vldr d16, [pc, 0xc8] | __asm ("vldr d16, aav.0x000000ff");
0x00077882 mov r0, sb | r0 = sb;
0x00077884 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x00077886 movs r3, 4 | r3 = 4;
0x00077888 add.w r1, sp, r3 | r1 = sp + r3;
0x0007788c vstr d16, [r5, 8] | __asm ("vstr d16, [r5, 8]");
0x00077890 blx 0x1de34 | r0 = strcpy (r0, r1)
0x00077894 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x00077896 blt 0x77906 | goto label_4;
| }
0x00077898 ldr r3, [r4] | r3 = *(r4);
0x0007789a ldr r1, [sp, 4] | r1 = src;
0x0007789c str r4, [r5, 0x20] | *((r5 + 0x20)) = r4;
0x0007789e adds r2, r3, 1 | r2 = r3 + 1;
0x000778a0 ldr r3, [pc, 0xb8] |
0x000778a2 str.w r5, [r8] | __asm ("str.w r5, [r8]");
0x000778a6 str r1, [r5, 0x18] | *((r5 + 0x18)) = r1;
0x000778a8 add r3, pc | r3 = 0xef208;
0x000778aa str r2, [r4] | *(r4) = r2;
0x000778ac str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
| }
0x000778ae movs r6, 0 | r6 = 0;
0x000778b0 b 0x778ea | goto label_5;
| }
0x000778b2 cmp.w sb, 0 |
| if (sb != 0) {
0x000778b6 beq 0x778be |
0x000778b8 mov r0, sb | r0 = sb;
0x000778ba blx 0x1ef34 | fcn_0001ef34 ();
| }
0x000778be movs r5, 0 | r5 = 0;
| do {
| label_0:
0x000778c0 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
| if (r0 != 0) {
0x000778c2 cbz r0, 0x778c8 |
0x000778c4 blx 0x1da74 | fcn_0001da74 ();
| }
0x000778c8 mov r0, r4 | r0 = r4;
0x000778ca blx 0x1d854 | fcn_0001d854 ();
| if (r7 != 0) {
| label_1:
0x000778ce cbz r7, 0x778d6 |
0x000778d0 ldr r0, [r7] | r0 = *(r7);
0x000778d2 blx 0x1d854 | fcn_0001d854 ();
| }
0x000778d6 cmp.w r8, 0 |
| if (r8 != 0) {
0x000778da beq 0x778e4 |
0x000778dc ldr.w r0, [r8] | r0 = *(r8);
0x000778e0 blx 0x1d854 | fcn_0001d854 ();
| }
0x000778e4 mov r0, r5 | r0 = r5;
0x000778e6 blx 0x1d854 | fcn_0001d854 ();
| label_5:
0x000778ea ldr r2, [pc, 0x74] |
0x000778ec ldr r3, [pc, 0x64] | r3 = *(0x77954);
0x000778ee add r2, pc | r2 = 0xef254;
0x000778f0 ldr r3, [r2, r3] | r3 = *(0xef254);
0x000778f2 ldr r2, [r3] | r2 = *(0xef254);
0x000778f4 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000778f6 eors r2, r3 | r2 ^= r3;
0x000778f8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000778fc bne 0x77928 | goto label_6;
| }
0x000778fe mov r0, r6 | r0 = r6;
0x00077900 add sp, 0x10 |
0x00077902 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_4:
0x00077906 cmp.w sb, 0 |
0x0007790a beq 0x778c0 |
| } while (sb == 0);
0x0007790c mov r0, sb | r0 = sb;
0x0007790e blx 0x1ef34 | fcn_0001ef34 ();
0x00077912 b 0x778c0 | goto label_0;
| label_2:
0x00077914 cmp.w sb, 0 |
| if (sb != 0) {
0x00077918 beq 0x77920 |
0x0007791a mov r0, sb | r0 = sb;
0x0007791c blx 0x1ef34 | fcn_0001ef34 ();
| }
0x00077920 movs r5, 0 | r5 = 0;
0x00077922 mvn r6, 0xb | r6 = ~0xb;
0x00077926 b 0x778ce | goto label_1;
| label_6:
0x00077928 blx 0x1e54c | fcn_0001e54c ();
| label_3:
0x0007792c cmp.w sb, 0 |
| if (sb != 0) {
0x00077930 beq 0x77938 |
0x00077932 mov r0, sb | r0 = sb;
0x00077934 blx 0x1ef34 | fcn_0001ef34 ();
| }
0x00077938 movs r5, 0 | r5 = 0;
0x0007793a mvn r6, 0xb | r6 = ~0xb;
0x0007793e b 0x778c0 | goto label_0;
| }
[*] Function strcpy used 3 times libasound.so.2.0.0