[*] Binary protection state of libpacsio-businesslogic.so.0.0.55
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function printf tear down of libpacsio-businesslogic.so.0.0.55
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0x139f4 */
| #include <stdint.h>
|
; (fcn) sym.aadp_device_logic_create () | void aadp_device_logic_create (int16_t arg_60h, int16_t arg_240h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| 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_2h;
| int16_t var_2ch;
| int16_t var_eh;
| int8_t var_1fh;
| int32_t var_2ch_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000139f4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000139f8 mov r8, r2 | r8 = r2;
0x000139fa vpush {d8} | __asm ("vpush {d8}");
0x000139fe sub sp, 0x34 |
0x00013a00 mov sb, r1 | sb = r1;
0x00013a02 mov fp, r0 |
0x00013a04 ldr r2, [sp, 0x60] | r2 = *(arg_60h);
0x00013a06 movs r1, 0x80 | r1 = 0x80;
0x00013a08 str r3, [sp, 8] | var_8h = r3;
0x00013a0a ldr r3, [pc, 0x21c] | r3 = *(0x13c2a);
0x00013a0c str r2, [sp, 0xc] | var_ch = r2;
0x00013a0e ldr r2, [pc, 0x21c] |
0x00013a10 ldr r7, [pc, 0x21c] |
0x00013a12 ldr r6, [pc, 0x220] |
0x00013a14 add r2, pc | r2 = 0x27646;
0x00013a16 ldr r5, [pc, 0x220] |
0x00013a18 ldr r3, [r2, r3] |
0x00013a1a add r7, pc | r7 = 0x2764e;
0x00013a1c ldr.w sl, [pc, 0x21c] |
0x00013a20 add r6, pc | r6 = 0x2765a;
0x00013a22 add r5, pc | r5 = 0x27660;
0x00013a24 mov r2, r6 | r2 = r6;
0x00013a26 mov r0, r5 | r0 = r5;
0x00013a28 ldr r3, [r3] | r3 = *(0x27646);
0x00013a2a str r3, [sp, 0x2c] | var_2ch = r3;
0x00013a2c mov.w r3, 0 | r3 = 0;
0x00013a30 add.w r3, r7, 0x20c | r3 = r7 + 0x20c;
0x00013a34 add sl, pc | sl = 0x27674;
0x00013a36 blx 0x88fc | fcn_000088fc ();
0x00013a3a movs r0, 0x50 | r0 = 0x50;
0x00013a3c vdup.32 d8, sl | __asm ("vdup.32 d8, sl");
0x00013a40 blx 0x8440 | se_utils_secure_element_available ();
0x00013a44 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00013a46 mov r4, r0 | r4 = r0;
0x00013a48 add.w r3, r4, 0x44 | r3 = r4 + 0x44;
0x00013a4c mov r0, sb | r0 = sb;
0x00013a4e vst1.32 {d8}, [r3] | __asm ("vst1.32 {d8}, [r3]");
0x00013a52 str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x00013a54 blx 0x7a74 | g_strdup_printf ()
0x00013a58 str r0, [r4] | *(r4) = r0;
0x00013a5a blx 0x7660 | validation_batch_get_validation_object ();
0x00013a5e blx 0x7678 | pthread_cond_wait ();
0x00013a62 str.w r8, [r4, 4] | __asm ("str.w r8, [r4, 4]");
0x00013a66 str r0, [r4, 0x14] | *((r4 + 0x14)) = r0;
0x00013a68 blx 0x89e0 | r0 = fcn_000089e0 ();
0x00013a6c mov r1, r0 | r1 = r0;
0x00013a6e mov r0, sb | r0 = sb;
0x00013a70 blx 0x8268 | fcn_00008268 ();
0x00013a74 mov.w ip, 1 |
0x00013a78 mov r3, r8 | r3 = r8;
0x00013a7a str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x00013a7e mov r2, fp | r2 = fp;
0x00013a80 ldr r1, [sp, 8] | r1 = var_8h;
0x00013a82 blx 0x7d14 | json_array_get_element ();
0x00013a86 str r0, [r4, 0x18] | *((r4 + 0x18)) = r0;
0x00013a88 blx 0x72c4 | interface_message_reply_new_failure ();
0x00013a8c str r0, [r4, 0x1c] | *((r4 + 0x1c)) = r0;
0x00013a8e blx 0x7a74 | g_strdup_printf ()
0x00013a92 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00013a94 blx 0x7a2c | g_object_ref ();
0x00013a98 str r0, [r4, 0x20] | *((r4 + 0x20)) = r0;
0x00013a9a blx 0x7a74 | g_strdup_printf ()
0x00013a9e movs r1, 0 | r1 = 0;
0x00013aa0 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00013aa2 blx 0x7718 | fcn_00007718 ();
0x00013aa6 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00013aa8 blx 0x742c | r0 = domain_osdp_get_key ();
0x00013aac mov r8, r0 | r8 = r0;
0x00013aae blx 0x8938 | r0 = domain_get_type ();
0x00013ab2 mov sb, r0 | sb = r0;
0x00013ab4 mov r0, r8 | r0 = r8;
0x00013ab6 ldr.w r8, [pc, 0x188] |
0x00013aba blx 0x72dc | link_message_get_message ();
0x00013abe ldr r1, [pc, 0x184] |
0x00013ac0 movs r2, 0 | r2 = 0;
0x00013ac2 add r8, pc | r8 = 0x27708;
0x00013ac4 str r0, [r4, 0x38] | *((r4 + 0x38)) = r0;
0x00013ac6 mov r0, r8 | r0 = r8;
0x00013ac8 add r1, pc | r1 = 0x27712;
0x00013aca blx 0x7a44 | domain_osdp_get_keytype ();
0x00013ace ldr r2, [pc, 0x178] |
0x00013ad0 mov r1, r0 | r1 = r0;
0x00013ad2 str r0, [sp, 0x14] | var_14h = r0;
0x00013ad4 mov r0, sb | r0 = sb;
0x00013ad6 add r2, pc | r2 = 0x27724;
0x00013ad8 blx 0x79fc | interface_definition_create ();
0x00013adc ldr r1, [pc, 0x16c] |
0x00013ade movs r2, 0 | r2 = 0;
0x00013ae0 str r0, [r4, 0x30] | *((r4 + 0x30)) = r0;
0x00013ae2 add r1, pc | r1 = 0x27732;
0x00013ae4 blx 0x7960 | g_mutex_init ();
0x00013ae8 add r0, sp, 0x14 | r0 += var_14h;
0x00013aea blx 0x8120 | fcn_00008120 ();
0x00013aee ldr r1, [pc, 0x160] |
0x00013af0 movs r2, 0 | r2 = 0;
0x00013af2 mov r0, r8 | r0 = r8;
0x00013af4 add r1, pc | r1 = 0x2774a;
0x00013af6 blx 0x7a44 | domain_osdp_get_keytype ();
0x00013afa ldr r2, [pc, 0x158] |
0x00013afc mov r1, r0 | r1 = r0;
0x00013afe str r0, [sp, 0x18] | var_18h = r0;
0x00013b00 mov r0, sb | r0 = sb;
0x00013b02 add r2, pc | r2 = 0x2775c;
0x00013b04 blx 0x79fc | interface_definition_create ();
0x00013b08 ldr r1, [pc, 0x14c] |
0x00013b0a movs r2, 0 | r2 = 0;
0x00013b0c str r0, [r4, 0x24] | *((r4 + 0x24)) = r0;
0x00013b0e add r1, pc | r1 = 0x2776a;
0x00013b10 blx 0x7960 | g_mutex_init ();
0x00013b14 add r0, sp, 0x18 | r0 += var_18h;
0x00013b16 blx 0x8120 | fcn_00008120 ();
0x00013b1a ldr r1, [pc, 0x140] |
0x00013b1c movs r2, 0 | r2 = 0;
0x00013b1e mov r0, r8 | r0 = r8;
0x00013b20 add r1, pc | r1 = 0x27782;
0x00013b22 blx 0x7a44 | domain_osdp_get_keytype ();
0x00013b26 ldr r2, [pc, 0x138] |
0x00013b28 mov r1, r0 | r1 = r0;
0x00013b2a str r0, [sp, 0x1c] | var_1ch = r0;
0x00013b2c mov r0, sb | r0 = sb;
0x00013b2e add r2, pc | r2 = 0x27794;
0x00013b30 blx 0x79fc | interface_definition_create ();
0x00013b34 movs r2, 0 | r2 = 0;
0x00013b36 mov r1, sl | r1 = sl;
0x00013b38 str r0, [r4, 0x28] | *((r4 + 0x28)) = r0;
0x00013b3a blx 0x7960 | g_mutex_init ();
0x00013b3e add r0, sp, 0x1c | r0 += var_1ch;
0x00013b40 blx 0x8120 | fcn_00008120 ();
0x00013b44 ldr r1, [pc, 0x11c] |
0x00013b46 movs r2, 0 | r2 = 0;
0x00013b48 mov r0, r8 | r0 = r8;
0x00013b4a add r1, pc | r1 = 0x277b2;
0x00013b4c blx 0x7a44 | domain_osdp_get_keytype ();
0x00013b50 ldr r2, [pc, 0x114] |
0x00013b52 mov r1, r0 | r1 = r0;
0x00013b54 mov r0, sb | r0 = sb;
0x00013b56 str r1, [sp, 0x20] | var_20h = r1;
0x00013b58 add r2, pc | r2 = 0x277c4;
0x00013b5a blx 0x79fc | interface_definition_create ();
0x00013b5e mov r1, sl | r1 = sl;
0x00013b60 movs r2, 0 | r2 = 0;
0x00013b62 str r0, [r4, 0x2c] | *((r4 + 0x2c)) = r0;
0x00013b64 blx 0x7960 | g_mutex_init ();
0x00013b68 add r0, sp, 0x20 | r0 += var_20h;
0x00013b6a blx 0x8120 | fcn_00008120 ();
0x00013b6e ldr r1, [pc, 0xfc] |
0x00013b70 movs r2, 0 | r2 = 0;
0x00013b72 mov r0, r8 | r0 = r8;
0x00013b74 add r1, pc | r1 = 0x277e6;
0x00013b76 blx 0x7a44 | domain_osdp_get_keytype ();
0x00013b7a ldr r2, [pc, 0xf4] |
0x00013b7c mov r1, r0 | r1 = r0;
0x00013b7e str r0, [sp, 0x24] | var_24h = r0;
0x00013b80 ldr r0, [r4, 0x38] | r0 = *((r4 + 0x38));
0x00013b82 add r2, pc | r2 = 0x277f8;
0x00013b84 blx 0x7c8c | fcn_00007c8c ();
0x00013b88 str r0, [r4, 0x34] | *((r4 + 0x34)) = r0;
0x00013b8a add r0, sp, 0x24 | r0 += var_24h;
0x00013b8c blx 0x8120 | fcn_00008120 ();
0x00013b90 mov r0, r4 | r0 = r4;
0x00013b92 bl 0x13320 | fcn_00013320 (r0);
0x00013b96 mov r0, r4 | r0 = r4;
0x00013b98 bl 0x134a0 | fcn_000134a0 (r0);
0x00013b9c mov r0, r5 | r0 = r5;
0x00013b9e add.w r3, r7, 0x180 | r3 = r7 + 0x180;
0x00013ba2 mov r2, r6 | r2 = r6;
0x00013ba4 movs r1, 0x80 | r1 = 0x80;
0x00013ba6 blx 0x88fc | fcn_000088fc ();
0x00013baa ldr r5, [r4, 0x10] | r5 = *((r4 + 0x10));
| if (r5 == 0) {
0x00013bac cbz r5, 0x13bba | goto label_0;
| }
| do {
0x00013bae ldr r0, [r5] | r0 = *(r5);
0x00013bb0 bl 0x12cd4 | fcn_00012cd4 (r0);
0x00013bb4 ldr r5, [r5, 4] | r5 = *((r5 + 4));
0x00013bb6 cmp r5, 0 |
0x00013bb8 bne 0x13bae |
| } while (r5 != 0);
| label_0:
0x00013bba ldr r2, [pc, 0xb8] |
0x00013bbc movs r5, 0 | r5 = 0;
0x00013bbe ldr r1, [pc, 0xb8] |
0x00013bc0 mov r3, r4 | r3 = r4;
0x00013bc2 strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x00013bc6 add r2, pc | r2 = 0x27840;
0x00013bc8 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00013bca add r1, pc | r1 = 0x27848;
0x00013bcc blx 0x81fc | fcn_000081fc ();
0x00013bd0 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00013bd2 add r1, sp, 0x28 | r1 += var_28h;
0x00013bd4 str r5, [sp, 0x28] | var_28h = r5;
0x00013bd6 blx 0x86cc | fcn_000086cc ();
0x00013bda ldr r3, [sp, 0x28] | r3 = var_28h;
| if (r3 != 0) {
0x00013bdc cbz r3, 0x13bfc |
0x00013bde ldr r3, [pc, 0x9c] |
0x00013be0 mov.w r2, 0x450 | r2 = 0x450;
0x00013be4 ldr r4, [pc, 0x98] |
0x00013be6 ldr r1, [pc, 0x9c] |
0x00013be8 ldr r0, [pc, 0x9c] |
0x00013bea add r3, pc |
0x00013bec add r4, pc | r4 = 0x27870;
0x00013bee add.w r3, r3, 0x20c | r3 = 0x27a78;
0x00013bf2 add r1, pc | r1 = 0x2787c;
0x00013bf4 str r4, [sp] | *(sp) = r4;
0x00013bf6 add r0, pc | r0 = 0x27882;
0x00013bf8 blx 0x7a08 | resource_relation_get_reference ();
| }
0x00013bfc ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00013bfe blx 0x727c | pthread_condattr_setclock ();
0x00013c02 ldr r2, [pc, 0x88] |
0x00013c04 ldr r3, [pc, 0x20] | r3 = *(0x13c28);
0x00013c06 add r2, pc | r2 = 0x27898;
0x00013c08 ldr r3, [r2, r3] | r3 = *(0x27898);
0x00013c0a ldr r2, [r3] | r2 = *(0x27898);
0x00013c0c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00013c0e eors r2, r3 | r2 ^= r3;
0x00013c10 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00013c14 bne 0x13c22 |
0x00013c16 mov r0, r4 | r0 = r4;
0x00013c18 add sp, 0x34 |
0x00013c1a vpop {d8} | __asm ("vpop {d8}");
0x00013c1e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00013c22 blx 0x828c | fcn_0000828c ();
0x00013c26 nop |
0x00013c28 lsrs r4, r3, 0x20 | r4 = r3 >> 0x20;
0x00013c2a movs r0, r0 |
0x00013c2c add r5, sp, 0x240 | r5 += arg_240h;
0x00013c2e movs r0, r0 |
0x00013c30 strh r6, [r1, 0xe] | var_eh = r6;
0x00013c32 movs r0, r0 |
0x00013c34 ldr r7, [pc, 0x360] | r7 = *(0x13f98);
0x00013c36 movs r0, r0 |
0x00013c38 add lr, r4 | lr += r4;
0x00013c3a movs r0, r0 |
0x00013c3c str r0, [r1, r2] | *((r1 + r2)) = r0;
0x00013c3e movs r0, r0 |
0x00013c40 str r2, [r2, 0x2c] | *((r2 + 0x2c)) = r2;
0x00013c42 movs r0, r0 |
0x00013c44 strh r4, [r7, 6] | *((r7 + 6)) = r4;
0x00013c46 movs r0, r0 |
0x00013c48 str r6, [r1, 0x2c] | var_2ch_2 = r6;
0x00013c4a movs r0, r0 |
0x00013c4c str r6, [r1, 0x2c] | var_2ch_2 = r6;
0x00013c4e movs r0, r0 |
0x00013c50 ldrb r0, [r1, 0x1f] | r0 = var_1fh;
0x00013c52 movs r0, r0 |
0x00013c54 str r2, [r4, 0x2c] | *((r4 + 0x2c)) = r2;
0x00013c56 movs r0, r0 |
0x00013c58 ldrsh r6, [r1, r7] | r6 = *((r1 + r7));
0x00013c5a movs r0, r0 |
0x00013c5c strh r0, [r2, 2] | *((r2 + 2)) = r0;
0x00013c5e movs r0, r0 |
0x00013c60 strh r6, [r2, 2] | *((r2 + 2)) = r6;
0x00013c62 movs r0, r0 |
0x00013c64 strh r2, [r1, 2] | var_2h = r2;
0x00013c66 movs r0, r0 |
0x00013c68 strh r4, [r2, 2] | *((r2 + 2)) = r4;
0x00013c6a movs r0, r0 |
0x00013c6c strh r4, [r1, 2] | var_2h = r4;
0x00013c6e movs r0, r0 |
0x00013c70 strh r2, [r2, 2] | *((r2 + 2)) = r2;
0x00013c72 movs r0, r0 |
0x00013c74 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0x13ce4 */
| #include <stdint.h>
|
; (fcn) sym.aadp_device_logic_update () | void aadp_device_logic_update (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
| label_0:
0x00007278 invalid | void (*0x727c)() ();
0x00013ce4 push {r3, r4, r5, lr} |
0x00013ce6 mov r5, r0 | r5 = r0;
0x00013ce8 ldr r3, [pc, 0x80] |
0x00013cea mov r4, r1 | r4 = r1;
0x00013cec movs r1, 0x80 | r1 = 0x80;
0x00013cee ldr r2, [pc, 0x80] |
0x00013cf0 ldr r0, [pc, 0x80] |
0x00013cf2 add r3, pc |
0x00013cf4 add.w r3, r3, 0x240 | r3 = 0x27ca2;
0x00013cf8 add r2, pc | r2 = 0x27a6e;
0x00013cfa add r0, pc | r0 = 0x27a72;
0x00013cfc blx 0x88fc | fcn_000088fc ();
0x00013d00 ldr r0, [r5] | r0 = *(r5);
0x00013d02 blx 0x74c4 | fcn_000074c4 ();
0x00013d06 mov r0, r4 | r0 = r4;
0x00013d08 blx 0x7a74 | g_strdup_printf ()
0x00013d0c ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00013d0e str r0, [r5] | *(r5) = r0;
| if (r3 != 0) {
0x00013d10 cbz r3, 0x13d26 |
0x00013d12 mov r0, r3 | r0 = r3;
0x00013d14 blx 0x76f4 | fcn_000076f4 ();
0x00013d16 stcl p9, c6, [lr], 0x1a0 | __asm ("stcl p9, c6, [lr], aav.0x000000ff");
0x00013d1a movs r3, 0 | r3 = 0;
0x00013d1c str r3, [r5, 0x14] | *((r5 + 0x14)) = r3;
| if (r0 != 0) {
0x00013d1e cbz r0, 0x13d24 |
0x00013d20 blx 0x720c | fcn_0000720c ();
| }
0x00013d24 ldr r0, [r5] | r0 = *(r5);
| }
0x00013d26 blx 0x7660 | validation_batch_get_validation_object ();
0x00013d2a blx 0x7678 | pthread_cond_wait ();
0x00013d2e str r0, [r5, 0x14] | *((r5 + 0x14)) = r0;
0x00013d30 mov r0, r5 | r0 = r5;
0x00013d32 bl 0x134a0 | fcn_000134a0 (r0);
0x00013d36 ldr r3, [pc, 0x40] |
0x00013d38 movs r1, 0x80 | r1 = 0x80;
0x00013d3a ldr r2, [pc, 0x40] |
0x00013d3c ldr r0, [pc, 0x40] |
0x00013d3e add r3, pc |
0x00013d40 add r2, pc | r2 = 0x27ac2;
0x00013d42 add.w r3, r3, 0x180 | r3 = 0x27c3c;
0x00013d46 add r0, pc | r0 = 0x27aca;
0x00013d48 blx 0x88fc | fcn_000088fc ();
0x00013d4c ldr r4, [r5, 0x10] | r4 = *((r5 + 0x10));
| if (r4 == 0) {
0x00013d4e cbz r4, 0x13d5c | goto label_1;
| }
| do {
0x00013d50 ldr r0, [r4] | r0 = *(r4);
0x00013d52 bl 0x12cd4 | fcn_00012cd4 (r0);
0x00013d56 ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x00013d58 cmp r4, 0 |
0x00013d5a bne 0x13d50 |
| } while (r4 != 0);
| label_1:
0x00013d5c ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00013d5e blx 0x7410 | fcn_00007410 ();
0x00013d60 adcs.w r8, r8, r8, asr 27 | __asm ("adcs.w r8, r8, r8, asr 27");
0x00013d64 pop.w {r3, r4, r5, lr} |
0x00013d68 b.w 0x7278 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0x152dc */
| #include <stdint.h>
|
; (fcn) sym.aadp_hub_logic_create () | void aadp_hub_logic_create (int16_t arg_38h, int16_t arg_2d8h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000152dc push.w {r4, r5, r6, r7, r8, sb, lr} |
0x000152e0 mov r5, r2 | r5 = r2;
0x000152e2 ldr r2, [pc, 0x1c0] |
0x000152e4 mov r8, r3 | r8 = r3;
0x000152e6 sub sp, 0x1c |
0x000152e8 mov r7, r0 | r7 = r0;
0x000152ea ldr r3, [pc, 0x1bc] | r3 = *(0x154aa);
0x000152ec mov r6, r1 | r6 = r1;
0x000152ee add r2, pc | r2 = 0x2a798;
0x000152f0 ldr r0, [pc, 0x1b8] |
0x000152f2 movs r1, 0x80 | r1 = 0x80;
0x000152f4 ldr.w sb, [sp, 0x38] | sb = *(arg_38h);
0x000152f8 ldr r3, [r2, r3] |
0x000152fa ldr r2, [pc, 0x1b4] |
0x000152fc add r0, pc | r0 = 0x2a7ac;
0x000152fe ldr r3, [r3] | r3 = *(0x2a798);
0x00015300 str r3, [sp, 0x14] | var_14h = r3;
0x00015302 mov.w r3, 0 | r3 = 0;
0x00015306 ldr r3, [pc, 0x1ac] |
0x00015308 add r2, pc | r2 = 0x2a7be;
0x0001530a add r3, pc |
0x0001530c add.w r3, r3, 0x114 | r3 = 0x2a8d8;
0x00015310 blx 0x88fc | fcn_000088fc ();
0x00015314 movs r0, 0x4c | r0 = 0x4c;
0x00015316 blx 0x8440 | r0 = se_utils_secure_element_available ();
0x0001531a mov r4, r0 | r4 = r0;
0x0001531c str.w r8, [r0, 0xc] | __asm ("str.w r8, [r0, 0xc]");
0x00015320 mov r0, r6 | r0 = r6;
0x00015322 blx 0x7a74 | g_strdup_printf ()
0x00015326 strd r0, r5, [r4] | __asm ("strd r0, r5, [r4]");
0x0001532a mov r0, sb | r0 = sb;
0x0001532c blx 0x8214 | fcn_00008214 ();
0x00015330 str r0, [r4, 0x18] | *((r4 + 0x18)) = r0;
0x00015332 blx 0x89e0 | r0 = fcn_000089e0 ();
0x00015336 mov r1, r0 | r1 = r0;
0x00015338 mov r0, r6 | r0 = r6;
0x0001533a blx 0x8268 | fcn_00008268 ();
0x0001533e mov r3, r5 | r3 = r5;
0x00015340 movs r5, 1 | r5 = 1;
0x00015342 mov r2, r7 | r2 = r7;
0x00015344 mov r1, sb | r1 = sb;
0x00015346 str r5, [sp] | *(sp) = r5;
0x00015348 movs r5, 0 | r5 = 0;
0x0001534a blx 0x7d14 | json_array_get_element ();
0x0001534e str r0, [r4, 0x1c] | *((r4 + 0x1c)) = r0;
0x00015350 blx 0x72c4 | interface_message_reply_new_failure ();
0x00015354 str r0, [r4, 0x20] | *((r4 + 0x20)) = r0;
0x00015356 blx 0x7a74 | g_strdup_printf ()
0x0001535a ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x0001535c blx 0x7a2c | g_object_ref ();
0x00015360 str r0, [r4, 0x24] | *((r4 + 0x24)) = r0;
0x00015362 blx 0x7a74 | g_strdup_printf ()
0x00015366 mov r1, r5 | r1 = r5;
0x00015368 ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x0001536a str r5, [r4, 0x48] | *((r4 + 0x48)) = r5;
0x0001536c blx 0x7718 | fcn_00007718 ();
0x00015370 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00015372 blx 0x742c | r0 = domain_osdp_get_key ();
0x00015376 mov r8, r0 | r8 = r0;
0x00015378 ldr r6, [pc, 0x13c] |
0x0001537a blx 0x8938 | domain_get_type ();
0x0001537e ldr r1, [pc, 0x13c] |
0x00015380 mov r7, r0 | r7 = r0;
0x00015382 ldr r0, [pc, 0x13c] |
0x00015384 mov r2, r5 | r2 = r5;
0x00015386 add r6, pc | r6 = 0x2a842;
0x00015388 add r1, pc | r1 = 0x2a84a;
0x0001538a add r0, pc | r0 = 0x2a850;
0x0001538c blx 0x7a44 | domain_osdp_get_keytype ();
0x00015390 ldr r1, [pc, 0x130] |
0x00015392 mov r2, r5 | r2 = r5;
0x00015394 str r0, [r4, 0x3c] | *((r4 + 0x3c)) = r0;
0x00015396 mov r0, r6 | r0 = r6;
0x00015398 add r1, pc | r1 = 0x2a860;
0x0001539a blx 0x7a44 | domain_osdp_get_keytype ();
0x0001539e ldr r2, [pc, 0x128] |
0x000153a0 mov r1, r0 | r1 = r0;
0x000153a2 str r0, [sp, 0xc] | var_ch = r0;
0x000153a4 mov r0, r7 | r0 = r7;
0x000153a6 add r2, pc | r2 = 0x2a874;
0x000153a8 blx 0x79fc | interface_definition_create ();
0x000153ac ldr r1, [pc, 0x11c] |
0x000153ae mov r2, r5 | r2 = r5;
0x000153b0 str r0, [r4, 0x2c] | *((r4 + 0x2c)) = r0;
0x000153b2 add r1, pc | r1 = 0x2a882;
0x000153b4 blx 0x7960 | g_mutex_init ();
0x000153b8 add r0, sp, 0xc | r0 += var_ch;
0x000153ba blx 0x8120 | fcn_00008120 ();
0x000153be ldr r1, [pc, 0x110] |
0x000153c0 mov r2, r5 | r2 = r5;
0x000153c2 mov r0, r6 | r0 = r6;
0x000153c4 add r1, pc | r1 = 0x2a89a;
0x000153c6 blx 0x7a44 | domain_osdp_get_keytype ();
0x000153ca ldr r2, [pc, 0x108] |
0x000153cc mov r1, r0 | r1 = r0;
0x000153ce mov r0, r7 | r0 = r7;
0x000153d0 str r1, [sp, 0x10] | var_10h = r1;
0x000153d2 add r2, pc | r2 = 0x2a8ac;
0x000153d4 blx 0x79fc | r0 = interface_definition_create ();
0x000153d8 mov r3, r0 | r3 = r0;
0x000153da mov r0, r8 | r0 = r8;
0x000153dc str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x000153de blx 0x72dc | link_message_get_message ();
0x000153e2 ldr r2, [pc, 0xf4] |
0x000153e4 ldr r1, [sp, 0x10] | r1 = var_10h;
0x000153e6 str r0, [r4, 0x40] | *((r4 + 0x40)) = r0;
0x000153e8 add r2, pc | r2 = 0x2a8c6;
0x000153ea blx 0x7c8c | fcn_00007c8c ();
0x000153ee ldr r2, [pc, 0xec] |
0x000153f0 ldr r1, [sp, 0x10] | r1 = var_10h;
0x000153f2 str r0, [r4, 0x34] | *((r4 + 0x34)) = r0;
0x000153f4 add r2, pc | r2 = 0x2a8d6;
0x000153f6 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x000153f8 blx 0x7c8c | r0 = fcn_00007c8c ();
0x000153fc mov r3, r0 | r3 = r0;
0x000153fe add r0, sp, 0x10 | r0 += var_10h;
0x00015400 str r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
0x00015402 blx 0x8120 | fcn_00008120 ();
0x00015406 ldr r1, [pc, 0xd8] |
0x00015408 mov r2, r5 | r2 = r5;
0x0001540a mov r0, r6 | r0 = r6;
0x0001540c add r1, pc | r1 = 0x2a8f2;
0x0001540e blx 0x7a44 | r0 = domain_osdp_get_keytype ();
0x00015412 mov r1, r0 | r1 = r0;
0x00015414 ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x00015416 str r1, [r4, 0x28] | *((r4 + 0x28)) = r1;
0x00015418 blx 0x77c0 | fcn_000077c0 ();
0x0001541c ldr r2, [pc, 0xc4] |
0x0001541e mov r3, r4 | r3 = r4;
0x00015420 ldr r1, [pc, 0xc4] |
0x00015422 strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x00015426 add r2, pc | r2 = 0x2a90e;
0x00015428 ldr r0, [r4, 0x24] | r0 = *((r4 + 0x24));
0x0001542a add r1, pc | r1 = 0x2a916;
0x0001542c blx 0x81fc | fcn_000081fc ();
0x00015430 ldrd r7, r6, [r4] | __asm ("ldrd r7, r6, [r4]");
0x00015434 blx 0x7f50 | r0 = fcn_00007f50 ();
0x00015438 mov r1, r0 | r1 = r0;
0x0001543a mov r0, r7 | r0 = r7;
0x0001543c blx 0x8268 | fcn_00008268 ();
0x00015440 blx 0x832c | fcn_0000832c ();
0x00015444 ldr r2, [pc, 0xa4] |
0x00015446 mov r1, r0 | r1 = r0;
0x00015448 mov r0, r6 | r0 = r6;
0x0001544a add r2, pc | r2 = 0x2a93a;
0x0001544c blx 0x7438 | fcn_00007438 ();
0x00015450 ldr r7, [r4, 0x40] | r7 = *((r4 + 0x40));
0x00015452 mov r6, r0 | r6 = r0;
0x00015454 blx 0x7a50 | fcn_00007a50 ();
0x00015458 ldr r3, [pc, 0x94] |
0x0001545a mov r1, r0 | r1 = r0;
0x0001545c ldr r2, [r4, 0x3c] | r2 = *((r4 + 0x3c));
0x0001545e mov r0, r7 | r0 = r7;
0x00015460 add r3, pc | r3 = 0x2a954;
0x00015462 blx 0x7fbc | fcn_00007fbc ();
0x00015466 ldr r2, [pc, 0x8c] |
0x00015468 mov r3, r4 | r3 = r4;
0x0001546a ldr r1, [pc, 0x8c] |
0x0001546c strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x00015470 add r2, pc | r2 = 0x2a96a;
0x00015472 add r1, pc | r1 = 0x2a970;
0x00015474 blx 0x81fc | fcn_000081fc ();
0x00015478 mov r0, r6 | r0 = r6;
0x0001547a blx 0x74c4 | fcn_000074c4 ();
0x0001547e mov r0, r4 | r0 = r4;
0x00015480 bl 0x14ebc | fcn_00014ebc (r0, r1, r2, r3, r4);
0x00015484 ldr r2, [pc, 0x74] |
0x00015486 ldr r3, [pc, 0x20] | r3 = *(0x154aa);
0x00015488 add r2, pc | r2 = 0x2a988;
0x0001548a ldr r3, [r2, r3] | r3 = *(0x2a988);
0x0001548c ldr r2, [r3] | r2 = *(0x2a988);
0x0001548e ldr r3, [sp, 0x14] | r3 = var_14h;
0x00015490 eors r2, r3 | r2 ^= r3;
0x00015492 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00015496 bne 0x154a0 |
0x00015498 mov r0, r4 | r0 = r4;
0x0001549a add sp, 0x1c |
0x0001549c pop.w {r4, r5, r6, r7, r8, sb, pc} |
| }
0x000154a0 blx 0x828c | fcn_0000828c ();
0x000154a4 str r4, [sp, 0x2d8] | *(arg_2d8h) = r4;
0x000154a6 movs r0, r0 |
0x000154a8 lsrs r4, r3, 0x20 | r4 = r3 >> 0x20;
0x000154aa movs r0, r0 |
0x000154ac cmp r3, 0xcc |
0x000154ae movs r0, r0 |
0x000154b0 adds r6, 0xf0 | r6 += 0xf0;
0x000154b2 movs r0, r0 |
0x000154b4 ldr r6, [r5, 0x74] | r6 = *((r5 + 0x74));
0x000154b6 movs r0, r0 |
0x000154b8 ldr r2, [pc, 0x38] | r2 = *(0x154f4);
0x000154ba movs r0, r0 |
0x000154bc ldr r1, [pc, 0x3e0] | r1 = *(0x158a0);
0x000154be movs r0, r0 |
0x000154c0 subs r0, 0x4a | r0 -= 0x4a;
0x000154c2 movs r0, r0 |
0x000154c4 str r4, [r4, 0x70] | *((r4 + 0x70)) = r4;
0x000154c6 movs r0, r0 |
0x000154c8 ldr r2, [pc, 0xf8] | r2 = *(0x155c4);
0x000154ca movs r0, r0 |
0x000154cc bx r5 | return uint32_t (*r5)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0x15500 */
| #include <stdint.h>
|
; (fcn) sym.aadp_hub_logic_update () | void aadp_hub_logic_update (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00015500 invalid |
0x00015504 ldr r3, [pc, 0x34] |
0x00015506 mov r5, r1 | r5 = r1;
0x00015508 movs r1, 0x80 | r1 = 0x80;
0x0001550a ldr r2, [pc, 0x34] |
0x0001550c ldr r0, [pc, 0x34] |
0x0001550e add r3, pc |
0x00015510 add.w r3, r3, 0x12c | r3 = 0x2ab7a;
0x00015514 add r2, pc | r2 = 0x2aa5a;
0x00015516 add r0, pc | r0 = 0x2aa5e;
0x00015518 blx 0x88fc | fcn_000088fc ();
0x0001551c ldr r0, [r4] | r0 = *(r4);
0x0001551e blx 0x74c4 | fcn_000074c4 ();
0x00015522 mov r0, r5 | r0 = r5;
0x00015524 blx 0x7a74 | g_strdup_printf ()
0x00015528 str r0, [r4] | *(r4) = r0;
0x0001552a mov r0, r4 | r0 = r4;
0x0001552c bl 0x14ebc | fcn_00014ebc (r0, r1, r2, r3, r4);
0x00015530 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00015532 pop.w {r3, r4, r5, lr} |
0x00015536 b.w 0x740c | return void (*0x740c)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0x13828 */
| #include <stdint.h>
|
; (fcn) sym.aadp_op_logic_create () | void aadp_op_logic_create (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00013828 push.w {r4, r5, r6, r7, r8, lr} |
0x0001382c mov r5, r2 | r5 = r2;
0x0001382e ldr r4, [pc, 0xb0] |
0x00013830 mov r8, r0 | r8 = r0;
0x00013832 sub sp, 8 |
0x00013834 mov r6, r1 | r6 = r1;
0x00013836 ldr r2, [pc, 0xac] |
0x00013838 movs r1, 0x80 | r1 = 0x80;
0x0001383a ldr r0, [pc, 0xac] |
0x0001383c add r4, pc | r4 = 0x27122;
0x0001383e mov r7, r3 | r7 = r3;
0x00013840 add.w r3, r4, 0x1dc | r3 = r4 + 0x1dc;
0x00013844 add r2, pc | r2 = 0x2712e;
0x00013846 add r0, pc | r0 = 0x27134;
0x00013848 blx 0x88fc | fcn_000088fc ();
0x0001384a invalid |
0x0001384e blx 0x8440 | r0 = se_utils_secure_element_available ();
0x00013852 mov r4, r0 | r4 = r0;
0x00013854 mov r0, r6 | r0 = r6;
0x00013856 blx 0x7a74 | g_strdup_printf ()
0x0001385a strd r0, r5, [r4] | __asm ("strd r0, r5, [r4]");
0x0001385e blx 0x89e0 | r0 = fcn_000089e0 ();
0x00013862 mov r1, r0 | r1 = r0;
0x00013864 mov r0, r6 | r0 = r6;
0x00013866 blx 0x8268 | fcn_00008268 ();
0x0001386a mov r3, r5 | r3 = r5;
0x0001386c movs r5, 1 | r5 = 1;
0x0001386e mov r2, r8 | r2 = r8;
0x00013870 mov r1, r7 | r1 = r7;
0x00013872 str r5, [sp] | *(sp) = r5;
0x00013874 movs r5, 0 | r5 = 0;
0x00013876 blx 0x7d14 | json_array_get_element ();
0x0001387a str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x0001387c blx 0x72c4 | interface_message_reply_new_failure ();
0x00013880 str r0, [r4, 0x14] | *((r4 + 0x14)) = r0;
0x00013882 blx 0x7a74 | g_strdup_printf ()
0x00013886 ldr r0, [r4, 0x14] | r0 = *((r4 + 0x14));
0x00013888 blx 0x7a2c | g_object_ref ();
0x0001388c str r0, [r4, 0x18] | *((r4 + 0x18)) = r0;
0x0001388e blx 0x7a74 | g_strdup_printf ()
0x00013892 mov r1, r5 | r1 = r5;
0x00013894 ldr r0, [r4, 0x14] | r0 = *((r4 + 0x14));
0x00013896 blx 0x7718 | fcn_00007718 ();
0x0001389a ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x0001389c blx 0x742c | domain_osdp_get_key ();
0x000138a0 blx 0x72dc | r0 = link_message_get_message ();
0x000138a4 mov r3, r0 | r3 = r0;
0x000138a6 mov r0, r4 | r0 = r4;
0x000138a8 str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x000138aa bl 0x12cd4 | fcn_00012cd4 (r0);
0x000138ae ldr r2, [pc, 0x3c] |
0x000138b0 mov r3, r4 | r3 = r4;
0x000138b2 ldr r1, [pc, 0x3c] |
0x000138b4 strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x000138b8 add r2, pc | r2 = 0x271aa;
0x000138ba ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x000138bc add r1, pc | r1 = 0x271b2;
0x000138be blx 0x81fc | fcn_000081fc ();
0x000138c2 ldr r2, [pc, 0x30] |
0x000138c4 mov r3, r4 | r3 = r4;
0x000138c6 ldr r1, [pc, 0x30] |
0x000138c8 ldr r0, [r4, 0x14] | r0 = *((r4 + 0x14));
0x000138ca add r2, pc | r2 = 0x271c4;
0x000138cc strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x000138d0 add r1, pc | r1 = 0x271ce;
0x000138d2 blx 0x81fc | fcn_000081fc ();
0x000138d6 mov r0, r4 | r0 = r4;
0x000138d8 add sp, 8 |
0x000138da pop.w {r4, r5, r6, r7, r8, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0x13c90 */
| #include <stdint.h>
|
; (fcn) sym.aadp_op_logic_update () | void aadp_op_logic_update (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00013c90 invalid |
0x00013c94 ldr r3, [pc, 0x40] |
0x00013c96 mov r5, r1 | r5 = r1;
0x00013c98 movs r1, 0x80 | r1 = 0x80;
0x00013c9a ldr r2, [pc, 0x40] |
0x00013c9c ldr r0, [pc, 0x40] |
0x00013c9e add r3, pc |
0x00013ca0 add.w r3, r3, 0x228 | r3 = 0x27ba2;
0x00013ca4 add r2, pc | r2 = 0x27986;
0x00013ca6 add r0, pc | r0 = 0x2798a;
0x00013ca8 blx 0x88fc | fcn_000088fc ();
0x00013cac mov r0, r4 | r0 = r4;
0x00013cae bl 0x12c0c | fcn_00012c0c (r0);
0x00013cb2 ldr r0, [r4] | r0 = *(r4);
0x00013cb4 blx 0x74c4 | fcn_000074c4 ();
0x00013cb8 mov r0, r5 | r0 = r5;
0x00013cba blx 0x7a74 | g_strdup_printf ()
0x00013cbe str r0, [r4] | *(r4) = r0;
0x00013cc0 mov r0, r4 | r0 = r4;
0x00013cc2 bl 0x12cd4 | fcn_00012cd4 (r0);
0x00013cc6 ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x00013cc8 blx 0x7410 | fcn_00007410 ();
0x00013ccc ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00013cce ldr r0, [r3, 0xc] | r0 = *(0x27bae);
0x00013cd0 pop.w {r3, r4, r5, lr} |
0x00013cd4 b.w 0x7278 | return void (*0x7278)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0xba74 */
| #include <stdint.h>
|
; (fcn) sym.io_logic_update () | void io_logic_update (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0000ba74 push {r3, r4, r5, lr} |
0x0000ba76 mov r4, r0 | r4 = r0;
0x0000ba78 ldr r3, [pc, 0x30] |
0x0000ba7a mov r5, r1 | r5 = r1;
0x0000ba7c movs r1, 0x80 | r1 = 0x80;
0x0000ba7e ldr r2, [pc, 0x30] |
0x0000ba80 ldr r0, [pc, 0x30] |
0x0000ba82 add r3, pc | r3 = 0x17532;
0x0000ba84 adds r3, 0xd0 | r3 += 0xd0;
0x0000ba86 add r2, pc | r2 = 0x1753c;
0x0000ba88 add r0, pc | r0 = 0x17540;
0x0000ba8a blx 0x88fc | fcn_000088fc ();
0x0000ba8e ldr r0, [r4] | r0 = *(r4);
0x0000ba90 blx 0x74c4 | fcn_000074c4 ();
0x0000ba94 mov r0, r5 | r0 = r5;
0x0000ba96 blx 0x7a74 | g_strdup_printf ()
0x0000ba98 vaddl.s32 q11, d14, d16 | __asm ("vaddl.s32 q11, d14, d16");
0x0000ba9c ldr r0, [r4, 0x34] | r0 = *((r4 + 0x34));
0x0000ba9e blx 0x7410 | fcn_00007410 ();
0x0000baa2 mov r0, r4 | r0 = r4;
0x0000baa4 pop.w {r3, r4, r5, lr} |
0x0000baa8 b 0xb464 | return void (*0xb464)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0x16414 */
| #include <stdint.h>
|
; (fcn) sym.modbus_logic_create () | void modbus_logic_create (int16_t arg_48h, int16_t arg_4ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_14h_2;
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int32_t var_10h;
| int32_t var_18h_2;
| int16_t var_1ah;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00016414 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00016418 mov r7, r2 | r7 = r2;
0x0001641a ldr r2, [pc, 0x1c4] |
0x0001641c mov r6, r3 | r6 = r3;
0x0001641e sub sp, 0x24 |
0x00016420 mov sb, r0 | sb = r0;
0x00016422 ldr r3, [pc, 0x1c0] | r3 = *(0x165e6);
0x00016424 movs r0, 0x64 | r0 = 0x64;
0x00016426 add r2, pc | r2 = 0x2ca0c;
0x00016428 ldr.w sl, [pc, 0x1bc] |
0x0001642c mov r8, r1 | r8 = r1;
0x0001642e ldr r5, [sp, 0x48] | r5 = *(arg_48h);
0x00016430 ldr r3, [r2, r3] |
0x00016432 add sl, pc | sl = 0x2ca1e;
0x00016434 ldr r3, [r3] | r3 = *(0x2ca0c);
0x00016436 str r3, [sp, 0x1c] | var_1ch = r3;
0x00016438 mov.w r3, 0 | r3 = 0;
0x0001643c ldrd fp, r3, [sp, 0x4c] | __asm ("ldrd fp, r3, [arg_4ch]");
0x00016440 str r3, [sp, 8] | var_8h = r3;
0x00016442 blx 0x8440 | se_utils_secure_element_available ();
0x00016446 ldr r2, [pc, 0x1a4] | r2 = *(0x165ee);
0x00016448 mov r4, r0 | r4 = r0;
0x0001644a ldr r3, [pc, 0x1a4] |
0x0001644c ldr.w r2, [sl, r2] | r2 = *(0x2ca1e);
0x00016450 add r3, pc | r3 = 0x2ca46;
0x00016452 mov r1, r2 | r1 = r2;
0x00016454 str r2, [sp, 0xc] | var_ch = r2;
0x00016456 ldr r2, [pc, 0x19c] | r2 = *(0x165f6);
0x00016458 ldr.w r2, [sl, r2] | r2 = *(0x2ca1e);
0x0001645c mov r0, r2 | r0 = r2;
0x0001645e str r2, [sp, 0xc] | var_ch = r2;
0x00016460 movs r2, 0 | r2 = 0;
0x00016462 blx 0x7c04 | fcn_00007c04 ();
0x00016466 strd r0, fp, [r4, 0x18] | __asm ("strd r0, fp, [r4, 0x18]");
0x0001646a mov r0, r8 | r0 = r8;
0x0001646c blx 0x7a74 | g_strdup_printf ()
0x00016470 ldr r3, [sp, 8] | r3 = var_8h;
0x00016472 str r0, [r4] | *(r4) = r0;
0x00016474 mov r0, r6 | r0 = r6;
0x00016476 str r5, [r4, 0x10] | *((r4 + 0x10)) = r5;
0x00016478 movs r5, 0 | r5 = 0;
0x0001647a str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x0001647c str r7, [r4, 4] | *((r4 + 4)) = r7;
0x0001647e str r6, [r4, 0x30] | *((r4 + 0x30)) = r6;
0x00016480 blx 0x8214 | fcn_00008214 ();
0x00016484 str r0, [r4, 0x34] | *((r4 + 0x34)) = r0;
0x00016486 mov r0, r6 | r0 = r6;
0x00016488 blx 0x8214 | fcn_00008214 ();
0x0001648c str r0, [r4, 0x38] | *((r4 + 0x38)) = r0;
0x0001648e blx 0x7fb0 | fcn_00007fb0 ();
0x00016492 str r5, [r4, 0x14] | *((r4 + 0x14)) = r5;
0x00016494 str r0, [r4, 0x3c] | *((r4 + 0x3c)) = r0;
0x00016496 blx 0x89e0 | r0 = fcn_000089e0 ();
0x0001649a mov r1, r0 | r1 = r0;
0x0001649c mov r0, r8 | r0 = r8;
0x0001649e blx 0x8268 | fcn_00008268 ();
0x000164a2 mov r1, r6 | r1 = r6;
0x000164a4 movs r6, 1 | r6 = 1;
0x000164a6 mov r2, sb | r2 = sb;
0x000164a8 mov r3, r7 | r3 = r7;
0x000164aa str r6, [sp] | *(sp) = r6;
0x000164ac blx 0x7d14 | json_array_get_element ();
0x000164b0 str r0, [r4, 0x40] | *((r4 + 0x40)) = r0;
0x000164b2 blx 0x77cc | fcn_000077cc ();
0x000164b6 str r0, [r4, 0x44] | *((r4 + 0x44)) = r0;
0x000164b8 blx 0x84dc | fcn_000084dc ();
0x000164bc mov r4, ip | r4 = ip;
0x000164be mov r1, r5 | r1 = r5;
0x000164c0 str r3, [r4, 0x48] | *((r4 + 0x48)) = r3;
0x000164c2 ldr r0, [r4, 0x44] | r0 = *((r4 + 0x44));
0x000164c4 blx 0x7718 | fcn_00007718 ();
0x000164c8 mov r1, r5 | r1 = r5;
0x000164ca ldr r0, [r4, 0x44] | r0 = *((r4 + 0x44));
0x000164cc blx 0x77c0 | fcn_000077c0 ();
0x000164d0 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x000164d2 blx 0x742c | r0 = domain_osdp_get_key ();
0x000164d6 mov r7, r0 | r7 = r0;
0x000164d8 blx 0x8938 | domain_get_type ();
0x000164dc ldr r1, [pc, 0x118] |
0x000164de mov r6, r0 | r6 = r0;
0x000164e0 ldr r0, [pc, 0x118] |
0x000164e2 mov r2, r5 | r2 = r5;
0x000164e4 add r1, pc | r1 = 0x2cae0;
0x000164e6 add r0, pc | r0 = 0x2cae6;
0x000164e8 blx 0x7a44 | domain_osdp_get_keytype ();
0x000164ec ldr r1, [pc, 0x110] | r1 = *(0x16600);
0x000164ee mov r2, r5 | r2 = r5;
0x000164f0 str r0, [r4, 0x5c] | *((r4 + 0x5c)) = r0;
0x000164f2 ldr r0, [pc, 0x110] | r0 = *(0x16606);
0x000164f4 movs r0, r0 |
0x000164f6 movs r0, r0 |
0x000164f8 blx 0x7a44 | r0 = domain_osdp_get_keytype ();
0x000164fc mov r3, r0 | r3 = r0;
0x000164fe mov r0, r7 | r0 = r7;
0x00016500 str r3, [sp, 0x14] | var_14h = r3;
0x00016502 add r7, sp, 0x18 | r7 += var_18h;
0x00016504 blx 0x72dc | link_message_get_message ();
0x00016508 ldr r2, [pc, 0xfc] |
0x0001650a ldr r1, [sp, 0x14] | r1 = var_14h;
0x0001650c str r0, [r4, 0x60] | *((r4 + 0x60)) = r0;
0x0001650e add r2, pc | r2 = 0x2cb1a;
0x00016510 blx 0x7c8c | fcn_00007c8c ();
0x00016514 ldr r2, [pc, 0xf4] |
0x00016516 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00016518 str r0, [r4, 0x54] | *((r4 + 0x54)) = r0;
0x0001651a add r2, pc | r2 = 0x2cb2a;
0x0001651c ldr r0, [r4, 0x60] | r0 = *((r4 + 0x60));
0x0001651e blx 0x7c8c | fcn_00007c8c ();
0x00016522 str r0, [r4, 0x58] | *((r4 + 0x58)) = r0;
0x00016524 blx 0x7814 | fcn_00007814 ();
0x00016528 ldr r1, [pc, 0xe4] |
0x0001652a ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x0001652c str r0, [sp, 0x18] | var_18h = r0;
0x0001652e add r1, pc | r1 = 0x2cb42;
0x00016530 blx 0x7e3c | fcn_00007e3c ();
0x00016534 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00016536 ldr r0, [r4, 0x54] | r0 = *((r4 + 0x54));
0x00016538 blx 0x8634 | fcn_00008634 ();
0x0001653c mov r0, r7 | r0 = r7;
0x0001653e blx 0x7f98 | fcn_00007f98 ();
0x00016542 blx 0x7814 | fcn_00007814 ();
0x00016546 ldr r1, [pc, 0xcc] |
0x00016548 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0001654a str r0, [sp, 0x18] | var_18h = r0;
0x0001654c add r1, pc | r1 = 0x2cb66;
0x0001654e blx 0x7bd4 | fcn_00007bd4 ();
0x00016552 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00016554 ldr r0, [r4, 0x58] | r0 = *((r4 + 0x58));
0x00016556 blx 0x8634 | fcn_00008634 ();
0x0001655a mov r0, r7 | r0 = r7;
0x0001655c blx 0x7f98 | fcn_00007f98 ();
0x00016560 ldr r2, [pc, 0xb4] |
0x00016562 mov r0, r6 | r0 = r6;
0x00016564 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00016566 add r2, pc | r2 = 0x2cb82;
0x00016568 blx 0x79fc | interface_definition_create ();
0x0001656c ldr r2, [pc, 0xac] |
0x0001656e mov r3, r0 | r3 = r0;
0x00016570 str r3, [r4, 0x4c] | *((r4 + 0x4c)) = r3;
0x00016572 mov r0, r6 | r0 = r6;
0x00016574 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00016576 add r2, pc | r2 = 0x2cb96;
0x00016578 blx 0x79fc | interface_definition_create ();
0x0001657c ldr r1, [pc, 0xa0] |
0x0001657e mov r2, r5 | r2 = r5;
0x00016580 str r0, [r4, 0x50] | *((r4 + 0x50)) = r0;
0x00016582 add r1, pc | r1 = 0x2cba6;
0x00016584 blx 0x7960 | g_mutex_init ();
0x00016588 add r0, sp, 0x14 | r0 += var_14h;
0x0001658a blx 0x8120 | fcn_00008120 ();
0x0001658e mov r0, r4 | r0 = r4;
0x00016590 bl 0x15dd4 | fcn_00015dd4 (r0);
0x00016594 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x00016596 mov r1, r7 | r1 = r7;
0x00016598 str r5, [sp, 0x18] | var_18h = r5;
0x0001659a blx 0x86cc | fcn_000086cc ();
0x0001659e ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r3 != 0) {
0x000165a0 cbz r3, 0x165c0 |
0x000165a2 ldr r3, [pc, 0x80] |
0x000165a4 movw r2, 0x2ba | r2 = 0x2ba;
0x000165a8 ldr r4, [pc, 0x7c] |
0x000165aa ldr r1, [pc, 0x80] |
0x000165ac ldr r0, [pc, 0x80] |
0x000165ae add r3, pc |
0x000165b0 add r4, pc | r4 = 0x2cbdc;
0x000165b2 add.w r3, r3, 0x12c | r3 = 0x2cd04;
0x000165b6 add r1, pc | r1 = 0x2cbe8;
0x000165b8 str r4, [sp] | *(sp) = r4;
0x000165ba add r0, pc | r0 = 0x2cbee;
0x000165bc blx 0x7a08 | resource_relation_get_reference ();
| }
0x000165c0 ldr r2, [pc, 0x70] |
0x000165c2 ldr r3, [pc, 0x20] | r3 = *(0x165e6);
0x000165c4 add r2, pc | r2 = 0x2cbfc;
0x000165c6 ldr r3, [r2, r3] | r3 = *(0x2cbfc);
0x000165c8 ldr r2, [r3] | r2 = *(0x2cbfc);
0x000165ca ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000165cc eors r2, r3 | r2 ^= r3;
0x000165ce mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000165d2 bne 0x165dc |
0x000165d4 mov r0, r4 | r0 = r4;
0x000165d6 add sp, 0x24 |
0x000165d8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x000165dc blx 0x828c | fcn_0000828c ();
0x000165e0 strh r6, [r7, 0x1a] | var_1ah = r6;
0x000165e2 movs r0, r0 |
0x000165e4 lsrs r4, r3, 0x20 | r4 = r3 >> 0x20;
0x000165e6 movs r0, r0 |
0x000165e8 strh r2, [r6, 0x1a] | *((r6 + 0x1a)) = r2;
0x000165ea movs r0, r0 |
0x000165ec lsls r4, r6, 0x1f | r4 = r6 << 0x1f;
0x000165ee movs r0, r0 |
0x000165f0 bl 0x2045f2 | void (*0x2045f2)(uint32_t, uint32_t) (r0, r2);
0x000165f4 lsrs r4, r6, 0x20 | r4 = r6 >> 0x20;
0x000165f6 movs r0, r0 |
0x000165f8 subs r0, 0x9c | r0 -= 0x9c;
0x000165fa movs r0, r0 |
0x000165fc movs r6, 0xee | r6 = 0xee;
0x000165fe movs r0, r0 |
0x00016600 str r0, [r1, 0x18] | var_18h_2 = r0;
0x00016602 movs r0, r0 |
0x00016604 subs r0, 0x9e | r0 -= 0x9e;
0x00016606 movs r0, r0 |
0x00016608 str r2, [r0, 0x18] | *((r0 + 0x18)) = r2;
0x0001660a movs r0, r0 |
0x0001660c ldrsb r2, [r7, r2] | r2 = *((r7 + r2));
0x0001660e movs r0, r0 |
0x00016610 ldrsh r6, [r0, r4] | r6 = *((r0 + r4));
0x00016612 movs r0, r0 |
0x00016614 adds r1, 0xec | r1 += 0xec;
0x00016616 movs r0, r0 |
0x00016618 str r6, [r7, 0x10] | var_10h = r6;
0x0001661a movs r0, r0 |
0x0001661c subs r0, 0x6e | r0 -= 0x6e;
0x0001661e movs r0, r0 |
0x00016620 adds r5, 0x5a | r5 += 0x5a;
0x00016622 movs r0, r0 |
0x00016624 str r2, [r0, 0x10] | *((r0 + 0x10)) = r2;
0x00016626 movs r0, r0 |
0x00016628 movs r7, 0x68 | r7 = 0x68;
0x0001662a movs r0, r0 |
0x0001662c ldrsh r6, [r3, r0] | r6 = *((r3 + r0));
0x0001662e movs r0, r0 |
0x00016630 adds r6, r1, r4 | r6 = r1 + r4;
0x00016632 movs r0, r0 |
0x00016634 strh r0, [r4, 0xe] | *((r4 + 0xe)) = r0;
0x00016636 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0x16638 */
| #include <stdint.h>
|
; (fcn) sym.modbus_logic_update () | void modbus_logic_update (uint32_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| do {
0x0000740c invalid | void (*0x7410)() ();
0x00016638 ldr r2, [pc, 0xe4] |
0x0001663a ldr r3, [pc, 0xe8] | r3 = *(0x16726);
0x0001663c push {r4, r5, r6, lr} |
0x0001663e sub sp, 0x18 |
0x00016640 add r2, pc | r2 = 0x2cd64;
0x00016642 ldr r6, [pc, 0xe4] |
0x00016644 ldr r3, [r2, r3] |
0x00016646 add r6, pc | r6 = 0x2cd74;
0x00016648 ldr r3, [r3] | r3 = *(0x2cd64);
0x0001664a str r3, [sp, 0x14] | var_14h = r3;
0x0001664c mov.w r3, 0 | r3 = 0;
0x00016650 cmp r0, 0 |
| if (r0 == 0) {
0x00016652 beq 0x166fc | goto label_0;
| }
0x00016654 ldr r3, [pc, 0xd4] |
0x00016656 mov r4, r0 | r4 = r0;
0x00016658 ldr r2, [pc, 0xd4] |
0x0001665a mov r5, r1 | r5 = r1;
0x0001665c ldr r0, [pc, 0xd4] |
0x0001665e movs r1, 0x80 | r1 = 0x80;
0x00016660 add r3, pc |
0x00016662 add r2, pc | r2 = 0x2cd96;
0x00016664 add.w r3, r3, 0x140 | r3 = 0x2ced0;
0x00016668 add r0, pc | r0 = 0x2cda0;
0x0001666a blx 0x88fc | fcn_000088fc ();
0x0001666e ldr r0, [r4] | r0 = *(r4);
0x00016670 blx 0x74c4 | fcn_000074c4 ();
0x00016674 mov r0, r5 | r0 = r5;
0x00016676 blx 0x7a74 | r0 = g_strdup_printf ()
0x0001667a mov r3, r0 | r3 = r0;
0x0001667c ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x0001667e ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x00016680 str r3, [r4] | *(r4) = r3;
0x00016682 blx 0x83b0 | gpio_set ();
0x00016686 str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
| if (r0 != 0) {
0x00016688 cbz r0, 0x166d6 |
0x0001668a blx 0x8980 | fcn_00008980 ();
0x0001668e movs r3, 0 | r3 = 0;
0x00016690 mov r0, r4 | r0 = r4;
0x00016692 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x00016694 bl 0x15b20 | r0 = fcn_00015b20 (r0);
| if (r0 != 0) {
0x00016698 cbz r0, 0x1669e |
0x0001669a blx 0x8820 | fcn_00008820 ();
| }
0x0001669e ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x000166a0 ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x000166a2 blx 0x7880 | fcn_00007880 ();
0x000166a6 ldr r3, [pc, 0x90] | r3 = *(0x1673a);
0x000166a8 ldr r0, [r4, 0x14] | r0 = *((r4 + 0x14));
0x000166aa ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x000166ac mov r1, r3 | r1 = r3;
0x000166ae str r3, [sp, 0xc] | var_ch_2 = r3;
0x000166b0 blx 0x76d0 | fcn_000076d0 ();
0x000166b4 movs r3, 0 | r3 = 0;
0x000166b6 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000166b8 blx 0x7814 | fcn_00007814 ();
0x000166bc ldr r1, [pc, 0x7c] |
0x000166be ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x000166c0 str r0, [sp, 0x10] | var_10h = r0;
0x000166c2 add r1, pc | r1 = 0x2ce02;
0x000166c4 blx 0x7e3c | fcn_00007e3c ();
0x000166c8 ldr r0, [r4, 0x54] | r0 = *((r4 + 0x54));
0x000166ca ldr r1, [sp, 0x10] | r1 = var_10h;
0x000166cc blx 0x8634 | fcn_00008634 ();
0x000166d0 add r0, sp, 0x10 | r0 += var_10h;
0x000166d2 blx 0x7f98 | fcn_00007f98 ();
| }
0x000166d6 mov r0, r4 | r0 = r4;
0x000166d8 bl 0x15dd4 | fcn_00015dd4 (r0);
0x000166dc ldr r2, [pc, 0x60] |
0x000166de ldr r3, [pc, 0x44] | r3 = *(0x16726);
0x000166e0 add r2, pc | r2 = 0x2ce24;
0x000166e2 ldr r3, [r2, r3] | r3 = *(0x2ce24);
0x000166e4 ldr r2, [r3] | r2 = *(0x2ce24);
0x000166e6 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000166e8 eors r2, r3 | r2 ^= r3;
0x000166ea mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000166ee bne 0x1671a | goto label_1;
| }
0x000166f0 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x000166f2 add sp, 0x18 |
0x000166f4 pop.w {r4, r5, r6, lr} |
0x000166f8 b.w 0x740c |
| } while (1);
| label_0:
0x000166fc ldr r3, [pc, 0x44] |
0x000166fe movw r2, 0x2c2 | r2 = 0x2c2;
0x00016702 ldr r4, [pc, 0x44] |
0x00016704 ldr r1, [pc, 0x44] |
0x00016706 ldr r0, [pc, 0x48] |
0x00016708 add r3, pc |
0x0001670a add r4, pc | r4 = 0x2ce58;
0x0001670c add.w r3, r3, 0x140 | r3 = 0x2cf90;
0x00016710 add r1, pc | r1 = 0x2ce60;
0x00016712 str r4, [sp] | *(sp) = r4;
0x00016714 add r0, pc | r0 = 0x2ce6a;
0x00016716 blx 0x7a08 | resource_relation_get_reference ();
| label_1:
0x0001671a blx 0x828c | fcn_0000828c ();
0x0001671e nop |
0x00016720 strh r4, [r4, 0xa] | *((r4 + 0xa)) = r4;
0x00016722 movs r0, r0 |
0x00016724 lsrs r4, r3, 0x20 | r4 = r3 >> 0x20;
0x00016726 movs r0, r0 |
0x00016728 strh r6, [r3, 0xa] | *((r3 + 0xa)) = r6;
0x0001672a movs r0, r0 |
0x0001672c str r0, [r2, 4] | *((r2 + 4)) = r0;
0x0001672e movs r0, r0 |
0x00016730 movs r3, 0x96 | r3 = 0x96;
0x00016732 movs r0, r0 |
0x00016734 adds r0, r4, r1 | r0 = r4 + r1;
0x00016736 movs r0, r0 |
0x00016738 lsrs r4, r0, 0x20 | r4 = r0 >> 0x20;
0x0001673a movs r0, r0 |
0x0001673c ldrb r2, [r6, r5] | r2 = *((r6 + r5));
0x0001673e movs r0, r0 |
0x00016740 strh r4, [r0, 6] | *((r0 + 6)) = r4;
0x00016742 movs r0, r0 |
0x00016744 ldrsh r0, [r5, r6] | r0 = *((r5 + r6));
0x00016746 movs r0, r0 |
0x00016748 subs r2, r7, 6 | r2 = r7 - 6;
0x0001674a movs r0, r0 |
0x0001674c ldrb r4, [r0, r3] | r4 = *((r0 + r3));
0x0001674e movs r0, r0 |
0x00016750 asrs r4, r6, 0x1e | r4 = r6 >> 0x1e;
0x00016752 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0xed44 */
| #include <stdint.h>
|
; (fcn) sym.osdp_logic_create () | void osdp_logic_create (int16_t arg_48h, int16_t arg_4ch, int16_t arg_50h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_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;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0000ed44 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x0000ed48 mov r6, r2 | r6 = r2;
0x0000ed4a ldr r2, [pc, 0x298] |
0x0000ed4c mov r5, r3 | r5 = r3;
0x0000ed4e sub sp, 0x24 |
0x0000ed50 mov r7, r1 | r7 = r1;
0x0000ed52 ldr r3, [pc, 0x294] | r3 = *(0xefea);
0x0000ed54 mov r8, r0 | r8 = r0;
0x0000ed56 add r2, pc | r2 = 0x1dd40;
0x0000ed58 ldr.w fp, [sp, 0x4c] | fp = *(arg_4ch);
0x0000ed5c ldr.w sb, [sp, 0x48] | sb = *(arg_48h);
0x0000ed60 movs r0, 0xb8 | r0 = 0xb8;
0x0000ed62 ldr r3, [r2, r3] |
0x0000ed64 ldr.w sl, [sp, 0x50] | sl = *(arg_50h);
0x0000ed68 ldr r3, [r3] | r3 = *(0x1dd40);
0x0000ed6a str r3, [sp, 0x1c] | var_1ch = r3;
0x0000ed6c mov.w r3, 0 | r3 = 0;
0x0000ed70 blx 0x8440 | r0 = se_utils_secure_element_available ();
0x0000ed74 mov r4, r0 | r4 = r0;
0x0000ed76 str.w fp, [r0, 0x1c] | __asm ("str.w fp, [r0, 0x1c]");
0x0000ed7a mov r0, r7 | r0 = r7;
0x0000ed7c blx 0x7a74 | g_strdup_printf ()
0x0000ed7e cdp p0, 7, c6, c10, c6, 3 | __asm ("cdp p0, 7, c6, c10, c6, 3");
0x0000ed82 str r0, [r4] | *(r4) = r0;
0x0000ed84 mov r0, r5 | r0 = r5;
0x0000ed86 str r5, [r4, 0x70] | *((r4 + 0x70)) = r5;
0x0000ed88 str.w sl, [r4, 0x44] | __asm ("str.w sl, [r4, 0x44]");
0x0000ed8c str.w sb, [r4, 0x18] | __asm ("str.w sb, [r4, 0x18]");
0x0000ed90 blx 0x8214 | fcn_00008214 ();
0x0000ed94 str r0, [r4, 0x74] | *((r4 + 0x74)) = r0;
0x0000ed96 mov r0, r5 | r0 = r5;
0x0000ed98 blx 0x8214 | fcn_00008214 ();
0x0000ed9c str r0, [r4, 0x78] | *((r4 + 0x78)) = r0;
0x0000ed9e ldr r0, [pc, 0x24c] |
0x0000eda0 add r0, pc | r0 = 0x1dd92;
0x0000eda2 blx 0x8154 | fcn_00008154 ();
0x0000eda6 str r0, [r4, 8] | *((r4 + 8)) = r0;
0x0000eda8 blx 0x88c4 | fcn_000088c4 ();
0x0000edac str.w r0, [r4, 0xac] | __asm ("str.w r0, [r4, 0xac]");
0x0000edb0 movs r0, 0 | r0 = 0;
0x0000edb2 blx 0x785c | fcn_0000785c ();
0x0000edb6 str r0, [r4, 0x48] | *((r4 + 0x48)) = r0;
0x0000edb8 blx 0x89e0 | r0 = fcn_000089e0 ();
0x0000edbc mov r1, r0 | r1 = r0;
0x0000edbe mov r0, r7 | r0 = r7;
0x0000edc0 blx 0x8268 | fcn_00008268 ();
0x0000edc4 mov r1, r5 | r1 = r5;
0x0000edc6 movs r5, 1 | r5 = 1;
0x0000edc8 mov r3, r6 | r3 = r6;
0x0000edca mov r2, r8 | r2 = r8;
0x0000edcc str r5, [sp] | *(sp) = r5;
0x0000edce movs r5, 0 | r5 = 0;
0x0000edd0 blx 0x7d14 | json_array_get_element ();
0x0000edd4 str r0, [r4, 0x7c] | *((r4 + 0x7c)) = r0;
0x0000edd6 blx 0x72c4 | interface_message_reply_new_failure ();
0x0000edda str.w r0, [r4, 0x80] | __asm ("str.w r0, [r4, 0x80]");
0x0000edde blx 0x7a74 | g_strdup_printf ()
0x0000ede2 ldr.w r0, [r4, 0x80] | r0 = *((r4 + 0x80));
0x0000ede6 blx 0x7a2c | g_object_ref ();
0x0000edea str.w r0, [r4, 0x84] | __asm ("str.w r0, [r4, 0x84]");
0x0000edee blx 0x7a74 | g_strdup_printf ()
0x0000edf2 ldr.w r0, [r4, 0x80] | r0 = *((r4 + 0x80));
0x0000edf6 mov r1, r5 | r1 = r5;
0x0000edf8 blx 0x7718 | fcn_00007718 ();
0x0000edfc ldr.w r0, [r4, 0x80] | r0 = *((r4 + 0x80));
0x0000ee00 mov r1, r5 | r1 = r5;
0x0000ee02 blx 0x77c0 | fcn_000077c0 ();
0x0000ee06 ldr r2, [pc, 0x1e8] |
0x0000ee08 mov r3, r4 | r3 = r4;
0x0000ee0a ldr r1, [pc, 0x1e8] |
0x0000ee0c strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x0000ee10 add r2, pc | r2 = 0x1de06;
0x0000ee12 ldr.w r0, [r4, 0x84] | r0 = *((r4 + 0x84));
0x0000ee16 add r1, pc | r1 = 0x1de10;
0x0000ee18 ldr r7, [pc, 0x1dc] |
0x0000ee1a blx 0x81fc | fcn_000081fc ();
0x0000ee1e ldr r2, [pc, 0x1dc] |
0x0000ee20 mov r3, r4 | r3 = r4;
0x0000ee22 ldr r1, [pc, 0x1dc] |
0x0000ee24 add r7, pc | r7 = 0x1de20;
0x0000ee26 strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x0000ee2a add r2, pc | r2 = 0x1de2c;
0x0000ee2c ldr.w r0, [r4, 0x80] | r0 = *((r4 + 0x80));
0x0000ee30 add r1, pc | r1 = 0x1de36;
0x0000ee32 blx 0x81fc | fcn_000081fc ();
0x0000ee36 ldr r0, [r4, 0x7c] | r0 = *((r4 + 0x7c));
0x0000ee38 blx 0x742c | r0 = domain_osdp_get_key ();
0x0000ee3c mov r8, r0 | r8 = r0;
0x0000ee3e blx 0x8938 | domain_get_type ();
0x0000ee42 ldr r1, [pc, 0x1c0] |
0x0000ee44 mov r6, r0 | r6 = r0;
0x0000ee46 ldr r0, [pc, 0x1c0] |
0x0000ee48 mov r2, r5 | r2 = r5;
0x0000ee4a add r1, pc | r1 = 0x1de54;
0x0000ee4c add r0, pc | r0 = 0x1de5a;
0x0000ee4e blx 0x7a44 | domain_osdp_get_keytype ();
0x0000ee52 ldr r1, [pc, 0x1b8] |
0x0000ee54 mov r2, r5 | r2 = r5;
0x0000ee56 str.w r0, [r4, 0xa4] | __asm ("str.w r0, [r4, 0xa4]");
0x0000ee5a mov r0, r7 | r0 = r7;
0x0000ee5c add r1, pc | r1 = 0x1de6e;
0x0000ee5e blx 0x7a44 | domain_osdp_get_keytype ();
0x0000ee62 ldr r2, [pc, 0x1ac] |
0x0000ee64 mov r1, r0 | r1 = r0;
0x0000ee66 str r0, [sp, 8] | var_8h = r0;
0x0000ee68 mov r0, r6 | r0 = r6;
0x0000ee6a add r2, pc | r2 = 0x1de80;
0x0000ee6c blx 0x79fc | interface_definition_create ();
0x0000ee70 ldr r1, [pc, 0x1a0] |
0x0000ee72 mov r2, r5 | r2 = r5;
0x0000ee74 str.w r0, [r4, 0x94] | __asm ("str.w r0, [r4, 0x94]");
0x0000ee78 add r1, pc | r1 = 0x1de90;
0x0000ee7a blx 0x7960 | g_mutex_init ();
0x0000ee7e ldr r1, [pc, 0x198] |
0x0000ee80 mov r2, r5 | r2 = r5;
0x0000ee82 mov r0, r7 | r0 = r7;
0x0000ee84 add r1, pc | r1 = 0x1dea2;
0x0000ee86 blx 0x7a44 | domain_osdp_get_keytype ();
0x0000ee8a ldr r1, [pc, 0x190] |
0x0000ee8c mov r2, r5 | r2 = r5;
0x0000ee8e str r0, [sp, 0xc] | var_ch = r0;
0x0000ee90 mov r0, r7 | r0 = r7;
0x0000ee92 add r1, pc | r1 = 0x1deb4;
0x0000ee94 blx 0x7a44 | domain_osdp_get_keytype ();
0x0000ee98 ldr r2, [pc, 0x184] |
0x0000ee9a ldr r1, [sp, 0xc] | r1 = var_ch;
0x0000ee9c str r0, [sp, 0x10] | var_10h = r0;
0x0000ee9e mov r0, r6 | r0 = r6;
0x0000eea0 add r2, pc | r2 = 0x1dec4;
0x0000eea2 blx 0x79fc | interface_definition_create ();
0x0000eea6 ldr r2, [pc, 0x17c] |
0x0000eea8 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0000eeaa str.w r0, [r4, 0x88] | __asm ("str.w r0, [r4, 0x88]");
0x0000eeae mov r0, r6 | r0 = r6;
0x0000eeb0 add r2, pc | r2 = 0x1deda;
0x0000eeb2 blx 0x79fc | interface_definition_create ();
0x0000eeb6 ldr r2, [pc, 0x170] |
0x0000eeb8 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0000eeba str.w r0, [r4, 0x8c] | __asm ("str.w r0, [r4, 0x8c]");
0x0000eebe mov r0, r6 | r0 = r6;
0x0000eec0 add r2, pc | r2 = 0x1deee;
0x0000eec2 blx 0x79fc | interface_definition_create ();
0x0000eec6 ldr r2, [pc, 0x164] |
0x0000eec8 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0000eeca str.w r0, [r4, 0x90] | __asm ("str.w r0, [r4, 0x90]");
0x0000eece mov r0, r6 | r0 = r6;
0x0000eed0 add r2, pc | r2 = 0x1df02;
0x0000eed2 blx 0x79fc | r0 = interface_definition_create ();
0x0000eed6 mov r3, r0 | r3 = r0;
0x0000eed8 mov r0, r8 | r0 = r8;
0x0000eeda str.w r3, [r4, 0xb0] | __asm ("str.w r3, [r4, 0xb0]");
0x0000eede blx 0x72dc | link_message_get_message ();
0x0000eee2 ldr r2, [pc, 0x14c] |
0x0000eee4 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0000eee6 str.w r0, [r4, 0xa8] | __asm ("str.w r0, [r4, 0xa8]");
0x0000eeea add r2, pc | r2 = 0x1df20;
0x0000eeec blx 0x7c8c | fcn_00007c8c ();
0x0000eef0 ldr r2, [pc, 0x140] |
0x0000eef2 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0000eef4 str.w r0, [r4, 0xa0] | __asm ("str.w r0, [r4, 0xa0]");
0x0000eef8 add r2, pc | r2 = 0x1df30;
0x0000eefa ldr.w r0, [r4, 0xa8] | r0 = *((r4 + 0xa8));
0x0000eefe blx 0x7c8c | fcn_00007c8c ();
0x0000ef02 ldr r1, [pc, 0x134] |
0x0000ef04 mov r2, r5 | r2 = r5;
0x0000ef06 str.w r0, [r4, 0xb4] | __asm ("str.w r0, [r4, 0xb4]");
0x0000ef0a ldr r0, [pc, 0x130] |
0x0000ef0c add r1, pc | r1 = 0x1df4a;
0x0000ef0e add r0, pc | r0 = 0x1df50;
0x0000ef10 blx 0x7a44 | domain_osdp_get_keytype ();
0x0000ef14 ldr r2, [pc, 0x128] |
0x0000ef16 mov r1, r0 | r1 = r0;
0x0000ef18 mov r0, r6 | r0 = r6;
0x0000ef1a str r1, [sp, 0x14] | var_14h = r1;
0x0000ef1c add r2, pc | r2 = 0x1df60;
0x0000ef1e blx 0x79fc | interface_definition_create ();
0x0000ef22 ldr r2, [pc, 0x120] |
0x0000ef24 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0000ef26 str.w r0, [r4, 0x98] | __asm ("str.w r0, [r4, 0x98]");
0x0000ef2a add r2, pc | r2 = 0x1df74;
0x0000ef2c ldr.w r0, [r4, 0xa8] | r0 = *((r4 + 0xa8));
0x0000ef30 blx 0x7c8c | fcn_00007c8c ();
0x0000ef34 ldr r1, [pc, 0x110] |
0x0000ef36 mov r3, r0 | r3 = r0;
0x0000ef38 str.w r3, [r4, 0x9c] | __asm ("str.w r3, [r4, 0x9c]");
0x0000ef3c mov r2, r5 | r2 = r5;
0x0000ef3e ldr.w r0, [r4, 0x88] | r0 = *((r4 + 0x88));
0x0000ef42 add r1, pc | r1 = 0x1df8e;
0x0000ef44 blx 0x7960 | g_mutex_init ();
0x0000ef48 ldr r1, [pc, 0x100] |
0x0000ef4a mov r2, r5 | r2 = r5;
0x0000ef4c ldr.w r0, [r4, 0x90] | r0 = *((r4 + 0x90));
0x0000ef50 add r1, pc | r1 = 0x1dfa0;
0x0000ef52 blx 0x7960 | g_mutex_init ();
0x0000ef56 ldr r1, [pc, 0xf8] |
0x0000ef58 mov r2, r5 | r2 = r5;
0x0000ef5a ldr.w r0, [r4, 0xb0] | r0 = *((r4 + 0xb0));
0x0000ef5e add r1, pc | r1 = 0x1dfb4;
0x0000ef60 blx 0x7960 | g_mutex_init ();
0x0000ef64 ldr r1, [pc, 0xec] |
0x0000ef66 mov r2, r5 | r2 = r5;
0x0000ef68 ldr.w r0, [r4, 0x8c] | r0 = *((r4 + 0x8c));
0x0000ef6c add r1, pc | r1 = 0x1dfc4;
0x0000ef6e blx 0x7960 | g_mutex_init ();
0x0000ef72 mov r0, r4 | r0 = r4;
0x0000ef74 bl 0xd7a4 | fcn_0000d7a4 (r0, r1, r2);
0x0000ef78 add r0, sp, 0x14 | r0 += var_14h;
0x0000ef7a blx 0x8120 | fcn_00008120 ();
0x0000ef7e add r0, sp, 0xc | r0 += var_ch;
0x0000ef80 blx 0x8120 | fcn_00008120 ();
0x0000ef84 add r0, sp, 0x10 | r0 += var_10h;
0x0000ef86 blx 0x8120 | fcn_00008120 ();
0x0000ef8a add r0, sp, 8 | r0 += var_8h;
0x0000ef8c blx 0x8120 | fcn_00008120 ();
0x0000ef90 mov r0, r4 | r0 = r4;
0x0000ef92 bl 0xce8c | fcn_0000ce8c (r0, r1, r2);
0x0000ef96 ldr r0, [r4, 0x7c] | r0 = *((r4 + 0x7c));
0x0000ef98 add r1, sp, 0x18 | r1 += var_18h;
0x0000ef9a str r5, [sp, 0x18] | var_18h = r5;
0x0000ef9c blx 0x86cc | fcn_000086cc ();
0x0000efa0 ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r3 != 0) {
0x0000efa2 cbz r3, 0xefc2 |
0x0000efa4 ldr r3, [pc, 0xb0] |
0x0000efa6 movw r2, 0x978 | r2 = 0x978;
0x0000efaa ldr r4, [pc, 0xb0] |
0x0000efac ldr r1, [pc, 0xb0] |
0x0000efae ldr r0, [pc, 0xb4] |
0x0000efb0 add r3, pc |
0x0000efb2 add r4, pc | r4 = 0x1e014;
0x0000efb4 add.w r3, r3, 0x608 | r3 = "_2";
0x0000efb8 add r1, pc | r1 = 0x1e01c;
0x0000efba str r4, [sp] | *(sp) = r4;
0x0000efbc add r0, pc | r0 = 0x1e026;
0x0000efbe blx 0x7a08 | resource_relation_get_reference ();
| }
0x0000efc2 ldr r2, [pc, 0xa4] |
0x0000efc4 ldr r3, [pc, 0x20] | r3 = *(0xefe8);
0x0000efc6 add r2, pc | r2 = 0x1e034;
0x0000efc8 ldr r3, [r2, r3] | r3 = *(0x1e034);
0x0000efca ldr r2, [r3] | r2 = *(0x1e034);
0x0000efcc ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0000efce eors r2, r3 | r2 ^= r3;
0x0000efd0 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000efd4 bne 0xefde |
0x0000efd6 mov r0, r4 | r0 = r4;
0x0000efd8 add sp, 0x24 |
0x0000efda pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x0000efde blx 0x828c | fcn_0000828c ();
0x0000efe2 nop |
0x0000efe4 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0xf0b4 */
| #include <stdint.h>
|
; (fcn) sym.osdp_logic_update () | void osdp_logic_update (uint32_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x0000f0b4 blmi 0x1e21a98 | __asm ("blmi aav.0x0000f6e8");
0x0000f0b8 push {r4, r5, r6, lr} |
0x0000f0ba sub sp, 0x10 |
0x0000f0bc add r2, pc | r2 += pc;
0x0000f0be ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0000f0c0 ldr r3, [r3] | r3 = *(r3);
0x0000f0c2 str r3, [sp, 0xc] | var_ch = r3;
0x0000f0c4 mov.w r3, 0 | r3 = 0;
0x0000f0c8 cmp r0, 0 |
| if (r0 == 0) {
0x0000f0ca beq 0xf1c0 | goto label_11;
| }
0x0000f0cc mov r4, r0 | r4 = r0;
0x0000f0ce mov r0, r1 | r0 = r1;
0x0000f0d0 mov r5, r1 | r5 = r1;
0x0000f0d2 blx 0x7de4 | r0 = fcn_00007de4 ();
0x0000f0d6 mov r6, r0 | r6 = r0;
0x0000f0d8 ldr r0, [r4] | r0 = *(r4);
0x0000f0da blx 0x74c4 | fcn_000074c4 ();
0x0000f0de mov r0, r5 | r0 = r5;
0x0000f0e0 blx 0x7a74 | g_strdup_printf ()
0x0000f0e4 str r0, [r4] | *(r4) = r0;
0x0000f0e6 mov r0, r4 | r0 = r4;
0x0000f0e8 bl 0xbd98 | r0 = fcn_0000bd98 (r0);
0x0000f0ec clz r0, r0 | r0 &= r0;
0x0000f0f0 cmp r6, 0xff |
0x0000f0f2 lsr.w r0, r0, 5 | r0 >>= 5;
0x0000f0f6 it eq |
| if (r6 != 0xff) {
0x0000f0f8 moveq r0, 0 | r0 = 0;
| }
0x0000f0fa cmp r0, 0 |
| if (r0 != 0) {
0x0000f0fc bne.w 0xf264 | goto label_12;
| }
| label_10:
0x0000f100 mov r0, r4 | r0 = r4;
0x0000f102 add r5, sp, 8 | r5 += var_8h;
0x0000f104 bl 0xce8c | fcn_0000ce8c (r0, r1, r2);
0x0000f108 ldr r0, [r4, 0x7c] | r0 = *((r4 + 0x7c));
0x0000f10a blx 0x7410 | fcn_00007410 ();
0x0000f10e movs r3, 0 | r3 = 0;
0x0000f110 ldr r0, [r4] | r0 = *(r4);
0x0000f112 mov r1, r5 | r1 = r5;
0x0000f114 str r3, [sp, 8] | var_8h = r3;
0x0000f116 blx 0x8584 | r0 = fcn_00008584 ();
0x0000f11a cmp r0, 0 |
| if (r0 != 0) {
0x0000f11c bne.w 0xf258 | goto label_13;
| }
| label_9:
0x0000f120 ldr r0, [r4] | r0 = *(r4);
0x0000f122 mov r1, r5 | r1 = r5;
0x0000f124 blx 0x8784 | r0 = fcn_00008784 ();
0x0000f128 cmp r0, 0 |
| if (r0 != 0) {
0x0000f12a bne.w 0xf24c | goto label_14;
| }
| label_8:
0x0000f12e ldr r0, [r4] | r0 = *(r4);
0x0000f130 mov r1, r5 | r1 = r5;
0x0000f132 blx 0x77fc | r0 = fcn_000077fc ();
0x0000f136 cmp r0, 0 |
| if (r0 != 0) {
0x0000f138 bne.w 0xf240 | goto label_15;
| }
| label_7:
0x0000f13c ldr r0, [r4] | r0 = *(r4);
0x0000f13e mov r1, r5 | r1 = r5;
0x0000f140 blx 0x7388 | r0 = fcn_00007388 ();
0x0000f144 cmp r0, 0 |
| if (r0 != 0) {
0x0000f146 bne 0xf234 | goto label_16;
| }
| label_6:
0x0000f148 ldr r0, [r4] | r0 = *(r4);
0x0000f14a mov r1, r5 | r1 = r5;
0x0000f14c blx 0x7254 | r0 = fcn_00007254 ();
0x0000f150 cmp r0, 0 |
| if (r0 != 0) {
0x0000f152 bne 0xf228 | goto label_17;
| }
| label_5:
0x0000f154 ldr r0, [r4] | r0 = *(r4);
0x0000f156 mov r1, r5 | r1 = r5;
0x0000f158 blx 0x8590 | r0 = g_list_nth_data ();
0x0000f15c cmp r0, 0 |
| if (r0 != 0) {
0x0000f15e bne 0xf21c | goto label_18;
| }
| label_4:
0x0000f160 ldr r0, [r4] | r0 = *(r4);
0x0000f162 mov r1, r5 | r1 = r5;
0x0000f164 blx 0x7868 | r0 = fcn_00007868 ();
0x0000f168 cmp r0, 0 |
| if (r0 != 0) {
0x0000f16a bne 0xf210 | goto label_19;
| }
| label_3:
0x0000f16c ldr r0, [r4] | r0 = *(r4);
0x0000f16e mov r1, r5 | r1 = r5;
0x0000f170 blx 0x745c | r0 = fcn_0000745c ();
0x0000f174 cmp r0, 0 |
| if (r0 != 0) {
0x0000f176 bne 0xf204 | goto label_20;
| }
| label_2:
0x0000f178 ldr r0, [r4] | r0 = *(r4);
0x0000f17a mov r1, r5 | r1 = r5;
0x0000f17c blx 0x81b4 | r0 = fcn_000081b4 ();
0x0000f180 cmp r0, 0 |
| if (r0 != 0) {
0x0000f182 bne 0xf1f8 | goto label_21;
| }
| label_1:
0x0000f184 ldr r0, [r4] | r0 = *(r4);
0x0000f186 mov r1, r5 | r1 = r5;
0x0000f188 blx 0x7618 | r0 = aadp_device_register_cred_inside_callback ();
| if (r0 != 0) {
0x0000f18c cbnz r0, 0xf1ec | goto label_22;
| }
| label_0:
0x0000f18e ldr.w r0, [r4, 0xac] | r0 = *((r4 + 0xac));
0x0000f192 blx 0x8524 | r0 = g_source_unref ();
0x0000f196 mov r2, r0 | r2 = r0;
0x0000f198 cbz r0, 0xf1de |
| while (1) {
0x0000f19a ldr r1, [pc, 0x100] |
0x0000f19c movs r3, 0 | r3 = 0;
0x0000f19e mov r2, r4 | r2 = r4;
0x0000f1a0 ldr r0, [r4, 0x78] | r0 = *((r4 + 0x78));
0x0000f1a2 add r1, pc | r1 = 0x1e444;
0x0000f1a4 blx 0x8560 | model_get_type ();
0x0000f1a8 ldr r2, [pc, 0xf4] |
0x0000f1aa ldr r3, [pc, 0xec] | r3 = *(0xf29a);
0x0000f1ac add r2, pc | r2 = 0x1e450;
0x0000f1ae ldr r3, [r2, r3] | r3 = *(0x1e450);
0x0000f1b0 ldr r2, [r3] | r2 = *(0x1e450);
0x0000f1b2 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0000f1b4 eors r2, r3 | r2 ^= r3;
0x0000f1b6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000f1ba bne 0xf290 | goto label_23;
| }
0x0000f1bc add sp, 0x10 |
0x0000f1be pop {r4, r5, r6, pc} |
| label_11:
0x0000f1c0 ldr r3, [pc, 0xe0] |
0x0000f1c2 mov.w r2, 0x9a0 | r2 = 0x9a0;
0x0000f1c6 ldr r4, [pc, 0xe0] |
0x0000f1c8 ldr r1, [pc, 0xe0] |
0x0000f1ca ldr r0, [pc, 0xe4] |
0x0000f1cc add r3, pc | r3 = 0x1e474;
0x0000f1ce add r4, pc | r4 = 0x1e47c;
0x0000f1d0 addw r3, r3, 0x61c | __asm ("addw r3, r3, aav.0x000000ff");
0x0000f1d4 add r1, pc | r1 = 0x1e484;
0x0000f1d6 str r4, [sp] | *(sp) = r4;
0x0000f1d8 add r0, pc | r0 = 0x1e48e;
0x0000f1da blx 0x7a08 | resource_relation_get_reference ();
0x0000f1de ldr r1, [pc, 0xd4] |
0x0000f1e0 ldr.w r0, [r4, 0xb0] | r0 = *((r4 + 0xb0));
0x0000f1e4 add r1, pc | r1 = 0x1e49e;
0x0000f1e6 blx 0x7960 | g_mutex_init ();
0x0000f1ea b 0xf19a |
| }
| label_22:
0x0000f1ec ldr r2, [sp, 8] | r2 = var_8h;
0x0000f1ee movs r1, 0x13 | r1 = 0x13;
0x0000f1f0 mov r0, r4 | r0 = r4;
0x0000f1f2 bl 0xc6bc | fcn_0000c6bc (r0, r1, r2);
0x0000f1f6 b 0xf18e | goto label_0;
| label_21:
0x0000f1f8 ldr r2, [sp, 8] | r2 = var_8h;
0x0000f1fa movs r1, 0x11 | r1 = 0x11;
0x0000f1fc mov r0, r4 | r0 = r4;
0x0000f1fe bl 0xc6bc | fcn_0000c6bc (r0, r1, r2);
0x0000f202 b 0xf184 | goto label_1;
| label_20:
0x0000f204 ldr r2, [sp, 8] | r2 = var_8h;
0x0000f206 movs r1, 0x10 | r1 = 0x10;
0x0000f208 mov r0, r4 | r0 = r4;
0x0000f20a bl 0xc6bc | fcn_0000c6bc (r0, r1, r2);
0x0000f20e b 0xf178 | goto label_2;
| label_19:
0x0000f210 ldr r2, [sp, 8] | r2 = var_8h;
0x0000f212 movs r1, 0xf | r1 = 0xf;
0x0000f214 mov r0, r4 | r0 = r4;
0x0000f216 bl 0xc6bc | fcn_0000c6bc (r0, r1, r2);
0x0000f21a b 0xf16c | goto label_3;
| label_18:
0x0000f21c ldr r2, [sp, 8] | r2 = var_8h;
0x0000f21e movs r1, 0x17 | r1 = 0x17;
0x0000f220 mov r0, r4 | r0 = r4;
0x0000f222 bl 0xc6bc | fcn_0000c6bc (r0, r1, r2);
0x0000f226 b 0xf160 | goto label_4;
| label_17:
0x0000f228 ldr r2, [sp, 8] | r2 = var_8h;
0x0000f22a movs r1, 0x16 | r1 = 0x16;
0x0000f22c mov r0, r4 | r0 = r4;
0x0000f22e bl 0xc6bc | fcn_0000c6bc (r0, r1, r2);
0x0000f232 b 0xf154 | goto label_5;
| label_16:
0x0000f234 ldr r2, [sp, 8] | r2 = var_8h;
0x0000f236 movs r1, 0x15 | r1 = 0x15;
0x0000f238 mov r0, r4 | r0 = r4;
0x0000f23a bl 0xc6bc | fcn_0000c6bc (r0, r1, r2);
0x0000f23e b 0xf148 | goto label_6;
| label_15:
0x0000f240 ldr r2, [sp, 8] | r2 = var_8h;
0x0000f242 movs r1, 0x14 | r1 = 0x14;
0x0000f244 mov r0, r4 | r0 = r4;
0x0000f246 bl 0xc6bc | fcn_0000c6bc (r0, r1, r2);
0x0000f24a b 0xf13c | goto label_7;
| label_14:
0x0000f24c ldr r2, [sp, 8] | r2 = var_8h;
0x0000f24e movs r1, 0xa | r1 = 0xa;
0x0000f250 mov r0, r4 | r0 = r4;
0x0000f252 bl 0xc6bc | fcn_0000c6bc (r0, r1, r2);
0x0000f256 b 0xf12e | goto label_8;
| label_13:
0x0000f258 ldr r2, [sp, 8] | r2 = var_8h;
0x0000f25a movs r1, 0xb | r1 = 0xb;
0x0000f25c mov r0, r4 | r0 = r4;
0x0000f25e bl 0xc6bc | fcn_0000c6bc (r0, r1, r2);
0x0000f262 b 0xf120 | goto label_9;
| label_12:
0x0000f264 ldr r1, [r4, 0x38] | r1 = *((r4 + 0x38));
0x0000f266 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x0000f268 blx 0x83b0 | gpio_set ();
0x0000f26c str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x0000f26e cmp r0, 0 |
| if (r0 == 0) {
0x0000f270 beq.w 0xf100 | goto label_10;
| }
0x0000f274 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0000f276 cmp r3, 0 |
| if (r3 == 0) {
0x0000f278 beq.w 0xf100 | goto label_10;
| }
0x0000f27c mov r5, r4 | r5 = r4;
0x0000f27e ldr r1, [r5, 0x10]! | r1 = *((r5 += 0x10));
0x0000f282 blx 0x7364 | fcn_00007364 ();
0x0000f286 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0000f28a vst1.32 {d16}, [r5] | __asm ("vst1.32 {d16}, [r5]");
0x0000f28e b 0xf100 | goto label_10;
| label_23:
0x0000f290 blx 0x828c | fcn_0000828c ();
0x0000f294 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0xff6c */
| #include <stdint.h>
|
; (fcn) sym.relay_logic_create () | void relay_logic_create (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0000ff6c svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x0000ff70 mov r8, r2 | r8 = r2;
0x0000ff72 ldr r2, [pc, 0x10c] |
0x0000ff74 mov r7, r3 | r7 = r3;
0x0000ff76 sub sp, 0x14 |
0x0000ff78 mov sl, r1 | sl = r1;
0x0000ff7a ldr r3, [pc, 0x108] | r3 = *(0x10086);
0x0000ff7c movs r1, 0x80 | r1 = 0x80;
0x0000ff7e ldr r5, [pc, 0x108] |
0x0000ff80 add r2, pc | r2 = 0x20006;
0x0000ff82 ldr.w fp, [pc, 0x108] |
0x0000ff86 mov sb, r0 | sb = r0;
0x0000ff88 ldr r3, [r2, r3] |
0x0000ff8a movs r6, 0 | r6 = 0;
0x0000ff8c ldr r2, [pc, 0x100] |
0x0000ff8e add r5, pc | r5 = 0x2001c;
0x0000ff90 adds r5, 0x20 | r5 += 0x20;
0x0000ff92 add fp, pc | fp = 0x20024;
0x0000ff94 ldr r3, [r3] | r3 = *(0x20006);
0x0000ff96 str r3, [sp, 0xc] | var_ch = r3;
0x0000ff98 mov.w r3, 0 | r3 = 0;
0x0000ff9c mov r0, fp | r0 = fp;
0x0000ff9e mov r3, r5 | r3 = r5;
0x0000ffa0 add r2, pc | r2 = 0x20034;
0x0000ffa2 blx 0x88fc | fcn_000088fc ();
0x0000ffa6 movs r0, 0x2c | r0 = 0x2c;
0x0000ffa8 blx 0x8440 | r0 = se_utils_secure_element_available ();
0x0000ffac mov r4, r0 | r4 = r0;
0x0000ffae mov r0, sl | r0 = sl;
| do {
0x0000ffb0 blx 0x7a74 | g_strdup_printf ()
0x0000ffb4 ldr r1, [pc, 0xdc] |
0x0000ffb6 mov r2, r6 | r2 = r6;
0x0000ffb8 strd r0, r8, [r4] | __asm ("strd r0, r8, [r4]");
0x0000ffbc ldr r0, [pc, 0xd8] |
0x0000ffbe add r1, pc | r1 = 0x20056;
0x0000ffc0 str r7, [r4, 8] | *((r4 + 8)) = r7;
0x0000ffc2 add r0, pc | r0 = 0x2005e;
0x0000ffc4 blx 0x7a44 | domain_osdp_get_keytype ();
0x0000ffc8 str r0, [r4, 0x28] | *((r4 + 0x28)) = r0;
0x0000ffca blx 0x89e0 | r0 = fcn_000089e0 ();
0x0000ffce mov r1, r0 | r1 = r0;
0x0000ffd0 mov r0, sl | r0 = sl;
0x0000ffd2 blx 0x8268 | fcn_00008268 ();
0x0000ffd6 invalid |
0x0000ffda mov r3, ip | r3 = ip;
0x0000ffdc mov r2, sb | r2 = sb;
0x0000ffde str r7, [sp] | *(sp) = r7;
0x0000ffe0 blx 0x7d14 | json_array_get_element ();
0x0000ffe4 str r0, [r4, 0x1c] | *((r4 + 0x1c)) = r0;
0x0000ffe6 blx 0x72c4 | interface_message_reply_new_failure ();
0x0000ffea str r0, [r4, 0x20] | *((r4 + 0x20)) = r0;
0x0000ffec blx 0x7a74 | g_strdup_printf ()
0x0000fff0 ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x0000fff2 blx 0x7a2c | g_object_ref ();
0x0000fff6 str r0, [r4, 0x24] | *((r4 + 0x24)) = r0;
0x0000fff8 blx 0x7a74 | g_strdup_printf ()
0x0000fffc ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x0000fffe mov r1, r6 | r1 = r6;
0x00010000 blx 0xe718 | void (*0xe718)() ();
0x00010002 invalid |
0x00010004 ldr r1, [r4, 0x28] | r1 = *((r4 + 0x28));
0x00010006 movs r0, 0x20 | r0 = 0x20;
0x00010008 invalid |
0x0001000c ldr r2, [pc, 0x3fc] | r2 = *(0x1040c);
0x0001000e ldr r2, [pc, 0x8c] | r2 = *(0x1009e);
0x00010010 ldr r1, [pc, 0x110] |
0x00010012 bne 0xffb0 |
| } while (r0 != 0x20);
0x00010014 lsls r7, r7, 3 | r7 <<= 3;
0x00010016 add r0, r0 | r0 += r0;
0x00010018 ldr r4, [r0, 0x24] | r4 = *((r0 + 0x24));
0x0001001a add r1, pc |
0x0001001c blx 0x81fc | fcn_000081fc ();
0x00010020 ldr r2, [pc, 0x80] |
0x00010022 str r0, [r4, 0x40] | *((r4 + 0x40)) = r0;
0x00010024 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x00010026 invalid |
0x00010028 str r0, [r0, 0x60] | *((r0 + 0x60)) = r0;
0x0001002a add r2, pc | r2 = 0x200d2;
0x0001002c ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x0001002e add r1, pc | r1 = 0x30174;
0x00010030 bl 0x9030 | r0 = void (*0x9030)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4);
0x00010034 movs r0, r0 |
0x00010036 bl 0xfff2a960 | void (*0xfff2a960)(uint32_t) (r0);
0x0001003a ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x0001003c add r1, sp, 8 | r1 += var_8h;
0x0001003e str r6, [sp, 8] | var_8h = r6;
0x00010040 invalid |
0x00010044 invalid |
0x00010048 ldr r4, [pc, 0x60] | r4 = *(0x100ac);
0x0001004a mov r3, r5 | r3 = r5;
0x0001004c ldr r1, [pc, 0x60] | r1 = *(0x100b0);
0x0001004e ldr r2, [pc, 0x100] |
0x00010050 ldr r3, [pc, 0x20] | r3 = *(0x10074);
| if (r0 != r0) {
0x00010052 bne 0x1014a | void (*0x1014a)() ();
| }
0x00010054 ldr r2, [r2, r3] | r2 = *(0x10152);
0x00010056 add r2, r3 | r2 += r3;
0x00010058 str r4, [sp] | *(sp) = r4;
0x0001005a blx 0x7a08 | resource_relation_get_reference ();
0x0001005e ldr r2, [pc, 0x54] |
0x00010060 ldr r3, [pc, 0x20] | r3 = *(0x10084);
0x00010062 add r2, pc | r2 = 0x2011c;
0x00010064 ldr r3, [r2, r3] | r3 = *(0x2011c);
0x00010066 ldr r2, [r3] | r2 = *(0x2011c);
0x00010068 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0001006a eors r2, r3 | r2 ^= r3;
0x0001006c mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00010070 bne 0x1007a |
0x00010072 movs r0, 0x20 | r0 = 0x20;
0x00010074 strb r4, [r4, 9] | *((r4 + 9)) = r4;
0x00010076 strd r8, pc, [sb], -0x3c0 | __asm ("strd r8, pc, [sb], -aav.0x000000ff");
| }
0x0001007a blx 0x828c | fcn_0000828c ();
0x0001007e nop |
0x00010080 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0x100b8 */
| #include <stdint.h>
|
; (fcn) sym.relay_logic_update () | void relay_logic_update (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000100b8 invalid |
0x000100bc ldr r3, [pc, 0x30] |
0x000100be mov r5, r1 | r5 = r1;
0x000100c0 movs r1, 0x80 | r1 = 0x80;
0x000100c2 ldr r2, [pc, 0x30] |
0x000100c4 ldr r0, [pc, 0x30] |
0x000100c6 add r3, pc | r3 = 0x201ba;
0x000100c8 adds r3, 0x34 | r3 += 0x34;
0x000100ca add r2, pc | r2 = 0x201c4;
0x000100cc add r0, pc | r0 = 0x201c8;
0x000100ce blx 0x88fc | fcn_000088fc ();
0x000100d2 ldr r0, [r4] | r0 = *(r4);
0x000100d4 blx 0x74c4 | fcn_000074c4 ();
0x000100d8 mov r0, r5 | r0 = r5;
0x000100da blx 0x7a74 | g_strdup_printf ()
0x000100de str r0, [r4] | *(r4) = r0;
0x000100e0 mov r0, r4 | r0 = r4;
0x000100e2 bl 0xf960 | fcn_0000f960 (r0);
0x000100e6 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x000100e8 pop.w {r3, r4, r5, lr} |
0x000100ec b.w 0x740c | return void (*0x740c)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0x10804 */
| #include <stdint.h>
|
; (fcn) sym.rs485port_logic_create () | void rs485port_logic_create (int16_t arg_38h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00010804 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00010808 mov r6, r2 | r6 = r2;
0x0001080a ldr r2, [pc, 0x210] |
0x0001080c mov r5, r3 | r5 = r3;
0x0001080e sub sp, 0x1c |
0x00010810 mov r7, r1 | r7 = r1;
0x00010812 ldr r3, [pc, 0x20c] | r3 = *(0x10a22);
0x00010814 mov sb, r0 | sb = r0;
0x00010816 add r2, pc | r2 = 0x21238;
0x00010818 ldr.w r8, [sp, 0x38] | r8 = *(arg_38h);
0x0001081c movs r0, 0x5c | r0 = 0x5c;
0x0001081e ldr r3, [r2, r3] |
0x00010820 ldr r3, [r3] | r3 = *(0x21238);
0x00010822 str r3, [sp, 0x14] | var_14h = r3;
0x00010824 mov.w r3, 0 | r3 = 0;
0x00010828 blx 0x8440 | r0 = se_utils_secure_element_available ();
0x0001082c mov r4, r0 | r4 = r0;
0x0001082e mov r0, r7 | r0 = r7;
0x00010830 blx 0x7a74 | g_strdup_printf ()
0x00010834 str r6, [r4, 4] | *((r4 + 4)) = r6;
0x00010836 str r0, [r4] | *(r4) = r0;
0x00010838 add.w r0, r4, 0x1c | r0 = r4 + 0x1c;
0x0001083c str r5, [r4, 0x2c] | *((r4 + 0x2c)) = r5;
0x0001083e str.w r8, [r4, 0x58] | __asm ("str.w r8, [r4, 0x58]");
0x00010842 blx 0x79a0 | fcn_000079a0 ();
0x00010846 blx 0x89e0 | r0 = fcn_000089e0 ();
0x0001084a mov r1, r0 | r1 = r0;
0x0001084c mov r0, r7 | r0 = r7;
0x0001084e blx 0x8268 | fcn_00008268 ();
0x00010852 mov r1, r5 | r1 = r5;
0x00010854 movs r5, 1 | r5 = 1;
0x00010856 mov r3, r6 | r3 = r6;
0x00010858 mov r2, sb | r2 = sb;
0x0001085a str r5, [sp] | *(sp) = r5;
0x0001085c movs r5, 0 | r5 = 0;
0x0001085e blx 0x7d14 | json_array_get_element ();
0x00010862 str r0, [r4, 0x48] | *((r4 + 0x48)) = r0;
0x00010864 blx 0x72c4 | interface_message_reply_new_failure ();
0x00010868 str r0, [r4, 0x4c] | *((r4 + 0x4c)) = r0;
0x0001086a blx 0x7a74 | g_strdup_printf ()
0x0001086e ldr r0, [r4, 0x4c] | r0 = *((r4 + 0x4c));
0x00010870 blx 0x7a2c | g_object_ref ();
0x00010874 str r0, [r4, 0x50] | *((r4 + 0x50)) = r0;
0x00010876 blx 0x7a74 | g_strdup_printf ()
0x0001087a ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x0001087c blx 0x742c | r0 = domain_osdp_get_key ();
0x00010880 mov r7, r0 | r7 = r0;
0x00010882 blx 0x8938 | domain_get_type ();
0x00010886 movs r1, 0 | r1 = 0;
0x00010888 mov r6, r0 | r6 = r0;
0x0001088a ldr r0, [r4, 0x4c] | r0 = *((r4 + 0x4c));
0x0001088c blx 0x7718 | fcn_00007718 ();
0x00010890 ldr r2, [pc, 0x190] |
0x00010892 mov r3, r4 | r3 = r4;
0x00010894 ldr r1, [pc, 0x190] |
0x00010896 strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x0001089a add r2, pc | r2 = 0x212c2;
0x0001089c ldr r0, [r4, 0x50] | r0 = *((r4 + 0x50));
0x0001089e add r1, pc | r1 = 0x212ca;
0x000108a0 blx 0x81fc | fcn_000081fc ();
0x000108a4 ldr r2, [pc, 0x184] |
0x000108a6 mov r3, r4 | r3 = r4;
0x000108a8 ldr r1, [pc, 0x184] |
0x000108aa strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x000108ae add r2, pc | r2 = 0x212de;
0x000108b0 ldr r0, [r4, 0x4c] | r0 = *((r4 + 0x4c));
0x000108b2 add r1, pc | r1 = 0x212e6;
0x000108b4 blx 0x81fc | fcn_000081fc ();
0x000108b8 mov r0, r7 | r0 = r7;
0x000108ba blx 0x72dc | link_message_get_message ();
0x000108be mov r2, r5 | r2 = r5;
0x000108c0 ldr r1, [pc, 0x170] |
0x000108c2 mov r5, r0 | r5 = r0;
0x000108c4 ldr r0, [pc, 0x170] |
0x000108c6 add r1, pc | r1 = 0x212fe;
0x000108c8 add r0, pc | r0 = 0x21304;
0x000108ca blx 0x7a44 | domain_osdp_get_keytype ();
0x000108ce ldr r2, [pc, 0x16c] |
0x000108d0 mov r1, r0 | r1 = r0;
0x000108d2 mov r0, r5 | r0 = r5;
0x000108d4 str r1, [sp, 8] | var_8h = r1;
0x000108d6 add r2, pc | r2 = 0x21318;
0x000108d8 blx 0x7c8c | fcn_00007c8c ();
0x000108dc ldr r2, [pc, 0x160] |
0x000108de mov r3, r0 | r3 = r0;
0x000108e0 ldr r1, [sp, 8] | r1 = var_8h;
0x000108e2 mov r0, r6 | r0 = r6;
0x000108e4 str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x000108e6 add r2, pc | r2 = 0x2132a;
0x000108e8 blx 0x79fc | r0 = interface_definition_create ();
0x000108ec mov r3, r0 | r3 = r0;
0x000108ee ldr r0, [r4] | r0 = *(r4);
0x000108f0 str r3, [r4, 0x54] | *((r4 + 0x54)) = r3;
0x000108f2 blx 0x7304 | r0 = fcn_00007304 ();
0x000108f6 mov r5, r0 | r5 = r0;
0x000108f8 ldr r0, [r4] | r0 = *(r4);
0x000108fa blx 0x87e4 | r0 = fcn_000087e4 ();
0x000108fe mov r6, r0 | r6 = r0;
0x00010900 blx 0x7814 | fcn_00007814 ();
0x00010904 str r0, [sp, 0xc] | var_ch = r0;
0x00010906 cmp r5, 0 |
0x00010908 beq 0x109d4 |
| while (1) {
0x0001090a ldr r1, [pc, 0x138] |
0x0001090c mov r2, r5 | r2 = r5;
0x0001090e add r1, pc | r1 = 0x21358;
0x00010910 blx 0x7a5c | fcn_00007a5c ();
0x00010914 ldr r1, [pc, 0x130] |
0x00010916 mov r2, r6 | r2 = r6;
0x00010918 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0001091a add r1, pc | r1 = 0x21366;
0x0001091c blx 0x7a5c | fcn_00007a5c ();
0x00010920 ldr r1, [pc, 0x128] |
0x00010922 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00010924 ldr r0, [r4, 0x54] | r0 = *((r4 + 0x54));
0x00010926 add r1, pc | r1 = 0x21376;
0x00010928 blx 0x7960 | g_mutex_init ();
0x0001092c add r0, sp, 0xc | r0 += var_ch;
0x0001092e blx 0x7f98 | fcn_00007f98 ();
0x00010932 mov r0, r4 | r0 = r4;
0x00010934 bl 0x10190 | fcn_00010190 (r0);
0x00010938 movs r3, 0 | r3 = 0;
0x0001093a ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x0001093c add r1, sp, 0x10 | r1 += var_10h;
0x0001093e str r3, [sp, 0x10] | var_10h = r3;
0x00010940 blx 0x86cc | fcn_000086cc ();
0x00010944 ldr r3, [sp, 0x10] | r3 = var_10h;
| if (r3 != 0) {
0x00010946 cbz r3, 0x10964 |
0x00010948 ldr r3, [pc, 0x104] |
0x0001094a mov.w r2, 0x176 | r2 = 0x176;
0x0001094e ldr r4, [pc, 0x104] |
0x00010950 ldr r1, [pc, 0x104] |
0x00010952 ldr r0, [pc, 0x108] |
0x00010954 add r3, pc | r3 = 0x213a8;
0x00010956 add r4, pc | r4 = 0x213b0;
0x00010958 adds r3, 0xd4 | r3 += 0xd4;
0x0001095a add r1, pc | r1 = 0x213b6;
0x0001095c str r4, [sp] | *(sp) = r4;
0x0001095e add r0, pc | r0 = 0x213c0;
0x00010960 blx 0x7a08 | resource_relation_get_reference ();
| }
0x00010964 ldr r5, [r4] | r5 = *(r4);
0x00010966 blx 0x7f50 | r0 = fcn_00007f50 ();
0x0001096a mov r1, r0 | r1 = r0;
0x0001096c mov r0, r5 | r0 = r5;
0x0001096e blx 0x8268 | fcn_00008268 ();
0x00010972 blx 0x752c | r0 = fcn_0000752c ();
0x00010976 mov r5, r0 | r5 = r0;
0x00010978 ldr r0, [pc, 0xe4] |
0x0001097a movs r1, 0x10 | r1 = 0x10;
0x0001097c add r0, pc | r0 = 0x213e0;
0x0001097e blx 0x895c | fcn_0000895c ();
0x00010982 sub.w r3, r5, 1 | r3 = r5 - 1;
0x00010986 cmp r0, 0 |
0x00010988 clz r3, r3 | r3 &= r3;
0x0001098c lsr.w r3, r3, 5 | r3 >>= 5;
0x00010990 it eq |
| if (r0 != 0) {
0x00010992 moveq r3, 0 | r3 = 0;
| }
| if (r3 != 0) {
0x00010994 cbnz r3, 0x109e2 | goto label_1;
| }
0x00010996 ldr r0, [pc, 0xcc] |
0x00010998 movs r1, 0x10 | r1 = 0x10;
0x0001099a add r0, pc | r0 = 0x21404;
0x0001099c blx 0x895c | fcn_0000895c ();
0x000109a0 subs r0, 0 |
0x000109a2 it ne |
| if (r0 == 0) {
0x000109a4 movne r0, 1 | r0 = 1;
| }
0x000109a6 cmp r5, 2 |
0x000109a8 it ne |
| if (r5 == 2) {
0x000109aa movne r0, 0 | r0 = 0;
| }
| if (r0 != 0) {
0x000109ac cbnz r0, 0x10a04 | goto label_2;
| }
0x000109ae ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
| if (r3 != 0) {
0x000109b0 cbnz r3, 0x109f2 | goto label_3;
| }
| label_0:
0x000109b2 add r0, sp, 8 | r0 += var_8h;
0x000109b4 blx 0x8120 | fcn_00008120 ();
0x000109b8 ldr r2, [pc, 0xac] |
0x000109ba ldr r3, [pc, 0x64] | r3 = *(0x10a22);
0x000109bc add r2, pc | r2 = 0x21428;
0x000109be ldr r3, [r2, r3] | r3 = *(0x21428);
0x000109c0 ldr r2, [r3] | r2 = *(0x21428);
0x000109c2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000109c4 eors r2, r3 | r2 ^= r3;
0x000109c6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000109ca bne 0x10a16 | goto label_4;
| }
0x000109cc mov r0, r4 | r0 = r4;
0x000109ce add sp, 0x1c |
0x000109d0 pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x000109d4 ldr r0, [r4] | r0 = *(r4);
0x000109d6 mov r1, r6 | r1 = r6;
0x000109d8 blx 0x89bc | fcn_000089bc ();
0x000109dc mov r5, r6 | r5 = r6;
0x000109de ldr r0, [sp, 0xc] | r0 = var_ch;
0x000109e0 b 0x1090a |
| }
| label_1:
0x000109e2 ldr r2, [pc, 0x88] |
0x000109e4 movs r1, 1 | r1 = 1;
0x000109e6 ldr r3, [pc, 0x88] |
0x000109e8 str r1, [r4, 0x34] | *((r4 + 0x34)) = r1;
0x000109ea add r2, pc | r2 = 0x2145c;
0x000109ec add r3, pc | r3 = 0x21462;
0x000109ee strd r2, r3, [r4, 0x40] | __asm ("strd r2, r3, [r4, 0x40]");
| do {
| label_3:
0x000109f2 ldr r2, [pc, 0x80] |
0x000109f4 mov r3, r5 | r3 = r5;
0x000109f6 ldr r0, [pc, 0x80] |
0x000109f8 movs r1, 0x40 | r1 = 0x40;
0x000109fa add r2, pc | r2 = 0x21474;
0x000109fc add r0, pc | r0 = 0x2147a;
0x000109fe blx 0x88fc | fcn_000088fc ();
0x00010a02 b 0x109b2 | goto label_0;
| label_2:
0x00010a04 ldr r2, [pc, 0x74] |
0x00010a06 movs r1, 1 | r1 = 1;
0x00010a08 ldr r3, [pc, 0x74] |
0x00010a0a str r1, [r4, 0x34] | *((r4 + 0x34)) = r1;
0x00010a0c add r2, pc | r2 = 0x2148c;
0x00010a0e add r3, pc | r3 = 0x21492;
0x00010a10 strd r2, r3, [r4, 0x40] | __asm ("strd r2, r3, [r4, 0x40]");
0x00010a14 b 0x109f2 |
| } while (1);
| label_4:
0x00010a16 blx 0x828c | fcn_0000828c ();
0x00010a1a nop |
0x00010a1c svc 0x8e | __asm ("svc 0x8e");
0x00010a1e movs r0, r0 |
0x00010a20 lsrs r4, r3, 0x20 | r4 = r3 >> 0x20;
0x00010a22 movs r0, r0 |
0x00010a24 ldr.w pc, [r3, 0xfff] | pc = *((r3 + 0xfff));
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0x10b1c */
| #include <stdint.h>
|
; (fcn) sym.rs485port_logic_update () | void rs485port_logic_update (uint32_t arg1, int16_t arg2) {
| int16_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
0x00010b1c mvnsmi lr, 0xb4000 | __asm ("mvnsmi lr, aav.0x000000ff");
0x00010b20 sub sp, 0xc |
0x00010b22 cmp r0, 0 |
| if (var_0h_2 == ) {
0x00010b24 beq 0x10c08 | goto label_0;
| }
0x00010b26 mov r4, r0 | r4 = r0;
0x00010b28 mov r6, r1 | r6 = r1;
0x00010b2a ldr r0, [r0] | r0 = *(r0);
0x00010b2c blx 0x87e4 | r0 = fcn_000087e4 ();
0x00010b30 mov r8, r0 | r8 = r0;
0x00010b32 ldr r0, [r4] | r0 = *(r4);
0x00010b34 blx 0x7304 | r0 = fcn_00007304 ();
0x00010b38 mov r5, r0 | r5 = r0;
0x00010b3a ldr r0, [r4] | r0 = *(r4);
0x00010b3c blx 0x7ed8 | r0 = fcn_00007ed8 ();
0x00010b40 mov sb, r0 | sb = r0;
0x00010b42 ldr r0, [r4] | r0 = *(r4);
0x00010b44 blx 0x8208 | fcn_00008208 ();
0x00010b48 blx 0x7550 | r0 = fcn_00007550 ();
0x00010b4c mov r7, r0 | r7 = r0;
0x00010b4e ldr r0, [r4] | r0 = *(r4);
0x00010b50 blx 0x74c4 | fcn_000074c4 ();
0x00010b54 mov r0, r6 | r0 = r6;
0x00010b56 blx 0x7a74 | g_strdup_printf ()
0x00010b5a mov r1, r5 | r1 = r5;
0x00010b5c str r0, [r4] | *(r4) = r0;
0x00010b5e blx 0x89bc | fcn_000089bc ();
0x00010b62 ldr r0, [r4] | r0 = *(r4);
0x00010b64 blx 0x87e4 | r0 = fcn_000087e4 ();
0x00010b68 cmp r8, r0 |
0x00010b6a ldr r6, [r4, 0x24] | r6 = *((r4 + 0x24));
0x00010b6c mov r5, r0 | r5 = r0;
| if (r8 == r0) {
0x00010b6e bne 0x10bb4 |
0x00010b70 cmp r6, 0 |
| if (r6 == 0) {
0x00010b72 beq 0x10bf0 | goto label_1;
| }
0x00010b74 ldr r0, [r4] | r0 = *(r4);
0x00010b76 blx 0x7ed8 | r0 = fcn_00007ed8 ();
0x00010b7a mov r6, r0 | r6 = r0;
0x00010b7c ldr r0, [r4] | r0 = *(r4);
0x00010b7e blx 0x8208 | fcn_00008208 ();
0x00010b82 cmp sb, r6 |
0x00010b84 mov r8, r0 | r8 = r0;
| if (sb == r6) {
0x00010b86 bne 0x10b90 |
0x00010b88 mov r1, r7 | r1 = r7;
0x00010b8a blx 0x8914 | r0 = domain_rs485port_set_baudrate ();
| if (r0 == 0) {
0x00010b8e cbz r0, 0x10bf0 | goto label_1;
| }
| }
0x00010b90 add.w sb, r4, 0x1c | sb = r4 + 0x1c;
0x00010b94 mov r0, sb | r0 = sb;
0x00010b96 blx 0x84c4 | g_source_destroy ();
0x00010b9a mov r0, r4 | r0 = r4;
0x00010b9c bl 0x10288 | fcn_00010288 (r0);
0x00010ba0 mov r3, r6 | r3 = r6;
0x00010ba2 mov r2, r8 | r2 = r8;
0x00010ba4 mov r1, r5 | r1 = r5;
0x00010ba6 mov r0, r4 | r0 = r4;
0x00010ba8 bl 0x104b0 | fcn_000104b0 (r0, r1, r2, r3);
0x00010bac mov r0, sb | r0 = sb;
0x00010bae blx 0x7c5c | fcn_00007c5c ();
0x00010bb2 b 0x10bf0 |
| } else {
0x00010bb4 ldr r2, [pc, 0x88] |
0x00010bb6 mov r0, r4 | r0 = r4;
0x00010bb8 ldr r1, [pc, 0x88] |
0x00010bba add r2, pc | r2 = 0x217fe;
0x00010bbc add r1, pc | r1 = 0x21804;
0x00010bbe bl 0x1038c | fcn_0001038c (r0, r1, r2);
| if (r6 == 0) {
0x00010bc2 cbz r6, 0x10c26 | goto label_2;
| }
0x00010bc4 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
| if (r0 != 0) {
0x00010bc6 cbz r0, 0x10bcc |
0x00010bc8 blx 0x8540 | fcn_00008540 ();
| }
0x00010bcc movw r0, 0x1388 | r0 = 0x1388;
0x00010bd0 blx 0x81c0 | fcn_000081c0 ();
0x00010bd4 ldr r1, [pc, 0x70] |
0x00010bd6 movs r3, 0 | r3 = 0;
0x00010bd8 mov r2, r4 | r2 = r4;
0x00010bda str r0, [r4, 0x18] | *((r4 + 0x18)) = r0;
0x00010bdc add r1, pc | r1 = 0x21828;
0x00010bde blx 0x7498 | domain_rs485port_get_sysdev ();
0x00010be2 ldr r1, [r4, 0x2c] | r1 = *((r4 + 0x2c));
0x00010be4 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00010be6 blx 0x8664 | fcn_00008664 ();
0x00010bea ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00010bec blx 0x85ac | fcn_000085ac ();
| }
| do {
| label_1:
0x00010bf0 mov r0, r4 | r0 = r4;
0x00010bf2 bl 0x10190 | fcn_00010190 (r0);
0x00010bf6 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x00010bf8 blx 0x7410 | fcn_00007410 ();
0x00010bfc mov r0, r7 | r0 = r7;
0x00010bfe add sp, 0xc |
0x00010c00 pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x00010c04 b.w 0x7208 | void (*0x7208)() ();
| label_0:
0x00010c08 ldr r3, [pc, 0x40] |
0x00010c0a movw r2, 0x1d5 | r2 = 0x1d5;
0x00010c0e ldr r4, [pc, 0x40] |
0x00010c10 ldr r1, [pc, 0x40] |
0x00010c12 ldr r0, [pc, 0x44] |
0x00010c14 add r3, pc |
0x00010c16 add r4, pc | r4 = 0x2186c;
0x00010c18 add.w r3, r3, 0x104 | r3 = 0x21968;
0x00010c1c add r1, pc | r1 = 0x21874;
0x00010c1e str r4, [sp] | *(sp) = r4;
0x00010c20 add r0, pc | r0 = 0x2187e;
0x00010c22 blx 0x7a08 | resource_relation_get_reference ();
| label_2:
0x00010c26 ldr r0, [r4] | r0 = *(r4);
0x00010c28 mov r1, r5 | r1 = r5;
0x00010c2a blx 0x89bc | fcn_000089bc ();
0x00010c2e ldr r2, [pc, 0x2c] |
0x00010c30 mov r0, r4 | r0 = r4;
0x00010c32 ldr r1, [pc, 0x2c] |
0x00010c34 add r2, pc | r2 = 0x21896;
0x00010c36 add r1, pc | r1 = 0x2189c;
0x00010c38 bl 0x1038c | fcn_0001038c (r0, r1, r2);
0x00010c3c b 0x10bf0 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0x12048 */
| #include <stdint.h>
|
; (fcn) sym.wiegand_device_logic_create () | void wiegand_device_logic_create (int16_t arg_2d0h, int16_t arg_3b0h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_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;
| int8_t var_15h;
| int32_t var_20h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00012048 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001204c mov r7, r2 | r7 = r2;
0x0001204e ldr r2, [pc, 0x210] |
0x00012050 mov r6, r3 | r6 = r3;
0x00012052 sub sp, 0x24 |
0x00012054 mov r8, r1 | r8 = r1;
0x00012056 ldr r3, [pc, 0x20c] | r3 = *(0x12266);
0x00012058 mov sb, r0 | sb = r0;
0x0001205a add r2, pc | r2 = 0x242c0;
0x0001205c ldr.w sl, [pc, 0x208] |
0x00012060 movs r0, 0x5c | r0 = 0x5c;
0x00012062 movs r5, 0 | r5 = 0;
0x00012064 ldr r3, [r2, r3] |
0x00012066 add sl, pc | sl = 0x242d2;
0x00012068 ldr.w fp, [pc, 0x200] |
0x0001206c ldr r3, [r3] | r3 = *(0x242c0);
0x0001206e str r3, [sp, 0x1c] | var_1ch = r3;
0x00012070 mov.w r3, 0 | r3 = 0;
0x00012074 blx 0x8440 | r0 = se_utils_secure_element_available ();
0x00012078 mov r4, r0 | r4 = r0;
0x0001207a str.w sl, [r0, 0x38] | __asm ("str.w sl, [r0, 0x38]");
0x0001207e mov r0, r8 | r0 = r8;
0x00012080 add fp, pc | fp = 0x242f0;
0x00012082 blx 0x7a74 | g_strdup_printf ()
0x00012086 str r5, [r4, 0x20] | *((r4 + 0x20)) = r5;
0x00012088 str r0, [r4] | *(r4) = r0;
0x0001208a add.w r0, r4, 0x30 | r0 = r4 + 0x30;
0x0001208e blx 0x79a0 | fcn_000079a0 ();
0x00012092 mov r0, r5 | r0 = r5;
0x00012094 blx 0x8154 | fcn_00008154 ();
0x00012098 str r6, [r4, 0xc] | *((r4 + 0xc)) = r6;
0x0001209a strd r7, r0, [r4, 4] | __asm ("strd r7, r0, [r4, 4]");
0x0001209c strb r1, [r0] | *(r0) = r1;
0x0001209e blx 0x89e0 | r0 = fcn_000089e0 ();
0x000120a2 mov r1, r0 | r1 = r0;
0x000120a4 mov r0, r8 | r0 = r8;
0x000120a6 blx 0x8268 | fcn_00008268 ();
0x000120aa mov r1, r6 | r1 = r6;
0x000120ac movs r6, 1 | r6 = 1;
0x000120ae mov r3, r7 | r3 = r7;
0x000120b0 mov r2, sb | r2 = sb;
0x000120b2 str r6, [sp] | *(sp) = r6;
0x000120b4 blx 0x7d14 | json_array_get_element ();
0x000120b8 str r0, [r4, 0x3c] | *((r4 + 0x3c)) = r0;
0x000120ba blx 0x77cc | fcn_000077cc ();
0x000120be str r0, [r4, 0x40] | *((r4 + 0x40)) = r0;
0x000120c0 blx 0x84dc | fcn_000084dc ();
0x000120c4 mov r1, r5 | r1 = r5;
0x000120c6 str r0, [r4, 0x44] | *((r4 + 0x44)) = r0;
0x000120c8 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x000120ca blx 0x7718 | fcn_00007718 ();
0x000120ce mov r1, r5 | r1 = r5;
0x000120d0 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x000120d2 blx 0x77c0 | fcn_000077c0 ();
0x000120d6 ldr r0, [r4, 0x3c] | r0 = *((r4 + 0x3c));
0x000120d8 blx 0x742c | r0 = domain_osdp_get_key ();
0x000120dc mov sb, r0 | sb = r0;
0x000120de ldr.w r8, [pc, 0x190] |
0x000120e2 blx 0x8938 | domain_get_type ();
0x000120e6 ldr r1, [pc, 0x18c] |
0x000120e8 mov r6, r0 | r6 = r0;
0x000120ea mov r2, r5 | r2 = r5;
0x000120ec mov r0, fp | r0 = fp;
0x000120ee add r8, pc | r8 = 0x24364;
0x000120f0 ldr r7, [pc, 0x184] |
0x000120f2 add r1, pc | r1 = 0x2436c;
0x000120f4 blx 0x7a44 | domain_osdp_get_keytype ();
0x000120f8 ldr r1, [pc, 0x180] |
0x000120fa mov r2, r5 | r2 = r5;
0x000120fc str r0, [sp, 8] | var_8h = r0;
0x000120fe mov r0, fp | r0 = fp;
0x00012100 add r7, pc | r7 = 0x2437c;
0x00012102 add r1, pc | r1 = 0x24382;
0x00012104 blx 0x7a44 | domain_osdp_get_keytype ();
0x00012108 ldr r1, [pc, 0x174] |
0x0001210a mov r2, r5 | r2 = r5;
0x0001210c str r0, [sp, 0xc] | var_ch = r0;
0x0001210e ldr r0, [pc, 0x174] |
0x00012110 add r1, pc | r1 = 0x24394;
0x00012112 add r0, pc | r0 = 0x2439c;
0x00012114 blx 0x7a44 | domain_osdp_get_keytype ();
0x00012116 fldmiax r6, {d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16, d17, d18, d19} | __asm ("fldmiax r6, {d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16, d17, d18, d19}");
0x0001211a mov r1, r8 | r1 = r8;
0x0001211c ldr r2, [sp, 0xc] | r2 = var_ch;
0x0001211e str r0, [sp, 0x10] | var_10h = r0;
0x00012120 mov r0, r6 | r0 = r6;
0x00012122 add r3, pc | r3 += pc;
0x00012124 blx 0x7914 | fcn_00007914 ();
0x00012128 ldr r3, [pc, 0x160] |
0x0001212a mov r1, r8 | r1 = r8;
0x0001212c ldr r2, [sp, 8] | r2 = var_8h;
0x0001212e str r0, [r4, 0x48] | *((r4 + 0x48)) = r0;
0x00012130 mov r0, r6 | r0 = r6;
0x00012132 add r3, pc | r3 = 0x243c2;
0x00012134 blx 0x7914 | fcn_00007914 ();
0x00012138 ldr r2, [pc, 0x154] |
0x0001213a ldr r1, [sp, 0x10] | r1 = var_10h;
0x0001213c str r0, [r4, 0x4c] | *((r4 + 0x4c)) = r0;
0x0001213e mov r0, r6 | r0 = r6;
0x00012140 add r2, pc | r2 = 0x243d4;
0x00012142 blx 0x79fc | interface_definition_create ();
0x00012146 mov r1, sl | r1 = sl;
0x00012148 mov r2, r5 | r2 = r5;
0x0001214a str r0, [r4, 0x50] | *((r4 + 0x50)) = r0;
0x0001214c blx 0x7960 | g_mutex_init ();
0x00012150 add r0, sp, 8 | r0 += var_8h;
0x00012152 blx 0x8120 | fcn_00008120 ();
0x00012156 add r0, sp, 0xc | r0 += var_ch;
0x00012158 blx 0x8120 | fcn_00008120 ();
0x0001215c add r0, sp, 0x10 | r0 += var_10h;
0x0001215e blx 0x8120 | fcn_00008120 ();
0x00012162 ldr r1, [pc, 0x130] |
0x00012164 mov r2, r5 | r2 = r5;
0x00012166 ldr r0, [pc, 0x130] |
0x00012168 add r1, pc | r1 = 0x24402;
0x0001216a add r0, pc | r0 = 0x24408;
0x0001216c blx 0x7a44 | domain_osdp_get_keytype ();
0x00012170 ldr r2, [pc, 0x128] |
0x00012172 mov r1, r0 | r1 = r0;
0x00012174 mov r0, r6 | r0 = r6;
0x00012176 str r1, [sp, 0x14] | var_14h = r1;
0x00012178 add r2, pc | r2 = 0x24418;
0x0001217a blx 0x79fc | r0 = interface_definition_create ();
0x0001217e mov r3, r0 | r3 = r0;
0x00012180 mov r0, sb | r0 = sb;
0x00012182 str r3, [r4, 0x54] | *((r4 + 0x54)) = r3;
0x00012184 blx 0x72dc | link_message_get_message ();
0x00012188 ldr r2, [pc, 0x114] |
0x0001218a ldr r1, [sp, 0x14] | r1 = var_14h;
0x0001218c add r2, pc | r2 = 0x24430;
0x0001218e blx 0x7c8c | r0 = fcn_00007c8c ();
0x00012192 mov r3, r0 | r3 = r0;
0x00012194 add r0, sp, 0x14 | r0 += var_14h;
0x00012196 str r3, [r4, 0x58] | *((r4 + 0x58)) = r3;
0x00012198 blx 0x8120 | fcn_00008120 ();
0x0001219c ldr r2, [pc, 0x104] |
0x0001219e mov r3, r4 | r3 = r4;
0x000121a0 mov r1, r7 | r1 = r7;
0x000121a2 strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x000121a4 strb r0, [r0, r4] | *((r0 + r4)) = r0;
0x000121a6 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x000121a8 add r2, pc | r2 = 0x24450;
0x000121aa blx 0x81fc | fcn_000081fc ();
0x000121ae ldr r2, [pc, 0xf8] |
0x000121b0 mov r3, r4 | r3 = r4;
0x000121b2 mov r1, r7 | r1 = r7;
0x000121b4 strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x000121b8 ldr r0, [r4, 0x4c] | r0 = *((r4 + 0x4c));
0x000121ba add r2, pc | r2 = 0x24468;
0x000121bc blx 0x81fc | fcn_000081fc ();
0x000121c0 ldr r2, [pc, 0xe8] |
0x000121c2 mov r3, r4 | r3 = r4;
0x000121c4 ldr r1, [pc, 0xe8] |
0x000121c6 strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x000121ca add r2, pc | r2 = 0x2447a;
0x000121cc ldr r0, [r4, 0x44] | r0 = *((r4 + 0x44));
0x000121ce add r1, pc | r1 = 0x24482;
0x000121d0 blx 0x81fc | fcn_000081fc ();
0x000121d4 ldr r2, [pc, 0xdc] |
0x000121d6 mov r3, r4 | r3 = r4;
0x000121d8 ldr r1, [pc, 0xdc] |
0x000121da strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x000121de add r2, pc | r2 = 0x24496;
0x000121e0 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x000121e2 add r1, pc | r1 = 0x2449e;
0x000121e4 blx 0x81fc | fcn_000081fc ();
0x000121e8 ldr r2, [pc, 0xd0] |
0x000121ea mov r3, r4 | r3 = r4;
0x000121ec ldr r1, [pc, 0xd0] |
0x000121ee strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x000121f2 add r2, pc | r2 = 0x244b2;
0x000121f4 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x000121f6 add r1, pc | r1 = 0x244ba;
0x000121f8 blx 0x81fc | fcn_000081fc ();
0x000121fc ldr r2, [pc, 0xc4] |
0x000121fe mov r3, r4 | r3 = r4;
0x00012200 ldr r1, [pc, 0xc4] |
0x00012202 strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x00012206 add r2, pc | r2 = 0x244ce;
0x00012208 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x0001220a add r1, pc | r1 = 0x244d6;
0x0001220c blx 0x81fc | fcn_000081fc ();
0x00012210 mov r0, r4 | r0 = r4;
0x00012212 bl 0x1126c | fcn_0001126c (r0);
0x00012216 ldr r0, [r4, 0x3c] | r0 = *((r4 + 0x3c));
0x00012218 add r1, sp, 0x18 | r1 += var_18h;
0x0001221a str r5, [sp, 0x18] | var_18h = r5;
0x0001221c blx 0x86cc | fcn_000086cc ();
0x00012220 ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r3 != 0) {
0x00012222 cbz r3, 0x12240 |
0x00012224 ldr r3, [pc, 0xa4] |
0x00012226 movw r2, 0x36a | r2 = 0x36a;
0x0001222a ldr r4, [pc, 0xa4] |
0x0001222c ldr r1, [pc, 0xa4] |
0x0001222e ldr r0, [pc, 0xa8] |
0x00012230 add r3, pc | r3 = 0x24500;
0x00012232 add r4, pc | r4 = 0x24508;
0x00012234 adds r3, 0x78 | r3 += 0x78;
0x00012236 add r1, pc | r1 = 0x2450e;
0x00012238 str r4, [sp] | *(sp) = r4;
0x0001223a add r0, pc | r0 = 0x24518;
0x0001223c blx 0x7a08 | resource_relation_get_reference ();
| }
0x00012240 ldr r2, [pc, 0x98] |
0x00012242 ldr r3, [pc, 0x20] | r3 = *(0x12266);
0x00012244 add r2, pc | r2 = 0x24524;
0x00012246 ldr r3, [r2, r3] | r3 = *(0x24524);
0x00012248 ldr r2, [r3] | r2 = *(0x24524);
0x0001224a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0001224c eors r2, r3 | r2 ^= r3;
0x0001224e mov.w r3, 0 | r3 = 0;
0x00012250 lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 == r0) {
0x00012252 bne 0x1225c |
0x00012254 mov r0, r4 | r0 = r4;
0x00012256 add sp, 0x24 |
0x00012258 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x0001225c blx 0x828c | fcn_0000828c ();
0x00012260 stm r7!, {r1, r3, r6} | *(r7!) = r1;
| *((r7! + 4)) = r3;
| *((r7! + 8)) = r6;
0x00012262 movs r0, r0 |
0x00012264 lsrs r4, r3, 0x20 | r4 = r3 >> 0x20;
0x00012266 movs r0, r0 |
0x00012268 ldrb r2, [r1, 0x15] | r2 = var_15h;
0x0001226a movs r0, r0 |
0x0001226c ldr r4, [r2, 0x34] | r4 = *((r2 + 0x34));
0x0001226e movs r0, r0 |
0x00012270 ldrh r6, [r0, 0x3a] | r6 = *((r0 + 0x3a));
0x00012272 movs r0, r0 |
0x00012274 str r2, [r3, 0x68] | *((r3 + 0x68)) = r2;
0x00012276 movs r0, r0 |
0x00012278 str r3, [sp, 0x3b0] | *(arg_3b0h) = r3;
0x0001227a movs r0, r0 |
0x0001227c str r2, [r3, 0x68] | *((r3 + 0x68)) = r2;
0x0001227e movs r0, r0 |
0x00012280 ldr r2, [sp, 0x2d0] | r2 = *(arg_2d0h);
0x00012282 movs r0, r0 |
0x00012284 ldrb r2, [r0, 0x12] | r2 = *((r0 + 0x12));
0x00012286 movs r0, r0 |
0x00012288 ldr r6, [r2, 0x30] | r6 = *((r2 + 0x30));
0x0001228a movs r0, r0 |
0x0001228c ldr r6, [r3, 0x2c] | r6 = *((r3 + 0x2c));
0x0001228e movs r0, r0 |
0x00012290 ldrb r4, [r4, 0x11] | r4 = *((r4 + 0x11));
0x00012292 movs r0, r0 |
0x00012294 ldrb r4, [r6, 0x13] | r4 = *((r6 + 0x13));
0x00012296 movs r0, r0 |
0x00012298 ldrb r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x0001229a movs r0, r0 |
0x0001229c ldrb r4, [r0, 0x14] | r4 = *((r0 + 0x14));
0x0001229e movs r0, r0 |
0x000122a0 ldrb r4, [r0, 0x14] | r4 = *((r0 + 0x14));
0x000122a2 movs r0, r0 |
0x000122a4 str.w pc, [r1, 0xfff] | __asm ("str.w pc, aav.0x000000ff");
0x000122a8 mrc p15, 3, apsr_nzcv, c11, c15, 7 | __asm ("mrc p15, 3, apsr_nzcv, c11, c15, 7");
0x000122ac bl 0x2fe2ae | void (*0x2fe2ae)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x000122b0 ldr r2, [r1, 0x20] | r2 = var_20h;
0x000122b2 movs r0, r0 |
0x000122b4 mcr p15, 1, pc, c3, c15, 7 | __asm ("mcr p15, 1, pc, c3, c15, 7");
0x000122b8 ldr r2, [r0, 0x20] | r2 = *((r0 + 0x20));
0x000122ba movs r0, r0 |
0x000122bc mcr p15, 0, pc, c3, c15, 7 | __asm ("mcr p15, 0, pc, c3, c15, 7");
0x000122c0 str r3, [sp, 8] | var_8h = r3;
0x000122c2 movs r0, r0 |
0x000122c4 invalid |
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0x122e0).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0x1245c */
| #include <stdint.h>
|
; (fcn) sym.wiegandport_logic_create () | void wiegandport_logic_create (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0001245c push.w {r4, r5, r6, r7, r8, lr} |
0x00012460 mov r5, r2 | r5 = r2;
0x00012462 ldr r2, [pc, 0xd4] |
0x00012464 mov r7, r3 | r7 = r3;
0x00012466 sub sp, 0x10 |
0x00012468 mov r6, r1 | r6 = r1;
0x0001246a ldr r3, [pc, 0xd0] | r3 = *(0x1253e);
0x0001246c mov r8, r0 | r8 = r0;
0x0001246e add r2, pc | r2 = 0x249ac;
0x00012470 movs r0, 0x14 | r0 = 0x14;
0x00012472 ldr r3, [r2, r3] |
0x00012474 ldr r3, [r3] | r3 = *(0x249ac);
0x00012476 str r3, [sp, 0xc] | var_ch = r3;
0x00012478 mov.w r3, 0 | r3 = 0;
0x0001247c blx 0x8440 | r0 = se_utils_secure_element_available ();
0x00012480 mov r4, r0 | r4 = r0;
0x00012482 str r5, [r0, 4] | *((r0 + 4)) = r5;
0x00012484 mov r0, r6 | r0 = r6;
0x00012486 blx 0x7a74 | g_strdup_printf ()
0x0001248a str r0, [r4] | *(r4) = r0;
0x0001248c blx 0x89e0 | r0 = fcn_000089e0 ();
0x00012490 mov r1, r0 | r1 = r0;
0x00012492 mov r0, r6 | r0 = r6;
0x00012494 blx 0x8268 | fcn_00008268 ();
0x00012498 mov r3, r5 | r3 = r5;
0x0001249a movs r5, 1 | r5 = 1;
0x0001249c mov r2, r8 | r2 = r8;
0x0001249e mov r1, r7 | r1 = r7;
0x000124a0 str r5, [sp] | *(sp) = r5;
0x000124a2 movs r5, 0 | r5 = 0;
0x000124a4 blx 0x7d14 | json_array_get_element ();
0x000124a8 str r0, [r4, 8] | *((r4 + 8)) = r0;
0x000124aa blx 0x72c4 | interface_message_reply_new_failure ();
0x000124ae str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000124b0 blx 0x7a74 | g_strdup_printf ()
0x000124b4 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000124b6 blx 0x7a2c | g_object_ref ();
0x000124ba str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000124bc blx 0x7a74 | g_strdup_printf ()
0x000124c0 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000124c2 mov r1, r5 | r1 = r5;
0x000124c4 blx 0x7718 | r0 = fcn_00007718 ();
0x000124c6 stmdb r8!, {r0, r2, r3, r4, sb, fp, lr} | __asm ("stmdb r8!, {r0, r2, r3, r4, sb, fp, lr}");
0x000124ca mov r3, r4 | r3 = r4;
0x000124cc ldr r1, [pc, 0x74] |
0x000124ce strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x000124d2 add r2, pc | r2 += pc;
0x000124d4 ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x000124d6 add r1, pc | r1 = 0x24a1e;
0x000124d8 blx 0x81fc | fcn_000081fc ();
0x000124dc ldr r2, [pc, 0x68] |
0x000124de mov r3, r4 | r3 = r4;
0x000124e0 ldr r1, [pc, 0x68] |
0x000124e2 strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x000124e6 add r2, pc | r2 = 0x24a32;
0x000124e8 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000124ea add r1, pc | r1 = 0x24a3a;
0x000124ec blx 0x81fc | fcn_000081fc ();
0x000124f0 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x000124f2 add r1, sp, 8 | r1 += var_8h;
0x000124f4 str r5, [sp, 8] | var_8h = r5;
0x000124f6 blx 0x86cc | fcn_000086cc ();
0x000124fa ldr r3, [sp, 8] | r3 = var_8h;
| if (r3 != 0) {
0x000124fc cbz r3, 0x12518 |
0x000124fe ldr r3, [pc, 0x50] |
0x00012500 movs r2, 0x6d | r2 = 0x6d;
0x00012502 ldr r4, [pc, 0x50] |
0x00012504 ldr r1, [pc, 0x50] |
0x00012506 ldr r0, [pc, 0x54] |
0x00012508 add r3, pc | r3 = 0x24a5e;
0x0001250a add r4, pc | r4 = 0x24a64;
0x0001250c adds r3, 0x24 | r3 += 0x24;
0x0001250e add r1, pc | r1 = 0x24a6a;
0x00012510 str r4, [sp] | *(sp) = r4;
0x00012512 add r0, pc | r0 = 0x24a74;
0x00012514 blx 0x7a08 | resource_relation_get_reference ();
0x00012516 invalid |
| }
0x00012518 ldr r2, [pc, 0x44] |
0x0001251a ldr r3, [pc, 0x20] | r3 = *(0x1253e);
0x0001251c add r2, pc | r2 = 0x24a80;
0x0001251e ldr r3, [r2, r3] | r3 = *(0x24a80);
0x00012520 ldr r2, [r3] | r2 = *(0x24a80);
0x00012522 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00012524 eors r2, r3 | r2 ^= r3;
0x00012526 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0001252a bne 0x12534 |
0x0001252c mov r0, r4 | r0 = r4;
0x0001252e add sp, 0x10 |
0x00012530 pop.w {r4, r5, r6, r7, r8, pc} |
| }
0x00012534 blx 0x828c | fcn_0000828c ();
0x00012538 stm r3!, {r1, r2, r4, r5} | *(r3!) = r1;
| *((r3! + 4)) = r2;
| *((r3! + 8)) = r4;
| *((r3! + 12)) = r5;
0x0001253a movs r0, r0 |
0x0001253c lsrs r4, r3, 0x20 | r4 = r3 >> 0x20;
0x0001253e movs r0, r0 |
0x00012540 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpacsio-businesslogic.so.0.0.55 @ 0x125a4 */
| #include <stdint.h>
|
; (fcn) sym.wiegandport_logic_update () | void wiegandport_logic_update (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000125a4 invalid |
0x000125a8 mov r5, r1 | r5 = r1;
0x000125aa ldr r0, [r0] | r0 = *(r0);
0x000125ac blx 0x74c4 | fcn_000074c4 ();
0x000125b0 mov r0, r5 | r0 = r5;
0x000125b2 blx 0x7a74 | g_strdup_printf ()
0x000125b6 str r0, [r4] | *(r4) = r0;
0x000125b8 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x000125ba pop.w {r3, r4, r5, lr} |
0x000125be b.w 0x740c | return void (*0x740c)() ();
| }
[*] Function printf used 33 times libpacsio-businesslogic.so.0.0.55