[*] Binary protection state of libcertutil.so.1.0
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function printf tear down of libcertutil.so.1.0
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libcertutil.so.1.0 @ 0x1c3c */
| #include <stdint.h>
|
; (fcn) fcn.00001c3c () | void fcn_00001c3c (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_f0h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00001c3c push {r4, r5, r6, r7, lr} |
0x00001c3e mov r7, r2 | r7 = r2;
0x00001c40 ldr r2, [pc, 0x6c] |
0x00001c42 mov r6, r3 | r6 = r3;
0x00001c44 sub sp, 0x14 |
0x00001c46 movs r5, 0 | r5 = 0;
0x00001c48 ldr r3, [pc, 0x68] | r3 = *(0x1cb4);
0x00001c4a mov r4, r0 | r4 = r0;
0x00001c4c add r2, pc | r2 = 0x3900;
0x00001c4e ldr r3, [r2, r3] |
0x00001c50 ldr r3, [r3] | r3 = *(0x3900);
0x00001c52 str r3, [sp, 0xc] | var_ch = r3;
0x00001c54 mov.w r3, 0 | r3 = 0;
0x00001c58 str r5, [sp, 8] | var_8h = r5;
| if (r0 != 0) {
0x00001c5a cbz r0, 0x1c74 |
0x00001c5c mov r2, r6 | r2 = r6;
0x00001c5e mov r0, r1 | r0 = r1;
0x00001c60 add r3, sp, 8 | r3 += var_8h;
0x00001c62 mov r1, r7 | r1 = r7;
0x00001c64 blx 0x14bc | r0 = g_key_file_get_string ();
0x00001c68 mov r1, r0 | r1 = r0;
0x00001c6a mov r0, r4 | r0 = r4;
0x00001c6c blx 0x1570 | g_ptr_array_add ();
0x00001c70 ldr r2, [sp, 8] | r2 = var_8h;
| if (r2 != 0) {
0x00001c72 cbnz r2, 0x1c8e | goto label_0;
| }
| }
0x00001c74 movs r0, 0 | r0 = 0;
| do {
0x00001c76 ldr r2, [pc, 0x40] |
0x00001c78 ldr r3, [pc, 0x38] | r3 = *(0x1cb4);
0x00001c7a add r2, pc | r2 = 0x3938;
0x00001c7c ldr r3, [r2, r3] | r3 = *(0x3938);
0x00001c7e ldr r2, [r3] | r2 = *(0x3938);
0x00001c80 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00001c82 eors r2, r3 | r2 ^= r3;
0x00001c84 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00001c88 bne 0x1cac | goto label_1;
| }
0x00001c8a add sp, 0x14 |
0x00001c8c pop {r4, r5, r6, r7, pc} |
| label_0:
0x00001c8e ldrd r3, r0, [r2, 4] | __asm ("ldrd r3, r0, [r2, 4]");
0x00001c92 mov r1, r6 | r1 = r6;
0x00001c94 mov r2, r7 | r2 = r7;
0x00001c96 str r0, [sp] | *(sp) = r0;
0x00001c98 ldr r0, [pc, 0x20] |
0x00001c9a add r0, pc | r0 = 0x395a;
0x00001c9c blx 0x1594 | r0 = g_strdup_printf ()
0x00001ca0 mov r1, r0 | r1 = r0;
0x00001ca2 movs r0, 1 | r0 = 1;
0x00001ca4 blx 0x14d4 | fcn_000014d4 ();
0x00001ca8 movs r0, 1 | r0 = 1;
0x00001caa b 0x1c76 |
| } while (1);
| label_1:
0x00001cac blx 0x1670 | fcn_00001670 ();
0x00001cb0 adds r2, 0x94 | r2 += 0x94;
0x00001cb2 movs r1, r0 | r1 = r0;
0x00001cb4 lsls r4, r2, 4 | r4 = r2 << 4;
0x00001cb6 movs r0, r0 |
0x00001cb8 adds r2, 0x66 | r2 += 0x66;
0x00001cba movs r1, r0 | r1 = r0;
0x00001cbc subs r2, r0, r1 | r2 = r0 - r1;
0x00001cbe movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libcertutil.so.1.0 @ 0x2924 */
| #include <stdint.h>
|
; (fcn) fcn.00002924 () | void fcn_00002924 (int16_t arg1) {
| int16_t var_0h_2;
| int16_t var_8h_2;
| int16_t var_ch_3;
| int16_t var_4ch_2;
| r0 = arg1;
0x00002924 blmi 0xc951f0 | __asm ("blmi 0xc951f0");
0x00002928 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x0000292c mov r4, r0 | r4 = r0;
0x0000292e add r2, pc | r2 += pc;
0x00002930 sub sp, 0x54 |
0x00002932 add r5, sp, 0xc | r5 += var_ch_3;
0x00002934 movs r7, 0 | r7 = 0;
0x00002936 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00002938 ldr r3, [r3] | r3 = *(r3);
0x0000293a str r3, [sp, 0x4c] | var_4ch_2 = r3;
0x0000293c mov.w r3, 0 | r3 = 0;
0x00002940 blx 0x1700 | r0 = fcn_00001700 ();
0x00002944 mov r6, r0 | r6 = r0;
0x00002946 mov r0, r4 | r0 = r4;
0x00002948 blx 0x15d0 | strlen (r0);
0x0000294c add r3, sp, 8 | r3 += var_8h_2;
0x0000294e mov r1, r0 | r1 = r0;
0x00002950 mov r2, r5 | r2 = r5;
0x00002952 mov r0, r4 | r0 = r4;
0x00002954 strd r6, r7, [sp] | __asm ("strd r6, r7, [sp]");
0x00002958 blx 0x1610 | r0 = fcn_00001610 ();
0x0000295c cmp r0, 1 |
| if (r0 != 1) {
0x0000295e bne 0x29b6 | goto label_1;
| }
0x00002960 ldr r6, [sp, 8] | r6 = var_8h_2;
0x00002962 mov r4, r0 | r4 = r0;
0x00002964 lsls r7, r6, 1 | r7 = r6 << 1;
0x00002966 adds r0, r7, 1 | r0 = r7 + 1;
0x00002968 blx 0x154c | r0 = g_malloc ();
0x0000296c mov r8, r0 | r8 = r0;
| if (r0 == 0) {
0x0000296e cbz r0, 0x29d8 | goto label_2;
| }
0x00002970 mov r4, r0 | r4 = r0;
| if (r6 == 0) {
0x00002972 cbz r6, 0x2996 | goto label_3;
| }
0x00002974 ldr.w sb, [pc, 0x7c] |
0x00002978 add r7, r0 | r7 += r0;
0x0000297a add sb, pc | sb = 0x5372;
| do {
0x0000297c ldrb r6, [r5], 1 | r6 = *(r5);
| r5++;
0x00002980 mov r0, r4 | r0 = r4;
0x00002982 mov r3, sb | r3 = sb;
0x00002984 mov.w r2, -1 | r2 = -1;
0x00002988 movs r1, 1 | r1 = 1;
0x0000298a adds r4, 2 | r4 += 2;
0x0000298c str r6, [sp] | *(sp) = r6;
0x0000298e blx 0x170c | fcn_0000170c ();
0x00002992 cmp r4, r7 |
0x00002994 bne 0x297c |
| } while (r4 != r7);
| label_3:
0x00002996 movs r3, 0 | r3 = 0;
0x00002998 strb r3, [r4] | *(r4) = r3;
| do {
| label_0:
0x0000299a ldr r2, [pc, 0x5c] |
0x0000299c ldr r3, [pc, 0x50] | r3 = *(0x29f0);
0x0000299e add r2, pc | r2 = 0x539c;
0x000029a0 ldr r3, [r2, r3] | r3 = *(0x539c);
0x000029a2 ldr r2, [r3] | r2 = *(0x539c);
0x000029a4 ldr r3, [sp, 0x4c] | r3 = var_4ch_2;
0x000029a6 eors r2, r3 | r2 ^= r3;
0x000029a8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000029ac bne 0x29d4 | goto label_4;
| }
0x000029ae mov r0, r8 | r0 = r8;
0x000029b0 add sp, 0x54 |
0x000029b2 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_1:
0x000029b6 blx 0x1498 | ERR_get_error ();
0x000029ba blx 0x1480 | r0 = ERR_reason_error_string ();
0x000029be mov r1, r0 | r1 = r0;
0x000029c0 ldr r0, [pc, 0x38] |
0x000029c2 mov r8, r7 | r8 = r7;
0x000029c4 add r0, pc | r0 = 0x53c4;
0x000029c6 blx 0x1594 | r0 = g_strdup_printf ()
0x000029ca mov r1, r0 | r1 = r0;
0x000029cc movs r0, 1 | r0 = 1;
0x000029ce blx 0x14d4 | fcn_000014d4 ();
0x000029d2 b 0x299a |
| } while (1);
| label_4:
0x000029d4 blx 0x1670 | fcn_00001670 ();
| label_2:
0x000029d8 ldr r0, [pc, 0x24] |
0x000029da add r0, pc | r0 = 0x53de;
0x000029dc blx 0x1594 | r0 = g_strdup_printf ()
0x000029e0 mov r1, r0 | r1 = r0;
0x000029e2 mov r0, r4 | r0 = r4;
0x000029e4 blx 0x14d4 | fcn_000014d4 ();
0x000029e8 b 0x299a | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libcertutil.so.1.0 @ 0x2a1c */
| #include <stdint.h>
|
; (fcn) sym.cert_util_add_cert_to_cnf () | void cert_util_add_cert_to_cnf (int16_t arg1, int16_t arg2) {
| int16_t var_4h_2;
| int16_t var_ch_2;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x00002a1c ldr r2, [pc, 0x114] |
0x00002a1e ldr r3, [pc, 0x118] | r3 = *(0x2b3a);
0x00002a20 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00002a24 mov r4, r0 | r4 = r0;
0x00002a26 add r2, pc | r2 = 0x555e;
0x00002a28 sub sp, 0x10 |
0x00002a2a movs r6, 0 | r6 = 0;
0x00002a2c mov r5, r1 | r5 = r1;
0x00002a2e ldr r3, [r2, r3] |
0x00002a30 ldr r3, [r3] | r3 = *(0x555e);
0x00002a32 str r3, [sp, 0xc] | var_ch = r3;
0x00002a34 mov.w r3, 0 | r3 = 0;
0x00002a38 str r6, [sp, 4] | var_4h = r6;
0x00002a3a blx 0x157c | fcn_0000157c ();
0x00002a3e cmp r4, 0 |
| if (r4 == 0) {
0x00002a40 beq 0x2b06 | goto label_2;
| }
0x00002a42 cmp r5, 0 |
| if (r5 == 0) {
0x00002a44 beq 0x2b1a | goto label_3;
| }
0x00002a46 mov r8, r0 | r8 = r0;
0x00002a48 add.w sl, sp, 4 | sl += var_4h;
0x00002a4c blx 0x14f8 | g_key_file_new ();
0x00002a50 mov r3, sl | r3 = sl;
0x00002a52 mov r2, r6 | r2 = r6;
0x00002a54 mov r1, r8 | r1 = r8;
0x00002a56 mov sb, r0 | sb = r0;
0x00002a58 blx 0x1664 | fcn_00001664 ();
0x00002a5c ldr r7, [sp, 4] | r7 = var_4h;
| if (r7 == 0) {
0x00002a5e cbz r7, 0x2aba | goto label_4;
| }
0x00002a60 ldr r0, [pc, 0xd8] |
0x00002a62 mov r1, r8 | r1 = r8;
0x00002a64 ldrd r2, r3, [r7, 4] | __asm ("ldrd r2, r3, [r7, 4]");
0x00002a68 mov r4, r6 | r4 = r6;
0x00002a6a add r0, pc | r0 = 0x55aa;
0x00002a6c blx 0x1594 | r0 = g_strdup_printf ()
0x00002a70 mov r1, r0 | r1 = r0;
0x00002a72 movs r0, 1 | r0 = 1;
0x00002a74 mov r7, r0 | r7 = r0;
0x00002a76 blx 0x14d4 | fcn_000014d4 ();
| do {
| label_0:
0x00002a7a cmp.w sb, 0 |
| if (sb != 0) {
0x00002a7e beq 0x2a86 |
0x00002a80 mov r0, sb | r0 = sb;
0x00002a82 blx 0x16b8 | fcn_000016b8 ();
| }
0x00002a86 ldr r0, [sp, 4] | r0 = var_4h;
| if (r0 != 0) {
0x00002a88 cbz r0, 0x2a92 |
0x00002a8a blx 0x16dc | fcn_000016dc ();
0x00002a8e movs r3, 0 | r3 = 0;
0x00002a90 str r3, [sp, 4] | var_4h = r3;
| }
0x00002a92 mov r0, r4 | r0 = r4;
0x00002a94 blx 0x1468 | g_free ();
0x00002a98 mov r0, r6 | r0 = r6;
0x00002a9a blx 0x1468 | g_free ();
| label_1:
0x00002a9e ldr r2, [pc, 0xa0] |
0x00002aa0 ldr r3, [pc, 0x94] | r3 = *(0x2b38);
0x00002aa2 add r2, pc | r2 = 0x55e8;
0x00002aa4 ldr r3, [r2, r3] | r3 = *(0x55e8);
0x00002aa6 ldr r2, [r3] | r2 = *(0x55e8);
0x00002aa8 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00002aaa eors r2, r3 | r2 ^= r3;
0x00002aac mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00002ab0 bne 0x2b2e | goto label_5;
| }
0x00002ab2 mov r0, r7 | r0 = r7;
0x00002ab4 add sp, 0x10 |
0x00002ab6 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_4:
0x00002aba mov r0, r4 | r0 = r4;
0x00002abc blx 0x1534 | keyfile_encode ();
0x00002ac0 ldr r1, [pc, 0x80] |
0x00002ac2 mov r6, r0 | r6 = r0;
0x00002ac4 mov r3, r5 | r3 = r5;
0x00002ac6 mov r0, sb | r0 = sb;
0x00002ac8 mov r2, r6 | r2 = r6;
0x00002aca add r1, pc | r1 = 0x5612;
0x00002acc blx 0x1510 | g_key_file_set_string ();
0x00002ad0 mov r2, r7 | r2 = r7;
0x00002ad2 add r1, sp, 8 | r1 += var_8h;
0x00002ad4 mov r0, sb | r0 = sb;
0x00002ad6 blx 0x15dc | g_key_file_to_data ();
0x00002ada ldr r2, [sp, 8] | r2 = var_8h;
0x00002adc mov r4, r0 | r4 = r0;
0x00002ade mov r1, r0 | r1 = r0;
0x00002ae0 mov r3, sl | r3 = sl;
0x00002ae2 mov r0, r8 | r0 = r8;
0x00002ae4 blx 0x161c | r0 = fcn_0000161c ();
0x00002ae8 cmp r0, 0 |
0x00002aea bne 0x2a7a |
| } while (r0 != 0);
0x00002aec ldr r3, [sp, 4] | r3 = var_4h;
0x00002aee mov r1, r8 | r1 = r8;
0x00002af0 ldr r0, [pc, 0x54] |
0x00002af2 movs r7, 1 | r7 = 1;
0x00002af4 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00002af6 add r0, pc | r0 = 0x5642;
0x00002af8 blx 0x1594 | r0 = g_strdup_printf ()
0x00002afc mov r1, r0 | r1 = r0;
0x00002afe movs r0, 1 | r0 = 1;
0x00002b00 blx 0x14d4 | fcn_000014d4 ();
0x00002b04 b 0x2a7a | goto label_0;
| label_2:
0x00002b06 ldr r1, [pc, 0x44] |
0x00002b08 mov r0, r4 | r0 = r4;
0x00002b0a ldr r2, [pc, 0x44] |
0x00002b0c movs r7, 1 | r7 = 1;
0x00002b0e add r1, pc | r1 = 0x5660;
0x00002b10 add r2, pc | r2 = 0x5666;
0x00002b12 adds r1, 0xa8 | r1 += 0xa8;
0x00002b14 blx 0x15f8 | fcn_000015f8 ();
0x00002b16 ldcl p7, c14, [r0, -0x304]! | __asm ("ldcl p7, c14, [r0, -0x304]!");
| label_3:
0x00002b1a ldr r1, [pc, 0x38] |
0x00002b1c mov r0, r5 | r0 = r5;
0x00002b1e ldr r2, [pc, 0x38] |
0x00002b20 movs r7, 1 | r7 = 1;
0x00002b22 add r1, pc | r1 = 0x567c;
0x00002b24 add r2, pc | r2 = 0x5682;
0x00002b26 adds r1, 0xa8 | r1 += 0xa8;
0x00002b28 blx 0x15f8 | fcn_000015f8 ();
0x00002b2c b 0x2a9e | goto label_1;
| label_5:
0x00002b2e blx 0x1670 | fcn_00001670 ();
0x00002b32 nop |
0x00002b34 movs r4, 0xba | r4 = 0xba;
0x00002b36 movs r1, r0 | r1 = r0;
0x00002b38 lsls r4, r2, 4 | r4 = r2 << 4;
0x00002b3a movs r0, r0 |
0x00002b3c lsrs r6, r0, 0x13 | r6 = r0 >> 0x13;
0x00002b3e movs r0, r0 |
0x00002b40 movs r4, 0x3e | r4 = 0x3e;
0x00002b42 movs r1, r0 | r1 = r0;
0x00002b44 lsrs r6, r0, 0xe | r6 = r0 >> 0xe;
0x00002b46 movs r0, r0 |
0x00002b48 lsrs r2, r7, 0x14 | r2 = r7 >> 0x14;
0x00002b4a movs r0, r0 |
0x00002b4c asrs r6, r6, 3 | r6 >>= 3;
0x00002b4e movs r0, r0 |
0x00002b50 lsrs r4, r0, 0xc | r4 = r0 >> 0xc;
0x00002b52 movs r0, r0 |
0x00002b54 asrs r2, r4, 3 | r2 = r4 >> 3;
0x00002b56 movs r0, r0 |
0x00002b58 lsrs r4, r2, 0x17 | r4 = r2 >> 0x17;
0x00002b5a movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libcertutil.so.1.0 @ 0x2d70 */
| #include <stdint.h>
|
; (fcn) sym.cert_util_get_file_from_id () | void cert_util_get_file_from_id (uint32_t arg1) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
0x00002d70 blmi 0xb55628 | __asm ("blmi 0xb55628");
0x00002d74 push {r4, r5, r6, lr} |
0x00002d76 movs r6, 0 | r6 = 0;
0x00002d78 add r2, pc | r2 += pc;
0x00002d7a sub sp, 0x10 |
0x00002d7c mov r5, r0 | r5 = r0;
0x00002d7e ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00002d80 ldr r3, [r3] | r3 = *(r3);
0x00002d82 str r3, [sp, 0xc] | var_ch = r3;
0x00002d84 mov.w r3, 0 | r3 = 0;
0x00002d88 strd r6, r6, [sp, 4] | __asm ("strd r6, r6, [var_8h]");
0x00002d8c cmp r0, 0 |
| if (r0 == 0) {
0x00002d8e beq 0x2e0e | goto label_1;
| }
0x00002d90 add r1, sp, 8 | r1 += var_8h;
0x00002d92 add r0, sp, 4 | r0 += var_4h;
0x00002d94 blx 0x1604 | r0 = fcn_00001604 ();
0x00002d98 mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x00002d9a cbnz r0, 0x2dce | goto label_2;
| }
0x00002d9c ldr r3, [sp, 4] | r3 = var_4h;
0x00002d9e ldr r2, [r3, 4] | r2 = *((r3 + 4));
| if (r2 != 0) {
0x00002da0 cbnz r2, 0x2dae | goto label_3;
| }
0x00002da2 b 0x2df8 | goto label_4;
| do {
0x00002da4 ldr r3, [sp, 4] | r3 = var_4h;
0x00002da6 adds r4, 1 | r4++;
0x00002da8 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00002daa cmp r2, r4 |
| if (r2 < r4) {
0x00002dac bls 0x2df8 | goto label_4;
| }
| label_3:
0x00002dae ldr r3, [r3] | r3 = *(r3);
0x00002db0 mov r0, r5 | r0 = r5;
0x00002db2 lsls r6, r4, 2 | r6 = r4 << 2;
0x00002db4 ldr.w r1, [r3, r4, lsl 2] | offset_0 = r4 << 2;
| r1 = *((r3 + offset_0));
0x00002db8 blx 0x14ec | r0 = g_strcmp0 ();
0x00002dbc cmp r0, 0 |
0x00002dbe bne 0x2da4 |
| } while (r0 != 0);
0x00002dc0 ldr r3, [sp, 8] | r3 = var_8h;
0x00002dc2 ldr r3, [r3] | r3 = *(r3);
0x00002dc4 ldr r0, [r3, r6] | r0 = *((r3 + r6));
0x00002dc6 blx 0x1504 | r0 = g_strdup ();
0x00002dca mov r6, r0 | r6 = r0;
0x00002dcc cbz r0, 0x2df8 |
| while (1) {
| label_2:
0x00002dce ldr r0, [sp, 4] | r0 = var_4h;
0x00002dd0 blx 0x14b0 | r0 = fcn_000014b0 ();
0x00002dd4 mov r3, r0 | r3 = r0;
0x00002dd6 ldr r0, [sp, 8] | r0 = var_8h;
0x00002dd8 str r3, [sp, 4] | var_4h = r3;
0x00002dda blx 0x14b0 | fcn_000014b0 ();
| label_0:
0x00002dde ldr r2, [pc, 0x4c] |
0x00002de0 ldr r3, [pc, 0x44] | r3 = *(0x2e28);
0x00002de2 add r2, pc | r2 = 0x5c14;
0x00002de4 ldr r3, [r2, r3] | r3 = *(0x5c14);
0x00002de6 ldr r2, [r3] | r2 = *(0x5c14);
0x00002de8 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00002dea eors r2, r3 | r2 ^= r3;
0x00002dec mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00002df0 bne 0x2e20 | goto label_5;
| }
0x00002df2 mov r0, r6 | r0 = r6;
0x00002df4 add sp, 0x10 |
0x00002df6 pop {r4, r5, r6, pc} |
| label_4:
0x00002df8 ldr r0, [pc, 0x34] |
0x00002dfa mov r1, r5 | r1 = r5;
0x00002dfc movs r6, 0 | r6 = 0;
0x00002dfe add r0, pc | r0 = 0x5c32;
0x00002e00 blx 0x1594 | r0 = g_strdup_printf ()
0x00002e04 mov r1, r0 | r1 = r0;
0x00002e06 movs r0, 0xe | r0 = 0xe;
0x00002e08 blx 0x14d4 | fcn_000014d4 ();
0x00002e0c b 0x2dce |
| }
| label_1:
0x00002e0e ldr r1, [pc, 0x24] |
0x00002e10 mov r6, r0 | r6 = r0;
0x00002e12 ldr r2, [pc, 0x24] |
0x00002e14 add r1, pc | r1 = 0x5c4e;
0x00002e16 add r2, pc | r2 = 0x5c54;
0x00002e18 adds r1, 0xe4 | r1 += 0xe4;
0x00002e1a blx 0x15f8 | fcn_000015f8 ();
0x00002e1e b 0x2dde | goto label_0;
| label_5:
0x00002e20 blx 0x1670 | fcn_00001670 ();
0x00002e24 movs r1, 0x68 | r1 = 0x68;
0x00002e26 movs r1, r0 | r1 = r0;
0x00002e28 lsls r4, r2, 4 | r4 = r2 << 4;
0x00002e2a movs r0, r0 |
0x00002e2c movs r0, 0xfe | r0 = 0xfe;
0x00002e2e movs r1, r0 | r1 = r0;
0x00002e30 lsrs r2, r3, 0xe | r2 = r3 >> 0xe;
0x00002e32 movs r0, r0 |
0x00002e34 lsrs r0, r6, 0x17 | r0 = r6 >> 0x17;
0x00002e36 movs r0, r0 |
0x00002e38 lsls r6, r7, 0x1f | r6 = r7 << 0x1f;
0x00002e3a movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libcertutil.so.1.0 @ 0x1ac4 */
| #include <stdint.h>
|
; (fcn) sym.cert_util_get_ids_and_file_names () | void cert_util_get_ids_and_file_names (int16_t arg_140h, int16_t arg_144h, int16_t arg1, int16_t arg2) {
| int16_t var_8h_2;
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_74h;
| int16_t var_80h;
| int16_t var_c4h;
| int16_t var_f0h;
| int16_t var_f4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_100h;
| int16_t var_104h;
| int16_t var_108h;
| int16_t var_10ch;
| int16_t var_110h;
| int16_t var_114h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_120h;
| int16_t var_124h;
| int16_t var_128h;
| int16_t var_12ch;
| int16_t var_130h;
| int16_t var_134h;
| int16_t var_138h;
| int16_t var_13ch;
| r0 = arg1;
| r1 = arg2;
0x00001ac4 blmi 0x145440c | __asm ("blmi 0x145440c");
0x00001ac8 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00001acc mov r4, r0 | r4 = r0;
0x00001ace add r2, pc | r2 += pc;
0x00001ad0 sub sp, 8 |
0x00001ad2 mov.w r8, 0 | r8 = 0;
0x00001ad4 lsrs r0, r0, 0x20 | r0 >>= 0x20;
0x00001ad6 mov r5, r1 | r5 = r1;
0x00001ad8 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00001ada ldr r3, [r3] | r3 = *(r3);
0x00001adc str r3, [sp, 4] | var_4h = r3;
0x00001ade mov.w r3, 0 | r3 = 0;
0x00001ae2 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00001ae6 blx 0x157c | fcn_0000157c ();
0x00001aea cmp r4, 0 |
| if (r4 == 0) {
0x00001aec beq 0x1bc4 | goto label_4;
| }
0x00001aee cmp r5, 0 |
| if (r5 == 0) {
0x00001af0 beq 0x1bd8 | goto label_5;
| }
0x00001af2 mov r6, r0 | r6 = r0;
0x00001af4 mov sb, sp | sb = sp;
0x00001af6 blx 0x16f4 | fcn_000016f4 ();
0x00001afa str r0, [r4] | *(r4) = r0;
0x00001afc blx 0x16f4 | fcn_000016f4 ();
0x00001b00 str r0, [r5] | *(r5) = r0;
0x00001b02 blx 0x14f8 | g_key_file_new ();
0x00001b06 movs r2, 1 | r2 = 1;
0x00001b08 mov r3, sb | r3 = sb;
0x00001b0a mov r1, r6 | r1 = r6;
0x00001b0c mov r7, r0 | r7 = r0;
0x00001b0e blx 0x1664 | fcn_00001664 ();
0x00001b12 ldr r2, [sp] | r2 = *(sp);
| if (r2 != 0) {
0x00001b14 cbz r2, 0x1b5e |
0x00001b16 ldr r0, [pc, 0xf8] |
0x00001b18 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x00001b1a add r0, pc | r0 = 0x3730;
| label_1:
0x00001b1c mov r1, r6 | r1 = r6;
| label_3:
0x00001b1e blx 0x1594 | r0 = g_strdup_printf ()
0x00001b22 mov r1, r0 | r1 = r0;
0x00001b24 movs r0, 1 | r0 = 1;
0x00001b26 mov r4, r0 | r4 = r0;
0x00001b28 blx 0x14d4 | fcn_000014d4 ();
| label_2:
0x00001b2c mov r0, r8 | r0 = r8;
0x00001b2e blx 0x16e8 | fcn_000016e8 ();
| if (r7 != 0) {
0x00001b32 cbz r7, 0x1b3a |
0x00001b34 mov r0, r7 | r0 = r7;
0x00001b36 blx 0x16b8 | fcn_000016b8 ();
| }
0x00001b3a ldr r0, [sp] | r0 = *(sp);
| if (r0 != 0) {
0x00001b3c cbz r0, 0x1b42 |
0x00001b3e blx 0x16dc | fcn_000016dc ();
| }
| label_0:
0x00001b42 ldr r2, [pc, 0xd0] |
0x00001b44 ldr r3, [pc, 0xc4] | r3 = *(0x1c0c);
0x00001b46 add r2, pc | r2 = 0x3760;
0x00001b48 ldr r3, [r2, r3] | r3 = *(0x3760);
0x00001b4a ldr r2, [r3] | r2 = *(0x3760);
0x00001b4c ldr r3, [sp, 4] | r3 = var_4h;
0x00001b4e eors r2, r3 | r2 ^= r3;
0x00001b50 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00001b54 bne 0x1c02 | goto label_6;
| }
0x00001b56 mov r0, r4 | r0 = r4;
0x00001b58 add sp, 8 |
0x00001b5a pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
0x00001b5e ldr r1, [pc, 0xb8] |
0x00001b60 mov r3, sb | r3 = sb;
0x00001b62 mov r0, r7 | r0 = r7;
0x00001b64 add r1, pc | r1 = 0x3782;
0x00001b66 blx 0x148c | g_key_file_get_keys ();
0x00001b6a ldr r3, [sp] | r3 = *(sp);
0x00001b6c mov r8, r0 | r8 = r0;
0x00001b6e cmp r3, 0 |
| if (r3 != 0) {
0x00001b70 bne 0x1bec | goto label_7;
| }
0x00001b72 ldr r0, [r0] | r0 = *(r0);
0x00001b74 cmp r0, 0 |
| if (r0 == 0) {
0x00001b76 beq 0x1bf4 | goto label_8;
| }
0x00001b78 ldr.w sl, [pc, 0xa0] |
0x00001b7c mov r6, r8 | r6 = r8;
0x00001b7e add sl, pc | sl = 0x379e;
0x00001b80 b 0x1ba6 |
| while (r0 != 0) {
0x00001b82 ldr r0, [r4] | r0 = *(r4);
0x00001b84 blx 0x1570 | g_ptr_array_add ();
0x00001b86 ldcl p6, c4, [r4], 0x12c | __asm ("ldcl p6, c4, [r4], 0x12c");
0x00001b8a mov r1, sl | r1 = sl;
0x00001b8c ldr r2, [r6] | r2 = *(r6);
0x00001b8e mov r0, r7 | r0 = r7;
0x00001b90 blx 0x14bc | g_key_file_get_string ();
0x00001b94 ldr r3, [sp] | r3 = *(sp);
0x00001b96 mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x00001b98 cbnz r3, 0x1bf8 | goto label_9;
| }
0x00001b9a ldr r0, [r5] | r0 = *(r5);
0x00001b9c blx 0x1570 | g_ptr_array_add ();
0x00001ba0 ldr r0, [r6, 4]! | r0 = *((r6 += 4));
0x00001ba2 lsrs r4, r0, 0x1c | r4 = r0 >> 0x1c;
| if (r0 == 0) {
0x00001ba4 cbz r0, 0x1bf4 | goto label_8;
| }
0x00001ba6 blx 0x15e8 | r0 = keyfile_decode ();
0x00001baa mov r1, r0 | r1 = r0;
0x00001bac cmp r0, 0 |
0x00001bae bne 0x1b82 |
| }
0x00001bb0 ldr r0, [pc, 0x6c] |
0x00001bb2 movs r4, 1 | r4 = 1;
0x00001bb4 add r0, pc | r0 = 0x37d8;
0x00001bb6 blx 0x1594 | r0 = g_strdup_printf ()
0x00001bba mov r1, r0 | r1 = r0;
0x00001bbc mov r0, r4 | r0 = r4;
0x00001bbe blx 0x14d4 | fcn_000014d4 ();
0x00001bc0 stc p7, c14, [sl], {0xb3} | __asm ("stc p7, c14, [sl], {0xb3}");
| label_4:
0x00001bc4 ldr r1, [pc, 0x5c] |
0x00001bc6 mov r0, r4 | r0 = r4;
0x00001bc8 ldr r2, [pc, 0x5c] |
0x00001bca movs r4, 1 | r4 = 1;
0x00001bcc add r1, pc | r1 = 0x37f4;
0x00001bce add r2, pc | r2 = 0x37fa;
0x00001bd0 adds r1, 0x40 | r1 += 0x40;
0x00001bd2 blx 0x15f8 | fcn_000015f8 ();
0x00001bd6 b 0x1b42 | goto label_0;
| label_5:
0x00001bd8 ldr r1, [pc, 0x50] |
0x00001bda mov r0, r5 | r0 = r5;
0x00001bdc ldr r2, [pc, 0x50] |
0x00001bde movs r4, 1 | r4 = 1;
0x00001be0 add r1, pc | r1 = 0x3810;
0x00001be2 add r2, pc | r2 = 0x3816;
0x00001be4 adds r1, 0x40 | r1 += 0x40;
0x00001be6 blx 0x15f8 | fcn_000015f8 ();
0x00001bea b 0x1b42 | goto label_0;
| label_7:
0x00001bec ldr r0, [pc, 0x44] |
0x00001bee ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00001bf0 add r0, pc | r0 = 0x3828;
0x00001bf2 b 0x1b1c | goto label_1;
| label_8:
0x00001bf4 mov r4, r0 | r4 = r0;
0x00001bf6 b 0x1b2c | goto label_2;
| label_9:
0x00001bf8 ldr r0, [pc, 0x3c] |
0x00001bfa ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00001bfc ldr r1, [r6] | r1 = *(r6);
0x00001bfe add r0, pc | r0 = 0x383a;
0x00001c00 b 0x1b1e | goto label_3;
| label_6:
0x00001c02 blx 0x1670 | fcn_00001670 ();
0x00001c06 nop |
0x00001c08 adds r4, 0x12 | r4 += 0x12;
0x00001c0a movs r1, r0 | r1 = r0;
0x00001c0c lsls r4, r2, 4 | r4 = r2 << 4;
0x00001c0e movs r0, r0 |
0x00001c10 subs r6, r2, r4 | r6 = r2 - r4;
0x00001c12 movs r0, r0 |
0x00001c14 adds r3, 0x9a | r3 += 0x9a;
0x00001c16 movs r1, r0 | r1 = r0;
0x00001c18 subs r4, r5, r3 | r4 = r5 - r3;
0x00001c1a movs r0, r0 |
0x00001c1c subs r2, r2, r3 | r2 -= r3;
0x00001c1e movs r0, r0 |
0x00001c20 subs r4, r2, r3 | r4 = r2 - r3;
0x00001c22 movs r0, r0 |
0x00001c24 movs r0, 0x38 | r0 = 0x38;
0x00001c26 movs r0, r0 |
0x00001c28 subs r6, r0, r1 | r6 = r0 - r1;
0x00001c2a movs r0, r0 |
0x00001c2c movs r0, 0x24 | r0 = 0x24;
0x00001c2e movs r0, r0 |
0x00001c30 subs r6, r7, r0 | r6 = r7 - r0;
0x00001c32 movs r0, r0 |
0x00001c34 subs r0, r6, r1 | r0 = r6 - r1;
0x00001c36 movs r0, r0 |
0x00001c38 subs r2, r5, r2 | r2 = r5 - r2;
0x00001c3a movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libcertutil.so.1.0 @ 0x24c4 */
| #include <stdint.h>
|
; (fcn) sym.cert_util_get_properties () | void cert_util_get_properties (int16_t arg_d8h, int16_t arg_dch, int16_t arg_e0h, int16_t arg_e4h, int16_t arg_e8h, int16_t arg_ech, int16_t arg_f0h, int16_t arg_f4h, int16_t arg_f8h, int16_t arg_fch, int16_t arg_100h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_a8h;
| int16_t var_4h;
| int16_t var_b0h;
| int16_t var_ch;
| int16_t var_b8h;
| int16_t var_bch;
| int16_t var_c0h;
| int16_t var_c4h;
| int16_t var_c8h;
| int16_t var_cch;
| int16_t var_d0h;
| int16_t var_d4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000024c4 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000024c8 mov sl, r2 | sl = r2;
0x000024ca sub sp, 0x84 |
0x000024cc ldr r2, [pc, 0x3d4] |
0x000024ce mov fp, r3 |
0x000024d0 movs r7, 0 | r7 = 0;
0x000024d2 ldr r4, [sp, 0xa8] | r4 = var_a8h;
0x000024d4 mov sb, r1 | sb = r1;
0x000024d6 ldr r3, [pc, 0x3d0] | r3 = *(0x28aa);
0x000024d8 add r2, pc | r2 = 0x4d80;
0x000024da mov r6, r0 | r6 = r0;
0x000024dc str r4, [sp] | *(sp) = r4;
0x000024de ldr r3, [r2, r3] |
0x000024e0 ldr r3, [r3] | r3 = *(0x4d80);
0x000024e2 str r3, [sp, 0x7c] | var_7ch = r3;
0x000024e4 mov.w r3, 0 | r3 = 0;
0x000024e8 ldr r3, [sp, 0xac] | r3 = var_4h;
0x000024ea str r7, [sp, 0x74] | var_74h = r7;
0x000024ec str r3, [sp, 4] | var_4h_2 = r3;
0x000024ee ldr r3, [sp, 0xb0] | r3 = var_b0h;
0x000024f0 str r3, [sp, 8] | var_8h = r3;
0x000024f2 ldr r3, [sp, 0xb4] | r3 = var_ch;
0x000024f4 str r3, [sp, 0xc] | var_ch_2 = r3;
0x000024f6 ldr r3, [sp, 0xb8] | r3 = var_b8h;
0x000024f8 str r3, [sp, 0x10] | var_10h = r3;
0x000024fa ldr r3, [sp, 0xbc] | r3 = var_bch;
0x000024fc str r3, [sp, 0x14] | var_14h = r3;
0x000024fe ldr r3, [sp, 0xc0] | r3 = var_c0h;
0x00002500 str r3, [sp, 0x18] | var_18h = r3;
0x00002502 ldr r3, [sp, 0xc4] | r3 = var_c4h;
0x00002504 str r3, [sp, 0x1c] | var_1ch = r3;
0x00002506 ldr r3, [sp, 0xc8] | r3 = var_c8h;
0x00002508 str r3, [sp, 0x20] | var_20h = r3;
0x0000250a ldr r3, [sp, 0xcc] | r3 = var_cch;
0x0000250c str r3, [sp, 0x24] | var_24h = r3;
0x0000250e ldr r3, [sp, 0xd0] | r3 = var_d0h;
0x00002510 str r3, [sp, 0x28] | var_28h = r3;
0x00002512 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x00002514 str r3, [sp, 0x2c] | var_2ch = r3;
0x00002516 ldr r3, [sp, 0xd8] | r3 = *(arg_d8h);
0x00002518 str r3, [sp, 0x30] | var_30h = r3;
0x0000251a ldr r3, [sp, 0xdc] | r3 = *(arg_dch);
0x0000251c str r3, [sp, 0x34] | var_34h = r3;
0x0000251e ldr r3, [sp, 0xe0] | r3 = *(arg_e0h);
0x00002520 str r3, [sp, 0x38] | var_38h = r3;
0x00002522 ldr r3, [sp, 0xe4] | r3 = *(arg_e4h);
0x00002524 str r3, [sp, 0x3c] | var_3ch = r3;
0x00002526 ldr r3, [sp, 0xe8] | r3 = *(arg_e8h);
0x00002528 str r3, [sp, 0x40] | var_40h = r3;
0x0000252a ldr r3, [sp, 0xec] | r3 = *(arg_ech);
0x0000252c str r3, [sp, 0x44] | var_44h = r3;
0x0000252e ldr r3, [sp, 0xf0] | r3 = *(arg_f0h);
0x00002530 str r3, [sp, 0x48] | var_48h = r3;
0x00002532 ldr r3, [sp, 0xf4] | r3 = *(arg_f4h);
0x00002534 str r3, [sp, 0x4c] | var_4ch = r3;
0x00002536 ldr r3, [sp, 0xf8] | r3 = *(arg_f8h);
0x00002538 str r3, [sp, 0x50] | var_50h = r3;
0x0000253a ldr r3, [sp, 0xfc] | r3 = *(arg_fch);
0x0000253c str r3, [sp, 0x54] | var_54h = r3;
0x0000253e ldr r3, [sp, 0x100] | r3 = *(arg_100h);
0x00002540 str r3, [sp, 0x58] | var_58h = r3;
0x00002542 blx 0x14a4 | r0 = fcn_000014a4 ();
0x00002546 mov r8, r0 | r8 = r0;
0x00002548 add r0, sp, 0x78 | r0 += var_78h;
0x0000254a mov r1, r8 | r1 = r8;
0x0000254c blx 0x14e0 | r0 = fcn_000014e0 ();
| if (r0 == 0) {
0x00002550 cbz r0, 0x2590 | goto label_6;
| }
| if (r6 == 0) {
0x00002552 cbz r6, 0x2588 | goto label_7;
| }
0x00002554 mov r0, r7 | r0 = r7;
0x00002556 blx 0x1468 | g_free ();
0x0000255a mov r0, r7 | r0 = r7;
0x0000255c blx 0x16e8 | fcn_000016e8 ();
| do {
0x00002560 ldr r0, [sp, 0x74] | r0 = var_74h;
0x00002562 movs r5, 1 | r5 = 1;
| if (r0 != 0) {
0x00002564 cbz r0, 0x256a |
0x00002566 blx 0x16dc | fcn_000016dc ();
| }
| label_0:
0x0000256a ldr r2, [pc, 0x340] |
0x0000256c ldr r3, [pc, 0x338] | r3 = *(0x28a8);
0x0000256e add r2, pc | r2 = 0x4e20;
0x00002570 ldr r3, [r2, r3] | r3 = *(0x4e20);
0x00002572 ldr r2, [r3] | r2 = *(0x4e20);
0x00002574 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x00002576 eors r2, r3 | r2 ^= r3;
0x00002578 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000257c bne.w 0x28a0 | goto label_8;
| }
0x00002580 mov r0, r5 | r0 = r5;
0x00002582 add sp, 0x84 |
0x00002584 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x00002588 mov r0, r6 | r0 = r6;
0x0000258a blx 0x16e8 | fcn_000016e8 ();
0x0000258e b 0x2560 |
| } while (1);
| label_6:
0x00002590 mov r5, r0 | r5 = r0;
0x00002592 blx 0x14f8 | g_key_file_new ();
0x00002596 add r3, sp, 0x74 | r3 += var_74h;
0x00002598 movs r2, 1 | r2 = 1;
0x0000259a mov r1, r8 | r1 = r8;
0x0000259c mov r4, r0 | r4 = r0;
0x0000259e blx 0x1664 | fcn_00001664 ();
0x000025a2 ldr r3, [sp, 0x74] | r3 = var_74h;
| if (r3 != 0) {
0x000025a4 cbz r3, 0x25fe |
0x000025a6 ldr.w sb, [r3, 8] | sb = *((r3 + 8));
0x000025aa ldr r1, [pc, 0x304] |
0x000025ac mov r0, sb | r0 = sb;
0x000025ae add r1, pc | r1 = 0x4e64;
0x000025b0 blx 0x1730 | r0 = fcn_00001730 ();
0x000025b4 orrs.w r5, r6, r0 | r5 = r6 | r0;
| if (r5 == r6) {
0x000025b8 beq.w 0x2890 | goto label_9;
| }
0x000025bc ldr r0, [pc, 0x2f4] |
0x000025be mov r1, r8 | r1 = r8;
0x000025c0 mov r2, sb | r2 = sb;
0x000025c2 movs r5, 1 | r5 = 1;
0x000025c4 mov r8, r7 | r8 = r7;
0x000025c6 add r0, pc | r0 = 0x4e7e;
0x000025c8 blx 0x1594 | r0 = g_strdup_printf ()
0x000025cc mov r1, r0 | r1 = r0;
0x000025ce movs r0, 1 | r0 = 1;
0x000025d0 blx 0x14d4 | fcn_000014d4 ();
| if (r6 != 0) {
| label_1:
0x000025d4 cbz r6, 0x25dc |
0x000025d6 mov r0, r8 | r0 = r8;
0x000025d8 blx 0x1468 | g_free ();
| }
| label_2:
0x000025dc mov r0, r7 | r0 = r7;
0x000025de blx 0x16e8 | fcn_000016e8 ();
| if (r4 != 0) {
0x000025e2 cbz r4, 0x25ea |
0x000025e4 mov r0, r4 | r0 = r4;
0x000025e6 blx 0x16b8 | fcn_000016b8 ();
| }
0x000025ea ldr r0, [sp, 0x74] | r0 = var_74h;
| if (r0 != 0) {
0x000025ec cbz r0, 0x25f6 |
0x000025ee blx 0x16dc | fcn_000016dc ();
0x000025f2 movs r3, 0 | r3 = 0;
0x000025f4 str r3, [sp, 0x74] | var_74h = r3;
| }
0x000025f6 ldr r0, [sp, 0x78] | r0 = var_78h;
0x000025f8 blx 0x164c | fcn_0000164c ();
0x000025fc b 0x256a | goto label_0;
| }
0x000025fe cmp r6, 0 |
| if (r6 == 0) {
0x00002600 beq.w 0x286a | goto label_10;
| }
0x00002604 mov r0, r6 | r0 = r6;
0x00002606 blx 0x1534 | r0 = keyfile_encode ();
0x0000260a mov r8, r0 | r8 = r0;
0x0000260c cmp r0, 0 |
| if (r0 == 0) {
0x0000260e beq.w 0x2894 | goto label_11;
| }
| label_5:
0x00002612 movs r1, 0 | r1 = 0;
0x00002614 mov r0, r4 | r0 = r4;
0x00002616 blx 0x1658 | r0 = fcn_00001658 ();
0x0000261a ldr r1, [r0] | r1 = *(r0);
0x0000261c mov r7, r0 | r7 = r0;
0x0000261e cmp r1, 0 |
| if (r1 == 0) {
0x00002620 beq.w 0x2854 | goto label_12;
| }
0x00002624 movs r3, 0 | r3 = 0;
0x00002626 str r3, [sp, 0x64] | var_64h = r3;
| label_3:
0x00002628 ldr r2, [pc, 0x28c] |
0x0000262a ldr r3, [pc, 0x290] |
0x0000262c strd r7, r5, [sp, 0x68] | __asm ("strd r7, r5, [sp, 0x68]");
0x00002630 mov r5, r7 | r5 = r7;
0x00002632 add r2, pc | r2 = 0x4eee;
0x00002634 mov r7, r6 | r7 = r6;
0x00002636 str r2, [sp, 0x5c] | var_5ch = r2;
0x00002638 add r3, pc | r3 = 0x4efa;
0x0000263a ldr r2, [pc, 0x284] |
0x0000263c mov r6, sb | r6 = sb;
0x0000263e mov sb, r3 | sb = r3;
0x00002640 add r2, pc | r2 = 0x4f06;
0x00002642 str r2, [sp, 0x60] | var_60h = r2;
| do {
0x00002644 cmp r7, 0 |
| if (r7 == 0) {
0x00002646 beq.w 0x288c | goto label_13;
| }
0x0000264a mov r0, r8 | r0 = r8;
0x0000264c blx 0x1730 | r0 = fcn_00001730 ();
0x00002650 cmp r0, 0 |
| if (r0 == 0) {
0x00002652 bne.w 0x283c |
0x00002656 movs r3, 1 | r3 = 1;
0x00002658 str r3, [sp, 0x64] | var_64h = r3;
| if (r6 != 0) {
| label_4:
0x0000265a cbz r6, 0x266a |
0x0000265c mov r0, r8 | r0 = r8;
0x0000265e blx 0x15e8 | r0 = keyfile_decode ();
0x00002662 mov r1, r0 | r1 = r0;
0x00002664 mov r0, r6 | r0 = r6;
0x00002666 blx 0x1570 | g_ptr_array_add ();
| }
0x0000266a mov r3, sb | r3 = sb;
0x0000266c mov r2, r8 | r2 = r8;
0x0000266e mov r1, r4 | r1 = r4;
0x00002670 mov r0, sl | r0 = sl;
0x00002672 bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x00002676 cmp r0, 0 |
| if (r0 != 0) {
0x00002678 bne.w 0x2884 | goto label_14;
| }
0x0000267c ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0000267e mov r2, r8 | r2 = r8;
0x00002680 mov r1, r4 | r1 = r4;
0x00002682 mov r0, fp | r0 = fp;
0x00002684 bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x00002688 cmp r0, 0 |
| if (r0 != 0) {
0x0000268a bne.w 0x2884 | goto label_14;
| }
0x0000268e ldr r3, [sp, 0x60] | r3 = var_60h;
0x00002690 mov r2, r8 | r2 = r8;
0x00002692 ldr r0, [sp] | r0 = *(sp);
0x00002694 mov r1, r4 | r1 = r4;
0x00002696 bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x0000269a cmp r0, 0 |
| if (r0 != 0) {
0x0000269c bne.w 0x2884 | goto label_14;
| }
0x000026a0 ldr r3, [pc, 0x220] |
0x000026a2 mov r2, r8 | r2 = r8;
0x000026a4 ldr r0, [sp, 4] | r0 = var_4h_2;
0x000026a6 mov r1, r4 | r1 = r4;
0x000026a8 add r3, pc | r3 = 0x4f70;
0x000026aa bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x000026ae cmp r0, 0 |
| if (r0 != 0) {
0x000026b0 bne.w 0x2884 | goto label_14;
| }
0x000026b4 ldr r3, [pc, 0x210] |
0x000026b6 mov r2, r8 | r2 = r8;
0x000026b8 ldr r0, [sp, 8] | r0 = var_8h;
0x000026ba mov r1, r4 | r1 = r4;
0x000026bc add r3, pc | r3 = 0x4f88;
0x000026be bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x000026c2 cmp r0, 0 |
| if (r0 != 0) {
0x000026c4 bne.w 0x2884 | goto label_14;
| }
0x000026c8 ldr r3, [pc, 0x200] |
0x000026ca mov r2, r8 | r2 = r8;
0x000026cc ldr r0, [sp, 0xc] | r0 = var_ch_2;
0x000026ce mov r1, r4 | r1 = r4;
0x000026d0 add r3, pc | r3 = 0x4fa0;
0x000026d2 bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x000026d6 cmp r0, 0 |
| if (r0 != 0) {
0x000026d8 bne.w 0x2884 | goto label_14;
| }
0x000026dc ldr r3, [pc, 0x1f0] |
0x000026de mov r2, r8 | r2 = r8;
0x000026e0 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000026e2 mov r1, r4 | r1 = r4;
0x000026e4 add r3, pc | r3 = 0x4fb8;
0x000026e6 bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x000026ea cmp r0, 0 |
| if (r0 != 0) {
0x000026ec bne.w 0x2884 | goto label_14;
| }
0x000026f0 ldr r3, [pc, 0x1e0] |
0x000026f2 mov r2, r8 | r2 = r8;
0x000026f4 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000026f6 mov r1, r4 | r1 = r4;
0x000026f8 add r3, pc | r3 = 0x4fd0;
0x000026fa bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x000026fe cmp r0, 0 |
| if (r0 != 0) {
0x00002700 bne.w 0x2884 | goto label_14;
| }
0x00002704 ldr r3, [pc, 0x1d0] |
0x00002706 mov r2, r8 | r2 = r8;
0x00002708 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0000270a mov r1, r4 | r1 = r4;
0x0000270c add r3, pc | r3 = 0x4fe8;
0x0000270e bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x00002712 cmp r0, 0 |
| if (r0 != 0) {
0x00002714 bne.w 0x2884 | goto label_14;
| }
0x00002716 strh r6, [r6, 4] | *((r6 + 4)) = r6;
0x00002718 ldr r3, [pc, 0x1c0] |
0x0000271a mov r2, r8 | r2 = r8;
0x0000271c ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0000271e mov r1, r4 | r1 = r4;
0x00002720 add r3, pc | r3 = 0x5000;
0x00002722 bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x00002726 cmp r0, 0 |
| if (r0 != 0) {
0x00002728 bne.w 0x2884 | goto label_14;
| }
0x0000272c ldr r3, [pc, 0x1b0] |
0x0000272e mov r2, r8 | r2 = r8;
0x00002730 ldr r0, [sp, 0x20] | r0 = var_20h;
0x00002732 mov r1, r4 | r1 = r4;
0x00002734 add r3, pc | r3 = 0x5018;
0x00002736 bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x0000273a cmp r0, 0 |
| if (r0 != 0) {
0x0000273c bne.w 0x2884 | goto label_14;
| }
0x00002740 ldr r3, [pc, 0x1a0] |
0x00002742 mov r2, r8 | r2 = r8;
0x00002744 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00002746 mov r1, r4 | r1 = r4;
0x00002748 add r3, pc | r3 = 0x5030;
0x0000274a bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x0000274e cmp r0, 0 |
| if (r0 != 0) {
0x00002750 bne.w 0x2884 | goto label_14;
| }
0x00002754 ldr r3, [pc, 0x190] |
0x00002756 mov r2, r8 | r2 = r8;
0x00002758 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0000275a mov r1, r4 | r1 = r4;
0x0000275c add r3, pc | r3 = 0x5048;
0x0000275e bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x00002762 cmp r0, 0 |
| if (r0 != 0) {
0x00002764 bne.w 0x2884 | goto label_14;
| }
0x00002768 ldr r3, [pc, 0x180] |
0x0000276a mov r2, r8 | r2 = r8;
0x0000276c ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0000276e mov r1, r4 | r1 = r4;
0x00002770 add r3, pc | r3 = 0x5060;
0x00002772 bl 0x1c3c | fcn_00001c3c (r0, r1, r2, r3);
0x00002774 invalid |
| if (r0 != 0) {
0x00002778 bne.w 0x2884 | goto label_14;
| }
0x0000277c ldr r3, [pc, 0x170] |
0x0000277e mov r2, r8 | r2 = r8;
0x00002780 ldr r0, [sp, 0x30] | r0 = var_30h;
0x00002782 mov r1, r4 | r1 = r4;
0x00002784 add r3, pc | r3 = 0x5078;
0x00002786 bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x0000278a cmp r0, 0 |
| if (r0 != 0) {
0x0000278c bne 0x2884 | goto label_14;
| }
0x0000278e ldr r3, [pc, 0x164] |
0x00002790 mov r2, r8 | r2 = r8;
0x00002792 ldr r0, [sp, 0x34] | r0 = var_34h;
0x00002794 mov r1, r4 | r1 = r4;
0x00002796 add r3, pc | r3 = 0x5090;
0x00002798 bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x0000279c cmp r0, 0 |
| if (r0 != 0) {
0x0000279e bne 0x2884 | goto label_14;
| }
0x000027a0 ldr r3, [pc, 0x154] |
0x000027a2 mov r2, r8 | r2 = r8;
0x000027a4 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000027a6 mov r1, r4 | r1 = r4;
0x000027a8 add r3, pc | r3 = 0x50a4;
0x000027aa bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x000027ae cmp r0, 0 |
| if (r0 != 0) {
0x000027b0 bne 0x2884 | goto label_14;
| }
0x000027b2 ldr r3, [pc, 0x148] |
0x000027b4 mov r2, r8 | r2 = r8;
0x000027b6 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000027b8 mov r1, r4 | r1 = r4;
0x000027ba add r3, pc | r3 = 0x50bc;
0x000027bc bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x000027c0 cmp r0, 0 |
| if (r0 != 0) {
0x000027c2 bne 0x2884 | goto label_14;
| }
0x000027c4 ldr r3, [pc, 0x138] |
0x000027c6 mov r2, r8 | r2 = r8;
0x000027c8 ldr r0, [sp, 0x40] | r0 = var_40h;
0x000027ca mov r1, r4 | r1 = r4;
0x000027cc add r3, pc | r3 = 0x50d0;
0x000027ce bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x000027d2 cmp r0, 0 |
| if (r0 != 0) {
0x000027d4 bne 0x2884 | goto label_14;
| }
0x000027d6 ldr r3, [pc, 0x12c] |
0x000027d8 mov r2, r8 | r2 = r8;
0x000027da ldr r0, [sp, 0x44] | r0 = var_44h;
0x000027dc mov r1, r4 | r1 = r4;
0x000027de add r3, pc | r3 = 0x50e8;
0x000027e0 bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x000027e4 cmp r0, 0 |
| if (r0 != 0) {
0x000027e6 bne 0x2884 | goto label_14;
| }
0x000027e8 ldr r3, [pc, 0x11c] |
0x000027ea mov r2, r8 | r2 = r8;
0x000027ec ldr r0, [sp, 0x48] | r0 = var_48h;
0x000027ee mov r1, r4 | r1 = r4;
0x000027f0 add r3, pc | r3 = 0x50fc;
0x000027f2 bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x000027f6 cmp r0, 0 |
| if (r0 != 0) {
0x000027f8 bne 0x2884 | goto label_14;
| }
0x000027fa ldr r3, [pc, 0x110] |
0x000027fc mov r2, r8 | r2 = r8;
0x000027fe ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x00002800 mov r1, r4 | r1 = r4;
0x00002802 add r3, pc | r3 = 0x5114;
0x00002804 bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x00002808 cmp r0, 0 |
| if (r0 != 0) {
0x0000280a bne 0x2884 | goto label_14;
| }
0x0000280c ldr r3, [pc, 0x100] |
0x0000280e mov r2, r8 | r2 = r8;
0x00002810 ldr r0, [sp, 0x50] | r0 = var_50h;
0x00002812 mov r1, r4 | r1 = r4;
0x00002814 add r3, pc | r3 = 0x5128;
0x00002816 bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
| if (r0 != 0) {
0x0000281a cbnz r0, 0x2884 | goto label_14;
| }
0x0000281c ldr r3, [pc, 0xf4] |
0x0000281e mov r2, r8 | r2 = r8;
0x00002820 ldr r0, [sp, 0x54] | r0 = var_54h;
0x00002822 mov r1, r4 | r1 = r4;
0x00002824 add r3, pc | r3 = 0x513c;
0x00002826 bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
| if (r0 != 0) {
0x0000282a cbnz r0, 0x2884 | goto label_14;
| }
0x0000282c ldr r3, [pc, 0xe8] |
0x0000282e mov r2, r8 | r2 = r8;
0x00002830 ldr r0, [sp, 0x58] | r0 = var_58h;
0x00002832 mov r1, r4 | r1 = r4;
0x00002834 add r3, pc | r3 = 0x5150;
0x00002836 bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
| if (r0 != 0) {
0x0000283a cbnz r0, 0x2884 | goto label_14;
| }
| }
0x0000283c ldr r1, [r5, 4]! | r1 = *((r5 += 4));
0x00002840 cmp r1, 0 |
0x00002842 bne.w 0x2644 |
| } while (r1 != 0);
0x00002846 mov r6, r7 | r6 = r7;
0x00002848 ldrd r3, r7, [sp, 0x64] | __asm ("ldrd r3, r7, [var_64h]");
0x0000284c ldr r5, [sp, 0x6c] | r5 = var_6ch;
0x0000284e cmp r3, 0 |
| if (r3 != 0) {
0x00002850 bne.w 0x25d4 | goto label_1;
| }
| label_12:
0x00002854 ldr r0, [pc, 0xc4] |
0x00002856 mov r1, r6 | r1 = r6;
0x00002858 movs r5, 1 | r5 = 1;
0x0000285a add r0, pc | r0 = 0x517a;
0x0000285c blx 0x1594 | r0 = g_strdup_printf ()
0x00002860 mov r1, r0 | r1 = r0;
0x00002862 movs r0, 1 | r0 = 1;
0x00002864 blx 0x14d4 | fcn_000014d4 ();
0x00002868 b 0x25d4 | goto label_1;
| label_10:
0x0000286a mov r1, r6 | r1 = r6;
0x0000286c mov r0, r4 | r0 = r4;
0x0000286e blx 0x1658 | r0 = fcn_00001658 ();
0x00002872 ldr r1, [r0] | r1 = *(r0);
0x00002874 mov r7, r0 | r7 = r0;
0x00002876 cmp r1, 0 |
| if (r1 == 0) {
0x00002878 beq.w 0x25dc | goto label_2;
| }
0x0000287c movs r3, 1 | r3 = 1;
0x0000287e mov r8, r6 | r8 = r6;
0x00002880 str r3, [sp, 0x64] | var_64h = r3;
0x00002882 b 0x2628 | goto label_3;
| label_14:
0x00002884 mov r6, r7 | r6 = r7;
0x00002886 movs r5, 1 | r5 = 1;
0x00002888 ldr r7, [sp, 0x68] | r7 = var_68h;
0x0000288a b 0x25d4 | goto label_1;
| label_13:
0x0000288c mov r8, r1 | r8 = r1;
0x0000288e b 0x265a | goto label_4;
| label_9:
0x00002890 mov r7, r5 | r7 = r5;
0x00002892 b 0x25dc | goto label_2;
| label_11:
0x00002894 ldr r0, [pc, 0x88] |
0x00002896 add r0, pc | r0 = 0x51ba;
0x00002898 blx 0x1504 | r0 = g_strdup ();
0x0000289c mov r8, r0 | r8 = r0;
0x0000289e b 0x2612 | goto label_5;
| label_8:
0x000028a0 blx 0x1670 | fcn_00001670 ();
0x000028a4 cmp r2, 8 |
0x000028a6 movs r1, r0 | r1 = r0;
0x000028a8 lsls r4, r2, 4 | r4 = r2 << 4;
0x000028aa movs r0, r0 |
0x000028ac cmp r1, 0x72 |
0x000028ae movs r1, r0 | r1 = r0;
0x000028b0 asrs r2, r6, 5 | r2 = r6 >> 5;
0x000028b2 movs r0, r0 |
0x000028b4 asrs r2, r5, 1 | r2 = r5 >> 1;
0x000028b6 movs r0, r0 |
0x000028b8 asrs r2, r4, 3 | r2 = r4 >> 3;
0x000028ba movs r0, r0 |
0x000028bc asrs r4, r4, 5 | r4 >>= 5;
0x000028be movs r0, r0 |
0x000028c0 asrs r4, r4, 5 | r4 >>= 5;
0x000028c2 movs r0, r0 |
0x000028c4 asrs r4, r0, 4 | r4 = r0 >> 4;
0x000028c6 movs r0, r0 |
0x000028c8 asrs r0, r0, 4 | r0 >>= 4;
0x000028ca movs r0, r0 |
0x000028cc asrs r0, r6, 3 | r0 = r6 >> 3;
0x000028ce movs r0, r0 |
0x000028d0 asrs r4, r4, 3 | r4 >>= 3;
0x000028d2 movs r0, r0 |
0x000028d4 asrs r0, r4, 3 | r0 = r4 >> 3;
0x000028d6 movs r0, r0 |
0x000028d8 asrs r0, r2, 3 | r0 = r2 >> 3;
0x000028da movs r0, r0 |
0x000028dc asrs r4, r0, 3 | r4 = r0 >> 3;
0x000028de movs r0, r0 |
0x000028e0 asrs r4, r6, 2 | r4 = r6 >> 2;
0x000028e2 movs r0, r0 |
0x000028e4 asrs r4, r4, 2 | r4 >>= 2;
0x000028e6 movs r0, r0 |
0x000028e8 asrs r0, r3, 2 | r0 = r3 >> 2;
0x000028ea movs r0, r0 |
0x000028ec lsrs r0, r4, 0x1f | r0 = r4 >> 0x1f;
0x000028ee movs r0, r0 |
0x000028f0 lsrs r0, r2, 0x1f | r0 = r2 >> 0x1f;
0x000028f2 movs r0, r0 |
0x000028f4 lsrs r6, r0, 0x1f | r6 = r0 >> 0x1f;
0x000028f6 movs r0, r0 |
0x000028f8 lsrs r0, r7, 0x1e | r0 = r7 >> 0x1e;
0x000028fa movs r0, r0 |
0x000028fc lsrs r2, r5, 0x1e | r2 = r5 >> 0x1e;
0x000028fe movs r0, r0 |
0x00002900 lsrs r0, r4, 0x1e | r0 = r4 >> 0x1e;
0x00002902 movs r0, r0 |
0x00002904 asrs r6, r3, 0x20 | r6 = r3 >> 0x20;
0x00002906 movs r0, r0 |
0x00002908 asrs r0, r3, 0x20 | r0 = r3 >> 0x20;
0x0000290a movs r0, r0 |
0x0000290c asrs r2, r2, 0x20 | r2 >>= 0x20;
0x0000290e movs r0, r0 |
0x00002910 asrs r0, r2, 0x20 | r0 = r2 >> 0x20;
0x00002912 movs r0, r0 |
0x00002914 lsrs r4, r7, 0x1f | r4 = r7 >> 0x1f;
0x00002916 movs r0, r0 |
0x00002918 asrs r4, r2, 0x15 | r4 = r2 >> 0x15;
0x0000291a movs r0, r0 |
0x0000291c asrs r2, r5, 0x20 | r2 = r5 >> 0x20;
0x0000291e movs r0, r0 |
0x00002920 lsrs r2, r0, 0x15 | r2 = r0 >> 0x15;
0x00002922 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libcertutil.so.1.0 @ 0x33d4 */
| #include <stdint.h>
|
; (fcn) sym.cert_util_get_properties_conf_full () | void cert_util_get_properties_conf_full () {
0x000033d4 ldrbtmi r4, [r8], -0x801 | __asm ("ldrbtmi r4, [r8], -aav.0x00000a16");
0x000033d8 bx lr | return;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libcertutil.so.1.0 @ 0x3104 */
| #include <stdint.h>
|
; (fcn) sym.cert_util_key_ref () | void cert_util_key_ref (int16_t arg1) {
| int16_t var_4h;
| int16_t var_8h_2;
| int16_t var_ch;
| r0 = arg1;
0x00003104 ldr r2, [pc, 0x118] |
0x00003106 ldr r3, [pc, 0x11c] | r3 = *(0x3226);
0x00003108 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x0000310c mov r4, r0 | r4 = r0;
0x0000310e add r2, pc | r2 = 0x6332;
0x00003110 sub sp, 0x14 |
0x00003112 mov.w r8, 0 | r8 = 0;
0x00003116 ldr r3, [r2, r3] |
0x00003118 ldr r3, [r3] | r3 = *(0x6332);
0x0000311a str r3, [sp, 0xc] | var_ch = r3;
0x0000311c mov.w r3, 0 | r3 = 0;
0x00003120 str.w r8, [sp, 4] | __asm ("str.w r8, [var_4h]");
0x00003124 blx 0x16c4 | r0 = fcn_000016c4 ();
0x00003128 mov r7, r0 | r7 = r0;
0x0000312a mov r0, r4 | r0 = r4;
0x0000312c bl 0x2924 | r0 = fcn_00002924 (r0);
0x00003130 mov r4, r0 | r4 = r0;
0x00003132 cmp r0, 0 |
| if (r0 == 0) {
0x00003134 beq 0x31fa | goto label_2;
| }
0x00003136 add.w sb, sp, 4 | sb += var_4h;
0x0000313a blx 0x14f8 | g_key_file_new ();
0x0000313e mov r3, sb | r3 = sb;
0x00003140 mov r2, r8 | r2 = r8;
0x00003142 mov r1, r7 | r1 = r7;
0x00003144 mov r6, r0 | r6 = r0;
0x00003146 blx 0x1664 | r0 = fcn_00001664 ();
0x0000314a mov r5, r0 | r5 = r0;
0x0000314c cmp r0, 0 |
| if (r0 == 0) {
0x0000314e beq 0x31e0 | goto label_3;
| }
0x00003150 ldr r1, [pc, 0xd4] |
0x00003152 mov r3, sb | r3 = sb;
0x00003154 mov r2, r4 | r2 = r4;
0x00003156 mov r0, r6 | r0 = r6;
0x00003158 add r1, pc | r1 = 0x6384;
0x0000315a blx 0x15a0 | g_key_file_get_integer ();
0x0000315e ldr r5, [sp, 4] | r5 = var_4h;
0x00003160 adds r3, r0, 1 | r3 = r0 + 1;
| if (r5 != 0) {
0x00003162 cbz r5, 0x3182 |
0x00003164 blx 0x16d0 | fcn_000016d0 ();
0x00003168 movs r2, 5 | r2 = 5;
0x0000316a mov r1, r0 | r1 = r0;
0x0000316c mov r0, r5 | r0 = r5;
0x0000316e blx 0x1628 | r0 = fcn_00001628 ();
0x00003172 mov r5, r0 | r5 = r0;
0x00003174 cmp r0, 0 |
| if (r0 != 0) {
0x00003176 bne 0x3202 | goto label_4;
| }
0x00003178 ldr r0, [sp, 4] | r0 = var_4h;
0x0000317a blx 0x16dc | fcn_000016dc ();
0x0000317e movs r3, 1 | r3 = 1;
0x00003180 str r5, [sp, 4] | var_4h = r5;
| }
0x00003182 ldr r1, [pc, 0xa8] |
0x00003184 mov r0, r6 | r0 = r6;
0x00003186 mov r2, r4 | r2 = r4;
0x00003188 add r1, pc | r1 = 0x63ba;
0x0000318a blx 0x16a0 | fcn_000016a0 ();
0x0000318e mov r2, sb | r2 = sb;
0x00003190 add r1, sp, 8 | r1 += var_8h_2;
0x00003192 mov r0, r6 | r0 = r6;
0x00003194 blx 0x15dc | g_key_file_to_data ();
0x00003198 ldr r2, [sp, 8] | r2 = var_8h_2;
0x0000319a mov r5, r0 | r5 = r0;
0x0000319c mov r1, r0 | r1 = r0;
0x0000319e mov r3, sb | r3 = sb;
0x000031a0 mov r0, r7 | r0 = r7;
0x000031a2 blx 0x161c | r0 = fcn_0000161c ();
| if (r0 == 0) {
0x000031a6 cbz r0, 0x3210 | goto label_5;
| }
0x000031a8 movs r7, 0 | r7 = 0;
| do {
| label_0:
0x000031aa mov r0, r4 | r0 = r4;
0x000031ac blx 0x1468 | g_free ();
0x000031b0 ldr r0, [sp, 4] | r0 = var_4h;
| if (r0 != 0) {
0x000031b2 cbz r0, 0x31b8 |
0x000031b4 blx 0x16dc | fcn_000016dc ();
| }
0x000031b8 mov r0, r5 | r0 = r5;
0x000031ba blx 0x1468 | g_free ();
0x000031be mov r0, r6 | r0 = r6;
0x000031c0 blx 0x16b8 | fcn_000016b8 ();
0x000031c4 ldr r2, [pc, 0x68] |
0x000031c6 ldr r3, [pc, 0x5c] | r3 = *(0x3226);
0x000031c8 add r2, pc | r2 = 0x63fc;
0x000031ca ldr r3, [r2, r3] | r3 = *(0x63fc);
0x000031cc ldr r2, [r3] | r2 = *(0x63fc);
0x000031ce ldr r3, [sp, 0xc] | r3 = var_ch;
0x000031d0 eors r2, r3 | r2 ^= r3;
0x000031d2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000031d6 bne 0x321c | goto label_6;
| }
0x000031d8 mov r0, r7 | r0 = r7;
0x000031da add sp, 0x14 |
0x000031dc pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_3:
0x000031e0 ldr r3, [sp, 4] | r3 = var_4h;
0x000031e2 mov r1, r7 | r1 = r7;
0x000031e4 ldr r0, [pc, 0x4c] |
0x000031e6 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x000031e8 add r0, pc | r0 = 0x6420;
| label_1:
0x000031ea blx 0x1594 | r0 = g_strdup_printf ()
0x000031ee mov r1, r0 | r1 = r0;
0x000031f0 movs r0, 1 | r0 = 1;
0x000031f2 movs r7, 1 | r7 = 1;
0x000031f4 blx 0x14d4 | fcn_000014d4 ();
0x000031f8 b 0x31aa |
| } while (1);
| label_2:
0x000031fa mov r5, r0 | r5 = r0;
0x000031fc mov r6, r0 | r6 = r0;
0x000031fe movs r7, 1 | r7 = 1;
0x00003200 b 0x31aa | goto label_0;
| label_4:
0x00003202 ldr r3, [sp, 4] | r3 = var_4h;
0x00003204 mov r1, r7 | r1 = r7;
0x00003206 ldr r0, [pc, 0x30] |
0x00003208 mov r5, r8 | r5 = r8;
0x0000320a ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0000320c add r0, pc | r0 = 0x644a;
0x0000320e b 0x31ea | goto label_1;
| label_5:
0x00003210 ldr r3, [sp, 4] | r3 = var_4h;
0x00003212 mov r1, r7 | r1 = r7;
0x00003214 ldr r0, [pc, 0x24] |
0x00003216 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00003218 add r0, pc | r0 = 0x6458;
0x0000321a b 0x31ea | goto label_1;
| label_6:
0x0000321c blx 0x1670 | fcn_00001670 ();
0x00003220 adds r2, r2, 7 | r2 += 7;
0x00003222 movs r1, r0 | r1 = r0;
0x00003224 lsls r4, r2, 4 | r4 = r2 << 4;
0x00003226 movs r0, r0 |
0x00003228 lsrs r0, r3, 8 | r0 = r3 >> 8;
0x0000322a movs r0, r0 |
0x0000322c lsrs r0, r5, 7 | r0 = r5 >> 7;
0x0000322e movs r0, r0 |
0x00003230 adds r0, r3, 4 | r0 = r3 + 4;
0x00003232 movs r1, r0 | r1 = r0;
0x00003234 lsrs r0, r4, 5 | r0 = r4 >> 5;
0x00003236 movs r0, r0 |
0x00003238 lsrs r4, r5, 5 | r4 = r5 >> 5;
0x0000323a movs r0, r0 |
0x0000323c lsrs r0, r2, 6 | r0 = r2 >> 6;
0x0000323e movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libcertutil.so.1.0 @ 0x3240 */
| #include <stdint.h>
|
; (fcn) sym.cert_util_key_unref () | void cert_util_key_unref (int16_t arg1, int16_t arg2) {
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_ch_2;
| r0 = arg1;
| r1 = arg2;
0x00003240 blmi 0x12d5b70 | __asm ("blmi 0x12d5b70");
0x00003244 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00003248 mov r4, r0 | r4 = r0;
0x0000324a add r2, pc | r2 += pc;
0x0000324c sub sp, 0x14 |
0x0000324e mov.w sb, 0 | sb = 0;
0x00003252 mov r8, r1 | r8 = r1;
0x00003254 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00003256 ldr r3, [r3] | r3 = *(r3);
0x00003258 str r3, [sp, 0xc] | var_ch_2 = r3;
0x0000325a mov.w r3, 0 | r3 = 0;
0x0000325e str.w sb, [sp, 4] | __asm ("str.w sb, [var_4h_2]");
0x00003262 blx 0x16c4 | r0 = fcn_000016c4 ();
0x00003266 mov r6, r0 | r6 = r0;
0x00003268 mov r0, r4 | r0 = r4;
0x0000326a bl 0x2924 | r0 = fcn_00002924 (r0);
0x0000326e mov r5, r0 | r5 = r0;
0x00003270 cmp r0, 0 |
| if (r0 == 0) {
0x00003272 beq 0x332c | goto label_2;
| }
0x00003274 add.w sl, sp, 4 | sl += var_4h_2;
0x00003278 blx 0x14f8 | g_key_file_new ();
0x0000327c mov r3, sl | r3 = sl;
0x0000327e mov r2, sb | r2 = sb;
0x00003280 mov r1, r6 | r1 = r6;
0x00003282 mov r7, r0 | r7 = r0;
0x00003284 blx 0x1664 | r0 = fcn_00001664 ();
0x00003288 mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x0000328a cbz r0, 0x32de |
0x0000328c ldr.w fp, [pc, 0xe4] |
0x00003290 mov r3, sl | r3 = sl;
0x00003292 mov r2, r5 | r2 = r5;
0x00003294 mov r0, r7 | r0 = r7;
0x00003296 add fp, pc | fp = 0x660e;
0x00003298 mov r1, fp | r1 = fp;
0x0000329a blx 0x15a0 | g_key_file_get_integer ();
0x0000329e ldr r4, [sp, 4] | r4 = var_4h_2;
0x000032a0 cmp r4, 0 |
| if (r4 != 0) {
0x000032a2 bne 0x334e | goto label_3;
| }
0x000032a4 add.w sb, r0, -1 | sb = r0 + -1;
0x000032a8 mov r1, fp | r1 = fp;
0x000032aa cmp.w sb, 0 |
| if (sb <= 0) {
0x000032ae ble 0x3334 | goto label_4;
| }
0x000032b0 mov r3, sb | r3 = sb;
0x000032b2 mov r2, r5 | r2 = r5;
0x000032b4 mov r0, r7 | r0 = r7;
0x000032b6 blx 0x16a0 | fcn_000016a0 ();
| label_0:
0x000032ba movs r2, 0 | r2 = 0;
0x000032bc add r1, sp, 8 | r1 += var_8h;
0x000032be mov r0, r7 | r0 = r7;
0x000032c0 blx 0x15dc | g_key_file_to_data ();
0x000032c4 ldr r2, [sp, 8] | r2 = var_8h;
0x000032c6 mov r4, r0 | r4 = r0;
0x000032c8 mov r1, r0 | r1 = r0;
0x000032ca mov r3, sl | r3 = sl;
0x000032cc mov r0, r6 | r0 = r6;
0x000032ce blx 0x161c | r0 = fcn_0000161c ();
0x000032d2 cmp r0, 0 |
| if (r0 == 0) {
0x000032d4 beq 0x335a | goto label_5;
| }
0x000032d6 movs r6, 0 | r6 = 0;
0x000032d8 str.w sb, [r8] | __asm ("str.w sb, [r8]");
0x000032dc b 0x32f6 |
| } else {
0x000032de ldr r3, [sp, 4] | r3 = var_4h_2;
0x000032e0 mov r1, r6 | r1 = r6;
0x000032e2 ldr r0, [pc, 0x94] |
0x000032e4 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x000032e6 add r0, pc | r0 = 0x6664;
| label_1:
0x000032e8 movs r6, 1 | r6 = 1;
0x000032ea blx 0x1594 | r0 = g_strdup_printf ()
0x000032ee mov r1, r0 | r1 = r0;
0x000032f0 movs r0, 1 | r0 = 1;
0x000032f2 blx 0x14d4 | fcn_000014d4 ();
| }
| do {
0x000032f6 mov r0, r5 | r0 = r5;
0x000032f8 blx 0x1468 | g_free ();
0x000032fc ldr r0, [sp, 4] | r0 = var_4h_2;
| if (r0 != 0) {
0x000032fe cbz r0, 0x3304 |
0x00003300 blx 0x16dc | fcn_000016dc ();
| }
0x00003304 mov r0, r4 | r0 = r4;
0x00003306 blx 0x1468 | g_free ();
0x0000330a mov r0, r7 | r0 = r7;
0x0000330c blx 0x16b8 | fcn_000016b8 ();
0x00003310 ldr r2, [pc, 0x68] |
0x00003312 ldr r3, [pc, 0x5c] | r3 = *(0x3372);
0x00003314 add r2, pc | r2 = 0x6694;
0x00003316 ldr r3, [r2, r3] | r3 = *(0x6694);
0x00003318 ldr r2, [r3] | r2 = *(0x6694);
0x0000331a ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x0000331c eors r2, r3 | r2 ^= r3;
0x0000331e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00003322 bne 0x3366 | goto label_6;
| }
0x00003324 mov r0, r6 | r0 = r6;
0x00003326 add sp, 0x14 |
0x00003328 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_2:
0x0000332c mov r4, r0 | r4 = r0;
0x0000332e mov r7, r0 | r7 = r0;
0x00003330 movs r6, 1 | r6 = 1;
0x00003332 b 0x32f6 |
| } while (1);
| label_4:
0x00003334 mov r3, sl | r3 = sl;
0x00003336 mov r2, r5 | r2 = r5;
0x00003338 mov r0, r7 | r0 = r7;
0x0000333a blx 0x151c | r0 = g_key_file_remove_key ();
0x0000333e cmp r0, 0 |
| if (r0 != 0) {
0x00003340 bne 0x32ba | goto label_0;
| }
0x00003342 ldr r3, [sp, 4] | r3 = var_4h_2;
0x00003344 mov r1, r6 | r1 = r6;
0x00003346 ldr r0, [pc, 0x38] |
0x00003348 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0000334a add r0, pc | r0 = 0x66d0;
0x0000334c b 0x32e8 | goto label_1;
| label_3:
0x0000334e ldr r0, [pc, 0x34] |
0x00003350 mov r1, r6 | r1 = r6;
0x00003352 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00003354 mov r4, sb | r4 = sb;
0x00003356 add r0, pc | r0 = 0x66e0;
0x00003358 b 0x32e8 | goto label_1;
| label_5:
0x0000335a ldr r3, [sp, 4] | r3 = var_4h_2;
0x0000335c mov r1, r6 | r1 = r6;
0x0000335e ldr r0, [pc, 0x28] |
0x00003360 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00003362 add r0, pc | r0 = 0x66f0;
0x00003364 b 0x32e8 | goto label_1;
| label_6:
0x00003366 blx 0x1670 | fcn_00001670 ();
0x0000336a nop |
0x0000336c adds r6, r2, 2 | r6 = r2 + 2;
0x0000336e movs r1, r0 | r1 = r0;
0x00003370 lsls r4, r2, 4 | r4 = r2 << 4;
0x00003372 movs r0, r0 |
0x00003374 lsrs r2, r3, 3 | r2 = r3 >> 3;
0x00003376 movs r0, r0 |
0x00003378 lsrs r2, r4, 1 | r2 = r4 >> 1;
0x0000337a movs r0, r0 |
0x0000337c subs r4, r1, r7 | r4 = r1 - r7;
0x0000337e movs r1, r0 | r1 = r0;
0x00003380 lsrs r6, r0, 2 | r6 = r0 >> 2;
0x00003382 movs r0, r0 |
0x00003384 lsrs r2, r4, 0x20 | r2 = r4 >> 0x20;
0x00003386 movs r0, r0 |
0x00003388 lsls r6, r1, 0x13 | r6 = r1 << 0x13;
0x0000338a movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libcertutil.so.1.0 @ 0x2b5c */
| #include <stdint.h>
|
; (fcn) sym.cert_util_remove_cert_from_cnf () | void cert_util_remove_cert_from_cnf (int16_t arg1) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
0x00002b5c blmi 0x1315490 | __asm ("blmi 0x1315490");
0x00002b60 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00002b64 mov r4, r0 | r4 = r0;
0x00002b66 add r2, pc | r2 += pc;
0x00002b68 sub sp, 0x14 |
0x00002b6a movs r6, 0 | r6 = 0;
0x00002b6c ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00002b6e ldr r3, [r3] | r3 = *(r3);
0x00002b70 str r3, [sp, 0xc] | var_ch = r3;
0x00002b72 mov.w r3, 0 | r3 = 0;
0x00002b76 str r6, [sp, 4] | var_4h = r6;
0x00002b78 blx 0x157c | fcn_0000157c ();
0x00002b7c cmp r4, 0 |
| if (r4 == 0) {
0x00002b7e beq 0x2c56 | goto label_3;
| }
0x00002b80 mov r7, r0 | r7 = r0;
0x00002b82 add.w sb, sp, 4 | sb += var_4h;
0x00002b86 mov r0, r4 | r0 = r4;
0x00002b88 blx 0x1534 | r0 = keyfile_encode ();
0x00002b8c mov r8, r0 | r8 = r0;
0x00002b8e blx 0x14f8 | g_key_file_new ();
0x00002b92 mov r3, sb | r3 = sb;
0x00002b94 mov r2, r6 | r2 = r6;
0x00002b96 mov r1, r7 | r1 = r7;
0x00002b98 mov r5, r0 | r5 = r0;
0x00002b9a blx 0x1664 | r0 = fcn_00001664 ();
0x00002b9e mov r4, r0 | r4 = r0;
0x00002ba0 cmp r0, 0 |
| if (r0 == 0) {
0x00002ba2 beq 0x2c3e | goto label_4;
| }
0x00002ba4 ldr r1, [pc, 0xec] |
0x00002ba6 mov r3, sb | r3 = sb;
0x00002ba8 mov r2, r8 | r2 = r8;
0x00002baa mov r0, r5 | r0 = r5;
0x00002bac add r1, pc | r1 = 0x5844;
0x00002bae blx 0x151c | r0 = g_key_file_remove_key ();
0x00002bb2 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00002bb4 cbz r0, 0x2c10 | goto label_5;
| }
0x00002bb6 mov r2, r6 | r2 = r6;
0x00002bb8 add r1, sp, 8 | r1 += var_8h;
0x00002bba mov r0, r5 | r0 = r5;
0x00002bbc blx 0x15dc | g_key_file_to_data ();
0x00002bc0 ldr r2, [sp, 8] | r2 = var_8h;
0x00002bc2 mov r4, r0 | r4 = r0;
0x00002bc4 mov r1, r0 | r1 = r0;
0x00002bc6 mov r3, sb | r3 = sb;
0x00002bc8 mov r0, r7 | r0 = r7;
0x00002bca blx 0x161c | r0 = fcn_0000161c ();
0x00002bce cmp r0, 0 |
| if (r0 == 0) {
0x00002bd0 beq 0x2c6a | goto label_6;
| }
0x00002bd2 mov r0, r4 | r0 = r4;
0x00002bd4 mov r4, r6 | r4 = r6;
0x00002bd6 blx 0x1468 | g_free ();
0x00002bda mov r0, r5 | r0 = r5;
0x00002bdc blx 0x16b8 | fcn_000016b8 ();
0x00002be0 mov r0, r6 | r0 = r6;
0x00002be2 blx 0x1468 | g_free ();
0x00002be6 mov r0, r8 | r0 = r8;
0x00002be8 blx 0x1468 | g_free ();
| do {
| label_2:
0x00002bec ldr r0, [sp, 4] | r0 = var_4h;
| if (r0 != 0) {
0x00002bee cbz r0, 0x2bf4 |
0x00002bf0 blx 0x16dc | fcn_000016dc ();
| }
| label_1:
0x00002bf4 ldr r2, [pc, 0xa0] |
0x00002bf6 ldr r3, [pc, 0x98] | r3 = *(0x2c92);
0x00002bf8 add r2, pc | r2 = 0x5894;
0x00002bfa ldr r3, [r2, r3] | r3 = *(0x5894);
0x00002bfc ldr r2, [r3] | r2 = *(0x5894);
0x00002bfe ldr r3, [sp, 0xc] | r3 = var_ch;
0x00002c00 eors r2, r3 | r2 ^= r3;
0x00002c02 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00002c06 bne 0x2c86 | goto label_7;
| }
0x00002c08 mov r0, r4 | r0 = r4;
0x00002c0a add sp, 0x14 |
0x00002c0c pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_5:
0x00002c10 ldr r3, [sp, 4] | r3 = var_4h;
0x00002c12 mov r1, r8 | r1 = r8;
0x00002c14 ldr r0, [pc, 0x84] |
0x00002c16 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00002c18 add r0, pc | r0 = 0x58b8;
0x00002c1a blx 0x1594 | r0 = g_strdup_printf ()
0x00002c1e mov r1, r0 | r1 = r0;
0x00002c20 movs r0, 1 | r0 = 1;
0x00002c22 blx 0x14d4 | fcn_000014d4 ();
| label_0:
0x00002c26 mov r0, r4 | r0 = r4;
0x00002c28 blx 0x1468 | g_free ();
0x00002c2c mov r0, r8 | r0 = r8;
0x00002c2e blx 0x1468 | g_free ();
| if (r5 == 0) {
0x00002c32 cbz r5, 0x2c82 | goto label_8;
| }
0x00002c34 mov r0, r5 | r0 = r5;
0x00002c36 movs r4, 1 | r4 = 1;
0x00002c38 blx 0x16b8 | fcn_000016b8 ();
0x00002c3c b 0x2bec |
| } while (1);
| label_4:
0x00002c3e ldr r3, [sp, 4] | r3 = var_4h;
0x00002c40 mov r1, r7 | r1 = r7;
0x00002c42 ldr r0, [pc, 0x5c] |
0x00002c44 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00002c46 add r0, pc | r0 = 0x58ec;
0x00002c48 blx 0x1594 | r0 = g_strdup_printf ()
0x00002c4c mov r1, r0 | r1 = r0;
0x00002c4e movs r0, 1 | r0 = 1;
0x00002c50 blx 0x14d4 | fcn_000014d4 ();
0x00002c54 b 0x2c26 | goto label_0;
| label_3:
0x00002c56 ldr r1, [pc, 0x4c] |
0x00002c58 mov r0, r4 | r0 = r4;
0x00002c5a ldr r2, [pc, 0x4c] |
0x00002c5c movs r4, 1 | r4 = 1;
0x00002c5e add r1, pc | r1 = 0x5908;
0x00002c60 add r2, pc | r2 = 0x590e;
0x00002c62 adds r1, 0xc4 | r1 += 0xc4;
0x00002c64 blx 0x15f8 | fcn_000015f8 ();
0x00002c68 b 0x2bf4 | goto label_1;
| label_6:
0x00002c6a ldr r3, [sp, 4] | r3 = var_4h;
0x00002c6c mov r1, r7 | r1 = r7;
0x00002c6e ldr r0, [pc, 0x3c] |
0x00002c70 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00002c72 add r0, pc | r0 = 0x5924;
0x00002c74 blx 0x1594 | r0 = g_strdup_printf ()
0x00002c78 mov r1, r0 | r1 = r0;
0x00002c7a movs r0, 1 | r0 = 1;
0x00002c7c blx 0x14d4 | fcn_000014d4 ();
0x00002c80 b 0x2c26 | goto label_0;
| label_8:
0x00002c82 movs r4, 1 | r4 = 1;
0x00002c84 b 0x2bec | goto label_2;
| label_7:
0x00002c86 blx 0x1670 | fcn_00001670 ();
0x00002c8a nop |
0x00002c8c movs r3, 0x7a | r3 = 0x7a;
0x00002c8e movs r1, r0 | r1 = r0;
0x00002c90 lsls r4, r2, 4 | r4 = r2 << 4;
0x00002c92 movs r0, r0 |
0x00002c94 lsrs r4, r4, 0xa | r4 >>= 0xa;
0x00002c96 movs r0, r0 |
0x00002c98 movs r2, 0xe8 | r2 = 0xe8;
0x00002c9a movs r1, r0 | r1 = r0;
0x00002c9c lsrs r4, r6, 0x13 | r4 = r6 >> 0x13;
0x00002c9e movs r0, r0 |
0x00002ca0 lsrs r2, r0, 0x10 | r2 = r0 >> 0x10;
0x00002ca2 movs r0, r0 |
0x00002ca4 lsrs r6, r4, 0x1e | r6 = r4 >> 0x1e;
0x00002ca6 movs r0, r0 |
0x00002ca8 lsrs r4, r6, 6 | r4 = r6 >> 6;
0x00002caa movs r0, r0 |
0x00002cac lsrs r6, r7, 0xe | r6 = r7 >> 0xe;
0x00002cae movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libcertutil.so.1.0 @ 0x23ac */
| #include <stdint.h>
|
; (fcn) sym.cert_util_remove_cert_from_properties () | void cert_util_remove_cert_from_properties (int16_t arg1) {
| int16_t var_4h;
| int16_t var_b0h;
| int16_t var_ch;
| r0 = arg1;
0x000023ac blmi 0xf94ca8 | __asm ("blmi 0xf94ca8");
0x000023b0 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x000023b4 mov r4, r0 | r4 = r0;
0x000023b6 add r2, pc | r2 += pc;
0x000023b8 sub sp, 0x14 |
0x000023ba movs r5, 0 | r5 = 0;
0x000023bc ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000023be ldr r3, [r3] | r3 = *(r3);
0x000023c0 str r3, [sp, 0xc] | var_ch = r3;
0x000023c2 mov.w r3, 0 | r3 = 0;
0x000023c6 str r5, [sp, 4] | var_4h = r5;
0x000023c8 blx 0x14a4 | fcn_000014a4 ();
0x000023cc cmp r4, 0 |
| if (r4 == 0) {
0x000023ce beq 0x247e | goto label_2;
| }
0x000023d0 mov r6, r0 | r6 = r0;
0x000023d2 add.w sb, sp, 4 | sb += var_4h;
0x000023d6 mov r0, r4 | r0 = r4;
0x000023d8 blx 0x1534 | r0 = keyfile_encode ();
0x000023dc mov r8, r0 | r8 = r0;
0x000023de blx 0x14f8 | g_key_file_new ();
0x000023e2 mov r3, sb | r3 = sb;
0x000023e4 mov r2, r5 | r2 = r5;
0x000023e6 mov r1, r6 | r1 = r6;
0x000023e8 mov r7, r0 | r7 = r0;
0x000023ea blx 0x1664 | r0 = fcn_00001664 ();
0x000023ee mov r4, r0 | r4 = r0;
0x000023f0 cmp r0, 0 |
| if (r0 == 0) {
0x000023f2 beq 0x2472 | goto label_3;
| }
0x000023f4 mov r2, sb | r2 = sb;
0x000023f6 mov r1, r8 | r1 = r8;
0x000023f8 mov r0, r7 | r0 = r7;
0x000023fa blx 0x1588 | r0 = g_key_file_remove_group ();
0x000023fe mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00002400 cbz r0, 0x2458 | goto label_4;
| }
0x00002402 mov r2, r5 | r2 = r5;
0x00002404 add r1, sp, 8 | r1 += var_b0h;
0x00002406 mov r0, r7 | r0 = r7;
0x00002408 blx 0x15dc | g_key_file_to_data ();
0x0000240c ldr r2, [sp, 8] | r2 = var_b0h;
0x0000240e mov r4, r0 | r4 = r0;
0x00002410 mov r1, r0 | r1 = r0;
0x00002412 mov r3, sb | r3 = sb;
0x00002414 mov r0, r6 | r0 = r6;
0x00002416 blx 0x161c | r0 = fcn_0000161c ();
0x0000241a cmp r0, 0 |
| if (r0 == 0) {
0x0000241c beq 0x2492 | goto label_5;
| }
| do {
0x0000241e mov r0, r4 | r0 = r4;
0x00002420 blx 0x1468 | g_free ();
0x00002424 mov r0, r7 | r0 = r7;
0x00002426 blx 0x16b8 | fcn_000016b8 ();
0x0000242a ldr r0, [sp, 4] | r0 = var_4h;
| if (r0 != 0) {
0x0000242c cbz r0, 0x2436 |
0x0000242e blx 0x16dc | fcn_000016dc ();
0x00002432 movs r3, 0 | r3 = 0;
0x00002434 str r3, [sp, 4] | var_4h = r3;
| }
0x00002436 mov r0, r8 | r0 = r8;
0x00002438 blx 0x1468 | g_free ();
| label_1:
0x0000243c ldr r2, [pc, 0x6c] |
0x0000243e ldr r3, [pc, 0x68] | r3 = *(0x24aa);
0x00002440 add r2, pc | r2 = 0x48f0;
0x00002442 ldr r3, [r2, r3] | r3 = *(0x48f0);
0x00002444 ldr r2, [r3] | r2 = *(0x48f0);
0x00002446 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00002448 eors r2, r3 | r2 ^= r3;
0x0000244a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000244e bne 0x249e | goto label_6;
| }
0x00002450 mov r0, r5 | r0 = r5;
0x00002452 add sp, 0x14 |
0x00002454 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_4:
0x00002458 ldr r3, [sp, 4] | r3 = var_4h;
0x0000245a mov r1, r8 | r1 = r8;
0x0000245c ldr r0, [pc, 0x50] |
0x0000245e ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00002460 add r0, pc | r0 = 0x4914;
| label_0:
0x00002462 blx 0x1594 | r0 = g_strdup_printf ()
0x00002466 mov r1, r0 | r1 = r0;
0x00002468 movs r0, 1 | r0 = 1;
0x0000246a movs r5, 1 | r5 = 1;
0x0000246c blx 0x14d4 | fcn_000014d4 ();
0x00002470 b 0x241e |
| } while (1);
| label_3:
0x00002472 ldr r3, [sp, 4] | r3 = var_4h;
0x00002474 mov r1, r6 | r1 = r6;
0x00002476 ldr r0, [pc, 0x3c] |
0x00002478 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0000247a add r0, pc | r0 = 0x4934;
0x0000247c b 0x2462 | goto label_0;
| label_2:
0x0000247e ldr r1, [pc, 0x38] |
0x00002480 mov r0, r4 | r0 = r4;
0x00002482 ldr r2, [pc, 0x38] |
0x00002484 movs r5, 1 | r5 = 1;
0x00002486 add r1, pc | r1 = 0x4944;
0x00002488 add r2, pc | r2 = 0x494a;
0x0000248a adds r1, 0x80 | r1 += 0x80;
0x0000248c blx 0x15f8 | fcn_000015f8 ();
0x00002490 b 0x243c | goto label_1;
| label_5:
0x00002492 ldr r3, [sp, 4] | r3 = var_4h;
0x00002494 mov r1, r6 | r1 = r6;
0x00002496 ldr r0, [pc, 0x28] |
0x00002498 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0000249a add r0, pc | r0 = 0x4960;
0x0000249c b 0x2462 | goto label_0;
| label_6:
0x0000249e blx 0x1670 | fcn_00001670 ();
0x000024a2 nop |
0x000024a4 cmp r3, 0x2a |
0x000024a6 movs r1, r0 | r1 = r0;
0x000024a8 lsls r4, r2, 4 | r4 = r2 << 4;
0x000024aa movs r0, r0 |
0x000024ac cmp r2, 0xa0 |
0x000024ae movs r1, r0 | r1 = r0;
0x000024b0 asrs r4, r0, 0x10 | r4 = r0 >> 0x10;
0x000024b2 movs r0, r0 |
0x000024b4 asrs r6, r1, 0xf | r6 = r1 >> 0xf;
0x000024b6 movs r0, r0 |
0x000024b8 asrs r6, r7, 0x1d | r6 = r7 >> 0x1d;
0x000024ba movs r0, r0 |
0x000024bc asrs r4, r1, 6 | r4 = r1 >> 6;
0x000024be movs r0, r0 |
0x000024c0 asrs r6, r2, 0xe | r6 = r2 >> 0xe;
0x000024c2 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libcertutil.so.1.0 @ 0x1cc0 */
| #include <stdint.h>
|
; (fcn) sym.cert_util_set_properties () | void cert_util_set_properties (int16_t arg_f0h, int16_t arg_f4h, int16_t arg_f8h, int16_t arg_fch, int16_t arg_100h, int16_t arg_104h, int16_t arg_108h, int16_t arg_10ch, int16_t arg_110h, int16_t arg_114h, int16_t arg_118h, int16_t arg_11ch, int16_t arg_120h, int16_t arg_124h, int16_t arg_128h, int16_t arg_12ch, int16_t arg_130h, int16_t arg_134h, int16_t arg_138h, int16_t arg_13ch, int16_t arg_140h, int16_t arg_144h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_ch_2;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_9ch;
| int16_t var_a0h;
| int16_t var_a4h;
| int16_t var_a8h;
| int16_t var_ach;
| int16_t var_b0h;
| int16_t var_b4h;
| int16_t var_b8h;
| int16_t var_bch;
| int16_t var_c0h;
| int16_t var_c4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00001cc0 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00001cc4 sub sp, 0xcc |
0x00001cc6 str r2, [sp, 8] | var_8h = r2;
0x00001cc8 movs r5, 0 | r5 = 0;
0x00001cca mov r6, r0 | r6 = r0;
0x00001ccc ldr.w r2, [pc, 0x5d0] | r2 = *(0x000022a0);
0x00001cd0 str r3, [sp, 0x30] | var_30h = r3;
0x00001cd2 ldr r4, [sp, 0xf0] | r4 = *(arg_f0h);
0x00001cd4 ldr.w r3, [pc, 0x5cc] |
0x00001cd8 add r2, pc | r2 += pc;
0x00001cda str r0, [sp, 0x28] | var_28h = r0;
0x00001cdc str r4, [sp, 0x34] | var_34h = r4;
0x00001cde str r1, [sp, 0x2c] | var_2ch = r1;
0x00001ce0 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00001ce2 ldr.w r4, [pc, 0x5c4] | r4 = *(0x000022a8);
0x00001ce6 ldr r3, [r3] | r3 = *(0x22a4);
0x00001ce8 str r3, [sp, 0xc4] | var_c4h = r3;
0x00001cea mov.w r3, 0 | r3 = 0;
0x00001cee ldr r3, [sp, 0xf4] | r3 = *(arg_f4h);
0x00001cf0 str r5, [sp, 0x80] | var_80h = r5;
0x00001cf2 add r4, pc | r4 += pc;
0x00001cf4 str r3, [sp, 0x38] | var_38h = r3;
0x00001cf6 ldr r3, [sp, 0xf8] | r3 = *(arg_f8h);
0x00001cf8 str r3, [sp, 0x3c] | var_3ch = r3;
0x00001cfa ldr r3, [sp, 0xfc] | r3 = *(arg_fch);
0x00001cfc str r3, [sp, 0x40] | var_40h = r3;
0x00001cfe ldr r3, [sp, 0x100] | r3 = *(arg_100h);
0x00001d00 str r3, [sp, 0x44] | var_44h = r3;
0x00001d02 ldr r3, [sp, 0x104] | r3 = *(arg_104h);
0x00001d04 str r3, [sp, 0x48] | var_48h = r3;
0x00001d06 ldr r3, [sp, 0x108] | r3 = *(arg_108h);
0x00001d08 str r3, [sp, 0x4c] | var_4ch = r3;
0x00001d0a ldr r3, [sp, 0x10c] | r3 = *(arg_10ch);
0x00001d0c str r3, [sp, 0x50] | var_50h = r3;
0x00001d0e ldr r3, [sp, 0x110] | r3 = *(arg_110h);
0x00001d10 str r3, [sp, 0x54] | var_54h = r3;
0x00001d12 ldr r3, [sp, 0x114] | r3 = *(arg_114h);
0x00001d14 str r3, [sp, 0x58] | var_58h = r3;
0x00001d16 ldr r3, [sp, 0x118] | r3 = *(arg_118h);
0x00001d18 str r3, [sp, 0xc] | var_ch = r3;
0x00001d1a ldr r3, [sp, 0x11c] | r3 = *(arg_11ch);
0x00001d1c str r3, [sp, 0x10] | var_10h = r3;
0x00001d1e ldr r3, [sp, 0x120] | r3 = *(arg_120h);
0x00001d20 str r3, [sp, 0x14] | var_14h = r3;
0x00001d22 ldr r3, [sp, 0x124] | r3 = *(arg_124h);
0x00001d24 str r3, [sp, 0x18] | var_18h = r3;
0x00001d26 ldr r3, [sp, 0x128] | r3 = *(arg_128h);
0x00001d28 str r3, [sp, 0x1c] | var_1ch = r3;
0x00001d2a ldr r3, [sp, 0x12c] | r3 = *(arg_12ch);
0x00001d2c str r3, [sp, 0x20] | var_20h = r3;
0x00001d2e ldr r3, [sp, 0x130] | r3 = *(arg_130h);
0x00001d30 str r3, [sp, 0x5c] | var_5ch = r3;
0x00001d32 ldr r3, [sp, 0x134] | r3 = *(arg_134h);
0x00001d34 str r3, [sp, 0x60] | var_60h = r3;
0x00001d36 ldr r3, [sp, 0x138] | r3 = *(arg_138h);
0x00001d38 str r3, [sp, 0x64] | var_64h = r3;
0x00001d3a ldr r3, [sp, 0x13c] | r3 = *(arg_13ch);
0x00001d3c str r3, [sp, 0x68] | var_68h = r3;
0x00001d3e ldr r3, [sp, 0x140] | r3 = *(arg_140h);
0x00001d40 str r3, [sp, 0x6c] | var_6ch = r3;
0x00001d42 ldr r3, [sp, 0x144] | r3 = *(arg_144h);
0x00001d44 str r3, [sp, 0x74] | var_74h = r3;
0x00001d46 blx 0x14a4 | fcn_000014a4 ();
0x00001d4a str r0, [sp, 0x24] | var_24h = r0;
0x00001d4c cmp r6, 0 |
| if (r6 == 0) {
0x00001d4e beq.w 0x1f00 | goto label_28;
| }
0x00001d52 mov r1, r0 | r1 = r0;
0x00001d54 add r0, sp, 0x84 | r0 += var_84h;
0x00001d56 blx 0x14e0 | r0 = fcn_000014e0 ();
0x00001d5a mov fp, r0 |
| if (r0 != 0) {
0x00001d5c cbz r0, 0x1d98 |
0x00001d5e mov r0, r5 | r0 = r5;
0x00001d60 mov.w fp, 1 |
0x00001d64 blx 0x1468 | g_free ();
0x00001d68 mov r0, r5 | r0 = r5;
0x00001d6a blx 0x1468 | g_free ();
0x00001d6e ldr r0, [sp, 0x80] | r0 = var_80h;
| if (r0 != 0) {
0x00001d70 cbz r0, 0x1d76 |
0x00001d72 blx 0x16dc | fcn_000016dc ();
| }
| label_0:
0x00001d76 ldr.w r2, [pc, 0x534] | r2 = *(0x000022ac);
0x00001d7a ldr.w r3, [pc, 0x528] | r3 = *(0x22a6);
0x00001d7e add r2, pc | r2 += pc;
0x00001d80 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00001d82 ldr r2, [r3] | r2 = *(0x22a6);
0x00001d84 ldr r3, [sp, 0xc4] | r3 = var_c4h;
0x00001d86 eors r2, r3 | r2 ^= r3;
0x00001d88 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00001d8c bne.w 0x229a | goto label_29;
| }
0x00001d90 mov r0, fp | r0 = fp;
0x00001d92 add sp, 0xcc |
0x00001d94 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00001d98 add r6, sp, 0x80 | r6 += var_80h;
0x00001d9a str r6, [sp, 0x78] | var_78h = r6;
0x00001d9c blx 0x14f8 | g_key_file_new ();
0x00001da0 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00001da2 mov r3, r6 | r3 = r6;
0x00001da4 movs r2, 1 | r2 = 1;
0x00001da6 mov r7, r0 | r7 = r0;
0x00001da8 blx 0x1664 | fcn_00001664 ();
0x00001dac ldr.w r8, [sp, 0x80] | r8 = var_80h;
0x00001db0 cmp.w r8, 0 |
| if (r8 != 0) {
0x00001db4 beq 0x1dd6 |
0x00001db6 ldr.w r6, [r8, 8] | r6 = *((r8 + 8));
0x00001dba ldr.w r1, [pc, 0x4f4] |
0x00001dbe mov r0, r6 | r0 = r6;
0x00001dc0 add r1, pc | r1 = 0x4076;
0x00001dc2 blx 0x1730 | r0 = fcn_00001730 ();
0x00001dc6 cmp r0, 0 |
| if (r0 != 0) {
0x00001dc8 bne.w 0x21ac | goto label_30;
| }
0x00001dcc mov r0, r8 | r0 = r8;
0x00001dce blx 0x16dc | fcn_000016dc ();
0x00001dd2 str.w fp, [sp, 0x80] | __asm ("str.w fp, [var_80h]");
| }
0x00001dd6 ldr r3, [sp, 8] | r3 = var_8h;
0x00001dd8 movs r1, 0 | r1 = 0;
0x00001dda mov r0, r7 | r0 = r7;
0x00001ddc str r3, [sp, 0xa8] | var_a8h = r3;
0x00001dde ldr r3, [sp, 0xc] | r3 = var_ch;
0x00001de0 str r3, [sp, 0xac] | var_ach = r3;
0x00001de2 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00001de4 str r3, [sp, 0xb0] | var_b0h = r3;
0x00001de6 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00001de8 str r3, [sp, 0xb4] | var_b4h = r3;
0x00001dea ldr r3, [sp, 0x18] | r3 = var_18h;
0x00001dec str r3, [sp, 0xb8] | var_b8h = r3;
0x00001dee ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00001df0 str r3, [sp, 0xbc] | var_bch = r3;
0x00001df2 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00001df4 str r3, [sp, 0xc0] | var_c0h = r3;
0x00001df6 ldr.w r3, [pc, 0x4bc] |
0x00001dfa add r3, pc | r3 = 0x40b4;
0x00001dfc str r3, [sp, 0x90] | var_90h = r3;
0x00001dfe ldr.w r3, [pc, 0x4b8] |
0x00001e02 add r3, pc | r3 = 0x40c0;
0x00001e04 str r3, [sp, 0x94] | var_94h = r3;
0x00001e06 ldr.w r3, [pc, 0x4b4] |
0x00001e0a add r3, pc | r3 = 0x40cc;
0x00001e0c str r3, [sp, 0x98] | var_98h = r3;
0x00001e0e ldr.w r3, [pc, 0x4b0] |
0x00001e12 add r3, pc | r3 = 0x40d8;
0x00001e14 str r3, [sp, 0x9c] | var_9ch = r3;
0x00001e16 ldr.w r3, [pc, 0x4ac] |
0x00001e1a add r3, pc | r3 = 0x40e4;
0x00001e1c str r3, [sp, 0xa0] | var_a0h = r3;
0x00001e1e ldr.w r3, [pc, 0x4a8] |
0x00001e22 add r3, pc | r3 = 0x40f0;
0x00001e24 str r3, [sp, 0xa4] | var_a4h = r3;
0x00001e26 blx 0x1658 | r0 = fcn_00001658 ();
0x00001e2a mov r5, r0 | r5 = r0;
0x00001e2c str r0, [sp, 4] | var_4h_2 = r0;
0x00001e2e cmp r0, 0 |
| if (r0 == 0) {
0x00001e30 beq 0x1f16 | goto label_31;
| }
0x00001e32 movs r0, 7 | r0 = 7;
0x00001e34 mov sl, r5 | sl = r5;
0x00001e36 blx 0x1694 | fcn_00001694 ();
0x00001e3a ldr.w r3, [pc, 0x490] | r3 = *(0x22ce);
0x00001e3e mov r6, r0 | r6 = r0;
0x00001e40 ldr r1, [r4, r3] | r1 = *((r4 + r3));
0x00001e42 movs r4, 0 | r4 = 0;
0x00001e44 blx 0x1558 | g_ptr_array_set_free_func ();
0x00001e48 ldr.w r3, [pc, 0x484] |
0x00001e4c str.w fp, [sp, 0x7c] | __asm ("str.w fp, [var_7ch]");
0x00001e50 mov fp, r4 |
0x00001e52 add r3, pc | r3 = 0x4126;
0x00001e54 str r3, [sp, 0x70] | var_70h = r3;
| label_1:
0x00001e56 ldr r0, [sp, 4] | r0 = var_4h_2;
0x00001e58 blx 0x1564 | r0 = g_strv_length ();
0x00001e5c cmp fp, r0 |
| if (fp >= r0) {
0x00001e5e bhs.w 0x217a | goto label_32;
| }
0x00001e62 cmp r4, 0 |
| if (r4 != 0) {
0x00001e64 bne.w 0x228a | goto label_33;
| }
0x00001e68 ldr r3, [sp, 0x70] | r3 = var_70h;
0x00001e6a mov r1, r7 | r1 = r7;
0x00001e6c ldr.w r2, [sl] | r2 = *(sl);
0x00001e70 mov r0, r6 | r0 = r6;
0x00001e72 mov r5, r4 | r5 = r4;
0x00001e74 add.w sb, sp, 0x8c | sb += var_8ch;
0x00001e78 bl 0x1c3c | fcn_00001c3c (r0, r1, r2, r3);
0x00001e7c add.w r8, sp, 0xa8 | r8 += var_a8h;
0x00001e80 mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x00001e82 cbnz r0, 0x1eae | goto label_34;
| }
| do {
0x00001e84 ldr r3, [r6] | r3 = *(r6);
0x00001e86 ldr r0, [r8], 4 | r0 = *(r8);
| r8 += 4;
0x00001e8a ldr r1, [r3, r5] | r1 = *((r3 + r5));
0x00001e8c blx 0x14ec | r0 = g_strcmp0 ();
| if (r0 != 0) {
0x00001e90 cbnz r0, 0x1eec | goto label_35;
| }
0x00001e92 adds r5, 4 | r5 += 4;
0x00001e94 cmp r5, 0x1c |
| if (r5 == 0x1c) {
0x00001e96 beq 0x1eea | goto label_36;
| }
0x00001e98 ldr r3, [sb, 4]! | r3 = var_90h;
0x00001e9c mov r1, r7 | r1 = r7;
0x00001e9e ldr.w r2, [sl] | r2 = *(sl);
0x00001ea2 mov r0, r6 | r0 = r6;
0x00001ea4 bl 0x1c3c | r0 = fcn_00001c3c (r0, r1, r2, r3);
0x00001ea8 mov r4, r0 | r4 = r0;
0x00001eaa cmp r0, 0 |
0x00001eac beq 0x1e84 |
| } while (r0 == 0);
| label_34:
0x00001eae movs r5, 0 | r5 = 0;
0x00001eb0 ldr r0, [sp, 4] | r0 = var_4h_2;
0x00001eb2 mov r4, r5 | r4 = r5;
0x00001eb4 blx 0x16e8 | fcn_000016e8 ();
0x00001eb8 movs r1, 1 | r1 = 1;
0x00001eba mov r0, r6 | r0 = r6;
0x00001ebc mov fp, r1 |
0x00001ebe blx 0x15c4 | g_ptr_array_free ();
| do {
| label_2:
0x00001ec2 mov r0, r4 | r0 = r4;
0x00001ec4 blx 0x1468 | g_free ();
0x00001ec8 mov r0, r5 | r0 = r5;
0x00001eca blx 0x1468 | g_free ();
| if (r7 != 0) {
0x00001ece cbz r7, 0x1ed6 |
0x00001ed0 mov r0, r7 | r0 = r7;
0x00001ed2 blx 0x16b8 | fcn_000016b8 ();
| }
0x00001ed6 ldr r0, [sp, 0x80] | r0 = var_80h;
| if (r0 != 0) {
0x00001ed8 cbz r0, 0x1ee2 |
0x00001eda blx 0x16dc | fcn_000016dc ();
0x00001ede movs r3, 0 | r3 = 0;
0x00001ee0 str r3, [sp, 0x80] | var_80h = r3;
| }
0x00001ee2 ldr r0, [sp, 0x84] | r0 = var_84h;
0x00001ee4 blx 0x164c | fcn_0000164c ();
0x00001ee8 b 0x1d76 | goto label_0;
| label_36:
0x00001eea movs r4, 1 | r4 = 1;
| label_35:
0x00001eec ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x00001eee movs r1, 0 | r1 = 0;
0x00001ef0 mov r0, r6 | r0 = r6;
0x00001ef2 add.w fp, fp, 1 |
0x00001ef6 add.w sl, sl, 4 | sl += var_88h;
0x00001efa blx 0x1540 | g_ptr_array_remove_range ();
0x00001efe b 0x1e56 | goto label_1;
| label_28:
0x00001f00 ldr r1, [pc, 0x3d0] |
0x00001f02 mov.w fp, 1 |
0x00001f06 ldr r2, [pc, 0x3d0] |
0x00001f08 ldr r0, [sp, 0x28] | r0 = var_28h;
0x00001f0a add r1, pc | r1 = 0x41e2;
0x00001f0c add r2, pc | r2 = 0x41ea;
0x00001f0e adds r1, 0x64 | r1 += 0x64;
0x00001f10 blx 0x15f8 | fcn_000015f8 ();
0x00001f14 b 0x1d76 | goto label_0;
| label_31:
0x00001f16 blx 0x16e8 | fcn_000016e8 ();
0x00001f1a ldr r0, [sp, 4] | r0 = var_4h_2;
0x00001f1c movs r1, 1 | r1 = 1;
0x00001f1e blx 0x15c4 | g_ptr_array_free ();
| label_3:
0x00001f22 ldr r0, [sp, 0x28] | r0 = var_28h;
0x00001f24 blx 0x1534 | keyfile_encode ();
0x00001f28 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00001f2a mov r5, r0 | r5 = r0;
0x00001f2c cmp r3, 0 |
| if (r3 == 0) {
0x00001f2e beq.w 0x2282 | goto label_37;
| }
| label_27:
0x00001f32 ldr r2, [pc, 0x3a8] |
0x00001f34 mov r1, r5 | r1 = r5;
0x00001f36 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00001f38 mov r0, r7 | r0 = r7;
0x00001f3a add r2, pc | r2 = 0x421c;
0x00001f3c blx 0x1510 | g_key_file_set_string ();
0x00001f40 ldr r3, [sp, 8] | r3 = var_8h;
0x00001f42 cmp r3, 0 |
| if (r3 == 0) {
0x00001f44 beq.w 0x227a | goto label_38;
| }
| label_26:
0x00001f48 ldr r2, [pc, 0x394] |
0x00001f4a mov r1, r5 | r1 = r5;
0x00001f4c ldr r3, [sp, 8] | r3 = var_8h;
0x00001f4e mov r0, r7 | r0 = r7;
0x00001f50 add r2, pc | r2 = 0x4234;
0x00001f52 blx 0x1510 | g_key_file_set_string ();
0x00001f56 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00001f58 cmp r3, 0 |
| if (r3 == 0) {
0x00001f5a beq.w 0x2272 | goto label_39;
| }
| label_25:
0x00001f5e ldr r2, [pc, 0x384] |
0x00001f60 mov r1, r5 | r1 = r5;
0x00001f62 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00001f64 mov r0, r7 | r0 = r7;
0x00001f66 add r2, pc | r2 = 0x4250;
0x00001f68 blx 0x1510 | g_key_file_set_string ();
0x00001f6c ldr r3, [sp, 0x34] | r3 = var_34h;
0x00001f6e cmp r3, 0 |
| if (r3 == 0) {
0x00001f70 beq.w 0x226a | goto label_40;
| }
| label_24:
0x00001f74 ldr r2, [pc, 0x370] |
0x00001f76 mov r1, r5 | r1 = r5;
0x00001f78 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00001f7a mov r0, r7 | r0 = r7;
0x00001f7c add r2, pc | r2 = 0x4268;
0x00001f7e blx 0x1510 | g_key_file_set_string ();
0x00001f82 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00001f84 cmp r3, 0 |
| if (r3 == 0) {
0x00001f86 beq.w 0x2262 | goto label_41;
| }
| label_23:
0x00001f8a ldr r2, [pc, 0x360] |
0x00001f8c mov r1, r5 | r1 = r5;
0x00001f8e ldr r3, [sp, 0x38] | r3 = var_38h;
0x00001f90 mov r0, r7 | r0 = r7;
0x00001f92 add r2, pc | r2 = 0x4284;
0x00001f94 blx 0x1510 | g_key_file_set_string ();
0x00001f98 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00001f9a cmp r3, 0 |
| if (r3 == 0) {
0x00001f9c beq.w 0x225a | goto label_42;
| }
| label_22:
0x00001fa0 ldr r2, [pc, 0x34c] |
0x00001fa2 mov r1, r5 | r1 = r5;
0x00001fa4 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00001fa6 mov r0, r7 | r0 = r7;
0x00001fa8 add r2, pc | r2 = 0x429c;
0x00001faa blx 0x1510 | g_key_file_set_string ();
0x00001fae ldr r3, [sp, 0x40] | r3 = var_40h;
0x00001fb0 cmp r3, 0 |
| if (r3 == 0) {
0x00001fb2 beq.w 0x2252 | goto label_43;
| }
| label_21:
0x00001fb6 ldr r2, [pc, 0x33c] |
0x00001fb8 mov r1, r5 | r1 = r5;
0x00001fba ldr r3, [sp, 0x40] | r3 = var_40h;
0x00001fbc mov r0, r7 | r0 = r7;
0x00001fbe add r2, pc | r2 = 0x42b8;
0x00001fc0 blx 0x1510 | g_key_file_set_string ();
0x00001fc4 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00001fc6 cmp r3, 0 |
| if (r3 == 0) {
0x00001fc8 beq.w 0x224a | goto label_44;
| }
| label_20:
0x00001fcc ldr r2, [pc, 0x328] |
0x00001fce mov r1, r5 | r1 = r5;
0x00001fd0 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00001fd2 mov r0, r7 | r0 = r7;
0x00001fd4 add r2, pc | r2 = 0x42d0;
0x00001fd6 blx 0x1510 | g_key_file_set_string ();
0x00001fda ldr r3, [sp, 0x48] | r3 = var_48h;
0x00001fdc cmp r3, 0 |
| if (r3 == 0) {
0x00001fde beq.w 0x2242 | goto label_45;
| }
| label_19:
0x00001fe2 ldr r2, [pc, 0x318] |
0x00001fe4 mov r1, r5 | r1 = r5;
0x00001fe6 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00001fe8 mov r0, r7 | r0 = r7;
0x00001fea add r2, pc | r2 = 0x42ec;
0x00001fec blx 0x1510 | g_key_file_set_string ();
0x00001ff0 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00001ff2 cmp r3, 0 |
| if (r3 == 0) {
0x00001ff4 beq.w 0x223a | goto label_46;
| }
| label_18:
0x00001ff8 ldr r2, [pc, 0x304] |
0x00001ffa mov r1, r5 | r1 = r5;
0x00001ffc ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00001ffe mov r0, r7 | r0 = r7;
0x00002000 add r2, pc | r2 = 0x4304;
0x00002002 blx 0x1510 | g_key_file_set_string ();
0x00002006 ldr r3, [sp, 0x50] | r3 = var_50h;
0x00002008 cmp r3, 0 |
| if (r3 == 0) {
0x0000200a beq.w 0x2232 | goto label_47;
| }
| label_17:
0x0000200e ldr r2, [pc, 0x2f4] |
0x00002010 mov r1, r5 | r1 = r5;
0x00002012 ldr r3, [sp, 0x50] | r3 = var_50h;
0x00002014 mov r0, r7 | r0 = r7;
0x00002016 add r2, pc | r2 = 0x4320;
0x00002018 blx 0x1510 | g_key_file_set_string ();
0x0000201c ldr r3, [sp, 0x54] | r3 = var_54h;
0x0000201e cmp r3, 0 |
| if (r3 == 0) {
0x00002020 beq.w 0x222a | goto label_48;
| }
| label_16:
0x00002024 ldr r2, [pc, 0x2e0] |
0x00002026 mov r1, r5 | r1 = r5;
0x00002028 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0000202a mov r0, r7 | r0 = r7;
0x0000202c add r2, pc | r2 = 0x4338;
0x0000202e blx 0x1510 | g_key_file_set_string ();
0x00002032 ldr r3, [sp, 0x58] | r3 = var_58h;
0x00002034 cmp r3, 0 |
| if (r3 == 0) {
0x00002036 beq.w 0x2222 | goto label_49;
| }
0x00002038 strh r4, [r6, 6] | *((r6 + 6)) = r4;
| label_15:
0x0000203a ldr r2, [pc, 0x2d0] |
0x0000203c mov r1, r5 | r1 = r5;
0x0000203e ldr r3, [sp, 0x58] | r3 = var_58h;
0x00002040 mov r0, r7 | r0 = r7;
0x00002042 add r2, pc | r2 = 0x4354;
0x00002044 blx 0x1510 | g_key_file_set_string ();
0x00002048 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0000204a cmp r3, 0 |
| if (r3 == 0) {
0x0000204c beq.w 0x221a | goto label_50;
| }
| label_14:
0x00002050 ldr r2, [pc, 0x2bc] |
0x00002052 mov r1, r5 | r1 = r5;
0x00002054 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00002056 mov r0, r7 | r0 = r7;
0x00002058 add r2, pc | r2 = 0x436c;
0x0000205a blx 0x1510 | g_key_file_set_string ();
0x0000205e ldr r3, [sp, 0x10] | r3 = var_10h;
0x00002060 cmp r3, 0 |
| if (r3 == 0) {
0x00002062 beq.w 0x2212 | goto label_51;
| }
| label_13:
0x00002066 ldr r2, [pc, 0x2ac] |
0x00002068 mov r1, r5 | r1 = r5;
0x0000206a ldr r3, [sp, 0x10] | r3 = var_10h;
0x0000206c mov r0, r7 | r0 = r7;
0x0000206e add r2, pc | r2 = 0x4388;
0x00002070 blx 0x1510 | g_key_file_set_string ();
0x00002074 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00002076 cmp r3, 0 |
| if (r3 == 0) {
0x00002078 beq.w 0x220a | goto label_52;
| }
| label_12:
0x0000207c ldr r2, [pc, 0x298] |
0x0000207e mov r1, r5 | r1 = r5;
0x00002080 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00002082 mov r0, r7 | r0 = r7;
0x00002084 add r2, pc | r2 = 0x43a0;
0x00002086 blx 0x1510 | g_key_file_set_string ();
0x0000208a ldr r3, [sp, 0x18] | r3 = var_18h;
0x0000208c cmp r3, 0 |
| if (r3 == 0) {
0x0000208e beq.w 0x2202 | goto label_53;
| }
| label_11:
0x00002092 ldr r2, [pc, 0x288] |
0x00002094 mov r1, r5 | r1 = r5;
0x00002096 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00002098 mov r0, r7 | r0 = r7;
0x0000209a add r2, pc | r2 = 0x43bc;
0x0000209c blx 0x1510 | g_key_file_set_string ();
0x000020a0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000020a2 cmp r3, 0 |
| if (r3 == 0) {
0x000020a4 beq.w 0x21fa | goto label_54;
| }
| label_10:
0x000020a8 ldr r2, [pc, 0x274] |
0x000020aa mov r1, r5 | r1 = r5;
0x000020ac ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000020ae mov r0, r7 | r0 = r7;
0x000020b0 add r2, pc | r2 = 0x43d4;
0x000020b2 blx 0x1510 | g_key_file_set_string ();
0x000020b6 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000020b8 cmp r3, 0 |
| if (r3 == 0) {
0x000020ba beq.w 0x21f2 | goto label_55;
| }
| label_9:
0x000020be ldr r2, [pc, 0x264] |
0x000020c0 mov r1, r5 | r1 = r5;
0x000020c2 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000020c4 mov r0, r7 | r0 = r7;
0x000020c6 add r2, pc | r2 = 0x43f0;
0x000020c8 blx 0x1510 | g_key_file_set_string ();
0x000020cc ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000020ce cmp r3, 0 |
| if (r3 == 0) {
0x000020d0 beq.w 0x21ea | goto label_56;
| }
| label_8:
0x000020d4 ldr r2, [pc, 0x250] |
0x000020d6 mov r1, r5 | r1 = r5;
0x000020d8 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000020da mov r0, r7 | r0 = r7;
0x000020dc add r2, pc | r2 = 0x4408;
0x000020de blx 0x1510 | g_key_file_set_string ();
0x000020e2 ldr r3, [sp, 0x60] | r3 = var_60h;
0x000020e4 cmp r3, 0 |
| if (r3 == 0) {
0x000020e6 beq 0x21e2 | goto label_57;
| }
| label_7:
0x000020e8 ldr r2, [pc, 0x240] |
0x000020ea mov r1, r5 | r1 = r5;
0x000020ec ldr r3, [sp, 0x60] | r3 = var_60h;
0x000020ee mov r0, r7 | r0 = r7;
0x000020f0 add r2, pc | r2 = 0x4420;
0x000020f2 blx 0x1510 | g_key_file_set_string ();
0x000020f6 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000020f8 cmp r3, 0 |
| if (r3 == 0) {
0x000020fa beq 0x21da | goto label_58;
| }
| label_6:
0x000020fc ldr r2, [pc, 0x230] |
0x000020fe mov r1, r5 | r1 = r5;
0x00002100 ldr r3, [sp, 0x64] | r3 = var_64h;
0x00002102 mov r0, r7 | r0 = r7;
0x00002104 add r2, pc | r2 = 0x4438;
0x00002106 blx 0x1510 | g_key_file_set_string ();
0x0000210a ldr r3, [sp, 0x68] | r3 = var_68h;
0x0000210c cmp r3, 0 |
| if (r3 == 0) {
0x0000210e beq 0x21d2 | goto label_59;
| }
| label_5:
0x00002110 ldr r2, [pc, 0x220] |
0x00002112 mov r1, r5 | r1 = r5;
0x00002114 ldr r3, [sp, 0x68] | r3 = var_68h;
0x00002116 mov r0, r7 | r0 = r7;
0x00002118 add r2, pc | r2 = 0x4450;
0x0000211a blx 0x1510 | g_key_file_set_string ();
0x0000211e ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x00002120 cmp r3, 0 |
| if (r3 == 0) {
0x00002122 beq 0x21ca | goto label_60;
| }
| label_4:
0x00002124 ldr r2, [pc, 0x210] |
0x00002126 mov r1, r5 | r1 = r5;
0x00002128 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0000212a mov r0, r7 | r0 = r7;
0x0000212c add r2, pc | r2 = 0x4468;
0x0000212e blx 0x1510 | g_key_file_set_string ();
0x00002132 ldr r2, [pc, 0x208] |
0x00002134 mov r1, r5 | r1 = r5;
0x00002136 ldr r3, [sp, 0x74] | r3 = var_74h;
0x00002138 mov r0, r7 | r0 = r7;
0x0000213a add r2, pc | r2 = 0x447c;
0x0000213c blx 0x1510 | g_key_file_set_string ();
0x00002140 movs r2, 0 | r2 = 0;
0x00002142 add r1, sp, 0x88 | r1 += var_88h;
0x00002144 mov r0, r7 | r0 = r7;
0x00002146 blx 0x15dc | g_key_file_to_data ();
0x0000214a ldr r3, [sp, 0x78] | r3 = var_78h;
0x0000214c mov r4, r0 | r4 = r0;
0x0000214e mov r1, r0 | r1 = r0;
0x00002150 ldr r2, [sp, 0x88] | r2 = var_88h;
0x00002152 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00002154 blx 0x161c | r0 = fcn_0000161c ();
0x00002158 cmp r0, 0 |
0x0000215a bne.w 0x1ec2 |
| } while (r0 != 0);
0x0000215e ldr r3, [sp, 0x80] | r3 = var_80h;
0x00002160 mov.w fp, 1 |
0x00002164 ldr r0, [pc, 0x1d8] |
0x00002166 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00002168 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0000216a add r0, pc | r0 = 0x44ae;
0x0000216c blx 0x1594 | r0 = g_strdup_printf ()
0x00002170 mov r1, r0 | r1 = r0;
0x00002172 movs r0, 1 | r0 = 1;
0x00002174 blx 0x14d4 | fcn_000014d4 ();
0x00002178 b 0x1ec2 | goto label_2;
| label_32:
0x0000217a ldr r0, [sp, 4] | r0 = var_4h_2;
0x0000217c ldr.w fp, [sp, 0x7c] | fp = var_7ch;
0x00002180 blx 0x16e8 | fcn_000016e8 ();
0x00002184 mov r0, r6 | r0 = r6;
0x00002186 movs r1, 1 | r1 = 1;
0x00002188 blx 0x15c4 | g_ptr_array_free ();
0x0000218c cmp r4, 0 |
| if (r4 == 0) {
0x0000218e beq.w 0x1f22 | goto label_3;
| }
| do {
0x00002192 ldr r0, [pc, 0x1b0] |
0x00002194 movs r5, 0 | r5 = 0;
0x00002196 mov.w fp, 1 |
0x0000219a mov r4, r5 | r4 = r5;
0x0000219c add r0, pc | r0 = 0x44e6;
0x0000219e blx 0x1594 | r0 = g_strdup_printf ()
0x000021a2 mov r1, r0 | r1 = r0;
0x000021a4 movs r0, 7 | r0 = 7;
0x000021a6 blx 0x14d4 | fcn_000014d4 ();
0x000021aa b 0x1ec2 | goto label_2;
| label_30:
0x000021ac ldr r0, [pc, 0x198] |
0x000021ae mov r3, r6 | r3 = r6;
0x000021b0 ldr.w r2, [r8, 4] | r2 = *((r8 + 4));
0x000021b4 mov r4, r5 | r4 = r5;
0x000021b6 ldr r1, [sp, 0x24] | r1 = var_24h;
0x000021b8 add r0, pc | r0 = 0x4504;
0x000021ba blx 0x1594 | r0 = g_strdup_printf ()
0x000021be mov r1, r0 | r1 = r0;
0x000021c0 movs r0, 1 | r0 = 1;
0x000021c2 mov fp, r0 |
0x000021c4 blx 0x14d4 | fcn_000014d4 ();
0x000021c8 b 0x1ec2 | goto label_2;
| label_60:
0x000021ca ldr r3, [pc, 0x180] |
0x000021cc add r3, pc | r3 = 0x451e;
0x000021ce str r3, [sp, 0x6c] | var_6ch = r3;
0x000021d0 b 0x2124 | goto label_4;
| label_59:
0x000021d2 ldr r3, [pc, 0x17c] |
0x000021d4 add r3, pc | r3 = 0x452a;
0x000021d6 str r3, [sp, 0x68] | var_68h = r3;
0x000021d8 b 0x2110 | goto label_5;
| label_58:
0x000021da ldr r3, [pc, 0x178] |
0x000021dc add r3, pc | r3 = 0x4536;
0x000021de str r3, [sp, 0x64] | var_64h = r3;
0x000021e0 b 0x20fc | goto label_6;
| label_57:
0x000021e2 ldr r3, [pc, 0x174] |
0x000021e4 add r3, pc | r3 = 0x4542;
0x000021e6 str r3, [sp, 0x60] | var_60h = r3;
0x000021e8 b 0x20e8 | goto label_7;
| label_56:
0x000021ea ldr r3, [pc, 0x170] |
0x000021ec add r3, pc | r3 = 0x454e;
0x000021ee str r3, [sp, 0x5c] | var_5ch = r3;
0x000021f0 b 0x20d4 | goto label_8;
| label_55:
0x000021f2 ldr r3, [pc, 0x16c] |
0x000021f4 add r3, pc | r3 = 0x455a;
0x000021f6 str r3, [sp, 0x20] | var_20h = r3;
0x000021f8 b 0x20be | goto label_9;
| label_54:
0x000021fa ldr r3, [pc, 0x168] |
0x000021fc add r3, pc | r3 = 0x4566;
0x000021fe str r3, [sp, 0x1c] | var_1ch = r3;
0x00002200 b 0x20a8 | goto label_10;
| label_53:
0x00002202 ldr r3, [pc, 0x164] |
0x00002204 add r3, pc | r3 = 0x4572;
0x00002206 str r3, [sp, 0x18] | var_18h = r3;
0x00002208 b 0x2092 | goto label_11;
| label_52:
0x0000220a ldr r3, [pc, 0x160] |
0x0000220c add r3, pc | r3 = 0x457e;
0x0000220e str r3, [sp, 0x14] | var_14h = r3;
0x00002210 b 0x207c | goto label_12;
| label_51:
0x00002212 ldr r3, [pc, 0x15c] |
0x00002214 add r3, pc | r3 = 0x458a;
0x00002216 str r3, [sp, 0x10] | var_10h = r3;
0x00002218 b 0x2066 | goto label_13;
| label_50:
0x0000221a ldr r3, [pc, 0x158] |
0x0000221c add r3, pc | r3 = 0x4596;
0x0000221e str r3, [sp, 0xc] | var_ch = r3;
0x00002220 b 0x2050 | goto label_14;
| label_49:
0x00002222 ldr r3, [pc, 0x154] |
0x00002224 add r3, pc | r3 = 0x45a2;
0x00002226 str r3, [sp, 0x58] | var_58h = r3;
0x00002228 b 0x203a | goto label_15;
| label_48:
0x0000222a ldr r3, [pc, 0x150] |
0x0000222c add r3, pc | r3 = 0x45ae;
0x0000222e str r3, [sp, 0x54] | var_54h = r3;
0x00002230 b 0x2024 | goto label_16;
| label_47:
0x00002232 ldr r3, [pc, 0x14c] |
0x00002234 add r3, pc | r3 = 0x45ba;
0x00002236 str r3, [sp, 0x50] | var_50h = r3;
0x00002238 b 0x200e | goto label_17;
| label_46:
0x0000223a ldr r3, [pc, 0x148] |
0x0000223c add r3, pc | r3 = 0x45c6;
0x0000223e str r3, [sp, 0x4c] | var_4ch = r3;
0x00002240 b 0x1ff8 | goto label_18;
| label_45:
0x00002242 ldr r3, [pc, 0x144] |
0x00002244 add r3, pc | r3 = 0x45d2;
0x00002246 str r3, [sp, 0x48] | var_48h = r3;
0x00002248 b 0x1fe2 | goto label_19;
| label_44:
0x0000224a ldr r3, [pc, 0x140] |
0x0000224c add r3, pc | r3 = 0x45de;
0x0000224e str r3, [sp, 0x44] | var_44h = r3;
0x00002250 b 0x1fcc | goto label_20;
| label_43:
0x00002252 ldr r3, [pc, 0x13c] |
0x00002254 add r3, pc | r3 = 0x45ea;
0x00002256 str r3, [sp, 0x40] | var_40h = r3;
0x00002258 b 0x1fb6 | goto label_21;
| label_42:
0x0000225a ldr r3, [pc, 0x138] |
0x0000225c add r3, pc | r3 = 0x45f6;
0x0000225e str r3, [sp, 0x3c] | var_3ch = r3;
0x00002260 b 0x1fa0 | goto label_22;
| label_41:
0x00002262 ldr r3, [pc, 0x134] |
0x00002264 add r3, pc | r3 = 0x4602;
0x00002266 str r3, [sp, 0x38] | var_38h = r3;
0x00002268 b 0x1f8a | goto label_23;
| label_40:
0x0000226a ldr r3, [pc, 0x130] |
0x0000226c add r3, pc | r3 = 0x460e;
0x0000226e str r3, [sp, 0x34] | var_34h = r3;
0x00002270 b 0x1f74 | goto label_24;
| label_39:
0x00002272 ldr r3, [pc, 0x12c] |
0x00002274 add r3, pc | r3 = 0x461a;
0x00002276 str r3, [sp, 0x30] | var_30h = r3;
0x00002278 b 0x1f5e | goto label_25;
| label_38:
0x0000227a ldr r3, [pc, 0x128] |
0x0000227c add r3, pc | r3 = 0x4626;
0x0000227e str r3, [sp, 8] | var_8h = r3;
0x00002280 b 0x1f48 | goto label_26;
| label_37:
0x00002282 ldr r3, [pc, 0x124] |
0x00002284 add r3, pc | r3 = 0x4632;
0x00002286 str r3, [sp, 0x2c] | var_2ch = r3;
0x00002288 b 0x1f32 | goto label_27;
| label_33:
0x0000228a ldr r0, [sp, 4] | r0 = var_4h_2;
0x0000228c blx 0x16e8 | fcn_000016e8 ();
0x00002290 movs r1, 1 | r1 = 1;
0x00002292 mov r0, r6 | r0 = r6;
0x00002294 blx 0x15c4 | g_ptr_array_free ();
0x00002298 b 0x2192 |
| } while (1);
| label_29:
0x0000229a blx 0x1670 | fcn_00001670 ();
0x0000229e nop |
0x000022a0 adds r2, 8 | r2 += 8;
0x000022a2 movs r1, r0 | r1 = r0;
0x000022a4 lsls r4, r2, 4 | r4 = r2 << 4;
0x000022a6 movs r0, r0 |
0x000022a8 adds r1, 0xee | r1 += 0xee;
0x000022aa movs r1, r0 | r1 = r0;
0x000022ac adds r1, 0x62 | r1 += 0x62;
0x000022ae movs r1, r0 | r1 = r0;
0x000022b0 adds r0, r4, r5 | r0 = r4 + r5;
0x000022b2 movs r0, r0 |
0x000022b4 adds r6, r2, r5 | r6 = r2 + r5;
0x000022b6 movs r0, r0 |
0x000022b8 adds r2, r2, r5 | r2 += r5;
0x000022ba movs r0, r0 |
0x000022bc adds r2, r2, r5 | r2 += r5;
0x000022be movs r0, r0 |
0x000022c0 adds r6, r1, r5 | r6 = r1 + r5;
0x000022c2 movs r0, r0 |
0x000022c4 adds r2, r1, r5 | r2 = r1 + r5;
0x000022c6 movs r0, r0 |
0x000022c8 adds r2, r1, r5 | r2 = r1 + r5;
0x000022ca movs r0, r0 |
0x000022cc lsls r4, r0, 4 | r4 = r0 << 4;
0x000022ce movs r0, r0 |
0x000022d0 adds r2, r0, r3 | r2 = r0 + r3;
0x000022d2 movs r0, r0 |
0x000022d4 adds r2, r7, 3 | r2 = r7 + 3;
0x000022d6 movs r0, r0 |
0x000022d8 asrs r0, r1, 0x1c | r0 = r1 >> 0x1c;
0x000022da movs r0, r0 |
0x000022dc adds r2, r4, r1 | r2 = r4 + r1;
0x000022de movs r0, r0 |
0x000022e0 asrs r4, r0, 0x1f | r4 = r0 >> 0x1f;
0x000022e2 movs r0, r0 |
0x000022e4 adds r6, r7, r0 | r6 = r7 + r0;
0x000022e6 movs r0, r0 |
0x000022e8 adds r0, r6, r0 | r0 = r6 + r0;
0x000022ea movs r0, r0 |
0x000022ec adds r2, r5, r0 | r2 = r5 + r0;
0x000022ee movs r0, r0 |
0x000022f0 adds r0, r3, r0 | r0 = r3 + r0;
0x000022f2 movs r0, r0 |
0x000022f4 adds r2, r1, r0 | r2 = r1 + r0;
0x000022f6 movs r0, r0 |
0x000022f8 adds r4, r0, r0 | r4 = r0 + r0;
0x000022fa movs r0, r0 |
0x000022fc asrs r2, r6, 0x1f | r2 = r6 >> 0x1f;
0x000022fe movs r0, r0 |
0x00002300 asrs r4, r4, 0x1f | r4 >>= 0x1f;
0x00002302 movs r0, r0 |
0x00002304 asrs r2, r2, 0x1f | r2 >>= 0x1f;
0x00002306 movs r0, r0 |
0x00002308 asrs r0, r0, 0x1f | r0 >>= 0x1f;
0x0000230a movs r0, r0 |
0x0000230c asrs r2, r6, 0x1e | r2 = r6 >> 0x1e;
0x0000230e movs r0, r0 |
0x00002310 asrs r0, r7, 0x1b | r0 = r7 >> 0x1b;
0x00002312 movs r0, r0 |
0x00002314 asrs r6, r4, 0x1b | r6 = r4 >> 0x1b;
0x00002316 movs r0, r0 |
0x00002318 asrs r0, r3, 0x1b | r0 = r3 >> 0x1b;
0x0000231a movs r0, r0 |
0x0000231c asrs r6, r0, 0x1b | r6 = r0 >> 0x1b;
0x0000231e movs r0, r0 |
0x00002320 asrs r4, r6, 0x1a | r4 = r6 >> 0x1a;
0x00002322 movs r0, r0 |
0x00002324 asrs r6, r4, 0x1a | r6 = r4 >> 0x1a;
0x00002326 movs r0, r0 |
0x00002328 asrs r0, r4, 0x1c | r0 = r4 >> 0x1c;
0x0000232a movs r0, r0 |
0x0000232c asrs r0, r3, 0x1c | r0 = r3 >> 0x1c;
0x0000232e movs r0, r0 |
0x00002330 asrs r0, r2, 0x1c | r0 = r2 >> 0x1c;
0x00002332 movs r0, r0 |
0x00002334 asrs r4, r1, 0x1c | r4 = r1 >> 0x1c;
0x00002336 movs r0, r0 |
0x00002338 asrs r4, r6, 0x1b | r4 = r6 >> 0x1b;
0x0000233a movs r0, r0 |
0x0000233c adds r6, r1, 1 | r6 = r1 + 1;
0x0000233e movs r0, r0 |
0x00002340 asrs r6, r0, 0x1b | r6 = r0 >> 0x1b;
0x00002342 movs r0, r0 |
0x00002344 asrs r0, r3, 0x17 | r0 = r3 >> 0x17;
0x00002346 movs r0, r0 |
0x00002348 asrs r0, r7, 0x15 | r0 = r7 >> 0x15;
0x0000234a movs r0, r0 |
0x0000234c asrs r4, r1, 0x10 | r4 = r1 >> 0x10;
0x0000234e movs r0, r0 |
0x00002350 asrs r4, r0, 0x10 | r4 = r0 >> 0x10;
0x00002352 movs r0, r0 |
0x00002354 asrs r4, r7, 0xf | r4 = r7 >> 0xf;
0x00002356 movs r0, r0 |
0x00002358 asrs r4, r6, 0xf | r4 = r6 >> 0xf;
0x0000235a movs r0, r0 |
0x0000235c asrs r4, r5, 0xf | r4 = r5 >> 0xf;
0x0000235e movs r0, r0 |
0x00002360 asrs r4, r4, 0xf | r4 >>= 0xf;
0x00002362 movs r0, r0 |
0x00002364 asrs r4, r3, 0xf | r4 = r3 >> 0xf;
0x00002366 movs r0, r0 |
0x00002368 asrs r4, r2, 0xf | r4 = r2 >> 0xf;
0x0000236a movs r0, r0 |
0x0000236c asrs r4, r1, 0xf | r4 = r1 >> 0xf;
0x0000236e movs r0, r0 |
0x00002370 asrs r4, r0, 0xf | r4 = r0 >> 0xf;
0x00002372 movs r0, r0 |
0x00002374 asrs r4, r7, 0xe | r4 = r7 >> 0xe;
0x00002376 movs r0, r0 |
0x00002378 asrs r4, r6, 0xe | r4 = r6 >> 0xe;
0x0000237a movs r0, r0 |
0x0000237c asrs r4, r5, 0xe | r4 = r5 >> 0xe;
0x0000237e movs r0, r0 |
0x00002380 asrs r4, r4, 0xe | r4 >>= 0xe;
0x00002382 movs r0, r0 |
0x00002384 asrs r4, r3, 0xe | r4 = r3 >> 0xe;
0x00002386 movs r0, r0 |
0x00002388 asrs r4, r2, 0xe | r4 = r2 >> 0xe;
0x0000238a movs r0, r0 |
0x0000238c asrs r4, r1, 0xe | r4 = r1 >> 0xe;
0x0000238e movs r0, r0 |
0x00002390 asrs r4, r0, 0xe | r4 = r0 >> 0xe;
0x00002392 movs r0, r0 |
0x00002394 asrs r4, r7, 0xd | r4 = r7 >> 0xd;
0x00002396 movs r0, r0 |
0x00002398 asrs r4, r6, 0xd | r4 = r6 >> 0xd;
0x0000239a movs r0, r0 |
0x0000239c asrs r4, r5, 0xd | r4 = r5 >> 0xd;
0x0000239e movs r0, r0 |
0x000023a0 asrs r4, r4, 0xd | r4 >>= 0xd;
0x000023a2 movs r0, r0 |
0x000023a4 asrs r4, r3, 0xd | r4 = r3 >> 0xd;
0x000023a6 movs r0, r0 |
0x000023a8 asrs r4, r2, 0xd | r4 = r2 >> 0xd;
0x000023aa movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libcertutil.so.1.0 @ 0x301c */
| #include <stdint.h>
|
; (fcn) sym.cert_util_target_dir_get_owner () | void cert_util_target_dir_get_owner (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_0h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_5ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0000301c ssub8mi fp, r7, r0 | __asm ("ssub8mi fp, r7, r0");
0x00003020 ldr r2, [pc, 0xb8] |
0x00003022 sub sp, 0x64 |
0x00003024 ldr r3, [pc, 0xb8] | r3 = *(0x30e0);
0x00003026 add r2, pc | r2 = 0x6106;
0x00003028 ldr r3, [r2, r3] |
0x0000302a ldr r3, [r3] | r3 = *(0x6106);
0x0000302c str r3, [sp, 0x5c] | var_5ch = r3;
0x0000302e mov.w r3, 0 | r3 = 0;
| if (r0 == 0) {
0x00003032 cbz r0, 0x3080 | goto label_2;
| }
0x00003034 mov r6, r1 | r6 = r1;
| if (r1 == 0) {
0x00003036 cbz r1, 0x3094 | goto label_3;
| }
0x00003038 cmp r7, 0 |
| if (r7 == 0) {
0x0000303a beq 0x30aa | goto label_4;
| }
0x0000303c mov r4, r0 | r4 = r0;
0x0000303e blx 0x15ac | fcn_000015ac ();
0x00003042 mov r1, r4 | r1 = r4;
0x00003044 movs r2, 0 | r2 = 0;
0x00003046 blx 0x1528 | g_strconcat ();
0x0000304a mov r1, sp | r1 = sp;
0x0000304c mov r5, r0 | r5 = r0;
0x0000304e blx 0x1718 | r0 = fcn_00001718 ();
0x00003052 mov r4, r0 | r4 = r0;
0x00003054 cmp r0, 0 |
| if (r0 != 0) {
0x00003056 bne 0x30c0 | goto label_5;
| }
0x00003058 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0000305a str r3, [r6] | *(r6) = r3;
0x0000305c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0000305e str r3, [r7] | *(r7) = r3;
| label_1:
0x00003060 mov r0, r5 | r0 = r5;
0x00003062 blx 0x1468 | g_free ();
| do {
| label_0:
0x00003066 ldr r2, [pc, 0x7c] |
0x00003068 ldr r3, [pc, 0x74] | r3 = *(0x30e0);
0x0000306a add r2, pc | r2 = 0x6154;
0x0000306c ldr r3, [r2, r3] | r3 = *(0x6154);
0x0000306e ldr r2, [r3] | r2 = *(0x6154);
0x00003070 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x00003072 eors r2, r3 | r2 ^= r3;
0x00003074 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00003078 bne 0x30d6 | goto label_6;
| }
0x0000307a mov r0, r4 | r0 = r4;
0x0000307c add sp, 0x64 |
0x0000307e pop {r4, r5, r6, r7, pc} |
| label_2:
0x00003080 ldr r1, [pc, 0x64] |
0x00003082 movs r4, 1 | r4 = 1;
0x00003084 ldr r2, [pc, 0x64] |
0x00003086 add r1, pc |
0x00003088 add r2, pc | r2 = 0x6178;
0x0000308a add.w r1, r1, 0x120 | r1 = 0x6292;
0x0000308e blx 0x15f8 | fcn_000015f8 ();
0x00003092 b 0x3066 |
| } while (1);
| label_3:
0x00003094 ldr r1, [pc, 0x58] |
0x00003096 mov r0, r6 | r0 = r6;
0x00003098 ldr r2, [pc, 0x58] |
0x0000309a movs r4, 1 | r4 = 1;
0x0000309c add r1, pc |
0x0000309e add r2, pc | r2 = 0x6196;
0x000030a0 add.w r1, r1, 0x120 | r1 = 0x62b0;
0x000030a4 blx 0x15f8 | fcn_000015f8 ();
0x000030a8 b 0x3066 | goto label_0;
| label_4:
0x000030aa ldr r1, [pc, 0x4c] |
0x000030ac mov r0, r7 | r0 = r7;
0x000030ae ldr r2, [pc, 0x4c] |
0x000030b0 movs r4, 1 | r4 = 1;
0x000030b2 add r1, pc |
0x000030b4 add r2, pc | r2 = 0x61b6;
0x000030b6 add.w r1, r1, 0x120 | r1 = 0x62d0;
0x000030ba blx 0x15f8 | fcn_000015f8 ();
0x000030be b 0x3066 | goto label_0;
| label_5:
0x000030c0 ldr r0, [pc, 0x3c] |
0x000030c2 mov r1, r5 | r1 = r5;
0x000030c4 add r0, pc | r0 = 0x61c8;
0x000030c6 blx 0x1594 | r0 = g_strdup_printf ()
0x000030ca mov r1, r0 | r1 = r0;
0x000030cc movs r0, 1 | r0 = 1;
0x000030ce mov r4, r0 | r4 = r0;
0x000030d0 blx 0x14d4 | fcn_000014d4 ();
0x000030d4 b 0x3060 | goto label_1;
| label_6:
0x000030d6 blx 0x1670 | fcn_00001670 ();
0x000030da nop |
0x000030dc subs r2, r7, 2 | r2 = r7 - 2;
0x000030de movs r1, r0 | r1 = r0;
0x000030e0 lsls r4, r2, 4 | r4 = r2 << 4;
0x000030e2 movs r0, r0 |
0x000030e4 subs r6, r6, 1 | r6--;
0x000030e6 movs r1, r0 | r1 = r0;
0x000030e8 lsrs r6, r7, 0xd | r6 = r7 >> 0xd;
0x000030ea movs r0, r0 |
0x000030ec lsrs r0, r5, 9 | r0 = r5 >> 9;
0x000030ee movs r0, r0 |
0x000030f0 lsrs r0, r5, 0xd | r0 = r5 >> 0xd;
0x000030f2 movs r0, r0 |
0x000030f4 lsrs r2, r4, 9 | r2 = r4 >> 9;
0x000030f6 movs r0, r0 |
0x000030f8 lsrs r2, r2, 0xd | r2 >>= 0xd;
0x000030fa movs r0, r0 |
0x000030fc lsrs r4, r3, 9 | r4 = r3 >> 9;
0x000030fe movs r0, r0 |
0x00003100 lsrs r4, r3, 9 | r4 = r3 >> 9;
0x00003102 movs r0, r0 |
| }
[*] Function printf used 21 times libcertutil.so.1.0