[*] Binary protection state of libgio-2.0.so.0.5600.4
Partial RELRO No Canary found NX disabled DSO No RPATH No RUNPATH No Symbols
[*] Function strcat tear down of libgio-2.0.so.0.5600.4
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libgio-2.0.so.0.5600.4 @ 0x114388 */
| #include <stdint.h>
|
; (fcn) fcn.00114388 () | void fcn_00114388 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00114388 push {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0011438c mov r7, r0 | r7 = r0;
0x00114390 ldr r0, [pc, 0x124] | r0 = *(0x1144b8);
0x00114394 mov r8, r1 | r8 = r1;
0x00114398 add r0, pc, r0 | r0 = pc + r0;
0x0011439c bl 0x2cb88 | r0 = getenv (r0);
0x001143a0 cmp r0, 0 |
| if (r0 == 0) {
0x001143a4 beq 0x1143e8 | goto label_2;
| }
0x001143a8 mov r1, r8 | r1 = r8;
0x001143ac blx r7 | r0 = uint32_t (*r7)(uint32_t) (r1);
0x001143b0 cmp r0, 0 |
0x001143b4 popne {r4, r5, r6, r7, r8, sb, sl, pc} |
| do {
| label_0:
0x001143b8 ldr r0, [pc, 0x100] | r0 = *(0x1144bc);
0x001143bc add r0, pc, r0 | r0 = pc + r0;
0x001143c0 bl 0x2cb88 | r0 = getenv (r0);
0x001143c4 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 != r0) {
0x001143c8 ldreq r5, [pc, 0xf4] | r5 = *((pc + 0xf4));
| }
| if (r5 != r0) {
0x001143cc addeq r5, pc, r5 | r5 = pc + r5;
| }
0x001143d0 mov sl, 0 | sl = 0;
| label_1:
0x001143d4 ldrb r3, [r5] | r3 = *(r5);
0x001143d8 cmp r3, 0 |
0x001143dc popeq {r4, r5, r6, r7, r8, sb, sl, pc} |
0x001143e0 mov r4, r5 | r4 = r5;
0x001143e4 b 0x11444c | goto label_3;
| label_2:
0x001143e8 ldr r0, [pc, 0xd8] | r0 = *(0x1144c4);
0x001143ec add r0, pc, r0 | r0 = pc + r0;
0x001143f0 bl 0x2cb88 | r0 = getenv (r0);
0x001143f4 subs r5, r0, 0 | r5 = r0 - 0;
0x001143f8 beq 0x1143b8 |
| } while (r5 == r0);
0x001143fc bl 0x2e064 | r0 = strlen (r0);
0x00114400 add r0, r0, 0xf | r0 += 0xf;
0x00114404 bl 0x2e424 | malloc (r0);
0x00114408 mov r1, r5 | r1 = r5;
0x0011440c mov r4, r0 | r4 = r0;
0x00114410 bl 0x2d014 | strcpy (r0, r1);
0x00114414 ldr r1, [pc, 0xb0] | r1 = *(0x1144c8);
0x00114418 mov r0, r4 | r0 = r4;
0x0011441c add r1, pc, r1 | r1 = pc + r1;
0x00114420 bl 0x2d20c | strcat (r0, r1)
0x00114424 mov r1, r8 | r1 = r8;
0x00114428 mov r0, r4 | r0 = r4;
0x0011442c blx r7 | r0 = uint32_t (*r7)(uint32_t, uint32_t) (r0, r1);
0x00114430 mov r5, r0 | r5 = r0;
0x00114434 mov r0, r4 | r0 = r4;
0x00114438 bl 0x2c24c | free (r0);
0x0011443c cmp r5, 0 |
| if (r5 == 0) {
0x00114440 beq 0x1143b8 | goto label_0;
| }
0x00114444 pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| do {
0x00114448 mov r4, r2 | r4 = r2;
| label_3:
0x0011444c ldrb r3, [r4] | r3 = *(r4);
0x00114450 add r2, r4, 1 | r2 = r4 + 1;
0x00114454 cmp r3, 0x3a |
0x00114458 cmpne r3, 0 | __asm ("cmpne r3, 0");
0x0011445c bne 0x114448 |
| } while (r3 != 0x3a);
0x00114460 cmp r5, r4 |
| if (r5 != r4) {
0x00114464 moveq r4, r2 | r4 = r2;
| }
| if (r5 != r4) {
0x00114468 beq 0x1144b4 |
0x0011446c cmp r3, 0x3a |
0x00114470 sub r6, r4, r5 | r6 = r4 - r5;
| if (r3 == 0x3a) {
0x00114474 addne r6, r6, 1 | r6++;
| }
0x00114478 add r0, r6, 1 | r0 = r6 + 1;
0x0011447c bl 0x2e424 | malloc (r0);
0x00114480 mov r2, r6 | r2 = r6;
0x00114484 mov r1, r5 | r1 = r5;
0x00114488 mov sb, r0 | sb = r0;
0x0011448c bl 0x2daf4 | strncpy (r0, r1, r2);
0x00114490 mov r1, r8 | r1 = r8;
0x00114494 mov r0, sb | r0 = sb;
0x00114498 strb sl, [sb, r6] | *((sb + r6)) = sl;
0x0011449c blx r7 | r0 = uint32_t (*r7)(uint32_t, uint32_t) (r0, r1);
0x001144a0 mov r5, r0 | r5 = r0;
0x001144a4 mov r0, sb | r0 = sb;
0x001144a8 bl 0x2c24c | free (r0);
0x001144ac cmp r5, 0 |
0x001144b0 popne {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
0x001144b4 mov r5, r4 | r5 = r4;
0x001144b8 b 0x1143d4 | goto label_1;
| }
[*] Function strcat used 2 times libgio-2.0.so.0.5600.4