[*] Binary protection state of libcrypto.so.1.1
Partial RELRO No Canary found NX disabled DSO No RPATH No RUNPATH No Symbols
[*] Function system 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 @ 0x500bc */
| #include <stdint.h>
|
; (fcn) entry.fini0 () | void entry_fini0 () {
0x000500bc ldr r3, [pc, 0x68] | r3 = *(0x50128);
0x000500c0 push {r4, lr} |
0x000500c4 ldr r4, [pc, 0x64] | r4 = *(0x5012c);
0x000500c8 add r3, pc, r3 | r3 = pc + r3;
0x000500cc ldrb r3, [r3] | r3 = *(r3);
0x000500d0 add r4, pc, r4 | r4 = pc + r4;
0x000500d4 cmp r3, 0 |
0x000500d8 popne {r4, pc} |
0x000500dc ldr r3, [pc, 0x50] | r3 = *(0x50130);
0x000500e0 ldr r3, [r4, r3] | r3 = *(0x5012c);
0x000500e4 cmp r3, 0 |
| if (r3 != 0) {
0x000500e8 beq 0x500f8 |
0x000500ec ldr r3, [pc, 0x44] | r3 = *(0x50134);
0x000500f0 ldr r0, [pc, r3] | r0 = *(0x000500f8);
0x000500f4 bl 0x4f2a8 | cxa_finalize ();
| }
0x000500f8 bl 0x50000 | entry0 ();
0x000500fc ldr r3, [pc, 0x38] | r3 = *(0x50138);
0x00050100 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00050104 cmp r3, 0 |
| if (r3 != 0) {
0x00050108 beq 0x50118 |
0x0005010c ldr r0, [pc, 0x2c] | r0 = *(0x5013c);
0x00050110 add r0, pc, r0 | r0 = pc + r0;
0x00050114 bl 0x4f5f0 | loc_imp_deregister_frame_info ();
| }
0x00050118 ldr r3, [pc, 0x24] | r3 = *(0x50140);
0x0005011c mov r2, 1 | r2 = 1;
0x00050120 add r3, pc, r3 | r3 = pc + r3;
0x00050124 strb r2, [r3] | *(r3) = r2;
0x00050128 pop {r4, 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 @ 0x70a78 */
| #include <stdint.h>
|
; (fcn) fcn.00070a78 () | void fcn_00070a78 (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
0x00070a78 push {r0, r1, r4, r5, r6, r7, r8, sb, sl, lr} |
0x00070a7c ldr r7, [r1, 0x1c] | r7 = *((r1 + 0x1c));
0x00070a80 mov r6, r0 | r6 = r0;
0x00070a84 mov r4, r1 | r4 = r1;
0x00070a88 mvn r5, 0 | r5 = ~0;
0x00070a8c mov r8, 5 | r8 = 5;
| label_1:
0x00070a90 mov sb, 0 | sb = 0;
| label_0:
0x00070a94 ldr r3, [r4] | r3 = *(r4);
0x00070a98 sub r2, r3, 1 | r2 = r3 - 1;
0x00070a9c cmp r2, 5 |
| if (r2 > 5) {
| /* switch table (6 cases) at 0x70aa8 */
0x00070aa0 addls pc, pc, r2, lsl 2 | pc += (r2 << 2);
| }
0x00070aa4 b 0x70ac4 | goto label_2;
0x00070aa8 b 0x70ae8 | goto label_7;
0x00070aac b 0x70b7c | goto label_8;
0x00070ab0 b 0x70c20 | goto label_9;
0x00070ab4 b 0x70ccc | goto label_10;
0x00070ab8 b 0x70ac0 | goto label_11;
0x00070abc b 0x70dcc | goto label_12;
| label_11:
0x00070ac0 mov r5, 1 | r5 = 1;
| do {
| label_2:
0x00070ac4 cmp r7, 0 |
| if (r7 == 0) {
0x00070ac8 beq 0x70b70 | goto label_13;
| }
0x00070acc ldr r1, [r4] | r1 = *(r4);
0x00070ad0 mov r2, r5 | r2 = r5;
0x00070ad4 mov r0, r6 | r0 = r6;
0x00070ad8 mov r3, r7 | r3 = r7;
0x00070adc add sp, sp, 8 |
0x00070ae0 pop {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00070ae4 bx r3 | return uint32_t (*r3)() ();
| label_7:
0x00070ae8 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00070aec cmp r3, 0 |
| if (r3 != 0) {
0x00070af0 bne 0x70b48 | goto label_14;
| }
0x00070af4 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00070af8 cmp r3, 0 |
| if (r3 != 0) {
0x00070afc bne 0x70b48 | goto label_14;
| }
0x00070b00 mov r3, 0x57 | r3 = 0x57;
0x00070b04 str r3, [sp] | *(sp) = r3;
0x00070b08 ldr r3, [pc, 0x348] | r3 = *(0x70e54);
0x00070b0c mov r2, 0x90 | r2 = 0x90;
0x00070b10 add r3, pc, r3 | r3 = pc + r3;
0x00070b14 mov r1, 0x73 | r1 = 0x73;
0x00070b18 mov r0, 0x20 | r0 = 0x20;
0x00070b1c bl 0xfc7b8 | ERR_put_error ();
0x00070b20 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00070b24 ldr r1, [pc, 0x330] | r1 = *(0x70e58);
0x00070b28 str r3, [sp] | *(sp) = r3;
0x00070b2c ldr r3, [pc, 0x32c] | r3 = *(0x70e5c);
0x00070b30 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00070b34 add r3, pc, r3 | r3 = pc + r3;
0x00070b38 add r1, pc, r1 | r1 = pc + r1;
0x00070b3c mov r0, 4 | r0 = 4;
0x00070b40 bl 0xfcf84 | ERR_add_error_data ();
0x00070b44 b 0x70ac4 |
| } while (1);
| label_14:
0x00070b48 mov r3, 2 | r3 = 2;
| label_5:
0x00070b4c str r3, [r4] | *(r4) = r3;
| label_6:
0x00070b50 cmp r7, 0 |
| if (r7 == 0) {
0x00070b54 beq 0x70a94 | goto label_0;
| }
0x00070b58 mov r2, r5 | r2 = r5;
0x00070b5c ldr r1, [r4] | r1 = *(r4);
0x00070b60 mov r0, r6 | r0 = r6;
0x00070b64 blx r7 | r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x00070b68 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 != r0) {
0x00070b6c bne 0x70a90 | goto label_1;
| }
| label_13:
0x00070b70 mov r0, r5 | r0 = r5;
0x00070b74 add sp, sp, 8 |
0x00070b78 pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_8:
0x00070b7c ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00070b80 cmp r2, 6 |
| if (r2 != 6) {
0x00070b84 beq 0x70bbc |
0x00070b88 cmp r2, 0x100 |
| if (r2 == 0x100) {
0x00070b8c beq 0x70c0c | goto label_15;
| }
0x00070b90 cmp r2, 4 |
| if (r2 == 4) {
0x00070b94 beq 0x70bc0 | goto label_4;
| }
0x00070b98 mov r3, 0x78 | r3 = 0x78;
0x00070b9c str r3, [sp] | *(sp) = r3;
0x00070ba0 ldr r3, [pc, 0x2bc] | r3 = *(0x70e60);
0x00070ba4 mov r2, 0x92 | r2 = 0x92;
0x00070ba8 add r3, pc, r3 | r3 = pc + r3;
| label_3:
0x00070bac mov r1, 0x73 | r1 = 0x73;
0x00070bb0 mov r0, 0x20 | r0 = 0x20;
0x00070bb4 bl 0xfc7b8 | ERR_put_error ();
0x00070bb8 b 0x70ac4 | goto label_2;
| }
0x00070bbc mov r3, 0xa | r3 = 0xa;
| label_4:
0x00070bc0 add r2, r4, 0x14 | r2 = r4 + 0x14;
0x00070bc4 str r2, [sp, 4] | var_4h = r2;
0x00070bc8 mov r2, 1 | r2 = 1;
0x00070bcc str r2, [sp] | *(sp) = r2;
0x00070bd0 ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x00070bd4 mov r2, 0 | r2 = 0;
0x00070bd8 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00070bdc bl 0x6a210 | r0 = BIO_lookup ();
0x00070be0 cmp r0, 0 |
| if (r0 == 0) {
0x00070be4 beq 0x70ac4 | goto label_2;
| }
0x00070be8 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00070bec cmp r3, 0 |
| if (r3 == 0) {
0x00070bf0 bne 0x70c14 |
0x00070bf4 mov r3, 0x81 | r3 = 0x81;
0x00070bf8 str r3, [sp] | *(sp) = r3;
0x00070bfc ldr r3, [pc, 0x264] | r3 = *(0x70e64);
0x00070c00 mov r2, 0x8e | r2 = 0x8e;
0x00070c04 add r3, pc, r3 | r3 = pc + r3;
0x00070c08 b 0x70bac | goto label_3;
| label_15:
0x00070c0c mov r3, 0 | r3 = 0;
0x00070c10 b 0x70bc0 | goto label_4;
| }
0x00070c14 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x00070c18 mov r3, 3 | r3 = 3;
0x00070c1c b 0x70b4c | goto label_5;
| label_9:
0x00070c20 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00070c24 bl 0x69ca4 | r0 = BIO_ADDRINFO_family ();
0x00070c28 mov r5, r0 | r5 = r0;
0x00070c2c ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00070c30 bl 0x69cb0 | r0 = BIO_ADDRINFO_socktype ();
0x00070c34 mov sl, r0 | sl = r0;
0x00070c38 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00070c3c bl 0x69cbc | BIO_ADDRINFO_protocol ();
0x00070c40 mov r3, 0 | r3 = 0;
0x00070c44 mov r1, sl | r1 = sl;
0x00070c48 mov r2, r0 | r2 = r0;
0x00070c4c mov r0, r5 | r0 = r5;
0x00070c50 bl 0x6c310 | r0 = BIO_socket ();
0x00070c54 cmn r0, 1 |
0x00070c58 mov r5, r0 | r5 = r0;
| if (r0 == 1) {
0x00070c5c bne 0x70cc0 |
0x00070c60 bl 0x4f848 | errno_location ();
0x00070c64 ldr r8, [pc, 0x200] | r8 = *(0x70e68);
0x00070c68 mov r3, 0x8d | r3 = 0x8d;
0x00070c6c add r8, pc, r8 | r8 = pc + r8;
0x00070c70 str r3, [sp] | *(sp) = r3;
0x00070c74 mov r1, 4 | r1 = 4;
0x00070c78 mov r3, r8 | r3 = r8;
0x00070c7c ldr r2, [r0] | r2 = *(r0);
0x00070c80 mov r0, 2 | r0 = 2;
0x00070c84 bl 0xfc7b8 | ERR_put_error ();
0x00070c88 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00070c8c ldr r1, [pc, 0x1dc] | r1 = "_";
0x00070c90 str r3, [sp] | *(sp) = r3;
0x00070c94 ldr r3, [pc, 0x1d8] | r3 = *(0x70e70);
0x00070c98 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00070c9c add r3, pc, r3 | r3 = pc + r3;
0x00070ca0 add r1, pc, r1 | r1 = pc + r1;
0x00070ca4 mov r0, 4 | r0 = 4;
0x00070ca8 bl 0xfcf84 | ERR_add_error_data ();
0x00070cac mov r3, 0x91 | r3 = 0x91;
0x00070cb0 str r3, [sp] | *(sp) = r3;
0x00070cb4 mov r2, 0x76 | r2 = 0x76;
0x00070cb8 mov r3, r8 | r3 = r8;
0x00070cbc b 0x70bac | goto label_3;
| }
0x00070cc0 str r0, [r6, 0x20] | *((r6 + 0x20)) = r0;
0x00070cc4 mov r3, 4 | r3 = 4;
0x00070cc8 b 0x70b4c | goto label_5;
| label_10:
0x00070ccc mov r1, 0xf | r1 = 0xf;
0x00070cd0 mov r0, r6 | r0 = r6;
0x00070cd4 bl 0x6e76c | BIO_clear_flags ();
0x00070cd8 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00070cdc ldr r5, [r6, 0x20] | r5 = *((r6 + 0x20));
0x00070ce0 bl 0x69d1c | BIO_ADDRINFO_address ();
0x00070ce4 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x00070ce8 orr r2, r2, 4 | r2 |= 4;
0x00070cec mov r1, r0 | r1 = r0;
0x00070cf0 mov r0, r5 | r0 = r5;
0x00070cf4 bl 0x6c3a0 | BIO_connect ();
0x00070cf8 str sb, [r6, 0x1c] | *((r6 + 0x1c)) = sb;
0x00070cfc subs sl, r0, 0 | sl = r0 - 0;
| if (sl == r0) {
0x00070d00 strne r8, [r4] | *(r4) = r8;
| }
| if (sl != r0) {
0x00070d04 movne r5, sl | r5 = sl;
| goto label_16;
| }
| if (sl != r0) {
| label_16:
0x00070d08 bne 0x70b50 | goto label_6;
| }
0x00070d0c bl 0x73258 | r0 = BIO_sock_should_retry ();
0x00070d10 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 == r0) {
0x00070d14 beq 0x70d40 | goto label_17;
| }
0x00070d18 mov r1, 0xc | r1 = 0xc;
0x00070d1c mov r0, r6 | r0 = r6;
0x00070d20 bl 0x6e788 | BIO_set_flags ();
0x00070d24 mov r3, 6 | r3 = 6;
0x00070d28 str r3, [r4] | *(r4) = r3;
0x00070d2c mov r3, 2 | r3 = 2;
0x00070d30 str r3, [r6, 0x1c] | *((r6 + 0x1c)) = r3;
0x00070d34 bl 0xfc898 | ERR_clear_error ();
| do {
0x00070d38 mov r5, 0 | r5 = 0;
0x00070d3c b 0x70ac4 | goto label_2;
| label_17:
0x00070d40 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00070d44 bl 0x69c98 | r0 = BIO_ADDRINFO_next ();
0x00070d48 cmp r0, 0 |
0x00070d4c str r0, [r4, 0x18] | *((r4 + 0x18)) = r0;
| if (r0 != 0) {
0x00070d50 beq 0x70d6c |
0x00070d54 ldr r0, [r6, 0x20] | r0 = *((r6 + 0x20));
0x00070d58 bl 0x6ca28 | BIO_closesocket ();
0x00070d5c mov r3, 3 | r3 = 3;
0x00070d60 str r3, [r4] | *(r4) = r3;
0x00070d64 bl 0xfc898 | ERR_clear_error ();
0x00070d68 b 0x70b50 | goto label_6;
| }
0x00070d6c bl 0x4f848 | errno_location ();
0x00070d70 ldr r8, [pc, 0x100] | r8 = *(0x70e74);
0x00070d74 mov r1, 2 | r1 = 2;
0x00070d78 add r8, pc, r8 | r8 = pc + r8;
0x00070d7c mov r3, 0xad | r3 = 0xad;
0x00070d80 str r3, [sp] | *(sp) = r3;
0x00070d84 mov r3, r8 | r3 = r8;
0x00070d88 ldr r2, [r0] | r2 = *(r0);
0x00070d8c mov r0, r1 | r0 = r1;
0x00070d90 bl 0xfc7b8 | ERR_put_error ();
0x00070d94 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00070d98 ldr r1, [pc, 0xdc] | r1 = *(0x70e78);
0x00070d9c str r3, [sp] | *(sp) = r3;
0x00070da0 ldr r3, [pc, 0xd8] | r3 = *(0x70e7c);
0x00070da4 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00070da8 add r3, pc, r3 | r3 = pc + r3;
0x00070dac add r1, pc, r1 | r1 = pc + r1;
0x00070db0 mov r0, 4 | r0 = 4;
0x00070db4 bl 0xfcf84 | ERR_add_error_data ();
0x00070db8 mov r3, 0xb1 | r3 = 0xb1;
0x00070dbc str r3, [sp] | *(sp) = r3;
0x00070dc0 mov r2, 0x67 | r2 = 0x67;
0x00070dc4 mov r3, r8 | r3 = r8;
0x00070dc8 b 0x70bac | goto label_3;
| label_12:
0x00070dcc ldr r0, [r6, 0x20] | r0 = *((r6 + 0x20));
0x00070dd0 bl 0x6bc70 | r0 = BIO_sock_error ();
0x00070dd4 subs sl, r0, 0 | sl = r0 - 0;
| if (sl == r0) {
0x00070dd8 beq 0x70e50 | goto label_18;
| }
0x00070ddc ldr r5, [pc, 0xa0] | r5 = *(0x70e80);
0x00070de0 mov r0, r6 | r0 = r6;
0x00070de4 mov r1, 0xf | r1 = 0xf;
0x00070de8 bl 0x6e76c | BIO_clear_flags ();
0x00070dec add r5, pc, r5 | r5 = pc + r5;
0x00070df0 mov r1, 2 | r1 = 2;
0x00070df4 mov r3, 0xbd | r3 = 0xbd;
0x00070df8 str r3, [sp] | *(sp) = r3;
0x00070dfc mov r2, sl | r2 = sl;
0x00070e00 mov r3, r5 | r3 = r5;
0x00070e04 mov r0, r1 | r0 = r1;
0x00070e08 bl 0xfc7b8 | ERR_put_error ();
0x00070e0c ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00070e10 ldr r1, [pc, 0x70] | r1 = *(0x70e84);
0x00070e14 str r3, [sp] | *(sp) = r3;
0x00070e18 ldr r3, [pc, 0x6c] | r3 = *(0x70e88);
0x00070e1c ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00070e20 add r3, pc, r3 | r3 = pc + r3;
0x00070e24 add r1, pc, r1 | r1 = pc + r1;
0x00070e28 mov r0, 4 | r0 = 4;
0x00070e2c bl 0xfcf84 | ERR_add_error_data ();
0x00070e30 mov r3, 0xc1 | r3 = 0xc1;
0x00070e34 str r3, [sp] | *(sp) = r3;
0x00070e38 mov r2, 0x6e | r2 = 0x6e;
0x00070e3c mov r3, r5 | r3 = r5;
0x00070e40 mov r1, 0x73 | r1 = 0x73;
0x00070e44 mov r0, 0x20 | r0 = 0x20;
0x00070e48 bl 0xfc7b8 | ERR_put_error ();
0x00070e4c b 0x70d38 |
| } while (1);
| label_18:
0x00070e50 str r8, [r4] | *(r4) = r8;
0x00070e54 b 0x70b50 | goto label_6;
| }
; 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 @ 0x8f160 */
| #include <stdint.h>
|
| uint32_t rotate_right32 (uint32_t value, uint32_t count) {
| const uint32_t mask = (CHAR_BIT * sizeof (value)) - 1;
| count &= mask;
| return (value >> count) | (value << (-count & mask));
| }
|
; (fcn) fcn.0008f160 () | void fcn_0008f160 (int32_t arg_0h, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int8_t var_fh;
| int8_t var_eh;
| int8_t var_dh;
| int32_t var_4h;
| int8_t var_bh;
| int8_t var_ah;
| int8_t var_9h;
| int32_t var_8h;
| int8_t var_7h;
| int8_t var_6h;
| int8_t var_5h;
| int32_t var_ch;
| int8_t var_3h;
| int8_t var_2h;
| int8_t var_1h;
| int32_t var_10h;
| int8_t var_fh_2;
| int8_t var_eh_2;
| int8_t var_dh_2;
| int8_t var_ch_2;
| int8_t var_bh_2;
| int8_t var_ah_2;
| int8_t var_9h_2;
| int8_t var_8h_2;
| int8_t var_7h_2;
| int8_t var_6h_2;
| int8_t var_5h_2;
| int8_t var_4h_2;
| int8_t var_3h_2;
| int8_t var_2h_2;
| int8_t var_1h_2;
| int32_t var_20h;
| int8_t var_fh_3;
| int8_t var_eh_3;
| int8_t var_dh_3;
| int8_t var_ch_3;
| int8_t var_bh_3;
| int8_t var_ah_3;
| int8_t var_9h_3;
| int8_t var_8h_3;
| int8_t var_7h_3;
| int8_t var_6h_3;
| int8_t var_5h_3;
| int8_t var_4h_3;
| int8_t var_3h_3;
| int8_t var_2h_3;
| int8_t var_1h_3;
| int32_t var_30h;
| int8_t var_fh_4;
| int8_t var_eh_4;
| int8_t var_dh_4;
| int32_t var_34h;
| int8_t var_bh_4;
| int8_t var_ah_4;
| int8_t var_9h_4;
| int32_t var_38h;
| int8_t var_7h_4;
| int8_t var_6h_4;
| int8_t var_5h_4;
| int32_t var_3ch;
| int8_t var_3h_4;
| int8_t var_2h_4;
| int8_t var_1h_4;
| int32_t var_0h_2;
| int32_t var_60h;
| int32_t var_64h;
| int32_t var_68h;
| int32_t var_6ch;
| int32_t var_70h;
| int32_t var_74h;
| int32_t var_78h;
| int32_t var_7ch;
| int32_t var_80h;
| int32_t var_84h;
| int32_t var_88h;
| int32_t var_8ch;
| r0 = arg1;
| r1 = arg2;
0x0008f160 stmdalt fp, {r6, r8, sb, sl, fp, ip, lr, pc} | __asm ("stmdalt fp, {r6, r8, sb, sl, fp, ip, lr, pc}");
0x0008f164 invalid |
0x0008f168 invalid |
0x0008f16c strtls r6, [r0], -0x55b | __asm ("strtls r6, [r0], -aav.0x000000ff");
0x0008f170 invalid |
| if (? != ?) {
0x0008f174 andeq r0, r0, r1 | r0 &= r1;
| }
0x0008f178 invalid |
0x0008f17c cdp2 p15, 0xf, c15, c15, c15, 6 | __asm ("cdp2 p15, 0xf, c15, c15, c15, 6");
0x0008f180 ldmdalt r7, {r1, r2, r5, r6, r8, pc} | __asm ("ldmdalt r7, {r1, r2, r5, r6, r8, pc}");
0x0008f184 invalid |
0x0008f188 invalid |
0x0008f18c invalid |
| if (? != ?) {
0x0008f190 andeq r0, r0, r0 | r0 &= r0;
| }
0x0008f194 invalid |
0x0008f198 invalid |
0x0008f19c invalid |
0x0008f1a0 b 0x8f1c0 | goto label_1;
| label_0:
0x0008f1b0 ldm sp, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb} | r0 = *(sp);
| r1 = *((sp + 4));
| r2 = *((sp + 8));
| r3 = *((sp + 12));
| r4 = *((sp + 16));
| r5 = *((sp + 20));
| r6 = *((sp + 24));
| r7 = *((sp + 28));
| r8 = *((sp + 32));
| sb = *((sp + 36));
0x0008f1b4 str fp, [sp, 0x88] | var_88h = fp;
0x0008f1b8 str ip, [sp, 0x84] | var_84h = ip;
0x0008f1bc str lr, [sp, 0x80] | var_80h = lr;
| label_1:
0x0008f1c0 ldr fp, [sp, 0x3c] | fp = var_3ch;
0x0008f1c4 ldr ip, [sp, 0x30] | ip = var_30h;
0x0008f1c8 ldr sl, [sp, 0x34] | sl = var_34h;
0x0008f1cc ldr lr, [sp, 0x38] | lr = var_38h;
0x0008f1d0 str fp, [sp, 0x7c] | var_7ch = fp;
0x0008f1d4 mov fp, 0xa |
0x0008f1d8 b 0x8f1e0 |
| while (fp != fp) {
0x0008f1e0 subs fp, fp, 1 |
0x0008f1e4 add r0, r0, r4 | r0 += r4;
0x0008f1e8 ror ip, ip, 0x10 | ip = rotate_right32 (ip, 16);
0x0008f1ec add r1, r1, r5 | r1 += r5;
0x0008f1f0 ror sl, sl, 0x10 | sl = rotate_right32 (sl, 16);
0x0008f1f4 eor ip, ip, r0, ror 16 |
0x0008f1f8 eor sl, sl, r1, ror 16 | sl ^= (r1 >>> 16);
0x0008f1fc add r8, r8, ip | r8 += ip;
0x0008f200 ror r4, r4, 0x14 | r4 = rotate_right32 (r4, 20);
0x0008f204 add sb, sb, sl | sb += sl;
0x0008f208 ror r5, r5, 0x14 | r5 = rotate_right32 (r5, 20);
0x0008f20c eor r4, r4, r8, ror 20 | r4 ^= (r8 >>> 20);
0x0008f210 eor r5, r5, sb, ror 20 | r5 ^= (sb >>> 20);
0x0008f214 add r0, r0, r4 | r0 += r4;
0x0008f218 ror ip, ip, 0x18 | ip = rotate_right32 (ip, 24);
0x0008f21c add r1, r1, r5 | r1 += r5;
0x0008f220 ror sl, sl, 0x18 | sl = rotate_right32 (sl, 24);
0x0008f224 eor ip, ip, r0, ror 24 |
0x0008f228 eor sl, sl, r1, ror 24 | sl ^= (r1 >>> 24);
0x0008f22c add r8, r8, ip | r8 += ip;
0x0008f230 ror r4, r4, 0x19 | r4 = rotate_right32 (r4, 25);
0x0008f234 add sb, sb, sl | sb += sl;
0x0008f238 ror r5, r5, 0x19 | r5 = rotate_right32 (r5, 25);
0x0008f23c str sl, [sp, 0x74] | var_74h = sl;
0x0008f240 ldr sl, [sp, 0x7c] | sl = var_7ch;
0x0008f244 eor r4, r4, r8, ror 25 | r4 ^= (r8 >>> 25);
0x0008f248 eor r5, r5, sb, ror 25 | r5 ^= (sb >>> 25);
0x0008f24c str r8, [sp, 0x60] | var_60h = r8;
0x0008f250 ldr r8, [sp, 0x68] | r8 = var_68h;
0x0008f254 add r2, r2, r6 | r2 += r6;
0x0008f258 ror lr, lr, 0x10 | lr = rotate_right32 (lr, 16);
0x0008f25c str sb, [sp, 0x64] | var_64h = sb;
0x0008f260 ldr sb, [sp, 0x6c] | sb = var_6ch;
0x0008f264 add r3, r3, r7 | r3 += r7;
0x0008f268 ror sl, sl, 0x10 | sl = rotate_right32 (sl, 16);
0x0008f26c eor lr, lr, r2, ror 16 | lr ^= (r2 >>> 16);
0x0008f270 eor sl, sl, r3, ror 16 | sl ^= (r3 >>> 16);
0x0008f274 add r8, r8, lr | r8 += lr;
0x0008f278 ror r6, r6, 0x14 | r6 = rotate_right32 (r6, 20);
0x0008f27c add sb, sb, sl | sb += sl;
0x0008f280 ror r7, r7, 0x14 | r7 = rotate_right32 (r7, 20);
0x0008f284 eor r6, r6, r8, ror 20 | r6 ^= (r8 >>> 20);
0x0008f288 eor r7, r7, sb, ror 20 | r7 ^= (sb >>> 20);
0x0008f28c add r2, r2, r6 | r2 += r6;
0x0008f290 ror lr, lr, 0x18 | lr = rotate_right32 (lr, 24);
0x0008f294 add r3, r3, r7 | r3 += r7;
0x0008f298 ror sl, sl, 0x18 | sl = rotate_right32 (sl, 24);
0x0008f29c eor lr, lr, r2, ror 24 | lr ^= (r2 >>> 24);
0x0008f2a0 eor sl, sl, r3, ror 24 | sl ^= (r3 >>> 24);
0x0008f2a4 add r8, r8, lr | r8 += lr;
0x0008f2a8 ror r6, r6, 0x19 | r6 = rotate_right32 (r6, 25);
0x0008f2ac add sb, sb, sl | sb += sl;
0x0008f2b0 ror r7, r7, 0x19 | r7 = rotate_right32 (r7, 25);
0x0008f2b4 eor r6, r6, r8, ror 25 | r6 ^= (r8 >>> 25);
0x0008f2b8 eor r7, r7, sb, ror 25 | r7 ^= (sb >>> 25);
0x0008f2bc add r0, r0, r5 | r0 += r5;
0x0008f2c0 ror sl, sl, 0x10 | sl = rotate_right32 (sl, 16);
0x0008f2c4 add r1, r1, r6 | r1 += r6;
0x0008f2c8 ror ip, ip, 0x10 | ip = rotate_right32 (ip, 16);
0x0008f2cc eor sl, sl, r0, ror 16 | sl ^= (r0 >>> 16);
0x0008f2d0 eor ip, ip, r1, ror 16 |
0x0008f2d4 add r8, r8, sl | r8 += sl;
0x0008f2d8 ror r5, r5, 0x14 | r5 = rotate_right32 (r5, 20);
0x0008f2dc add sb, sb, ip | sb += ip;
0x0008f2e0 ror r6, r6, 0x14 | r6 = rotate_right32 (r6, 20);
0x0008f2e4 eor r5, r5, r8, ror 20 | r5 ^= (r8 >>> 20);
0x0008f2e8 eor r6, r6, sb, ror 20 | r6 ^= (sb >>> 20);
0x0008f2ec add r0, r0, r5 | r0 += r5;
0x0008f2f0 ror sl, sl, 0x18 | sl = rotate_right32 (sl, 24);
0x0008f2f4 add r1, r1, r6 | r1 += r6;
0x0008f2f8 ror ip, ip, 0x18 | ip = rotate_right32 (ip, 24);
0x0008f2fc eor sl, sl, r0, ror 24 | sl ^= (r0 >>> 24);
0x0008f300 eor ip, ip, r1, ror 24 |
0x0008f304 add r8, r8, sl | r8 += sl;
0x0008f308 ror r5, r5, 0x19 | r5 = rotate_right32 (r5, 25);
0x0008f30c str sl, [sp, 0x7c] | var_7ch = sl;
0x0008f310 ldr sl, [sp, 0x74] | sl = var_74h;
0x0008f314 add sb, sb, ip | sb += ip;
0x0008f318 ror r6, r6, 0x19 | r6 = rotate_right32 (r6, 25);
0x0008f31c eor r5, r5, r8, ror 25 | r5 ^= (r8 >>> 25);
0x0008f320 eor r6, r6, sb, ror 25 | r6 ^= (sb >>> 25);
0x0008f324 str r8, [sp, 0x68] | var_68h = r8;
0x0008f328 ldr r8, [sp, 0x60] | r8 = var_60h;
0x0008f32c add r2, r2, r7 | r2 += r7;
0x0008f330 ror sl, sl, 0x10 | sl = rotate_right32 (sl, 16);
0x0008f334 str sb, [sp, 0x6c] | var_6ch = sb;
0x0008f338 ldr sb, [sp, 0x64] | sb = var_64h;
0x0008f33c add r3, r3, r4 | r3 += r4;
0x0008f340 ror lr, lr, 0x10 | lr = rotate_right32 (lr, 16);
0x0008f344 eor sl, sl, r2, ror 16 | sl ^= (r2 >>> 16);
0x0008f348 eor lr, lr, r3, ror 16 | lr ^= (r3 >>> 16);
0x0008f34c add r8, r8, sl | r8 += sl;
0x0008f350 ror r7, r7, 0x14 | r7 = rotate_right32 (r7, 20);
0x0008f354 add sb, sb, lr | sb += lr;
0x0008f358 ror r4, r4, 0x14 | r4 = rotate_right32 (r4, 20);
0x0008f35c eor r7, r7, r8, ror 20 | r7 ^= (r8 >>> 20);
0x0008f360 eor r4, r4, sb, ror 20 | r4 ^= (sb >>> 20);
0x0008f364 add r2, r2, r7 | r2 += r7;
0x0008f368 ror sl, sl, 0x18 | sl = rotate_right32 (sl, 24);
0x0008f36c add r3, r3, r4 | r3 += r4;
0x0008f370 ror lr, lr, 0x18 | lr = rotate_right32 (lr, 24);
0x0008f374 eor sl, sl, r2, ror 24 | sl ^= (r2 >>> 24);
0x0008f378 eor lr, lr, r3, ror 24 | lr ^= (r3 >>> 24);
0x0008f37c add r8, r8, sl | r8 += sl;
0x0008f380 ror r7, r7, 0x19 | r7 = rotate_right32 (r7, 25);
0x0008f384 add sb, sb, lr | sb += lr;
0x0008f388 ror r4, r4, 0x19 | r4 = rotate_right32 (r4, 25);
0x0008f38c eor r7, r7, r8, ror 25 | r7 ^= (r8 >>> 25);
0x0008f390 eor r4, r4, sb, ror 25 | r4 ^= (sb >>> 25);
0x0008f394 bne 0x8f1e0 |
| }
0x0008f398 ldr fp, [sp, 0x88] | fp = var_88h;
0x0008f39c str r8, [sp, 0x60] | var_60h = r8;
0x0008f3a0 str sb, [sp, 0x64] | var_64h = sb;
0x0008f3a4 str ip, [sp, 0x70] | var_70h = ip;
0x0008f3a8 str sl, [sp, 0x74] | var_74h = sl;
0x0008f3ac str lr, [sp, 0x78] | var_78h = lr;
0x0008f3b0 cmp fp, 0x40 |
| if (fp >= 0x40) {
0x0008f3b4 addlo ip, sp, 0 |
| }
| if (fp < 0x40) {
0x0008f3b8 ldrhs ip, [sp, 0x84] | ip = var_84h;
| }
| if (fp >= 0x40) {
0x0008f3bc addlo lr, sp, 0 | lr += var_0h;
| }
| if (fp < 0x40) {
0x0008f3c0 ldrhs lr, [sp, 0x80] | lr = var_80h;
| }
0x0008f3c4 ldr r8, [sp] | r8 = *(sp);
0x0008f3c8 ldr sb, [sp, 4] | sb = var_4h;
0x0008f3cc orr sl, ip, lr | sl = ip | lr;
0x0008f3d0 tst sl, 3 |
0x0008f3d4 ldr sl, [sp, 8] | sl = var_8h;
| if ((sl & 3) != 0) {
0x0008f3d8 bne 0x8f530 | goto label_2;
| }
0x0008f3dc cmp fp, 0x40 |
0x0008f3e0 ldr fp, [sp, 0xc] | fp = var_ch;
0x0008f3e4 add r0, r0, r8 | r0 += r8;
0x0008f3e8 add r1, r1, sb | r1 += sb;
| if (fp < 0x40) {
0x0008f3ec ldrhs r8, [ip], 0x10 | r8 = *(ip);
| ip += 0x10;
| }
| if (fp < 0x40) {
0x0008f3f0 ldrhs sb, [ip, -0xc] | sb = *((ip - 0xc));
| }
0x0008f3f4 add r2, r2, sl | r2 += sl;
0x0008f3f8 add r3, r3, fp | r3 += fp;
| if (fp < 0x40) {
0x0008f3fc ldrhs sl, [ip, -8] | sl = *((ip - 8));
| }
| if (fp < 0x40) {
0x0008f400 ldrhs fp, [ip, -4] | fp = *((ip - 4));
| }
| if (fp < 0x40) {
0x0008f404 eorhs r0, r0, r8 | r0 ^= r8;
| }
| if (fp < 0x40) {
0x0008f408 eorhs r1, r1, sb | r1 ^= sb;
| }
0x0008f40c add r8, sp, 0x10 | r8 += var_10h;
0x0008f410 str r0, [lr], 0x10 | *(lr) = r0;
| lr += 0x10;
| if (fp < 0x40) {
0x0008f414 eorhs r2, r2, sl | r2 ^= sl;
| }
| if (fp < 0x40) {
0x0008f418 eorhs r3, r3, fp | r3 ^= fp;
| }
0x0008f41c ldm r8, {r8, sb, sl, fp} | r8 = *(r8);
| sb = *((r8 + 4));
| sl = *((r8 + 8));
| fp = *((r8 + 12));
0x0008f420 str r1, [lr, -0xc] | var_4h = r1;
0x0008f424 str r2, [lr, -8] | var_8h = r2;
0x0008f428 str r3, [lr, -4] | var_ch = r3;
0x0008f42c add r4, r4, r8 | r4 += r8;
0x0008f430 add r5, r5, sb | r5 += sb;
| if (fp < 0x40) {
0x0008f434 ldrhs r8, [ip], 0x10 | r8 = *(ip);
| ip += 0x10;
| }
| if (fp < 0x40) {
0x0008f438 ldrhs sb, [ip, -0xc] | sb = *((ip - 0xc));
| }
0x0008f43c add r6, r6, sl | r6 += sl;
0x0008f440 add r7, r7, fp | r7 += fp;
| if (fp < 0x40) {
0x0008f444 ldrhs sl, [ip, -8] | sl = *((ip - 8));
| }
| if (fp < 0x40) {
0x0008f448 ldrhs fp, [ip, -4] | fp = *((ip - 4));
| }
| if (fp < 0x40) {
0x0008f44c eorhs r4, r4, r8 | r4 ^= r8;
| }
| if (fp < 0x40) {
0x0008f450 eorhs r5, r5, sb | r5 ^= sb;
| }
0x0008f454 add r8, sp, 0x20 | r8 += var_20h;
0x0008f458 str r4, [lr], 0x10 | *(lr) = r4;
| lr += 0x10;
| if (fp < 0x40) {
0x0008f45c eorhs r6, r6, sl | r6 ^= sl;
| }
| if (fp < 0x40) {
0x0008f460 eorhs r7, r7, fp | r7 ^= fp;
| }
0x0008f464 str r5, [lr, -0xc] | var_ch_2 = r5;
0x0008f468 ldm r8, {r8, sb, sl, fp} | r8 = *(r8);
| sb = *((r8 + 4));
| sl = *((r8 + 8));
| fp = *((r8 + 12));
0x0008f46c str r6, [lr, -8] | var_8h_2 = r6;
0x0008f470 add r0, sp, 0x60 | r0 += var_60h;
0x0008f474 str r7, [lr, -4] | var_4h_2 = r7;
0x0008f478 ldm r0, {r0, r1, r2, r3, r4, r5, r6, r7} | r0 = *(r0);
| r1 = *((r0 + 4));
| r2 = *((r0 + 8));
| r3 = *((r0 + 12));
| r4 = *((r0 + 16));
| r5 = *((r0 + 20));
| r6 = *((r0 + 24));
| r7 = *((r0 + 28));
0x0008f47c add r0, r0, r8 | r0 += r8;
0x0008f480 add r1, r1, sb | r1 += sb;
| if (fp < 0x40) {
0x0008f484 ldrhs r8, [ip], 0x10 | r8 = *(ip);
| ip += 0x10;
| }
| if (fp < 0x40) {
0x0008f488 ldrhs sb, [ip, -0xc] | sb = *((ip - 0xc));
| }
| if (fp <= 0x40) {
0x0008f48c strhi sl, [sp, 0x68] | var_68h = sl;
| }
| if (fp <= 0x40) {
0x0008f490 strhi fp, [sp, 0x6c] | var_6ch = fp;
| }
0x0008f494 add r2, r2, sl | r2 += sl;
0x0008f498 add r3, r3, fp | r3 += fp;
| if (fp < 0x40) {
0x0008f49c ldrhs sl, [ip, -8] | sl = *((ip - 8));
| }
| if (fp < 0x40) {
0x0008f4a0 ldrhs fp, [ip, -4] | fp = *((ip - 4));
| }
| if (fp < 0x40) {
0x0008f4a4 eorhs r0, r0, r8 | r0 ^= r8;
| }
| if (fp < 0x40) {
0x0008f4a8 eorhs r1, r1, sb | r1 ^= sb;
| }
0x0008f4ac add r8, sp, 0x30 | r8 += var_30h;
0x0008f4b0 str r0, [lr], 0x10 | *(lr) = r0;
| lr += 0x10;
| if (fp < 0x40) {
0x0008f4b4 eorhs r2, r2, sl | r2 ^= sl;
| }
| if (fp < 0x40) {
0x0008f4b8 eorhs r3, r3, fp | r3 ^= fp;
| }
0x0008f4bc str r1, [lr, -0xc] | var_ch_3 = r1;
0x0008f4c0 ldm r8, {r8, sb, sl, fp} | r8 = *(r8);
| sb = *((r8 + 4));
| sl = *((r8 + 8));
| fp = *((r8 + 12));
0x0008f4c4 str r2, [lr, -8] | var_8h_3 = r2;
0x0008f4c8 str r3, [lr, -4] | var_4h_3 = r3;
0x0008f4cc add r4, r4, r8 | r4 += r8;
0x0008f4d0 add r5, r5, sb | r5 += sb;
| if (fp <= 0x40) {
0x0008f4d4 addhi r8, r8, 1 | r8++;
| }
| if (fp <= 0x40) {
0x0008f4d8 strhi r8, [sp, 0x30] | var_30h = r8;
| }
| if (fp < 0x40) {
0x0008f4dc ldrhs r8, [ip], 0x10 | r8 = *(ip);
| ip += 0x10;
| }
| if (fp < 0x40) {
0x0008f4e0 ldrhs sb, [ip, -0xc] | sb = *((ip - 0xc));
| }
0x0008f4e4 add r6, r6, sl | r6 += sl;
0x0008f4e8 add r7, r7, fp | r7 += fp;
| if (fp < 0x40) {
0x0008f4ec ldrhs sl, [ip, -8] | sl = *((ip - 8));
| }
| if (fp < 0x40) {
0x0008f4f0 ldrhs fp, [ip, -4] | fp = *((ip - 4));
| }
| if (fp < 0x40) {
0x0008f4f4 eorhs r4, r4, r8 | r4 ^= r8;
| }
| if (fp < 0x40) {
0x0008f4f8 eorhs r5, r5, sb | r5 ^= sb;
| }
| if (fp == 0x40) {
0x0008f4fc ldrne r8, [sp, 0x88] | r8 = var_88h;
| }
| if (fp < 0x40) {
0x0008f500 eorhs r6, r6, sl | r6 ^= sl;
| }
| if (fp < 0x40) {
0x0008f504 eorhs r7, r7, fp | r7 ^= fp;
| }
0x0008f508 str r4, [lr], 0x10 | *(lr) = r4;
| lr += 0x10;
0x0008f50c str r5, [lr, -0xc] | var_34h = r5;
| if (fp < 0x40) {
0x0008f510 subhs fp, r8, 0x40 |
| }
0x0008f514 str r6, [lr, -8] | var_38h = r6;
0x0008f518 str r7, [lr, -4] | var_3ch = r7;
| if (fp > 0x40) {
0x0008f51c bhi 0x8f1b0 | goto label_0;
| }
| if (fp == 0x40) {
0x0008f520 beq 0x8f91c | goto label_3;
| }
0x0008f524 b 0x8f8f8 | goto label_4;
| label_2:
0x0008f530 cmp fp, 0x40 |
0x0008f534 ldr fp, [sp, 0xc] | fp = var_ch;
0x0008f538 add r0, r0, r8 | r0 += r8;
0x0008f53c add r1, r1, sb | r1 += sb;
0x0008f540 add r2, r2, sl | r2 += sl;
| if (fp >= 0x40) {
0x0008f544 eorlo r8, r8, r8 | r8 = 0;
| }
| if (fp < 0x40) {
0x0008f548 ldrbhs r8, [ip], 0x10 | r8 = *(ip);
| ip += 0x10;
| }
| if (fp >= 0x40) {
0x0008f54c eorlo sb, sb, sb | sb = 0;
| }
| if (fp < 0x40) {
0x0008f550 ldrbhs sb, [ip, -0xc] | sb = *((ip - 0xc));
| }
0x0008f554 add r3, r3, fp | r3 += fp;
| if (fp >= 0x40) {
0x0008f558 eorlo sl, sl, sl | sl = 0;
| }
| if (fp < 0x40) {
0x0008f55c ldrbhs sl, [ip, -8] | sl = *((ip - 8));
| }
| if (fp >= 0x40) {
0x0008f560 eorlo fp, fp, fp |
| }
| if (fp < 0x40) {
0x0008f564 ldrbhs fp, [ip, -4] | fp = *((ip - 4));
| }
0x0008f568 eor r0, r8, r0 | r0 = r8 ^ r0;
0x0008f56c eor r1, sb, r1 | r1 = sb ^ r1;
| if (fp < 0x40) {
0x0008f570 ldrbhs r8, [ip, -0xf] | r8 = *((ip - 0xf));
| }
| if (fp < 0x40) {
0x0008f574 ldrbhs sb, [ip, -0xb] | sb = *((ip - 0xb));
| }
0x0008f578 eor r2, sl, r2 | r2 = sl ^ r2;
0x0008f57c strb r0, [lr], 0x10 | *(lr) = r0;
| lr += 0x10;
0x0008f580 eor r3, fp, r3 | r3 = fp ^ r3;
| if (fp < 0x40) {
0x0008f584 ldrbhs sl, [ip, -7] | sl = *((ip - 7));
| }
| if (fp < 0x40) {
0x0008f588 ldrbhs fp, [ip, -3] | fp = *((ip - 3));
| }
0x0008f58c strb r1, [lr, -0xc] | var_4h = r1;
0x0008f590 eor r0, r8, r0, lsr 8 | r0 = r8 ^ (r0 >> 8);
0x0008f594 strb r2, [lr, -8] | var_8h = r2;
0x0008f598 eor r1, sb, r1, lsr 8 | r1 = sb ^ (r1 >> 8);
| if (fp < 0x40) {
0x0008f59c ldrbhs r8, [ip, -0xe] | r8 = *((ip - 0xe));
| }
| if (fp < 0x40) {
0x0008f5a0 ldrbhs sb, [ip, -0xa] | sb = *((ip - 0xa));
| }
0x0008f5a4 strb r3, [lr, -4] | var_ch = r3;
0x0008f5a8 eor r2, sl, r2, lsr 8 | r2 = sl ^ (r2 >> 8);
0x0008f5ac strb r0, [lr, -0xf] | var_fh = r0;
0x0008f5b0 eor r3, fp, r3, lsr 8 | r3 = fp ^ (r3 >> 8);
| if (fp < 0x40) {
0x0008f5b4 ldrbhs sl, [ip, -6] | sl = *((ip - 6));
| }
| if (fp < 0x40) {
0x0008f5b8 ldrbhs fp, [ip, -2] | fp = *((ip - 2));
| }
0x0008f5bc strb r1, [lr, -0xb] | var_bh = r1;
0x0008f5c0 eor r0, r8, r0, lsr 8 | r0 = r8 ^ (r0 >> 8);
0x0008f5c4 strb r2, [lr, -7] | var_7h = r2;
0x0008f5c8 eor r1, sb, r1, lsr 8 | r1 = sb ^ (r1 >> 8);
| if (fp < 0x40) {
0x0008f5cc ldrbhs r8, [ip, -0xd] | r8 = *((ip - 0xd));
| }
| if (fp < 0x40) {
0x0008f5d0 ldrbhs sb, [ip, -9] | sb = *((ip - 9));
| }
0x0008f5d4 strb r3, [lr, -3] | var_3h = r3;
0x0008f5d8 eor r2, sl, r2, lsr 8 | r2 = sl ^ (r2 >> 8);
0x0008f5dc strb r0, [lr, -0xe] | var_eh = r0;
0x0008f5e0 eor r3, fp, r3, lsr 8 | r3 = fp ^ (r3 >> 8);
| if (fp < 0x40) {
0x0008f5e4 ldrbhs sl, [ip, -5] | sl = *((ip - 5));
| }
| if (fp < 0x40) {
0x0008f5e8 ldrbhs fp, [ip, -1] | fp = *((ip - 1));
| }
0x0008f5ec strb r1, [lr, -0xa] | var_ah = r1;
0x0008f5f0 strb r2, [lr, -6] | var_6h = r2;
0x0008f5f4 eor r0, r8, r0, lsr 8 | r0 = r8 ^ (r0 >> 8);
0x0008f5f8 strb r3, [lr, -2] | var_2h = r3;
0x0008f5fc eor r1, sb, r1, lsr 8 | r1 = sb ^ (r1 >> 8);
0x0008f600 strb r0, [lr, -0xd] | var_dh = r0;
0x0008f604 eor r2, sl, r2, lsr 8 | r2 = sl ^ (r2 >> 8);
0x0008f608 strb r1, [lr, -9] | var_9h = r1;
0x0008f60c eor r3, fp, r3, lsr 8 | r3 = fp ^ (r3 >> 8);
0x0008f610 strb r2, [lr, -5] | var_5h = r2;
0x0008f614 strb r3, [lr, -1] | var_1h = r3;
0x0008f618 add r8, sp, 0x10 | r8 += var_10h;
0x0008f61c ldm r8, {r8, sb, sl, fp} | r8 = *(r8);
| sb = *((r8 + 4));
| sl = *((r8 + 8));
| fp = *((r8 + 12));
0x0008f620 add r0, sp, 0x60 | r0 += var_60h;
0x0008f624 add r4, r4, r8 | r4 += r8;
0x0008f628 add r5, r5, sb | r5 += sb;
0x0008f62c add r6, r6, sl | r6 += sl;
| if (fp >= 0x40) {
0x0008f630 eorlo r8, r8, r8 | r8 = 0;
| }
| if (fp < 0x40) {
0x0008f634 ldrbhs r8, [ip], 0x10 | r8 = *(ip);
| ip += 0x10;
| }
| if (fp >= 0x40) {
0x0008f638 eorlo sb, sb, sb | sb = 0;
| }
| if (fp < 0x40) {
0x0008f63c ldrbhs sb, [ip, -0xc] | sb = *((ip - 0xc));
| }
0x0008f640 add r7, r7, fp | r7 += fp;
| if (fp >= 0x40) {
0x0008f644 eorlo sl, sl, sl | sl = 0;
| }
| if (fp < 0x40) {
0x0008f648 ldrbhs sl, [ip, -8] | sl = *((ip - 8));
| }
| if (fp >= 0x40) {
0x0008f64c eorlo fp, fp, fp |
| }
| if (fp < 0x40) {
0x0008f650 ldrbhs fp, [ip, -4] | fp = *((ip - 4));
| }
0x0008f654 eor r4, r8, r4 | r4 = r8 ^ r4;
0x0008f658 eor r5, sb, r5 | r5 = sb ^ r5;
| if (fp < 0x40) {
0x0008f65c ldrbhs r8, [ip, -0xf] | r8 = *((ip - 0xf));
| }
| if (fp < 0x40) {
0x0008f660 ldrbhs sb, [ip, -0xb] | sb = *((ip - 0xb));
| }
0x0008f664 eor r6, sl, r6 | r6 = sl ^ r6;
0x0008f668 strb r4, [lr], 0x10 | *(lr) = r4;
| lr += 0x10;
0x0008f66c eor r7, fp, r7 | r7 = fp ^ r7;
| if (fp < 0x40) {
0x0008f670 ldrbhs sl, [ip, -7] | sl = *((ip - 7));
| }
| if (fp < 0x40) {
0x0008f674 ldrbhs fp, [ip, -3] | fp = *((ip - 3));
| }
0x0008f678 strb r5, [lr, -0xc] | var_ch_2 = r5;
0x0008f67c eor r4, r8, r4, lsr 8 | r4 = r8 ^ (r4 >> 8);
0x0008f680 strb r6, [lr, -8] | var_8h_2 = r6;
0x0008f684 eor r5, sb, r5, lsr 8 | r5 = sb ^ (r5 >> 8);
| if (fp < 0x40) {
0x0008f688 ldrbhs r8, [ip, -0xe] | r8 = *((ip - 0xe));
| }
| if (fp < 0x40) {
0x0008f68c ldrbhs sb, [ip, -0xa] | sb = *((ip - 0xa));
| }
0x0008f690 strb r7, [lr, -4] | var_4h_2 = r7;
0x0008f694 eor r6, sl, r6, lsr 8 | r6 = sl ^ (r6 >> 8);
0x0008f698 strb r4, [lr, -0xf] | var_fh_2 = r4;
0x0008f69c eor r7, fp, r7, lsr 8 | r7 = fp ^ (r7 >> 8);
| if (fp < 0x40) {
0x0008f6a0 ldrbhs sl, [ip, -6] | sl = *((ip - 6));
| }
| if (fp < 0x40) {
0x0008f6a4 ldrbhs fp, [ip, -2] | fp = *((ip - 2));
| }
0x0008f6a8 strb r5, [lr, -0xb] | var_bh_2 = r5;
0x0008f6ac eor r4, r8, r4, lsr 8 | r4 = r8 ^ (r4 >> 8);
0x0008f6b0 strb r6, [lr, -7] | var_7h_2 = r6;
0x0008f6b4 eor r5, sb, r5, lsr 8 | r5 = sb ^ (r5 >> 8);
| if (fp < 0x40) {
0x0008f6b8 ldrbhs r8, [ip, -0xd] | r8 = *((ip - 0xd));
| }
| if (fp < 0x40) {
0x0008f6bc ldrbhs sb, [ip, -9] | sb = *((ip - 9));
| }
0x0008f6c0 strb r7, [lr, -3] | var_3h_2 = r7;
0x0008f6c4 eor r6, sl, r6, lsr 8 | r6 = sl ^ (r6 >> 8);
0x0008f6c8 strb r4, [lr, -0xe] | var_eh_2 = r4;
0x0008f6cc eor r7, fp, r7, lsr 8 | r7 = fp ^ (r7 >> 8);
| if (fp < 0x40) {
0x0008f6d0 ldrbhs sl, [ip, -5] | sl = *((ip - 5));
| }
| if (fp < 0x40) {
0x0008f6d4 ldrbhs fp, [ip, -1] | fp = *((ip - 1));
| }
0x0008f6d8 strb r5, [lr, -0xa] | var_ah_2 = r5;
0x0008f6dc strb r6, [lr, -6] | var_6h_2 = r6;
0x0008f6e0 eor r4, r8, r4, lsr 8 | r4 = r8 ^ (r4 >> 8);
0x0008f6e4 strb r7, [lr, -2] | var_2h_2 = r7;
0x0008f6e8 eor r5, sb, r5, lsr 8 | r5 = sb ^ (r5 >> 8);
0x0008f6ec strb r4, [lr, -0xd] | var_dh_2 = r4;
0x0008f6f0 eor r6, sl, r6, lsr 8 | r6 = sl ^ (r6 >> 8);
0x0008f6f4 strb r5, [lr, -9] | var_9h_2 = r5;
0x0008f6f8 eor r7, fp, r7, lsr 8 | r7 = fp ^ (r7 >> 8);
0x0008f6fc strb r6, [lr, -5] | var_5h_2 = r6;
0x0008f700 strb r7, [lr, -1] | var_1h_2 = r7;
0x0008f704 add r8, sp, 0x20 | r8 += var_20h;
0x0008f708 ldm r8, {r8, sb, sl, fp} | r8 = *(r8);
| sb = *((r8 + 4));
| sl = *((r8 + 8));
| fp = *((r8 + 12));
0x0008f70c ldm r0, {r0, r1, r2, r3, r4, r5, r6, r7} | r0 = *(r0);
| r1 = *((r0 + 4));
| r2 = *((r0 + 8));
| r3 = *((r0 + 12));
| r4 = *((r0 + 16));
| r5 = *((r0 + 20));
| r6 = *((r0 + 24));
| r7 = *((r0 + 28));
| if (fp <= 0x40) {
0x0008f710 strhi sl, [sp, 0x68] | var_68h = sl;
| }
| if (fp <= 0x40) {
0x0008f714 strhi fp, [sp, 0x6c] | var_6ch = fp;
| }
0x0008f718 add r0, r0, r8 | r0 += r8;
0x0008f71c add r1, r1, sb | r1 += sb;
0x0008f720 add r2, r2, sl | r2 += sl;
| if (fp >= 0x40) {
0x0008f724 eorlo r8, r8, r8 | r8 = 0;
| }
| if (fp < 0x40) {
0x0008f728 ldrbhs r8, [ip], 0x10 | r8 = *(ip);
| ip += 0x10;
| }
| if (fp >= 0x40) {
0x0008f72c eorlo sb, sb, sb | sb = 0;
| }
| if (fp < 0x40) {
0x0008f730 ldrbhs sb, [ip, -0xc] | sb = *((ip - 0xc));
| }
0x0008f734 add r3, r3, fp | r3 += fp;
| if (fp >= 0x40) {
0x0008f738 eorlo sl, sl, sl | sl = 0;
| }
| if (fp < 0x40) {
0x0008f73c ldrbhs sl, [ip, -8] | sl = *((ip - 8));
| }
| if (fp >= 0x40) {
0x0008f740 eorlo fp, fp, fp |
| }
| if (fp < 0x40) {
0x0008f744 ldrbhs fp, [ip, -4] | fp = *((ip - 4));
| }
0x0008f748 eor r0, r8, r0 | r0 = r8 ^ r0;
0x0008f74c eor r1, sb, r1 | r1 = sb ^ r1;
| if (fp < 0x40) {
0x0008f750 ldrbhs r8, [ip, -0xf] | r8 = *((ip - 0xf));
| }
| if (fp < 0x40) {
0x0008f754 ldrbhs sb, [ip, -0xb] | sb = *((ip - 0xb));
| }
0x0008f758 eor r2, sl, r2 | r2 = sl ^ r2;
0x0008f75c strb r0, [lr], 0x10 | *(lr) = r0;
| lr += 0x10;
0x0008f760 eor r3, fp, r3 | r3 = fp ^ r3;
| if (fp < 0x40) {
0x0008f764 ldrbhs sl, [ip, -7] | sl = *((ip - 7));
| }
| if (fp < 0x40) {
0x0008f768 ldrbhs fp, [ip, -3] | fp = *((ip - 3));
| }
0x0008f76c strb r1, [lr, -0xc] | var_ch_3 = r1;
0x0008f770 eor r0, r8, r0, lsr 8 | r0 = r8 ^ (r0 >> 8);
0x0008f774 strb r2, [lr, -8] | var_8h_3 = r2;
0x0008f778 eor r1, sb, r1, lsr 8 | r1 = sb ^ (r1 >> 8);
| if (fp < 0x40) {
0x0008f77c ldrbhs r8, [ip, -0xe] | r8 = *((ip - 0xe));
| }
| if (fp < 0x40) {
0x0008f780 ldrbhs sb, [ip, -0xa] | sb = *((ip - 0xa));
| }
0x0008f784 strb r3, [lr, -4] | var_4h_3 = r3;
0x0008f788 eor r2, sl, r2, lsr 8 | r2 = sl ^ (r2 >> 8);
0x0008f78c strb r0, [lr, -0xf] | var_fh_3 = r0;
0x0008f790 eor r3, fp, r3, lsr 8 | r3 = fp ^ (r3 >> 8);
| if (fp < 0x40) {
0x0008f794 ldrbhs sl, [ip, -6] | sl = *((ip - 6));
| }
| if (fp < 0x40) {
0x0008f798 ldrbhs fp, [ip, -2] | fp = *((ip - 2));
| }
0x0008f79c strb r1, [lr, -0xb] | var_bh_3 = r1;
0x0008f7a0 eor r0, r8, r0, lsr 8 | r0 = r8 ^ (r0 >> 8);
0x0008f7a4 strb r2, [lr, -7] | var_7h_3 = r2;
0x0008f7a8 eor r1, sb, r1, lsr 8 | r1 = sb ^ (r1 >> 8);
| if (fp < 0x40) {
0x0008f7ac ldrbhs r8, [ip, -0xd] | r8 = *((ip - 0xd));
| }
| if (fp < 0x40) {
0x0008f7b0 ldrbhs sb, [ip, -9] | sb = *((ip - 9));
| }
0x0008f7b4 strb r3, [lr, -3] | var_3h_3 = r3;
0x0008f7b8 eor r2, sl, r2, lsr 8 | r2 = sl ^ (r2 >> 8);
0x0008f7bc strb r0, [lr, -0xe] | var_eh_3 = r0;
0x0008f7c0 eor r3, fp, r3, lsr 8 | r3 = fp ^ (r3 >> 8);
| if (fp < 0x40) {
0x0008f7c4 ldrbhs sl, [ip, -5] | sl = *((ip - 5));
| }
| if (fp < 0x40) {
0x0008f7c8 ldrbhs fp, [ip, -1] | fp = *((ip - 1));
| }
0x0008f7cc strb r1, [lr, -0xa] | var_ah_3 = r1;
0x0008f7d0 strb r2, [lr, -6] | var_6h_3 = r2;
0x0008f7d4 eor r0, r8, r0, lsr 8 | r0 = r8 ^ (r0 >> 8);
0x0008f7d8 strb r3, [lr, -2] | var_2h_3 = r3;
0x0008f7dc eor r1, sb, r1, lsr 8 | r1 = sb ^ (r1 >> 8);
0x0008f7e0 strb r0, [lr, -0xd] | var_dh_3 = r0;
0x0008f7e4 eor r2, sl, r2, lsr 8 | r2 = sl ^ (r2 >> 8);
0x0008f7e8 strb r1, [lr, -9] | var_9h_3 = r1;
0x0008f7ec eor r3, fp, r3, lsr 8 | r3 = fp ^ (r3 >> 8);
0x0008f7f0 strb r2, [lr, -5] | var_5h_3 = r2;
0x0008f7f4 strb r3, [lr, -1] | var_1h_3 = r3;
0x0008f7f8 add r8, sp, 0x30 | r8 += var_30h;
0x0008f7fc ldm r8, {r8, sb, sl, fp} | r8 = *(r8);
| sb = *((r8 + 4));
| sl = *((r8 + 8));
| fp = *((r8 + 12));
0x0008f800 add r4, r4, r8 | r4 += r8;
| if (fp <= 0x40) {
0x0008f804 addhi r8, r8, 1 | r8++;
| }
| if (fp <= 0x40) {
0x0008f808 strhi r8, [sp, 0x30] | var_30h = r8;
| }
0x0008f80c add r5, r5, sb | r5 += sb;
0x0008f810 add r6, r6, sl | r6 += sl;
| if (fp >= 0x40) {
0x0008f814 eorlo r8, r8, r8 | r8 = 0;
| }
| if (fp < 0x40) {
0x0008f818 ldrbhs r8, [ip], 0x10 | r8 = *(ip);
| ip += 0x10;
| }
| if (fp >= 0x40) {
0x0008f81c eorlo sb, sb, sb | sb = 0;
| }
| if (fp < 0x40) {
0x0008f820 ldrbhs sb, [ip, -0xc] | sb = *((ip - 0xc));
| }
0x0008f824 add r7, r7, fp | r7 += fp;
| if (fp >= 0x40) {
0x0008f828 eorlo sl, sl, sl | sl = 0;
| }
| if (fp < 0x40) {
0x0008f82c ldrbhs sl, [ip, -8] | sl = *((ip - 8));
| }
| if (fp >= 0x40) {
0x0008f830 eorlo fp, fp, fp |
| }
| if (fp < 0x40) {
0x0008f834 ldrbhs fp, [ip, -4] | fp = *((ip - 4));
| }
0x0008f838 eor r4, r8, r4 | r4 = r8 ^ r4;
0x0008f83c eor r5, sb, r5 | r5 = sb ^ r5;
| if (fp < 0x40) {
0x0008f840 ldrbhs r8, [ip, -0xf] | r8 = *((ip - 0xf));
| }
| if (fp < 0x40) {
0x0008f844 ldrbhs sb, [ip, -0xb] | sb = *((ip - 0xb));
| }
0x0008f848 eor r6, sl, r6 | r6 = sl ^ r6;
0x0008f84c strb r4, [lr], 0x10 | *(lr) = r4;
| lr += 0x10;
0x0008f850 eor r7, fp, r7 | r7 = fp ^ r7;
| if (fp < 0x40) {
0x0008f854 ldrbhs sl, [ip, -7] | sl = *((ip - 7));
| }
| if (fp < 0x40) {
0x0008f858 ldrbhs fp, [ip, -3] | fp = *((ip - 3));
| }
0x0008f85c strb r5, [lr, -0xc] | var_34h = r5;
0x0008f860 eor r4, r8, r4, lsr 8 | r4 = r8 ^ (r4 >> 8);
0x0008f864 strb r6, [lr, -8] | var_38h = r6;
0x0008f868 eor r5, sb, r5, lsr 8 | r5 = sb ^ (r5 >> 8);
| if (fp < 0x40) {
0x0008f86c ldrbhs r8, [ip, -0xe] | r8 = *((ip - 0xe));
| }
| if (fp < 0x40) {
0x0008f870 ldrbhs sb, [ip, -0xa] | sb = *((ip - 0xa));
| }
0x0008f874 strb r7, [lr, -4] | var_3ch = r7;
0x0008f878 eor r6, sl, r6, lsr 8 | r6 = sl ^ (r6 >> 8);
0x0008f87c strb r4, [lr, -0xf] | var_fh_4 = r4;
0x0008f880 eor r7, fp, r7, lsr 8 | r7 = fp ^ (r7 >> 8);
| if (fp < 0x40) {
0x0008f884 ldrbhs sl, [ip, -6] | sl = *((ip - 6));
| }
| if (fp < 0x40) {
0x0008f888 ldrbhs fp, [ip, -2] | fp = *((ip - 2));
| }
0x0008f88c strb r5, [lr, -0xb] | var_bh_4 = r5;
0x0008f890 eor r4, r8, r4, lsr 8 | r4 = r8 ^ (r4 >> 8);
0x0008f894 strb r6, [lr, -7] | var_7h_4 = r6;
0x0008f898 eor r5, sb, r5, lsr 8 | r5 = sb ^ (r5 >> 8);
| if (fp < 0x40) {
0x0008f89c ldrbhs r8, [ip, -0xd] | r8 = *((ip - 0xd));
| }
| if (fp < 0x40) {
0x0008f8a0 ldrbhs sb, [ip, -9] | sb = *((ip - 9));
| }
0x0008f8a4 strb r7, [lr, -3] | var_3h_4 = r7;
0x0008f8a8 eor r6, sl, r6, lsr 8 | r6 = sl ^ (r6 >> 8);
0x0008f8ac strb r4, [lr, -0xe] | var_eh_4 = r4;
0x0008f8b0 eor r7, fp, r7, lsr 8 | r7 = fp ^ (r7 >> 8);
| if (fp < 0x40) {
0x0008f8b4 ldrbhs sl, [ip, -5] | sl = *((ip - 5));
| }
| if (fp < 0x40) {
0x0008f8b8 ldrbhs fp, [ip, -1] | fp = *((ip - 1));
| }
0x0008f8bc strb r5, [lr, -0xa] | var_ah_4 = r5;
0x0008f8c0 strb r6, [lr, -6] | var_6h_4 = r6;
0x0008f8c4 eor r4, r8, r4, lsr 8 | r4 = r8 ^ (r4 >> 8);
0x0008f8c8 strb r7, [lr, -2] | var_2h_4 = r7;
0x0008f8cc eor r5, sb, r5, lsr 8 | r5 = sb ^ (r5 >> 8);
0x0008f8d0 strb r4, [lr, -0xd] | var_dh_4 = r4;
0x0008f8d4 eor r6, sl, r6, lsr 8 | r6 = sl ^ (r6 >> 8);
0x0008f8d8 strb r5, [lr, -9] | var_9h_4 = r5;
0x0008f8dc eor r7, fp, r7, lsr 8 | r7 = fp ^ (r7 >> 8);
0x0008f8e0 strb r6, [lr, -5] | var_5h_4 = r6;
0x0008f8e4 strb r7, [lr, -1] | var_1h_4 = r7;
| if (fp == 0x40) {
0x0008f8e8 ldrne r8, [sp, 0x88] | r8 = var_88h;
| }
| if (fp >= 0x40) {
0x0008f8ec subhs fp, r8, 0x40 | goto label_5;
| }
| if (fp > 0x40) {
| label_5:
0x0008f8f0 bhi 0x8f1b0 | goto label_0;
| }
| if (fp == 0x40) {
0x0008f8f4 beq 0x8f91c | goto label_3;
| }
| label_4:
0x0008f8f8 ldr ip, [sp, 0x84] | ip = var_84h;
0x0008f8fc add sb, sp, 0 | sb += var_0h;
0x0008f900 ldr lr, [sp, 0x80] | lr = var_80h;
| do {
0x0008f904 ldrb sl, [sb], 1 | sl = *(sb);
| sb++;
0x0008f908 ldrb fp, [ip], 1 | fp = *(ip);
| ip++;
0x0008f90c subs r8, r8, 1 | r8--;
0x0008f910 eor fp, fp, sl |
0x0008f914 strb fp, [lr], 1 | *(lr) = fp;
| lr++;
0x0008f918 bne 0x8f904 |
| } while (r8 != r8);
| label_3:
0x0008f91c add sp, sp, 0x8c |
0x0008f920 pop {r4, r5, r6, r7, r8, sb, sl, fp, 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 @ 0xaf5b0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000af5b0 () | void fcn_000af5b0 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000af5b0 ldr r2, [r1, 0x24] | r2 = *((r1 + 0x24));
0x000af5b4 ldr ip, [r1, 0x10] | ip = *((r1 + 0x10));
0x000af5b8 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000af5bc ldr sl, [r1] | sl = *(r1);
0x000af5c0 ldr sb, [r1, 4] | sb = *((r1 + 4));
0x000af5c4 ldr r8, [r1, 8] | r8 = *((r1 + 8));
0x000af5c8 ldr r7, [r1, 0xc] | r7 = *((r1 + 0xc));
0x000af5cc ldr r6, [r1, 0x14] | r6 = *((r1 + 0x14));
0x000af5d0 ldr r5, [r1, 0x18] | r5 = *((r1 + 0x18));
0x000af5d4 ldr r4, [r1, 0x1c] | r4 = *((r1 + 0x1c));
0x000af5d8 ldr lr, [r1, 0x20] |
0x000af5dc mov r1, 0x13 | r1 = 0x13;
0x000af5e0 mul r3, r1, r2 | r3 = r1 * r2;
0x000af5e4 add r3, r3, 0x1000000 | r3 += 0x1000000;
0x000af5e8 add r3, sl, r3, asr 25 | r3 = sl + (r3 >> 25);
0x000af5ec add r3, sb, r3, asr 26 | r3 = sb + (r3 >> 26);
0x000af5f0 add r3, r8, r3, asr 25 | r3 = r8 + (r3 >> 25);
0x000af5f4 add r3, r7, r3, asr 26 | r3 = r7 + (r3 >> 26);
0x000af5f8 add r3, ip, r3, asr 25 | r3 = ip + (r3 >> 25);
0x000af5fc add r3, r6, r3, asr 26 | r3 = r6 + (r3 >> 26);
0x000af600 add r3, r5, r3, asr 25 | r3 = r5 + (r3 >> 25);
0x000af604 add r3, r4, r3, asr 26 | r3 = r4 + (r3 >> 26);
0x000af608 add r3, lr, r3, asr 25 | r3 = lr + (r3 >> 25);
0x000af60c add r3, r2, r3, asr 26 | r3 = r2 + (r3 >> 26);
0x000af610 asr r3, r3, 0x19 | r3 >>= 0x19;
0x000af614 mla fp, r1, r3, sl | __asm ("mla fp, r1, r3, sl");
0x000af618 bic r3, fp, 0xfc000000 | r3 = BIT_MASK (fp, 0xfc000000);
0x000af61c asr r1, r3, 8 | r1 = r3 >> 8;
0x000af620 add sb, sb, fp, asr 26 | sb += (fp >> 26);
0x000af624 add r8, r8, sb, asr 25 | r8 += (sb >> 25);
0x000af628 strb r1, [r0, 1] | *((r0 + 1)) = r1;
0x000af62c bic sb, sb, 0xfe000000 | sb = BIT_MASK (sb, 0xfe000000);
0x000af630 asr r1, r3, 0x10 | r1 = r3 >> 0x10;
0x000af634 strb r1, [r0, 2] | *((r0 + 2)) = r1;
0x000af638 lsl r1, sb, 2 | r1 = sb << 2;
0x000af63c strb r3, [r0] | *(r0) = r3;
0x000af640 orr r3, r1, r3, lsr 24 | r3 = r1 | (r3 >> 24);
0x000af644 strb r3, [r0, 3] | *((r0 + 3)) = r3;
0x000af648 asr r3, sb, 6 | r3 = sb >> 6;
0x000af64c add r7, r7, r8, asr 26 | r7 += (r8 >> 26);
0x000af650 strb r3, [r0, 4] | *((r0 + 4)) = r3;
0x000af654 bic r8, r8, 0xfc000000 | r8 = BIT_MASK (r8, 0xfc000000);
0x000af658 asr r3, sb, 0xe | r3 = sb >> 0xe;
0x000af65c strb r3, [r0, 5] | *((r0 + 5)) = r3;
0x000af660 lsl r3, r8, 3 | r3 = r8 << 3;
0x000af664 orr sb, r3, sb, lsr 22 | sb = r3 | (sb >> 22);
0x000af668 asr r3, r8, 5 | r3 = r8 >> 5;
0x000af66c add ip, ip, r7, asr 25 |
0x000af670 strb r3, [r0, 7] | *((r0 + 7)) = r3;
0x000af674 bic r7, r7, 0xfe000000 | r7 = BIT_MASK (r7, 0xfe000000);
0x000af678 asr r3, r8, 0xd | r3 = r8 >> 0xd;
0x000af67c strb r3, [r0, 8] | *((r0 + 8)) = r3;
0x000af680 lsl r3, r7, 5 | r3 = r7 << 5;
0x000af684 orr r8, r3, r8, lsr 21 | r8 = r3 | (r8 >> 21);
0x000af688 asr r3, r7, 3 | r3 = r7 >> 3;
0x000af68c add r6, r6, ip, asr 26 | r6 += (ip >> 26);
0x000af690 strb r3, [r0, 0xa] | *((r0 + 0xa)) = r3;
0x000af694 bic ip, ip, 0xfc000000 | ip = BIT_MASK (ip, 0xfc000000);
0x000af698 asr r3, r7, 0xb | r3 = r7 >> 0xb;
0x000af69c strb r3, [r0, 0xb] | *((r0 + 0xb)) = r3;
0x000af6a0 lsl r3, ip, 6 | r3 = ip << 6;
0x000af6a4 orr r7, r3, r7, lsr 19 | r7 = r3 | (r7 >> 19);
0x000af6a8 asr r3, ip, 2 | r3 = ip >> 2;
0x000af6ac add r5, r5, r6, asr 25 | r5 += (r6 >> 25);
0x000af6b0 strb r3, [r0, 0xd] | *((r0 + 0xd)) = r3;
0x000af6b4 bic r6, r6, 0xfe000000 | r6 = BIT_MASK (r6, 0xfe000000);
0x000af6b8 asr r3, ip, 0xa | r3 = ip >> 0xa;
0x000af6bc strb r3, [r0, 0xe] | *((r0 + 0xe)) = r3;
0x000af6c0 asr r3, r6, 8 | r3 = r6 >> 8;
0x000af6c4 add r4, r4, r5, asr 26 | r4 += (r5 >> 26);
0x000af6c8 strb r3, [r0, 0x11] | *((r0 + 0x11)) = r3;
0x000af6cc bic r5, r5, 0xfc000000 | r5 = BIT_MASK (r5, 0xfc000000);
0x000af6d0 asr r3, r6, 0x10 | r3 = r6 >> 0x10;
0x000af6d4 strb r3, [r0, 0x12] | *((r0 + 0x12)) = r3;
0x000af6d8 lsl r3, r5, 1 | r3 = r5 << 1;
0x000af6dc strb r6, [r0, 0x10] | *((r0 + 0x10)) = r6;
0x000af6e0 orr r6, r3, r6, lsr 24 | r6 = r3 | (r6 >> 24);
0x000af6e4 asr r3, r5, 7 | r3 = r5 >> 7;
0x000af6e8 add lr, lr, r4, asr 25 | lr += (r4 >> 25);
0x000af6ec strb r3, [r0, 0x14] | *((r0 + 0x14)) = r3;
0x000af6f0 bic r4, r4, 0xfe000000 | r4 = BIT_MASK (r4, 0xfe000000);
0x000af6f4 asr r3, r5, 0xf | r3 = r5 >> 0xf;
0x000af6f8 asr ip, ip, 0x12 |
0x000af6fc strb sb, [r0, 6] | *((r0 + 6)) = sb;
0x000af700 strb r8, [r0, 9] | *((r0 + 9)) = r8;
0x000af704 strb r7, [r0, 0xc] | *((r0 + 0xc)) = r7;
0x000af708 strb ip, [r0, 0xf] | *((r0 + 0xf)) = ip;
0x000af70c strb r6, [r0, 0x13] | *((r0 + 0x13)) = r6;
0x000af710 strb r3, [r0, 0x15] | *((r0 + 0x15)) = r3;
0x000af714 lsl r3, r4, 3 | r3 = r4 << 3;
0x000af718 orr r5, r3, r5, lsr 23 | r5 = r3 | (r5 >> 23);
0x000af71c asr r3, r4, 5 | r3 = r4 >> 5;
0x000af720 add r2, r2, lr, asr 26 | r2 += (lr >> 26);
0x000af724 strb r3, [r0, 0x17] | *((r0 + 0x17)) = r3;
0x000af728 bic lr, lr, 0xfc000000 | lr = BIT_MASK (lr, 0xfc000000);
0x000af72c asr r3, r4, 0xd | r3 = r4 >> 0xd;
0x000af730 strb r3, [r0, 0x18] | *((r0 + 0x18)) = r3;
0x000af734 lsl r3, lr, 4 | r3 = lr << 4;
0x000af738 orr r4, r3, r4, lsr 21 | r4 = r3 | (r4 >> 21);
0x000af73c asr r3, lr, 4 | r3 = lr >> 4;
0x000af740 bic r2, r2, 0xfe000000 | r2 = BIT_MASK (r2, 0xfe000000);
0x000af744 strb r3, [r0, 0x1a] | *((r0 + 0x1a)) = r3;
0x000af748 asr r3, lr, 0xc | r3 = lr >> 0xc;
0x000af74c strb r3, [r0, 0x1b] | *((r0 + 0x1b)) = r3;
0x000af750 lsl r3, r2, 6 | r3 = r2 << 6;
0x000af754 orr lr, r3, lr, lsr 20 | lr = r3 | (lr >> 20);
0x000af758 asr r3, r2, 2 | r3 = r2 >> 2;
0x000af75c strb r3, [r0, 0x1d] | *((r0 + 0x1d)) = r3;
0x000af760 asr r3, r2, 0xa | r3 = r2 >> 0xa;
0x000af764 asr r2, r2, 0x12 | r2 >>= 0x12;
0x000af768 strb r5, [r0, 0x16] | *((r0 + 0x16)) = r5;
0x000af76c strb r4, [r0, 0x19] | *((r0 + 0x19)) = r4;
0x000af770 strb lr, [r0, 0x1c] |
0x000af774 strb r3, [r0, 0x1e] | *((r0 + 0x1e)) = r3;
0x000af778 strb r2, [r0, 0x1f] | *((r0 + 0x1f)) = r2;
0x000af77c pop {r4, r5, r6, r7, r8, sb, sl, fp, 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 @ 0x164a70 */
| #include <stdint.h>
|
; (fcn) sym.X509_LOOKUP_by_subject () | void X509_LOOKUP_by_subject (int32_t arg1) {
| r0 = arg1;
0x00164a70 str lr, [sp, -4]! |
0x00164a74 ldr lr, [r0, 8] |
0x00164a78 cmp lr, 0 |
| if (lr != 0) {
0x00164a7c beq 0x164aa4 |
0x00164a80 ldr lr, [lr, 0x18] |
0x00164a84 cmp lr, 0 |
| if (lr == 0) {
0x00164a88 beq 0x164aa4 | goto label_0;
| }
0x00164a8c ldr ip, [r0, 4] | ip = *((r0 + 4));
0x00164a90 cmp ip, 0 |
| if (ip != 0) {
0x00164a94 bne 0x164aa4 | goto label_0;
| }
0x00164a98 mov ip, lr |
0x00164a9c pop {lr} |
0x00164aa0 bx ip | return void (*ip)() ();
| }
| label_0:
0x00164aa4 mov r0, 0 | r0 = 0;
0x00164aa8 pop {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 @ 0x16fd84 */
| #include <stdint.h>
|
; (fcn) sym.X509_PUBKEY_set () | void X509_PUBKEY_set (uint32_t arg1, int32_t arg2) {
| int32_t var_0h;
| r0 = arg1;
| r1 = arg2;
0x0016fd84 push {r0, r1, r4, r5, r6, lr} |
0x0016fd88 cmp r0, 0 |
| if (r0 == 0) {
0x0016fd8c beq 0x16fe48 | goto label_1;
| }
0x0016fd90 mov r4, r0 | r4 = r0;
0x0016fd94 mov r5, r1 | r5 = r1;
0x0016fd98 bl 0x16fd2c | r0 = X509_PUBKEY_new ();
0x0016fd9c subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 == r0) {
0x0016fda0 beq 0x16fdec | goto label_2;
| }
0x0016fda4 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0016fda8 cmp r3, 0 |
| if (r3 == 0) {
0x0016fdac beq 0x16fe14 | goto label_3;
| }
0x0016fdb0 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0016fdb4 cmp r3, 0 |
| if (r3 == 0) {
0x0016fdb8 beq 0x16fdfc | goto label_4;
| }
0x0016fdbc mov r1, r5 | r1 = r5;
0x0016fdc0 blx r3 | r0 = uint32_t (*r3)(uint32_t) (r1);
0x0016fdc4 cmp r0, 0 |
| if (r0 != 0) {
0x0016fdc8 bne 0x16fe2c | goto label_5;
| }
0x0016fdcc mov r3, 0x4a | r3 = 0x4a;
0x0016fdd0 str r3, [sp] | *(sp) = r3;
0x0016fdd4 ldr r3, [pc, 0x74] | r3 = *(0x16fe4c);
0x0016fdd8 mov r2, 0x7e | r2 = 0x7e;
0x0016fddc add r3, pc, r3 | r3 = pc + r3;
| do {
| label_0:
0x0016fde0 mov r1, 0x78 | r1 = 0x78;
0x0016fde4 mov r0, 0xb | r0 = 0xb;
0x0016fde8 bl 0xfc7b8 | ERR_put_error ();
| label_2:
0x0016fdec mov r0, r6 | r0 = r6;
0x0016fdf0 bl 0x16fd58 | X509_PUBKEY_free ();
0x0016fdf4 mov r0, 0 | r0 = 0;
0x0016fdf8 b 0x16fe48 | goto label_1;
| label_4:
0x0016fdfc mov r3, 0x4e | r3 = 0x4e;
0x0016fe00 str r3, [sp] | *(sp) = r3;
0x0016fe04 ldr r3, [pc, 0x48] | r3 = *(0x16fe50);
0x0016fe08 mov r2, 0x7c | r2 = 0x7c;
0x0016fe0c add r3, pc, r3 | r3 = pc + r3;
0x0016fe10 b 0x16fde0 |
| } while (1);
| label_3:
0x0016fe14 mov r3, 0x52 | r3 = 0x52;
0x0016fe18 str r3, [sp] | *(sp) = r3;
0x0016fe1c ldr r3, [pc, 0x34] | r3 = *(0x16fe54);
0x0016fe20 mov r2, 0x6f | r2 = 0x6f;
0x0016fe24 add r3, pc, r3 | r3 = pc + r3;
0x0016fe28 b 0x16fde0 | goto label_0;
| label_5:
0x0016fe2c ldr r0, [r4] | r0 = *(r4);
0x0016fe30 bl 0x16fd58 | X509_PUBKEY_free ();
0x0016fe34 str r6, [r4] | *(r4) = r6;
0x0016fe38 mov r0, r5 | r0 = r5;
0x0016fe3c str r5, [r6, 8] | *((r6 + 8)) = r5;
0x0016fe40 bl 0x10dd94 | EVP_PKEY_up_ref ();
0x0016fe44 mov r0, 1 | r0 = 1;
| label_1:
0x0016fe48 add sp, sp, 8 |
0x0016fe4c pop {r4, r5, r6, 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 @ 0x17026c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.X509_PUBKEY_set0_param () | void X509_PUBKEY_set0_param (int32_t arg_10h, int32_t arg_14h, int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0017026c push {r4, r5, r6, lr} |
0x00170270 ldr r5, [sp, 0x10] | r5 = *(arg_10h);
0x00170274 mov r4, r0 | r4 = r0;
0x00170278 ldr r0, [r0] | r0 = *(r0);
0x0017027c bl 0x66628 | r0 = X509_ALGOR_set0 ();
0x00170280 cmp r0, 0 |
0x00170284 popeq {r4, r5, r6, pc} |
0x00170288 cmp r5, 0 |
| if (r5 != 0) {
0x0017028c beq 0x1702c8 |
0x00170290 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00170294 ldr r1, [pc, 0x34] | r1 = *(0x1702cc);
0x00170298 ldr r2, [pc, 0x34] | r2 = *(0x1702d0);
0x0017029c ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x001702a0 add r1, pc, r1 | r1 = pc + r1;
0x001702a4 bl 0x11842c | CRYPTO_free ();
0x001702a8 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x001702ac ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x001702b0 str r5, [r2, 8] | *((r2 + 8)) = r5;
0x001702b4 str r3, [r2] | *(r2) = r3;
0x001702b8 ldr r3, [r2, 0xc] | r3 = *(0x1702dc);
0x001702bc bic r3, r3, 0xf | r3 = BIT_MASK (r3, 0xf);
0x001702c0 orr r3, r3, 8 | r3 |= 8;
0x001702c4 str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
| }
0x001702c8 mov r0, 1 | r0 = 1;
0x001702cc pop {r4, r5, r6, pc} |
| }
[*] Function system used 1 times libcrypto.so.1.1