[*] Binary protection state of libcrypto.so.1.1
Partial RELRO No Canary found NX disabled DSO No RPATH No RUNPATH No Symbols
[*] Function strcpy tear down of libcrypto.so.1.1
; 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/libcrypto.so.1.1 @ 0x6c030 */
| #include <stdint.h>
|
; (fcn) sym.BIO_accept () | void BIO_accept (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| char * src;
| int32_t var_78h;
| r0 = arg1;
| r1 = arg2;
0x0006c030 push {r4, r5, r6, r7, r8, lr} |
0x0006c034 sub sp, sp, 0x78 |
0x0006c038 add r6, sp, 8 | r6 += src;
0x0006c03c mov r4, r1 | r4 = r1;
0x0006c040 mov r2, 0 | r2 = 0;
0x0006c044 mov r1, r6 | r1 = r6;
0x0006c048 bl 0x6c958 | r0 = BIO_accept_ex ();
0x0006c04c cmn r0, 1 |
0x0006c050 mov r5, r0 | r5 = r0;
| if (r0 != 1) {
0x0006c054 bne 0x6c0b8 | goto label_1;
| }
0x0006c058 bl 0x73258 | r0 = BIO_sock_should_retry ();
0x0006c05c cmp r0, 0 |
| if (r0 == 0) {
0x0006c060 mvnne r5, 1 | r5 = ~1;
| }
| if (r0 != 0) {
0x0006c064 bne 0x6c0ac | goto label_0;
| }
0x0006c068 bl 0x4f848 | errno_location ();
0x0006c06c ldr r4, [pc, 0x144] | r4 = *(0x6c1b4);
0x0006c070 mov r3, 0xf6 | r3 = 0xf6;
0x0006c074 add r4, pc, r4 | r4 = pc + r4;
0x0006c078 str r3, [sp] | *(sp) = r3;
0x0006c07c mov r1, 8 | r1 = 8;
0x0006c080 mov r3, r4 | r3 = r4;
0x0006c084 ldr r2, [r0] | r2 = *(r0);
0x0006c088 mov r0, 2 | r0 = 2;
0x0006c08c bl 0xfc7b8 | ERR_put_error ();
0x0006c090 mov r3, 0xf7 | r3 = 0xf7;
0x0006c094 str r3, [sp] | *(sp) = r3;
0x0006c098 mov r2, 0x64 | r2 = 0x64;
0x0006c09c mov r3, r4 | r3 = r4;
0x0006c0a0 mov r1, 0x65 | r1 = 0x65;
0x0006c0a4 mov r0, 0x20 | r0 = 0x20;
0x0006c0a8 bl 0xfc7b8 | ERR_put_error ();
| do {
| label_0:
0x0006c0ac mov r0, r5 | r0 = r5;
0x0006c0b0 add sp, sp, 0x78 |
0x0006c0b4 pop {r4, r5, r6, r7, r8, pc} |
| label_1:
0x0006c0b8 cmp r4, 0 |
0x0006c0bc beq 0x6c0ac |
| } while (r4 == 0);
0x0006c0c0 mov r1, 1 | r1 = 1;
0x0006c0c4 mov r0, r6 | r0 = r6;
0x0006c0c8 bl 0x69c48 | BIO_ADDR_hostname_string ();
0x0006c0cc mov r1, 1 | r1 = 1;
0x0006c0d0 mov r7, r0 | r7 = r0;
0x0006c0d4 mov r0, r6 | r0 = r6;
0x0006c0d8 bl 0x69bf8 | BIO_ADDR_service_string ();
0x0006c0dc adds r3, r0, 0 | r3 += src;
| if (r3 == src) {
0x0006c0e0 movne r3, 1 | r3 = 1;
| }
0x0006c0e4 cmp r7, 0 |
| if (r7 != 0) {
0x0006c0e8 moveq r3, 0 | r3 = 0;
| }
0x0006c0ec cmp r3, 0 |
0x0006c0f0 mov r6, r0 | r6 = r0;
| if (r3 != 0) {
0x0006c0f4 streq r3, [r4] | *(r4) = r3;
| }
| if (r3 != 0) {
0x0006c0f8 beq 0x6c12c |
0x0006c0fc mov r0, r7 | r0 = r7;
0x0006c100 bl 0x4f7b8 | r0 = strlen (r0);
0x0006c104 mov r8, r0 | r8 = r0;
0x0006c108 mov r0, r6 | r0 = r6;
0x0006c10c bl 0x4f7b8 | strlen (r0);
0x0006c110 ldr r1, [pc, 0xa4] | r1 = *(0x6c1b8);
0x0006c114 mov r2, 0xff | r2 = 0xff;
0x0006c118 add r1, pc, r1 | r1 = pc + r1;
0x0006c11c add r0, r8, r0 | r0 = r8 + r0;
0x0006c120 add r0, r0, 2 | r0 += 2;
0x0006c124 bl 0x118644 | CRYPTO_zalloc ();
0x0006c128 str r0, [r4] | *(r4) = r0;
| }
0x0006c12c ldr r0, [r4] | r0 = *(r4);
0x0006c130 cmp r0, 0 |
| if (r0 != 0) {
0x0006c134 bne 0x6c190 | goto label_2;
| }
0x0006c138 mov r3, 0x104 | r3 = 0x104;
0x0006c13c str r3, [sp] | *(sp) = r3;
0x0006c140 ldr r3, [pc, 0x78] | r3 = *(0x6c1bc);
0x0006c144 mov r2, 0x41 | r2 = 0x41;
0x0006c148 add r3, pc, r3 | r3 = pc + r3;
0x0006c14c mov r1, 0x65 | r1 = 0x65;
0x0006c150 mov r0, 0x20 | r0 = 0x20;
0x0006c154 bl 0xfc7b8 | ERR_put_error ();
0x0006c158 mov r0, r5 | r0 = r5;
0x0006c15c bl 0x6ca28 | BIO_closesocket ();
0x0006c160 mvn r5, 0 | r5 = ~0;
| do {
0x0006c164 ldr r4, [pc, 0x58] | r4 = *(0x6c1c0);
0x0006c168 mov r0, r7 | r0 = r7;
0x0006c16c add r4, pc, r4 | r4 = pc + r4;
0x0006c170 mov r1, r4 | r1 = r4;
0x0006c174 mov r2, 0x10c | r2 = 0x10c;
0x0006c178 bl 0x11842c | CRYPTO_free ();
0x0006c17c ldr r2, [pc, 0x44] | r2 = *(0x6c1c4);
0x0006c180 mov r1, r4 | r1 = r4;
0x0006c184 mov r0, r6 | r0 = r6;
0x0006c188 bl 0x11842c | CRYPTO_free ();
0x0006c18c b 0x6c0ac | goto label_0;
| label_2:
0x0006c190 mov r1, r7 | r1 = r7;
0x0006c194 bl 0x4f518 | strcpy (r0, r1)
0x0006c198 ldr r1, [pc, 0x2c] | r1 = *(0x6c1c8);
0x0006c19c ldr r0, [r4] | r0 = *(r4);
0x0006c1a0 add r1, pc, r1 | r1 = pc + r1;
0x0006c1a4 bl 0x4f560 | strcat (r0, r1);
0x0006c1a8 mov r1, r6 | r1 = r6;
0x0006c1ac ldr r0, [r4] | r0 = *(r4);
0x0006c1b0 bl 0x4f560 | strcat (r0, r1);
0x0006c1b4 b 0x6c164 |
| } while (1);
| }
; 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/libcrypto.so.1.1 @ 0x6c958 */
| #include <stdint.h>
|
; (fcn) sym.BIO_accept_ex () | void BIO_accept_ex (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_74h;
| int32_t var_10h;
| int32_t var_80h;
| r0 = arg1;
| r1 = arg2;
0x0006c958 push {r4, r5, r6, lr} |
0x0006c95c mov r6, r0 | r6 = r0;
0x0006c960 sub sp, sp, 0x80 |
0x0006c964 subs r0, r1, 0 | r0 = r1 - 0;
| if (r0 != r1) {
0x0006c968 addeq r0, sp, 0x10 | r0 += var_10h;
| }
0x0006c96c add r4, sp, 0x80 | r4 += var_80h;
0x0006c970 mov r3, 0x70 | r3 = 0x70;
0x0006c974 str r3, [r4, -0x74]! | *((r4 -= 0x74)) = r3;
0x0006c978 mov r5, r2 | r5 = r2;
0x0006c97c bl 0x69938 | fcn_00069938 ();
0x0006c980 mov r2, r4 | r2 = r4;
0x0006c984 mov r1, r0 | r1 = r0;
0x0006c988 mov r0, r6 | r0 = r6;
0x0006c98c bl 0x4f458 | r0 = accept (r0, r1, r2);
0x0006c990 cmn r0, 1 |
0x0006c994 mov r4, r0 | r4 = r0;
| if (r0 != 1) {
0x0006c998 bne 0x6c9f8 | goto label_1;
| }
0x0006c99c bl 0x73258 | r0 = BIO_sock_should_retry ();
0x0006c9a0 cmp r0, 0 |
| if (r0 != 0) {
0x0006c9a4 bne 0x6c9ec | goto label_0;
| }
0x0006c9a8 bl 0x4f848 | errno_location ();
0x0006c9ac ldr r5, [pc, 0x68] | r5 = *(0x6ca18);
0x0006c9b0 ldr r3, [pc, 0x68] | r3 = *(0x6ca1c);
0x0006c9b4 add r5, pc, r5 | r5 = pc + r5;
0x0006c9b8 str r3, [sp] | *(sp) = r3;
0x0006c9bc mov r1, 8 | r1 = 8;
0x0006c9c0 mov r3, r5 | r3 = r5;
0x0006c9c4 ldr r2, [r0] | r2 = *(r0);
0x0006c9c8 mov r0, 2 | r0 = 2;
0x0006c9cc bl 0xfc7b8 | ERR_put_error ();
0x0006c9d0 ldr r3, [pc, 0x4c] | r3 = *(0x6ca20);
0x0006c9d4 mov r2, 0x64 | r2 = 0x64;
0x0006c9d8 str r3, [sp] | *(sp) = r3;
0x0006c9dc mov r1, 0x89 | r1 = 0x89;
0x0006c9e0 mov r3, r5 | r3 = r5;
0x0006c9e4 mov r0, 0x20 | r0 = 0x20;
0x0006c9e8 bl 0xfc7b8 | ERR_put_error ();
| do {
| label_0:
0x0006c9ec mov r0, r4 | r0 = r4;
0x0006c9f0 add sp, sp, 0x80 |
0x0006c9f4 pop {r4, r5, r6, pc} |
| label_1:
0x0006c9f8 lsr r1, r5, 3 | r1 = r5 >> 3;
0x0006c9fc and r1, r1, 1 | r1 &= 1;
0x0006ca00 bl 0x6c200 | r0 = BIO_socket_nbio ();
0x0006ca04 cmp r0, 0 |
0x0006ca08 bne 0x6c9ec |
| } while (r0 != 0);
0x0006ca0c mov r0, r4 | r0 = r4;
0x0006ca10 bl 0x4f320 | close (r0);
0x0006ca14 mvn r4, 0 | r4 = ~0;
0x0006ca18 b 0x6c9ec | goto label_0;
| }
; 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/libcrypto.so.1.1 @ 0x6a258 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.BIO_dump_indent_cb () | void BIO_dump_indent_cb (int32_t arg_178h, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| char * dest;
| int8_t var_124h;
| int32_t var_150h;
| int32_t var_0h_2;
| int32_t var_154h;
| r0 = arg1;
| r1 = arg2;
0x0006a258 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006a25c sub sp, sp, 0x154 |
0x0006a260 mov sl, r3 | sl = r3;
0x0006a264 ldr r3, [sp, 0x178] | r3 = *(arg_178h);
0x0006a268 str r0, [sp, 0x18] | var_18h = r0;
0x0006a26c cmp r3, 0x80 |
| if (r3 < 0x80) {
0x0006a270 movge r3, 0x80 | r3 = 0x80;
| }
0x0006a274 bic r3, r3, r3, asr 31 | r3 = BIT_MASK (r3, r3);
0x0006a278 cmp r3, 6 |
0x0006a27c str r3, [sp, 0x10] | var_10h = r3;
| if (r3 > 6) {
0x0006a280 suble r3, r3, r3 | r3 -= r3;
| }
| if (r3 <= 6) {
0x0006a284 subgt r3, r3, 6 | r3 -= 6;
| }
0x0006a288 adds r5, r3, 3 | r5 = r3 + 3;
| if (r5 >= r3) {
0x0006a28c addmi r5, r3, 6 | r5 = r3 + 6;
| }
0x0006a290 asr r5, r5, 2 | r5 >>= 2;
0x0006a294 rsb r5, r5, 0x10 | r5 = 0x10 - r5;
0x0006a298 str r1, [sp, 0x1c] | var_1ch = r1;
0x0006a29c mov r0, sl | r0 = sl;
0x0006a2a0 mov r1, r5 | r1 = r5;
0x0006a2a4 mov r7, r2 | r7 = r2;
0x0006a2a8 bl 0x18317c | fcn_0018317c (r0, r1);
0x0006a2ac mov r6, 0 | r6 = 0;
0x0006a2b0 mov fp, r6 |
0x0006a2b4 str r6, [sp, 0xc] | var_ch = r6;
0x0006a2b8 mul r3, r0, r5 | r3 = r0 * r5;
0x0006a2bc mov sb, r0 | sb = r0;
0x0006a2c0 cmp r3, sl |
0x0006a2c4 ldr r3, [pc, 0x1a8] | r3 = *(0x6a470);
| if (r3 >= sl) {
0x0006a2c8 addlt sb, r0, 1 | sb = r0 + 1;
| }
0x0006a2cc add r3, pc, r3 | r3 = pc + r3;
0x0006a2d0 str r3, [sp, 0x24] | var_24h = r3;
| label_1:
0x0006a2d4 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0006a2d8 cmp r3, sb |
| if (r3 >= sb) {
0x0006a2dc blt 0x6a2ec |
0x0006a2e0 mov r0, fp | r0 = fp;
0x0006a2e4 add sp, sp, 0x154 |
0x0006a2e8 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x0006a2ec add r3, sp, 0x2c | r3 += dest;
0x0006a2f0 str r3, [sp, 0x14] | var_14h = r3;
0x0006a2f4 ldr r3, [pc, 0x17c] | r3 = *(0x6a474);
0x0006a2f8 str r6, [sp, 4] | var_4h = r6;
0x0006a2fc add r3, pc, r3 | r3 = pc + r3;
0x0006a300 str r3, [sp] | *(sp) = r3;
0x0006a304 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0006a308 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0006a30c ldr r1, [pc, 0x168] | r1 = *(0x6a478);
0x0006a310 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0006a314 bl 0x6bc48 | BIO_snprintf ();
0x0006a318 ldr r3, [pc, 0x160] | r3 = *(0x6a47c);
0x0006a31c mov r8, 0 | r8 = 0;
0x0006a320 add r3, pc, r3 | r3 = pc + r3;
0x0006a324 str r3, [sp, 0x20] | var_20h = r3;
0x0006a328 mov r4, r0 | r4 = r0;
| do {
0x0006a32c rsb r3, r4, 0x120 | r3 = 0x120 - r4;
0x0006a330 cmp r8, r5 |
0x0006a334 add r3, r3, 1 | r3++;
| if (r8 >= r5) {
0x0006a338 blt 0x6a368 |
0x0006a33c cmp r3, 2 |
| if (r3 >= 2) {
0x0006a340 bls 0x6a35c |
0x0006a344 ldr r1, [pc, 0x138] | r1 = *(0x6a480);
0x0006a348 add r0, sp, 0x2c | r0 += dest;
0x0006a34c add r0, r0, r4 | r0 += r4;
0x0006a350 add r1, pc, r1 | r1 = pc + r1;
0x0006a354 bl 0x4f518 | strcpy (r0, r1)
0x0006a358 add r4, r4, 2 | r4 += 2;
| }
0x0006a35c mov r3, 0 | r3 = 0;
0x0006a360 mov r0, r3 | r0 = r3;
0x0006a364 b 0x6a404 | goto label_2;
| }
0x0006a368 cmp r3, 3 |
| if (r3 >= 3) {
0x0006a36c bls 0x6a394 |
0x0006a370 add r3, r8, r6 | r3 = r8 + r6;
0x0006a374 add r0, sp, 0x2c | r0 += dest;
0x0006a378 cmp sl, r3 |
0x0006a37c add r0, r0, r4 | r0 += r4;
| if (sl > r3) {
0x0006a380 bgt 0x6a39c | goto label_3;
| }
0x0006a384 ldr r1, [pc, 0xfc] | r1 = "EVP_CIPHER_CTX_iv";
0x0006a388 add r1, pc, r1 | r1 = pc + r1;
0x0006a38c bl 0x4f518 | strcpy (r0, "EVP_CIPHER_CTX_iv")
| label_0:
0x0006a390 add r4, r4, 3 | r4 += 3;
| }
0x0006a394 add r8, r8, 1 | r8++;
0x0006a398 b 0x6a32c |
| } while (1);
| label_3:
0x0006a39c cmp r8, 7 |
| if (r8 == 7) {
0x0006a3a0 movne r2, 0x20 | r2 = 0x20;
| }
| if (r8 != 7) {
0x0006a3a4 moveq r2, 0x2d | r2 = 0x2d;
| }
0x0006a3a8 ldrb r3, [r7, r8] | r3 = *((r7 + r8));
0x0006a3ac mov r1, 4 | r1 = 4;
0x0006a3b0 str r2, [sp] | *(sp) = r2;
0x0006a3b4 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0006a3b8 bl 0x6bc48 | BIO_snprintf ();
0x0006a3bc b 0x6a390 | goto label_0;
| do {
0x0006a3c0 add r1, r3, r6 | r1 = r3 + r6;
0x0006a3c4 cmp r1, sl |
| if (r1 >= sl) {
0x0006a3c8 bge 0x6a414 | goto label_4;
| }
0x0006a3cc cmp r2, 1 |
| if (r2 >= 1) {
0x0006a3d0 bls 0x6a400 |
0x0006a3d4 ldrb r2, [r7, r3] | r2 = *((r7 + r3));
0x0006a3d8 add ip, sp, 0x150 |
0x0006a3dc sub r1, r2, 0x20 | r1 = r2 - 0x20;
0x0006a3e0 cmp r1, 0x5e |
| if (r1 <= 0x5e) {
0x0006a3e4 movhi r2, 0x2e | r2 = 0x2e;
| }
0x0006a3e8 add r1, r4, 1 | r1 = r4 + 1;
0x0006a3ec add r4, ip, r4 | r4 = ip + r4;
0x0006a3f0 strb r2, [r4, -0x124] | dest = r2;
0x0006a3f4 add r2, ip, r1 | r2 = ip + r1;
0x0006a3f8 mov r4, r1 | r4 = r1;
0x0006a3fc strb r0, [r2, -0x124] | var_124h = r0;
| }
0x0006a400 add r3, r3, 1 | r3++;
| label_2:
0x0006a404 rsb r2, r4, 0x120 | r2 = 0x120 - r4;
0x0006a408 cmp r3, r5 |
0x0006a40c add r2, r2, 1 | r2++;
0x0006a410 blt 0x6a3c0 |
| } while (r3 < r5);
| label_4:
0x0006a414 cmp r2, 1 |
| if (r2 >= 1) {
0x0006a418 bls 0x6a444 |
0x0006a41c add r2, sp, 0x150 | r2 += var_150h;
0x0006a420 add r3, r4, 1 | r3 = r4 + 1;
0x0006a424 add r4, r2, r4 | r4 = r2 + r4;
0x0006a428 mov r2, 0xa | r2 = 0xa;
0x0006a42c strb r2, [r4, -0x124] | dest = r2;
0x0006a430 add r2, sp, 0x150 | r2 += var_150h;
0x0006a434 add r2, r2, r3 | r2 += r3;
0x0006a438 mov r1, 0 | r1 = 0;
0x0006a43c mov r4, r3 | r4 = r3;
0x0006a440 strb r1, [r2, -0x124] | var_124h = r1;
| }
0x0006a444 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006a448 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0006a44c mov r1, r4 | r1 = r4;
0x0006a450 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0006a454 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0006a458 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0006a45c add r6, r6, r5 | r6 += r5;
0x0006a460 add r3, r3, 1 | r3++;
0x0006a464 str r3, [sp, 0xc] | var_ch = r3;
0x0006a468 add r7, r7, r5 | r7 += r5;
0x0006a46c add fp, fp, r0 |
0x0006a470 b 0x6a2d4 | goto label_1;
| }
; 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/libcrypto.so.1.1 @ 0x11ef9c */
| #include <stdint.h>
|
; (fcn) sym.CRYPTO_strdup () | void CRYPTO_strdup (uint32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0011ef9c push {r4, r5, r6, r7, r8, lr} |
0x0011efa0 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x0011efa4 beq 0x11efd8 |
0x0011efa8 mov r6, r2 | r6 = r2;
0x0011efac mov r5, r1 | r5 = r1;
0x0011efb0 bl 0x4f7b8 | strlen (r0);
0x0011efb4 mov r2, r6 | r2 = r6;
0x0011efb8 mov r1, r5 | r1 = r5;
0x0011efbc mov r7, r4 | r7 = r4;
0x0011efc0 add r0, r0, 1 | r0++;
0x0011efc4 bl 0x118474 | r0 = CRYPTO_malloc ();
0x0011efc8 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x0011efcc beq 0x11efd8 | goto label_0;
| }
0x0011efd0 mov r1, r7 | r1 = r7;
0x0011efd4 bl 0x4f518 | strcpy (r0, r1)
| }
| label_0:
0x0011efd8 mov r0, r4 | r0 = r4;
0x0011efdc pop {r4, r5, r6, r7, r8, pc} |
| }
; 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/libcrypto.so.1.1 @ 0xf7904 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ENGINE_ctrl () | void ENGINE_ctrl (int32_t arg_28h, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
0x000f7904 push {r0, r1, r4, r5, r6, r7, r8, sb, sl, lr} |
0x000f7908 ldr sl, [sp, 0x28] | sl = *(arg_28h);
0x000f790c mov r7, r3 | r7 = r3;
0x000f7910 ldr r3, [pc, 0x2f8] | r3 = *(0xf7c0c);
0x000f7914 subs r6, r0, 0 | r6 -= arg_28h;
0x000f7918 add r3, pc, r3 | r3 = pc + r3;
| if (r6 != arg_28h) {
0x000f791c bne 0xf7950 | goto label_9;
| }
0x000f7920 mov r3, 0x81 | r3 = 0x81;
0x000f7924 str r3, [sp] | *(sp) = r3;
0x000f7928 ldr r3, [pc, 0x2e4] | r3 = *(0xf7c10);
0x000f792c mov r2, 0x43 | r2 = 0x43;
0x000f7930 add r3, pc, r3 | r3 = pc + r3;
| do {
| label_0:
0x000f7934 mov r1, 0x8e | r1 = 0x8e;
0x000f7938 mov r0, 0x26 | r0 = 0x26;
0x000f793c bl 0xfc7b8 | ERR_put_error ();
0x000f7940 mov r4, 0 | r4 = 0;
| label_1:
0x000f7944 mov r0, r4 | r0 = r4;
0x000f7948 add sp, sp, 8 |
0x000f794c pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_9:
0x000f7950 mov sb, r2 | sb = r2;
0x000f7954 ldr r2, [pc, 0x2bc] | r2 = *(0xf7c14);
0x000f7958 mov r5, r1 | r5 = r1;
0x000f795c ldr r4, [r3, r2] | r4 = *((r3 + r2));
0x000f7960 ldr r0, [r4] | r0 = *(r4);
0x000f7964 bl 0x157760 | CRYPTO_THREAD_write_lock ();
0x000f7968 bl 0x184c84 | fcn_00184c84 ();
0x000f796c ldr r8, [r6, 0x50] | r8 = *((r6 + 0x50));
0x000f7970 bl 0x184c84 | fcn_00184c84 ();
0x000f7974 ldr r0, [r4] | r0 = *(r4);
0x000f7978 bl 0x157774 | CRYPTO_THREAD_unlock ();
0x000f797c cmp r8, 0 |
| if (r8 > 0) {
0x000f7980 bgt 0xf799c | goto label_10;
| }
0x000f7984 mov r3, 0x89 | r3 = 0x89;
0x000f7988 str r3, [sp] | *(sp) = r3;
0x000f798c ldr r3, [pc, 0x288] | r3 = *(0xf7c18);
0x000f7990 mov r2, 0x82 | r2 = 0x82;
0x000f7994 add r3, pc, r3 | r3 = pc + r3;
0x000f7998 b 0xf7934 |
| } while (1);
| label_10:
0x000f799c cmp r5, 0xa |
0x000f79a0 ldr r8, [r6, 0x38] | r8 = *((r6 + 0x38));
| if (r5 != 0xa) {
0x000f79a4 beq 0xf79d4 |
| if (r5 >= 0xa) {
0x000f79a8 blt 0xf79b4 |
0x000f79ac cmp r5, 0x12 |
| if (r5 <= 0x12) {
0x000f79b0 ble 0xf79e0 | goto label_11;
| }
| }
0x000f79b4 cmp r8, 0 |
| if (r8 != 0) {
0x000f79b8 bne 0xf7bec | goto label_12;
| }
0x000f79bc mov r3, 0xab | r3 = 0xab;
0x000f79c0 str r3, [sp] | *(sp) = r3;
0x000f79c4 ldr r3, [pc, 0x254] | r3 = *(0xf7c1c);
0x000f79c8 mov r2, 0x78 | r2 = 0x78;
0x000f79cc add r3, pc, r3 | r3 = pc + r3;
0x000f79d0 b 0xf7934 | goto label_0;
| }
0x000f79d4 adds r4, r8, 0 | r4 = r8 + 0;
| if (r4 == r8) {
0x000f79d8 movne r4, 1 | r4 = 1;
| }
0x000f79dc b 0xf7944 | goto label_1;
| label_11:
0x000f79e0 cmp r8, 0 |
| if (r8 == 0) {
0x000f79e4 beq 0xf7bd0 | goto label_13;
| }
0x000f79e8 ldr r4, [r6, 0x4c] | r4 = *((r6 + 0x4c));
0x000f79ec ands r4, r4, 2 | r4 &= 2;
| if (r4 != r4) {
0x000f79f0 bne 0xf7bec | goto label_12;
| }
0x000f79f4 cmp r5, 0xb |
| if (r5 != 0xb) {
0x000f79f8 bne 0xf7a24 | goto label_14;
| }
0x000f79fc ldr r3, [r6, 0x48] | r3 = *((r6 + 0x48));
0x000f7a00 cmp r3, 0 |
| if (r3 == 0) {
0x000f7a04 beq 0xf7944 | goto label_1;
| }
0x000f7a08 ldr r2, [r3] | r2 = *(r3);
0x000f7a0c cmp r2, 0 |
| if (r2 == 0) {
0x000f7a10 beq 0xf7944 | goto label_1;
| }
0x000f7a14 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000f7a18 cmp r3, 0 |
| if (r3 == 0) {
0x000f7a1c movne r4, r2 | r4 = r2;
| }
0x000f7a20 b 0xf7944 | goto label_1;
| label_14:
0x000f7a24 bic r3, r5, 2 | r3 = BIT_MASK (r5, 2);
0x000f7a28 cmp r5, 0x11 |
0x000f7a2c cmpne r3, 0xd | __asm ("cmpne r3, 0xd");
| if (r5 != 0x11) {
0x000f7a30 bne 0xf7a64 | goto label_15;
| }
0x000f7a34 cmp r7, 0 |
| if (r7 != 0) {
0x000f7a38 bne 0xf7a64 | goto label_15;
| }
0x000f7a3c mov r3, 0x4f | r3 = 0x4f;
0x000f7a40 str r3, [sp] | *(sp) = r3;
0x000f7a44 ldr r3, [pc, 0x1d8] | r3 = *(0xf7c20);
0x000f7a48 mov r2, 0x43 | r2 = 0x43;
0x000f7a4c add r3, pc, r3 | r3 = pc + r3;
| do {
| label_4:
0x000f7a50 mov r1, 0xac | r1 = 0xac;
| label_8:
0x000f7a54 mov r0, 0x26 | r0 = 0x26;
0x000f7a58 bl 0xfc7b8 | ERR_put_error ();
0x000f7a5c mvn r4, 0 | r4 = ~0;
0x000f7a60 b 0xf7944 | goto label_1;
| label_15:
0x000f7a64 cmp r5, 0xd |
0x000f7a68 ldr r6, [r6, 0x48] | r6 = *((r6 + 0x48));
| if (r5 != 0xd) {
0x000f7a6c bne 0xf7ac8 | goto label_16;
| }
0x000f7a70 cmp r6, 0 |
| if (r6 != 0) {
0x000f7a74 bne 0xf7a94 | goto label_17;
| }
| label_2:
0x000f7a78 mov r3, 0x57 | r3 = 0x57;
0x000f7a7c str r3, [sp] | *(sp) = r3;
0x000f7a80 ldr r3, [pc, 0x1a0] | r3 = *(0xf7c24);
0x000f7a84 mov r2, 0x89 | r2 = 0x89;
0x000f7a88 add r3, pc, r3 | r3 = pc + r3;
0x000f7a8c b 0xf7a50 |
| } while (1);
| label_3:
0x000f7a90 add r4, r4, 1 | r4++;
| label_17:
0x000f7a94 ldr r3, [r6, r4, lsl 4] | offset_0 = r4 << 4;
| r3 = *((r6 + offset_0));
0x000f7a98 cmp r3, 0 |
| if (r3 == 0) {
0x000f7a9c beq 0xf7a78 | goto label_2;
| }
0x000f7aa0 add r5, r6, r4, lsl 4 | r5 = r6 + (r4 << 4);
0x000f7aa4 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x000f7aa8 cmp r0, 0 |
| if (r0 == 0) {
0x000f7aac beq 0xf7a78 | goto label_2;
| }
0x000f7ab0 mov r1, r7 | r1 = r7;
0x000f7ab4 bl 0x4f86c | r0 = strcmp (r0, r1);
0x000f7ab8 cmp r0, 0 |
| if (r0 != 0) {
0x000f7abc bne 0xf7a90 | goto label_3;
| }
0x000f7ac0 ldr r4, [r5] | r4 = *(r5);
0x000f7ac4 b 0xf7944 | goto label_1;
| label_16:
0x000f7ac8 cmp r6, 0 |
| if (r6 == 0) {
0x000f7acc movne r0, 0 | r0 = 0;
| }
| if (r6 != 0) {
0x000f7ad0 bne 0xf7af0 | goto label_18;
| }
| label_5:
0x000f7ad4 mov r3, 0x62 | r3 = 0x62;
0x000f7ad8 str r3, [sp] | *(sp) = r3;
0x000f7adc ldr r3, [pc, 0x148] | r3 = *(0xf7c28);
0x000f7ae0 mov r2, 0x8a | r2 = 0x8a;
0x000f7ae4 add r3, pc, r3 | r3 = pc + r3;
0x000f7ae8 b 0xf7a50 | goto label_4;
| do {
0x000f7aec add r0, r0, 1 | r0++;
| label_18:
0x000f7af0 ldr r3, [r6, r0, lsl 4] | offset_1 = r0 << 4;
| r3 = *((r6 + offset_1));
0x000f7af4 cmp r3, 0 |
| if (r3 == 0) {
0x000f7af8 beq 0xf7b10 | goto label_19;
| }
0x000f7afc add r2, r6, r0, lsl 4 | r2 = r6 + (r0 << 4);
0x000f7b00 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000f7b04 cmp r2, 0 |
0x000f7b08 cmpne sb, r3 | __asm ("cmpne sb, r3");
0x000f7b0c bhi 0xf7aec |
| } while (r2 > 0);
| label_19:
0x000f7b10 cmp sb, r3 |
| if (sb != r3) {
0x000f7b14 bne 0xf7ad4 | goto label_5;
| }
0x000f7b18 sub r5, r5, 0xc | r5 -= 0xc;
0x000f7b1c add r2, r6, r0, lsl 4 | r2 = r6 + (r0 << 4);
0x000f7b20 cmp r5, 6 |
| if (r5 > 6) {
| /* switch table (7 cases) at 0xf7b2c */
0x000f7b24 addls pc, pc, r5, lsl 2 | pc += (r5 << 2);
| }
0x000f7b28 b 0xf7bb8 | goto label_20;
0x000f7b2c b 0xf7b48 | goto label_21;
0x000f7b30 b 0xf7bb8 | goto label_20;
0x000f7b34 b 0xf7b64 | goto label_22;
0x000f7b38 b 0xf7b74 | goto label_23;
0x000f7b3c b 0xf7b88 | goto label_24;
0x000f7b40 b 0xf7b9c | goto label_25;
0x000f7b44 b 0xf7bb0 | goto label_26;
| label_21:
0x000f7b48 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x000f7b4c cmp r3, 0 |
| if (r3 == 0) {
0x000f7b50 beq 0xf7944 | goto label_1;
| }
0x000f7b54 ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x000f7b58 cmp r2, 0 |
| if (r2 == 0) {
0x000f7b5c movne r4, r3 | r4 = r3;
| }
0x000f7b60 b 0xf7944 | goto label_1;
| label_22:
0x000f7b64 ldr r0, [r2, 4] | r0 = *((r2 + 4));
| do {
| label_6:
0x000f7b68 add sp, sp, 8 |
0x000f7b6c pop {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000f7b70 b 0x4f7b8 | void (*0x4f7b8)() ();
| label_23:
0x000f7b74 ldr r1, [r2, 4] | r1 = *((r2 + 4));
| label_7:
0x000f7b78 mov r0, r7 | r0 = r7;
0x000f7b7c bl 0x4f518 | strcpy (r0, r1)
0x000f7b80 mov r0, r7 | r0 = r7;
0x000f7b84 b 0xf7b68 |
| } while (1);
| label_24:
0x000f7b88 ldr r0, [r2, 8] | r0 = *((r2 + 8));
0x000f7b8c cmp r0, 0 |
| if (r0 != 0) {
0x000f7b90 ldreq r0, [pc, 0x98] | r0 = *((pc + 0x98));
| }
| if (r0 != 0) {
0x000f7b94 addeq r0, pc, r0 | r0 = pc + r0;
| }
0x000f7b98 b 0xf7b68 | goto label_6;
| label_25:
0x000f7b9c ldr r1, [r2, 8] | r1 = *((r2 + 8));
0x000f7ba0 cmp r1, 0 |
| if (r1 != 0) {
0x000f7ba4 ldreq r1, [pc, 0x88] | r1 = *((pc + 0x88));
| }
| if (r1 != 0) {
0x000f7ba8 addeq r1, pc, r1 | r1 = pc + r1;
| }
0x000f7bac b 0xf7b78 | goto label_7;
| label_26:
0x000f7bb0 ldr r4, [r2, 0xc] | r4 = *((r2 + 0xc));
0x000f7bb4 b 0xf7944 | goto label_1;
| label_20:
0x000f7bb8 mov r3, 0x79 | r3 = 0x79;
0x000f7bbc str r3, [sp] | *(sp) = r3;
0x000f7bc0 ldr r3, [pc, 0x70] | r3 = *(0xf7c34);
0x000f7bc4 mov r2, 0x6e | r2 = 0x6e;
0x000f7bc8 add r3, pc, r3 | r3 = pc + r3;
0x000f7bcc b 0xf7a50 | goto label_4;
| label_13:
0x000f7bd0 mov r3, 0x9e | r3 = 0x9e;
0x000f7bd4 str r3, [sp] | *(sp) = r3;
0x000f7bd8 ldr r3, [pc, 0x5c] | r3 = *(0xf7c38);
0x000f7bdc mov r2, 0x78 | r2 = 0x78;
0x000f7be0 add r3, pc, r3 | r3 = pc + r3;
0x000f7be4 mov r1, 0x8e | r1 = 0x8e;
0x000f7be8 b 0xf7a54 | goto label_8;
| label_12:
0x000f7bec mov r3, r7 | r3 = r7;
0x000f7bf0 mov r2, sb | r2 = sb;
0x000f7bf4 mov r1, r5 | r1 = r5;
0x000f7bf8 mov r0, r6 | r0 = r6;
0x000f7bfc mov ip, r8 |
0x000f7c00 str sl, [sp, 0x28] | *(arg_28h) = sl;
0x000f7c04 add sp, sp, 8 |
0x000f7c08 pop {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000f7c0c bx ip | return void (*ip)() ();
| }
; 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/libcrypto.so.1.1 @ 0xf7ca0 */
| #include <stdint.h>
|
; (fcn) sym.ENGINE_ctrl_cmd () | void ENGINE_ctrl_cmd (int32_t arg_20h, int32_t arg_24h, uint32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x000f7ca0 cmp r0, 0 |
0x000f7ca4 push {r0, r1, r2, r4, r5, r6, r7, lr} |
0x000f7ca8 ldr r4, [sp, 0x24] | r4 = *(arg_24h);
0x000f7cac mov r6, r2 | r6 = r2;
0x000f7cb0 clz r2, r1 | r2 &= r1;
0x000f7cb4 lsr r2, r2, 5 | r2 >>= 5;
| if (arg_20h != ) {
0x000f7cb8 moveq r2, 1 | r2 = 1;
| }
0x000f7cbc cmp r2, 0 |
| if (r2 == 0) {
0x000f7cc0 beq 0xf7cf4 | goto label_2;
| }
0x000f7cc4 mov r3, 0xc7 | r3 = 0xc7;
0x000f7cc8 str r3, [sp] | *(sp) = r3;
0x000f7ccc ldr r3, [pc, 0xac] | r3 = *(0xf7d7c);
0x000f7cd0 mov r2, 0x43 | r2 = 0x43;
0x000f7cd4 add r3, pc, r3 | r3 = pc + r3;
0x000f7cd8 mov r1, 0xb2 | r1 = 0xb2;
0x000f7cdc mov r0, 0x26 | r0 = 0x26;
0x000f7ce0 bl 0xfc7b8 | ERR_put_error ();
0x000f7ce4 mov r4, 0 | r4 = 0;
| do {
| label_1:
0x000f7ce8 mov r0, r4 | r0 = r4;
0x000f7cec add sp, sp, 0xc |
0x000f7cf0 pop {r4, r5, r6, r7, pc} |
| label_2:
0x000f7cf4 mov r7, r3 | r7 = r3;
0x000f7cf8 mov r3, r1 | r3 = r1;
0x000f7cfc ldr r1, [r0, 0x38] | r1 = *((r0 + 0x38));
0x000f7d00 mov r5, r0 | r5 = r0;
0x000f7d04 cmp r1, 0 |
| if (r1 != 0) {
0x000f7d08 bne 0xf7d38 | goto label_3;
| }
| label_0:
0x000f7d0c cmp r4, 0 |
| if (r4 != 0) {
0x000f7d10 bne 0xf7d74 | goto label_4;
| }
0x000f7d14 mov r3, 0xd9 | r3 = 0xd9;
0x000f7d18 str r3, [sp] | *(sp) = r3;
0x000f7d1c ldr r3, [pc, 0x60] | r3 = *(0xf7d80);
0x000f7d20 mov r2, 0x89 | r2 = 0x89;
0x000f7d24 add r3, pc, r3 | r3 = pc + r3;
0x000f7d28 mov r1, 0xb2 | r1 = 0xb2;
0x000f7d2c mov r0, 0x26 | r0 = 0x26;
0x000f7d30 bl 0xfc7b8 | ERR_put_error ();
0x000f7d34 b 0xf7ce8 |
| } while (1);
| label_3:
0x000f7d38 mov r1, 0xd | r1 = 0xd;
0x000f7d3c str r2, [sp] | *(sp) = r2;
0x000f7d40 bl 0xf7904 | r0 = ENGINE_ctrl ();
0x000f7d44 subs r1, r0, 0 | r1 = r0 - 0;
| if (r1 <= r0) {
0x000f7d48 ble 0xf7d0c | goto label_0;
| }
0x000f7d4c ldr r3, [sp, 0x20] | r3 = *(arg_20h);
0x000f7d50 mov r2, r6 | r2 = r6;
0x000f7d54 str r3, [sp] | *(sp) = r3;
0x000f7d58 mov r0, r5 | r0 = r5;
0x000f7d5c mov r3, r7 | r3 = r7;
0x000f7d60 bl 0xf7904 | r0 = ENGINE_ctrl ();
0x000f7d64 cmp r0, 0 |
| if (r0 > 0) {
0x000f7d68 movle r4, 0 | r4 = 0;
| }
| if (r0 <= 0) {
0x000f7d6c movgt r4, 1 | r4 = 1;
| }
0x000f7d70 b 0xf7ce8 | goto label_1;
| label_4:
0x000f7d74 bl 0xfc898 | ERR_clear_error ();
0x000f7d78 mov r4, 1 | r4 = 1;
0x000f7d7c b 0xf7ce8 | goto label_1;
| }
; 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/libcrypto.so.1.1 @ 0xf7d88 */
| #include <stdint.h>
|
; (fcn) sym.ENGINE_ctrl_cmd_string () | void ENGINE_ctrl_cmd_string (uint32_t arg1, int32_t arg2) {
| int32_t var_0h;
| char * * endptr;
| int32_t var_10h;
| r0 = arg1;
| r1 = arg2;
0x000f7d88 push {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} |
0x000f7d8c cmp r0, 0 |
0x000f7d90 mov r4, r3 | r4 = r3;
0x000f7d94 mov r3, r1 | r3 = r1;
0x000f7d98 clz r1, r1 | r1 &= r1;
0x000f7d9c lsr r1, r1, 5 | r1 >>= 5;
| if (r0 == 0) {
0x000f7da0 movne r5, r1 | r5 = r1;
| }
| if (r0 != 0) {
0x000f7da4 moveq r5, 1 | r5 = 1;
| }
0x000f7da8 cmp r5, 0 |
| if (r5 != 0) {
0x000f7dac beq 0xf7dd8 |
0x000f7db0 mov r3, 0xed | r3 = 0xed;
0x000f7db4 str r3, [sp] | *(sp) = r3;
0x000f7db8 ldr r3, [pc, 0x1d4] | r3 = *(0xf7f90);
0x000f7dbc mov r2, 0x43 | r2 = 0x43;
0x000f7dc0 add r3, pc, r3 | r3 = pc + r3;
| label_1:
0x000f7dc4 mov r1, 0xab | r1 = 0xab;
0x000f7dc8 mov r0, 0x26 | r0 = 0x26;
0x000f7dcc bl 0xfc7b8 | ERR_put_error ();
0x000f7dd0 mov r4, 0 | r4 = 0;
0x000f7dd4 b 0xf7e64 | goto label_3;
| }
0x000f7dd8 mov r6, r2 | r6 = r2;
0x000f7ddc ldr r2, [r0, 0x38] | r2 = *((r0 + 0x38));
0x000f7de0 mov r7, r0 | r7 = r0;
0x000f7de4 cmp r2, 0 |
0x000f7de8 bne 0xf7e18 |
| while (r8 <= r0) {
0x000f7dec cmp r4, 0 |
| if (r4 != 0) {
0x000f7df0 bne 0xf7e5c | goto label_4;
| }
0x000f7df4 mov r3, 0xff | r3 = 0xff;
0x000f7df8 str r3, [sp] | *(sp) = r3;
0x000f7dfc ldr r3, [pc, 0x194] | r3 = *(0xf7f94);
0x000f7e00 mov r2, 0x89 | r2 = 0x89;
0x000f7e04 add r3, pc, r3 | r3 = pc + r3;
| label_0:
0x000f7e08 mov r1, 0xab | r1 = 0xab;
0x000f7e0c mov r0, 0x26 | r0 = 0x26;
0x000f7e10 bl 0xfc7b8 | ERR_put_error ();
0x000f7e14 b 0xf7e64 | goto label_3;
0x000f7e18 str r5, [sp] | *(sp) = r5;
0x000f7e1c mov r2, r5 | r2 = r5;
0x000f7e20 mov r1, 0xd | r1 = 0xd;
0x000f7e24 bl 0xf7904 | r0 = ENGINE_ctrl ();
0x000f7e28 subs r8, r0, 0 | r8 = r0 - 0;
0x000f7e2c ble 0xf7dec |
| }
0x000f7e30 mov r1, r8 | r1 = r8;
0x000f7e34 mov r0, r7 | r0 = r7;
0x000f7e38 bl 0xf7c40 | r0 = ENGINE_cmd_is_executable ();
0x000f7e3c subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x000f7e40 bne 0xf7e70 | goto label_5;
| }
0x000f7e44 mov r3, 0x104 | r3 = 0x104;
0x000f7e48 str r3, [sp] | *(sp) = r3;
0x000f7e4c ldr r3, [pc, 0x148] | r3 = *(0xf7f98);
0x000f7e50 mov r2, 0x86 | r2 = 0x86;
0x000f7e54 add r3, pc, r3 | r3 = pc + r3;
0x000f7e58 b 0xf7e08 | goto label_0;
| label_4:
0x000f7e5c bl 0xfc898 | ERR_clear_error ();
0x000f7e60 mov r4, 1 | r4 = 1;
| do {
| label_3:
0x000f7e64 mov r0, r4 | r0 = r4;
0x000f7e68 add sp, sp, 0x10 |
0x000f7e6c pop {r4, r5, r6, r7, r8, pc} |
| label_5:
0x000f7e70 str r5, [sp] | *(sp) = r5;
0x000f7e74 mov r3, r5 | r3 = r5;
0x000f7e78 mov r2, r8 | r2 = r8;
0x000f7e7c mov r1, 0x12 | r1 = 0x12;
0x000f7e80 mov r0, r7 | r0 = r7;
0x000f7e84 bl 0xf7904 | r0 = ENGINE_ctrl ();
0x000f7e88 cmp r0, 0 |
| if (r0 < 0) {
0x000f7e8c bge 0xf7ea8 |
0x000f7e90 ldr r3, [pc, 0x108] | r3 = *(0xf7f9c);
0x000f7e94 mov r2, 0x6e | r2 = 0x6e;
0x000f7e98 str r3, [sp] | *(sp) = r3;
0x000f7e9c ldr r3, [pc, 0x100] | r3 = *(0xf7fa0);
0x000f7ea0 add r3, pc, r3 | r3 = pc + r3;
0x000f7ea4 b 0xf7dc4 | goto label_1;
| }
0x000f7ea8 ands r2, r0, 4 | r2 = r0 & 4;
| if (r2 == r0) {
0x000f7eac beq 0xf7ef8 | goto label_6;
| }
0x000f7eb0 cmp r6, 0 |
| if (r6 != 0) {
0x000f7eb4 beq 0xf7ed0 |
0x000f7eb8 mov r3, 0x118 | r3 = 0x118;
0x000f7ebc str r3, [sp] | *(sp) = r3;
0x000f7ec0 ldr r3, [pc, 0xe0] | r3 = *(0xf7fa4);
0x000f7ec4 mov r2, 0x88 | r2 = 0x88;
0x000f7ec8 add r3, pc, r3 | r3 = pc + r3;
0x000f7ecc b 0xf7dc4 | goto label_1;
| }
0x000f7ed0 mov r3, r6 | r3 = r6;
0x000f7ed4 mov r2, r6 | r2 = r6;
0x000f7ed8 str r6, [sp] | *(sp) = r6;
| label_2:
0x000f7edc mov r1, r8 | r1 = r8;
0x000f7ee0 mov r0, r7 | r0 = r7;
0x000f7ee4 bl 0xf7904 | r0 = ENGINE_ctrl ();
0x000f7ee8 cmp r0, 0 |
| if (r0 > 0) {
0x000f7eec movle r4, 0 | r4 = 0;
| }
| if (r0 <= 0) {
0x000f7ef0 movgt r4, 1 | r4 = 1;
| }
0x000f7ef4 b 0xf7e64 |
| } while (1);
| label_6:
0x000f7ef8 cmp r6, 0 |
| if (r6 == 0) {
0x000f7efc bne 0xf7f18 |
0x000f7f00 mov r3, 0x128 | r3 = 0x128;
0x000f7f04 str r3, [sp] | *(sp) = r3;
0x000f7f08 ldr r3, [pc, 0x9c] | r3 = *(0xf7fa8);
0x000f7f0c mov r2, 0x87 | r2 = 0x87;
0x000f7f10 add r3, pc, r3 | r3 = pc + r3;
0x000f7f14 b 0xf7dc4 | goto label_1;
| }
0x000f7f18 tst r0, 2 |
| if ((r0 & 2) == 0) {
0x000f7f1c strne r2, [sp] | *(sp) = r2;
| }
| if ((r0 & 2) != 0) {
0x000f7f20 movne r3, r6 | r3 = r6;
| goto label_7;
| }
| if ((r0 & 2) != 0) {
| label_7:
0x000f7f24 bne 0xf7edc | goto label_2;
| }
0x000f7f28 ands r4, r0, 1 | r4 = r0 & 1;
| if (r4 == r0) {
0x000f7f2c bne 0xf7f48 |
0x000f7f30 ldr r3, [pc, 0x78] | r3 = *(0xf7fac);
0x000f7f34 mov r2, 0x6e | r2 = 0x6e;
0x000f7f38 str r3, [sp] | *(sp) = r3;
0x000f7f3c ldr r3, [pc, 0x70] | r3 = *(0xf7fb0);
0x000f7f40 add r3, pc, r3 | r3 = pc + r3;
0x000f7f44 b 0xf7e08 | goto label_0;
| }
0x000f7f48 mov r2, 0xa | r2 = 0xa;
0x000f7f4c add r1, sp, 0xc | r1 += endptr;
0x000f7f50 mov r0, r6 | r0 = r6;
0x000f7f54 bl 0x4f7d0 | strtol (r0, r1, r2);
0x000f7f58 ldr r3, [sp, 0xc] | r3 = endptr;
0x000f7f5c cmp r3, r6 |
0x000f7f60 mov r2, r0 | r2 = r0;
| if (r3 != r6) {
0x000f7f64 beq 0xf7f74 |
0x000f7f68 ldrb r3, [r3] | r3 = *(r3);
0x000f7f6c cmp r3, 0 |
| if (r3 == 0) {
0x000f7f70 beq 0xf7f8c | goto label_8;
| }
| }
0x000f7f74 mov r3, 0x140 | r3 = 0x140;
0x000f7f78 str r3, [sp] | *(sp) = r3;
0x000f7f7c ldr r3, [pc, 0x34] | r3 = *(0xf7fb4);
0x000f7f80 mov r2, 0x85 | r2 = 0x85;
0x000f7f84 add r3, pc, r3 | r3 = pc + r3;
0x000f7f88 b 0xf7dc4 | goto label_1;
| label_8:
0x000f7f8c str r3, [sp] | *(sp) = r3;
0x000f7f90 b 0xf7edc | goto label_2;
| }
; 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/libcrypto.so.1.1 @ 0x127870 */
| #include <stdint.h>
|
; (fcn) sym.PEM_dek_info () | void PEM_dek_info (int32_t arg1, char * arg2) {
| r0 = arg1;
| r1 = arg2;
0x00127870 push {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00127874 mov r8, r1 | r8 = r1;
0x00127878 mov r5, r0 | r5 = r0;
0x0012787c mov r7, r2 | r7 = r2;
0x00127880 mov r6, r3 | r6 = r3;
0x00127884 bl 0x4f7b8 | strlen (r0);
0x00127888 ldr r2, [pc, 0x84] | r2 = *(0x127910);
0x0012788c mov r3, r8 | r3 = r8;
0x00127890 add r2, pc, r2 | r2 = pc + r2;
0x00127894 rsb r4, r0, 0x400 | r4 = 0x400 - r0;
0x00127898 add r5, r5, r0 | r5 += r0;
0x0012789c mov r1, r4 | r1 = r4;
0x001278a0 mov r0, r5 | r0 = r5;
0x001278a4 bl 0x6bc48 | r0 = BIO_snprintf ();
0x001278a8 cmp r0, 0 |
| if (r0 > 0) {
0x001278ac pople {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
0x001278b0 ldr sb, [pc, 0x60] | sb = *(0x127914);
0x001278b4 sub r4, r4, r0 | r4 -= r0;
0x001278b8 add r5, r5, r0 | r5 += r0;
0x001278bc mov r8, r6 | r8 = r6;
0x001278c0 add sb, pc, sb | sb = pc + sb;
| do {
0x001278c4 sub r3, r8, r6 | r3 = r8 - r6;
0x001278c8 cmp r7, r3 |
| if (r7 <= r3) {
0x001278cc bgt 0x1278ec |
0x001278d0 cmp r4, 1 |
| if (r4 > 1) {
0x001278d4 pople {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
0x001278d8 ldr r1, [pc, 0x3c] | r1 = *(0x127918);
0x001278dc mov r0, r5 | r0 = r5;
0x001278e0 add r1, pc, r1 | r1 = pc + r1;
0x001278e4 pop {r4, r5, r6, r7, r8, sb, sl, lr} |
0x001278e8 b 0x4f518 | void (*0x4f518)() ();
| }
0x001278ec ldrb r3, [r8], 1 | r3 = *(r8);
| r8++;
0x001278f0 mov r2, sb | r2 = sb;
0x001278f4 mov r1, r4 | r1 = r4;
0x001278f8 mov r0, r5 | r0 = r5;
0x001278fc bl 0x6bc48 | r0 = BIO_snprintf ();
0x00127900 cmp r0, 0 |
| if (r0 > 0) {
0x00127904 pople {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
0x00127908 sub r4, r4, r0 | r4 -= r0;
0x0012790c add r5, r5, r0 | r5 += r0;
0x00127910 b 0x1278c4 |
| } while (1);
| }
; 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/libcrypto.so.1.1 @ 0x138344 */
| #include <stdint.h>
|
; (fcn) sym.RAND_file_name () | void RAND_file_name (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00138344 push {r4, r5, r6, r7, r8, lr} |
0x00138348 mov r4, r0 | r4 = r0;
0x0013834c ldr r0, [pc, 0xb8] | r0 = *(0x138408);
0x00138350 mov r6, r1 | r6 = r1;
0x00138354 add r0, pc, r0 | r0 = pc + r0;
0x00138358 bl 0x111efc | r0 = fcn_00111efc (r0);
0x0013835c subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 != r0) {
0x00138360 beq 0x138370 |
0x00138364 ldrb r3, [r5] | r3 = *(r5);
0x00138368 cmp r3, 0 |
| if (r3 != 0) {
0x0013836c bne 0x138394 | goto label_2;
| }
| }
0x00138370 ldr r0, [pc, 0x98] | r0 = *(0x13840c);
0x00138374 add r0, pc, r0 | r0 = pc + r0;
0x00138378 bl 0x111efc | r0 = fcn_00111efc (r0);
0x0013837c subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 == r0) {
0x00138380 movne r7, 0 | r7 = 0;
| }
0x00138384 bne 0x138398 |
| while (r3 == 0) {
| label_0:
0x00138388 mov r4, 0 | r4 = 0;
| label_1:
0x0013838c mov r0, r4 | r0 = r4;
0x00138390 pop {r4, r5, r6, r7, r8, pc} |
| label_2:
0x00138394 mov r7, 1 | r7 = 1;
0x00138398 ldrb r3, [r5] | r3 = *(r5);
0x0013839c cmp r3, 0 |
0x001383a0 beq 0x138388 |
| }
0x001383a4 mov r0, r5 | r0 = r5;
0x001383a8 bl 0x4f7b8 | strlen (r0);
0x001383ac cmp r7, 0 |
| if (r7 == 0) {
0x001383b0 beq 0x1383d0 | goto label_3;
| }
0x001383b4 add r0, r0, 1 | r0++;
0x001383b8 cmp r0, r6 |
| if (r0 >= r6) {
0x001383bc bhs 0x138388 | goto label_0;
| }
0x001383c0 mov r1, r5 | r1 = r5;
0x001383c4 mov r0, r4 | r0 = r4;
0x001383c8 bl 0x4f518 | strcpy (r0, r1)
0x001383cc b 0x13838c | goto label_1;
| label_3:
0x001383d0 add r0, r0, 6 | r0 += 6;
0x001383d4 cmp r0, r6 |
| if (r0 >= r6) {
0x001383d8 bhs 0x138388 | goto label_0;
| }
0x001383dc mov r1, r5 | r1 = r5;
0x001383e0 mov r0, r4 | r0 = r4;
0x001383e4 bl 0x4f518 | strcpy (r0, r1)
0x001383e8 ldr r1, [pc, 0x24] | r1 = *(0x138410);
0x001383ec mov r0, r4 | r0 = r4;
0x001383f0 add r1, pc, r1 | r1 = pc + r1;
0x001383f4 bl 0x4f560 | strcat (r0, r1);
0x001383f8 ldr r1, [pc, 0x18] | r1 = *(0x138414);
0x001383fc mov r0, r4 | r0 = r4;
0x00138400 add r1, pc, r1 | r1 = pc + r1;
0x00138404 bl 0x4f560 | strcat (r0, r1);
0x00138408 b 0x13838c | goto label_1;
| }
; 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/libcrypto.so.1.1 @ 0x15c83c */
| #include <stdint.h>
|
; (fcn) sym.TS_RESP_verify_response () | void TS_RESP_verify_response (int32_t arg1) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_14h;
| char * dest;
| void * s;
| int32_t var_118h;
| int32_t var_11ch;
| r0 = arg1;
0x0015c83c push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0015c840 ldm r1, {r6, r7, r8} | r6 = *(r1);
| r7 = *((r1 + 4));
| r8 = *((r1 + 8));
0x0015c844 sub sp, sp, 0x11c |
0x0015c848 mov r5, r0 | r5 = r0;
0x0015c84c ldr r0, [r6] | r0 = *(r6);
0x0015c850 bl 0x550bc | ASN1_INTEGER_get ();
0x0015c854 mov r1, 0 | r1 = 0;
0x0015c858 mov r2, 0xfc | r2 = 0xfc;
0x0015c85c str r1, [sp, 0x18] | dest = r1;
0x0015c860 mov r4, r0 | r4 = r0;
0x0015c864 add r0, sp, 0x1c | r0 += s;
0x0015c868 bl 0x4f4ac | memset (r0, r1, r2);
0x0015c86c cmp r4, 1 |
| if (r4 < 1) {
0x0015c870 bls 0x15cac8 | goto label_2;
| }
0x0015c874 cmp r4, 5 |
| if (r4 > 5) {
0x0015c878 bhi 0x15c90c | goto label_3;
| }
0x0015c87c ldr r3, [pc, 0x264] | r3 = *(0x15cae4);
0x0015c880 add r3, pc, r3 | r3 = pc + r3;
0x0015c884 ldr r8, [r3, r4, lsl 2] | r8 = *(0x15cae4);
| do {
0x0015c888 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0015c88c bl 0x154518 | r0 = OPENSSL_sk_num ();
0x0015c890 cmp r0, 0 |
| if (r0 > 0) {
0x0015c894 movle r4, 0 | r4 = 0;
| }
| if (r0 <= 0) {
0x0015c898 ble 0x15c9b0 | goto label_4;
| }
0x0015c89c ldr sb, [r6, 4] | sb = *((r6 + 4));
0x0015c8a0 ldr r7, [pc, 0x244] | r7 = *(0x15cae8);
0x0015c8a4 mov r4, 0 | r4 = 0;
0x0015c8a8 mov r5, r4 | r5 = r4;
| label_1:
0x0015c8ac mov r0, sb | r0 = sb;
0x0015c8b0 bl 0x154518 | r0 = OPENSSL_sk_num ();
0x0015c8b4 cmp r5, r0 |
| if (r5 < r0) {
0x0015c8b8 blt 0x15c918 | goto label_5;
| }
0x0015c8bc ldr r5, [pc, 0x22c] | r5 = *(0x15caec);
0x0015c8c0 mov r0, r4 | r0 = r4;
0x0015c8c4 add r5, pc, r5 | r5 = pc + r5;
0x0015c8c8 mov r1, r5 | r1 = r5;
0x0015c8cc ldr r2, [pc, 0x220] | r2 = *(0x15caf0);
0x0015c8d0 bl 0x118474 | r0 = CRYPTO_malloc ();
0x0015c8d4 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x0015c8d8 movne r5, r4 | r5 = r4;
| }
| if (r4 == r0) {
0x0015c8dc movne r7, 0 | r7 = 0;
| }
| if (r4 == r0) {
0x0015c8e0 movne fp, 0x2f |
| }
| if (r4 != r0) {
0x0015c8e4 bne 0x15c998 | goto label_6;
| }
0x0015c8e8 ldr r3, [pc, 0x208] | r3 = *(0x15caf4);
0x0015c8ec mov r2, 0x41 | r2 = 0x41;
0x0015c8f0 str r3, [sp] | *(sp) = r3;
0x0015c8f4 mov r1, 0x69 | r1 = 0x69;
0x0015c8f8 mov r3, r5 | r3 = r5;
0x0015c8fc mov r0, 0x2f | r0 = 0x2f;
0x0015c900 bl 0xfc7b8 | ERR_put_error ();
| label_0:
0x0015c904 mov r0, 0 | r0 = 0;
0x0015c908 b 0x15cae0 | goto label_7;
| label_3:
0x0015c90c ldr r8, [pc, 0x1e8] | r8 = *(0x15caf8);
0x0015c910 add r8, pc, r8 | r8 = pc + r8;
0x0015c914 b 0x15c888 |
| } while (1);
| label_5:
0x0015c918 mov r1, r5 | r1 = r5;
0x0015c91c mov r0, sb | r0 = sb;
0x0015c920 bl 0x154528 | r0 = OPENSSL_sk_value ();
0x0015c924 mov sl, r0 | sl = r0;
0x0015c928 bl 0x5b9e0 | ASN1_STRING_length ();
0x0015c92c sub r3, r7, r4 | r3 = r7 - r4;
0x0015c930 cmp r0, r3 |
| if (r0 > r3) {
0x0015c934 bgt 0x15c904 | goto label_0;
| }
0x0015c938 mov r0, sl | r0 = sl;
0x0015c93c bl 0x5b9e0 | ASN1_STRING_length ();
0x0015c940 add r5, r5, 1 | r5++;
0x0015c944 add r4, r4, r0 | r4 += r0;
0x0015c948 add r4, r4, 1 | r4++;
0x0015c94c b 0x15c8ac | goto label_1;
| do {
0x0015c950 mov r1, r7 | r1 = r7;
0x0015c954 mov r0, sb | r0 = sb;
0x0015c958 bl 0x154528 | OPENSSL_sk_value ();
0x0015c95c str r0, [sp, 0x14] | var_14h = r0;
0x0015c960 bl 0x5b9e0 | ASN1_STRING_length ();
0x0015c964 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0015c968 cmp r7, 0 |
| if (r7 <= 0) {
0x0015c96c strbgt fp, [r5] | *(r5) = fp;
| }
| if (r7 <= 0) {
0x0015c970 addgt r5, r5, 1 | r5++;
| }
0x0015c974 add r7, r7, 1 | r7++;
0x0015c978 mov sl, r0 | sl = r0;
0x0015c97c mov r0, r3 | r0 = r3;
0x0015c980 bl 0x5b9f8 | ASN1_STRING_get0_data ();
0x0015c984 mov r2, sl | r2 = sl;
0x0015c988 mov r1, r0 | r1 = r0;
0x0015c98c mov r0, r5 | r0 = r5;
0x0015c990 bl 0x4f6bc | strncpy (r0, r1, r2);
0x0015c994 add r5, r5, sl | r5 += sl;
| label_6:
0x0015c998 mov r0, sb | r0 = sb;
0x0015c99c bl 0x154518 | r0 = OPENSSL_sk_num ();
0x0015c9a0 cmp r7, r0 |
0x0015c9a4 blt 0x15c950 |
| } while (r7 < r0);
0x0015c9a8 mov r3, 0 | r3 = 0;
0x0015c9ac strb r3, [r5] | *(r5) = r3;
| label_4:
0x0015c9b0 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0015c9b4 cmp r3, 0 |
| if (r3 == 0) {
0x0015c9b8 beq 0x15ca30 | goto label_8;
| }
0x0015c9bc ldr r7, [pc, 0x13c] |
0x0015c9c0 ldr sb, [pc, 0x13c] |
0x0015c9c4 add r7, pc, r7 | r7 = pc + r7;
0x0015c9c8 add sb, pc, sb | sb = pc + sb;
0x0015c9cc mov r5, 0 | r5 = 0;
0x0015c9d0 mov sl, 1 | sl = 1;
0x0015c9d4 add r7, r7, 0x18 | r7 = 0x15cb14;
0x0015c9d8 add sb, sb, 0x18 | sb = 0x15cb18;
| do {
0x0015c9dc ldr r1, [r5, r7] | r1 = *((r5 + r7));
0x0015c9e0 ldr r0, [r6, 8] | r0 = *((r6 + 8));
0x0015c9e4 bl 0x53a14 | r0 = ASN1_BIT_STRING_get_bit ();
0x0015c9e8 cmp r0, 0 |
| if (r0 != 0) {
0x0015c9ec beq 0x15ca24 |
0x0015c9f0 cmp sl, 0 |
0x0015c9f4 add r3, sp, 0x18 | r3 += dest;
| if (sl == 0) {
0x0015c9f8 bne 0x15ca10 |
0x0015c9fc ldr r1, [pc, 0x104] | r1 = *(0x15cb04);
0x0015ca00 mov r0, r3 | r0 = r3;
0x0015ca04 add r1, pc, r1 | r1 = pc + r1;
0x0015ca08 bl 0x4f560 | r0 = strcat (r0, r1);
0x0015ca0c mov r3, r0 | r3 = r0;
| }
0x0015ca10 add r2, sb, r5 | r2 = sb + r5;
0x0015ca14 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x0015ca18 mov r0, r3 | r0 = r3;
0x0015ca1c bl 0x4f560 | strcat (r0, r1);
0x0015ca20 mov sl, 0 | sl = 0;
| }
0x0015ca24 add r5, r5, 8 | r5 += 8;
0x0015ca28 cmp r5, 0x40 |
0x0015ca2c bne 0x15c9dc |
| } while (r5 != 0x40);
| label_8:
0x0015ca30 add r5, sp, 0x118 | r5 += var_118h;
0x0015ca34 ldrb r3, [r5, -0x100]! | r3 = dest;
0x0015ca38 cmp r3, 0 |
| if (r3 == 0) {
0x0015ca3c bne 0x15ca50 |
0x0015ca40 ldr r1, [pc, 0xc4] | r1 = *(0x15cb08);
0x0015ca44 mov r0, r5 | r0 = r5;
0x0015ca48 add r1, pc, r1 | r1 = pc + r1;
0x0015ca4c bl 0x4f518 | strcpy (r0, r1)
| }
0x0015ca50 ldr r3, [pc, 0xb8] | r3 = *(0x15cb0c);
0x0015ca54 mov r2, 0x6b | r2 = 0x6b;
0x0015ca58 str r3, [sp] | *(sp) = r3;
0x0015ca5c ldr r3, [pc, 0xb0] | r3 = *(0x15cb10);
0x0015ca60 mov r1, 0x68 | r1 = 0x68;
0x0015ca64 add r3, pc, r3 | r3 = pc + r3;
0x0015ca68 mov r0, 0x2f | r0 = 0x2f;
0x0015ca6c bl 0xfc7b8 | ERR_put_error ();
0x0015ca70 cmp r4, 0 |
| if (r4 == 0) {
0x0015ca74 movne r3, r4 | r3 = r4;
| }
| if (r4 != 0) {
0x0015ca78 ldreq r3, [pc, 0x98] | r3 = *((pc + 0x98));
| }
| if (r4 != 0) {
0x0015ca7c addeq r3, pc, r3 | r3 = pc + r3;
| }
0x0015ca80 ldr r2, [pc, 0x94] | r2 = *(0x15cb18);
0x0015ca84 str r3, [sp] | *(sp) = r3;
0x0015ca88 ldr r1, [pc, 0x90] | r1 = *(0x15cb1c);
0x0015ca8c ldr r3, [pc, 0x90] | r3 = *(0x15cb20);
0x0015ca90 add r2, pc, r2 | r2 = pc + r2;
0x0015ca94 str r2, [sp, 4] | var_4h = r2;
0x0015ca98 str r5, [sp, 8] | var_8h = r5;
0x0015ca9c mov r2, r8 | r2 = r8;
0x0015caa0 add r3, pc, r3 | r3 = pc + r3;
0x0015caa4 add r1, pc, r1 | r1 = pc + r1;
0x0015caa8 mov r0, 6 | r0 = 6;
0x0015caac bl 0xfcf84 | ERR_add_error_data ();
0x0015cab0 ldr r1, [pc, 0x70] | r1 = *(0x15cb24);
0x0015cab4 ldr r2, [pc, 0x70] | r2 = *(0x15cb28);
0x0015cab8 add r1, pc, r1 | r1 = pc + r1;
0x0015cabc mov r0, r4 | r0 = r4;
0x0015cac0 bl 0x11842c | CRYPTO_free ();
0x0015cac4 b 0x15c904 | goto label_0;
| label_2:
0x0015cac8 mov r2, r8 | r2 = r8;
0x0015cacc mov r1, r7 | r1 = r7;
0x0015cad0 mov r0, r5 | r0 = r5;
0x0015cad4 bl 0x15c5b0 | r0 = fcn_0015c5b0 (r0, r1);
0x0015cad8 adds r0, r0, 0 | r0 += 0;
| if (r0 == r0) {
0x0015cadc movne r0, 1 | r0 = 1;
| }
| label_7:
0x0015cae0 add sp, sp, 0x11c |
0x0015cae4 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
[*] Function strcpy used 9 times libcrypto.so.1.1