[*] Binary protection state of libgobject-2.0.so.0.7200.3
Full RELRO No Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function strcat tear down of libgobject-2.0.so.0.7200.3
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.7200.3 @ 0x119ec */
| #include <stdint.h>
|
; (fcn) sym.g_cclosure_marshal_VOID__VARIANTv () | void g_cclosure_marshal_VOID_VARIANTv (int16_t arg_28h, int16_t arg_30h, int16_t arg1, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x000119ec push.w {r4, r5, r6, r7, r8, sb, lr} |
0x000119f0 sub sp, 0xc |
0x000119f2 ldr r7, [sp, 0x30] | r7 = *(arg_30h);
0x000119f4 adds r1, r3, 4 | r1 = r3 + 4;
0x000119f6 mov r4, r2 | r4 = r2;
0x000119f8 mov r5, r0 | r5 = r0;
0x000119fa str r1, [sp, 4] | var_4h = r1;
0x000119fc ldr r1, [r7] | r1 = *(r7);
0x000119fe ldr.w r8, [sp, 0x28] | r8 = *(arg_28h);
0x00011a02 ldr r6, [r3] | r6 = *(r3);
0x00011a04 lsls r2, r1, 0x1f | r2 = r1 << 0x1f;
| if (r2 >= r1) {
0x00011a06 bmi 0x11a14 |
0x00011a08 mov sb, r6 | sb = r6;
| if (r6 == 0) {
0x00011a0a cbz r6, 0x11a1e | goto label_0;
| }
0x00011a0c mov r0, r6 | r0 = r6;
0x00011a0e blx 0xa1a8 | r0 = fcn_0000a1a8 ();
0x00011a12 mov r6, r0 | r6 = r0;
| }
0x00011a14 subs.w sb, r6, 0 | sb = r6 - 0;
0x00011a18 it ne |
| if (sb == r6) {
0x00011a1a movne sb, 1 | sb = 1;
| }
| label_0:
0x00011a1e ldrb r3, [r5, 3] | r3 = *((r5 + 3));
0x00011a20 lsls r3, r3, 0x1a | r3 <<= 0x1a;
0x00011a22 ittee mi |
| if (r3 >= r3) {
0x00011a24 ldrmi r0, [r5, 8] | r0 = *((r5 + 8));
| }
| if (r3 >= r3) {
0x00011a26 movmi r2, r4 | r2 = r4;
| }
| if (r3 < r3) {
0x00011a28 ldrpl r2, [r5, 8] | r2 = *((r5 + 8));
| }
| if (r3 < r3) {
0x00011a2a movpl r0, r4 | r0 = r4;
| }
0x00011a2c cmp.w r8, 0 |
| if (r8 == 0) {
0x00011a30 beq 0x11a44 | goto label_1;
| }
0x00011a32 mov r1, r6 | r1 = r6;
0x00011a34 blx r8 | uint32_t (*r8)(uint32_t) (r1);
0x00011a36 ldr r3, [r7] | r3 = *(r7);
0x00011a38 bics.w r3, sb, r3 | __asm ("bics.w r3, sb, r3");
| if (r8 != 0) {
0x00011a3c bne 0x11a54 | goto label_2;
| }
| do {
0x00011a3e add sp, 0xc |
0x00011a40 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_1:
0x00011a44 ldr.w r8, [r5, 0x10] | r8 = *((r5 + 0x10));
0x00011a48 mov r1, r6 | r1 = r6;
0x00011a4a blx r8 | uint32_t (*r8)(uint32_t) (r1);
0x00011a4c ldr r3, [r7] | r3 = *(r7);
0x00011a4e bics.w r3, sb, r3 | __asm ("bics.w r3, sb, r3");
0x00011a52 beq 0x11a3e |
| } while (r8 == 0);
| label_2:
0x00011a54 mov r0, r6 | r0 = r6;
0x00011a56 blx 0xa56c | strcat (r0, r1)
0x00011a58 stc p0, c11, [sl, 0xc] | __asm ("stc p0, c11, [sl, 0xc]");
0x00011a5c pop.w {r4, r5, r6, r7, r8, sb, pc} |
| }
[*] Function strcat used 2 times libgobject-2.0.so.0.7200.3