[*] Binary protection state of liblttng-ust.so.1.0.0
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function strcpy 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-80367616.squashfs_v4_le_extract/usr/lib/liblttng-ust.so.1.0.0 @ 0x3c2e4 */
| #include <stdint.h>
|
; (fcn) fcn.0003c2e4 () | void fcn_0003c2e4 (uint32_t arg1) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| char * src;
| int16_t var_14h;
| char * str;
| int16_t var_2dbh;
| int16_t var_2dch;
| int16_t var_2e4h;
| r0 = arg1;
0x0003c2e4 ldr r2, [pc, 0x140] |
0x0003c2e6 ldr r3, [pc, 0x144] | r3 = *(0x3c42e);
0x0003c2e8 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x0003c2ec sub.w sp, sp, 0x2e4 |
0x0003c2f0 add r2, pc | r2 = 0x7871c;
0x0003c2f2 ldr r3, [r2, r3] |
0x0003c2f4 ldr r3, [r3] | r3 = *(0x7871c);
0x0003c2f6 str r3, [sp, 0x2dc] | var_2dch = r3;
0x0003c2f8 mov.w r3, 0 | r3 = 0;
0x0003c2fc cmp r0, 0 |
| if (r0 == 0) {
0x0003c2fe beq.w 0x3c414 | goto label_5;
| }
0x0003c302 blx 0x6638 | opendir ();
0x0003c306 mov.w r6, -1 | r6 = -1;
0x0003c30a mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x0003c30c cbz r0, 0x3c36a | goto label_2;
| }
| do {
| label_0:
0x0003c30e mov r0, r5 | r0 = r5;
0x0003c310 blx 0x6c18 | r0 = fcn_00006c18 ();
| if (r0 == 0) {
0x0003c314 cbz r0, 0x3c362 | goto label_6;
| }
| label_1:
0x0003c316 ldrb r3, [r0, 0x12] | r3 = *((r0 + 0x12));
0x0003c318 cmp r3, 4 |
0x0003c31a bne 0x3c30e |
| } while (r3 != 4);
0x0003c31c ldrb r3, [r0, 0x13] | r3 = *((r0 + 0x13));
0x0003c31e cmp r3, 0x63 |
| if (r3 != 0x63) {
0x0003c320 bne 0x3c30e | goto label_0;
| }
0x0003c322 ldrb r3, [r0, 0x14] | r3 = *((r0 + 0x14));
0x0003c324 cmp r3, 0x70 |
| if (r3 != 0x70) {
0x0003c326 bne 0x3c30e | goto label_0;
| }
0x0003c328 ldrb r3, [r0, 0x15] | r3 = *((r0 + 0x15));
0x0003c32a cmp r3, 0x75 |
| if (r3 != 0x75) {
0x0003c32c bne 0x3c30e | goto label_0;
| }
0x0003c32e add.w r4, r0, 0x16 | r4 = r0 + 0x16;
0x0003c332 add r7, sp, 0x10 | r7 += src;
0x0003c334 movs r2, 0xa | r2 = 0xa;
0x0003c336 mov r1, r7 | r1 = r7;
0x0003c338 mov r0, r4 | r0 = r4;
0x0003c33a blx 0x6974 | strcpy (r0, r1)
0x0003c33e mvn r3, 0x80000000 | r3 = ~0x80000000;
0x0003c342 cmp r0, r3 |
| if (r0 == r3) {
0x0003c344 beq 0x3c30e | goto label_0;
| }
0x0003c346 ldr r3, [sp, 0x10] | r3 = src;
0x0003c348 cmp r4, r3 |
| if (r4 == r3) {
0x0003c34a beq 0x3c30e | goto label_0;
| }
0x0003c34c ldrb r3, [r3] | r3 = *(r3);
0x0003c34e cmp r3, 0 |
| if (r3 != 0) {
0x0003c350 bne 0x3c30e | goto label_0;
| }
0x0003c352 cmp r6, r0 |
0x0003c354 it lt |
| if (r6 >= r0) {
0x0003c356 movlt r6, r0 | r6 = r0;
| }
0x0003c358 mov r0, r5 | r0 = r5;
0x0003c35a blx 0x6c18 | r0 = fcn_00006c18 ();
0x0003c35e cmp r0, 0 |
| if (r0 != 0) {
0x0003c360 bne 0x3c316 | goto label_1;
| }
| label_6:
0x0003c362 mov r0, r5 | r0 = r5;
0x0003c364 blx 0x6ab0 | r0 = fcn_00006ab0 ();
0x0003c368 cbnz r0, 0x3c388 |
| while (r3 != 2) {
| label_2:
0x0003c36a ldr r2, [pc, 0xc4] |
0x0003c36c ldr r3, [pc, 0xbc] | r3 = *(0x3c42c);
0x0003c36e add r2, pc | r2 = 0x787a4;
0x0003c370 ldr r3, [r2, r3] | r3 = *(0x787a4);
0x0003c372 ldr r2, [r3] | r2 = *(0x787a4);
0x0003c374 ldr r3, [sp, 0x2dc] | r3 = var_2dch;
0x0003c376 eors r2, r3 | r2 ^= r3;
0x0003c378 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0003c37c bne 0x3c410 | goto label_7;
| }
0x0003c37e mov r0, r6 | r0 = r6;
0x0003c380 add.w sp, sp, 0x2e4 |
0x0003c384 pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x0003c386 strh r0, [r6, 0x1e] | *((r6 + 0x1e)) = r0;
0x0003c388 ldr r4, [pc, 0xa8] |
0x0003c38a add r4, pc | r4 = 0x787c2;
0x0003c38c ldr r3, [r4] | r3 = *(0x787c2);
| if (r3 == 0) {
0x0003c38e cbz r3, 0x3c3fe | goto label_8;
| }
| label_3:
0x0003c390 cmp r3, 2 |
0x0003c392 bne 0x3c36a |
| }
0x0003c394 blx 0x6ccc | fcn_00006ccc ();
0x0003c398 movs r2, 0xc8 | r2 = 0xc8;
0x0003c39a mov r4, r0 | r4 = r0;
0x0003c39c add r1, sp, 0x14 | r1 += var_14h;
0x0003c39e ldr r0, [r0] | r0 = *(r0);
0x0003c3a0 blx 0x67c0 | r0 = fcn_000067c0 ();
0x0003c3a4 mov r7, r0 | r7 = r0;
0x0003c3a6 ldr.w r8, [pc, 0x90] |
0x0003c3aa add r8, pc | r8 = 0x787e8;
0x0003c3ac ldr.w r5, [r8] | r5 = *(0x787e8);
| if (r5 == 0) {
0x0003c3b0 cbz r5, 0x3c406 | goto label_9;
| }
| label_4:
0x0003c3b2 cmp r5, 2 |
| if (r5 != 2) {
0x0003c3b4 bne 0x3c36a | goto label_2;
| }
0x0003c3b6 ldr.w r8, [r4] | r8 = *(r4);
0x0003c3ba blx 0x6ba0 | r0 = fcn_00006ba0 ();
0x0003c3be mov sb, r0 | sb = r0;
0x0003c3c0 blx 0x6a74 | fcn_00006a74 ();
0x0003c3c4 ldr r2, [pc, 0x74] |
0x0003c3c6 mov.w r1, 0x200 | r1 = 0x200;
0x0003c3ca strd r0, r7, [sp] | __asm ("strd r0, r7, [sp]");
0x0003c3ce add r7, sp, 0xdc | r7 += str;
0x0003c3d0 mov r3, sb | r3 = sb;
0x0003c3d2 mov r0, r7 | r0 = r7;
0x0003c3d4 add r2, pc | r2 = 0x78814;
0x0003c3d6 adds r2, 0x1c | r2 += 0x1c;
0x0003c3d8 str r2, [sp, 8] | var_8h = r2;
0x0003c3da ldr r2, [pc, 0x64] |
0x0003c3dc add r2, pc | r2 = 0x78822;
0x0003c3de bl 0x3d290 | fcn_0003d290 (r0, r1);
0x0003c3e2 movs r3, 0 | r3 = 0;
0x0003c3e4 mov r0, r7 | r0 = r7;
0x0003c3e6 strb.w r3, [sp, 0x2db] | var_2dbh = r3;
0x0003c3ea blx 0x692c | strtoul (r0, r1, r2);
0x0003c3ee mov r1, r7 | r1 = r7;
0x0003c3f0 mov r2, r0 | r2 = r0;
0x0003c3f2 mov r0, r5 | r0 = r5;
0x0003c3f4 bl 0x3c908 | fcn_0003c908 (r0, r1, r2);
0x0003c3f8 str.w r8, [r4] | __asm ("str.w r8, [r4]");
0x0003c3fc b 0x3c36a | goto label_2;
| label_8:
0x0003c3fe bl 0x3c29c | fcn_0003c29c ();
0x0003c402 ldr r3, [r4] | r3 = *(r4);
0x0003c404 b 0x3c390 | goto label_3;
| label_9:
0x0003c406 bl 0x3c29c | fcn_0003c29c ();
0x0003c40a ldr.w r5, [r8] | r5 = *(r8);
0x0003c40e b 0x3c3b2 | goto label_4;
| label_7:
0x0003c410 blx 0x6b10 | fcn_00006b10 ();
| label_5:
0x0003c414 ldr r3, [pc, 0x2c] |
0x0003c416 movs r2, 0x33 | r2 = 0x33;
0x0003c418 ldr r1, [pc, 0x2c] |
0x0003c41a ldr r0, [pc, 0x30] |
0x0003c41c add r3, pc | r3 = 0x78864;
0x0003c41e add r1, pc | r1 = 0x7886a;
0x0003c420 add r0, pc | r0 = 0x78872;
0x0003c422 blx 0x67d8 | fcn_000067d8 ();
0x0003c426 nop |
0x0003c428 invalid |
| }
[*] Function strcpy used 2 times liblttng-ust.so.1.0.0